Changeset 21
- Timestamp:
- 09/22/20 08:52:04 (4 years ago)
- Files:
-
- 66 added
- 108 edited
Legend:
- Unmodified
- Added
- Removed
-
bidspace/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>bidspace</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 16 16 <passwd>${env.ARTIFACTORY_PASS}</passwd> 17 17 <jackson-2-version>2.9.10</jackson-2-version> 18 <geniusweb.version>1. 4.4</geniusweb.version>18 <geniusweb.version>1.5.0</geniusweb.version> 19 19 </properties> 20 20 … … 43 43 <groupId>tudelft.utilities</groupId> 44 44 <artifactId>immutablelist</artifactId> 45 <version>1.1. 0</version>45 <version>1.1.1</version> 46 46 </dependency> 47 47 -
boa/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>boa</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
boa/src/main/java/geniusweb/boa/BoaParty.java
r20 r21 6 6 import geniusweb.boa.acceptancestrategy.AcceptanceStrategy; 7 7 import geniusweb.boa.biddingstrategy.BiddingStrategy; 8 import geniusweb.inform.Settings; 8 9 import geniusweb.opponentmodel.OpponentModel; 9 import geniusweb.party.inform.Settings;10 10 import tudelft.utilities.logging.Reporter; 11 11 -
boa/src/main/java/geniusweb/boa/BoaState.java
r20 r21 12 12 import geniusweb.boa.acceptancestrategy.AcceptanceStrategy; 13 13 import geniusweb.boa.biddingstrategy.BiddingStrategy; 14 import geniusweb.inform.Settings; 14 15 import geniusweb.issuevalue.Bid; 15 16 import geniusweb.opponentmodel.OpponentModel; 16 import geniusweb.party.inform.Settings;17 17 import geniusweb.profile.Profile; 18 18 import geniusweb.progress.Progress; -
boa/src/main/java/geniusweb/boa/DefaultBoa.java
r20 r21 11 11 import geniusweb.boa.acceptancestrategy.AcceptanceStrategy; 12 12 import geniusweb.boa.biddingstrategy.BiddingStrategy; 13 import geniusweb.inform.ActionDone; 14 import geniusweb.inform.Finished; 15 import geniusweb.inform.Inform; 16 import geniusweb.inform.Settings; 17 import geniusweb.inform.YourTurn; 13 18 import geniusweb.issuevalue.Bid; 14 19 import geniusweb.opponentmodel.OpponentModel; 15 20 import geniusweb.party.Capabilities; 16 21 import geniusweb.party.DefaultParty; 17 import geniusweb.party.inform.ActionDone;18 import geniusweb.party.inform.Finished;19 import geniusweb.party.inform.Inform;20 import geniusweb.party.inform.Settings;21 import geniusweb.party.inform.YourTurn;22 22 import geniusweb.profileconnection.ProfileConnectionFactory; 23 23 import geniusweb.profileconnection.ProfileInterface; -
boa/src/main/java/geniusweb/boa/acceptancestrategy/AcceptanceStrategy.java
r20 r21 3 3 import geniusweb.boa.BoaParty; 4 4 import geniusweb.boa.BoaState; 5 import geniusweb.inform.Settings; 5 6 import geniusweb.issuevalue.Bid; 6 import geniusweb.party.inform.Settings;7 7 8 8 /** -
boa/src/main/java/geniusweb/boa/acceptancestrategy/TimeDependentAcceptanceStrategy.java
r20 r21 6 6 import geniusweb.boa.BoaState; 7 7 import geniusweb.boa.biddingstrategy.TimeDependentBiddingStrategy; 8 import geniusweb.inform.Settings; 8 9 import geniusweb.issuevalue.Bid; 9 import geniusweb.party.inform.Settings;10 10 import geniusweb.profile.Profile; 11 11 import geniusweb.profile.utilityspace.LinearAdditive; -
boa/src/main/java/geniusweb/boa/biddingstrategy/BiddingStrategy.java
r20 r21 4 4 import geniusweb.boa.BoaParty; 5 5 import geniusweb.boa.BoaState; 6 import geniusweb. party.inform.Settings;6 import geniusweb.inform.Settings; 7 7 8 8 /** -
boa/src/main/java/geniusweb/boa/biddingstrategy/TimeDependentBiddingStrategy.java
r20 r21 13 13 import geniusweb.actions.PartyId; 14 14 import geniusweb.boa.BoaState; 15 import geniusweb.inform.Settings; 15 16 import geniusweb.issuevalue.Bid; 16 import geniusweb.party.inform.Settings;17 17 import geniusweb.profile.Profile; 18 18 import geniusweb.profile.utilityspace.LinearAdditive; -
boa/src/test/java/geniusweb/boa/BoaPartyTest.java
r20 r21 24 24 import geniusweb.boa.biddingstrategy.BiddingStrategy; 25 25 import geniusweb.connection.ConnectionEnd; 26 import geniusweb.inform.ActionDone; 27 import geniusweb.inform.Inform; 28 import geniusweb.inform.Settings; 29 import geniusweb.inform.YourTurn; 26 30 import geniusweb.issuevalue.Bid; 27 31 import geniusweb.issuevalue.DiscreteValue; 28 32 import geniusweb.issuevalue.Domain; 29 33 import geniusweb.opponentmodel.OpponentModel; 30 import geniusweb.party.inform.ActionDone;31 import geniusweb.party.inform.Inform;32 import geniusweb.party.inform.Settings;33 import geniusweb.party.inform.YourTurn;34 34 import geniusweb.progress.Progress; 35 35 import geniusweb.references.Parameters; -
boa/src/test/java/geniusweb/boa/acceptancestrategy/TimeDepAccStratTest.java
r20 r21 16 16 import geniusweb.bidspace.Interval; 17 17 import geniusweb.boa.BoaState; 18 import geniusweb.inform.Settings; 18 19 import geniusweb.issuevalue.Bid; 19 import geniusweb.party.inform.Settings;20 20 import geniusweb.profile.Profile; 21 21 import geniusweb.profile.utilityspace.LinearAdditive; … … 46 46 47 47 TimeDependentAcceptanceStrategy ac = new TimeDependentAcceptanceStrategy() { 48 @Override 48 49 protected BidsWithUtility getBidspace(Profile profile) { 49 50 return testbidspace; … … 52 53 // we use default e=1, k=0 which means p(0)=1 53 54 54 when(progress.get(any())).thenReturn( (Double)0.0d);55 when(progress.get(any())).thenReturn(0.0d); 55 56 56 57 when(linearprofile.getUtility(eq(bid1))) … … 67 68 68 69 TimeDependentAcceptanceStrategy ac = new TimeDependentAcceptanceStrategy() { 70 @Override 69 71 protected BidsWithUtility getBidspace(Profile profile) { 70 72 return testbidspace; … … 73 75 // we use default e=1, k=0 which means p(0)=1 74 76 75 when(progress.get(any())).thenReturn( (Double)0.0d);77 when(progress.get(any())).thenReturn(0.0d); 76 78 77 79 when(linearprofile.getUtility(eq(bid1))) … … 87 89 88 90 TimeDependentAcceptanceStrategy ac = new TimeDependentAcceptanceStrategy() { 91 @Override 89 92 protected BidsWithUtility getBidspace(Profile profile) { 90 93 return testbidspace; … … 93 96 // we use default e=1, k=0 which means p(1)=0 94 97 95 when(progress.get(any())).thenReturn( (Double)1.0d);98 when(progress.get(any())).thenReturn(1.0d); 96 99 97 100 when(linearprofile.getUtility(eq(bid1))) … … 110 113 111 114 TimeDependentAcceptanceStrategy ac = new TimeDependentAcceptanceStrategy() { 115 @Override 112 116 protected BidsWithUtility getBidspace(Profile profile) { 113 117 return testbidspace; … … 116 120 // we use default e=1, k=0 which means p(1)=resValue. 117 121 118 when(progress.get(any())).thenReturn( (Double)1.0d);122 when(progress.get(any())).thenReturn(1.0d); 119 123 120 124 when(linearprofile.getUtility(eq(bid1))) -
boa/src/test/java/geniusweb/boa/biddingstrategy/TimeDepBidStratTest.java
r20 r21 17 17 import geniusweb.actions.Offer; 18 18 import geniusweb.boa.BoaState; 19 import geniusweb.inform.Settings; 19 20 import geniusweb.issuevalue.Bid; 20 21 import geniusweb.issuevalue.DiscreteValue; 21 import geniusweb.party.inform.Settings;22 22 import geniusweb.profile.utilityspace.LinearAdditive; 23 23 import geniusweb.progress.Progress; … … 46 46 47 47 biddingstrat = new TimeDependentBiddingStrategy() { 48 @Override 48 49 protected ExtendedUtilSpace getBidSpace(LinearAdditive profile) { 49 50 return extUtilSpace; -
collectparties.sh
r20 r21 7 7 rm -rf collectedparties 8 8 mkdir collectedparties 9 VERSION=1. 4.49 VERSION=1.5.0 10 10 11 11 cp "exampleparties/anac2019/agentgg/target/agentgg-${VERSION}-jar-with-dependencies.jar" collectedparties -
design/classdiagram.graphml
r19 r21 795 795 <y:Realizers active="0"> 796 796 <y:GroupNode> 797 <y:Geometry height="353.4990234375" width="4 36.46484375" x="1255.75146484375" y="613.58349609375"/>797 <y:Geometry height="353.4990234375" width="443.343994140625" x="1248.872314453125" y="613.58349609375"/> 798 798 <y:Fill color="#F5F5F5" transparent="false"/> 799 799 <y:BorderStyle color="#000000" type="dashed" width="1.0"/> 800 <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4 36.46484375" x="0.0" xml:space="preserve" y="0.0">Party</y:NodeLabel>800 <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="443.343994140625" x="0.0" xml:space="preserve" y="0.0">Party</y:NodeLabel> 801 801 <y:Shape type="roundrectangle"/> 802 802 <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/> 803 803 <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/> 804 <y:BorderInsets bottom="0" bottomF="0.0" left=" 0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>804 <y:BorderInsets bottom="0" bottomF="0.0" left="7" leftF="6.879150390625" right="0" rightF="0.0" top="0" topF="0.0"/> 805 805 </y:GroupNode> 806 806 <y:GroupNode> … … 860 860 <y:Realizers active="0"> 861 861 <y:GroupNode> 862 <y:Geometry height="2 02.666015625" width="272.1669921875" x="1270.75146484375" y="650.24951171875"/>862 <y:Geometry height="274.3256133960184" width="255.8809034887986" x="1270.75146484375" y="650.24951171875"/> 863 863 <y:Fill color="#F5F5F5" transparent="false"/> 864 864 <y:BorderStyle color="#000000" type="dashed" width="1.0"/> 865 <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="2 72.1669921875" x="0.0" xml:space="preserve" y="0.0">inform</y:NodeLabel>865 <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="255.8809034887986" x="0.0" xml:space="preserve" y="0.0">inform</y:NodeLabel> 866 866 <y:Shape type="roundrectangle"/> 867 867 <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/> … … 870 870 </y:GroupNode> 871 871 <y:GroupNode> 872 <y:Geometry height="50.0" width="50.0" x=" 0.0" y="60.0"/>872 <y:Geometry height="50.0" width="50.0" x="1270.75146484375" y="650.24951171875"/> 873 873 <y:Fill color="#F5F5F5" transparent="false"/> 874 874 <y:BorderStyle color="#000000" type="dashed" width="1.0"/> … … 886 886 <data key="d6"> 887 887 <y:ShapeNode> 888 <y:Geometry height="30.0" width="52.80078125" x="13 70.67138671875" y="746.91552734375"/>888 <y:Geometry height="30.0" width="52.80078125" x="1353.0337261632803" y="738.8943206568053"/> 889 889 <y:Fill color="#FFCC00" transparent="false"/> 890 890 <y:BorderStyle color="#000000" type="line" width="1.0"/> … … 897 897 <data key="d6"> 898 898 <y:ShapeNode> 899 <y:Geometry height="30.0" width="81.693359375" x="1 446.22509765625" y="740.91552734375"/>899 <y:Geometry height="30.0" width="81.693359375" x="1308.1947553690638" y="686.91552734375"/> 900 900 <y:Fill color="#FFCC00" transparent="false"/> 901 901 <y:BorderStyle color="#000000" type="line" width="1.0"/> … … 908 908 <data key="d6"> 909 909 <y:ShapeNode> 910 <y:Geometry height="30.0" width="60.640625" x="1 285.75146484375" y="692.91552734375"/>910 <y:Geometry height="30.0" width="60.640625" x="1450.9917433325486" y="705.6830051732845"/> 911 911 <y:Fill color="#FFCC00" transparent="false"/> 912 912 <y:BorderStyle color="#000000" type="line" width="1.0"/> … … 919 919 <data key="d6"> 920 920 <y:ShapeNode> 921 <y:Geometry height="30.0" width="62.62109375" x="138 8.76123046875" y="686.91552734375"/>921 <y:Geometry height="30.0" width="62.62109375" x="1384.34912109375" y="809.2347228857868"/> 922 922 <y:Fill color="#FFCC00" transparent="false"/> 923 923 <y:BorderStyle color="#000000" type="line" width="1.0"/> … … 930 930 <data key="d6"> 931 931 <y:ShapeNode> 932 <y:Geometry height="30.0" width="68.59765625" x="1 402.77294921875" y="807.91552734375"/>932 <y:Geometry height="30.0" width="68.59765625" x="1285.75146484375" y="809.2347228857868"/> 933 933 <y:Fill color="#FFCC00" transparent="false"/> 934 934 <y:BorderStyle color="#000000" type="line" width="1.0"/> 935 935 <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="58.59765625" x="5.0" xml:space="preserve" y="5.93359375">YourTurn<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> 936 <y:Shape type="rectangle"/> 937 </y:ShapeNode> 938 </data> 939 </node> 940 <node id="n6::n3::n5"> 941 <data key="d5"/> 942 <data key="d6"> 943 <y:ShapeNode> 944 <y:Geometry height="30.0" width="83.984375" x="1373.66748046875" y="879.5751251147684"/> 945 <y:Fill color="#FFCC00" transparent="false"/> 946 <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> 947 <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="73.984375" x="5.0" xml:space="preserve" y="5.93359375">Agreements<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> 936 948 <y:Shape type="rectangle"/> 937 949 </y:ShapeNode> … … 1254 1266 <y:Realizers active="0"> 1255 1267 <y:GroupNode> 1256 <y:Geometry height="370.666015625" width=" 495.859375" x="739.58447265625" y="0.0"/>1268 <y:Geometry height="370.666015625" width="507.6171875" x="739.58447265625" y="0.0"/> 1257 1269 <y:Fill color="#F5F5F5" transparent="false"/> 1258 1270 <y:BorderStyle color="#000000" type="dashed" width="1.0"/> 1259 <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width=" 495.859375" x="0.0" xml:space="preserve" y="0.0">protocol</y:NodeLabel>1271 <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="507.6171875" x="0.0" xml:space="preserve" y="0.0">protocol</y:NodeLabel> 1260 1272 <y:Shape type="roundrectangle"/> 1261 1273 <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/> … … 1264 1276 </y:GroupNode> 1265 1277 <y:GroupNode> 1266 <y:Geometry height="50.0" width="50.0" x=" 373.32568359375" y="2196.0"/>1278 <y:Geometry height="50.0" width="50.0" x="739.58447265625" y="0.0"/> 1267 1279 <y:Fill color="#F5F5F5" transparent="false"/> 1268 1280 <y:BorderStyle color="#000000" type="dashed" width="1.0"/> … … 1406 1418 <y:BorderStyle color="#000000" type="line" width="1.0"/> 1407 1419 <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="143.86328125" x="5.0" xml:space="preserve" y="5.93359375">AllPermutationsProtocol<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> 1420 <y:Shape type="rectangle"/> 1421 </y:ShapeNode> 1422 </data> 1423 </node> 1424 <node id="n10::n12"> 1425 <data key="d5"/> 1426 <data key="d6"> 1427 <y:ShapeNode> 1428 <y:Geometry height="30.0" width="48.5703125" x="1165.71484375" y="158.666015625"/> 1429 <y:Fill color="#FFCC00" transparent="false"/> 1430 <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> 1431 <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="38.5703125" x="5.0" xml:space="preserve" y="5.93359375">AMOP<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> 1432 <y:Shape type="rectangle"/> 1433 </y:ShapeNode> 1434 </data> 1435 </node> 1436 <node id="n10::n13"> 1437 <data key="d5"/> 1438 <data key="d6"> 1439 <y:ShapeNode> 1440 <y:Geometry height="30.0" width="53.515625" x="1178.68603515625" y="98.666015625"/> 1441 <y:Fill color="#FFCC00" transparent="false"/> 1442 <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/> 1443 <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="43.515625" x="5.0" xml:space="preserve" y="5.93359375">SHAOP<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel> 1408 1444 <y:Shape type="rectangle"/> 1409 1445 </y:ShapeNode> … … 1555 1591 <node id="n12" yfiles.foldertype="group"> 1556 1592 <data key="d4" xml:space="preserve"/> 1557 <data key="d5"/>1558 1593 <data key="d6"> 1559 1594 <y:ProxyAutoBoundsNode> … … 1584 1619 <graph edgedefault="directed" id="n12:"> 1585 1620 <node id="n12::n0"> 1586 <data key="d5"/>1587 1621 <data key="d6"> 1588 1622 <y:ShapeNode> … … 1596 1630 </node> 1597 1631 <node id="n12::n1"> 1598 <data key="d5"/>1599 1632 <data key="d6"> 1600 1633 <y:ShapeNode> … … 1611 1644 <node id="n13" yfiles.foldertype="group"> 1612 1645 <data key="d4" xml:space="preserve"/> 1613 <data key="d5"/>1614 1646 <data key="d6"> 1615 1647 <y:ProxyAutoBoundsNode> … … 1640 1672 <graph edgedefault="directed" id="n13:"> 1641 1673 <node id="n13::n0"> 1642 <data key="d5"/>1643 1674 <data key="d6"> 1644 1675 <y:ShapeNode> … … 1652 1683 </node> 1653 1684 <node id="n13::n1"> 1654 <data key="d5"/>1655 1685 <data key="d6"> 1656 1686 <y:ShapeNode> … … 1664 1694 </node> 1665 1695 <node id="n13::n2"> 1666 <data key="d5"/>1667 1696 <data key="d6"> 1668 1697 <y:ShapeNode> … … 1677 1706 </node> 1678 1707 <node id="n13::n3"> 1679 <data key="d5"/>1680 1708 <data key="d6"> 1681 1709 <y:ShapeNode> … … 1689 1717 </node> 1690 1718 <node id="n13::n4"> 1691 <data key="d5"/>1692 1719 <data key="d6"> 1693 1720 <y:ShapeNode> … … 1701 1728 </node> 1702 1729 <node id="n13::n5"> 1703 <data key="d5"/>1704 1730 <data key="d6"> 1705 1731 <y:ShapeNode> … … 2156 2182 </data> 2157 2183 </edge> 2158 <edge id="n10::e0" source="n10::n3" target="n10::n1">2159 <data key="d8" xml:space="preserve"/>2160 <data key="d10">2161 <y:PolyLineEdge>2162 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2163 <y:LineStyle color="#000000" type="line" width="1.0"/>2164 <y:Arrows source="none" target="white_delta"/>2165 <y:BendStyle smoothed="false"/>2166 </y:PolyLineEdge>2167 </data>2168 </edge>2169 <edge id="n10::e1" source="n10::n4" target="n10::n0">2170 <data key="d8" xml:space="preserve"/>2171 <data key="d10">2172 <y:PolyLineEdge>2173 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2174 <y:LineStyle color="#000000" type="line" width="1.0"/>2175 <y:Arrows source="none" target="white_delta"/>2176 <y:BendStyle smoothed="false"/>2177 </y:PolyLineEdge>2178 </data>2179 </edge>2180 <edge id="n10::e2" source="n10::n5" target="n10::n2">2181 <data key="d8" xml:space="preserve"/>2182 <data key="d10">2183 <y:PolyLineEdge>2184 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2185 <y:LineStyle color="#000000" type="line" width="1.0"/>2186 <y:Arrows source="none" target="white_delta"/>2187 <y:BendStyle smoothed="false"/>2188 </y:PolyLineEdge>2189 </data>2190 </edge>2191 <edge id="n10::e3" source="n10::n9" target="n10::n8">2192 <data key="d8" xml:space="preserve"/>2193 <data key="d10">2194 <y:PolyLineEdge>2195 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2196 <y:LineStyle color="#000000" type="line" width="1.0"/>2197 <y:Arrows source="none" target="white_delta"/>2198 <y:BendStyle smoothed="false"/>2199 </y:PolyLineEdge>2200 </data>2201 </edge>2202 <edge id="n10::e4" source="n10::n10" target="n10::n7">2203 <data key="d8" xml:space="preserve"/>2204 <data key="d10">2205 <y:PolyLineEdge>2206 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2207 <y:LineStyle color="#000000" type="line" width="1.0"/>2208 <y:Arrows source="none" target="white_delta"/>2209 <y:BendStyle smoothed="false"/>2210 </y:PolyLineEdge>2211 </data>2212 </edge>2213 <edge id="n10::e5" source="n10::n11" target="n10::n6">2214 <data key="d8" xml:space="preserve"/>2215 <data key="d10">2216 <y:PolyLineEdge>2217 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2218 <y:LineStyle color="#000000" type="line" width="1.0"/>2219 <y:Arrows source="none" target="white_delta"/>2220 <y:BendStyle smoothed="false"/>2221 </y:PolyLineEdge>2222 </data>2223 </edge>2224 2184 <edge id="e15" source="n10::n9" target="n11::n0"> 2225 2185 <data key="d8" xml:space="preserve"/> 2226 2186 <data key="d10"> 2227 2187 <y:PolyLineEdge> 2228 <y:Path sx=" 0.0" sy="0.0" tx="0.0" ty="0.0"/>2188 <y:Path sx="9.591198890100713" sy="0.0" tx="0.0" ty="0.0"/> 2229 2189 <y:LineStyle color="#000000" type="line" width="1.0"/> 2230 2190 <y:Arrows source="diamond" target="none"/> … … 2237 2197 <data key="d10"> 2238 2198 <y:PolyLineEdge> 2239 <y:Path sx=" 0.0" sy="0.0" tx="0.0" ty="0.0"/>2199 <y:Path sx="9.591198890100713" sy="0.0" tx="0.0" ty="0.0"/> 2240 2200 <y:LineStyle color="#000000" type="line" width="1.0"/> 2241 2201 <y:Arrows source="diamond" target="none"/> … … 2248 2208 <data key="d10"> 2249 2209 <y:PolyLineEdge> 2250 <y:Path sx=" 0.0" sy="0.0" tx="0.0" ty="0.0"/>2210 <y:Path sx="5.8684164732106865" sy="0.0" tx="0.0" ty="0.0"/> 2251 2211 <y:LineStyle color="#000000" type="line" width="1.0"/> 2252 2212 <y:Arrows source="diamond" target="none"/> … … 2577 2537 </data> 2578 2538 </edge> 2579 <edge id="n6::n3::e0" source="n6::n3::n1" target="n6::n3::n0">2580 <data key="d8" xml:space="preserve"/>2581 <data key="d10">2582 <y:PolyLineEdge>2583 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2584 <y:LineStyle color="#000000" type="line" width="1.0"/>2585 <y:Arrows source="none" target="white_delta"/>2586 <y:BendStyle smoothed="false"/>2587 </y:PolyLineEdge>2588 </data>2589 </edge>2590 <edge id="n6::n3::e1" source="n6::n3::n2" target="n6::n3::n0">2591 <data key="d8" xml:space="preserve"/>2592 <data key="d10">2593 <y:PolyLineEdge>2594 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2595 <y:LineStyle color="#000000" type="line" width="1.0"/>2596 <y:Arrows source="none" target="white_delta"/>2597 <y:BendStyle smoothed="false"/>2598 </y:PolyLineEdge>2599 </data>2600 </edge>2601 <edge id="n6::n3::e2" source="n6::n3::n3" target="n6::n3::n0">2602 <data key="d8" xml:space="preserve"/>2603 <data key="d10">2604 <y:PolyLineEdge>2605 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2606 <y:LineStyle color="#000000" type="line" width="1.0"/>2607 <y:Arrows source="none" target="white_delta"/>2608 <y:BendStyle smoothed="false"/>2609 </y:PolyLineEdge>2610 </data>2611 </edge>2612 <edge id="n6::n3::e3" source="n6::n3::n4" target="n6::n3::n0">2613 <data key="d8" xml:space="preserve"/>2614 <data key="d10">2615 <y:PolyLineEdge>2616 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2617 <y:LineStyle color="#000000" type="line" width="1.0"/>2618 <y:Arrows source="none" target="white_delta"/>2619 <y:BendStyle smoothed="false"/>2620 </y:PolyLineEdge>2621 </data>2622 </edge>2623 2539 <edge id="n2::e0" source="n2::n1" target="n2::n0"> 2624 2540 <data key="d8" xml:space="preserve"/> … … 2691 2607 <data key="d10"> 2692 2608 <y:PolyLineEdge> 2693 <y:Path sx=" 0.0" sy="0.0" tx="0.0" ty="0.0"/>2609 <y:Path sx="4.706528967303029" sy="0.0" tx="0.0" ty="0.0"/> 2694 2610 <y:LineStyle color="#000000" type="line" width="1.0"/> 2695 2611 <y:Arrows source="diamond" target="none"/> … … 2753 2669 </data> 2754 2670 </edge> 2755 <edge id="n10::e6" source="n10::n1" target="n10::n2">2756 <data key="d8" xml:space="preserve"/>2757 <data key="d10">2758 <y:PolyLineEdge>2759 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>2760 <y:LineStyle color="#000000" type="dashed" width="1.0"/>2761 <y:Arrows source="none" target="plain"/>2762 <y:BendStyle smoothed="false"/>2763 </y:PolyLineEdge>2764 </data>2765 </edge>2766 2671 <edge id="e30" source="n0::n1" target="n10::n1"> 2767 2672 <data key="d8" xml:space="preserve"/> 2768 2673 <data key="d10"> 2769 2674 <y:PolyLineEdge> 2770 <y:Path sx="0.0" sy="0.0" tx=" 0.0" ty="0.0"/>2771 <y:LineStyle color="#000000" type="line" width="1.0"/> 2772 <y:Arrows source="diamond" target="none"/> 2773 <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="22.978515625" x="5. 430217172490757" xml:space="preserve" y="-23.1328125"> 1<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>2675 <y:Path sx="0.0" sy="0.0" tx="5.8684164732106865" ty="0.0"/> 2676 <y:LineStyle color="#000000" type="line" width="1.0"/> 2677 <y:Arrows source="diamond" target="none"/> 2678 <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="22.978515625" x="5.673614709180811" xml:space="preserve" y="-23.1328125"> 1<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel> 2774 2679 <y:BendStyle smoothed="false"/> 2775 2680 </y:PolyLineEdge> … … 2799 2704 </edge> 2800 2705 <edge id="n12::e0" source="n12::n1" target="n12::n0"> 2801 <data key="d9"/>2802 2706 <data key="d10"> 2803 2707 <y:BezierEdge> … … 2809 2713 </edge> 2810 2714 <edge id="e31" source="n12::n0" target="n4::n0"> 2811 <data key="d9"/>2812 2715 <data key="d10"> 2813 2716 <y:BezierEdge> … … 2819 2722 </edge> 2820 2723 <edge id="n13::e0" source="n13::n2" target="n13::n1"> 2821 <data key="d9"/>2822 2724 <data key="d10"> 2823 2725 <y:BezierEdge> … … 2829 2731 </edge> 2830 2732 <edge id="e32" source="n12::n0" target="n13::n3"> 2831 <data key="d9"/>2832 2733 <data key="d10"> 2833 2734 <y:BezierEdge> … … 2840 2741 </edge> 2841 2742 <edge id="n13::e1" source="n13::n5" target="n13::n4"> 2842 <data key="d9"/>2843 2743 <data key="d10"> 2844 2744 <y:BezierEdge> … … 2850 2750 </edge> 2851 2751 <edge id="n13::e2" source="n13::n1" target="n13::n0"> 2852 <data key="d9"/>2853 2752 <data key="d10"> 2854 2753 <y:BezierEdge> … … 2860 2759 </edge> 2861 2760 <edge id="n13::e3" source="n13::n4" target="n13::n0"> 2862 <data key="d9"/>2863 2761 <data key="d10"> 2864 2762 <y:BezierEdge> … … 2870 2768 </edge> 2871 2769 <edge id="n13::e4" source="n13::n3" target="n13::n0"> 2872 <data key="d9"/>2873 2770 <data key="d10"> 2874 2771 <y:BezierEdge> … … 2880 2777 </edge> 2881 2778 <edge id="e33" source="n13" target="n6"> 2882 <data key="d9"/>2883 2779 <data key="d10"> 2884 2780 <y:BezierEdge> … … 2886 2782 <y:LineStyle color="#000000" type="dashed" width="1.0"/> 2887 2783 <y:Arrows source="none" target="plain"/> 2784 </y:BezierEdge> 2785 </data> 2786 </edge> 2787 <edge id="n6::n3::e0" source="n6::n3::n1" target="n6::n3::n0"> 2788 <data key="d8" xml:space="preserve"/> 2789 <data key="d10"> 2790 <y:PolyLineEdge> 2791 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2792 <y:LineStyle color="#000000" type="line" width="1.0"/> 2793 <y:Arrows source="none" target="white_delta"/> 2794 <y:BendStyle smoothed="false"/> 2795 </y:PolyLineEdge> 2796 </data> 2797 </edge> 2798 <edge id="n6::n3::e1" source="n6::n3::n2" target="n6::n3::n0"> 2799 <data key="d8" xml:space="preserve"/> 2800 <data key="d10"> 2801 <y:PolyLineEdge> 2802 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2803 <y:LineStyle color="#000000" type="line" width="1.0"/> 2804 <y:Arrows source="none" target="white_delta"/> 2805 <y:BendStyle smoothed="false"/> 2806 </y:PolyLineEdge> 2807 </data> 2808 </edge> 2809 <edge id="n6::n3::e2" source="n6::n3::n3" target="n6::n3::n0"> 2810 <data key="d8" xml:space="preserve"/> 2811 <data key="d10"> 2812 <y:PolyLineEdge> 2813 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2814 <y:LineStyle color="#000000" type="line" width="1.0"/> 2815 <y:Arrows source="none" target="white_delta"/> 2816 <y:BendStyle smoothed="false"/> 2817 </y:PolyLineEdge> 2818 </data> 2819 </edge> 2820 <edge id="n6::n3::e3" source="n6::n3::n4" target="n6::n3::n0"> 2821 <data key="d8" xml:space="preserve"/> 2822 <data key="d10"> 2823 <y:PolyLineEdge> 2824 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2825 <y:LineStyle color="#000000" type="line" width="1.0"/> 2826 <y:Arrows source="none" target="white_delta"/> 2827 <y:BendStyle smoothed="false"/> 2828 </y:PolyLineEdge> 2829 </data> 2830 </edge> 2831 <edge id="n6::n3::e4" source="n6::n3::n5" target="n6::n3::n3"> 2832 <data key="d9"/> 2833 <data key="d10"> 2834 <y:BezierEdge> 2835 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2836 <y:LineStyle color="#000000" type="line" width="1.0"/> 2837 <y:Arrows source="none" target="diamond"/> 2838 </y:BezierEdge> 2839 </data> 2840 </edge> 2841 <edge id="n10::e0" source="n10::n1" target="n10::n2"> 2842 <data key="d8" xml:space="preserve"/> 2843 <data key="d10"> 2844 <y:PolyLineEdge> 2845 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2846 <y:LineStyle color="#000000" type="dashed" width="1.0"/> 2847 <y:Arrows source="none" target="plain"/> 2848 <y:BendStyle smoothed="false"/> 2849 </y:PolyLineEdge> 2850 </data> 2851 </edge> 2852 <edge id="n10::e1" source="n10::n3" target="n10::n1"> 2853 <data key="d8" xml:space="preserve"/> 2854 <data key="d10"> 2855 <y:PolyLineEdge> 2856 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2857 <y:LineStyle color="#000000" type="line" width="1.0"/> 2858 <y:Arrows source="none" target="white_delta"/> 2859 <y:BendStyle smoothed="false"/> 2860 </y:PolyLineEdge> 2861 </data> 2862 </edge> 2863 <edge id="n10::e2" source="n10::n4" target="n10::n0"> 2864 <data key="d8" xml:space="preserve"/> 2865 <data key="d10"> 2866 <y:PolyLineEdge> 2867 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2868 <y:LineStyle color="#000000" type="line" width="1.0"/> 2869 <y:Arrows source="none" target="white_delta"/> 2870 <y:BendStyle smoothed="false"/> 2871 </y:PolyLineEdge> 2872 </data> 2873 </edge> 2874 <edge id="n10::e3" source="n10::n5" target="n10::n2"> 2875 <data key="d8" xml:space="preserve"/> 2876 <data key="d10"> 2877 <y:PolyLineEdge> 2878 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2879 <y:LineStyle color="#000000" type="line" width="1.0"/> 2880 <y:Arrows source="none" target="white_delta"/> 2881 <y:BendStyle smoothed="false"/> 2882 </y:PolyLineEdge> 2883 </data> 2884 </edge> 2885 <edge id="n10::e4" source="n10::n9" target="n10::n8"> 2886 <data key="d8" xml:space="preserve"/> 2887 <data key="d10"> 2888 <y:PolyLineEdge> 2889 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2890 <y:LineStyle color="#000000" type="line" width="1.0"/> 2891 <y:Arrows source="none" target="white_delta"/> 2892 <y:BendStyle smoothed="false"/> 2893 </y:PolyLineEdge> 2894 </data> 2895 </edge> 2896 <edge id="n10::e5" source="n10::n10" target="n10::n7"> 2897 <data key="d8" xml:space="preserve"/> 2898 <data key="d10"> 2899 <y:PolyLineEdge> 2900 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2901 <y:LineStyle color="#000000" type="line" width="1.0"/> 2902 <y:Arrows source="none" target="white_delta"/> 2903 <y:BendStyle smoothed="false"/> 2904 </y:PolyLineEdge> 2905 </data> 2906 </edge> 2907 <edge id="n10::e6" source="n10::n11" target="n10::n6"> 2908 <data key="d8" xml:space="preserve"/> 2909 <data key="d10"> 2910 <y:PolyLineEdge> 2911 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2912 <y:LineStyle color="#000000" type="line" width="1.0"/> 2913 <y:Arrows source="none" target="white_delta"/> 2914 <y:BendStyle smoothed="false"/> 2915 </y:PolyLineEdge> 2916 </data> 2917 </edge> 2918 <edge id="n10::e7" source="n10::n12" target="n10::n2"> 2919 <data key="d9"/> 2920 <data key="d10"> 2921 <y:BezierEdge> 2922 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2923 <y:LineStyle color="#000000" type="line" width="1.0"/> 2924 <y:Arrows source="none" target="white_delta"/> 2925 </y:BezierEdge> 2926 </data> 2927 </edge> 2928 <edge id="n10::e8" source="n10::n13" target="n10::n2"> 2929 <data key="d9"/> 2930 <data key="d10"> 2931 <y:BezierEdge> 2932 <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> 2933 <y:LineStyle color="#000000" type="line" width="1.0"/> 2934 <y:Arrows source="none" target="white_delta"/> 2888 2935 </y:BezierEdge> 2889 2936 </data> -
design/classdiagram.svg
r1 r21 1 <?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="2 257" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" height="2059" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto">1 <?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="2496" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" height="2118" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto"> 2 2 <!--Generated by ySVG 2.5--> 3 3 <defs id="genericDefs"/> … … 17 17 </linearGradient> 18 18 <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1"> 19 <path d="M0 0 L2 257 0 L2257 2059 L0 2059L0 0 Z"/>19 <path d="M0 0 L2496 0 L2496 2118 L0 2118 L0 0 Z"/> 20 20 </clipPath> 21 21 <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2"> 22 <path d="M17 -15 L2 274 -15 L2274 2044 L17 2044L17 -15 Z"/>22 <path d="M17 -15 L2513 -15 L2513 2103 L17 2103 L17 -15 Z"/> 23 23 </clipPath> 24 24 </defs> 25 25 <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="translate(-17,15)" stroke="white"> 26 <rect x="17" width="2 257" height="2059" y="-15" clip-path="url(#clipPath2)" stroke="none"/>26 <rect x="17" width="2496" height="2118" y="-15" clip-path="url(#clipPath2)" stroke="none"/> 27 27 </g> 28 28 <g fill="url(#linearGradient1)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="url(#linearGradient1)"> … … 291 291 </g> 292 292 <g fill="rgb(245,245,245)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(245,245,245)"> 293 <rect x="870.5688" y="1026.4836" clip-path="url(#clipPath2)" width=" 516.0273" rx="4" ry="4" height="458.1309" stroke="none"/>294 <rect x="870.5688" y="1026.4836" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width=" 516.0273" height="21.666" stroke="none"/>295 </g> 296 <g font-size="15px" stroke-linecap="butt" transform="matrix(1,0,0,1,-17,15)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> 297 <text x="1 338.4097" xml:space="preserve" y="1042.9856" clip-path="url(#clipPath2)" stroke="none">Profile</text>298 <rect x="870.5688" y="1026.4836" clip-path="url(#clipPath2)" fill="none" width=" 516.0273" stroke-dasharray="6,2" rx="4" ry="4" height="458.1309"/>293 <rect x="870.5688" y="1026.4836" clip-path="url(#clipPath2)" width="460.2715" rx="4" ry="4" height="458.1309" stroke="none"/> 294 <rect x="870.5688" y="1026.4836" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="460.2715" height="21.666" stroke="none"/> 295 </g> 296 <g font-size="15px" stroke-linecap="butt" transform="matrix(1,0,0,1,-17,15)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> 297 <text x="1282.6538" xml:space="preserve" y="1042.9856" clip-path="url(#clipPath2)" stroke="none">Profile</text> 298 <rect x="870.5688" y="1026.4836" clip-path="url(#clipPath2)" fill="none" width="460.2715" stroke-dasharray="6,2" rx="4" ry="4" height="458.1309"/> 299 299 </g> 300 300 <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="white"> … … 358 358 </g> 359 359 <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="white"> 360 <rect x="9 85.2847" width="122.1816" height="30" y="1143.3489" clip-path="url(#clipPath2)" stroke="none"/>360 <rect x="998.7144" width="95.3223" height="30" y="1143.3489" clip-path="url(#clipPath2)" stroke="none"/> 361 361 </g> 362 362 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 363 363 <text x="1005.7144" xml:space="preserve" y="1162.884" clip-path="url(#clipPath2)" stroke="none">TotalOrdering</text> 364 <rect fill="none" x="9 85.2847" width="122.1816" height="30" y="1143.3489" clip-path="url(#clipPath2)"/>364 <rect fill="none" x="998.7144" width="95.3223" height="30" y="1143.3489" clip-path="url(#clipPath2)"/> 365 365 </g> 366 366 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> … … 370 370 <text x="1201.2769" xml:space="preserve" y="1394.9819" clip-path="url(#clipPath2)" stroke="none">BigDecimal</text> 371 371 <rect fill="none" x="1194.2769" width="78.4414" height="30" y="1375.4468" clip-path="url(#clipPath2)"/> 372 <path fill="none" stroke-dasharray="6,2" d="M870.561 3 1400.4462 L756.5829 1464.453" clip-path="url(#clipPath2)"/>373 <path stroke-dasharray="6,2" d="M753.0 953 1466.4116 L766.4962 1465.7673 L753.0953 1466.4116 L760.6204 1455.3043Z" clip-path="url(#clipPath2)" stroke="none"/>374 <path fill="none" stroke-miterlimit="10" d="M753.0 953 1466.4116 L766.4962 1465.7673 L753.0953 1466.4116 L760.6204 1455.3043Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>372 <path fill="none" stroke-dasharray="6,2" d="M870.5617 1391.3617 L756.5297 1458.6547" clip-path="url(#clipPath2)"/> 373 <path stroke-dasharray="6,2" d="M753.0848 1460.6876 L766.4689 1459.7561 L753.0848 1460.6876 L760.3701 1449.4215 Z" clip-path="url(#clipPath2)" stroke="none"/> 374 <path fill="none" stroke-miterlimit="10" d="M753.0848 1460.6876 L766.4689 1459.7561 L753.0848 1460.6876 L760.3701 1449.4215 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/> 375 375 <path fill="none" d="M1159.808 1767.553 L1095.0416 1469.6145" clip-path="url(#clipPath2)"/> 376 376 <path d="M1161.2949 1774.3932 L1154.9221 1768.615 L1158.321 1760.7126 L1164.6938 1766.4908 Z" clip-path="url(#clipPath2)" stroke="none"/> … … 399 399 <path fill="white" d="M1092.4135 1399.0833 L1100.616 1384.0927 L1088.7366 1382.3955 Z" clip-path="url(#clipPath2)" stroke="none"/> 400 400 <path fill="none" d="M1092.4135 1399.0833 L1100.616 1384.0927 L1088.7366 1382.3955 Z" clip-path="url(#clipPath2)"/> 401 <path fill="none" d="M1153.2026 1185.2378 L11 20.5153 1177.0103" clip-path="url(#clipPath2)"/>402 <path fill="white" d="M1 105.969 1173.3489 L1120.0205 1183.0729 L1122.9496 1171.4358Z" clip-path="url(#clipPath2)" stroke="none"/>403 <path fill="none" d="M1 105.969 1173.3489 L1120.0205 1183.0729 L1122.9496 1171.4358Z" clip-path="url(#clipPath2)"/>401 <path fill="none" d="M1153.2026 1185.2378 L1108.5829 1174.0068" clip-path="url(#clipPath2)"/> 402 <path fill="white" d="M1094.0366 1170.3455 L1108.0881 1180.0695 L1111.0172 1168.4324 Z" clip-path="url(#clipPath2)" stroke="none"/> 403 <path fill="none" d="M1094.0366 1170.3455 L1108.0881 1180.0695 L1111.0172 1168.4324 Z" clip-path="url(#clipPath2)"/> 404 404 <path fill="none" d="M1066.5248 1143.3489 L1086.464 1128.5052" clip-path="url(#clipPath2)"/> 405 405 <path fill="white" d="M1098.496 1119.5481 L1082.079 1124.2896 L1089.2448 1133.9152 Z" clip-path="url(#clipPath2)" stroke="none"/> … … 570 570 </g> 571 571 <g fill="rgb(245,245,245)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(245,245,245)"> 572 <rect x="12 55.7515" y="613.5835" clip-path="url(#clipPath2)" width="436.4648" rx="4" ry="4" height="353.499" stroke="none"/>573 <rect x="12 55.7515" y="613.5835" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="436.4648" height="21.666" stroke="none"/>572 <rect x="1248.8723" y="613.5835" clip-path="url(#clipPath2)" width="443.344" rx="4" ry="4" height="353.499" stroke="none"/> 573 <rect x="1248.8723" y="613.5835" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="443.344" height="21.666" stroke="none"/> 574 574 </g> 575 575 <g font-size="15px" stroke-linecap="butt" transform="matrix(1,0,0,1,-17,15)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> 576 576 <text x="1654.0566" xml:space="preserve" y="630.0854" clip-path="url(#clipPath2)" stroke="none">Party</text> 577 <rect x="12 55.7515" y="613.5835" clip-path="url(#clipPath2)" fill="none" width="436.4648" stroke-dasharray="6,2" rx="4" ry="4" height="353.499"/>577 <rect x="1248.8723" y="613.5835" clip-path="url(#clipPath2)" fill="none" width="443.344" stroke-dasharray="6,2" rx="4" ry="4" height="353.499"/> 578 578 </g> 579 579 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> … … 600 600 <text x="1583.5493" xml:space="preserve" y="941.6177" clip-path="url(#clipPath2)" stroke="none">DefaultParty</text> 601 601 <rect fill="none" x="1576.5493" width="85.0449" height="30" y="922.0825" clip-path="url(#clipPath2)"/> 602 <path fill="none" stroke-dasharray="6,2" d="M1821. 6045 823.3602 L1697.2003 811.5406" clip-path="url(#clipPath2)"/>603 <path stroke-dasharray="6,2" d="M1693.21 83 811.1624 L1704.597 818.2704 L1693.2183 811.1624 L1705.7319 806.3242 Z" clip-path="url(#clipPath2)" stroke="none"/>604 <path fill="none" stroke-miterlimit="10" d="M1693.21 83 811.1624 L1704.597 818.2704 L1693.2183 811.1624 L1705.7319 806.3242 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>605 <path fill="none" stroke-dasharray="6,2" d="M13 42.7507 967.089 L1301.6271 1022.4778" clip-path="url(#clipPath2)"/>606 <path stroke-dasharray="6,2" d="M12 99.2426 1025.6895 L1311.2134 1019.6314 L1299.2426 1025.6895 L1301.5786 1012.478Z" clip-path="url(#clipPath2)" stroke="none"/>607 <path fill="none" stroke-miterlimit="10" d="M12 99.2426 1025.6895 L1311.2134 1019.6314 L1299.2426 1025.6895 L1301.5786 1012.478Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>608 <path fill="none" stroke-dasharray="6,2" d="M12 55.7472 840.8061 L776.8444 951.5652" clip-path="url(#clipPath2)"/>609 <path stroke-dasharray="6,2" d="M772.9 473 952.4666 L785.9907 955.6083 L772.9473 952.4666 L783.2867 943.9169Z" clip-path="url(#clipPath2)" stroke="none"/>610 <path fill="none" stroke-miterlimit="10" d="M772.9 473 952.4666 L785.9907 955.6083 L772.9473 952.4666 L783.2867 943.9169Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>602 <path fill="none" stroke-dasharray="6,2" d="M1821.5979 823.4849 L1697.2019 811.7375" clip-path="url(#clipPath2)"/> 603 <path stroke-dasharray="6,2" d="M1693.2196 811.3615 L1704.6023 818.4631 L1693.2196 811.3615 L1705.7305 806.5162 Z" clip-path="url(#clipPath2)" stroke="none"/> 604 <path fill="none" stroke-miterlimit="10" d="M1693.2196 811.3615 L1704.6023 818.4631 L1693.2196 811.3615 L1705.7305 806.5162 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/> 605 <path fill="none" stroke-dasharray="6,2" d="M1330.026 967.089 L1285.9127 1022.5784" clip-path="url(#clipPath2)"/> 606 <path stroke-dasharray="6,2" d="M1283.4236 1025.7095 L1295.5878 1020.0499 L1283.4236 1025.7095 L1286.1945 1012.5823 Z" clip-path="url(#clipPath2)" stroke="none"/> 607 <path fill="none" stroke-miterlimit="10" d="M1283.4236 1025.7095 L1295.5878 1020.0499 L1283.4236 1025.7095 L1286.1945 1012.5823 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/> 608 <path fill="none" stroke-dasharray="6,2" d="M1248.9006 841.7592 L776.875 951.2792" clip-path="url(#clipPath2)"/> 609 <path stroke-dasharray="6,2" d="M772.9785 952.1833 L786.0241 955.3159 L772.9785 952.1833 L783.312 943.6264 Z" clip-path="url(#clipPath2)" stroke="none"/> 610 <path fill="none" stroke-miterlimit="10" d="M772.9785 952.1833 L786.0241 955.3159 L772.9785 952.1833 L783.312 943.6264 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/> 611 611 <path fill="none" d="M1621.5209 870.3434 L1619.6222 922.0825" clip-path="url(#clipPath2)"/> 612 612 <path fill="white" d="M1621.7776 863.3481 L1626.5175 870.5268 L1621.2642 877.3387 L1616.5243 870.1601 Z" clip-path="url(#clipPath2)" stroke="none"/> … … 614 614 </g> 615 615 <g fill="rgb(225,225,225)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(225,225,225)"> 616 <rect x="1270.7515" y="650.2495" clip-path="url(#clipPath2)" width="272.167" rx="4" ry="4" height="202.666" stroke="none"/> 617 <rect x="1270.7515" y="650.2495" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="272.167" height="21.666" stroke="none"/> 618 </g> 619 <g font-size="15px" stroke-linecap="butt" transform="matrix(1,0,0,1,-17,15)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> 620 <text x="1492.4028" xml:space="preserve" y="666.7515" clip-path="url(#clipPath2)" stroke="none">inform</text> 621 <rect x="1270.7515" y="650.2495" clip-path="url(#clipPath2)" fill="none" width="272.167" stroke-dasharray="6,2" rx="4" ry="4" height="202.666"/> 622 </g> 623 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 624 <rect x="1370.6714" width="52.8008" height="30" y="746.9155" clip-path="url(#clipPath2)" stroke="none"/> 625 </g> 626 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 627 <text x="1377.6714" xml:space="preserve" y="766.4507" clip-path="url(#clipPath2)" stroke="none">Inform</text> 628 <rect fill="none" x="1370.6714" width="52.8008" height="30" y="746.9155" clip-path="url(#clipPath2)"/> 629 </g> 630 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 631 <rect x="1446.2251" width="81.6934" height="30" y="740.9155" clip-path="url(#clipPath2)" stroke="none"/> 632 </g> 633 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 634 <text x="1453.2251" xml:space="preserve" y="760.4507" clip-path="url(#clipPath2)" stroke="none">ActionDone</text> 635 <rect fill="none" x="1446.2251" width="81.6934" height="30" y="740.9155" clip-path="url(#clipPath2)"/> 636 </g> 637 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 638 <rect x="1285.7515" width="60.6406" height="30" y="692.9155" clip-path="url(#clipPath2)" stroke="none"/> 639 </g> 640 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 641 <text x="1292.7515" xml:space="preserve" y="712.4507" clip-path="url(#clipPath2)" stroke="none">Settings</text> 642 <rect fill="none" x="1285.7515" width="60.6406" height="30" y="692.9155" clip-path="url(#clipPath2)"/> 643 </g> 644 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 645 <rect x="1388.7612" width="62.6211" height="30" y="686.9155" clip-path="url(#clipPath2)" stroke="none"/> 646 </g> 647 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 648 <text x="1395.7612" xml:space="preserve" y="706.4507" clip-path="url(#clipPath2)" stroke="none">Finished</text> 649 <rect fill="none" x="1388.7612" width="62.6211" height="30" y="686.9155" clip-path="url(#clipPath2)"/> 650 </g> 651 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 652 <rect x="1402.7729" width="68.5977" height="30" y="807.9155" clip-path="url(#clipPath2)" stroke="none"/> 653 </g> 654 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 655 <text x="1409.7729" xml:space="preserve" y="827.4507" clip-path="url(#clipPath2)" stroke="none">YourTurn</text> 656 <rect fill="none" x="1402.7729" width="68.5977" height="30" y="807.9155" clip-path="url(#clipPath2)"/> 657 <path fill="none" d="M1446.2251 758.6386 L1438.439 759.1577" clip-path="url(#clipPath2)"/> 658 <path fill="white" d="M1423.4722 760.1555 L1439.8358 765.0779 L1439.0376 753.1045 Z" clip-path="url(#clipPath2)" stroke="none"/> 659 <path fill="none" d="M1423.4722 760.1555 L1439.8358 765.0779 L1439.0376 753.1045 Z" clip-path="url(#clipPath2)"/> 660 <path fill="none" d="M1338.5718 722.9155 L1362.0911 738.595" clip-path="url(#clipPath2)"/> 661 <path fill="white" d="M1374.5718 746.9155 L1364.5872 733.048 L1357.9308 743.0326 Z" clip-path="url(#clipPath2)" stroke="none"/> 662 <path fill="none" d="M1374.5718 746.9155 L1364.5872 733.048 L1357.9308 743.0326 Z" clip-path="url(#clipPath2)"/> 663 <path fill="none" d="M1279.0892 719.8394 L712.7974 902.4222" clip-path="url(#clipPath2)"/> 664 <path d="M1285.7515 717.6913 L1280.6235 724.5982 L1272.4269 721.9875 L1277.5548 715.0807 Z" clip-path="url(#clipPath2)" stroke="none"/> 665 <path fill="none" d="M1414.3218 716.9155 L1408.1908 732.9094" clip-path="url(#clipPath2)"/> 666 <path fill="white" d="M1402.8218 746.9156 L1414.1512 734.1232 L1402.9463 729.8281 Z" clip-path="url(#clipPath2)" stroke="none"/> 667 <path fill="none" d="M1402.8218 746.9156 L1414.1512 734.1232 L1402.9463 729.8281 Z" clip-path="url(#clipPath2)"/> 668 <path fill="none" d="M1427.2357 807.9155 L1415.1332 789.4592" clip-path="url(#clipPath2)"/> 669 <path fill="white" d="M1406.9078 776.9155 L1410.6641 793.5856 L1420.699 787.0053 Z" clip-path="url(#clipPath2)" stroke="none"/> 670 <path fill="none" d="M1406.9078 776.9155 L1410.6641 793.5856 L1420.699 787.0053 Z" clip-path="url(#clipPath2)"/> 616 <rect x="1270.7515" y="650.2495" clip-path="url(#clipPath2)" width="255.8809" rx="4" ry="4" height="274.3256" stroke="none"/> 617 <rect x="1270.7515" y="650.2495" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="255.8809" height="21.666" stroke="none"/> 618 </g> 619 <g font-size="15px" stroke-linecap="butt" transform="matrix(1,0,0,1,-17,15)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> 620 <text x="1476.1167" xml:space="preserve" y="666.7515" clip-path="url(#clipPath2)" stroke="none">inform</text> 621 <rect x="1270.7515" y="650.2495" clip-path="url(#clipPath2)" fill="none" width="255.8809" stroke-dasharray="6,2" rx="4" ry="4" height="274.3256"/> 622 </g> 623 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 624 <rect x="1353.0337" width="52.8008" height="30" y="738.8943" clip-path="url(#clipPath2)" stroke="none"/> 625 </g> 626 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 627 <text x="1360.0337" xml:space="preserve" y="758.4295" clip-path="url(#clipPath2)" stroke="none">Inform</text> 628 <rect fill="none" x="1353.0337" width="52.8008" height="30" y="738.8943" clip-path="url(#clipPath2)"/> 629 </g> 630 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 631 <rect x="1308.1948" width="81.6934" height="30" y="686.9155" clip-path="url(#clipPath2)" stroke="none"/> 632 </g> 633 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 634 <text x="1315.1947" xml:space="preserve" y="706.4507" clip-path="url(#clipPath2)" stroke="none">ActionDone</text> 635 <rect fill="none" x="1308.1948" width="81.6934" height="30" y="686.9155" clip-path="url(#clipPath2)"/> 636 </g> 637 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 638 <rect x="1450.9917" width="60.6406" height="30" y="705.683" clip-path="url(#clipPath2)" stroke="none"/> 639 </g> 640 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 641 <text x="1457.9917" xml:space="preserve" y="725.2181" clip-path="url(#clipPath2)" stroke="none">Settings</text> 642 <rect fill="none" x="1450.9917" width="60.6406" height="30" y="705.683" clip-path="url(#clipPath2)"/> 643 </g> 644 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 645 <rect x="1384.3491" width="62.6211" height="30" y="809.2347" clip-path="url(#clipPath2)" stroke="none"/> 646 </g> 647 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 648 <text x="1391.3491" xml:space="preserve" y="828.7699" clip-path="url(#clipPath2)" stroke="none">Finished</text> 649 <rect fill="none" x="1384.3491" width="62.6211" height="30" y="809.2347" clip-path="url(#clipPath2)"/> 650 </g> 651 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 652 <rect x="1285.7515" width="68.5977" height="30" y="809.2347" clip-path="url(#clipPath2)" stroke="none"/> 653 </g> 654 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" font-family="sans-serif" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 655 <text x="1292.7515" xml:space="preserve" y="828.7699" clip-path="url(#clipPath2)" stroke="none">YourTurn</text> 656 <rect fill="none" x="1285.7515" width="68.5977" height="30" y="809.2347" clip-path="url(#clipPath2)"/> 657 </g> 658 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 659 <rect x="1373.6675" width="83.9844" height="30" y="879.5751" clip-path="url(#clipPath2)" stroke="none"/> 660 </g> 661 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 662 <rect fill="none" x="1373.6675" width="83.9844" height="30" y="879.5751" clip-path="url(#clipPath2)"/> 663 <text x="1380.6675" xml:space="preserve" y="899.1103" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">Agreements</text> 664 <path fill="none" d="M1357.8121 716.9155 L1363.092 725.9454" clip-path="url(#clipPath2)"/> 665 <path fill="white" d="M1370.6635 738.8943 L1367.7668 722.0536 L1357.4077 728.1108 Z" clip-path="url(#clipPath2)" stroke="none"/> 666 <path fill="none" d="M1370.6635 738.8943 L1367.7668 722.0536 L1357.4077 728.1108 Z" clip-path="url(#clipPath2)"/> 667 <path fill="none" d="M1450.9917 730.5671 L1420.0958 740.639" clip-path="url(#clipPath2)"/> 668 <path fill="white" d="M1405.8345 745.288 L1422.9062 746.0336 L1419.187 734.6245 Z" clip-path="url(#clipPath2)" stroke="none"/> 669 <path fill="none" d="M1405.8345 745.288 L1422.9062 746.0336 L1419.187 734.6245 Z" clip-path="url(#clipPath2)"/> 670 <path fill="none" d="M1444.1842 729.574 L712.7974 904.7188" clip-path="url(#clipPath2)"/> 671 <path d="M1450.9917 727.9438 L1445.3486 734.4365 L1437.3766 731.2042 L1443.0198 724.7115 Z" clip-path="url(#clipPath2)" stroke="none"/> 672 <path fill="none" d="M1407.9346 809.2347 L1394.027 782.2297" clip-path="url(#clipPath2)"/> 673 <path fill="white" d="M1387.1592 768.8943 L1389.1506 785.8659 L1399.819 780.3716 Z" clip-path="url(#clipPath2)" stroke="none"/> 674 <path fill="none" d="M1387.1592 768.8943 L1389.1506 785.8659 L1399.819 780.3716 Z" clip-path="url(#clipPath2)"/> 675 <path fill="none" d="M1332.7139 809.2347 L1357.0942 780.356" clip-path="url(#clipPath2)"/> 676 <path fill="white" d="M1366.7706 768.8943 L1351.8645 777.2495 L1361.0338 784.9906 Z" clip-path="url(#clipPath2)" stroke="none"/> 677 <path fill="none" d="M1366.7706 768.8943 L1351.8645 777.2495 L1361.0338 784.9906 Z" clip-path="url(#clipPath2)"/> 678 <path fill="none" d="M1415.6597 879.5751 L1415.6597 846.2347" clip-path="url(#clipPath2)"/> 679 <path d="M1415.6597 839.2347 L1420.6597 846.2347 L1415.6597 853.2347 L1410.6597 846.2347 Z" clip-path="url(#clipPath2)" stroke="none"/> 671 680 </g> 672 681 <g fill="rgb(245,245,245)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(245,245,245)"> … … 720 729 <text x="879.1353" xml:space="preserve" y="564.7017" clip-path="url(#clipPath2)" stroke="none">DeadlineRound</text> 721 730 <rect fill="none" x="872.1353" width="102.3301" height="30" y="545.1665" clip-path="url(#clipPath2)"/> 722 <path fill="none" stroke-dasharray="6,2" d="M12 55.7789 696.4816 L1140.34 646.8304" clip-path="url(#clipPath2)"/>723 <path stroke-dasharray="6,2" d="M1136.6 654 645.25 L1145.3184 655.5032 L1136.6654 645.25 L1150.0597 644.4796Z" clip-path="url(#clipPath2)" stroke="none"/>724 <path fill="none" stroke-miterlimit="10" d="M1136.6 654 645.25 L1145.3184 655.5032 L1136.6654 645.25 L1150.0597 644.4796Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>725 <path fill="none" d="M1 287.2512 689.087 L1091.6481561.2993" clip-path="url(#clipPath2)"/>726 <path d="M1 293.1115 692.9155 L1284.5166 693.2729 L1281.391 685.2585 L1289.9858 684.9011Z" clip-path="url(#clipPath2)" stroke="none"/>731 <path fill="none" stroke-dasharray="6,2" d="M1248.8649 694.3713 L1140.3584 647.4004" clip-path="url(#clipPath2)"/> 732 <path stroke-dasharray="6,2" d="M1136.6876 645.8114 L1145.3165 656.0847 L1136.6876 645.8114 L1150.0836 645.0722 Z" clip-path="url(#clipPath2)" stroke="none"/> 733 <path fill="none" stroke-miterlimit="10" d="M1136.6876 645.8114 L1145.3165 656.0847 L1136.6876 645.8114 L1150.0836 645.0722 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/> 734 <path fill="none" d="M1444.5558 704.9604 L1108.7046 561.2993" clip-path="url(#clipPath2)"/> 735 <path d="M1450.9917 707.7134 L1442.5894 709.5576 L1438.1199 702.2075 L1446.5222 700.3633 Z" clip-path="url(#clipPath2)" stroke="none"/> 727 736 <path fill="none" d="M915.7327 636.1665 L1015.2271 569.6371" clip-path="url(#clipPath2)"/> 728 737 <path fill="white" d="M1027.6963 561.2993 L1011.0607 565.2053 L1017.731 575.1807 Z" clip-path="url(#clipPath2)" stroke="none"/> … … 792 801 <text x="1603.5942" xml:space="preserve" y="1541.1147" clip-path="url(#clipPath2)" stroke="none">size()</text> 793 802 <rect fill="none" x="1582.2065" width="73.7305" height="56.3984" y="1494.2476" clip-path="url(#clipPath2)"/> 794 <path fill="none" stroke-dasharray="6,2" d="M15 52.2008 967.111 L1660.5536 1211.9993" clip-path="url(#clipPath2)"/>795 <path stroke-dasharray="6,2" d="M166 2.172 1215.6572 L1662.8036 1202.2556 L1662.172 1215.6572 L1651.8297 1207.1111Z" clip-path="url(#clipPath2)" stroke="none"/>796 <path fill="none" stroke-miterlimit="10" d="M166 2.172 1215.6572 L1662.8036 1202.2556 L1662.172 1215.6572 L1651.8297 1207.1111Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>797 <path fill="none" stroke-dasharray="6,2" d="M1567.21 59 1409.7681 L1391.3019 1347.9185" clip-path="url(#clipPath2)"/>798 <path stroke-dasharray="6,2" d="M13 87.5283 1346.5917 L1396.8589 1356.2322 L1387.5283 1346.5917 L1400.8391 1344.9115Z" clip-path="url(#clipPath2)" stroke="none"/>799 <path fill="none" stroke-miterlimit="10" d="M13 87.5283 1346.5917 L1396.8589 1356.2322 L1387.5283 1346.5917 L1400.8391 1344.9115Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>803 <path fill="none" stroke-dasharray="6,2" d="M1549.6364 967.111 L1659.2053 1212.0077" clip-path="url(#clipPath2)"/> 804 <path stroke-dasharray="6,2" d="M1660.8389 1215.6588 L1661.4149 1202.2548 L1660.8389 1215.6588 L1650.4613 1207.1556 Z" clip-path="url(#clipPath2)" stroke="none"/> 805 <path fill="none" stroke-miterlimit="10" d="M1660.8389 1215.6588 L1661.4149 1202.2548 L1660.8389 1215.6588 L1650.4613 1207.1556 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/> 806 <path fill="none" stroke-dasharray="6,2" d="M1567.2101 1412.85 L1335.5917 1334.7506" clip-path="url(#clipPath2)"/> 807 <path stroke-dasharray="6,2" d="M1331.8014 1333.4725 L1341.2551 1342.9923 L1331.8014 1333.4725 L1345.0895 1331.6213 Z" clip-path="url(#clipPath2)" stroke="none"/> 808 <path fill="none" stroke-miterlimit="10" d="M1331.8014 1333.4725 L1341.2551 1342.9923 L1331.8014 1333.4725 L1345.0895 1331.6213 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/> 800 809 <path fill="none" d="M1892.3491 1482.4468 L1901.077 1442.4995" clip-path="url(#clipPath2)"/> 801 810 <path fill="white" d="M1904.2788 1427.8452 L1895.0018 1442.1958 L1906.7253 1444.7572 Z" clip-path="url(#clipPath2)" stroke="none"/> … … 873 882 <text x="1431.8735" xml:space="preserve" y="1141.8176" clip-path="url(#clipPath2)" stroke="none">Boulware, Bayesian</text> 874 883 <rect fill="none" x="1424.8735" width="124.3965" height="70.5312" y="1080.8176" clip-path="url(#clipPath2)"/> 875 <path fill="none" stroke-dasharray="6,2" d="M148 4.5331 1044.1659 L1481.5381 972.1007" clip-path="url(#clipPath2)"/>876 <path stroke-dasharray="6,2" d="M14 81.3719 968.1042 L1475.8755 980.343 L1481.3719 968.1042 L1487.8651 979.8447Z" clip-path="url(#clipPath2)" stroke="none"/>877 <path fill="none" stroke-miterlimit="10" d="M14 81.3719 968.1042 L1475.8755 980.343 L1481.3719 968.1042 L1487.8651 979.8447Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>884 <path fill="none" stroke-dasharray="6,2" d="M1483.866 1044.1659 L1480.0837 972.0981" clip-path="url(#clipPath2)"/> 885 <path stroke-dasharray="6,2" d="M1479.874 968.1036 L1474.5114 980.4017 L1479.874 968.1036 L1486.4949 979.7726 Z" clip-path="url(#clipPath2)" stroke="none"/> 886 <path fill="none" stroke-miterlimit="10" d="M1479.874 968.1036 L1474.5114 980.4017 L1479.874 968.1036 L1486.4949 979.7726 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/> 878 887 </g> 879 888 <g fill="rgb(245,245,245)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(245,245,245)"> 880 <rect x="739.5845" y="0" clip-path="url(#clipPath2)" width=" 495.8594" rx="4" ry="4" height="370.666" stroke="none"/>881 <rect x="739.5845" y="0" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width=" 495.8594" height="21.666" stroke="none"/>882 </g> 883 <g font-size="15px" stroke-linecap="butt" transform="matrix(1,0,0,1,-17,15)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> 884 <text x="11 72.5942" xml:space="preserve" y="16.502" clip-path="url(#clipPath2)" stroke="none">protocol</text>885 <rect x="739.5845" y="0" clip-path="url(#clipPath2)" fill="none" width=" 495.8594" stroke-dasharray="6,2" rx="4" ry="4" height="370.666"/>889 <rect x="739.5845" y="0" clip-path="url(#clipPath2)" width="507.6172" rx="4" ry="4" height="370.666" stroke="none"/> 890 <rect x="739.5845" y="0" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="507.6172" height="21.666" stroke="none"/> 891 </g> 892 <g font-size="15px" stroke-linecap="butt" transform="matrix(1,0,0,1,-17,15)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> 893 <text x="1184.3521" xml:space="preserve" y="16.502" clip-path="url(#clipPath2)" stroke="none">protocol</text> 894 <rect x="739.5845" y="0" clip-path="url(#clipPath2)" fill="none" width="507.6172" stroke-dasharray="6,2" rx="4" ry="4" height="370.666"/> 886 895 </g> 887 896 <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="white"> … … 969 978 <text x="832.1401" xml:space="preserve" y="197.2012" clip-path="url(#clipPath2)" stroke="none">AllPermutationsProtocol</text> 970 979 <rect fill="none" x="825.1401" width="153.8633" height="30" y="177.666" clip-path="url(#clipPath2)"/> 971 <path fill="none" d="M602.536 594.3585 L961.6526 295.7988" clip-path="url(#clipPath2)"/> 972 <path d="M597.1533 598.8336 L599.3395 590.5137 L607.9187 589.8834 L605.7325 598.2033 Z" clip-path="url(#clipPath2)" stroke="none"/> 973 <text x="604.5836" xml:space="preserve" y="589.3022" clip-path="url(#clipPath2)" stroke="none"> 1</text> 980 </g> 981 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 982 <rect x="1165.7148" width="48.5703" height="30" y="158.666" clip-path="url(#clipPath2)" stroke="none"/> 983 </g> 984 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 985 <rect fill="none" x="1165.7148" width="48.5703" height="30" y="158.666" clip-path="url(#clipPath2)"/> 986 <text x="1172.7148" xml:space="preserve" y="178.2012" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">AMOP</text> 987 </g> 988 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 989 <rect x="1178.686" width="53.5156" height="30" y="98.666" clip-path="url(#clipPath2)" stroke="none"/> 990 </g> 991 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 992 <rect fill="none" x="1178.686" width="53.5156" height="30" y="98.666" clip-path="url(#clipPath2)"/> 993 <text x="1185.686" xml:space="preserve" y="118.2012" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">SHAOP</text> 994 <path fill="none" d="M602.8268 594.3963 L967.1334 295.8168" clip-path="url(#clipPath2)"/> 995 <path d="M597.4128 598.8335 L599.6573 590.5292 L608.2408 589.959 L605.9963 598.2634 Z" clip-path="url(#clipPath2)" stroke="none"/> 996 <text x="605.0865" xml:space="preserve" y="589.3022" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none"> 1</text> 974 997 <path fill="none" stroke-dasharray="6,2" d="M1001.976 253.5332 L1040.6111 198.752" clip-path="url(#clipPath2)"/> 975 998 <path stroke-dasharray="6,2" d="M1042.9165 195.4832 L1031.097 201.8316 L1042.9165 195.4832 L1040.9036 208.7478 Z" clip-path="url(#clipPath2)" stroke="none"/> … … 978 1001 <path fill="white" d="M971.3823 295.7988 L957.0272 305.0688 L966.6621 312.222 Z" clip-path="url(#clipPath2)" stroke="none"/> 979 1002 <path fill="none" d="M971.3823 295.7988 L957.0272 305.0688 L966.6621 312.222 Z" clip-path="url(#clipPath2)"/> 980 <path fill="none" d="M93 5.6086 362.6224 L922.983 475.1665" clip-path="url(#clipPath2)"/>981 <path d="M9 36.389 355.666 L940.5775 363.1798 L934.8282 369.5787 L930.6398 362.0649Z" clip-path="url(#clipPath2)" stroke="none"/>1003 <path fill="none" d="M939.6277 362.596 L923.4553 475.1665" clip-path="url(#clipPath2)"/> 1004 <path d="M940.6232 355.6672 L944.5769 363.3071 L938.6323 369.5249 L934.6786 361.885 Z" clip-path="url(#clipPath2)" stroke="none"/> 982 1005 <path fill="none" d="M1057.5162 90.666 L1049.2598 78.9331" clip-path="url(#clipPath2)"/> 983 1006 <path fill="white" d="M1040.6273 66.666 L1044.9285 83.2039 L1054.7421 76.2979 Z" clip-path="url(#clipPath2)" stroke="none"/> … … 995 1018 <path fill="white" d="M837.2718 252.666 L853.0884 246.1981 L844.9355 237.3929 Z" clip-path="url(#clipPath2)" stroke="none"/> 996 1019 <path fill="none" d="M837.2718 252.666 L853.0884 246.1981 L844.9355 237.3929 Z" clip-path="url(#clipPath2)"/> 1020 <path fill="none" d="M1165.7148 174.738 L1121.772 176.6777" clip-path="url(#clipPath2)"/> 1021 <path fill="white" d="M1106.7866 177.3391 L1123.0356 182.6277 L1122.5065 170.6394 Z" clip-path="url(#clipPath2)" stroke="none"/> 1022 <path fill="none" d="M1106.7866 177.3391 L1123.0356 182.6277 L1122.5065 170.6394 Z" clip-path="url(#clipPath2)"/> 1023 <path fill="none" d="M1178.686 125.3327 L1102.2244 158.6709" clip-path="url(#clipPath2)"/> 1024 <path fill="white" d="M1088.4745 164.666 L1105.5391 163.7712 L1100.7429 152.7713 Z" clip-path="url(#clipPath2)" stroke="none"/> 1025 <path fill="none" d="M1088.4745 164.666 L1105.5391 163.7712 L1100.7429 152.7713 Z" clip-path="url(#clipPath2)"/> 997 1026 </g> 998 1027 <g fill="rgb(245,245,245)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(245,245,245)"> … … 1073 1102 <text x="1618.1763" xml:space="preserve" y="338.1348" clip-path="url(#clipPath2)" stroke="none">DomainRef</text> 1074 1103 <rect fill="none" x="1611.1763" width="77.791" height="30" y="316.666" clip-path="url(#clipPath2)"/> 1075 <path fill="none" d="M1227.40 41 242.5872 L1524.2651 274.368" clip-path="url(#clipPath2)"/>1076 <path d="M1220.4 438 241.8421 L1227.9363 237.6156 L1234.3643 243.3324 L1226.8718 247.5588 Z" clip-path="url(#clipPath2)" stroke="none"/>1104 <path fill="none" d="M1227.4084 241.7495 L1524.2651 274.2892" clip-path="url(#clipPath2)"/> 1105 <path d="M1220.4501 240.9868 L1227.9532 236.7793 L1234.3667 242.5123 L1226.8636 246.7198 Z" clip-path="url(#clipPath2)" stroke="none"/> 1077 1106 <path fill="none" d="M1558.9607 292.666 L1575.4185 356.1461" clip-path="url(#clipPath2)"/> 1078 1107 <path fill="white" d="M1579.1829 370.666 L1580.9755 353.6723 L1569.3595 356.6838 Z" clip-path="url(#clipPath2)" stroke="none"/> 1079 1108 <path fill="none" d="M1579.1829 370.666 L1580.9755 353.6723 L1569.3595 356.6838 Z" clip-path="url(#clipPath2)"/> 1080 <path fill="none" d="M1 181.4537 251.7088 L1458.9939 385.666" clip-path="url(#clipPath2)"/>1081 <path d="M1 175.1497 248.666 L1183.6272 247.2058 L1187.7578 254.7515 L1179.2804 256.2117Z" clip-path="url(#clipPath2)" stroke="none"/>1082 <path fill="none" d="M1 328.016 686.8245 L1481.577 415.666" clip-path="url(#clipPath2)"/>1083 <path d="M1 324.5665 692.9155 L1323.6653 684.3605 L1331.4655 680.7334 L1332.3668 689.2883Z" clip-path="url(#clipPath2)" stroke="none"/>1109 <path fill="none" d="M1481.9142 698.6856 L1489.6611 415.666" clip-path="url(#clipPath2)"/> 1110 <path d="M1481.7227 705.683 L1476.916 698.5488 L1482.1057 691.6882 L1486.9124 698.8224 Z" clip-path="url(#clipPath2)" stroke="none"/> 1111 <path fill="none" d="M1190.1161 251.7621 L1459.8555 385.666" clip-path="url(#clipPath2)"/> 1112 <path d="M1183.8462 248.6495 L1192.3394 247.2835 L1196.3861 254.8746 L1187.8929 256.2406 Z" clip-path="url(#clipPath2)" stroke="none"/> 1084 1113 <path fill="none" d="M1524.8892 395.0503 L1532.6401 393.8001" clip-path="url(#clipPath2)"/> 1085 1114 <path fill="white" d="M1547.4487 391.4117 L1530.6975 388.0359 L1532.6083 399.8828 Z" clip-path="url(#clipPath2)" stroke="none"/> … … 1088 1117 <path d="M1604.5685 725.0825 L1598.8954 718.616 L1603.1725 711.1523 L1608.8456 717.6188 Z" clip-path="url(#clipPath2)" stroke="none"/> 1089 1118 <text x="1594.5719" xml:space="preserve" y="715.5513" clip-path="url(#clipPath2)" stroke="none"> *</text> 1090 <path fill="none" d="M1 337.8975 688.2268 L1562.4437485.666" clip-path="url(#clipPath2)"/>1091 <path d="M1 332.6998 692.9155 L1334.5483 684.5142 L1343.0951 683.538 L1341.2466 691.9394Z" clip-path="url(#clipPath2)" stroke="none"/>1119 <path fill="none" d="M1489.7264 699.1636 L1573.2065 485.666" clip-path="url(#clipPath2)"/> 1120 <path d="M1487.1772 705.683 L1485.0698 697.3428 L1492.2756 692.6443 L1494.3831 700.9845 Z" clip-path="url(#clipPath2)" stroke="none"/> 1092 1121 <path fill="none" d="M1579.7777 455.666 L1581.6608 415.6494" clip-path="url(#clipPath2)"/> 1093 1122 <path fill="white" d="M1582.3658 400.666 L1575.6204 416.3663 L1587.6072 416.9304 Z" clip-path="url(#clipPath2)" stroke="none"/> 1094 1123 <path fill="none" d="M1582.3658 400.666 L1575.6204 416.3663 L1587.6072 416.9304 Z" clip-path="url(#clipPath2)"/> 1095 <path fill="none" d="M1046. 1815 281.4452 L1431.2983 325.6135" clip-path="url(#clipPath2)"/>1096 <path d="M1039.2 271 280.6476 L1046.7511 276.4778 L1053.1359 282.2428 L1045.6118 286.4126Z" clip-path="url(#clipPath2)" stroke="none"/>1124 <path fill="none" d="M1046.2069 280.8481 L1431.2983 325.5412" clip-path="url(#clipPath2)"/> 1125 <path d="M1039.2535 280.0411 L1046.7833 275.8814 L1053.1602 281.6551 L1045.6305 285.8147 Z" clip-path="url(#clipPath2)" stroke="none"/> 1097 1126 <path fill="none" d="M1509.3656 312.4284 L1535.3496 292.666" clip-path="url(#clipPath2)"/> 1098 1127 <path d="M1503.7939 316.666 L1506.3387 308.4487 L1514.9373 308.1909 L1512.3925 316.4082 Z" clip-path="url(#clipPath2)" stroke="none"/> … … 1109 1138 <path fill="none" d="M1601.6829 370.666 L1617.9055 365.2972 L1610.3752 355.954 Z" clip-path="url(#clipPath2)"/> 1110 1139 </g> 1140 <g fill="rgb(245,245,245)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(245,245,245)"> 1141 <rect x="1698.2383" y="1879.7272" clip-path="url(#clipPath2)" width="238.343" rx="4" ry="4" height="207.7158" stroke="none"/> 1142 <rect x="1698.2383" y="1879.7272" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="238.343" height="21.666" stroke="none"/> 1143 </g> 1144 <g font-size="15px" stroke-linecap="butt" transform="matrix(1,0,0,1,-17,15)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> 1145 <text x="1819.3347" xml:space="preserve" y="1896.2291" clip-path="url(#clipPath2)" stroke="none">opponentmodel</text> 1146 <rect x="1698.2383" y="1879.7272" clip-path="url(#clipPath2)" fill="none" width="238.343" stroke-dasharray="6,2" rx="4" ry="4" height="207.7158"/> 1147 </g> 1148 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 1149 <rect x="1713.2383" width="107.2812" height="30" y="1916.3932" clip-path="url(#clipPath2)" stroke="none"/> 1150 </g> 1151 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 1152 <rect fill="none" x="1713.2383" width="107.2812" height="30" y="1916.3932" clip-path="url(#clipPath2)"/> 1153 <text x="1720.2383" xml:space="preserve" y="1935.9283" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">OpponentModel</text> 1154 </g> 1155 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 1156 <rect x="1754.7219" width="166.8594" height="30" y="2042.443" clip-path="url(#clipPath2)" stroke="none"/> 1157 </g> 1158 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 1159 <rect fill="none" x="1754.7219" width="166.8594" height="30" y="2042.443" clip-path="url(#clipPath2)"/> 1160 <text x="1761.7219" xml:space="preserve" y="2061.9783" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">FrequencyOpponentModel</text> 1161 <path fill="none" d="M1746.3726 1916.3932 L1147.6935 1478.4703" clip-path="url(#clipPath2)"/> 1162 <path fill="white" d="M1135.5867 1469.6145 L1144.9583 1483.9034 L1152.043 1474.218 Z" clip-path="url(#clipPath2)" stroke="none"/> 1163 <path fill="none" d="M1135.5867 1469.6145 L1144.9583 1483.9034 L1152.043 1474.218 Z" clip-path="url(#clipPath2)"/> 1164 <path fill="none" d="M1829.6702 2042.443 L1782.7434 1959.4504" clip-path="url(#clipPath2)"/> 1165 <path fill="white" d="M1775.3604 1946.3932 L1778.0127 1963.274 L1788.4585 1957.3677 Z" clip-path="url(#clipPath2)" stroke="none"/> 1166 <path fill="none" d="M1775.3604 1946.3932 L1778.0127 1963.274 L1788.4585 1957.3677 Z" clip-path="url(#clipPath2)"/> 1167 </g> 1168 <g fill="rgb(245,245,245)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(245,245,245)"> 1169 <rect x="2132.1243" y="1452.3112" clip-path="url(#clipPath2)" width="365.5882" rx="4" ry="4" height="411.7296" stroke="none"/> 1170 <rect x="2132.1243" y="1452.3112" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="365.5882" height="21.666" stroke="none"/> 1171 </g> 1172 <g font-size="15px" stroke-linecap="butt" transform="matrix(1,0,0,1,-17,15)" text-rendering="geometricPrecision" font-family="sans-serif" shape-rendering="geometricPrecision" stroke-miterlimit="1.45"> 1173 <text x="2468.7739" xml:space="preserve" y="1468.8131" clip-path="url(#clipPath2)" stroke="none">boa</text> 1174 <rect x="2132.1243" y="1452.3112" clip-path="url(#clipPath2)" fill="none" width="365.5882" stroke-dasharray="6,2" rx="4" ry="4" height="411.7296"/> 1175 </g> 1176 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 1177 <rect x="2241.8506" width="63.8281" height="30" y="1488.9772" clip-path="url(#clipPath2)" stroke="none"/> 1178 </g> 1179 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 1180 <rect fill="none" x="2241.8506" width="63.8281" height="30" y="1488.9772" clip-path="url(#clipPath2)"/> 1181 <text x="2248.8506" xml:space="preserve" y="1508.5123" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">BoaParty</text> 1182 </g> 1183 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 1184 <rect x="2189.171" width="127.6191" height="30" y="1709.6782" clip-path="url(#clipPath2)" stroke="none"/> 1185 </g> 1186 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 1187 <rect fill="none" x="2189.171" width="127.6191" height="30" y="1709.6782" clip-path="url(#clipPath2)"/> 1188 <text x="2196.1709" xml:space="preserve" y="1729.2134" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">AcceptanceStrategy</text> 1189 </g> 1190 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 1191 <rect x="2186.7135" width="127.6191" height="42.2656" y="1806.7751" clip-path="url(#clipPath2)" stroke="none"/> 1192 </g> 1193 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 1194 <rect fill="none" x="2186.7135" width="127.6191" height="42.2656" y="1806.7751" clip-path="url(#clipPath2)"/> 1195 <text x="2204.2837" xml:space="preserve" y="1825.3767" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">TimeDependent</text> 1196 <text x="2193.7134" xml:space="preserve" y="1839.5095" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">AcceptanceStrategy</text> 1197 </g> 1198 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 1199 <rect x="2147.1243" width="63.6523" height="30" y="1635.019" clip-path="url(#clipPath2)" stroke="none"/> 1200 </g> 1201 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 1202 <rect fill="none" x="2147.1243" width="63.6523" height="30" y="1635.019" clip-path="url(#clipPath2)"/> 1203 <text x="2154.1243" xml:space="preserve" y="1654.5542" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">BoaState</text> 1204 </g> 1205 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 1206 <rect x="2377.4234" width="105.2891" height="30" y="1696.8975" clip-path="url(#clipPath2)" stroke="none"/> 1207 </g> 1208 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 1209 <rect fill="none" x="2377.4234" width="105.2891" height="30" y="1696.8975" clip-path="url(#clipPath2)"/> 1210 <text x="2384.4233" xml:space="preserve" y="1716.4326" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">BiddingStrategy</text> 1211 </g> 1212 <g fill="rgb(255,204,0)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="rgb(255,204,0)"> 1213 <rect x="2377.019" width="105.2891" height="42.2656" y="1794.3473" clip-path="url(#clipPath2)" stroke="none"/> 1214 </g> 1215 <g text-rendering="geometricPrecision" stroke-miterlimit="1.45" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke-linecap="butt"> 1216 <rect fill="none" x="2377.019" width="105.2891" height="42.2656" y="1794.3473" clip-path="url(#clipPath2)"/> 1217 <text x="2385.2495" xml:space="preserve" y="1812.9489" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">TimeDe[endent</text> 1218 <text x="2384.019" xml:space="preserve" y="1827.0817" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">BiddingStrategy</text> 1219 <path fill="none" stroke-dasharray="6,2" d="M2132.144 1470.3217 L1645.9929 970.6581" clip-path="url(#clipPath2)"/> 1220 <path stroke-dasharray="6,2" d="M1643.2035 967.7912 L1647.2715 980.576 L1643.2035 967.7912 L1655.8721 972.2076 Z" clip-path="url(#clipPath2)" stroke="none"/> 1221 <path fill="none" stroke-miterlimit="10" d="M1643.2035 967.7912 L1647.2715 980.576 L1643.2035 967.7912 L1655.8721 972.2076 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/> 1222 <path fill="none" d="M2254.3931 1709.6782 L2271.6958 1525.9463" clip-path="url(#clipPath2)"/> 1223 <path d="M2272.3521 1518.9772 L2276.6738 1526.415 L2271.0396 1532.9155 L2266.7178 1525.4775 Z" clip-path="url(#clipPath2)" stroke="none"/> 1224 <path fill="none" d="M2251.0261 1806.7751 L2252.2666 1754.674" clip-path="url(#clipPath2)"/> 1225 <path fill="white" d="M2252.6235 1739.6782 L2246.2444 1755.5309 L2258.2412 1755.8164 Z" clip-path="url(#clipPath2)" stroke="none"/> 1226 <path fill="none" d="M2252.6235 1739.6782 L2246.2444 1755.5309 L2258.2412 1755.8164 Z" clip-path="url(#clipPath2)"/> 1227 <path fill="none" d="M1788.8463 1916.3932 L2151.2021 1668.9664" clip-path="url(#clipPath2)"/> 1228 <path d="M2156.9829 1665.019 L2154.0217 1673.0956 L2145.4214 1672.9139 L2148.3826 1664.8373 Z" clip-path="url(#clipPath2)" stroke="none"/> 1229 <text x="2134.3411" xml:space="preserve" y="1683.0403" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none">*</text> 1230 <path fill="none" d="M2188.6887 1635.019 L2260.2146 1524.8484" clip-path="url(#clipPath2)"/> 1231 <path d="M2264.0264 1518.9772 L2264.4082 1527.571 L2256.4028 1530.7195 L2256.021 1522.1257 Z" clip-path="url(#clipPath2)" stroke="none"/> 1232 <path fill="none" d="M2418.7917 1696.8975 L2289.2471 1524.5725" clip-path="url(#clipPath2)"/> 1233 <path d="M2285.0408 1518.9772 L2293.2437 1521.568 L2293.4534 1530.1677 L2285.2505 1527.5769 Z" clip-path="url(#clipPath2)" stroke="none"/> 1234 <path fill="none" d="M2429.7461 1794.3473 L2429.9507 1741.8973" clip-path="url(#clipPath2)"/> 1235 <path fill="white" d="M2430.0093 1726.8975 L2423.9468 1742.8739 L2435.9468 1742.9208 Z" clip-path="url(#clipPath2)" stroke="none"/> 1236 <path fill="none" d="M2430.0093 1726.8975 L2423.9468 1742.8739 L2435.9468 1742.9208 Z" clip-path="url(#clipPath2)"/> 1237 </g> 1111 1238 </g> 1112 1239 </svg> -
events/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>events</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 40 40 41 41 <dependencies> 42 42 <dependency> 43 <groupId>geniusweb</groupId> 44 <artifactId>timeline</artifactId> 45 <version>${geniusweb.version}</version> 46 </dependency> 43 47 <dependency> 44 48 <groupId>geniusweb</groupId> -
events/src/main/java/geniusweb/actions/Action.java
r10 r21 16 16 @JsonSubTypes.Type(value = Accept.class), 17 17 @JsonSubTypes.Type(value = Comparison.class), 18 @JsonSubTypes.Type(value = ElicitComparison.class) }) 18 @JsonSubTypes.Type(value = ElicitComparison.class), 19 @JsonSubTypes.Type(value = Vote.class), 20 @JsonSubTypes.Type(value = Votes.class) }) 19 21 public interface Action { 20 22 /** -
exampleparties/anac2019/agentgg/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties.anac2019</groupId> 7 7 <artifactId>agentgg</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.6</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 60 60 <groupId>tudelft.utilities</groupId> 61 61 <artifactId>immutablelist</artifactId> 62 <version>1.1. 0</version>62 <version>1.1.1</version> 63 63 </dependency> 64 64 -
exampleparties/anac2019/agentgg/src/main/java/geniusweb/exampleparties/agentgg/AgentGG.java
r19 r21 19 19 import geniusweb.actions.PartyId; 20 20 import geniusweb.bidspace.AllBidsList; 21 import geniusweb.inform.ActionDone; 22 import geniusweb.inform.Finished; 23 import geniusweb.inform.Inform; 24 import geniusweb.inform.Settings; 25 import geniusweb.inform.YourTurn; 21 26 import geniusweb.issuevalue.Bid; 22 27 import geniusweb.issuevalue.Value; 23 28 import geniusweb.party.Capabilities; 24 29 import geniusweb.party.DefaultParty; 25 import geniusweb.party.inform.ActionDone;26 import geniusweb.party.inform.Finished;27 import geniusweb.party.inform.Inform;28 import geniusweb.party.inform.Settings;29 import geniusweb.party.inform.YourTurn;30 30 import geniusweb.profile.PartialOrdering; 31 31 import geniusweb.profileconnection.ProfileConnectionFactory; -
exampleparties/anac2019/agentgg/src/test/java/geniusweb/exampleparties/agentgg/AgentGGTest.java
r19 r21 34 34 import geniusweb.actions.PartyId; 35 35 import geniusweb.connection.ConnectionEnd; 36 import geniusweb.inform.ActionDone; 37 import geniusweb.inform.Finished; 38 import geniusweb.inform.Inform; 39 import geniusweb.inform.Settings; 40 import geniusweb.inform.YourTurn; 36 41 import geniusweb.issuevalue.Bid; 37 42 import geniusweb.party.Capabilities; 38 import geniusweb.party.inform.ActionDone;39 import geniusweb.party.inform.Finished;40 import geniusweb.party.inform.Inform;41 import geniusweb.party.inform.Settings;42 import geniusweb.party.inform.YourTurn;43 43 import geniusweb.profile.DefaultPartialOrdering; 44 44 import geniusweb.profile.PartialOrdering; -
exampleparties/anac2019/winkyagent/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties.anac2019</groupId> 7 7 <artifactId>winkyagent</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.6</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 60 60 <groupId>tudelft.utilities</groupId> 61 61 <artifactId>immutablelist</artifactId> 62 <version>1.1. 0</version>62 <version>1.1.1</version> 63 63 </dependency> 64 64 -
exampleparties/anac2019/winkyagent/src/main/java/geniusweb/exampleparties/anac2019/winkyagent/WinkyAgent.java
r12 r21 19 19 import geniusweb.actions.PartyId; 20 20 import geniusweb.bidspace.AllBidsList; 21 import geniusweb.inform.ActionDone; 22 import geniusweb.inform.Finished; 23 import geniusweb.inform.Inform; 24 import geniusweb.inform.Settings; 25 import geniusweb.inform.YourTurn; 21 26 import geniusweb.issuevalue.Bid; 22 27 import geniusweb.issuevalue.DiscreteValue; … … 26 31 import geniusweb.party.Capabilities; 27 32 import geniusweb.party.DefaultParty; 28 import geniusweb.party.inform.ActionDone;29 import geniusweb.party.inform.Finished;30 import geniusweb.party.inform.Inform;31 import geniusweb.party.inform.Settings;32 import geniusweb.party.inform.YourTurn;33 33 import geniusweb.profile.PartialOrdering; 34 34 import geniusweb.profileconnection.ProfileConnectionFactory; -
exampleparties/anac2019/winkyagent/src/test/java/geniusweb/exampleparties/anac2019/winkyagent/WinkyAgentTest.java
r12 r21 34 34 import geniusweb.actions.PartyId; 35 35 import geniusweb.connection.ConnectionEnd; 36 import geniusweb.inform.ActionDone; 37 import geniusweb.inform.Finished; 38 import geniusweb.inform.Inform; 39 import geniusweb.inform.Settings; 40 import geniusweb.inform.YourTurn; 36 41 import geniusweb.issuevalue.Bid; 37 42 import geniusweb.party.Capabilities; 38 import geniusweb.party.inform.ActionDone;39 import geniusweb.party.inform.Finished;40 import geniusweb.party.inform.Inform;41 import geniusweb.party.inform.Settings;42 import geniusweb.party.inform.YourTurn;43 43 import geniusweb.profile.DefaultPartialOrdering; 44 44 import geniusweb.profile.PartialOrdering; -
exampleparties/boulware/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>boulware</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
exampleparties/comparebids/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>comparebids</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.6</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 55 55 <groupId>tudelft.utilities</groupId> 56 56 <artifactId>immutablelist</artifactId> 57 <version>1.1. 0</version>57 <version>1.1.1</version> 58 58 </dependency> 59 59 -
exampleparties/comparebids/src/main/java/geniusweb/exampleparties/comparebids/CompareBids.java
r10 r21 12 12 import geniusweb.actions.ElicitComparison; 13 13 import geniusweb.actions.PartyId; 14 import geniusweb.inform.ActionDone; 15 import geniusweb.inform.Finished; 16 import geniusweb.inform.Inform; 17 import geniusweb.inform.Settings; 14 18 import geniusweb.issuevalue.Bid; 15 19 import geniusweb.party.Capabilities; 16 20 import geniusweb.party.DefaultParty; 17 import geniusweb.party.inform.ActionDone;18 import geniusweb.party.inform.Finished;19 import geniusweb.party.inform.Inform;20 import geniusweb.party.inform.Settings;21 21 import geniusweb.profile.PartialOrdering; 22 22 import geniusweb.profile.Profile; -
exampleparties/comparebids/src/test/java/geniusweb/exampleparties/comparebids/CompareBidsTest.java
r10 r21 29 29 import geniusweb.bidspace.AllBidsList; 30 30 import geniusweb.connection.ConnectionEnd; 31 import geniusweb.inform.ActionDone; 32 import geniusweb.inform.Inform; 33 import geniusweb.inform.Settings; 31 34 import geniusweb.issuevalue.Bid; 32 35 import geniusweb.party.Capabilities; 33 import geniusweb.party.inform.ActionDone;34 import geniusweb.party.inform.Inform;35 import geniusweb.party.inform.Settings;36 36 import geniusweb.profile.Profile; 37 37 import geniusweb.profile.utilityspace.LinearAdditive; -
exampleparties/conceder/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>conceder</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
exampleparties/hardliner/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>hardliner</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
exampleparties/humangui/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>humangui</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.6</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 46 46 <artifactId>profileconnection</artifactId> 47 47 <version>${geniusweb.version}</version> 48 </dependency>49 <dependency>50 <groupId>tudelft.utilities</groupId>51 <artifactId>immutablelist</artifactId>52 <version>1.1.0</version>53 48 </dependency> 54 49 <dependency> -
exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/BiddingInfo.java
r9 r21 13 13 import geniusweb.actions.PartyId; 14 14 import geniusweb.connection.ConnectionEnd; 15 import geniusweb.inform.Inform; 16 import geniusweb.inform.Settings; 15 17 import geniusweb.issuevalue.Bid; 16 import geniusweb.party.inform.Inform;17 import geniusweb.party.inform.Settings;18 18 import geniusweb.profile.Profile; 19 19 import geniusweb.profileconnection.ProfileInterface; -
exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/HumanGui.java
r10 r21 11 11 import geniusweb.actions.Action; 12 12 import geniusweb.actions.Offer; 13 import geniusweb.inform.ActionDone; 14 import geniusweb.inform.Finished; 15 import geniusweb.inform.Inform; 16 import geniusweb.inform.Settings; 17 import geniusweb.inform.YourTurn; 13 18 import geniusweb.party.Capabilities; 14 19 import geniusweb.party.DefaultParty; 15 20 import geniusweb.party.Party; 16 import geniusweb.party.inform.ActionDone;17 import geniusweb.party.inform.Finished;18 import geniusweb.party.inform.Inform;19 import geniusweb.party.inform.Settings;20 import geniusweb.party.inform.YourTurn;21 21 import geniusweb.profileconnection.ProfileConnectionFactory; 22 22 import geniusweb.profileconnection.ProfileInterface; -
exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/BiddingInfoTest.java
r10 r21 29 29 import geniusweb.actions.Accept; 30 30 import geniusweb.actions.PartyId; 31 import geniusweb.inform.Settings; 31 32 import geniusweb.issuevalue.Bid; 32 import geniusweb.party.inform.Settings;33 33 import geniusweb.profile.Profile; 34 34 import geniusweb.profile.utilityspace.LinearAdditive; -
exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/HumanGuiTest.java
r11 r21 27 27 import geniusweb.actions.PartyId; 28 28 import geniusweb.bidspace.AllBidsList; 29 import geniusweb.inform.ActionDone; 30 import geniusweb.inform.Finished; 31 import geniusweb.inform.Settings; 32 import geniusweb.inform.YourTurn; 29 33 import geniusweb.issuevalue.Bid; 30 34 import geniusweb.party.Capabilities; 31 import geniusweb.party.inform.ActionDone;32 import geniusweb.party.inform.Finished;33 import geniusweb.party.inform.Settings;34 import geniusweb.party.inform.YourTurn;35 35 import geniusweb.profile.Profile; 36 36 import geniusweb.profile.utilityspace.LinearAdditive; -
exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/MyGUITest.java
r9 r21 19 19 import geniusweb.actions.PartyId; 20 20 import geniusweb.connection.ConnectionEnd; 21 import geniusweb. party.inform.Inform;22 import geniusweb. party.inform.Settings;21 import geniusweb.inform.Inform; 22 import geniusweb.inform.Settings; 23 23 import geniusweb.profileconnection.ProfileConnectionFactory; 24 24 import geniusweb.profileconnection.ProfileInterface; -
exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/TestConnection.java
r9 r21 8 8 import geniusweb.actions.Action; 9 9 import geniusweb.connection.ConnectionEnd; 10 import geniusweb. party.inform.Inform;10 import geniusweb.inform.Inform; 11 11 import geniusweb.references.Reference; 12 12 import tudelft.utilities.listener.DefaultListenable; -
exampleparties/linear/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>linear</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
exampleparties/randomparty/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>randomparty</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.6</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 55 55 <groupId>tudelft.utilities</groupId> 56 56 <artifactId>immutablelist</artifactId> 57 <version>1.1. 0</version>57 <version>1.1.1</version> 58 58 </dependency> 59 59 -
exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java
r10 r21 5 5 import java.util.Arrays; 6 6 import java.util.HashSet; 7 import java.util.List; 7 8 import java.util.Random; 8 9 import java.util.logging.Level; 10 import java.util.stream.Collectors; 9 11 10 12 import geniusweb.actions.Accept; … … 12 14 import geniusweb.actions.Offer; 13 15 import geniusweb.actions.PartyId; 16 import geniusweb.actions.Vote; 17 import geniusweb.actions.Votes; 14 18 import geniusweb.bidspace.AllPartialBidsList; 19 import geniusweb.inform.ActionDone; 20 import geniusweb.inform.Finished; 21 import geniusweb.inform.Inform; 22 import geniusweb.inform.OptIn; 23 import geniusweb.inform.Settings; 24 import geniusweb.inform.Voting; 25 import geniusweb.inform.YourTurn; 15 26 import geniusweb.issuevalue.Bid; 16 27 import geniusweb.party.Capabilities; 17 28 import geniusweb.party.DefaultParty; 18 import geniusweb.party.inform.ActionDone;19 import geniusweb.party.inform.Finished;20 import geniusweb.party.inform.Inform;21 import geniusweb.party.inform.Settings;22 import geniusweb.party.inform.YourTurn;23 29 import geniusweb.profile.PartialOrdering; 24 30 import geniusweb.profile.Profile; … … 33 39 * A simple party that places random bids and accepts when it receives an offer 34 40 * with sufficient utility. 41 * <h2>voting</h2> If the party receives a parameter "minPower", it will 42 * {@link Vote} using that minPower instead of the default value 2 if it 43 * receives a {@link Voting} request. 35 44 */ 36 45 public class RandomParty extends DefaultParty { … … 41 50 protected ProfileInterface profileint; 42 51 private Progress progress; 52 private Settings settings; 53 private Votes lastvotes; 43 54 44 55 public RandomParty() { … … 58 69 this.me = settings.getID(); 59 70 this.progress = settings.getProgress(); 71 this.settings = settings; 60 72 } else if (info instanceof ActionDone) { 61 73 Action otheract = ((ActionDone) info).getAction(); … … 64 76 } 65 77 } else if (info instanceof YourTurn) { 66 myTurn(); 67 if (progress instanceof ProgressRounds) { 68 progress = ((ProgressRounds) progress).advance(); 69 } 78 makeOffer(); 79 nextRound(); 70 80 } else if (info instanceof Finished) { 71 81 getReporter().log(Level.INFO, "Final ourcome:" + info); 82 } else if (info instanceof Voting) { 83 lastvotes = vote((Voting) info); 84 getConnection().send(lastvotes); 85 nextRound(); 86 } else if (info instanceof OptIn) { 87 // just repeat our last vote. 88 getConnection().send(lastvotes); 89 nextRound(); 72 90 } 73 91 } catch (Exception e) { … … 76 94 } 77 95 96 private void nextRound() { 97 if (progress instanceof ProgressRounds) { 98 progress = ((ProgressRounds) progress).advance(); 99 } 100 101 } 102 78 103 @Override 79 104 public Capabilities getCapabilities() { 80 return new Capabilities(new HashSet<>(Arrays.asList("SAOP"))); 105 return new Capabilities( 106 new HashSet<>(Arrays.asList("SAOP", "AMOP", "MOPAC"))); 81 107 } 82 108 … … 86 112 } 87 113 88 private void myTurn() throws IOException { 114 /** 115 * send our next offer 116 */ 117 private void makeOffer() throws IOException { 89 118 Action action; 90 if (isGood(lastReceivedBid)) { 119 String protocol = settings.getProtocol().getURI().getPath(); 120 if ((protocol.equals("SAOP") || protocol.equals("SHAOP")) 121 && isGood(lastReceivedBid)) { 91 122 action = new Accept(me, lastReceivedBid); 92 123 } else { … … 105 136 } 106 137 107 private boolean isGood(Bid bid) throws IOException { 138 /** 139 * @param bid the bid to check 140 * @return true iff bid is good for us. 141 */ 142 private boolean isGood(Bid bid) { 108 143 if (bid == null) 109 144 return false; 110 Profile profile = profileint.getProfile(); 111 if (profile instanceof UtilitySpace) { 145 Profile profile; 146 try { 147 profile = profileint.getProfile(); 148 } catch (IOException e) { 149 throw new IllegalStateException(e); 150 } 151 if (profile instanceof UtilitySpace) 112 152 return ((UtilitySpace) profile).getUtility(bid).doubleValue() > 0.6; 113 }114 153 if (profile instanceof PartialOrdering) { 115 154 return ((PartialOrdering) profile).isPreferredOrEqual(bid, 116 155 profile.getReservationBid()); 117 156 } 118 throw new IllegalArgumentException( 119 "Can not handle profile type " + profile.getClass()); 157 return false; 158 } 159 160 /** 161 * @param voting the {@link Voting} object containing the options 162 * 163 * @return our next Votes. 164 */ 165 private Votes vote(Voting voting) throws IOException { 166 Object val = settings.getParameters().get("minPowwer"); 167 Integer n = (val instanceof Integer) ? (Integer) val : 2; 168 for (Bid bid : voting.getBids()) { 169 System.out.println("Bid " + bid + "=" 170 + ((UtilitySpace) profileint.getProfile()).getUtility(bid)); 171 } 172 List<Vote> votes = voting.getBids().stream().distinct() 173 .filter(bid -> isGood(bid)).map(bid -> new Vote(me, bid, n)) 174 .collect(Collectors.toList()); 175 return new Votes(me, votes); 120 176 } 121 177 -
exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java
r10 r21 16 16 import java.nio.file.Files; 17 17 import java.nio.file.Paths; 18 import java.util.Arrays; 19 import java.util.Collections; 18 20 import java.util.LinkedList; 19 21 import java.util.List; … … 32 34 import geniusweb.actions.Offer; 33 35 import geniusweb.actions.PartyId; 36 import geniusweb.actions.Votes; 34 37 import geniusweb.bidspace.AllBidsList; 35 38 import geniusweb.connection.ConnectionEnd; 39 import geniusweb.inform.ActionDone; 40 import geniusweb.inform.Finished; 41 import geniusweb.inform.Inform; 42 import geniusweb.inform.Settings; 43 import geniusweb.inform.Voting; 44 import geniusweb.inform.YourTurn; 36 45 import geniusweb.issuevalue.Bid; 37 46 import geniusweb.party.Capabilities; 38 import geniusweb.party.inform.ActionDone;39 import geniusweb.party.inform.Finished;40 import geniusweb.party.inform.Inform;41 import geniusweb.party.inform.Settings;42 import geniusweb.party.inform.YourTurn;43 47 import geniusweb.profile.Profile; 44 48 import geniusweb.profile.utilityspace.LinearAdditive; … … 53 57 public class RandomPartyTest { 54 58 59 private static final PartyId PARTY1 = new PartyId("party1"); 55 60 private static final String SAOP = "SAOP"; 56 61 private static final PartyId otherparty = new PartyId("other"); … … 60 65 private RandomParty party; 61 66 private final TestConnection connection = new TestConnection(); 62 private final ProtocolRef protocol = mock(ProtocolRef.class);67 private final ProtocolRef protocol = new ProtocolRef(SAOP); 63 68 private final ProgressRounds progress = mock(ProgressRounds.class); 64 69 private Settings settings; … … 70 75 IOException, URISyntaxException { 71 76 party = new RandomParty(); 72 settings = new Settings( new PartyId("party1"),77 settings = new Settings(PARTY1, 73 78 new ProfileRef(new URI("file:" + PROFILE)), protocol, progress, 74 79 parameters); … … 189 194 } 190 195 196 @Test 197 public void testVoting() { 198 party.connect(connection); 199 party.notifyChange(settings); 200 201 Bid bid = findGoodBid(); 202 party.notifyChange(new Voting(Arrays.asList(bid), 203 Collections.singletonMap(PARTY1, 1))); 204 assertEquals(1, connection.getActions().size()); 205 Action action = connection.getActions().get(0); 206 assertTrue(action instanceof Votes); 207 assertEquals(1, ((Votes) action).getVotes().size()); 208 assertEquals(bid, ((Votes) action).getVotes().get(0).getBid()); 209 } 210 191 211 } 192 212 -
exampleparties/randompartypy/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>randompyparty</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 48 48 <groupId>tudelft.utilities</groupId> 49 49 <artifactId>immutablelist</artifactId> 50 <version>1.1. 0</version>50 <version>1.1.1</version> 51 51 </dependency> 52 52 -
exampleparties/randompartypy/src/main/resources/RandomParty.py
r10 r21 2 2 import traceback 3 3 4 import geniusweb. party.inform.ActionDone as ActionDone5 import geniusweb. party.inform.Inform as Inform6 import geniusweb. party.inform.Settings as Settings7 import geniusweb. party.inform.YourTurn as YourTurn4 import geniusweb.inform.ActionDone as ActionDone 5 import geniusweb.inform.Inform as Inform 6 import geniusweb.inform.Settings as Settings 7 import geniusweb.inform.YourTurn as YourTurn 8 8 9 9 -
exampleparties/randompartypy/src/test/java/geniusweb/exampleparties/randompartypy/RandomPartyTest.java
r10 r21 32 32 import geniusweb.bidspace.AllBidsList; 33 33 import geniusweb.connection.ConnectionEnd; 34 import geniusweb.inform.ActionDone; 35 import geniusweb.inform.Inform; 36 import geniusweb.inform.Settings; 37 import geniusweb.inform.YourTurn; 34 38 import geniusweb.issuevalue.Bid; 35 39 import geniusweb.party.Capabilities; 36 import geniusweb.party.inform.ActionDone;37 import geniusweb.party.inform.Inform;38 import geniusweb.party.inform.Settings;39 import geniusweb.party.inform.YourTurn;40 40 import geniusweb.profile.Profile; 41 41 import geniusweb.profile.utilityspace.LinearAdditive; -
exampleparties/simpleboa/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>simpleboaparty</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.6</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
exampleparties/simpleboa/src/main/java/geniusweb/exampleparties/simpleboa/SimpleBoa.java
r20 r21 8 8 import geniusweb.boa.biddingstrategy.BiddingStrategy; 9 9 import geniusweb.boa.biddingstrategy.TimeDependentBiddingStrategy; 10 import geniusweb.inform.Settings; 10 11 import geniusweb.opponentmodel.FrequencyOpponentModel; 11 12 import geniusweb.opponentmodel.OpponentModel; 12 13 import geniusweb.party.Party; 13 import geniusweb.party.inform.Settings;14 14 import tudelft.utilities.logging.Reporter; 15 15 -
exampleparties/simpleboa/src/test/java/geniusweb/exampleparties/simpleboa/SimpleBoaTest.java
r20 r21 36 36 import geniusweb.bidspace.AllBidsList; 37 37 import geniusweb.connection.ConnectionEnd; 38 import geniusweb.inform.ActionDone; 39 import geniusweb.inform.Finished; 40 import geniusweb.inform.Inform; 41 import geniusweb.inform.Settings; 42 import geniusweb.inform.YourTurn; 38 43 import geniusweb.issuevalue.Bid; 39 44 import geniusweb.party.Capabilities; 40 import geniusweb.party.inform.ActionDone;41 import geniusweb.party.inform.Finished;42 import geniusweb.party.inform.Inform;43 import geniusweb.party.inform.Settings;44 import geniusweb.party.inform.YourTurn;45 45 import geniusweb.profile.Profile; 46 46 import geniusweb.profile.utilityspace.LinearAdditive; -
exampleparties/simpleshaop/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>simpleshaop</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.6</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 55 55 <groupId>tudelft.utilities</groupId> 56 56 <artifactId>immutablelist</artifactId> 57 <version>1.1. 0</version>57 <version>1.1.1</version> 58 58 </dependency> 59 59 -
exampleparties/simpleshaop/src/main/java/geniusweb/exampleparties/simpleshaop/ShaopParty.java
r12 r21 16 16 import geniusweb.actions.PartyId; 17 17 import geniusweb.bidspace.AllBidsList; 18 import geniusweb.inform.ActionDone; 19 import geniusweb.inform.Finished; 20 import geniusweb.inform.Inform; 21 import geniusweb.inform.Settings; 22 import geniusweb.inform.YourTurn; 18 23 import geniusweb.issuevalue.Bid; 19 24 import geniusweb.party.Capabilities; 20 25 import geniusweb.party.DefaultParty; 21 import geniusweb.party.inform.ActionDone;22 import geniusweb.party.inform.Finished;23 import geniusweb.party.inform.Inform;24 import geniusweb.party.inform.Settings;25 import geniusweb.party.inform.YourTurn;26 26 import geniusweb.profile.PartialOrdering; 27 27 import geniusweb.profileconnection.ProfileConnectionFactory; -
exampleparties/simpleshaop/src/test/java/geniusweb/exampleparties/simpleshaop/ShaopPartyTest.java
r10 r21 36 36 import geniusweb.actions.PartyId; 37 37 import geniusweb.connection.ConnectionEnd; 38 import geniusweb.inform.ActionDone; 39 import geniusweb.inform.Finished; 40 import geniusweb.inform.Inform; 41 import geniusweb.inform.Settings; 42 import geniusweb.inform.YourTurn; 38 43 import geniusweb.issuevalue.Bid; 39 44 import geniusweb.issuevalue.DiscreteValue; 40 45 import geniusweb.issuevalue.Value; 41 46 import geniusweb.party.Capabilities; 42 import geniusweb.party.inform.ActionDone;43 import geniusweb.party.inform.Finished;44 import geniusweb.party.inform.Inform;45 import geniusweb.party.inform.Settings;46 import geniusweb.party.inform.YourTurn;47 47 import geniusweb.profile.Profile; 48 48 import geniusweb.progress.ProgressRounds; -
exampleparties/timedependentparty/pom.xml
r20 r21 6 6 <groupId>geniusweb.exampleparties</groupId> 7 7 <artifactId>timedependentparty</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 55 55 <groupId>tudelft.utilities</groupId> 56 56 <artifactId>immutablelist</artifactId> 57 <version>1.1. 0</version>57 <version>1.1.1</version> 58 58 </dependency> 59 59 -
exampleparties/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/TimeDependentParty.java
r20 r21 13 13 import geniusweb.actions.Offer; 14 14 import geniusweb.actions.PartyId; 15 import geniusweb.inform.ActionDone; 16 import geniusweb.inform.Finished; 17 import geniusweb.inform.Inform; 18 import geniusweb.inform.Settings; 19 import geniusweb.inform.YourTurn; 15 20 import geniusweb.issuevalue.Bid; 16 21 import geniusweb.party.Capabilities; 17 22 import geniusweb.party.DefaultParty; 18 import geniusweb.party.inform.ActionDone;19 import geniusweb.party.inform.Finished;20 import geniusweb.party.inform.Inform;21 import geniusweb.party.inform.Settings;22 import geniusweb.party.inform.YourTurn;23 23 import geniusweb.profile.Profile; 24 24 import geniusweb.profile.utilityspace.LinearAdditive; -
exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java
r10 r21 34 34 import geniusweb.bidspace.AllBidsList; 35 35 import geniusweb.connection.ConnectionEnd; 36 import geniusweb.inform.ActionDone; 37 import geniusweb.inform.Finished; 38 import geniusweb.inform.Inform; 39 import geniusweb.inform.Settings; 40 import geniusweb.inform.YourTurn; 36 41 import geniusweb.issuevalue.Bid; 37 42 import geniusweb.party.Capabilities; 38 import geniusweb.party.inform.ActionDone;39 import geniusweb.party.inform.Finished;40 import geniusweb.party.inform.Inform;41 import geniusweb.party.inform.Settings;42 import geniusweb.party.inform.YourTurn;43 43 import geniusweb.profile.Profile; 44 44 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace; -
issuevalue/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>issuevalue</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 93 93 <groupId>tudelft.utilities</groupId> 94 94 <artifactId>immutablelist</artifactId> 95 <version>1.1. 0</version>95 <version>1.1.1</version> 96 96 </dependency> 97 97 -
opponentmodel/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>opponentmodel</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
party/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>party</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
party/src/main/java/geniusweb/party/DefaultParty.java
r9 r21 3 3 import geniusweb.actions.Action; 4 4 import geniusweb.connection.ConnectionEnd; 5 import geniusweb. party.inform.Inform;5 import geniusweb.inform.Inform; 6 6 import tudelft.utilities.listener.Listener; 7 7 import tudelft.utilities.logging.ReportToLogger; -
party/src/main/java/geniusweb/party/Party.java
r1 r21 3 3 import geniusweb.actions.Action; 4 4 import geniusweb.connection.Connectable; 5 import geniusweb. party.inform.Inform;5 import geniusweb.inform.Inform; 6 6 7 7 /** -
party/src/test/java/geniusweb/party/inform/ActionDoneTest.java
r1 r21 21 21 import geniusweb.actions.Accept; 22 22 import geniusweb.actions.PartyId; 23 import geniusweb.inform.ActionDone; 24 import geniusweb.inform.Inform; 23 25 import geniusweb.issuevalue.Bid; 24 26 import geniusweb.issuevalue.DiscreteValue; 25 27 import geniusweb.issuevalue.NumberValue; 26 28 import geniusweb.issuevalue.Value; 27 import geniusweb.party.inform.ActionDone;28 import geniusweb.party.inform.Inform;29 29 import tudelft.utilities.junit.GeneralTests; 30 30 -
party/src/test/java/geniusweb/party/inform/FinishedTest.java
r1 r21 8 8 import java.util.Arrays; 9 9 import java.util.HashMap; 10 import java.util.HashSet; 10 11 import java.util.List; 11 12 import java.util.Map; … … 19 20 import com.fasterxml.jackson.databind.ObjectMapper; 20 21 22 import geniusweb.actions.PartyId; 23 import geniusweb.inform.Agreements; 24 import geniusweb.inform.Finished; 25 import geniusweb.inform.Inform; 21 26 import geniusweb.issuevalue.Bid; 22 27 import geniusweb.issuevalue.DiscreteValue; 23 28 import geniusweb.issuevalue.NumberValue; 24 29 import geniusweb.issuevalue.Value; 25 import geniusweb.party.inform.Finished;26 import geniusweb.party.inform.Inform;27 30 import tudelft.utilities.junit.GeneralTests; 28 31 … … 31 34 private Finished finished1, finished1a, finished2, finished3; 32 35 33 private String asJson = "{\"Finished\":{\"agreedBid\":{\"issuevalues\":{\"issue3\":9012,\"issue2\":1,\"issue1\":\"b\"}}}}"; 36 private String asJson = "{\"Finished\":{\"agreements\":{\"party2\":{\"issuevalues\":{\"issue3\":9012,\"issue2\":1,\"issue1\":\"b\"}},\"party1\":{\"issuevalues\":{\"issue3\":9012,\"issue2\":1,\"issue1\":\"b\"}}}}}"; 37 38 private PartyId party1 = new PartyId("party1"); 39 private PartyId party2 = new PartyId("party2"); 34 40 35 41 @Before … … 57 63 Bid bidc = new Bid(issuevaluesc); 58 64 59 finished1 = new Finished(bid); 60 finished1a = new Finished(bid); 61 finished2 = new Finished(bidb); 62 finished3 = new Finished(bidc); 65 Agreements agree = new Agreements().with(bid, 66 new HashSet<>(Arrays.asList(party1, party2))); 67 Agreements agreeb = new Agreements().with(bidb, 68 new HashSet<>(Arrays.asList(party1, party2))); 69 Agreements agreec = new Agreements().with(bidc, 70 new HashSet<>(Arrays.asList(party1, party2))); 71 72 finished1 = new Finished(agree); 73 finished1a = new Finished(agree); 74 finished2 = new Finished(agreeb); 75 finished3 = new Finished(agreec); 63 76 } 64 77 … … 93 106 public void testDeserialize() 94 107 throws JsonParseException, JsonMappingException, IOException { 108 // FIXME there seems a disturbing bug in this test, 109 // jackson seems to ignore the @JsonProperty annotation and therefore 110 // this test does not work in some cases. 95 111 ObjectMapper jackson = new ObjectMapper(); 96 112 Finished p = (Finished) jackson.readValue(asJson, Inform.class); -
party/src/test/java/geniusweb/party/inform/SettingsTest.java
r8 r21 21 21 22 22 import geniusweb.actions.PartyId; 23 import geniusweb.inform.Inform; 24 import geniusweb.inform.Settings; 23 25 import geniusweb.progress.ProgressRounds; 24 26 import geniusweb.references.Parameters; -
party/src/test/java/geniusweb/party/inform/YourTurnTest.java
r1 r21 16 16 import com.fasterxml.jackson.databind.ObjectMapper; 17 17 18 import geniusweb. party.inform.Inform;19 import geniusweb. party.inform.YourTurn;18 import geniusweb.inform.Inform; 19 import geniusweb.inform.YourTurn; 20 20 import tudelft.utilities.junit.GeneralTests; 21 21 -
pom.xml
r20 r21 22 22 <module>profile</module> 23 23 <module>events</module> 24 <module>voting</module> 24 25 <module>bidspace</module> 25 26 <module>party</module> -
profile/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>profile</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 42 42 <groupId>tudelft.utilities</groupId> 43 43 <artifactId>immutablelist</artifactId> 44 <version>1.1. 0</version>44 <version>1.1.1</version> 45 45 </dependency> 46 46 -
profileconnection/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>profileconnection</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
protocol/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>protocol</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 28 28 29 29 <dependencies> 30 30 <dependency> 31 <groupId>geniusweb</groupId> 32 <artifactId>issuevalue</artifactId> 33 <version>${geniusweb.version}</version> 34 </dependency> 35 <dependency> 36 <groupId>geniusweb</groupId> 37 <artifactId>voting</artifactId> 38 <version>${geniusweb.version}</version> 39 </dependency> 31 40 <dependency> 32 41 <groupId>geniusweb</groupId> … … 34 43 <version>${geniusweb.version}</version> 35 44 </dependency> 36 <dependency>45 <!-- <dependency> 37 46 <groupId>geniusweb</groupId> 38 47 <artifactId>party</artifactId> 39 48 <version>${geniusweb.version}</version> 40 49 </dependency> 41 <dependency>50 --> <dependency> 42 51 <groupId>geniusweb</groupId> 43 52 <artifactId>references</artifactId> … … 52 61 <groupId>tudelft.utilities</groupId> 53 62 <artifactId>immutablelist</artifactId> 54 <version>1.1. 0</version>63 <version>1.1.1</version> 55 64 </dependency> 56 65 <dependency> -
protocol/src/main/java/geniusweb/protocol/NegoProtocol.java
r9 r21 8 8 9 9 import geniusweb.connection.ConnectionFactory; 10 import geniusweb.deadline.Deadline; 10 11 import geniusweb.events.CurrentState; 11 12 import geniusweb.events.ProtocolEvent; … … 26 27 * {@link #getDescription()}. A protocol reports the progress through its 27 28 * {@link Listenable} interface. <br> 28 * < p>29 * <h2>General information</h2> 29 30 * 30 31 * A protocol is mutable because the incoming connections cause state changes. … … 33 34 * Because a protocol contains an internal state, it can be used only once. 34 35 * <p> 35 * The protocol also needs to keep an eye on the deadline and take appropriate36 * actions when the deadline is reached. <br>37 * <p>38 * A protocol should emit a {@link SessionEnded} or {@link TournamentEnded}39 * event when it is finished.40 36 * <p> 41 37 * The protocol can emit a {@link CurrentState} event at any time. It should do … … 48 44 * {@link #start(SessionSettings, ConnectionFactory)}. 49 45 * 46 * <h2>Ensure time deadline</h2> 47 * 48 * The protocol also needs to keep an eye on the deadline and take appropriate 49 * actions when the deadline is reached. <br> 50 * A protocol should emit a {@link SessionEnded} or {@link TournamentEnded} 51 * event when it is finished. 52 * <p> 53 * All protocol implementations must ensure that the deadline is kept and that 54 * the session ends at the agreed time {@link Deadline#getDuration()}. This is 55 * to ensure that the negotiation ends and resources are freed up at or before 56 * some known time. 57 * 50 58 */ 51 59 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE) 52 60 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) 53 @JsonSubTypes({ @Type(value = SessionProtocol.class), @Type(value = TournamentProtocol.class) }) 61 @JsonSubTypes({ @Type(value = SessionProtocol.class), 62 @Type(value = TournamentProtocol.class) }) 54 63 55 64 public interface NegoProtocol extends Listenable<ProtocolEvent> { … … 64 73 * <p> 65 74 * 66 * All errors are to be handled through {@link SessionState#getError()} except67 * for plain {@link IllegalArgumentException}s. <br>68 * The protocol usually uses the incoming connections to keep running. It does69 * not need to run in a separate thread or so.75 * All errors are to be handled through {@link SessionState#getError()} 76 * except for plain {@link IllegalArgumentException}s. <br> 77 * The protocol usually uses the incoming connections to keep running. It 78 * does not need to run in a separate thread or so. 70 79 * 71 80 * 72 * @param connectionfactory the {@link ProtocolToPartyConnFactory} that allows73 * the protocol to connect with the {@link Reference}s74 * in the settings81 * @param connectionfactory the {@link ProtocolToPartyConnFactory} that 82 * allows the protocol to connect with the 83 * {@link Reference}s in the settings 75 84 */ 76 85 void start(ProtocolToPartyConnFactory connectionfactory); … … 78 87 /** 79 88 * 80 * @return a complete description of how this protocol behaves. Presented to the81 * end users who should know negotiation basics but not all technical82 * te rms.89 * @return a complete description of how this protocol behaves. Presented to 90 * the end users who should know negotiation basics but not all 91 * technical terms. 83 92 */ 84 93 String getDescription(); … … 86 95 /** 87 96 * @return current state: the results of all sessions run so far and how to 88 * continue from that point. Changes over time as the session proceeds.89 * Errors are also stored in the state.97 * continue from that point. Changes over time as the session 98 * proceeds. Errors are also stored in the state. 90 99 */ 91 100 NegoState getState(); … … 98 107 99 108 /** 100 * Add a party after the protocol has started. Only some protocols can handle 101 * this call. Usual protocols take the settings with their constructor. 109 * Add a party after the protocol has started. Only some protocols can 110 * handle this call. Usual protocols take the settings with their 111 * constructor. 102 112 * 103 113 * @param party the {@link PartyWithProfile} to be added. -
protocol/src/main/java/geniusweb/protocol/NegoState.java
r1 r21 5 5 import com.fasterxml.jackson.annotation.JsonSubTypes; 6 6 import com.fasterxml.jackson.annotation.JsonSubTypes.Type; 7 import com.fasterxml.jackson.annotation.JsonTypeInfo; 7 8 8 9 import geniusweb.protocol.session.SessionState; 9 10 import geniusweb.protocol.tournament.TournamentState; 10 11 11 import com.fasterxml.jackson.annotation.JsonTypeInfo;12 13 12 /** 14 * The current state of the tournament. Must be serializabl;e so that it can be15 * restarted if a crash occurs.13 * The current state of the session/tournament. Must be serializabl;e so that it 14 * can be restarted if a crash occurs. 16 15 */ 17 16 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE) … … 36 35 boolean isFinal(long currentTimeMs); 37 36 38 /**39 *40 * @return a fatal error occured during the tournament. returns null if no41 * errors occured.42 */43 ProtocolException getError();44 37 } -
protocol/src/main/java/geniusweb/protocol/ProtocolException.java
r4 r21 2 2 3 3 import geniusweb.actions.PartyId; 4 import geniusweb.party.Party;5 4 import geniusweb.references.PartyRef; 6 5 … … 10 9 */ 11 10 public class ProtocolException extends Exception { 12 private String party; // the failing party 11 private static final long serialVersionUID = 4618901784366523980L; 12 private PartyId party; // the failing party 13 13 14 14 /** … … 17 17 * {@link PartyRef} 18 18 */ 19 public ProtocolException(String message, Stringparty) {19 public ProtocolException(String message, PartyId party) { 20 20 this(message, party, null); 21 21 } … … 30 30 * 31 31 * @param message the error message 32 * @param party offending party, either the {@link PartyId} or a 33 * {@link PartyRef} 32 * @param party offending {@link PartyId} 34 33 * @param e the cause of the error 35 34 */ 36 public ProtocolException(String message, Stringparty, Throwable e) {35 public ProtocolException(String message, PartyId party, Throwable e) { 37 36 super(party + ":" + message, e, true, false); 38 37 this.party = party; … … 43 42 * @return offending party, either the {@link PartyId} or a {@link PartyRef} 44 43 */ 45 public StringgetParty() {44 public PartyId getParty() { 46 45 return party; 47 46 } -
protocol/src/main/java/geniusweb/protocol/partyconnection/ProtocolToPartyConn.java
r9 r21 4 4 import geniusweb.actions.PartyId; 5 5 import geniusweb.connection.ConnectionEnd; 6 import geniusweb. party.inform.Inform;6 import geniusweb.inform.Inform; 7 7 8 8 /** … … 14 14 /** 15 15 * 16 * @return the partyId of the party that this connects to 16 * @return the partyId of the party that this connects to. 17 17 */ 18 18 PartyId getParty(); -
protocol/src/main/java/geniusweb/protocol/partyconnection/ProtocolToPartyConnFactory.java
r9 r21 6 6 import geniusweb.actions.Action; 7 7 import geniusweb.connection.ConnectionFactory; 8 import geniusweb. party.inform.Inform;8 import geniusweb.inform.Inform; 9 9 import geniusweb.references.Reference; 10 10 import tudelft.utilities.repository.NoResourcesNowException; -
protocol/src/main/java/geniusweb/protocol/partyconnection/ProtocolToPartyConnections.java
r9 r21 9 9 10 10 import geniusweb.actions.PartyId; 11 import geniusweb. party.inform.Inform;11 import geniusweb.inform.Inform; 12 12 13 13 /** 14 14 * Contains all parties with their connections. immutable 15 15 */ 16 public class ProtocolToPartyConnections implements Iterable<ProtocolToPartyConn> { 16 public class ProtocolToPartyConnections 17 implements Iterable<ProtocolToPartyConn> { 17 18 private List<ProtocolToPartyConn> connections; 18 19 -
protocol/src/main/java/geniusweb/protocol/session/DefaultSessionState.java
r10 r21 57 57 * {@link ProtocolException}s. All errors in our own 58 58 * code are bugs (not ProtocolExceptions) and should 59 * result in a throw .59 * result in a throw and terminate the session. 60 60 */ 61 61 public DefaultSessionState(List<Action> actions, … … 130 130 } 131 131 132 @Override133 132 public ProtocolException getError() { 134 133 return error; -
protocol/src/main/java/geniusweb/protocol/session/SessionResult.java
r20 r21 10 10 import com.fasterxml.jackson.annotation.JsonTypeInfo; 11 11 12 import geniusweb.i ssuevalue.Bid;12 import geniusweb.inform.Agreements; 13 13 import geniusweb.references.PartyWithProfile; 14 14 … … 20 20 public class SessionResult { 21 21 private final List<PartyWithProfile> participants; 22 private final Bid agreement;22 private final Agreements agreements; 23 23 private final List<Double> penalties; 24 24 … … 33 33 * never be null. Some of them may have entered later of 34 34 * left early. This list should contain them all. 35 * @param agreement the final agreement {@link Bid} of the session. Null 36 * if no agreement was reached. 35 * @param agreements the final Agreements. 37 36 * @param penalties the penalties in [0,1] for each participant, same 38 37 * order as the participants list. … … 48 47 public SessionResult( 49 48 @JsonProperty("participants") List<PartyWithProfile> participants, 50 @JsonProperty("agreement ") Bid agreement,49 @JsonProperty("agreements") Agreements agreements, 51 50 @JsonProperty("penalties") List<Double> penalties, 52 51 @JsonProperty("error") Throwable error) { 53 52 this.participants = participants; 54 this.agreement = agreement;53 this.agreements = agreements; 55 54 this.penalties = penalties; 56 55 this.error = error; … … 69 68 70 69 /** 71 * 8return the final agreement {@link Bid} of the session. Null if no72 * agreement was reached.70 * 8return the final {@link Agreements} of the session. May be empty, not 71 * null 73 72 */ 74 public Bid getAgreement() {75 return agreement ;73 public Agreements getAgreements() { 74 return agreements; 76 75 }; 77 76 … … 99 98 @Override 100 99 public String toString() { 101 return "SessionResult[" + participants + "," + agreement + ","100 return "SessionResult[" + participants + "," + agreements + "," 102 101 + penalties + "," + error + "]"; 103 102 } … … 108 107 int result = 1; 109 108 result = prime * result 110 + ((agreement == null) ? 0 : agreement.hashCode());109 + ((agreements == null) ? 0 : agreements.hashCode()); 111 110 result = prime * result + ((error == null) ? 0 : error.hashCode()); 112 111 result = prime * result … … 126 125 return false; 127 126 SessionResult other = (SessionResult) obj; 128 if (agreement == null) {129 if (other.agreement != null)127 if (agreements == null) { 128 if (other.agreements != null) 130 129 return false; 131 } else if (!agreement .equals(other.agreement))130 } else if (!agreements.equals(other.agreements)) 132 131 return false; 133 132 if (error == null) { -
protocol/src/main/java/geniusweb/protocol/session/SessionSettings.java
r10 r21 6 6 7 7 import geniusweb.protocol.NegoSettings; 8 import geniusweb.protocol.session.amop.AMOPSettings; 9 import geniusweb.protocol.session.mopac.MOPACSettings; 8 10 import geniusweb.protocol.session.saop.SAOPSettings; 9 11 import geniusweb.protocol.session.shaop.SHAOPSettings; … … 15 17 */ 16 18 @JsonSubTypes({ @JsonSubTypes.Type(value = SAOPSettings.class), 17 @JsonSubTypes.Type(value = SHAOPSettings.class) }) 19 @JsonSubTypes.Type(value = SHAOPSettings.class), 20 @JsonSubTypes.Type(value = AMOPSettings.class), 21 @JsonSubTypes.Type(value = MOPACSettings.class) }) 18 22 public interface SessionSettings extends NegoSettings { 19 23 -
protocol/src/main/java/geniusweb/protocol/session/SessionState.java
r20 r21 6 6 7 7 import geniusweb.actions.Action; 8 import geniusweb.i ssuevalue.Bid;8 import geniusweb.inform.Agreements; 9 9 import geniusweb.progress.Progress; 10 10 import geniusweb.protocol.NegoState; 11 import geniusweb.protocol.session.amop.AMOPState; 12 import geniusweb.protocol.session.mopac.MOPACState; 11 13 import geniusweb.protocol.session.saop.SAOPState; 12 14 import geniusweb.protocol.session.shaop.SHAOPState; … … 35 37 */ 36 38 @JsonSubTypes({ @JsonSubTypes.Type(value = SAOPState.class), 37 @JsonSubTypes.Type(value = SHAOPState.class) }) 38 39 @JsonSubTypes.Type(value = SHAOPState.class), 40 @JsonSubTypes.Type(value = AMOPState.class), 41 @JsonSubTypes.Type(value = MOPACState.class) }) 39 42 public interface SessionState extends NegoState { 40 43 … … 45 48 * 46 49 * @return unmodifyable list of actions done so far, in the order in which 47 * they arrived. 50 * they arrived. List of list allows implementations to add some 51 * extra structure to the actions, eg one list per phase 48 52 */ 49 53 List<Action> getActions(); … … 64 68 * {@link #isFinal()}. 65 69 */ 66 Bid getAgreement();70 Agreements getAgreements(); 67 71 68 72 /** -
protocol/src/main/java/geniusweb/protocol/session/TeamOfPartiesAndProfiles.java
r10 r21 7 7 import com.fasterxml.jackson.annotation.JsonSubTypes; 8 8 9 import geniusweb.protocol.session.saop.SaopPartyWithProfile;10 9 import geniusweb.protocol.session.shaop.ShaopTeam; 11 10 import geniusweb.references.PartyWithProfile; … … 23 22 // and do not (de)serialize individual TeamOfPartiesAndProfiles. 24 23 //@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) 25 @JsonSubTypes({ @JsonSubTypes.Type(value = SaopPartyWithProfile.class),24 @JsonSubTypes({ @JsonSubTypes.Type(value = OnePartyTeam.class), 26 25 @JsonSubTypes.Type(value = ShaopTeam.class) }) 27 26 public interface TeamOfPartiesAndProfiles { -
protocol/src/main/java/geniusweb/protocol/session/saop/SAOP.java
r10 r21 15 15 import geniusweb.deadline.Deadline; 16 16 import geniusweb.events.ProtocolEvent; 17 import geniusweb. party.inform.ActionDone;18 import geniusweb. party.inform.Finished;19 import geniusweb. party.inform.Inform;20 import geniusweb. party.inform.Settings;21 import geniusweb. party.inform.YourTurn;17 import geniusweb.inform.ActionDone; 18 import geniusweb.inform.Finished; 19 import geniusweb.inform.Inform; 20 import geniusweb.inform.Settings; 21 import geniusweb.inform.YourTurn; 22 22 import geniusweb.progress.ProgressFactory; 23 23 import geniusweb.protocol.CurrentNegoState; … … 227 227 } catch (IOException e) { 228 228 throw new ProtocolException("Failed to initialize", 229 connection.getParty() .getName(), e);229 connection.getParty(), e); 230 230 } 231 231 } … … 257 257 * Synchronized so that we always handle only 1 action at a time. 258 258 * 259 * @param partyconn the connection on which the action came in 259 * @param partyconn the connection on which the action came in. 260 260 * @param action the {@link Action} taken by some party 261 261 */ … … 266 266 if (err == null) { 267 267 err = new ProtocolException("Party sent a null action", 268 partyconn.getParty() .getName());269 } 270 handleError(partyconn + "Protocol error", 271 partyconn.getParty().getName(),err);268 partyconn.getParty()); 269 } 270 handleError(partyconn + "Protocol error", partyconn.getParty(), 271 err); 272 272 return; 273 273 } … … 278 278 throw new ProtocolException( 279 279 "Party acts without having the turn", 280 partyconn.getParty() .getName());280 partyconn.getParty()); 281 281 } 282 282 state.getConnections().broadcast(new ActionDone(action)); … … 286 286 } catch (Throwable e) { 287 287 handleError("failed to handle action " + action, 288 partyconn.getParty() .getName(), e);288 partyconn.getParty(), e); 289 289 } 290 290 … … 301 301 state.getConnections().get(party).send(new YourTurn()); 302 302 } catch (IOException e) { 303 handleError("failed to send YourTurn", party .getName(), e);303 handleError("failed to send YourTurn", party, e); 304 304 } 305 305 } … … 313 313 */ 314 314 private synchronized void handleError(final String message, 315 final Stringparty, final Throwable e) {315 final PartyId party, final Throwable e) { 316 316 if (e instanceof ProtocolException) { 317 317 setState(state.with((ProtocolException) e)); … … 353 353 if (!isFinishedInfoSent.compareAndSet(false, true)) 354 354 return; 355 Inform finished = new Finished(state.getAgreement ());355 Inform finished = new Finished(state.getAgreements()); 356 356 for (ProtocolToPartyConn conn : state.getConnections()) { 357 357 sendFinish(conn, finished); -
protocol/src/main/java/geniusweb/protocol/session/saop/SAOPSettings.java
r10 r21 10 10 11 11 import geniusweb.deadline.Deadline; 12 import geniusweb.protocol.session.OnePartyTeam; 12 13 import geniusweb.protocol.session.SessionProtocol; 13 14 import geniusweb.protocol.session.SessionSettings; … … 17 18 18 19 public class SAOPSettings implements SessionSettings { 19 private final List< SaopPartyWithProfile> participants;20 private final List<OnePartyTeam> participants; 20 21 private final Deadline deadline; 21 22 … … 30 31 @JsonCreator 31 32 public SAOPSettings( 32 @JsonProperty("participants") List< SaopPartyWithProfile> participants,33 @JsonProperty("participants") List<OnePartyTeam> participants, 33 34 @JsonProperty("deadline") Deadline deadline) { 34 35 this.participants = participants; … … 111 112 @Override 112 113 public SessionSettings with(TeamOfPartiesAndProfiles party) { 113 if (!(party instanceof SaopPartyWithProfile))114 if (!(party instanceof OnePartyTeam)) 114 115 throw new IllegalArgumentException( 115 "Added party must be SaopPartyWithProfile but got " 116 + party); 117 List<SaopPartyWithProfile> newparts = new LinkedList<>(participants); 118 newparts.add((SaopPartyWithProfile) party); 116 "Added party must be OnePartyTeam but got " + party); 117 List<OnePartyTeam> newparts = new LinkedList<>(participants); 118 newparts.add((OnePartyTeam) party); 119 119 return new SAOPSettings(newparts, deadline); 120 120 } -
protocol/src/main/java/geniusweb/protocol/session/saop/SAOPState.java
r20 r21 6 6 import java.util.List; 7 7 import java.util.Map; 8 import java.util.Set; 9 import java.util.stream.Collectors; 8 10 9 11 import geniusweb.actions.Accept; … … 12 14 import geniusweb.actions.Offer; 13 15 import geniusweb.actions.PartyId; 16 import geniusweb.inform.Agreements; 14 17 import geniusweb.issuevalue.Bid; 15 18 import geniusweb.progress.Progress; … … 113 116 114 117 @Override 115 public Bid getAgreement() { 118 public Agreements getAgreements() { 119 Agreements agree = new Agreements(); 116 120 List<Action> acts = getActions(); 117 121 int nparticipants = getConnections().size(); 118 122 if (nparticipants < 2 || acts.size() < nparticipants) { 119 return null;123 return agree; 120 124 } 121 125 Action offer = acts.get(acts.size() - nparticipants); 122 126 if (!(offer instanceof Offer)) 123 return null;127 return agree; 124 128 Bid bid = ((Offer) offer).getBid(); 125 129 … … 128 132 .allMatch(act -> act instanceof Accept 129 133 && bid.equals(((Accept) act).getBid())); 130 return allaccept ? bid : null; 134 if (allaccept) 135 agree = agree.with(bid, getParties()); 136 return agree; 137 } 138 139 /** 140 * 141 * @return all currently connected parties. 142 */ 143 private Set<PartyId> getParties() { 144 return getConnections().stream().map(conn -> conn.getParty()) 145 .collect(Collectors.toSet()); 131 146 } 132 147 … … 134 149 public boolean isFinal(long currentTimeMs) { 135 150 List<Action> acts = getActions(); 136 return super.isFinal(currentTimeMs) || getAgreement() != null137 || (!acts.isEmpty()151 return super.isFinal(currentTimeMs) 152 || !getAgreements().getMap().isEmpty() || (!acts.isEmpty() 138 153 && acts.get(acts.size() - 1) instanceof EndNegotiation); 139 154 } … … 254 269 for (int n = 0; n < getConnections().size(); n++) 255 270 emptylist.add(0d); 256 return new SessionResult(getSettings().getAllParties(), getAgreement (),271 return new SessionResult(getSettings().getAllParties(), getAgreements(), 257 272 emptylist, getError()); 258 273 } -
protocol/src/main/java/geniusweb/protocol/session/shaop/BareSHAOPState.java
r20 r21 158 158 } 159 159 160 @Override161 160 public ProtocolException getError() { 162 161 return error; … … 182 181 penalties[partyNumbers.get(party)] = spent; 183 182 } 184 return new SessionResult(getSettings().getAllParties(), getAgreement (),183 return new SessionResult(getSettings().getAllParties(), getAgreements(), 185 184 Arrays.asList(penalties), getError()); 186 185 -
protocol/src/main/java/geniusweb/protocol/session/shaop/SHAOP.java
r18 r21 21 21 import geniusweb.deadline.Deadline; 22 22 import geniusweb.events.ProtocolEvent; 23 import geniusweb. party.inform.ActionDone;24 import geniusweb. party.inform.Finished;25 import geniusweb. party.inform.Inform;26 import geniusweb. party.inform.Settings;27 import geniusweb. party.inform.YourTurn;23 import geniusweb.inform.ActionDone; 24 import geniusweb.inform.Finished; 25 import geniusweb.inform.Inform; 26 import geniusweb.inform.Settings; 27 import geniusweb.inform.YourTurn; 28 28 import geniusweb.progress.ProgressFactory; 29 29 import geniusweb.protocol.CurrentNegoState; … … 238 238 } catch (IOException e) { 239 239 throw new ProtocolException("Failed to initialize", 240 connection.getParty() .getName(), e);240 connection.getParty(), e); 241 241 } 242 242 } … … 276 276 } catch (Throwable e) { 277 277 handleError("failed to handle action " + action, 278 partyconn.getParty() .getName(), e);278 partyconn.getParty(), e); 279 279 } 280 280 } … … 289 289 290 290 if (action == null) 291 throw new ProtocolException("Party sent a null action", 292 partyid.getName()); 291 throw new ProtocolException("Party sent a null action", partyid); 293 292 294 293 // check if action allowed … … 296 295 if (!ALLOWED_ACTIONS.contains(action.getClass())) { 297 296 throw new ProtocolException( 298 "Illegal action for SHAOP Party:" + action, 299 partyid.getName()); 297 "Illegal action for SHAOP Party:" + action, partyid); 300 298 } 301 299 } else { 302 300 if (!(action instanceof Comparison)) 303 301 throw new ProtocolException( 304 "Illegal action for COB Party:" + action, 305 partyid.getName()); 302 "Illegal action for COB Party:" + action, partyid); 306 303 } 307 304 … … 316 313 if (!partyconn.getParty().equals(state.getCurrentTeam())) 317 314 throw new ProtocolException( 318 "Party acts without having the turn", 319 partyid.getName()); 315 "Party acts without having the turn", partyid); 320 316 setState(state.with(partyconn.getParty(), action)); 321 317 state.connections.broadcast(new ActionDone(action)); … … 336 332 state.getConnections().get(party).send(new YourTurn()); 337 333 } catch (IOException e) { 338 handleError("failed to send YourTurn", party .getName(), e);334 handleError("failed to send YourTurn", party, e); 339 335 } 340 336 } … … 348 344 */ 349 345 private synchronized void handleError(final String message, 350 final Stringparty, final Throwable e) {346 final PartyId party, final Throwable e) { 351 347 log.log(Level.WARNING, "SHAOP protocol intercepted error due to party " 352 348 + party + ": " + message, e); … … 388 384 if (!isFinishedInfoSent.compareAndSet(false, true)) 389 385 return; 390 Inform finished = new Finished(state.getAgreement ());386 Inform finished = new Finished(state.getAgreements()); 391 387 state.connections.stream().forEach(conn -> sendFinish(conn, finished)); 392 388 notifyListeners(new CurrentNegoState(state)); -
protocol/src/main/java/geniusweb/protocol/session/shaop/SHAOPState.java
r18 r21 6 6 import java.util.List; 7 7 import java.util.Map; 8 import java.util.Set; 9 import java.util.stream.Collectors; 8 10 9 11 import com.fasterxml.jackson.annotation.JsonCreator; … … 17 19 import geniusweb.actions.Offer; 18 20 import geniusweb.actions.PartyId; 21 import geniusweb.inform.Agreements; 19 22 import geniusweb.issuevalue.Bid; 20 23 import geniusweb.progress.Progress; … … 78 81 /** 79 82 * 83 * @return the team leader {@link PartyId}s. 84 */ 85 private Set<PartyId> getLeaders() { 86 return partyNumbers.keySet().stream().filter(id -> isShaopParty(id)) 87 .collect(Collectors.toSet()); 88 } 89 90 /** 91 * 80 92 * @param party a Party Id 81 93 * @return the PartyId of the party (COB and SHAOP are partners) … … 88 100 public boolean isFinal(long currentTimeMs) { 89 101 List<Action> acts = getActions(); 90 return super.isFinal(currentTimeMs) || getAgreement() != null91 || (!acts.isEmpty()102 return super.isFinal(currentTimeMs) 103 || !getAgreements().getMap().isEmpty() || (!acts.isEmpty() 92 104 && acts.get(acts.size() - 1) instanceof EndNegotiation); 93 105 } … … 166 178 167 179 @Override 168 public Bid getAgreement() { 180 public Agreements getAgreements() { 181 Agreements agrees = new Agreements(); 169 182 List<Action> acts = getActions(); 170 183 if (acts.isEmpty()) 171 return null;184 return agrees; 172 185 173 186 int requiredaccepts = getSettings().getTeams().size() - 1; … … 179 192 continue; 180 193 if (requiredaccepts == 0 && act instanceof Offer) 181 return ((Offer) act).getBid();194 return agrees.with(((Offer) act).getBid(), getLeaders()); 182 195 if (!(act instanceof Accept)) 183 return null;196 return agrees; 184 197 requiredaccepts--; 185 198 } 186 return null;199 return agrees; 187 200 } 188 201 -
protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsSettings.java
r18 r21 9 9 import com.fasterxml.jackson.annotation.JsonProperty; 10 10 11 import geniusweb.protocol.session.OnePartyTeam; 11 12 import geniusweb.protocol.session.SessionSettings; 12 13 import geniusweb.protocol.session.TeamOfPartiesAndProfiles; 14 import geniusweb.protocol.session.amop.AMOPSettings; 15 import geniusweb.protocol.session.mopac.MOPACSettings; 13 16 import geniusweb.protocol.session.saop.SAOPSettings; 14 import geniusweb.protocol.session.saop.SaopPartyWithProfile;15 17 import geniusweb.protocol.session.shaop.SHAOPSettings; 16 18 import geniusweb.protocol.session.shaop.ShaopTeam; … … 106 108 throw new IllegalArgumentException("nTournaments must be >0"); 107 109 int teamsize; 108 if (sesettings instanceof SAOPSettings) 110 if (sesettings instanceof SAOPSettings 111 || sesettings instanceof MOPACSettings 112 || sesettings instanceof AMOPSettings) 109 113 teamsize = 1; 110 114 else if (sesettings instanceof SHAOPSettings) … … 283 287 public TeamOfPartiesAndProfiles apply(Team team, 284 288 ProfileList profilelist) { 285 if (sessionsettings instanceof SAOPSettings) 286 return new SaopPartyWithProfile(team.getParties().get(0), 289 if (sessionsettings instanceof SAOPSettings 290 || sessionsettings instanceof AMOPSettings 291 || sessionsettings instanceof MOPACSettings) 292 return new OnePartyTeam(team.getParties().get(0), 287 293 profilelist.getProfiles().get(0)); 288 294 else if (sessionsettings instanceof SHAOPSettings) { -
protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsState.java
r20 r21 5 5 import java.util.List; 6 6 7 import geniusweb.protocol.ProtocolException;8 7 import geniusweb.protocol.session.SessionResult; 9 8 import geniusweb.protocol.session.SessionSettings; … … 65 64 } 66 65 67 @Override68 public ProtocolException getError() {69 return null;70 }71 72 66 /** 73 67 * -
protocol/src/test/java/geniusweb/protocol/session/DefaultSessionStateTest.java
r20 r21 23 23 import geniusweb.actions.PartyId; 24 24 import geniusweb.deadline.DeadlineTime; 25 import geniusweb.i ssuevalue.Bid;25 import geniusweb.inform.Agreements; 26 26 import geniusweb.progress.Progress; 27 27 import geniusweb.progress.ProgressTime; … … 29 29 import geniusweb.protocol.partyconnection.ProtocolToPartyConnections; 30 30 import geniusweb.protocol.session.saop.SAOPSettings; 31 import geniusweb.protocol.session.saop.SaopPartyWithProfile;32 31 import geniusweb.references.Parameters; 33 32 import geniusweb.references.PartyRef; … … 60 59 new PartyRef("party2"), new Parameters()); 61 60 ProfileRef profile2 = new ProfileRef("profile2"); 62 List< SaopPartyWithProfile> participants = Arrays.asList(63 new SaopPartyWithProfile(party1ref, profile1),64 new SaopPartyWithProfile(party2ref, profile2));61 List<OnePartyTeam> participants = Arrays.asList( 62 new OnePartyTeam(party1ref, profile1), 63 new OnePartyTeam(party2ref, profile2)); 65 64 SessionSettings settings = new SAOPSettings(participants, deadline); 66 65 ProtocolException e = new ProtocolException("test protocol error", 67 party1 .getName());66 party1); 68 67 HashMap<PartyId, PartyWithProfile> partyprofiles = new HashMap<PartyId, PartyWithProfile>(); 69 68 partyprofiles.put(party1, new PartyWithProfile(party1ref, profile1)); … … 135 134 136 135 @Override 137 public Bid getAgreement() {138 return null;139 }140 141 @Override142 136 public SessionResult getResult() { 143 137 … … 145 139 for (int n = 0; n < getConnections().size(); n++) 146 140 emptylist.add(0d); 147 return new SessionResult(getSettings().getAllParties(), getAgreement (),141 return new SessionResult(getSettings().getAllParties(), getAgreements(), 148 142 emptylist, getError()); 149 143 150 144 } 151 145 146 @Override 147 public Agreements getAgreements() { 148 return new Agreements(); 149 } 150 152 151 } -
protocol/src/test/java/geniusweb/protocol/session/SessionResultTest.java
r20 r21 7 7 import java.util.Arrays; 8 8 import java.util.HashMap; 9 import java.util.HashSet; 9 10 import java.util.List; 10 11 import java.util.Map; … … 16 17 import com.fasterxml.jackson.databind.ObjectMapper; 17 18 19 import geniusweb.actions.PartyId; 20 import geniusweb.inform.Agreements; 18 21 import geniusweb.issuevalue.Bid; 19 22 import geniusweb.issuevalue.DiscreteValue; … … 32 35 private final String ISSUE1 = "issue1"; 33 36 private SessionResult result1, result1a, result2, result3, result4; 34 private String errorstring; // created dynamically: eclipse and maven 35 // generate different stacktrace. 36 private String jsonstring = "{\"participants\":[{\"party\":{\"partyref\":\"party1\",\"parameters\":{}},\"profile\":\"profile1\"},{\"party\":{\"partyref\":\"party2\",\"parameters\":{}},\"profile\":\"profile2\"}],\"agreement\":{\"issuevalues\":{\"issue1\":\"a\"}},\"penalties\":[0.0,0.0],\"error\":null}"; 37 private String jsonstring = "{\"participants\":[{\"party\":{\"partyref\":\"party1\",\"parameters\":{}},\"profile\":\"profile1\"},{\"party\":{\"partyref\":\"party2\",\"parameters\":{}},\"profile\":\"profile2\"}],\"agreements\":{\"party2\":{\"issuevalues\":{\"issue1\":\"a\"}},\"party1\":{\"issuevalues\":{\"issue1\":\"a\"}}},\"penalties\":[0.0,0.0],\"error\":null}"; 37 38 private List<Double> nopenalties = Arrays.asList(0d, 0d); 38 39 private List<Double> penalties = Arrays.asList(0.1d, 0.2d); 39 40 41 private PartyId PARTY1 = new PartyId("party1"); 42 private PartyId PARTY2 = new PartyId("party2"); 43 private PartyId PARTY3 = new PartyId("party3"); 44 40 45 @Before 41 46 public void before() throws URISyntaxException, JsonProcessingException { 42 errorstring = "\"error\":{\"java.lang.RuntimeException\":"47 String errorstring = "\"error\":{\"java.lang.RuntimeException\":" 43 48 + jackson.writeValueAsString(error) + "}"; 44 System.out.println(errorstring);49 // System.out.println(errorstring); 45 50 46 51 PartyWithParameters party1 = new PartyWithParameters( … … 57 62 issuevalues1.put(ISSUE1, new DiscreteValue("a")); 58 63 Bid bid1 = new Bid(issuevalues1); 64 Agreements agreement1 = new Agreements().with(bid1, 65 new HashSet<>(Arrays.asList(PARTY1, PARTY2))); 59 66 60 67 // different order but that shouldn't matter … … 62 69 issuevalues2.put(ISSUE1, new DiscreteValue("b")); 63 70 Bid bid2 = new Bid(issuevalues2); 71 Agreements agreement2 = new Agreements().with(bid2, 72 new HashSet<>(Arrays.asList(PARTY1, PARTY3))); 64 73 65 74 result1 = new SessionResult(Arrays.asList(partyprofile1, partyprofile2), 66 bid1, nopenalties, null);75 agreement1, nopenalties, null); 67 76 result1a = new SessionResult( 68 Arrays.asList(partyprofile1, partyprofile2), bid1, nopenalties,69 n ull);77 Arrays.asList(partyprofile1, partyprofile2), agreement1, 78 nopenalties, null); 70 79 result2 = new SessionResult(Arrays.asList(partyprofile1, partyprofile2), 71 bid2, nopenalties, null);80 agreement2, nopenalties, null); 72 81 result3 = new SessionResult(Arrays.asList(partyprofile2, partyprofile1), 73 bid2, nopenalties, null);82 agreement1, nopenalties, null); 74 83 result4 = new SessionResult(Arrays.asList(partyprofile2, partyprofile1), 75 bid2, penalties, null);84 agreement1, penalties, null); 76 85 77 86 // IGNORE ERROR for now, it fails somewhere deep in maven suddenly. … … 90 99 public List<String> getGeneralTestStrings() { 91 100 return Arrays.asList( 92 "SessionResult.*party1.*profile1.*,.*party2.*profile2.* Bid.*issue1=\"a\".*0\\.0.*0\\.0.*null.*",93 "SessionResult.*party1.*profile1.*,.*party2.*profile2.* Bid.*issue1=\"b\".*0\\.0.*0\\.0.*null.*",94 "SessionResult.*party2.*profile2.*,.*party1.*profile1.* Bid.*issue1=\"b\".*0\\.0.*0\\.0.*null.*",95 "SessionResult.*party2.*profile2.*,.*party1.*profile1.* Bid.*issue1=\"b\".*0\\.1.*0\\.2.*null.*"101 "SessionResult.*party1.*profile1.*,.*party2.*profile2.*Agreements.*Bid.*issue1=\"a\".*0\\.0.*0\\.0.*null.*", 102 "SessionResult.*party1.*profile1.*,.*party2.*profile2.*Agreements.*Bid.*issue1=\"b\".*0\\.0.*0\\.0.*null.*", 103 "SessionResult.*party2.*profile2.*,.*party1.*profile1.*Agreements.*Bid.*issue1=\"a\".*0\\.0.*0\\.0.*null.*", 104 "SessionResult.*party2.*profile2.*,.*party1.*profile1.*Agreements.*Bid.*issue1=\"a\".*0\\.1.*0\\.2.*null.*" 96 105 97 106 ); -
protocol/src/test/java/geniusweb/protocol/session/saop/SAOPSettingsTest.java
r10 r21 19 19 import geniusweb.deadline.DeadlineRounds; 20 20 import geniusweb.deadline.DeadlineTime; 21 import geniusweb.protocol.session.OnePartyTeam; 21 22 import geniusweb.protocol.session.SessionSettings; 22 23 import geniusweb.references.Parameters; … … 29 30 public class SAOPSettingsTest extends GeneralTests<SAOPSettings> { 30 31 31 private SaopPartyWithProfile partyprof1 = mock(SaopPartyWithProfile.class);32 private SaopPartyWithProfile partyprof2 = mock(SaopPartyWithProfile.class);33 private SaopPartyWithProfile partyprof3 = mock(SaopPartyWithProfile.class);34 private List< SaopPartyWithProfile> participants2 = Arrays.asList(partyprof1,32 private OnePartyTeam partyprof1 = mock(OnePartyTeam.class); 33 private OnePartyTeam partyprof2 = mock(OnePartyTeam.class); 34 private OnePartyTeam partyprof3 = mock(OnePartyTeam.class); 35 private List<OnePartyTeam> participants2 = Arrays.asList(partyprof1, 35 36 partyprof2); 36 private List< SaopPartyWithProfile> participants3 = Arrays.asList(partyprof1,37 private List<OnePartyTeam> participants3 = Arrays.asList(partyprof1, 37 38 partyprof2, partyprof3); 38 39 … … 66 67 new PartyRef("http://party2"), new Parameters()); 67 68 ProfileRef profile2 = new ProfileRef("http://profile2"); 68 SaopPartyWithProfile partywithprof1 = new SaopPartyWithProfile(party1, 69 profile1); 70 SaopPartyWithProfile partywithprof2 = new SaopPartyWithProfile(party2, 71 profile2); 72 List<SaopPartyWithProfile> participants = Arrays.asList(partywithprof1, 69 OnePartyTeam partywithprof1 = new OnePartyTeam(party1, profile1); 70 OnePartyTeam partywithprof2 = new OnePartyTeam(party2, profile2); 71 List<OnePartyTeam> participants = Arrays.asList(partywithprof1, 73 72 partywithprof2); 74 73 -
protocol/src/test/java/geniusweb/protocol/session/saop/SAOPStateTest.java
r10 r21 176 176 SAOPState state = new SAOPState(actions, connections3, progressrounds, 177 177 settings, null, null); 178 assert Null(state.getAgreement());178 assertTrue(state.getAgreements().getMap().isEmpty()); 179 179 } 180 180 … … 184 184 SAOPState state = new SAOPState(actions, connections3, progressrounds, 185 185 settings, null, null); 186 assert Null(state.getAgreement());186 assertTrue(state.getAgreements().getMap().isEmpty()); 187 187 } 188 188 … … 192 192 SAOPState state = new SAOPState(actions, connections3, progressrounds, 193 193 settings, null, null); 194 assert Null(state.getAgreement());194 assertTrue(state.getAgreements().getMap().isEmpty()); 195 195 } 196 196 … … 200 200 SAOPState state = new SAOPState(actions, connections3, progressrounds, 201 201 settings, null, null); 202 assertEquals(bid1, state.getAgreement ());202 assertEquals(bid1, state.getAgreements().getMap().get(party1)); 203 203 assertTrue(state.isFinal(NOW)); 204 204 } … … 209 209 SAOPState state = new SAOPState(actions, connections3, progressrounds, 210 210 settings, null, null); 211 assert Equals(null, state.getAgreement());211 assertTrue(state.getAgreements().getMap().isEmpty()); 212 212 } 213 213 … … 217 217 SAOPState state = new SAOPState(actions, connections3, progressrounds, 218 218 settings, null, null); 219 assert Equals(null, state.getAgreement());219 assertTrue(state.getAgreements().getMap().isEmpty()); 220 220 } 221 221 … … 246 246 SAOPState state = new SAOPState(actions, connections3, progressrounds, 247 247 settings, null, null); 248 assert Equals(null, state.getAgreement());248 assertTrue(state.getAgreements().getMap().isEmpty()); 249 249 assertEquals(null, state.getError()); 250 250 assertTrue(state.isFinal(NOW)); … … 255 255 public void isProtocolErrorFinal() { 256 256 SAOPState state = new SAOPState(actions, connections3, progressrounds, 257 settings, null, new ProtocolException("test error", "test")); 257 settings, null, 258 new ProtocolException("test error", new PartyId("test"))); 258 259 assertTrue(state.isFinal(NOW)); 259 260 assertNotNull(state.getError()); … … 309 310 assertTrue(state.isFinal(NOW)); 310 311 assertNull(state.getError()); 311 assertEquals(bid1, state.getAgreement ());312 assertEquals(bid1, state.getAgreements().getMap().get(party1)); 312 313 313 314 } … … 325 326 assertTrue(state.isFinal(NOW)); 326 327 assertNull(state.getError()); 327 assertEquals(bid2, state.getAgreement ());328 assertEquals(bid2, state.getAgreements().getMap().get(party1)); 328 329 329 330 } -
protocol/src/test/java/geniusweb/protocol/session/saop/SAOPTest.java
r10 r21 34 34 import geniusweb.events.CurrentState; 35 35 import geniusweb.events.ProtocolEvent; 36 import geniusweb. party.inform.Finished;37 import geniusweb. party.inform.Inform;38 import geniusweb. party.inform.Settings;39 import geniusweb. party.inform.YourTurn;36 import geniusweb.inform.Finished; 37 import geniusweb.inform.Inform; 38 import geniusweb.inform.Settings; 39 import geniusweb.inform.YourTurn; 40 40 import geniusweb.progress.Progress; 41 41 import geniusweb.protocol.ProtocolException; … … 43 43 import geniusweb.protocol.partyconnection.ProtocolToPartyConnFactory; 44 44 import geniusweb.protocol.partyconnection.ProtocolToPartyConnections; 45 import geniusweb.protocol.session.OnePartyTeam; 45 46 import geniusweb.protocol.session.TeamOfPartiesAndProfiles; 46 47 import geniusweb.references.Parameters; … … 75 76 private final PartyRef party2ref = mock(PartyRef.class); 76 77 private final SAOPSettings settings = mock(SAOPSettings.class); 77 private final SaopPartyWithProfile team1 = mock(SaopPartyWithProfile.class);78 private final SaopPartyWithProfile team2 = mock(SaopPartyWithProfile.class);78 private final OnePartyTeam team1 = mock(OnePartyTeam.class); 79 private final OnePartyTeam team2 = mock(OnePartyTeam.class); 79 80 private SAOP saop; 80 81 private ProtocolToPartyConnFactory factory; … … 82 83 private ProtocolToPartyConn conn1 = mock(ProtocolToPartyConn.class), 83 84 conn2 = mock(ProtocolToPartyConn.class); 84 private Map<PartyId, SaopPartyWithProfile> partyprofiles;85 private Map<PartyId, OnePartyTeam> partyprofiles; 85 86 private Progress progress = mock(Progress.class); 86 87 private ProfileRef profile1; -
protocol/src/test/java/geniusweb/protocol/session/saop/SaopPartyWithProfileTest.java
r10 r21 17 17 import com.fasterxml.jackson.databind.ObjectMapper; 18 18 19 import geniusweb.protocol.session.OnePartyTeam; 19 20 import geniusweb.protocol.session.TeamOfPartiesAndProfiles; 20 21 import geniusweb.references.Parameters; … … 24 25 import tudelft.utilities.junit.GeneralTests; 25 26 26 public class SaopPartyWithProfileTest 27 extends GeneralTests<SaopPartyWithProfile> { 27 public class SaopPartyWithProfileTest extends GeneralTests<OnePartyTeam> { 28 28 29 29 private PartyRef party1, party1a, party2, party3; 30 30 private ProfileRef profile1, profile2; 31 private SaopPartyWithProfile partyprof1, partyprof1a, partyprof2,32 partyprof 3, partyprof4;31 private OnePartyTeam partyprof1, partyprof1a, partyprof2, partyprof3, 32 partyprof4; 33 33 private final String serialized = "{\"party\":{\"partyref\":\"ws:party1\",\"parameters\":{}},\"profile\":\"ws:profile1\"}"; 34 34 … … 54 54 settings1); 55 55 56 partyprof1 = new SaopPartyWithProfile(party1withparams1, profile1);57 partyprof1a = new SaopPartyWithProfile(party1withparams1, profile1);58 partyprof2 = new SaopPartyWithProfile(party2withparams1, profile1);59 partyprof3 = new SaopPartyWithProfile(party1withparams1, profile2);60 partyprof4 = new SaopPartyWithProfile(party1withparams2, profile1);56 partyprof1 = new OnePartyTeam(party1withparams1, profile1); 57 partyprof1a = new OnePartyTeam(party1withparams1, profile1); 58 partyprof2 = new OnePartyTeam(party2withparams1, profile1); 59 partyprof3 = new OnePartyTeam(party1withparams1, profile2); 60 partyprof4 = new OnePartyTeam(party1withparams2, profile1); 61 61 62 62 } 63 63 64 64 @Override 65 public List<List< SaopPartyWithProfile>> getGeneralTestData() {65 public List<List<OnePartyTeam>> getGeneralTestData() { 66 66 return Arrays.asList(Arrays.asList(partyprof1, partyprof1a), 67 67 Arrays.asList(partyprof2), Arrays.asList(partyprof3), … … 84 84 @Test(expected = IllegalArgumentException.class) 85 85 public void nullTest() throws URISyntaxException { 86 new SaopPartyWithProfile((PartyWithParameters) null, (ProfileRef) null);86 new OnePartyTeam((PartyWithParameters) null, (ProfileRef) null); 87 87 } 88 88 … … 103 103 // and therfore can not serialize as TeamOfPartiesAndProfiles 104 104 TeamOfPartiesAndProfiles p = jackson.readValue(serialized, 105 SaopPartyWithProfile.class);105 OnePartyTeam.class); 106 106 System.out.println(p); 107 107 assertEquals(partyprof1, p); -
protocol/src/test/java/geniusweb/protocol/session/shaop/SHAOPStateTest.java
r20 r21 4 4 import static org.junit.Assert.assertFalse; 5 5 import static org.junit.Assert.assertNotNull; 6 import static org.junit.Assert.assertNull;7 6 import static org.junit.Assert.assertTrue; 8 7 import static org.mockito.Mockito.mock; … … 194 193 SHAOPState state = new SHAOPState(actions, connections3, progressrounds, 195 194 settings, null, 0, null, null); 196 assert Null(state.getAgreement());195 assertTrue(state.getAgreements().getMap().isEmpty()); 197 196 } 198 197 … … 201 200 List<Action> actions = Arrays.asList(offer1, accept2); 202 201 SHAOPState state = new SHAOPState(actions, connections4, progressrounds, 203 settings, null, 0, null, null);204 assert NotNull(state.getAgreement());202 settings, null, 0, partynrs, null); 203 assertFalse(state.getAgreements().getMap().isEmpty()); 205 204 assertTrue(state.isFinal(NOW)); 206 205 } … … 211 210 SHAOPState state = new SHAOPState(actions, connections3, progressrounds, 212 211 settings, null, 0, null, null); 213 assert Null(state.getAgreement());212 assert (state.getAgreements().getMap().isEmpty()); 214 213 } 215 214 … … 219 218 SHAOPState state = new SHAOPState(actions, connections3, progressrounds, 220 219 settings, null, 0, null, null); 221 assert Equals(null, state.getAgreement());220 assertTrue(state.getAgreements().getMap().isEmpty()); 222 221 } 223 222 … … 245 244 SHAOPState state = new SHAOPState(actions, connections3, progressrounds, 246 245 settings, null, 0, null, null); 247 assert Equals(null, state.getAgreement());246 assertTrue(state.getAgreements().getMap().isEmpty()); 248 247 assertEquals(null, state.getError()); 249 248 assertTrue(state.isFinal(NOW)); … … 254 253 public void isProtocolErrorFinal() { 255 254 SHAOPState state = new SHAOPState(actions, connections3, progressrounds, 256 settings, new ProtocolException("test error", "test"), 0, null, 257 null); 255 settings, 256 new ProtocolException("test error", new PartyId("test")), 0, 257 null, null); 258 258 assertTrue(state.isFinal(NOW)); 259 259 assertNotNull(state.getError()); -
protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsProtocolTest.java
r20 r21 20 20 21 21 import geniusweb.events.ProtocolEvent; 22 import geniusweb.i ssuevalue.Bid;22 import geniusweb.inform.Agreements; 23 23 import geniusweb.protocol.CurrentNegoState; 24 24 import geniusweb.protocol.NegoState; … … 44 44 private final SessionSettings settings = mock(SessionSettings.class); 45 45 private final SessionState finalsessionstate = mock(SessionState.class); 46 private Bid agreement = mock(Bid.class);46 private Agreements agreement = mock(Agreements.class); 47 47 private final long NOW = 1000; 48 48 private SessionResult finalstate = mock(SessionResult.class); … … 53 53 when(finalsessionstate.isFinal(anyLong())).thenReturn(true); 54 54 when(finalsessionstate.getSettings()).thenReturn(settings); 55 when(finalsessionstate.getAgreement ()).thenReturn(agreement);55 when(finalsessionstate.getAgreements()).thenReturn(agreement); 56 56 when(finalsessionstate.getResult()).thenReturn(finalstate); 57 when(finalstate.getAgreement ()).thenReturn(agreement);57 when(finalstate.getAgreements()).thenReturn(agreement); 58 58 when(state.with(any())).thenReturn(newstate); 59 59 } … … 112 112 .forClass(SessionResult.class); 113 113 verify(state, times(1)).with(argument.capture()); 114 assertEquals(agreement, argument.getValue().getAgreement ());114 assertEquals(agreement, argument.getValue().getAgreements()); 115 115 assertNull(argument.getValue().getError()); 116 116 } -
protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsStateTest.java
r20 r21 88 88 AllPermutationsState state1 = state.with(result); 89 89 90 assertEquals(null, state1.getError());91 90 assertEquals(8, state1.getResults().size()); 92 91 assertEquals(toursettings, state1.getSettings()); -
pythonadapter/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>pythonadapter</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
pythonadapter/src/main/java/geniusweb/pythonadapter/PythonPartyAdapter.java
r9 r21 8 8 import geniusweb.actions.Action; 9 9 import geniusweb.connection.ConnectionEnd; 10 import geniusweb.inform.Inform; 10 11 import geniusweb.party.Capabilities; 11 12 import geniusweb.party.DefaultParty; 12 13 import geniusweb.party.Party; 13 import geniusweb.party.inform.Inform;14 14 import tudelft.utilities.listener.Listener; 15 15 -
references/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>references</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 … … 38 38 <groupId>tudelft.utilities</groupId> 39 39 <artifactId>repository</artifactId> 40 <version>1.1. 0</version>40 <version>1.1.1</version> 41 41 </dependency> 42 42 <!-- the core, which includes Streaming API, shared low-level abstractions -
references/src/test/java/geniusweb/references/ProtocolRefTest.java
r1 r21 17 17 import com.fasterxml.jackson.databind.ObjectMapper; 18 18 19 import geniusweb.references.ProtocolRef;20 19 import tudelft.utilities.junit.GeneralTests; 21 20 … … 58 57 59 58 @Test 59 public void testSaop() { 60 ProtocolRef saop = new ProtocolRef("SAOP"); 61 System.out.println(saop.getURI()); 62 assertEquals("SAOP", saop.getURI().getPath()); 63 } 64 65 @Test 60 66 public void testSerialize() throws JsonProcessingException { 61 67 ObjectMapper jackson = new ObjectMapper(); -
simplerunner/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>simplerunner</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 17 17 <passwd>${env.ARTIFACTORY_PASS}</passwd> 18 18 <jackson-2-version>2.9.10</jackson-2-version> 19 <geniusweb.version>1. 4.4</geniusweb.version>19 <geniusweb.version>1.5.0</geniusweb.version> 20 20 </properties> 21 21 -
simplerunner/src/main/java/geniusweb/simplerunner/BasicConnection.java
r9 r21 3 3 import java.io.IOException; 4 4 import java.net.URI; 5 import java.util.concurrent.ArrayBlockingQueue; 5 6 6 7 import geniusweb.connection.ConnectionEnd; … … 22 23 // to be initialized 23 24 private Listener<OUT> handler = null; 25 private Thread handlerThread; 26 private ArrayBlockingQueue<OUT> messages = new ArrayBlockingQueue<OUT>(4); 24 27 25 28 /** … … 33 36 this.reference = reference; 34 37 this.uri = uri; 38 35 39 } 36 40 … … 47 51 } 48 52 this.handler = newhandler; 53 54 handlerThread = new Thread(new Runnable() { 55 56 @Override 57 public void run() { 58 try { 59 while (true) { 60 handler.notifyChange(messages.take()); 61 } 62 } catch (InterruptedException e) { 63 System.out.println("connection handler interrupted"); 64 } 65 } 66 }); 67 68 handlerThread.start(); 49 69 } 50 70 … … 55 75 "BasicConnection has not been initialized"); 56 76 } 57 handler.notifyChange(data); 77 try { 78 messages.put(data); 79 } catch (InterruptedException e) { 80 throw new IOException(e); 81 } 58 82 } 59 83 … … 70 94 @Override 71 95 public void close() { 72 96 handlerThread.interrupt(); 97 handlerThread = null; 98 handler = null; 73 99 } 74 100 -
simplerunner/src/main/java/geniusweb/simplerunner/ClassPathConnectionFactory.java
r9 r21 11 11 import geniusweb.actions.Action; 12 12 import geniusweb.actions.PartyId; 13 import geniusweb.inform.Inform; 13 14 import geniusweb.party.Party; 14 import geniusweb.party.inform.Inform;15 15 import geniusweb.protocol.partyconnection.ProtocolToPartyConn; 16 16 import geniusweb.protocol.partyconnection.ProtocolToPartyConnFactory; … … 22 22 * <code>classpath:org/my/package/class</code> 23 23 * 24 *25 *26 24 */ 27 25 public class ClassPathConnectionFactory implements ProtocolToPartyConnFactory { -
simplerunner/src/main/java/geniusweb/simplerunner/NegoRunner.java
r18 r21 29 29 private final ProtocolToPartyConnFactory connectionfactory; 30 30 protected final Reporter log; 31 private boolean properlyStopped = false; 31 32 private final static ObjectMapper jackson = new ObjectMapper(); 33 private final int LOOPTIME = 200;// ms 34 private long maxruntime; 32 35 36 /** 37 * 38 * @param settings 39 * @param connectionfactory 40 * @param logger 41 * @param maxruntime limit in millisecs. Ignored if 0 42 */ 33 43 public NegoRunner(NegoSettings settings, 34 ProtocolToPartyConnFactory connectionfactory, Reporter logger) { 44 ProtocolToPartyConnFactory connectionfactory, Reporter logger, 45 long maxruntime) { 35 46 if (settings == null || connectionfactory == null) { 36 47 throw new NullPointerException("Arguments must be not null"); … … 40 51 this.protocol = settings.getProtocol(log); 41 52 this.connectionfactory = connectionfactory; 53 this.maxruntime = maxruntime; 54 } 55 56 public boolean isProperlyStopped() { 57 return properlyStopped; 42 58 } 43 59 … … 46 62 protocol.addListener(evt -> handle(evt)); 47 63 protocol.start(connectionfactory); 64 long remainingtime = maxruntime; 65 while (!properlyStopped && (maxruntime == 0 || remainingtime > 0)) { 66 try { 67 Thread.sleep(LOOPTIME); 68 remainingtime -= LOOPTIME; 69 } catch (InterruptedException e) { 70 e.printStackTrace(); 71 } 72 } 73 System.out.println("end run"); 48 74 } 49 75 … … 56 82 57 83 protected void stop() { 58 Level level = protocol.getState().getError() == null ? Level.INFO 59 : Level.WARNING; 60 logFinal(level, protocol.getState()); 84 logFinal(Level.INFO, protocol.getState()); 85 properlyStopped = true; 61 86 } 62 87 … … 88 113 89 114 NegoRunner runner = new NegoRunner(settings, 90 new ClassPathConnectionFactory(), new StdOutReporter() );115 new ClassPathConnectionFactory(), new StdOutReporter(), 0); 91 116 runner.run(); 92 117 } 93 118 94 119 private static void showusage() { 95 System.err.println("GeniusWeb stand-alone runner. 120 System.err.println("GeniusWeb stand-alone runner."); 96 121 System.err.println("first argument should be <settings.json>."); 97 122 System.err.println( … … 100 125 "See the settings.json example file and the GeniusWeb wiki pages. "); 101 126 127 } 128 129 /** 130 * @return protocol that runs/ran the session. 131 */ 132 public NegoProtocol getProtocol() { 133 return protocol; 102 134 } 103 135 } -
simplerunner/src/test/java/geniusweb/simplerunner/ClassPathConnectionFactoryTest.java
r9 r21 11 11 import geniusweb.actions.Action; 12 12 import geniusweb.connection.ConnectionEnd; 13 import geniusweb. party.inform.Inform;13 import geniusweb.inform.Inform; 14 14 import geniusweb.references.PartyRef; 15 import geniusweb.simplerunner.ClassPathConnectionFactory;16 15 17 16 public class ClassPathConnectionFactoryTest { -
simplerunner/src/test/java/geniusweb/simplerunner/SessionRunnerE2ETest.java
r10 r21 1 1 package geniusweb.simplerunner; 2 3 import static org.junit.Assert.assertTrue; 2 4 3 5 import java.io.IOException; … … 27 29 @RunWith(Parameterized.class) 28 30 public class SessionRunnerE2ETest { 31 private static final int TEST_RUNTIME = 5000; 29 32 private final ObjectMapper jackson = new ObjectMapper(); 30 33 private NegoRunner runner; … … 37 40 .asList(new Object[][] { { "src/test/resources/settings.json" }, 38 41 { "src/test/resources/settings2.json" }, 39 { "src/test/resources/shaoptoursettings.json" } }); 42 { "src/test/resources/shaoptoursettings.json" }, 43 { "src/test/resources/mopac.json" } }); 40 44 } 41 45 … … 53 57 54 58 runner = new NegoRunner(settings, new ClassPathConnectionFactory(), 55 logger );59 logger, TEST_RUNTIME); 56 60 57 61 } … … 64 68 public void runTest() throws IOException { 65 69 runner.run(); 70 assertTrue(runner.isProperlyStopped()); 71 System.out.println("Final state:\n" + runner.getProtocol().getState()); 66 72 } 67 73 -
simplerunner/src/test/java/geniusweb/simplerunner/SessionRunnerTest.java
r18 r21 16 16 import org.mockito.ArgumentCaptor; 17 17 18 import geniusweb.actions.PartyId; 18 19 import geniusweb.protocol.CurrentNegoState; 19 20 import geniusweb.protocol.NegoState; … … 29 30 public class SessionRunnerTest { 30 31 private static final ProtocolException PROTOCOL_EXC = new ProtocolException( 31 "fake protocol exception", "test");32 "fake protocol exception", new PartyId("test")); 32 33 private CurrentNegoState finishedEvent; 33 34 private final long NOW = 1000; … … 47 48 public void smokeTest() { 48 49 new NegoRunner(mock(SessionSettings.class), 49 mock(ProtocolToPartyConnFactory.class), logger );50 mock(ProtocolToPartyConnFactory.class), logger, 5000); 50 51 } 51 52 … … 59 60 ProtocolToPartyConnFactory.class); 60 61 61 NegoRunner runner = spy(new NegoRunner(settings, factory, logger)); 62 NegoRunner runner = spy( 63 new NegoRunner(settings, factory, logger, 5000)); 62 64 runner.run(); 63 65 … … 75 77 when(settings.getProtocol(any())).thenReturn(protocol); 76 78 SessionState state = mock(SessionState.class); 77 when(state.getError()).thenReturn(null);78 79 when(protocol.getState()).thenReturn(state); 79 80 Reporter logger = mock(Reporter.class); … … 81 82 ProtocolToPartyConnFactory factory = mock( 82 83 ProtocolToPartyConnFactory.class); 83 NegoRunner runner = spy(new NegoRunner(settings, factory, logger) { 84 @Override 85 protected void logFinal(Level level, NegoState state) { 86 log.log(level, state.toString()); 87 } 88 }); 84 NegoRunner runner = spy( 85 new NegoRunner(settings, factory, logger, 5000) { 86 @Override 87 protected void logFinal(Level level, NegoState state) { 88 log.log(level, state.toString()); 89 } 90 }); 89 91 ArgumentCaptor<Listener> listener = ArgumentCaptor 90 92 .forClass(Listener.class); … … 107 109 when(settings.getProtocol(any())).thenReturn(protocol); 108 110 SessionState state = mock(SessionState.class); 109 when(state.getError()).thenReturn(PROTOCOL_EXC);110 111 when(protocol.getState()).thenReturn(state); 111 112 @SuppressWarnings("unchecked") 112 113 ProtocolToPartyConnFactory factory = mock( 113 114 ProtocolToPartyConnFactory.class); 114 NegoRunner runner = spy(new NegoRunner(settings, factory, logger) { 115 @Override 116 protected void logFinal(Level level, NegoState state) { 117 log.log(level, state.toString()); 118 } 119 }); 115 NegoRunner runner = spy( 116 new NegoRunner(settings, factory, logger, 5000) { 117 @Override 118 protected void logFinal(Level level, NegoState state) { 119 log.log(level, state.toString()); 120 } 121 }); 120 122 ArgumentCaptor<Listener> listener = ArgumentCaptor 121 123 .forClass(Listener.class); … … 126 128 listener.getValue().notifyChange(finishedEvent); 127 129 verify(runner, times(1)).stop(); 128 // check that the protocol error is logged properly 129 verify(logger, times(1)).log(eq(Level.WARNING), any(String.class)); 130 // check final state is logged 131 String statestr = state.toString(); 132 verify(logger, times(1)).log(any(), eq(statestr)); 133 130 134 } 131 135 -
simplerunner/src/test/resources/jobs/jobs1.json
r1 r21 34 34 "discreteutils": { 35 35 "valueUtilities": { 36 "yes": 1,37 "no": 036 "yes": 1, 37 "no": 0 38 38 } 39 39 } … … 42 42 "discreteutils": { 43 43 "valueUtilities": { 44 "yes": 1,45 "no": 044 "yes": 1, 45 "no": 0 46 46 } 47 47 } … … 50 50 "discreteutils": { 51 51 "valueUtilities": { 52 "low": 0,53 "medium": 0.5,54 "high": 152 "low": 0, 53 "medium": 0.5, 54 "high": 1 55 55 } 56 56 } … … 112 112 } 113 113 }, 114 "name": "jobs1" 114 "name": "jobs1", 115 "reservationBid": { 116 "issuevalues": { 117 "salary": "3500", 118 "fte": "0.8", 119 "work from home": "1", 120 "lease car": "no", 121 "permanent contract": "yes", 122 "career development opportunities": "medium" 123 } 124 } 115 125 } 116 126 } -
simplerunner/src/test/resources/jobs/jobs2.json
r1 r21 34 34 "discreteutils": { 35 35 "valueUtilities": { 36 "yes": 0,37 "no": 136 "yes": 0, 37 "no": 1 38 38 } 39 39 } … … 42 42 "discreteutils": { 43 43 "valueUtilities": { 44 "yes": 0.23809523809523808,45 "no": 0.76190476190476244 "yes": 0.23809523809523808, 45 "no": 0.761904761904762 46 46 } 47 47 } … … 50 50 "discreteutils": { 51 51 "valueUtilities": { 52 "low": 1.0,53 "medium": 0.5,54 "high": 052 "low": 1.0, 53 "medium": 0.5, 54 "high": 0 55 55 } 56 56 } … … 112 112 } 113 113 }, 114 "name": "jobs2" 114 "name": "jobs2", 115 "reservationBid": { 116 "issuevalues": { 117 "salary": "3000", 118 "fte": "0.8", 119 "work from home": "0", 120 "lease car": "no", 121 "permanent contract": "no", 122 "career development opportunities": "medium" 123 } 124 } 115 125 } 116 126 } -
simplerunner/src/test/resources/shaoptoursettings.json
r18 r21 34 34 { 35 35 "ProfileList": [ 36 "file:src/test/resources/jobs/jobs1partial.json ?partial=10",36 "file:src/test/resources/jobs/jobs1partial.json", 37 37 "file:src/test/resources/jobs/jobs1partial.json" 38 38 … … 41 41 { 42 42 "ProfileList": [ 43 "file:src/test/resources/jobs/jobs2.json ?partial=15",43 "file:src/test/resources/jobs/jobs2.json", 44 44 "file:src/test/resources/jobs/jobs2.json" 45 45 … … 55 55 "deadlinerounds": { 56 56 "rounds": 10, 57 "durationms": 1000 057 "durationms": 1000 58 58 } 59 59 } -
timeline/pom.xml
r20 r21 6 6 <groupId>geniusweb</groupId> 7 7 <artifactId>timeline</artifactId> 8 <version>1. 4.4</version> <!-- must equal ${geniusweb.version} -->8 <version>1.5.0</version> <!-- must equal ${geniusweb.version} --> 9 9 <packaging>jar</packaging> 10 10 … … 16 16 <passwd>${env.ARTIFACTORY_PASS}</passwd> 17 17 <jackson-2-version>2.9.10</jackson-2-version> 18 <geniusweb.version>1. 4.4</geniusweb.version>18 <geniusweb.version>1.5.0</geniusweb.version> 19 19 </properties> 20 20
Note:
See TracChangeset
for help on using the changeset viewer.