Changeset 21


Ignore:
Timestamp:
09/22/20 08:52:04 (4 years ago)
Author:
bart
Message:

Version 1.5.

Files:
66 added
108 edited

Legend:

Unmodified
Added
Removed
  • bidspace/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>bidspace</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1616                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1717                <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>
    1919        </properties>
    2020
     
    4343                        <groupId>tudelft.utilities</groupId>
    4444                        <artifactId>immutablelist</artifactId>
    45                         <version>1.1.0</version>
     45                        <version>1.1.1</version>
    4646                </dependency>
    4747
  • boa/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>boa</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • boa/src/main/java/geniusweb/boa/BoaParty.java

    r20 r21  
    66import geniusweb.boa.acceptancestrategy.AcceptanceStrategy;
    77import geniusweb.boa.biddingstrategy.BiddingStrategy;
     8import geniusweb.inform.Settings;
    89import geniusweb.opponentmodel.OpponentModel;
    9 import geniusweb.party.inform.Settings;
    1010import tudelft.utilities.logging.Reporter;
    1111
  • boa/src/main/java/geniusweb/boa/BoaState.java

    r20 r21  
    1212import geniusweb.boa.acceptancestrategy.AcceptanceStrategy;
    1313import geniusweb.boa.biddingstrategy.BiddingStrategy;
     14import geniusweb.inform.Settings;
    1415import geniusweb.issuevalue.Bid;
    1516import geniusweb.opponentmodel.OpponentModel;
    16 import geniusweb.party.inform.Settings;
    1717import geniusweb.profile.Profile;
    1818import geniusweb.progress.Progress;
  • boa/src/main/java/geniusweb/boa/DefaultBoa.java

    r20 r21  
    1111import geniusweb.boa.acceptancestrategy.AcceptanceStrategy;
    1212import geniusweb.boa.biddingstrategy.BiddingStrategy;
     13import geniusweb.inform.ActionDone;
     14import geniusweb.inform.Finished;
     15import geniusweb.inform.Inform;
     16import geniusweb.inform.Settings;
     17import geniusweb.inform.YourTurn;
    1318import geniusweb.issuevalue.Bid;
    1419import geniusweb.opponentmodel.OpponentModel;
    1520import geniusweb.party.Capabilities;
    1621import 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;
    2222import geniusweb.profileconnection.ProfileConnectionFactory;
    2323import geniusweb.profileconnection.ProfileInterface;
  • boa/src/main/java/geniusweb/boa/acceptancestrategy/AcceptanceStrategy.java

    r20 r21  
    33import geniusweb.boa.BoaParty;
    44import geniusweb.boa.BoaState;
     5import geniusweb.inform.Settings;
    56import geniusweb.issuevalue.Bid;
    6 import geniusweb.party.inform.Settings;
    77
    88/**
  • boa/src/main/java/geniusweb/boa/acceptancestrategy/TimeDependentAcceptanceStrategy.java

    r20 r21  
    66import geniusweb.boa.BoaState;
    77import geniusweb.boa.biddingstrategy.TimeDependentBiddingStrategy;
     8import geniusweb.inform.Settings;
    89import geniusweb.issuevalue.Bid;
    9 import geniusweb.party.inform.Settings;
    1010import geniusweb.profile.Profile;
    1111import geniusweb.profile.utilityspace.LinearAdditive;
  • boa/src/main/java/geniusweb/boa/biddingstrategy/BiddingStrategy.java

    r20 r21  
    44import geniusweb.boa.BoaParty;
    55import geniusweb.boa.BoaState;
    6 import geniusweb.party.inform.Settings;
     6import geniusweb.inform.Settings;
    77
    88/**
  • boa/src/main/java/geniusweb/boa/biddingstrategy/TimeDependentBiddingStrategy.java

    r20 r21  
    1313import geniusweb.actions.PartyId;
    1414import geniusweb.boa.BoaState;
     15import geniusweb.inform.Settings;
    1516import geniusweb.issuevalue.Bid;
    16 import geniusweb.party.inform.Settings;
    1717import geniusweb.profile.Profile;
    1818import geniusweb.profile.utilityspace.LinearAdditive;
  • boa/src/test/java/geniusweb/boa/BoaPartyTest.java

    r20 r21  
    2424import geniusweb.boa.biddingstrategy.BiddingStrategy;
    2525import geniusweb.connection.ConnectionEnd;
     26import geniusweb.inform.ActionDone;
     27import geniusweb.inform.Inform;
     28import geniusweb.inform.Settings;
     29import geniusweb.inform.YourTurn;
    2630import geniusweb.issuevalue.Bid;
    2731import geniusweb.issuevalue.DiscreteValue;
    2832import geniusweb.issuevalue.Domain;
    2933import 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;
    3434import geniusweb.progress.Progress;
    3535import geniusweb.references.Parameters;
  • boa/src/test/java/geniusweb/boa/acceptancestrategy/TimeDepAccStratTest.java

    r20 r21  
    1616import geniusweb.bidspace.Interval;
    1717import geniusweb.boa.BoaState;
     18import geniusweb.inform.Settings;
    1819import geniusweb.issuevalue.Bid;
    19 import geniusweb.party.inform.Settings;
    2020import geniusweb.profile.Profile;
    2121import geniusweb.profile.utilityspace.LinearAdditive;
     
    4646
    4747                TimeDependentAcceptanceStrategy ac = new TimeDependentAcceptanceStrategy() {
     48                        @Override
    4849                        protected BidsWithUtility getBidspace(Profile profile) {
    4950                                return testbidspace;
     
    5253                // we use default e=1, k=0 which means p(0)=1
    5354
    54                 when(progress.get(any())).thenReturn((Double) 0.0d);
     55                when(progress.get(any())).thenReturn(0.0d);
    5556
    5657                when(linearprofile.getUtility(eq(bid1)))
     
    6768
    6869                TimeDependentAcceptanceStrategy ac = new TimeDependentAcceptanceStrategy() {
     70                        @Override
    6971                        protected BidsWithUtility getBidspace(Profile profile) {
    7072                                return testbidspace;
     
    7375                // we use default e=1, k=0 which means p(0)=1
    7476
    75                 when(progress.get(any())).thenReturn((Double) 0.0d);
     77                when(progress.get(any())).thenReturn(0.0d);
    7678
    7779                when(linearprofile.getUtility(eq(bid1)))
     
    8789
    8890                TimeDependentAcceptanceStrategy ac = new TimeDependentAcceptanceStrategy() {
     91                        @Override
    8992                        protected BidsWithUtility getBidspace(Profile profile) {
    9093                                return testbidspace;
     
    9396                // we use default e=1, k=0 which means p(1)=0
    9497
    95                 when(progress.get(any())).thenReturn((Double) 1.0d);
     98                when(progress.get(any())).thenReturn(1.0d);
    9699
    97100                when(linearprofile.getUtility(eq(bid1)))
     
    110113
    111114                TimeDependentAcceptanceStrategy ac = new TimeDependentAcceptanceStrategy() {
     115                        @Override
    112116                        protected BidsWithUtility getBidspace(Profile profile) {
    113117                                return testbidspace;
     
    116120                // we use default e=1, k=0 which means p(1)=resValue.
    117121
    118                 when(progress.get(any())).thenReturn((Double) 1.0d);
     122                when(progress.get(any())).thenReturn(1.0d);
    119123
    120124                when(linearprofile.getUtility(eq(bid1)))
  • boa/src/test/java/geniusweb/boa/biddingstrategy/TimeDepBidStratTest.java

    r20 r21  
    1717import geniusweb.actions.Offer;
    1818import geniusweb.boa.BoaState;
     19import geniusweb.inform.Settings;
    1920import geniusweb.issuevalue.Bid;
    2021import geniusweb.issuevalue.DiscreteValue;
    21 import geniusweb.party.inform.Settings;
    2222import geniusweb.profile.utilityspace.LinearAdditive;
    2323import geniusweb.progress.Progress;
     
    4646
    4747                biddingstrat = new TimeDependentBiddingStrategy() {
     48                        @Override
    4849                        protected ExtendedUtilSpace getBidSpace(LinearAdditive profile) {
    4950                                return extUtilSpace;
  • collectparties.sh

    r20 r21  
    77rm -rf collectedparties
    88mkdir collectedparties
    9 VERSION=1.4.4
     9VERSION=1.5.0
    1010
    1111cp "exampleparties/anac2019/agentgg/target/agentgg-${VERSION}-jar-with-dependencies.jar" collectedparties
  • design/classdiagram.graphml

    r19 r21  
    795795          <y:Realizers active="0">
    796796            <y:GroupNode>
    797               <y:Geometry height="353.4990234375" width="436.46484375" x="1255.75146484375" y="613.58349609375"/>
     797              <y:Geometry height="353.4990234375" width="443.343994140625" x="1248.872314453125" y="613.58349609375"/>
    798798              <y:Fill color="#F5F5F5" transparent="false"/>
    799799              <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="436.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>
    801801              <y:Shape type="roundrectangle"/>
    802802              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
    803803              <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"/>
    805805            </y:GroupNode>
    806806            <y:GroupNode>
     
    860860              <y:Realizers active="0">
    861861                <y:GroupNode>
    862                   <y:Geometry height="202.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"/>
    863863                  <y:Fill color="#F5F5F5" transparent="false"/>
    864864                  <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="272.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>
    866866                  <y:Shape type="roundrectangle"/>
    867867                  <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
     
    870870                </y:GroupNode>
    871871                <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"/>
    873873                  <y:Fill color="#F5F5F5" transparent="false"/>
    874874                  <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
     
    886886              <data key="d6">
    887887                <y:ShapeNode>
    888                   <y:Geometry height="30.0" width="52.80078125" x="1370.67138671875" y="746.91552734375"/>
     888                  <y:Geometry height="30.0" width="52.80078125" x="1353.0337261632803" y="738.8943206568053"/>
    889889                  <y:Fill color="#FFCC00" transparent="false"/>
    890890                  <y:BorderStyle color="#000000" type="line" width="1.0"/>
     
    897897              <data key="d6">
    898898                <y:ShapeNode>
    899                   <y:Geometry height="30.0" width="81.693359375" x="1446.22509765625" y="740.91552734375"/>
     899                  <y:Geometry height="30.0" width="81.693359375" x="1308.1947553690638" y="686.91552734375"/>
    900900                  <y:Fill color="#FFCC00" transparent="false"/>
    901901                  <y:BorderStyle color="#000000" type="line" width="1.0"/>
     
    908908              <data key="d6">
    909909                <y:ShapeNode>
    910                   <y:Geometry height="30.0" width="60.640625" x="1285.75146484375" y="692.91552734375"/>
     910                  <y:Geometry height="30.0" width="60.640625" x="1450.9917433325486" y="705.6830051732845"/>
    911911                  <y:Fill color="#FFCC00" transparent="false"/>
    912912                  <y:BorderStyle color="#000000" type="line" width="1.0"/>
     
    919919              <data key="d6">
    920920                <y:ShapeNode>
    921                   <y:Geometry height="30.0" width="62.62109375" x="1388.76123046875" y="686.91552734375"/>
     921                  <y:Geometry height="30.0" width="62.62109375" x="1384.34912109375" y="809.2347228857868"/>
    922922                  <y:Fill color="#FFCC00" transparent="false"/>
    923923                  <y:BorderStyle color="#000000" type="line" width="1.0"/>
     
    930930              <data key="d6">
    931931                <y:ShapeNode>
    932                   <y:Geometry height="30.0" width="68.59765625" x="1402.77294921875" y="807.91552734375"/>
     932                  <y:Geometry height="30.0" width="68.59765625" x="1285.75146484375" y="809.2347228857868"/>
    933933                  <y:Fill color="#FFCC00" transparent="false"/>
    934934                  <y:BorderStyle color="#000000" type="line" width="1.0"/>
    935935                  <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>
    936948                  <y:Shape type="rectangle"/>
    937949                </y:ShapeNode>
     
    12541266          <y:Realizers active="0">
    12551267            <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"/>
    12571269              <y:Fill color="#F5F5F5" transparent="false"/>
    12581270              <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>
    12601272              <y:Shape type="roundrectangle"/>
    12611273              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
     
    12641276            </y:GroupNode>
    12651277            <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"/>
    12671279              <y:Fill color="#F5F5F5" transparent="false"/>
    12681280              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
     
    14061418              <y:BorderStyle color="#000000" type="line" width="1.0"/>
    14071419              <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>
    14081444              <y:Shape type="rectangle"/>
    14091445            </y:ShapeNode>
     
    15551591    <node id="n12" yfiles.foldertype="group">
    15561592      <data key="d4" xml:space="preserve"/>
    1557       <data key="d5"/>
    15581593      <data key="d6">
    15591594        <y:ProxyAutoBoundsNode>
     
    15841619      <graph edgedefault="directed" id="n12:">
    15851620        <node id="n12::n0">
    1586           <data key="d5"/>
    15871621          <data key="d6">
    15881622            <y:ShapeNode>
     
    15961630        </node>
    15971631        <node id="n12::n1">
    1598           <data key="d5"/>
    15991632          <data key="d6">
    16001633            <y:ShapeNode>
     
    16111644    <node id="n13" yfiles.foldertype="group">
    16121645      <data key="d4" xml:space="preserve"/>
    1613       <data key="d5"/>
    16141646      <data key="d6">
    16151647        <y:ProxyAutoBoundsNode>
     
    16401672      <graph edgedefault="directed" id="n13:">
    16411673        <node id="n13::n0">
    1642           <data key="d5"/>
    16431674          <data key="d6">
    16441675            <y:ShapeNode>
     
    16521683        </node>
    16531684        <node id="n13::n1">
    1654           <data key="d5"/>
    16551685          <data key="d6">
    16561686            <y:ShapeNode>
     
    16641694        </node>
    16651695        <node id="n13::n2">
    1666           <data key="d5"/>
    16671696          <data key="d6">
    16681697            <y:ShapeNode>
     
    16771706        </node>
    16781707        <node id="n13::n3">
    1679           <data key="d5"/>
    16801708          <data key="d6">
    16811709            <y:ShapeNode>
     
    16891717        </node>
    16901718        <node id="n13::n4">
    1691           <data key="d5"/>
    16921719          <data key="d6">
    16931720            <y:ShapeNode>
     
    17011728        </node>
    17021729        <node id="n13::n5">
    1703           <data key="d5"/>
    17041730          <data key="d6">
    17051731            <y:ShapeNode>
     
    21562182      </data>
    21572183    </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>
    22242184    <edge id="e15" source="n10::n9" target="n11::n0">
    22252185      <data key="d8" xml:space="preserve"/>
    22262186      <data key="d10">
    22272187        <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"/>
    22292189          <y:LineStyle color="#000000" type="line" width="1.0"/>
    22302190          <y:Arrows source="diamond" target="none"/>
     
    22372197      <data key="d10">
    22382198        <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"/>
    22402200          <y:LineStyle color="#000000" type="line" width="1.0"/>
    22412201          <y:Arrows source="diamond" target="none"/>
     
    22482208      <data key="d10">
    22492209        <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"/>
    22512211          <y:LineStyle color="#000000" type="line" width="1.0"/>
    22522212          <y:Arrows source="diamond" target="none"/>
     
    25772537      </data>
    25782538    </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>
    26232539    <edge id="n2::e0" source="n2::n1" target="n2::n0">
    26242540      <data key="d8" xml:space="preserve"/>
     
    26912607      <data key="d10">
    26922608        <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"/>
    26942610          <y:LineStyle color="#000000" type="line" width="1.0"/>
    26952611          <y:Arrows source="diamond" target="none"/>
     
    27532669      </data>
    27542670    </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>
    27662671    <edge id="e30" source="n0::n1" target="n10::n1">
    27672672      <data key="d8" xml:space="preserve"/>
    27682673      <data key="d10">
    27692674        <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>
    27742679          <y:BendStyle smoothed="false"/>
    27752680        </y:PolyLineEdge>
     
    27992704    </edge>
    28002705    <edge id="n12::e0" source="n12::n1" target="n12::n0">
    2801       <data key="d9"/>
    28022706      <data key="d10">
    28032707        <y:BezierEdge>
     
    28092713    </edge>
    28102714    <edge id="e31" source="n12::n0" target="n4::n0">
    2811       <data key="d9"/>
    28122715      <data key="d10">
    28132716        <y:BezierEdge>
     
    28192722    </edge>
    28202723    <edge id="n13::e0" source="n13::n2" target="n13::n1">
    2821       <data key="d9"/>
    28222724      <data key="d10">
    28232725        <y:BezierEdge>
     
    28292731    </edge>
    28302732    <edge id="e32" source="n12::n0" target="n13::n3">
    2831       <data key="d9"/>
    28322733      <data key="d10">
    28332734        <y:BezierEdge>
     
    28402741    </edge>
    28412742    <edge id="n13::e1" source="n13::n5" target="n13::n4">
    2842       <data key="d9"/>
    28432743      <data key="d10">
    28442744        <y:BezierEdge>
     
    28502750    </edge>
    28512751    <edge id="n13::e2" source="n13::n1" target="n13::n0">
    2852       <data key="d9"/>
    28532752      <data key="d10">
    28542753        <y:BezierEdge>
     
    28602759    </edge>
    28612760    <edge id="n13::e3" source="n13::n4" target="n13::n0">
    2862       <data key="d9"/>
    28632761      <data key="d10">
    28642762        <y:BezierEdge>
     
    28702768    </edge>
    28712769    <edge id="n13::e4" source="n13::n3" target="n13::n0">
    2872       <data key="d9"/>
    28732770      <data key="d10">
    28742771        <y:BezierEdge>
     
    28802777    </edge>
    28812778    <edge id="e33" source="n13" target="n6">
    2882       <data key="d9"/>
    28832779      <data key="d10">
    28842780        <y:BezierEdge>
     
    28862782          <y:LineStyle color="#000000" type="dashed" width="1.0"/>
    28872783          <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"/>
    28882935        </y:BezierEdge>
    28892936      </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="2257" 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">
    22  <!--Generated by ySVG 2.5-->
    33  <defs id="genericDefs"/>
     
    1717      </linearGradient>
    1818      <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
    19         <path d="M0 0 L2257 0 L2257 2059 L0 2059 L0 0 Z"/>
     19        <path d="M0 0 L2496 0 L2496 2118 L0 2118 L0 0 Z"/>
    2020      </clipPath>
    2121      <clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
    22         <path d="M17 -15 L2274 -15 L2274 2044 L17 2044 L17 -15 Z"/>
     22        <path d="M17 -15 L2513 -15 L2513 2103 L17 2103 L17 -15 Z"/>
    2323      </clipPath>
    2424    </defs>
    2525    <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="translate(-17,15)" stroke="white">
    26       <rect x="17" width="2257" 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"/>
    2727    </g>
    2828    <g fill="url(#linearGradient1)" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="url(#linearGradient1)">
     
    291291    </g>
    292292    <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="1338.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"/>
    299299    </g>
    300300    <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="white">
     
    358358    </g>
    359359    <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="white">
    360       <rect x="985.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"/>
    361361    </g>
    362362    <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">
    363363      <text x="1005.7144" xml:space="preserve" y="1162.884" clip-path="url(#clipPath2)" stroke="none">TotalOrdering</text>
    364       <rect fill="none" x="985.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)"/>
    365365    </g>
    366366    <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)">
     
    370370      <text x="1201.2769" xml:space="preserve" y="1394.9819" clip-path="url(#clipPath2)" stroke="none">BigDecimal</text>
    371371      <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.5613 1400.4462 L756.5829 1464.453" clip-path="url(#clipPath2)"/>
    373       <path stroke-dasharray="6,2" d="M753.0953 1466.4116 L766.4962 1465.7673 L753.0953 1466.4116 L760.6204 1455.3043 Z" clip-path="url(#clipPath2)" stroke="none"/>
    374       <path fill="none" stroke-miterlimit="10" d="M753.0953 1466.4116 L766.4962 1465.7673 L753.0953 1466.4116 L760.6204 1455.3043 Z" 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"/>
    375375      <path fill="none" d="M1159.808 1767.553 L1095.0416 1469.6145" clip-path="url(#clipPath2)"/>
    376376      <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"/>
     
    399399      <path fill="white" d="M1092.4135 1399.0833 L1100.616 1384.0927 L1088.7366 1382.3955 Z" clip-path="url(#clipPath2)" stroke="none"/>
    400400      <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 L1120.5153 1177.0103" clip-path="url(#clipPath2)"/>
    402       <path fill="white" d="M1105.969 1173.3489 L1120.0205 1183.0729 L1122.9496 1171.4358 Z" clip-path="url(#clipPath2)" stroke="none"/>
    403       <path fill="none" d="M1105.969 1173.3489 L1120.0205 1183.0729 L1122.9496 1171.4358 Z" 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)"/>
    404404      <path fill="none" d="M1066.5248 1143.3489 L1086.464 1128.5052" clip-path="url(#clipPath2)"/>
    405405      <path fill="white" d="M1098.496 1119.5481 L1082.079 1124.2896 L1089.2448 1133.9152 Z" clip-path="url(#clipPath2)" stroke="none"/>
     
    570570    </g>
    571571    <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="1255.7515" y="613.5835" clip-path="url(#clipPath2)" width="436.4648" rx="4" ry="4" height="353.499" stroke="none"/>
    573       <rect x="1255.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"/>
    574574    </g>
    575575    <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">
    576576      <text x="1654.0566" xml:space="preserve" y="630.0854" clip-path="url(#clipPath2)" stroke="none">Party</text>
    577       <rect x="1255.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"/>
    578578    </g>
    579579    <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)">
     
    600600      <text x="1583.5493" xml:space="preserve" y="941.6177" clip-path="url(#clipPath2)" stroke="none">DefaultParty</text>
    601601      <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.2183 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.2183 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="M1342.7507 967.089 L1301.6271 1022.4778" clip-path="url(#clipPath2)"/>
    606       <path stroke-dasharray="6,2" d="M1299.2426 1025.6895 L1311.2134 1019.6314 L1299.2426 1025.6895 L1301.5786 1012.478 Z" clip-path="url(#clipPath2)" stroke="none"/>
    607       <path fill="none" stroke-miterlimit="10" d="M1299.2426 1025.6895 L1311.2134 1019.6314 L1299.2426 1025.6895 L1301.5786 1012.478 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>
    608       <path fill="none" stroke-dasharray="6,2" d="M1255.7472 840.8061 L776.8444 951.5652" clip-path="url(#clipPath2)"/>
    609       <path stroke-dasharray="6,2" d="M772.9473 952.4666 L785.9907 955.6083 L772.9473 952.4666 L783.2867 943.9169 Z" clip-path="url(#clipPath2)" stroke="none"/>
    610       <path fill="none" stroke-miterlimit="10" d="M772.9473 952.4666 L785.9907 955.6083 L772.9473 952.4666 L783.2867 943.9169 Z" 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"/>
    611611      <path fill="none" d="M1621.5209 870.3434 L1619.6222 922.0825" clip-path="url(#clipPath2)"/>
    612612      <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"/>
     
    614614    </g>
    615615    <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"/>
    671680    </g>
    672681    <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)">
     
    720729      <text x="879.1353" xml:space="preserve" y="564.7017" clip-path="url(#clipPath2)" stroke="none">DeadlineRound</text>
    721730      <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="M1255.7789 696.4816 L1140.34 646.8304" clip-path="url(#clipPath2)"/>
    723       <path stroke-dasharray="6,2" d="M1136.6654 645.25 L1145.3184 655.5032 L1136.6654 645.25 L1150.0597 644.4796 Z" clip-path="url(#clipPath2)" stroke="none"/>
    724       <path fill="none" stroke-miterlimit="10" d="M1136.6654 645.25 L1145.3184 655.5032 L1136.6654 645.25 L1150.0597 644.4796 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>
    725       <path fill="none" d="M1287.2512 689.087 L1091.6481 561.2993" clip-path="url(#clipPath2)"/>
    726       <path d="M1293.1115 692.9155 L1284.5166 693.2729 L1281.391 685.2585 L1289.9858 684.9011 Z" 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"/>
    727736      <path fill="none" d="M915.7327 636.1665 L1015.2271 569.6371" clip-path="url(#clipPath2)"/>
    728737      <path fill="white" d="M1027.6963 561.2993 L1011.0607 565.2053 L1017.731 575.1807 Z" clip-path="url(#clipPath2)" stroke="none"/>
     
    792801      <text x="1603.5942" xml:space="preserve" y="1541.1147" clip-path="url(#clipPath2)" stroke="none">size()</text>
    793802      <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="M1552.2008 967.111 L1660.5536 1211.9993" clip-path="url(#clipPath2)"/>
    795       <path stroke-dasharray="6,2" d="M1662.172 1215.6572 L1662.8036 1202.2556 L1662.172 1215.6572 L1651.8297 1207.1111 Z" clip-path="url(#clipPath2)" stroke="none"/>
    796       <path fill="none" stroke-miterlimit="10" d="M1662.172 1215.6572 L1662.8036 1202.2556 L1662.172 1215.6572 L1651.8297 1207.1111 Z" clip-path="url(#clipPath2)" stroke-linecap="square"/>
    797       <path fill="none" stroke-dasharray="6,2" d="M1567.2159 1409.7681 L1391.3019 1347.9185" clip-path="url(#clipPath2)"/>
    798       <path stroke-dasharray="6,2" d="M1387.5283 1346.5917 L1396.8589 1356.2322 L1387.5283 1346.5917 L1400.8391 1344.9115 Z" clip-path="url(#clipPath2)" stroke="none"/>
    799       <path fill="none" stroke-miterlimit="10" d="M1387.5283 1346.5917 L1396.8589 1356.2322 L1387.5283 1346.5917 L1400.8391 1344.9115 Z" 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"/>
    800809      <path fill="none" d="M1892.3491 1482.4468 L1901.077 1442.4995" clip-path="url(#clipPath2)"/>
    801810      <path fill="white" d="M1904.2788 1427.8452 L1895.0018 1442.1958 L1906.7253 1444.7572 Z" clip-path="url(#clipPath2)" stroke="none"/>
     
    873882      <text x="1431.8735" xml:space="preserve" y="1141.8176" clip-path="url(#clipPath2)" stroke="none">Boulware, Bayesian</text>
    874883      <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="M1484.5331 1044.1659 L1481.5381 972.1007" clip-path="url(#clipPath2)"/>
    876       <path stroke-dasharray="6,2" d="M1481.3719 968.1042 L1475.8755 980.343 L1481.3719 968.1042 L1487.8651 979.8447 Z" clip-path="url(#clipPath2)" stroke="none"/>
    877       <path fill="none" stroke-miterlimit="10" d="M1481.3719 968.1042 L1475.8755 980.343 L1481.3719 968.1042 L1487.8651 979.8447 Z" 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"/>
    878887    </g>
    879888    <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="1172.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"/>
    886895    </g>
    887896    <g fill="white" text-rendering="geometricPrecision" shape-rendering="geometricPrecision" transform="matrix(1,0,0,1,-17,15)" stroke="white">
     
    969978      <text x="832.1401" xml:space="preserve" y="197.2012" clip-path="url(#clipPath2)" stroke="none">AllPermutationsProtocol</text>
    970979      <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>
    974997      <path fill="none" stroke-dasharray="6,2" d="M1001.976 253.5332 L1040.6111 198.752" clip-path="url(#clipPath2)"/>
    975998      <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"/>
     
    9781001      <path fill="white" d="M971.3823 295.7988 L957.0272 305.0688 L966.6621 312.222 Z" clip-path="url(#clipPath2)" stroke="none"/>
    9791002      <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="M935.6086 362.6224 L922.983 475.1665" clip-path="url(#clipPath2)"/>
    981       <path d="M936.389 355.666 L940.5775 363.1798 L934.8282 369.5787 L930.6398 362.0649 Z" 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"/>
    9821005      <path fill="none" d="M1057.5162 90.666 L1049.2598 78.9331" clip-path="url(#clipPath2)"/>
    9831006      <path fill="white" d="M1040.6273 66.666 L1044.9285 83.2039 L1054.7421 76.2979 Z" clip-path="url(#clipPath2)" stroke="none"/>
     
    9951018      <path fill="white" d="M837.2718 252.666 L853.0884 246.1981 L844.9355 237.3929 Z" clip-path="url(#clipPath2)" stroke="none"/>
    9961019      <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)"/>
    9971026    </g>
    9981027    <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)">
     
    10731102      <text x="1618.1763" xml:space="preserve" y="338.1348" clip-path="url(#clipPath2)" stroke="none">DomainRef</text>
    10741103      <rect fill="none" x="1611.1763" width="77.791" height="30" y="316.666" clip-path="url(#clipPath2)"/>
    1075       <path fill="none" d="M1227.4041 242.5872 L1524.2651 274.368" clip-path="url(#clipPath2)"/>
    1076       <path d="M1220.4438 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"/>
    10771106      <path fill="none" d="M1558.9607 292.666 L1575.4185 356.1461" clip-path="url(#clipPath2)"/>
    10781107      <path fill="white" d="M1579.1829 370.666 L1580.9755 353.6723 L1569.3595 356.6838 Z" clip-path="url(#clipPath2)" stroke="none"/>
    10791108      <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="M1181.4537 251.7088 L1458.9939 385.666" clip-path="url(#clipPath2)"/>
    1081       <path d="M1175.1497 248.666 L1183.6272 247.2058 L1187.7578 254.7515 L1179.2804 256.2117 Z" clip-path="url(#clipPath2)" stroke="none"/>
    1082       <path fill="none" d="M1328.016 686.8245 L1481.577 415.666" clip-path="url(#clipPath2)"/>
    1083       <path d="M1324.5665 692.9155 L1323.6653 684.3605 L1331.4655 680.7334 L1332.3668 689.2883 Z" 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"/>
    10841113      <path fill="none" d="M1524.8892 395.0503 L1532.6401 393.8001" clip-path="url(#clipPath2)"/>
    10851114      <path fill="white" d="M1547.4487 391.4117 L1530.6975 388.0359 L1532.6083 399.8828 Z" clip-path="url(#clipPath2)" stroke="none"/>
     
    10881117      <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"/>
    10891118      <text x="1594.5719" xml:space="preserve" y="715.5513" clip-path="url(#clipPath2)" stroke="none">   *</text>
    1090       <path fill="none" d="M1337.8975 688.2268 L1562.4437 485.666" clip-path="url(#clipPath2)"/>
    1091       <path d="M1332.6998 692.9155 L1334.5483 684.5142 L1343.0951 683.538 L1341.2466 691.9394 Z" 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"/>
    10921121      <path fill="none" d="M1579.7777 455.666 L1581.6608 415.6494" clip-path="url(#clipPath2)"/>
    10931122      <path fill="white" d="M1582.3658 400.666 L1575.6204 416.3663 L1587.6072 416.9304 Z" clip-path="url(#clipPath2)" stroke="none"/>
    10941123      <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.2271 280.6476 L1046.7511 276.4778 L1053.1359 282.2428 L1045.6118 286.4126 Z" 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"/>
    10971126      <path fill="none" d="M1509.3656 312.4284 L1535.3496 292.666" clip-path="url(#clipPath2)"/>
    10981127      <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"/>
     
    11091138      <path fill="none" d="M1601.6829 370.666 L1617.9055 365.2972 L1610.3752 355.954 Z" clip-path="url(#clipPath2)"/>
    11101139    </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>
    11111238  </g>
    11121239</svg>
  • events/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>events</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    4040
    4141        <dependencies>
    42 
     42                <dependency>
     43                        <groupId>geniusweb</groupId>
     44                        <artifactId>timeline</artifactId>
     45                        <version>${geniusweb.version}</version>
     46                </dependency>
    4347                <dependency>
    4448                        <groupId>geniusweb</groupId>
  • events/src/main/java/geniusweb/actions/Action.java

    r10 r21  
    1616                @JsonSubTypes.Type(value = Accept.class),
    1717                @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) })
    1921public interface Action {
    2022        /**
  • exampleparties/anac2019/agentgg/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties.anac2019</groupId>
    77        <artifactId>agentgg</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    6060                        <groupId>tudelft.utilities</groupId>
    6161                        <artifactId>immutablelist</artifactId>
    62                         <version>1.1.0</version>
     62                        <version>1.1.1</version>
    6363                </dependency>
    6464
  • exampleparties/anac2019/agentgg/src/main/java/geniusweb/exampleparties/agentgg/AgentGG.java

    r19 r21  
    1919import geniusweb.actions.PartyId;
    2020import geniusweb.bidspace.AllBidsList;
     21import geniusweb.inform.ActionDone;
     22import geniusweb.inform.Finished;
     23import geniusweb.inform.Inform;
     24import geniusweb.inform.Settings;
     25import geniusweb.inform.YourTurn;
    2126import geniusweb.issuevalue.Bid;
    2227import geniusweb.issuevalue.Value;
    2328import geniusweb.party.Capabilities;
    2429import 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;
    3030import geniusweb.profile.PartialOrdering;
    3131import geniusweb.profileconnection.ProfileConnectionFactory;
  • exampleparties/anac2019/agentgg/src/test/java/geniusweb/exampleparties/agentgg/AgentGGTest.java

    r19 r21  
    3434import geniusweb.actions.PartyId;
    3535import geniusweb.connection.ConnectionEnd;
     36import geniusweb.inform.ActionDone;
     37import geniusweb.inform.Finished;
     38import geniusweb.inform.Inform;
     39import geniusweb.inform.Settings;
     40import geniusweb.inform.YourTurn;
    3641import geniusweb.issuevalue.Bid;
    3742import 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;
    4343import geniusweb.profile.DefaultPartialOrdering;
    4444import geniusweb.profile.PartialOrdering;
  • exampleparties/anac2019/winkyagent/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties.anac2019</groupId>
    77        <artifactId>winkyagent</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    6060                        <groupId>tudelft.utilities</groupId>
    6161                        <artifactId>immutablelist</artifactId>
    62                         <version>1.1.0</version>
     62                        <version>1.1.1</version>
    6363                </dependency>
    6464
  • exampleparties/anac2019/winkyagent/src/main/java/geniusweb/exampleparties/anac2019/winkyagent/WinkyAgent.java

    r12 r21  
    1919import geniusweb.actions.PartyId;
    2020import geniusweb.bidspace.AllBidsList;
     21import geniusweb.inform.ActionDone;
     22import geniusweb.inform.Finished;
     23import geniusweb.inform.Inform;
     24import geniusweb.inform.Settings;
     25import geniusweb.inform.YourTurn;
    2126import geniusweb.issuevalue.Bid;
    2227import geniusweb.issuevalue.DiscreteValue;
     
    2631import geniusweb.party.Capabilities;
    2732import 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;
    3333import geniusweb.profile.PartialOrdering;
    3434import geniusweb.profileconnection.ProfileConnectionFactory;
  • exampleparties/anac2019/winkyagent/src/test/java/geniusweb/exampleparties/anac2019/winkyagent/WinkyAgentTest.java

    r12 r21  
    3434import geniusweb.actions.PartyId;
    3535import geniusweb.connection.ConnectionEnd;
     36import geniusweb.inform.ActionDone;
     37import geniusweb.inform.Finished;
     38import geniusweb.inform.Inform;
     39import geniusweb.inform.Settings;
     40import geniusweb.inform.YourTurn;
    3641import geniusweb.issuevalue.Bid;
    3742import 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;
    4343import geniusweb.profile.DefaultPartialOrdering;
    4444import geniusweb.profile.PartialOrdering;
  • exampleparties/boulware/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>boulware</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • exampleparties/comparebids/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>comparebids</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    5555                        <groupId>tudelft.utilities</groupId>
    5656                        <artifactId>immutablelist</artifactId>
    57                         <version>1.1.0</version>
     57                        <version>1.1.1</version>
    5858                </dependency>
    5959
  • exampleparties/comparebids/src/main/java/geniusweb/exampleparties/comparebids/CompareBids.java

    r10 r21  
    1212import geniusweb.actions.ElicitComparison;
    1313import geniusweb.actions.PartyId;
     14import geniusweb.inform.ActionDone;
     15import geniusweb.inform.Finished;
     16import geniusweb.inform.Inform;
     17import geniusweb.inform.Settings;
    1418import geniusweb.issuevalue.Bid;
    1519import geniusweb.party.Capabilities;
    1620import 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;
    2121import geniusweb.profile.PartialOrdering;
    2222import geniusweb.profile.Profile;
  • exampleparties/comparebids/src/test/java/geniusweb/exampleparties/comparebids/CompareBidsTest.java

    r10 r21  
    2929import geniusweb.bidspace.AllBidsList;
    3030import geniusweb.connection.ConnectionEnd;
     31import geniusweb.inform.ActionDone;
     32import geniusweb.inform.Inform;
     33import geniusweb.inform.Settings;
    3134import geniusweb.issuevalue.Bid;
    3235import geniusweb.party.Capabilities;
    33 import geniusweb.party.inform.ActionDone;
    34 import geniusweb.party.inform.Inform;
    35 import geniusweb.party.inform.Settings;
    3636import geniusweb.profile.Profile;
    3737import geniusweb.profile.utilityspace.LinearAdditive;
  • exampleparties/conceder/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>conceder</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • exampleparties/hardliner/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>hardliner</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • exampleparties/humangui/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>humangui</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    4646                        <artifactId>profileconnection</artifactId>
    4747                        <version>${geniusweb.version}</version>
    48                 </dependency>
    49                 <dependency>
    50                         <groupId>tudelft.utilities</groupId>
    51                         <artifactId>immutablelist</artifactId>
    52                         <version>1.1.0</version>
    5348                </dependency>
    5449                <dependency>
  • exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/BiddingInfo.java

    r9 r21  
    1313import geniusweb.actions.PartyId;
    1414import geniusweb.connection.ConnectionEnd;
     15import geniusweb.inform.Inform;
     16import geniusweb.inform.Settings;
    1517import geniusweb.issuevalue.Bid;
    16 import geniusweb.party.inform.Inform;
    17 import geniusweb.party.inform.Settings;
    1818import geniusweb.profile.Profile;
    1919import geniusweb.profileconnection.ProfileInterface;
  • exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/HumanGui.java

    r10 r21  
    1111import geniusweb.actions.Action;
    1212import geniusweb.actions.Offer;
     13import geniusweb.inform.ActionDone;
     14import geniusweb.inform.Finished;
     15import geniusweb.inform.Inform;
     16import geniusweb.inform.Settings;
     17import geniusweb.inform.YourTurn;
    1318import geniusweb.party.Capabilities;
    1419import geniusweb.party.DefaultParty;
    1520import 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;
    2121import geniusweb.profileconnection.ProfileConnectionFactory;
    2222import geniusweb.profileconnection.ProfileInterface;
  • exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/BiddingInfoTest.java

    r10 r21  
    2929import geniusweb.actions.Accept;
    3030import geniusweb.actions.PartyId;
     31import geniusweb.inform.Settings;
    3132import geniusweb.issuevalue.Bid;
    32 import geniusweb.party.inform.Settings;
    3333import geniusweb.profile.Profile;
    3434import geniusweb.profile.utilityspace.LinearAdditive;
  • exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/HumanGuiTest.java

    r11 r21  
    2727import geniusweb.actions.PartyId;
    2828import geniusweb.bidspace.AllBidsList;
     29import geniusweb.inform.ActionDone;
     30import geniusweb.inform.Finished;
     31import geniusweb.inform.Settings;
     32import geniusweb.inform.YourTurn;
    2933import geniusweb.issuevalue.Bid;
    3034import 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;
    3535import geniusweb.profile.Profile;
    3636import geniusweb.profile.utilityspace.LinearAdditive;
  • exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/MyGUITest.java

    r9 r21  
    1919import geniusweb.actions.PartyId;
    2020import geniusweb.connection.ConnectionEnd;
    21 import geniusweb.party.inform.Inform;
    22 import geniusweb.party.inform.Settings;
     21import geniusweb.inform.Inform;
     22import geniusweb.inform.Settings;
    2323import geniusweb.profileconnection.ProfileConnectionFactory;
    2424import geniusweb.profileconnection.ProfileInterface;
  • exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/TestConnection.java

    r9 r21  
    88import geniusweb.actions.Action;
    99import geniusweb.connection.ConnectionEnd;
    10 import geniusweb.party.inform.Inform;
     10import geniusweb.inform.Inform;
    1111import geniusweb.references.Reference;
    1212import tudelft.utilities.listener.DefaultListenable;
  • exampleparties/linear/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>linear</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • exampleparties/randomparty/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>randomparty</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    5555                        <groupId>tudelft.utilities</groupId>
    5656                        <artifactId>immutablelist</artifactId>
    57                         <version>1.1.0</version>
     57                        <version>1.1.1</version>
    5858                </dependency>
    5959
  • exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java

    r10 r21  
    55import java.util.Arrays;
    66import java.util.HashSet;
     7import java.util.List;
    78import java.util.Random;
    89import java.util.logging.Level;
     10import java.util.stream.Collectors;
    911
    1012import geniusweb.actions.Accept;
     
    1214import geniusweb.actions.Offer;
    1315import geniusweb.actions.PartyId;
     16import geniusweb.actions.Vote;
     17import geniusweb.actions.Votes;
    1418import geniusweb.bidspace.AllPartialBidsList;
     19import geniusweb.inform.ActionDone;
     20import geniusweb.inform.Finished;
     21import geniusweb.inform.Inform;
     22import geniusweb.inform.OptIn;
     23import geniusweb.inform.Settings;
     24import geniusweb.inform.Voting;
     25import geniusweb.inform.YourTurn;
    1526import geniusweb.issuevalue.Bid;
    1627import geniusweb.party.Capabilities;
    1728import 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;
    2329import geniusweb.profile.PartialOrdering;
    2430import geniusweb.profile.Profile;
     
    3339 * A simple party that places random bids and accepts when it receives an offer
    3440 * 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.
    3544 */
    3645public class RandomParty extends DefaultParty {
     
    4150        protected ProfileInterface profileint;
    4251        private Progress progress;
     52        private Settings settings;
     53        private Votes lastvotes;
    4354
    4455        public RandomParty() {
     
    5869                                this.me = settings.getID();
    5970                                this.progress = settings.getProgress();
     71                                this.settings = settings;
    6072                        } else if (info instanceof ActionDone) {
    6173                                Action otheract = ((ActionDone) info).getAction();
     
    6476                                }
    6577                        } else if (info instanceof YourTurn) {
    66                                 myTurn();
    67                                 if (progress instanceof ProgressRounds) {
    68                                         progress = ((ProgressRounds) progress).advance();
    69                                 }
     78                                makeOffer();
     79                                nextRound();
    7080                        } else if (info instanceof Finished) {
    7181                                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();
    7290                        }
    7391                } catch (Exception e) {
     
    7694        }
    7795
     96        private void nextRound() {
     97                if (progress instanceof ProgressRounds) {
     98                        progress = ((ProgressRounds) progress).advance();
     99                }
     100
     101        }
     102
    78103        @Override
    79104        public Capabilities getCapabilities() {
    80                 return new Capabilities(new HashSet<>(Arrays.asList("SAOP")));
     105                return new Capabilities(
     106                                new HashSet<>(Arrays.asList("SAOP", "AMOP", "MOPAC")));
    81107        }
    82108
     
    86112        }
    87113
    88         private void myTurn() throws IOException {
     114        /**
     115         * send our next offer
     116         */
     117        private void makeOffer() throws IOException {
    89118                Action action;
    90                 if (isGood(lastReceivedBid)) {
     119                String protocol = settings.getProtocol().getURI().getPath();
     120                if ((protocol.equals("SAOP") || protocol.equals("SHAOP"))
     121                                && isGood(lastReceivedBid)) {
    91122                        action = new Accept(me, lastReceivedBid);
    92123                } else {
     
    105136        }
    106137
    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) {
    108143                if (bid == null)
    109144                        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)
    112152                        return ((UtilitySpace) profile).getUtility(bid).doubleValue() > 0.6;
    113                 }
    114153                if (profile instanceof PartialOrdering) {
    115154                        return ((PartialOrdering) profile).isPreferredOrEqual(bid,
    116155                                        profile.getReservationBid());
    117156                }
    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);
    120176        }
    121177
  • exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java

    r10 r21  
    1616import java.nio.file.Files;
    1717import java.nio.file.Paths;
     18import java.util.Arrays;
     19import java.util.Collections;
    1820import java.util.LinkedList;
    1921import java.util.List;
     
    3234import geniusweb.actions.Offer;
    3335import geniusweb.actions.PartyId;
     36import geniusweb.actions.Votes;
    3437import geniusweb.bidspace.AllBidsList;
    3538import geniusweb.connection.ConnectionEnd;
     39import geniusweb.inform.ActionDone;
     40import geniusweb.inform.Finished;
     41import geniusweb.inform.Inform;
     42import geniusweb.inform.Settings;
     43import geniusweb.inform.Voting;
     44import geniusweb.inform.YourTurn;
    3645import geniusweb.issuevalue.Bid;
    3746import 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;
    4347import geniusweb.profile.Profile;
    4448import geniusweb.profile.utilityspace.LinearAdditive;
     
    5357public class RandomPartyTest {
    5458
     59        private static final PartyId PARTY1 = new PartyId("party1");
    5560        private static final String SAOP = "SAOP";
    5661        private static final PartyId otherparty = new PartyId("other");
     
    6065        private RandomParty party;
    6166        private final TestConnection connection = new TestConnection();
    62         private final ProtocolRef protocol = mock(ProtocolRef.class);
     67        private final ProtocolRef protocol = new ProtocolRef(SAOP);
    6368        private final ProgressRounds progress = mock(ProgressRounds.class);
    6469        private Settings settings;
     
    7075                        IOException, URISyntaxException {
    7176                party = new RandomParty();
    72                 settings = new Settings(new PartyId("party1"),
     77                settings = new Settings(PARTY1,
    7378                                new ProfileRef(new URI("file:" + PROFILE)), protocol, progress,
    7479                                parameters);
     
    189194        }
    190195
     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
    191211}
    192212
  • exampleparties/randompartypy/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>randompyparty</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    4848                        <groupId>tudelft.utilities</groupId>
    4949                        <artifactId>immutablelist</artifactId>
    50                         <version>1.1.0</version>
     50                        <version>1.1.1</version>
    5151                </dependency>
    5252
  • exampleparties/randompartypy/src/main/resources/RandomParty.py

    r10 r21  
    22import traceback
    33
    4 import geniusweb.party.inform.ActionDone as ActionDone
    5 import geniusweb.party.inform.Inform as Inform
    6 import geniusweb.party.inform.Settings as Settings
    7 import geniusweb.party.inform.YourTurn as YourTurn
     4import geniusweb.inform.ActionDone as ActionDone
     5import geniusweb.inform.Inform as Inform
     6import geniusweb.inform.Settings as Settings
     7import geniusweb.inform.YourTurn as YourTurn
    88
    99
  • exampleparties/randompartypy/src/test/java/geniusweb/exampleparties/randompartypy/RandomPartyTest.java

    r10 r21  
    3232import geniusweb.bidspace.AllBidsList;
    3333import geniusweb.connection.ConnectionEnd;
     34import geniusweb.inform.ActionDone;
     35import geniusweb.inform.Inform;
     36import geniusweb.inform.Settings;
     37import geniusweb.inform.YourTurn;
    3438import geniusweb.issuevalue.Bid;
    3539import 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;
    4040import geniusweb.profile.Profile;
    4141import geniusweb.profile.utilityspace.LinearAdditive;
  • exampleparties/simpleboa/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>simpleboaparty</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • exampleparties/simpleboa/src/main/java/geniusweb/exampleparties/simpleboa/SimpleBoa.java

    r20 r21  
    88import geniusweb.boa.biddingstrategy.BiddingStrategy;
    99import geniusweb.boa.biddingstrategy.TimeDependentBiddingStrategy;
     10import geniusweb.inform.Settings;
    1011import geniusweb.opponentmodel.FrequencyOpponentModel;
    1112import geniusweb.opponentmodel.OpponentModel;
    1213import geniusweb.party.Party;
    13 import geniusweb.party.inform.Settings;
    1414import tudelft.utilities.logging.Reporter;
    1515
  • exampleparties/simpleboa/src/test/java/geniusweb/exampleparties/simpleboa/SimpleBoaTest.java

    r20 r21  
    3636import geniusweb.bidspace.AllBidsList;
    3737import geniusweb.connection.ConnectionEnd;
     38import geniusweb.inform.ActionDone;
     39import geniusweb.inform.Finished;
     40import geniusweb.inform.Inform;
     41import geniusweb.inform.Settings;
     42import geniusweb.inform.YourTurn;
    3843import geniusweb.issuevalue.Bid;
    3944import 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;
    4545import geniusweb.profile.Profile;
    4646import geniusweb.profile.utilityspace.LinearAdditive;
  • exampleparties/simpleshaop/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>simpleshaop</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    5555                        <groupId>tudelft.utilities</groupId>
    5656                        <artifactId>immutablelist</artifactId>
    57                         <version>1.1.0</version>
     57                        <version>1.1.1</version>
    5858                </dependency>
    5959
  • exampleparties/simpleshaop/src/main/java/geniusweb/exampleparties/simpleshaop/ShaopParty.java

    r12 r21  
    1616import geniusweb.actions.PartyId;
    1717import geniusweb.bidspace.AllBidsList;
     18import geniusweb.inform.ActionDone;
     19import geniusweb.inform.Finished;
     20import geniusweb.inform.Inform;
     21import geniusweb.inform.Settings;
     22import geniusweb.inform.YourTurn;
    1823import geniusweb.issuevalue.Bid;
    1924import geniusweb.party.Capabilities;
    2025import 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;
    2626import geniusweb.profile.PartialOrdering;
    2727import geniusweb.profileconnection.ProfileConnectionFactory;
  • exampleparties/simpleshaop/src/test/java/geniusweb/exampleparties/simpleshaop/ShaopPartyTest.java

    r10 r21  
    3636import geniusweb.actions.PartyId;
    3737import geniusweb.connection.ConnectionEnd;
     38import geniusweb.inform.ActionDone;
     39import geniusweb.inform.Finished;
     40import geniusweb.inform.Inform;
     41import geniusweb.inform.Settings;
     42import geniusweb.inform.YourTurn;
    3843import geniusweb.issuevalue.Bid;
    3944import geniusweb.issuevalue.DiscreteValue;
    4045import geniusweb.issuevalue.Value;
    4146import 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;
    4747import geniusweb.profile.Profile;
    4848import geniusweb.progress.ProgressRounds;
  • exampleparties/timedependentparty/pom.xml

    r20 r21  
    66        <groupId>geniusweb.exampleparties</groupId>
    77        <artifactId>timedependentparty</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    5555                        <groupId>tudelft.utilities</groupId>
    5656                        <artifactId>immutablelist</artifactId>
    57                         <version>1.1.0</version>
     57                        <version>1.1.1</version>
    5858                </dependency>
    5959
  • exampleparties/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/TimeDependentParty.java

    r20 r21  
    1313import geniusweb.actions.Offer;
    1414import geniusweb.actions.PartyId;
     15import geniusweb.inform.ActionDone;
     16import geniusweb.inform.Finished;
     17import geniusweb.inform.Inform;
     18import geniusweb.inform.Settings;
     19import geniusweb.inform.YourTurn;
    1520import geniusweb.issuevalue.Bid;
    1621import geniusweb.party.Capabilities;
    1722import 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;
    2323import geniusweb.profile.Profile;
    2424import geniusweb.profile.utilityspace.LinearAdditive;
  • exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java

    r10 r21  
    3434import geniusweb.bidspace.AllBidsList;
    3535import geniusweb.connection.ConnectionEnd;
     36import geniusweb.inform.ActionDone;
     37import geniusweb.inform.Finished;
     38import geniusweb.inform.Inform;
     39import geniusweb.inform.Settings;
     40import geniusweb.inform.YourTurn;
    3641import geniusweb.issuevalue.Bid;
    3742import 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;
    4343import geniusweb.profile.Profile;
    4444import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
  • issuevalue/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>issuevalue</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    9393                        <groupId>tudelft.utilities</groupId>
    9494                        <artifactId>immutablelist</artifactId>
    95                         <version>1.1.0</version>
     95                        <version>1.1.1</version>
    9696                </dependency>
    9797
  • opponentmodel/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>opponentmodel</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • party/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>party</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • party/src/main/java/geniusweb/party/DefaultParty.java

    r9 r21  
    33import geniusweb.actions.Action;
    44import geniusweb.connection.ConnectionEnd;
    5 import geniusweb.party.inform.Inform;
     5import geniusweb.inform.Inform;
    66import tudelft.utilities.listener.Listener;
    77import tudelft.utilities.logging.ReportToLogger;
  • party/src/main/java/geniusweb/party/Party.java

    r1 r21  
    33import geniusweb.actions.Action;
    44import geniusweb.connection.Connectable;
    5 import geniusweb.party.inform.Inform;
     5import geniusweb.inform.Inform;
    66
    77/**
  • party/src/test/java/geniusweb/party/inform/ActionDoneTest.java

    r1 r21  
    2121import geniusweb.actions.Accept;
    2222import geniusweb.actions.PartyId;
     23import geniusweb.inform.ActionDone;
     24import geniusweb.inform.Inform;
    2325import geniusweb.issuevalue.Bid;
    2426import geniusweb.issuevalue.DiscreteValue;
    2527import geniusweb.issuevalue.NumberValue;
    2628import geniusweb.issuevalue.Value;
    27 import geniusweb.party.inform.ActionDone;
    28 import geniusweb.party.inform.Inform;
    2929import tudelft.utilities.junit.GeneralTests;
    3030
  • party/src/test/java/geniusweb/party/inform/FinishedTest.java

    r1 r21  
    88import java.util.Arrays;
    99import java.util.HashMap;
     10import java.util.HashSet;
    1011import java.util.List;
    1112import java.util.Map;
     
    1920import com.fasterxml.jackson.databind.ObjectMapper;
    2021
     22import geniusweb.actions.PartyId;
     23import geniusweb.inform.Agreements;
     24import geniusweb.inform.Finished;
     25import geniusweb.inform.Inform;
    2126import geniusweb.issuevalue.Bid;
    2227import geniusweb.issuevalue.DiscreteValue;
    2328import geniusweb.issuevalue.NumberValue;
    2429import geniusweb.issuevalue.Value;
    25 import geniusweb.party.inform.Finished;
    26 import geniusweb.party.inform.Inform;
    2730import tudelft.utilities.junit.GeneralTests;
    2831
     
    3134        private Finished finished1, finished1a, finished2, finished3;
    3235
    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");
    3440
    3541        @Before
     
    5763                Bid bidc = new Bid(issuevaluesc);
    5864
    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);
    6376        }
    6477
     
    93106        public void testDeserialize()
    94107                        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.
    95111                ObjectMapper jackson = new ObjectMapper();
    96112                Finished p = (Finished) jackson.readValue(asJson, Inform.class);
  • party/src/test/java/geniusweb/party/inform/SettingsTest.java

    r8 r21  
    2121
    2222import geniusweb.actions.PartyId;
     23import geniusweb.inform.Inform;
     24import geniusweb.inform.Settings;
    2325import geniusweb.progress.ProgressRounds;
    2426import geniusweb.references.Parameters;
  • party/src/test/java/geniusweb/party/inform/YourTurnTest.java

    r1 r21  
    1616import com.fasterxml.jackson.databind.ObjectMapper;
    1717
    18 import geniusweb.party.inform.Inform;
    19 import geniusweb.party.inform.YourTurn;
     18import geniusweb.inform.Inform;
     19import geniusweb.inform.YourTurn;
    2020import tudelft.utilities.junit.GeneralTests;
    2121
  • pom.xml

    r20 r21  
    2222                <module>profile</module>
    2323                <module>events</module>
     24                <module>voting</module>
    2425                <module>bidspace</module>
    2526                <module>party</module>
  • profile/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>profile</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    4242                        <groupId>tudelft.utilities</groupId>
    4343                        <artifactId>immutablelist</artifactId>
    44                         <version>1.1.0</version>
     44                        <version>1.1.1</version>
    4545                </dependency>
    4646
  • profileconnection/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>profileconnection</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • protocol/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>protocol</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    2828
    2929        <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>
    3140                <dependency>
    3241                        <groupId>geniusweb</groupId>
     
    3443                        <version>${geniusweb.version}</version>
    3544                </dependency>
    36                 <dependency>
     45<!--            <dependency>
    3746                        <groupId>geniusweb</groupId>
    3847                        <artifactId>party</artifactId>
    3948                        <version>${geniusweb.version}</version>
    4049                </dependency>
    41                 <dependency>
     50 -->            <dependency>
    4251                        <groupId>geniusweb</groupId>
    4352                        <artifactId>references</artifactId>
     
    5261                        <groupId>tudelft.utilities</groupId>
    5362                        <artifactId>immutablelist</artifactId>
    54                         <version>1.1.0</version>
     63                        <version>1.1.1</version>
    5564                </dependency>
    5665                <dependency>
  • protocol/src/main/java/geniusweb/protocol/NegoProtocol.java

    r9 r21  
    88
    99import geniusweb.connection.ConnectionFactory;
     10import geniusweb.deadline.Deadline;
    1011import geniusweb.events.CurrentState;
    1112import geniusweb.events.ProtocolEvent;
     
    2627 * {@link #getDescription()}. A protocol reports the progress through its
    2728 * {@link Listenable} interface. <br>
    28  * <p>
     29 * <h2>General information</h2>
    2930 *
    3031 * A protocol is mutable because the incoming connections cause state changes.
     
    3334 * Because a protocol contains an internal state, it can be used only once.
    3435 * <p>
    35  * The protocol also needs to keep an eye on the deadline and take appropriate
    36  * 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.
    4036 * <p>
    4137 * The protocol can emit a {@link CurrentState} event at any time. It should do
     
    4844 * {@link #start(SessionSettings, ConnectionFactory)}.
    4945 *
     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 *
    5058 */
    5159@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
    5260@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) })
    5463
    5564public interface NegoProtocol extends Listenable<ProtocolEvent> {
     
    6473         * <p>
    6574         *
    66          * All errors are to be handled through {@link SessionState#getError()} except
    67          * for plain {@link IllegalArgumentException}s. <br>
    68          * The protocol usually uses the incoming connections to keep running. It does
    69          * 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.
    7079         *
    7180         *
    72          * @param connectionfactory the {@link ProtocolToPartyConnFactory} that allows
    73          *                          the protocol to connect with the {@link Reference}s
    74          *                          in the settings
     81         * @param connectionfactory the {@link ProtocolToPartyConnFactory} that
     82         *                          allows the protocol to connect with the
     83         *                          {@link Reference}s in the settings
    7584         */
    7685        void start(ProtocolToPartyConnFactory connectionfactory);
     
    7887        /**
    7988         *
    80          * @return a complete description of how this protocol behaves. Presented to the
    81          *         end users who should know negotiation basics but not all technical
    82          *         terms.
     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.
    8392         */
    8493        String getDescription();
     
    8695        /**
    8796         * @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.
    9099         */
    91100        NegoState getState();
     
    98107
    99108        /**
    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.
    102112         *
    103113         * @param party the {@link PartyWithProfile} to be added.
  • protocol/src/main/java/geniusweb/protocol/NegoState.java

    r1 r21  
    55import com.fasterxml.jackson.annotation.JsonSubTypes;
    66import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
     7import com.fasterxml.jackson.annotation.JsonTypeInfo;
    78
    89import geniusweb.protocol.session.SessionState;
    910import geniusweb.protocol.tournament.TournamentState;
    1011
    11 import com.fasterxml.jackson.annotation.JsonTypeInfo;
    12 
    1312/**
    14  * The current state of the tournament. Must be serializabl;e so that it can be
    15  * 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.
    1615 */
    1716@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE)
     
    3635        boolean isFinal(long currentTimeMs);
    3736
    38         /**
    39          *
    40          * @return a fatal error occured during the tournament. returns null if no
    41          *         errors occured.
    42          */
    43         ProtocolException getError();
    4437}
  • protocol/src/main/java/geniusweb/protocol/ProtocolException.java

    r4 r21  
    22
    33import geniusweb.actions.PartyId;
    4 import geniusweb.party.Party;
    54import geniusweb.references.PartyRef;
    65
     
    109 */
    1110public 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
    1313
    1414        /**
     
    1717         *                {@link PartyRef}
    1818         */
    19         public ProtocolException(String message, String party) {
     19        public ProtocolException(String message, PartyId party) {
    2020                this(message, party, null);
    2121        }
     
    3030         *
    3131         * @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}
    3433         * @param e       the cause of the error
    3534         */
    36         public ProtocolException(String message, String party, Throwable e) {
     35        public ProtocolException(String message, PartyId party, Throwable e) {
    3736                super(party + ":" + message, e, true, false);
    3837                this.party = party;
     
    4342         * @return offending party, either the {@link PartyId} or a {@link PartyRef}
    4443         */
    45         public String getParty() {
     44        public PartyId getParty() {
    4645                return party;
    4746        }
  • protocol/src/main/java/geniusweb/protocol/partyconnection/ProtocolToPartyConn.java

    r9 r21  
    44import geniusweb.actions.PartyId;
    55import geniusweb.connection.ConnectionEnd;
    6 import geniusweb.party.inform.Inform;
     6import geniusweb.inform.Inform;
    77
    88/**
     
    1414        /**
    1515         *
    16          * @return the partyId of the party that this connects to
     16         * @return the partyId of the party that this connects to.
    1717         */
    1818        PartyId getParty();
  • protocol/src/main/java/geniusweb/protocol/partyconnection/ProtocolToPartyConnFactory.java

    r9 r21  
    66import geniusweb.actions.Action;
    77import geniusweb.connection.ConnectionFactory;
    8 import geniusweb.party.inform.Inform;
     8import geniusweb.inform.Inform;
    99import geniusweb.references.Reference;
    1010import tudelft.utilities.repository.NoResourcesNowException;
  • protocol/src/main/java/geniusweb/protocol/partyconnection/ProtocolToPartyConnections.java

    r9 r21  
    99
    1010import geniusweb.actions.PartyId;
    11 import geniusweb.party.inform.Inform;
     11import geniusweb.inform.Inform;
    1212
    1313/**
    1414 * Contains all parties with their connections. immutable
    1515 */
    16 public class ProtocolToPartyConnections implements Iterable<ProtocolToPartyConn> {
     16public class ProtocolToPartyConnections
     17                implements Iterable<ProtocolToPartyConn> {
    1718        private List<ProtocolToPartyConn> connections;
    1819
  • protocol/src/main/java/geniusweb/protocol/session/DefaultSessionState.java

    r10 r21  
    5757         *                      {@link ProtocolException}s. All errors in our own
    5858         *                      code are bugs (not ProtocolExceptions) and should
    59          *                      result in a throw.
     59         *                      result in a throw and terminate the session.
    6060         */
    6161        public DefaultSessionState(List<Action> actions,
     
    130130        }
    131131
    132         @Override
    133132        public ProtocolException getError() {
    134133                return error;
  • protocol/src/main/java/geniusweb/protocol/session/SessionResult.java

    r20 r21  
    1010import com.fasterxml.jackson.annotation.JsonTypeInfo;
    1111
    12 import geniusweb.issuevalue.Bid;
     12import geniusweb.inform.Agreements;
    1313import geniusweb.references.PartyWithProfile;
    1414
     
    2020public class SessionResult {
    2121        private final List<PartyWithProfile> participants;
    22         private final Bid agreement;
     22        private final Agreements agreements;
    2323        private final List<Double> penalties;
    2424
     
    3333         *                     never be null. Some of them may have entered later of
    3434         *                     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.
    3736         * @param penalties    the penalties in [0,1] for each participant, same
    3837         *                     order as the participants list.
     
    4847        public SessionResult(
    4948                        @JsonProperty("participants") List<PartyWithProfile> participants,
    50                         @JsonProperty("agreement") Bid agreement,
     49                        @JsonProperty("agreements") Agreements agreements,
    5150                        @JsonProperty("penalties") List<Double> penalties,
    5251                        @JsonProperty("error") Throwable error) {
    5352                this.participants = participants;
    54                 this.agreement = agreement;
     53                this.agreements = agreements;
    5554                this.penalties = penalties;
    5655                this.error = error;
     
    6968
    7069        /**
    71          * 8return the final agreement {@link Bid} of the session. Null if no
    72          * agreement was reached.
     70         * 8return the final {@link Agreements} of the session. May be empty, not
     71         * null
    7372         */
    74         public Bid getAgreement() {
    75                 return agreement;
     73        public Agreements getAgreements() {
     74                return agreements;
    7675        };
    7776
     
    9998        @Override
    10099        public String toString() {
    101                 return "SessionResult[" + participants + "," + agreement + ","
     100                return "SessionResult[" + participants + "," + agreements + ","
    102101                                + penalties + "," + error + "]";
    103102        }
     
    108107                int result = 1;
    109108                result = prime * result
    110                                 + ((agreement == null) ? 0 : agreement.hashCode());
     109                                + ((agreements == null) ? 0 : agreements.hashCode());
    111110                result = prime * result + ((error == null) ? 0 : error.hashCode());
    112111                result = prime * result
     
    126125                        return false;
    127126                SessionResult other = (SessionResult) obj;
    128                 if (agreement == null) {
    129                         if (other.agreement != null)
     127                if (agreements == null) {
     128                        if (other.agreements != null)
    130129                                return false;
    131                 } else if (!agreement.equals(other.agreement))
     130                } else if (!agreements.equals(other.agreements))
    132131                        return false;
    133132                if (error == null) {
  • protocol/src/main/java/geniusweb/protocol/session/SessionSettings.java

    r10 r21  
    66
    77import geniusweb.protocol.NegoSettings;
     8import geniusweb.protocol.session.amop.AMOPSettings;
     9import geniusweb.protocol.session.mopac.MOPACSettings;
    810import geniusweb.protocol.session.saop.SAOPSettings;
    911import geniusweb.protocol.session.shaop.SHAOPSettings;
     
    1517 */
    1618@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) })
    1822public interface SessionSettings extends NegoSettings {
    1923
  • protocol/src/main/java/geniusweb/protocol/session/SessionState.java

    r20 r21  
    66
    77import geniusweb.actions.Action;
    8 import geniusweb.issuevalue.Bid;
     8import geniusweb.inform.Agreements;
    99import geniusweb.progress.Progress;
    1010import geniusweb.protocol.NegoState;
     11import geniusweb.protocol.session.amop.AMOPState;
     12import geniusweb.protocol.session.mopac.MOPACState;
    1113import geniusweb.protocol.session.saop.SAOPState;
    1214import geniusweb.protocol.session.shaop.SHAOPState;
     
    3537 */
    3638@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) })
    3942public interface SessionState extends NegoState {
    4043
     
    4548         *
    4649         * @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
    4852         */
    4953        List<Action> getActions();
     
    6468         *         {@link #isFinal()}.
    6569         */
    66         Bid getAgreement();
     70        Agreements getAgreements();
    6771
    6872        /**
  • protocol/src/main/java/geniusweb/protocol/session/TeamOfPartiesAndProfiles.java

    r10 r21  
    77import com.fasterxml.jackson.annotation.JsonSubTypes;
    88
    9 import geniusweb.protocol.session.saop.SaopPartyWithProfile;
    109import geniusweb.protocol.session.shaop.ShaopTeam;
    1110import geniusweb.references.PartyWithProfile;
     
    2322// and do not (de)serialize individual TeamOfPartiesAndProfiles.
    2423//@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
    25 @JsonSubTypes({ @JsonSubTypes.Type(value = SaopPartyWithProfile.class),
     24@JsonSubTypes({ @JsonSubTypes.Type(value = OnePartyTeam.class),
    2625                @JsonSubTypes.Type(value = ShaopTeam.class) })
    2726public interface TeamOfPartiesAndProfiles {
  • protocol/src/main/java/geniusweb/protocol/session/saop/SAOP.java

    r10 r21  
    1515import geniusweb.deadline.Deadline;
    1616import 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;
     17import geniusweb.inform.ActionDone;
     18import geniusweb.inform.Finished;
     19import geniusweb.inform.Inform;
     20import geniusweb.inform.Settings;
     21import geniusweb.inform.YourTurn;
    2222import geniusweb.progress.ProgressFactory;
    2323import geniusweb.protocol.CurrentNegoState;
     
    227227                        } catch (IOException e) {
    228228                                throw new ProtocolException("Failed to initialize",
    229                                                 connection.getParty().getName(), e);
     229                                                connection.getParty(), e);
    230230                        }
    231231                }
     
    257257         * Synchronized so that we always handle only 1 action at a time.
    258258         *
    259          * @param partyconn the connection on which the action came in
     259         * @param partyconn the connection on which the action came in.
    260260         * @param action    the {@link Action} taken by some party
    261261         */
     
    266266                        if (err == null) {
    267267                                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);
    272272                        return;
    273273                }
     
    278278                                throw new ProtocolException(
    279279                                                "Party acts without having the turn",
    280                                                 partyconn.getParty().getName());
     280                                                partyconn.getParty());
    281281                        }
    282282                        state.getConnections().broadcast(new ActionDone(action));
     
    286286                } catch (Throwable e) {
    287287                        handleError("failed to handle action " + action,
    288                                         partyconn.getParty().getName(), e);
     288                                        partyconn.getParty(), e);
    289289                }
    290290
     
    301301                        state.getConnections().get(party).send(new YourTurn());
    302302                } catch (IOException e) {
    303                         handleError("failed to send YourTurn", party.getName(), e);
     303                        handleError("failed to send YourTurn", party, e);
    304304                }
    305305        }
     
    313313         */
    314314        private synchronized void handleError(final String message,
    315                         final String party, final Throwable e) {
     315                        final PartyId party, final Throwable e) {
    316316                if (e instanceof ProtocolException) {
    317317                        setState(state.with((ProtocolException) e));
     
    353353                if (!isFinishedInfoSent.compareAndSet(false, true))
    354354                        return;
    355                 Inform finished = new Finished(state.getAgreement());
     355                Inform finished = new Finished(state.getAgreements());
    356356                for (ProtocolToPartyConn conn : state.getConnections()) {
    357357                        sendFinish(conn, finished);
  • protocol/src/main/java/geniusweb/protocol/session/saop/SAOPSettings.java

    r10 r21  
    1010
    1111import geniusweb.deadline.Deadline;
     12import geniusweb.protocol.session.OnePartyTeam;
    1213import geniusweb.protocol.session.SessionProtocol;
    1314import geniusweb.protocol.session.SessionSettings;
     
    1718
    1819public class SAOPSettings implements SessionSettings {
    19         private final List<SaopPartyWithProfile> participants;
     20        private final List<OnePartyTeam> participants;
    2021        private final Deadline deadline;
    2122
     
    3031        @JsonCreator
    3132        public SAOPSettings(
    32                         @JsonProperty("participants") List<SaopPartyWithProfile> participants,
     33                        @JsonProperty("participants") List<OnePartyTeam> participants,
    3334                        @JsonProperty("deadline") Deadline deadline) {
    3435                this.participants = participants;
     
    111112        @Override
    112113        public SessionSettings with(TeamOfPartiesAndProfiles party) {
    113                 if (!(party instanceof SaopPartyWithProfile))
     114                if (!(party instanceof OnePartyTeam))
    114115                        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);
    119119                return new SAOPSettings(newparts, deadline);
    120120        }
  • protocol/src/main/java/geniusweb/protocol/session/saop/SAOPState.java

    r20 r21  
    66import java.util.List;
    77import java.util.Map;
     8import java.util.Set;
     9import java.util.stream.Collectors;
    810
    911import geniusweb.actions.Accept;
     
    1214import geniusweb.actions.Offer;
    1315import geniusweb.actions.PartyId;
     16import geniusweb.inform.Agreements;
    1417import geniusweb.issuevalue.Bid;
    1518import geniusweb.progress.Progress;
     
    113116
    114117        @Override
    115         public Bid getAgreement() {
     118        public Agreements getAgreements() {
     119                Agreements agree = new Agreements();
    116120                List<Action> acts = getActions();
    117121                int nparticipants = getConnections().size();
    118122                if (nparticipants < 2 || acts.size() < nparticipants) {
    119                         return null;
     123                        return agree;
    120124                }
    121125                Action offer = acts.get(acts.size() - nparticipants);
    122126                if (!(offer instanceof Offer))
    123                         return null;
     127                        return agree;
    124128                Bid bid = ((Offer) offer).getBid();
    125129
     
    128132                                .allMatch(act -> act instanceof Accept
    129133                                                && 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());
    131146        }
    132147
     
    134149        public boolean isFinal(long currentTimeMs) {
    135150                List<Action> acts = getActions();
    136                 return super.isFinal(currentTimeMs) || getAgreement() != null
    137                                 || (!acts.isEmpty()
     151                return super.isFinal(currentTimeMs)
     152                                || !getAgreements().getMap().isEmpty() || (!acts.isEmpty()
    138153                                                && acts.get(acts.size() - 1) instanceof EndNegotiation);
    139154        }
     
    254269                for (int n = 0; n < getConnections().size(); n++)
    255270                        emptylist.add(0d);
    256                 return new SessionResult(getSettings().getAllParties(), getAgreement(),
     271                return new SessionResult(getSettings().getAllParties(), getAgreements(),
    257272                                emptylist, getError());
    258273        }
  • protocol/src/main/java/geniusweb/protocol/session/shaop/BareSHAOPState.java

    r20 r21  
    158158        }
    159159
    160         @Override
    161160        public ProtocolException getError() {
    162161                return error;
     
    182181                        penalties[partyNumbers.get(party)] = spent;
    183182                }
    184                 return new SessionResult(getSettings().getAllParties(), getAgreement(),
     183                return new SessionResult(getSettings().getAllParties(), getAgreements(),
    185184                                Arrays.asList(penalties), getError());
    186185
  • protocol/src/main/java/geniusweb/protocol/session/shaop/SHAOP.java

    r18 r21  
    2121import geniusweb.deadline.Deadline;
    2222import 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;
     23import geniusweb.inform.ActionDone;
     24import geniusweb.inform.Finished;
     25import geniusweb.inform.Inform;
     26import geniusweb.inform.Settings;
     27import geniusweb.inform.YourTurn;
    2828import geniusweb.progress.ProgressFactory;
    2929import geniusweb.protocol.CurrentNegoState;
     
    238238                        } catch (IOException e) {
    239239                                throw new ProtocolException("Failed to initialize",
    240                                                 connection.getParty().getName(), e);
     240                                                connection.getParty(), e);
    241241                        }
    242242                }
     
    276276                } catch (Throwable e) {
    277277                        handleError("failed to handle action " + action,
    278                                         partyconn.getParty().getName(), e);
     278                                        partyconn.getParty(), e);
    279279                }
    280280        }
     
    289289
    290290                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);
    293292
    294293                // check if action allowed
     
    296295                        if (!ALLOWED_ACTIONS.contains(action.getClass())) {
    297296                                throw new ProtocolException(
    298                                                 "Illegal action for SHAOP Party:" + action,
    299                                                 partyid.getName());
     297                                                "Illegal action for SHAOP Party:" + action, partyid);
    300298                        }
    301299                } else {
    302300                        if (!(action instanceof Comparison))
    303301                                throw new ProtocolException(
    304                                                 "Illegal action for COB Party:" + action,
    305                                                 partyid.getName());
     302                                                "Illegal action for COB Party:" + action, partyid);
    306303                }
    307304
     
    316313                        if (!partyconn.getParty().equals(state.getCurrentTeam()))
    317314                                throw new ProtocolException(
    318                                                 "Party acts without having the turn",
    319                                                 partyid.getName());
     315                                                "Party acts without having the turn", partyid);
    320316                        setState(state.with(partyconn.getParty(), action));
    321317                        state.connections.broadcast(new ActionDone(action));
     
    336332                        state.getConnections().get(party).send(new YourTurn());
    337333                } catch (IOException e) {
    338                         handleError("failed to send YourTurn", party.getName(), e);
     334                        handleError("failed to send YourTurn", party, e);
    339335                }
    340336        }
     
    348344         */
    349345        private synchronized void handleError(final String message,
    350                         final String party, final Throwable e) {
     346                        final PartyId party, final Throwable e) {
    351347                log.log(Level.WARNING, "SHAOP protocol intercepted error due to party "
    352348                                + party + ": " + message, e);
     
    388384                if (!isFinishedInfoSent.compareAndSet(false, true))
    389385                        return;
    390                 Inform finished = new Finished(state.getAgreement());
     386                Inform finished = new Finished(state.getAgreements());
    391387                state.connections.stream().forEach(conn -> sendFinish(conn, finished));
    392388                notifyListeners(new CurrentNegoState(state));
  • protocol/src/main/java/geniusweb/protocol/session/shaop/SHAOPState.java

    r18 r21  
    66import java.util.List;
    77import java.util.Map;
     8import java.util.Set;
     9import java.util.stream.Collectors;
    810
    911import com.fasterxml.jackson.annotation.JsonCreator;
     
    1719import geniusweb.actions.Offer;
    1820import geniusweb.actions.PartyId;
     21import geniusweb.inform.Agreements;
    1922import geniusweb.issuevalue.Bid;
    2023import geniusweb.progress.Progress;
     
    7881        /**
    7982         *
     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         *
    8092         * @param party a Party Id
    8193         * @return the PartyId of the party (COB and SHAOP are partners)
     
    88100        public boolean isFinal(long currentTimeMs) {
    89101                List<Action> acts = getActions();
    90                 return super.isFinal(currentTimeMs) || getAgreement() != null
    91                                 || (!acts.isEmpty()
     102                return super.isFinal(currentTimeMs)
     103                                || !getAgreements().getMap().isEmpty() || (!acts.isEmpty()
    92104                                                && acts.get(acts.size() - 1) instanceof EndNegotiation);
    93105        }
     
    166178
    167179        @Override
    168         public Bid getAgreement() {
     180        public Agreements getAgreements() {
     181                Agreements agrees = new Agreements();
    169182                List<Action> acts = getActions();
    170183                if (acts.isEmpty())
    171                         return null;
     184                        return agrees;
    172185
    173186                int requiredaccepts = getSettings().getTeams().size() - 1;
     
    179192                                continue;
    180193                        if (requiredaccepts == 0 && act instanceof Offer)
    181                                 return ((Offer) act).getBid();
     194                                return agrees.with(((Offer) act).getBid(), getLeaders());
    182195                        if (!(act instanceof Accept))
    183                                 return null;
     196                                return agrees;
    184197                        requiredaccepts--;
    185198                }
    186                 return null;
     199                return agrees;
    187200        }
    188201
  • protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsSettings.java

    r18 r21  
    99import com.fasterxml.jackson.annotation.JsonProperty;
    1010
     11import geniusweb.protocol.session.OnePartyTeam;
    1112import geniusweb.protocol.session.SessionSettings;
    1213import geniusweb.protocol.session.TeamOfPartiesAndProfiles;
     14import geniusweb.protocol.session.amop.AMOPSettings;
     15import geniusweb.protocol.session.mopac.MOPACSettings;
    1316import geniusweb.protocol.session.saop.SAOPSettings;
    14 import geniusweb.protocol.session.saop.SaopPartyWithProfile;
    1517import geniusweb.protocol.session.shaop.SHAOPSettings;
    1618import geniusweb.protocol.session.shaop.ShaopTeam;
     
    106108                        throw new IllegalArgumentException("nTournaments must be >0");
    107109                int teamsize;
    108                 if (sesettings instanceof SAOPSettings)
     110                if (sesettings instanceof SAOPSettings
     111                                || sesettings instanceof MOPACSettings
     112                                || sesettings instanceof AMOPSettings)
    109113                        teamsize = 1;
    110114                else if (sesettings instanceof SHAOPSettings)
     
    283287                        public TeamOfPartiesAndProfiles apply(Team team,
    284288                                        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),
    287293                                                        profilelist.getProfiles().get(0));
    288294                                else if (sessionsettings instanceof SHAOPSettings) {
  • protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsState.java

    r20 r21  
    55import java.util.List;
    66
    7 import geniusweb.protocol.ProtocolException;
    87import geniusweb.protocol.session.SessionResult;
    98import geniusweb.protocol.session.SessionSettings;
     
    6564        }
    6665
    67         @Override
    68         public ProtocolException getError() {
    69                 return null;
    70         }
    71 
    7266        /**
    7367         *
  • protocol/src/test/java/geniusweb/protocol/session/DefaultSessionStateTest.java

    r20 r21  
    2323import geniusweb.actions.PartyId;
    2424import geniusweb.deadline.DeadlineTime;
    25 import geniusweb.issuevalue.Bid;
     25import geniusweb.inform.Agreements;
    2626import geniusweb.progress.Progress;
    2727import geniusweb.progress.ProgressTime;
     
    2929import geniusweb.protocol.partyconnection.ProtocolToPartyConnections;
    3030import geniusweb.protocol.session.saop.SAOPSettings;
    31 import geniusweb.protocol.session.saop.SaopPartyWithProfile;
    3231import geniusweb.references.Parameters;
    3332import geniusweb.references.PartyRef;
     
    6059                                new PartyRef("party2"), new Parameters());
    6160                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));
    6564                SessionSettings settings = new SAOPSettings(participants, deadline);
    6665                ProtocolException e = new ProtocolException("test protocol error",
    67                                 party1.getName());
     66                                party1);
    6867                HashMap<PartyId, PartyWithProfile> partyprofiles = new HashMap<PartyId, PartyWithProfile>();
    6968                partyprofiles.put(party1, new PartyWithProfile(party1ref, profile1));
     
    135134
    136135        @Override
    137         public Bid getAgreement() {
    138                 return null;
    139         }
    140 
    141         @Override
    142136        public SessionResult getResult() {
    143137
     
    145139                for (int n = 0; n < getConnections().size(); n++)
    146140                        emptylist.add(0d);
    147                 return new SessionResult(getSettings().getAllParties(), getAgreement(),
     141                return new SessionResult(getSettings().getAllParties(), getAgreements(),
    148142                                emptylist, getError());
    149143
    150144        }
    151145
     146        @Override
     147        public Agreements getAgreements() {
     148                return new Agreements();
     149        }
     150
    152151}
  • protocol/src/test/java/geniusweb/protocol/session/SessionResultTest.java

    r20 r21  
    77import java.util.Arrays;
    88import java.util.HashMap;
     9import java.util.HashSet;
    910import java.util.List;
    1011import java.util.Map;
     
    1617import com.fasterxml.jackson.databind.ObjectMapper;
    1718
     19import geniusweb.actions.PartyId;
     20import geniusweb.inform.Agreements;
    1821import geniusweb.issuevalue.Bid;
    1922import geniusweb.issuevalue.DiscreteValue;
     
    3235        private final String ISSUE1 = "issue1";
    3336        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}";
    3738        private List<Double> nopenalties = Arrays.asList(0d, 0d);
    3839        private List<Double> penalties = Arrays.asList(0.1d, 0.2d);
    3940
     41        private PartyId PARTY1 = new PartyId("party1");
     42        private PartyId PARTY2 = new PartyId("party2");
     43        private PartyId PARTY3 = new PartyId("party3");
     44
    4045        @Before
    4146        public void before() throws URISyntaxException, JsonProcessingException {
    42                 errorstring = "\"error\":{\"java.lang.RuntimeException\":"
     47                String errorstring = "\"error\":{\"java.lang.RuntimeException\":"
    4348                                + jackson.writeValueAsString(error) + "}";
    44                 System.out.println(errorstring);
     49                // System.out.println(errorstring);
    4550
    4651                PartyWithParameters party1 = new PartyWithParameters(
     
    5762                issuevalues1.put(ISSUE1, new DiscreteValue("a"));
    5863                Bid bid1 = new Bid(issuevalues1);
     64                Agreements agreement1 = new Agreements().with(bid1,
     65                                new HashSet<>(Arrays.asList(PARTY1, PARTY2)));
    5966
    6067                // different order but that shouldn't matter
     
    6269                issuevalues2.put(ISSUE1, new DiscreteValue("b"));
    6370                Bid bid2 = new Bid(issuevalues2);
     71                Agreements agreement2 = new Agreements().with(bid2,
     72                                new HashSet<>(Arrays.asList(PARTY1, PARTY3)));
    6473
    6574                result1 = new SessionResult(Arrays.asList(partyprofile1, partyprofile2),
    66                                 bid1, nopenalties, null);
     75                                agreement1, nopenalties, null);
    6776                result1a = new SessionResult(
    68                                 Arrays.asList(partyprofile1, partyprofile2), bid1, nopenalties,
    69                                 null);
     77                                Arrays.asList(partyprofile1, partyprofile2), agreement1,
     78                                nopenalties, null);
    7079                result2 = new SessionResult(Arrays.asList(partyprofile1, partyprofile2),
    71                                 bid2, nopenalties, null);
     80                                agreement2, nopenalties, null);
    7281                result3 = new SessionResult(Arrays.asList(partyprofile2, partyprofile1),
    73                                 bid2, nopenalties, null);
     82                                agreement1, nopenalties, null);
    7483                result4 = new SessionResult(Arrays.asList(partyprofile2, partyprofile1),
    75                                 bid2, penalties, null);
     84                                agreement1, penalties, null);
    7685
    7786                // IGNORE ERROR for now, it fails somewhere deep in maven suddenly.
     
    9099        public List<String> getGeneralTestStrings() {
    91100                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.*"
    96105
    97106                );
  • protocol/src/test/java/geniusweb/protocol/session/saop/SAOPSettingsTest.java

    r10 r21  
    1919import geniusweb.deadline.DeadlineRounds;
    2020import geniusweb.deadline.DeadlineTime;
     21import geniusweb.protocol.session.OnePartyTeam;
    2122import geniusweb.protocol.session.SessionSettings;
    2223import geniusweb.references.Parameters;
     
    2930public class SAOPSettingsTest extends GeneralTests<SAOPSettings> {
    3031
    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,
    3536                        partyprof2);
    36         private List<SaopPartyWithProfile> participants3 = Arrays.asList(partyprof1,
     37        private List<OnePartyTeam> participants3 = Arrays.asList(partyprof1,
    3738                        partyprof2, partyprof3);
    3839
     
    6667                                new PartyRef("http://party2"), new Parameters());
    6768                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,
    7372                                partywithprof2);
    7473
  • protocol/src/test/java/geniusweb/protocol/session/saop/SAOPStateTest.java

    r10 r21  
    176176                SAOPState state = new SAOPState(actions, connections3, progressrounds,
    177177                                settings, null, null);
    178                 assertNull(state.getAgreement());
     178                assertTrue(state.getAgreements().getMap().isEmpty());
    179179        }
    180180
     
    184184                SAOPState state = new SAOPState(actions, connections3, progressrounds,
    185185                                settings, null, null);
    186                 assertNull(state.getAgreement());
     186                assertTrue(state.getAgreements().getMap().isEmpty());
    187187        }
    188188
     
    192192                SAOPState state = new SAOPState(actions, connections3, progressrounds,
    193193                                settings, null, null);
    194                 assertNull(state.getAgreement());
     194                assertTrue(state.getAgreements().getMap().isEmpty());
    195195        }
    196196
     
    200200                SAOPState state = new SAOPState(actions, connections3, progressrounds,
    201201                                settings, null, null);
    202                 assertEquals(bid1, state.getAgreement());
     202                assertEquals(bid1, state.getAgreements().getMap().get(party1));
    203203                assertTrue(state.isFinal(NOW));
    204204        }
     
    209209                SAOPState state = new SAOPState(actions, connections3, progressrounds,
    210210                                settings, null, null);
    211                 assertEquals(null, state.getAgreement());
     211                assertTrue(state.getAgreements().getMap().isEmpty());
    212212        }
    213213
     
    217217                SAOPState state = new SAOPState(actions, connections3, progressrounds,
    218218                                settings, null, null);
    219                 assertEquals(null, state.getAgreement());
     219                assertTrue(state.getAgreements().getMap().isEmpty());
    220220        }
    221221
     
    246246                SAOPState state = new SAOPState(actions, connections3, progressrounds,
    247247                                settings, null, null);
    248                 assertEquals(null, state.getAgreement());
     248                assertTrue(state.getAgreements().getMap().isEmpty());
    249249                assertEquals(null, state.getError());
    250250                assertTrue(state.isFinal(NOW));
     
    255255        public void isProtocolErrorFinal() {
    256256                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")));
    258259                assertTrue(state.isFinal(NOW));
    259260                assertNotNull(state.getError());
     
    309310                assertTrue(state.isFinal(NOW));
    310311                assertNull(state.getError());
    311                 assertEquals(bid1, state.getAgreement());
     312                assertEquals(bid1, state.getAgreements().getMap().get(party1));
    312313
    313314        }
     
    325326                assertTrue(state.isFinal(NOW));
    326327                assertNull(state.getError());
    327                 assertEquals(bid2, state.getAgreement());
     328                assertEquals(bid2, state.getAgreements().getMap().get(party1));
    328329
    329330        }
  • protocol/src/test/java/geniusweb/protocol/session/saop/SAOPTest.java

    r10 r21  
    3434import geniusweb.events.CurrentState;
    3535import 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;
     36import geniusweb.inform.Finished;
     37import geniusweb.inform.Inform;
     38import geniusweb.inform.Settings;
     39import geniusweb.inform.YourTurn;
    4040import geniusweb.progress.Progress;
    4141import geniusweb.protocol.ProtocolException;
     
    4343import geniusweb.protocol.partyconnection.ProtocolToPartyConnFactory;
    4444import geniusweb.protocol.partyconnection.ProtocolToPartyConnections;
     45import geniusweb.protocol.session.OnePartyTeam;
    4546import geniusweb.protocol.session.TeamOfPartiesAndProfiles;
    4647import geniusweb.references.Parameters;
     
    7576        private final PartyRef party2ref = mock(PartyRef.class);
    7677        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);
    7980        private SAOP saop;
    8081        private ProtocolToPartyConnFactory factory;
     
    8283        private ProtocolToPartyConn conn1 = mock(ProtocolToPartyConn.class),
    8384                        conn2 = mock(ProtocolToPartyConn.class);
    84         private Map<PartyId, SaopPartyWithProfile> partyprofiles;
     85        private Map<PartyId, OnePartyTeam> partyprofiles;
    8586        private Progress progress = mock(Progress.class);
    8687        private ProfileRef profile1;
  • protocol/src/test/java/geniusweb/protocol/session/saop/SaopPartyWithProfileTest.java

    r10 r21  
    1717import com.fasterxml.jackson.databind.ObjectMapper;
    1818
     19import geniusweb.protocol.session.OnePartyTeam;
    1920import geniusweb.protocol.session.TeamOfPartiesAndProfiles;
    2021import geniusweb.references.Parameters;
     
    2425import tudelft.utilities.junit.GeneralTests;
    2526
    26 public class SaopPartyWithProfileTest
    27                 extends GeneralTests<SaopPartyWithProfile> {
     27public class SaopPartyWithProfileTest extends GeneralTests<OnePartyTeam> {
    2828
    2929        private PartyRef party1, party1a, party2, party3;
    3030        private ProfileRef profile1, profile2;
    31         private SaopPartyWithProfile partyprof1, partyprof1a, partyprof2,
    32                         partyprof3, partyprof4;
     31        private OnePartyTeam partyprof1, partyprof1a, partyprof2, partyprof3,
     32                        partyprof4;
    3333        private final String serialized = "{\"party\":{\"partyref\":\"ws:party1\",\"parameters\":{}},\"profile\":\"ws:profile1\"}";
    3434
     
    5454                                settings1);
    5555
    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);
    6161
    6262        }
    6363
    6464        @Override
    65         public List<List<SaopPartyWithProfile>> getGeneralTestData() {
     65        public List<List<OnePartyTeam>> getGeneralTestData() {
    6666                return Arrays.asList(Arrays.asList(partyprof1, partyprof1a),
    6767                                Arrays.asList(partyprof2), Arrays.asList(partyprof3),
     
    8484        @Test(expected = IllegalArgumentException.class)
    8585        public void nullTest() throws URISyntaxException {
    86                 new SaopPartyWithProfile((PartyWithParameters) null, (ProfileRef) null);
     86                new OnePartyTeam((PartyWithParameters) null, (ProfileRef) null);
    8787        }
    8888
     
    103103                // and therfore can not serialize as TeamOfPartiesAndProfiles
    104104                TeamOfPartiesAndProfiles p = jackson.readValue(serialized,
    105                                 SaopPartyWithProfile.class);
     105                                OnePartyTeam.class);
    106106                System.out.println(p);
    107107                assertEquals(partyprof1, p);
  • protocol/src/test/java/geniusweb/protocol/session/shaop/SHAOPStateTest.java

    r20 r21  
    44import static org.junit.Assert.assertFalse;
    55import static org.junit.Assert.assertNotNull;
    6 import static org.junit.Assert.assertNull;
    76import static org.junit.Assert.assertTrue;
    87import static org.mockito.Mockito.mock;
     
    194193                SHAOPState state = new SHAOPState(actions, connections3, progressrounds,
    195194                                settings, null, 0, null, null);
    196                 assertNull(state.getAgreement());
     195                assertTrue(state.getAgreements().getMap().isEmpty());
    197196        }
    198197
     
    201200                List<Action> actions = Arrays.asList(offer1, accept2);
    202201                SHAOPState state = new SHAOPState(actions, connections4, progressrounds,
    203                                 settings, null, 0, null, null);
    204                 assertNotNull(state.getAgreement());
     202                                settings, null, 0, partynrs, null);
     203                assertFalse(state.getAgreements().getMap().isEmpty());
    205204                assertTrue(state.isFinal(NOW));
    206205        }
     
    211210                SHAOPState state = new SHAOPState(actions, connections3, progressrounds,
    212211                                settings, null, 0, null, null);
    213                 assertNull(state.getAgreement());
     212                assert (state.getAgreements().getMap().isEmpty());
    214213        }
    215214
     
    219218                SHAOPState state = new SHAOPState(actions, connections3, progressrounds,
    220219                                settings, null, 0, null, null);
    221                 assertEquals(null, state.getAgreement());
     220                assertTrue(state.getAgreements().getMap().isEmpty());
    222221        }
    223222
     
    245244                SHAOPState state = new SHAOPState(actions, connections3, progressrounds,
    246245                                settings, null, 0, null, null);
    247                 assertEquals(null, state.getAgreement());
     246                assertTrue(state.getAgreements().getMap().isEmpty());
    248247                assertEquals(null, state.getError());
    249248                assertTrue(state.isFinal(NOW));
     
    254253        public void isProtocolErrorFinal() {
    255254                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);
    258258                assertTrue(state.isFinal(NOW));
    259259                assertNotNull(state.getError());
  • protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsProtocolTest.java

    r20 r21  
    2020
    2121import geniusweb.events.ProtocolEvent;
    22 import geniusweb.issuevalue.Bid;
     22import geniusweb.inform.Agreements;
    2323import geniusweb.protocol.CurrentNegoState;
    2424import geniusweb.protocol.NegoState;
     
    4444        private final SessionSettings settings = mock(SessionSettings.class);
    4545        private final SessionState finalsessionstate = mock(SessionState.class);
    46         private Bid agreement = mock(Bid.class);
     46        private Agreements agreement = mock(Agreements.class);
    4747        private final long NOW = 1000;
    4848        private SessionResult finalstate = mock(SessionResult.class);
     
    5353                when(finalsessionstate.isFinal(anyLong())).thenReturn(true);
    5454                when(finalsessionstate.getSettings()).thenReturn(settings);
    55                 when(finalsessionstate.getAgreement()).thenReturn(agreement);
     55                when(finalsessionstate.getAgreements()).thenReturn(agreement);
    5656                when(finalsessionstate.getResult()).thenReturn(finalstate);
    57                 when(finalstate.getAgreement()).thenReturn(agreement);
     57                when(finalstate.getAgreements()).thenReturn(agreement);
    5858                when(state.with(any())).thenReturn(newstate);
    5959        }
     
    112112                                .forClass(SessionResult.class);
    113113                verify(state, times(1)).with(argument.capture());
    114                 assertEquals(agreement, argument.getValue().getAgreement());
     114                assertEquals(agreement, argument.getValue().getAgreements());
    115115                assertNull(argument.getValue().getError());
    116116        }
  • protocol/src/test/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsStateTest.java

    r20 r21  
    8888                AllPermutationsState state1 = state.with(result);
    8989
    90                 assertEquals(null, state1.getError());
    9190                assertEquals(8, state1.getResults().size());
    9291                assertEquals(toursettings, state1.getSettings());
  • pythonadapter/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>pythonadapter</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • pythonadapter/src/main/java/geniusweb/pythonadapter/PythonPartyAdapter.java

    r9 r21  
    88import geniusweb.actions.Action;
    99import geniusweb.connection.ConnectionEnd;
     10import geniusweb.inform.Inform;
    1011import geniusweb.party.Capabilities;
    1112import geniusweb.party.DefaultParty;
    1213import geniusweb.party.Party;
    13 import geniusweb.party.inform.Inform;
    1414import tudelft.utilities.listener.Listener;
    1515
  • references/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>references</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
     
    3838                        <groupId>tudelft.utilities</groupId>
    3939                        <artifactId>repository</artifactId>
    40                         <version>1.1.0</version>
     40                        <version>1.1.1</version>
    4141                </dependency>
    4242                <!-- the core, which includes Streaming API, shared low-level abstractions
  • references/src/test/java/geniusweb/references/ProtocolRefTest.java

    r1 r21  
    1717import com.fasterxml.jackson.databind.ObjectMapper;
    1818
    19 import geniusweb.references.ProtocolRef;
    2019import tudelft.utilities.junit.GeneralTests;
    2120
     
    5857
    5958        @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
    6066        public void testSerialize() throws JsonProcessingException {
    6167                ObjectMapper jackson = new ObjectMapper();
  • simplerunner/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>simplerunner</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1717                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1818                <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>
    2020        </properties>
    2121
  • simplerunner/src/main/java/geniusweb/simplerunner/BasicConnection.java

    r9 r21  
    33import java.io.IOException;
    44import java.net.URI;
     5import java.util.concurrent.ArrayBlockingQueue;
    56
    67import geniusweb.connection.ConnectionEnd;
     
    2223        // to be initialized
    2324        private Listener<OUT> handler = null;
     25        private Thread handlerThread;
     26        private ArrayBlockingQueue<OUT> messages = new ArrayBlockingQueue<OUT>(4);
    2427
    2528        /**
     
    3336                this.reference = reference;
    3437                this.uri = uri;
     38
    3539        }
    3640
     
    4751                }
    4852                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();
    4969        }
    5070
     
    5575                                        "BasicConnection has not been initialized");
    5676                }
    57                 handler.notifyChange(data);
     77                try {
     78                        messages.put(data);
     79                } catch (InterruptedException e) {
     80                        throw new IOException(e);
     81                }
    5882        }
    5983
     
    7094        @Override
    7195        public void close() {
    72 
     96                handlerThread.interrupt();
     97                handlerThread = null;
     98                handler = null;
    7399        }
    74100
  • simplerunner/src/main/java/geniusweb/simplerunner/ClassPathConnectionFactory.java

    r9 r21  
    1111import geniusweb.actions.Action;
    1212import geniusweb.actions.PartyId;
     13import geniusweb.inform.Inform;
    1314import geniusweb.party.Party;
    14 import geniusweb.party.inform.Inform;
    1515import geniusweb.protocol.partyconnection.ProtocolToPartyConn;
    1616import geniusweb.protocol.partyconnection.ProtocolToPartyConnFactory;
     
    2222 * <code>classpath:org/my/package/class</code>
    2323 *
    24  *
    25  *
    2624 */
    2725public class ClassPathConnectionFactory implements ProtocolToPartyConnFactory {
  • simplerunner/src/main/java/geniusweb/simplerunner/NegoRunner.java

    r18 r21  
    2929        private final ProtocolToPartyConnFactory connectionfactory;
    3030        protected final Reporter log;
     31        private boolean properlyStopped = false;
    3132        private final static ObjectMapper jackson = new ObjectMapper();
     33        private final int LOOPTIME = 200;// ms
     34        private long maxruntime;
    3235
     36        /**
     37         *
     38         * @param settings
     39         * @param connectionfactory
     40         * @param logger
     41         * @param maxruntime        limit in millisecs. Ignored if 0
     42         */
    3343        public NegoRunner(NegoSettings settings,
    34                         ProtocolToPartyConnFactory connectionfactory, Reporter logger) {
     44                        ProtocolToPartyConnFactory connectionfactory, Reporter logger,
     45                        long maxruntime) {
    3546                if (settings == null || connectionfactory == null) {
    3647                        throw new NullPointerException("Arguments must be not null");
     
    4051                this.protocol = settings.getProtocol(log);
    4152                this.connectionfactory = connectionfactory;
     53                this.maxruntime = maxruntime;
     54        }
     55
     56        public boolean isProperlyStopped() {
     57                return properlyStopped;
    4258        }
    4359
     
    4662                protocol.addListener(evt -> handle(evt));
    4763                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");
    4874        }
    4975
     
    5682
    5783        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;
    6186        }
    6287
     
    88113
    89114                NegoRunner runner = new NegoRunner(settings,
    90                                 new ClassPathConnectionFactory(), new StdOutReporter());
     115                                new ClassPathConnectionFactory(), new StdOutReporter(), 0);
    91116                runner.run();
    92117        }
    93118
    94119        private static void showusage() {
    95                 System.err.println("GeniusWeb stand-alone runner. ");
     120                System.err.println("GeniusWeb stand-alone runner.");
    96121                System.err.println("first argument should be <settings.json>.");
    97122                System.err.println(
     
    100125                                "See the settings.json example file and the GeniusWeb wiki pages. ");
    101126
     127        }
     128
     129        /**
     130         * @return protocol that runs/ran the session.
     131         */
     132        public NegoProtocol getProtocol() {
     133                return protocol;
    102134        }
    103135}
  • simplerunner/src/test/java/geniusweb/simplerunner/ClassPathConnectionFactoryTest.java

    r9 r21  
    1111import geniusweb.actions.Action;
    1212import geniusweb.connection.ConnectionEnd;
    13 import geniusweb.party.inform.Inform;
     13import geniusweb.inform.Inform;
    1414import geniusweb.references.PartyRef;
    15 import geniusweb.simplerunner.ClassPathConnectionFactory;
    1615
    1716public class ClassPathConnectionFactoryTest {
  • simplerunner/src/test/java/geniusweb/simplerunner/SessionRunnerE2ETest.java

    r10 r21  
    11package geniusweb.simplerunner;
     2
     3import static org.junit.Assert.assertTrue;
    24
    35import java.io.IOException;
     
    2729@RunWith(Parameterized.class)
    2830public class SessionRunnerE2ETest {
     31        private static final int TEST_RUNTIME = 5000;
    2932        private final ObjectMapper jackson = new ObjectMapper();
    3033        private NegoRunner runner;
     
    3740                                .asList(new Object[][] { { "src/test/resources/settings.json" },
    3841                                                { "src/test/resources/settings2.json" },
    39                                                 { "src/test/resources/shaoptoursettings.json" } });
     42                                                { "src/test/resources/shaoptoursettings.json" },
     43                                                { "src/test/resources/mopac.json" } });
    4044        }
    4145
     
    5357
    5458                runner = new NegoRunner(settings, new ClassPathConnectionFactory(),
    55                                 logger);
     59                                logger, TEST_RUNTIME);
    5660
    5761        }
     
    6468        public void runTest() throws IOException {
    6569                runner.run();
     70                assertTrue(runner.isProperlyStopped());
     71                System.out.println("Final state:\n" + runner.getProtocol().getState());
    6672        }
    6773
  • simplerunner/src/test/java/geniusweb/simplerunner/SessionRunnerTest.java

    r18 r21  
    1616import org.mockito.ArgumentCaptor;
    1717
     18import geniusweb.actions.PartyId;
    1819import geniusweb.protocol.CurrentNegoState;
    1920import geniusweb.protocol.NegoState;
     
    2930public class SessionRunnerTest {
    3031        private static final ProtocolException PROTOCOL_EXC = new ProtocolException(
    31                         "fake protocol exception", "test");
     32                        "fake protocol exception", new PartyId("test"));
    3233        private CurrentNegoState finishedEvent;
    3334        private final long NOW = 1000;
     
    4748        public void smokeTest() {
    4849                new NegoRunner(mock(SessionSettings.class),
    49                                 mock(ProtocolToPartyConnFactory.class), logger);
     50                                mock(ProtocolToPartyConnFactory.class), logger, 5000);
    5051        }
    5152
     
    5960                                ProtocolToPartyConnFactory.class);
    6061
    61                 NegoRunner runner = spy(new NegoRunner(settings, factory, logger));
     62                NegoRunner runner = spy(
     63                                new NegoRunner(settings, factory, logger, 5000));
    6264                runner.run();
    6365
     
    7577                when(settings.getProtocol(any())).thenReturn(protocol);
    7678                SessionState state = mock(SessionState.class);
    77                 when(state.getError()).thenReturn(null);
    7879                when(protocol.getState()).thenReturn(state);
    7980                Reporter logger = mock(Reporter.class);
     
    8182                ProtocolToPartyConnFactory factory = mock(
    8283                                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                                });
    8991                ArgumentCaptor<Listener> listener = ArgumentCaptor
    9092                                .forClass(Listener.class);
     
    107109                when(settings.getProtocol(any())).thenReturn(protocol);
    108110                SessionState state = mock(SessionState.class);
    109                 when(state.getError()).thenReturn(PROTOCOL_EXC);
    110111                when(protocol.getState()).thenReturn(state);
    111112                @SuppressWarnings("unchecked")
    112113                ProtocolToPartyConnFactory factory = mock(
    113114                                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                                });
    120122                ArgumentCaptor<Listener> listener = ArgumentCaptor
    121123                                .forClass(Listener.class);
     
    126128                listener.getValue().notifyChange(finishedEvent);
    127129                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
    130134        }
    131135
  • simplerunner/src/test/resources/jobs/jobs1.json

    r1 r21  
    3434                                "discreteutils": {
    3535                                        "valueUtilities": {
    36                                                 "yes":1,
    37                                                 "no":0
     36                                                "yes": 1,
     37                                                "no": 0
    3838                                        }
    3939                                }
     
    4242                                "discreteutils": {
    4343                                        "valueUtilities": {
    44                                                 "yes":1,
    45                                                 "no":0
     44                                                "yes": 1,
     45                                                "no": 0
    4646                                        }
    4747                                }
     
    5050                                "discreteutils": {
    5151                                        "valueUtilities": {
    52                                                 "low":0,
    53                                                 "medium":0.5,
    54                                                 "high":1
     52                                                "low": 0,
     53                                                "medium": 0.5,
     54                                                "high": 1
    5555                                        }
    5656                                }
     
    112112                        }
    113113                },
    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                }
    115125        }
    116126}
  • simplerunner/src/test/resources/jobs/jobs2.json

    r1 r21  
    3434                                "discreteutils": {
    3535                                        "valueUtilities": {
    36                                                 "yes":0,
    37                                                 "no":1
     36                                                "yes": 0,
     37                                                "no": 1
    3838                                        }
    3939                                }
     
    4242                                "discreteutils": {
    4343                                        "valueUtilities": {
    44                                                 "yes":0.23809523809523808,
    45                                                 "no":0.761904761904762
     44                                                "yes": 0.23809523809523808,
     45                                                "no": 0.761904761904762
    4646                                        }
    4747                                }
     
    5050                                "discreteutils": {
    5151                                        "valueUtilities": {
    52                                                 "low":1.0,
    53                                                 "medium":0.5,
    54                                                 "high":0
     52                                                "low": 1.0,
     53                                                "medium": 0.5,
     54                                                "high": 0
    5555                                        }
    5656                                }
     
    112112                        }
    113113                },
    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                }
    115125        }
    116126}
  • simplerunner/src/test/resources/shaoptoursettings.json

    r18 r21  
    3434                        {
    3535                                "ProfileList": [
    36                                         "file:src/test/resources/jobs/jobs1partial.json?partial=10",
     36                                        "file:src/test/resources/jobs/jobs1partial.json",
    3737                                        "file:src/test/resources/jobs/jobs1partial.json"
    3838                                       
     
    4141                        {
    4242                                "ProfileList": [
    43                                         "file:src/test/resources/jobs/jobs2.json?partial=15",
     43                                        "file:src/test/resources/jobs/jobs2.json",
    4444                                        "file:src/test/resources/jobs/jobs2.json"
    4545                                       
     
    5555                                        "deadlinerounds": {
    5656                                                "rounds": 10,
    57                                                 "durationms": 10000
     57                                                "durationms": 1000
    5858                                        }
    5959                                }
  • timeline/pom.xml

    r20 r21  
    66        <groupId>geniusweb</groupId>
    77        <artifactId>timeline</artifactId>
    8         <version>1.4.4</version> <!-- must equal ${geniusweb.version} -->
     8        <version>1.5.0</version> <!-- must equal ${geniusweb.version} -->
    99        <packaging>jar</packaging>
    1010
     
    1616                <passwd>${env.ARTIFACTORY_PASS}</passwd>
    1717                <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>
    1919        </properties>
    2020
Note: See TracChangeset for help on using the changeset viewer.