diff --git a/AlgebraicDataflowArchitectureModel/models/CustomerOffice.model b/AlgebraicDataflowArchitectureModel/models/CustomerOffice.model index 42cdf13..5714436 100644 --- a/AlgebraicDataflowArchitectureModel/models/CustomerOffice.model +++ b/AlgebraicDataflowArchitectureModel/models/CustomerOffice.model @@ -1,21 +1,21 @@ -channel CIO_AddCustomer { - out customers(db:Map, addCustomer(uid:Str, off:Str)) = insert(db, uid, {"off": off}) +channel AddCustomer { + out customers(csDB:Map, addCustomer(uid:Str, office:Str)) = insert(csDB, uid, {"office": office}) } -channel CIO_AddCampany { - out companies(db:Map, addCampany(cid:Str, add:Str)) = insert(db, cid, {"add": add}) +channel AddCampany { + out companies(cmDB:Map, addCampany(cid:Str, address:Str)) = insert(cmDB, cid, {"address": address}) } -channel CIO_SetCustomerOff(uid:Str) { - out customers.{uid}.off(cid:Str, setOff(cid2)) = cid2 +channel SetCustomerOffice(uid:Str) { + out customers.{uid}.office(prevCid:Str, setOffice(cid)) = cid } -channel CIO_SetCompanyAdd(cid:Str) { - out companies.{cid}.add(a1:Str, setAdd(a2)) = a2 +channel SetCompanyAddress(cid:Str) { + out companies.{cid}.address(prevAdd:Str, setAddress(add)) = add } -channel C(uid:Str) { - in customers.{uid}.off(cid, sync(cid2, add2)) = cid2 - in companies.{cid2}.add(a1, sync(cid2, add2)) = add2 - out customers.{uid}.add(a3:Str, sync(cid2, add2)) = add2 +channel UpdateCustomerAddress(uid:Str) { + in customers.{uid}.office(prevCid, updateCustomerAddress(cid, add)) = cid + in companies.{cid}.address(prevAdd, updateCustomerAddress(cid, add)) = add + out customers.{uid}.address(prevAdd, updateCustomerAddress(cid, add)) = add } diff --git a/AlgebraicDataflowArchitectureModel/models/GroupChat.model b/AlgebraicDataflowArchitectureModel/models/GroupChat.model index f199175..634ddf0 100644 --- a/AlgebraicDataflowArchitectureModel/models/GroupChat.model +++ b/AlgebraicDataflowArchitectureModel/models/GroupChat.model @@ -1,5 +1,5 @@ channel Signup { - out accounts(adb:Map, signUp(aid:Str)) = insert(adb, aid, {"notifications": nil}) + out accounts(acDB:Map, signUp(aid:Str)) = insert(acDB, aid, {"notifications": nil}) } channel HasRead(aid:Str) { @@ -7,7 +7,7 @@ } channel CreateGroup { - out groups(gdb:Map, createGroup(gid:Str)) = insert(gdb, gid, {"members": nil, "messages": nil}) + out groups(grDB:Map, createGroup(gid:Str)) = insert(grDB, gid, {"members": nil, "messages": nil}) } channel AddGroupMember(gid:Str) { diff --git a/AlgebraicDataflowArchitectureModel/models/OnlineBattleGame.model b/AlgebraicDataflowArchitectureModel/models/OnlineBattleGame.model index 846ffbf..d91b144 100644 --- a/AlgebraicDataflowArchitectureModel/models/OnlineBattleGame.model +++ b/AlgebraicDataflowArchitectureModel/models/OnlineBattleGame.model @@ -1,31 +1,31 @@ -channel CIO_Signup{ - out accounts(adb:Map, signUp(aid:Str, name:Str)) = insert(adb, aid, {"name": name}) +channel Signup { + out accounts(acDB:Map, signUp(aid:Str, name:Str)) = insert(acDB, aid, {"name": name}) } -channel CIO_ChangeName(aid:Str) { - out accounts.{aid}.name(prev_name:Str, changeName(name)) = name +channel ChangeName(aid:Str) { + out accounts.{aid}.name(prevName:Str, changeName(name)) = name } -channel CIO_CreateRoom { - out rooms(rdb:Map, createRoom(rid:Str, blue_id:Str, red_id:Str)) = insert(rdb, rid, {"blue_id": blue_id, "red_id": red_id}) +channel CreateRoom { + out rooms(rmDB:Map, createRoom(rid:Str, blueId:Str, redId:Str)) = insert(rmDB, rid, {"blue_id": blueId, "red_id": redId}) } -channel CIO_ChangeRed_id(rid:Str) { - out rooms.{rid}.red_id(prev_red_id:Str, changeRed_id(red_id)) = red_id +channel ChangeRedId(rid:Str) { + out rooms.{rid}.red_id(prevRedId:Str, changeRedId(redId)) = redId } -channel CIO_ChangeBlue_id(rid:Str) { - out rooms.{rid}.blue_id(prev_blue_id:Str, changeBlue_id(blue_id)) = blue_id +channel ChangeBlueId(rid:Str) { + out rooms.{rid}.blue_id(prevBlueId:Str, changeBlueId(blueId)) = blueId } -channel C_red(rid:Str) { - in rooms.{rid}.red_id(prev_aid:Str, sync(aid, name)) = aid - in accounts.{aid}.name(prev_name:Str, sync(aid, name)) = name - out rooms.{rid}.red_name(prev_name:Str, sync(aid, name)) = name +channel UpdateRedName(rid:Str) { + in rooms.{rid}.red_id(prevAid:Str, updateRedName(aid, name)) = aid + in accounts.{aid}.name(prevName:Str, updateRedName(aid, name)) = name + out rooms.{rid}.red_name(prevName:Str, updateRedName(aid, name)) = name } -channel C_blue(rid:Str) { - in rooms.{rid}.blue_id(prev_aid:Str, sync(aid, name)) = aid - in accounts.{aid}.name(prev_name:Str, sync(aid, name)) = name - out rooms.{rid}.blue_name(prev_name:Str, sync(aid, name)) = name +channel UpdateBlueName(rid:Str) { + in rooms.{rid}.blue_id(prevAid:Str, updateBlueName(aid, name)) = aid + in accounts.{aid}.name(prevName:Str, updateBlueName(aid, name)) = name + out rooms.{rid}.blue_name(prevName:Str, updateBlueName(aid, name)) = name } \ No newline at end of file diff --git a/AlgebraicDataflowArchitectureModel/models/OnlineBattleGame2.model b/AlgebraicDataflowArchitectureModel/models/OnlineBattleGame2.model index a5a6f57..291c9eb 100644 --- a/AlgebraicDataflowArchitectureModel/models/OnlineBattleGame2.model +++ b/AlgebraicDataflowArchitectureModel/models/OnlineBattleGame2.model @@ -1,5 +1,5 @@ channel Signup { - out accounts(adb:Map, signUp(aid:Str, name:Str)) = insert(adb, aid, {"name": name, "point": 0}) + out accounts(acDB:Map, signUp(aid:Str, name:Str)) = insert(acDB, aid, {"name": name, "point": 0}) } channel ChangeName(aid:Str) { @@ -7,7 +7,7 @@ } channel CreateRoom { - out rooms(rdb:Map, createRoom(rid:Str)) = insert(rdb, rid, {"members": nil, "battle": false}) + out rooms(rmDB:Map, createRoom(rid:Str)) = insert(rmDB, rid, {"members": nil, "battle": false}) } channel AddRoomMember(rid:Str) { @@ -15,19 +15,19 @@ } channel Battle(rid:Str) { - out rooms.{rid}.battle(prevState, battle(state:Bool)) = state + out rooms.{rid}.battle(prevHasWon, battle(hasWon:Bool)) = hasWon } -channel RoomName(rid:Str, mno:Int) { - in rooms.{rid}.members.{mno}.id(prevMid:Str, nameSync(mid, name)) = mid - in accounts.{mid}.name(prevName:Str, nameSync(mid, name)) = name - out rooms.{rid}.members.{mno}.name(prevName:Str, nameSync(mid, name)) = name +channel UpdateName(rid:Str, mno:Int) { + in rooms.{rid}.members.{mno}.id(prevMid:Str, updateName(mid, name)) = mid + in accounts.{mid}.name(prevName:Str, updateName(mid, name)) = name + out rooms.{rid}.members.{mno}.name(prevName:Str, updateName(mid, name)) = name } -channel RoomResult(rid:Str) { - in rooms.{rid}.battle(prevState, pointSync(hasWon, mid)) = hasWon +channel UpdatePoint(rid:Str) { + in rooms.{rid}.battle(prevState, updatePoint(hasWon, mid)) = hasWon for EachMember(mno:Int) { - in rooms.{rid}.members.{mno}.id(prevMid:Str, pointSync(hasWon, mid)) = mid - out accounts.{mid}.point(prevPoint:Int, pointSync(hasWon, mid)) = if(hasWon, prevPoint + 1, prevPoint) + in rooms.{rid}.members.{mno}.id(prevMid:Str, updatePoint(hasWon, mid)) = mid + out accounts.{mid}.point(prevPoint:Int, updatePoint(hasWon, mid)) = if(hasWon, prevPoint + 1, prevPoint) } } diff --git a/AlgebraicDataflowArchitectureModel/models/Twitter.model b/AlgebraicDataflowArchitectureModel/models/Twitter.model index 0b2cd2a..e5c46a8 100644 --- a/AlgebraicDataflowArchitectureModel/models/Twitter.model +++ b/AlgebraicDataflowArchitectureModel/models/Twitter.model @@ -10,7 +10,7 @@ out accounts.{id}.followees(fwList:List, addFollowee(flwId:Str)) = append(fwList, flwId) } -channel Timeline(myId:Str) { +channel UpdateTimeline(myId:Str) { in accounts.{myId}.tweets(t1:List, m) = m.myTweets for EachFollowee(no:Int) { in accounts.{myId}.followees.{no}(id:Str, m) = m.flw.{no}.id diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java index 6957304..07993fa 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java @@ -84,11 +84,13 @@ thisClass = thisClass.getSuperclass(); } for (int i = 0; i < children.size(); i++) { - HashMap terms = children.get(i).getSubTerms(clazz); - for (Entry term: terms.entrySet()) { - Position pos = term.getKey(); - pos.addHeadOrder(i); - subTerms.put(pos, term.getValue()); + if (children.get(i) != null) { + HashMap terms = children.get(i).getSubTerms(clazz); + for (Entry term: terms.entrySet()) { + Position pos = term.getKey(); + pos.addHeadOrder(i); + subTerms.put(pos, term.getValue()); + } } } return subTerms; @@ -259,7 +261,11 @@ public Object clone() { Term newTerm = new Term(symbol); for (Expression e: children) { - newTerm.addChild((Expression) e.clone()); + if (e != null) { + newTerm.addChild((Expression) e.clone()); + } else { + newTerm.addChild(null); + } } newTerm.type = type; return newTerm; @@ -282,7 +288,11 @@ String exp = symbol.toString() + "("; String delimiter = ""; for (Expression e: children) { - exp += (delimiter + e.toString()); + if (e != null) { + exp += (delimiter + e.toString()); + } else { + exp += (delimiter + "null"); + } delimiter = ","; } return exp + ")"; diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java index b6c4ad3..30a7465 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java @@ -21,19 +21,6 @@ super(symbol); } - public Type getType() { - if (symbol.equals(DataConstraintModel.dotParam)) { - Type valueType = null; - if (getChild(1) instanceof Term) { - valueType = ((Term) getChild(1)).getType(); - } else if (getChild(1) instanceof Variable) { - valueType = ((Variable) getChild(1)).getType(); - } - if (valueType != null) return valueType; - } - return super.getType(); - } - @Override public Expression reduce() { Expression reducedTerm = super.reduce(); @@ -100,6 +87,9 @@ keySet.add(keyName); } else if (jsonType instanceof JsonType) { keySet.addAll(((JsonType) jsonType).getKeys()); + if (keySet.size() == 0) { + keySet.add(keyName); + } } for (String key: keySet) { Term addMemberTerm = new Term(DataConstraintModel.addMember); // addMember(jsonTerm, key, v) diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataTransferChannel.java b/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataTransferChannel.java index 9466c25..d6a81d9 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataTransferChannel.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataTransferChannel.java @@ -364,7 +364,7 @@ for (ChannelMember otherCm: substitutedPositionsInMessage.keySet()) { for (Position otherPos: substitutedPositionsInMessage.get(otherCm)) { for (Position thisPos: dependingVarPosInMessage) { - if (thisPos.isAncestorOf(otherPos)) { + if (thisPos.isAncestorOf(otherPos) && otherCm != cm) { dependingChannelMembers.add(otherCm); break; } @@ -382,7 +382,7 @@ for (ChannelMember otherCm: substitutedPositionsInMessage.keySet()) { for (Position otherPos: substitutedPositionsInMessage.get(otherCm)) { for (Position thisPos: dependingVarPosInMessage) { - if (thisPos.isAncestorOf(otherPos)) { + if (thisPos.isAncestorOf(otherPos) && otherCm != cm) { dependingChannelMembers.add(otherCm); break; } @@ -400,7 +400,7 @@ for (ChannelMember otherCm: substitutedPositionsInMessage.keySet()) { for (Position otherPos: substitutedPositionsInMessage.get(otherCm)) { for (Position thisPos: dependingVarPosInMessage) { - if (thisPos.isAncestorOf(otherPos)) { + if (thisPos.isAncestorOf(otherPos) && otherCm != cm) { dependingChannelMembers.add(otherCm); break; }