Changeset 10
- Timestamp:
- 01/28/20 10:19:54 (5 years ago)
- Files:
-
- 58 added
- 50 edited
Legend:
- Unmodified
- Added
- Removed
-
bidspace/src/main/java/geniusweb/bidspace/BidsWithUtility.java
r8 r10 12 12 import geniusweb.issuevalue.Domain; 13 13 import geniusweb.issuevalue.Value; 14 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;14 import geniusweb.profile.utilityspace.LinearAdditive; 15 15 import tudelft.utilities.immutablelist.AbstractImmutableList; 16 16 import tudelft.utilities.immutablelist.FixedList; … … 22 22 /** 23 23 * Tool class containing functions dealing with utilities of all bids in a given 24 * {@link LinearAdditive UtilitySpace}. This class caches previously computed25 * values to accelerate the calls and subsequent calls. Re-use the object to26 * keep/reusethe cache.24 * {@link LinearAdditive}. This class caches previously computed values to 25 * accelerate the calls and subsequent calls. Re-use the object to keep/reuse 26 * the cache. 27 27 * <h1>Rounding</h1> Internally, utilities of bids are rounded to the given 28 28 * precision. This may cause inclusion/exclusion of some bids in the results. 29 * See {@link #BidsWithUtility(LinearAdditiveUtilitySpace, int)} for more 30 * details 29 * See {@link #BidsWithUtility(LinearAdditive, int)} for more details 31 30 */ 32 31 public class BidsWithUtility { … … 44 43 * Default constructor, uses default precision 6. This value seems practical 45 44 * for the common range of issues, utilities and weights. See 46 * {@link #BidsWithUtil(LinearAdditive UtilitySpace, int)} for more details47 * on theprecision.48 * 49 * @param space the {@link LinearAdditive UtilitySpace} to analyze50 */ 51 public BidsWithUtility(LinearAdditive UtilitySpacespace) {45 * {@link #BidsWithUtil(LinearAdditive, int)} for more details on the 46 * precision. 47 * 48 * @param space the {@link LinearAdditive} to analyze 49 */ 50 public BidsWithUtility(LinearAdditive space) { 52 51 this(space, 6); 53 52 } … … 55 54 /** 56 55 * 57 * @param space the {@link LinearAdditive UtilitySpace} to analyze56 * @param space the {@link LinearAdditive} to analyze 58 57 * @param precision the number of digits to use for computations. In 59 58 * practice, 6 seems a good default value. … … 77 76 * 78 77 */ 79 public BidsWithUtility(LinearAdditive UtilitySpacespace, int precision) {78 public BidsWithUtility(LinearAdditive space, int precision) { 80 79 this(getInfo(space, precision), precision); 81 80 } … … 119 118 public List<IssueInfo> getInfo() { 120 119 return Collections.unmodifiableList(issueInfo); 120 } 121 122 /** 123 * 124 * @param isMax the extreme bid required 125 * @return the extreme bid, either the minimum if isMax=false or maximum if 126 * isMax=true 127 */ 128 public Bid getExtremeBid(boolean isMax) { 129 Map<String, Value> map = new HashMap<>(); 130 for (IssueInfo info : issueInfo) { 131 map.put(info.getName(), info.getExtreme(isMax)); 132 } 133 return new Bid(map); 121 134 } 122 135 … … 154 167 } 155 168 156 private static List<IssueInfo> getInfo(LinearAdditive UtilitySpacespace2,169 private static List<IssueInfo> getInfo(LinearAdditive space2, 157 170 int precision) { 158 171 Domain dom = space2.getDomain(); -
bidspace/src/main/java/geniusweb/bidspace/Interval.java
r4 r10 137 137 if (other.max != null) 138 138 return false; 139 } else if (!max.equals(other.max)) 139 140 } else if (max.compareTo(other.max) != 0) 141 // THIS WAS FIXED MANUALLY TO USE COMPARETO 140 142 return false; 141 143 if (min == null) { 142 144 if (other.min != null) 143 145 return false; 144 } else if (!min.equals(other.min)) 146 } else if (min.compareTo(other.min) != 0) 147 // THIS WAS FIXED MANUALLY TO USE COMPARETO 145 148 return false; 146 149 return true; -
bidspace/src/main/java/geniusweb/bidspace/IssueInfo.java
r4 r10 49 49 public Interval getInterval() { 50 50 return interval; 51 } 52 53 /** 54 * 55 * @param isMax 56 * @return the extreme value, either the minimum if isMax=false or maximum 57 * if isMax=true 58 */ 59 public Value getExtreme(boolean isMax) { 60 BigDecimal extremeutil = null; 61 Value extremeval = null; 62 for (Value val : values) { 63 BigDecimal util = weightedUtils.get(val); 64 if (extremeval == null) { 65 extremeutil = weightedUtils.get(val); 66 extremeval = val; 67 } else { 68 if (isMax) { 69 if (util.compareTo(extremeutil) > 0) { 70 extremeutil = util; 71 extremeval = val; 72 } 73 } else { 74 if (util.compareTo(extremeutil) < 0) { 75 extremeutil = util; 76 extremeval = val; 77 } 78 79 } 80 } 81 } 82 return extremeval; 51 83 } 52 84 -
bidspace/src/main/java/geniusweb/bidspace/pareto/ParetoLinearAdditive.java
r1 r10 10 10 import geniusweb.issuevalue.Domain; 11 11 import geniusweb.profile.Profile; 12 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;12 import geniusweb.profile.utilityspace.LinearAdditive; 13 13 14 14 /** 15 * pareto frontier implementation for {@link LinearAdditive UtilitySpace}.16 * Simplisticimplementation that iterates over all bids.15 * pareto frontier implementation for {@link LinearAdditive}. Simplistic 16 * implementation that iterates over all bids. 17 17 */ 18 18 public class ParetoLinearAdditive implements ParetoFrontier { 19 19 20 private final List<LinearAdditive UtilitySpace> utilSpaces;20 private final List<LinearAdditive> utilSpaces; 21 21 private Set<Bid> points = null; 22 22 // all issues in a deterministic order … … 24 24 /** 25 25 * 26 * @param utilSpaces. Must contain at least two 27 * {@link LinearAdditiveUtilitySpace}s and all must be 28 * defined on the same donain. 26 * @param utilSpaces. Must contain at least two {@link LinearAdditive}s and 27 * all must be defined on the same donain. 29 28 */ 30 public ParetoLinearAdditive(List<LinearAdditive UtilitySpace> utilSpaces) {29 public ParetoLinearAdditive(List<LinearAdditive> utilSpaces) { 31 30 if (utilSpaces == null || utilSpaces.size() < 2) { 32 31 throw new IllegalArgumentException( … … 34 33 } 35 34 Domain domain = utilSpaces.get(0).getDomain(); 36 for (LinearAdditive UtilitySpacespace : utilSpaces) {35 for (LinearAdditive space : utilSpaces) { 37 36 if (!space.getDomain().equals(domain)) { 38 37 throw new IllegalArgumentException( -
bidspace/src/main/java/geniusweb/bidspace/pareto/ParetoPoint.java
r1 r10 10 10 import geniusweb.issuevalue.Bid; 11 11 import geniusweb.issuevalue.Value; 12 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;12 import geniusweb.profile.utilityspace.LinearAdditive; 13 13 14 14 /** … … 26 26 * 27 27 * @param bid a (possibly partial) {@link Bid} 28 * @param spaces the {@link LinearAdditive UtilitySpace}s to consider28 * @param spaces the {@link LinearAdditive}s to consider 29 29 */ 30 public ParetoPoint(Bid bid, List<LinearAdditive UtilitySpace> spaces) {30 public ParetoPoint(Bid bid, List<LinearAdditive> spaces) { 31 31 this.bid = bid; 32 32 utilities = new ArrayList<>(); 33 for (LinearAdditive UtilitySpacespace : spaces) {33 for (LinearAdditive space : spaces) { 34 34 utilities.add(space.getUtility(bid)); 35 35 } -
bidspace/src/main/java/geniusweb/bidspace/pareto/PartialPareto.java
r1 r10 8 8 import geniusweb.issuevalue.Bid; 9 9 import geniusweb.issuevalue.Value; 10 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;10 import geniusweb.profile.utilityspace.LinearAdditive; 11 11 12 12 /** … … 28 28 * implemented recursively (O(log(#issues))). 29 29 * 30 * @param utilSpaces the {@link LinearAdditive UtilitySpace}s30 * @param utilSpaces the {@link LinearAdditive}s 31 31 * @param issues the issues (subset of all issues in the space) to be 32 32 * used for this pareto … … 34 34 * given issues. 35 35 */ 36 public static PartialPareto create( 37 List< LinearAdditiveUtilitySpace> utilSpaces, List<String> issues) {36 public static PartialPareto create(List<LinearAdditive> utilSpaces, 37 List<String> issues) { 38 38 39 39 if (issues.size() == 1) { -
bidspace/src/test/java/geniusweb/bidspace/pareto/ParetoE2Etest.java
r1 r10 19 19 import com.fasterxml.jackson.databind.ObjectMapper; 20 20 21 import geniusweb.bidspace.pareto.GenericPareto;22 import geniusweb.bidspace.pareto.ParetoFrontier;23 import geniusweb.bidspace.pareto.ParetoLinearAdditive;24 21 import geniusweb.profile.Profile; 22 import geniusweb.profile.utilityspace.LinearAdditive; 25 23 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace; 26 24 … … 61 59 .readValue(file2, Profile.class); 62 60 63 List<LinearAdditive UtilitySpace> profiles = new LinkedList<>();61 List<LinearAdditive> profiles = new LinkedList<>(); 64 62 profiles.add(profile1); 65 63 profiles.add(profile2); -
bidspace/src/test/java/geniusweb/bidspace/pareto/ParetoPointTest.java
r1 r10 15 15 import org.junit.Test; 16 16 17 import geniusweb.bidspace.pareto.ParetoPoint;18 17 import geniusweb.issuevalue.Bid; 19 18 import geniusweb.issuevalue.Value; 20 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;19 import geniusweb.profile.utilityspace.LinearAdditive; 21 20 22 21 public class ParetoPointTest { … … 26 25 private static final BigDecimal D0_4 = BigDecimal.valueOf(0.4); 27 26 private static final BigDecimal D0_5 = BigDecimal.valueOf(0.5); 28 private final LinearAdditiveUtilitySpace space1 = mock( 29 LinearAdditiveUtilitySpace.class), 30 space2 = mock(LinearAdditiveUtilitySpace.class); 27 private final LinearAdditive space1 = mock(LinearAdditive.class), 28 space2 = mock(LinearAdditive.class); 31 29 private final Bid bid11 = mock(Bid.class), bid12 = mock(Bid.class), 32 30 bid21 = mock(Bid.class), bid22 = mock(Bid.class); -
bidspace/src/test/java/geniusweb/bidspace/pareto/PartialParetoTest.java
r1 r10 16 16 import org.junit.Test; 17 17 18 import geniusweb.bidspace.pareto.PartialPareto;19 18 import geniusweb.issuevalue.Bid; 20 19 import geniusweb.issuevalue.Domain; 21 20 import geniusweb.issuevalue.Value; 22 21 import geniusweb.issuevalue.ValueSet; 23 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;22 import geniusweb.profile.utilityspace.LinearAdditive; 24 23 25 24 public class PartialParetoTest { … … 31 30 private static final BigDecimal D0_5 = BigDecimal.valueOf(0.5); 32 31 33 private final LinearAdditiveUtilitySpace space1 = mock( 34 LinearAdditiveUtilitySpace.class), 35 space2 = mock(LinearAdditiveUtilitySpace.class); 32 private final LinearAdditive space1 = mock(LinearAdditive.class), 33 space2 = mock(LinearAdditive.class); 36 34 37 35 private Domain domain = mock(Domain.class); -
events/src/main/java/geniusweb/actions/Action.java
r1 r10 12 12 */ 13 13 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.WRAPPER_OBJECT) 14 @JsonSubTypes({ @JsonSubTypes.Type(value = EndNegotiation.class), @JsonSubTypes.Type(value = Offer.class), 15 @JsonSubTypes.Type(value = Accept.class) }) 14 @JsonSubTypes({ @JsonSubTypes.Type(value = EndNegotiation.class), 15 @JsonSubTypes.Type(value = Offer.class), 16 @JsonSubTypes.Type(value = Accept.class), 17 @JsonSubTypes.Type(value = Comparison.class), 18 @JsonSubTypes.Type(value = ElicitComparison.class) }) 16 19 public interface Action { 17 20 /** -
events/src/main/java/geniusweb/actions/ActionWithBid.java
r1 r10 7 7 8 8 /** 9 * An {@link Action} containing a bid. 9 * An {@link Action} containing a bid. Note that the presense of a bid does not 10 * necessarily mean that an offer was placed for this bid. 10 11 * 11 12 */ -
exampleparties/humangui/src/main/java/geniusweb/exampleparties/humangui/HumanGui.java
r9 r10 2 2 3 3 import java.awt.BorderLayout; 4 import java.net.URI;5 import java.net.URISyntaxException;6 4 import java.util.Arrays; 7 5 import java.util.HashSet; … … 23 21 import geniusweb.profileconnection.ProfileConnectionFactory; 24 22 import geniusweb.profileconnection.ProfileInterface; 25 import geniusweb.references.ProtocolRef;26 23 import tudelft.utilities.logging.Reporter; 27 24 … … 85 82 @Override 86 83 public Capabilities getCapabilities() { 87 try { 88 return new Capabilities(new HashSet<>( 89 Arrays.asList(new ProtocolRef(new URI("SAOP"))))); 90 } catch (URISyntaxException e) { 91 getReporter().log(Level.SEVERE, "Failed to create capabilities URI", 92 e); 93 return null; 94 } 84 return new Capabilities(new HashSet<>(Arrays.asList("SAOP"))); 95 85 } 96 86 -
exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/BiddingInfoTest.java
r9 r10 32 32 import geniusweb.party.inform.Settings; 33 33 import geniusweb.profile.Profile; 34 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;34 import geniusweb.profile.utilityspace.LinearAdditive; 35 35 import geniusweb.profileconnection.ProfileConnectionFactory; 36 36 import geniusweb.profileconnection.ProfileInterface; … … 61 61 private final ProgressRounds progress = mock(ProgressRounds.class); 62 62 private Settings settings; 63 private LinearAdditive UtilitySpaceprofile, profile2;63 private LinearAdditive profile, profile2; 64 64 private final Parameters parameters = new Parameters(); 65 65 private Reporter reporter = mock(Reporter.class); … … 76 76 String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)), 77 77 StandardCharsets.UTF_8); 78 profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized, 79 Profile.class); 78 profile = (LinearAdditive) jackson.readValue(serialized, Profile.class); 80 79 String serialized2 = new String(Files.readAllBytes(Paths.get(PROFILE2)), 81 80 StandardCharsets.UTF_8); 82 profile2 = (LinearAdditive UtilitySpace) jackson.readValue(serialized2,81 profile2 = (LinearAdditive) jackson.readValue(serialized2, 83 82 Profile.class); 84 83 -
exampleparties/humangui/src/test/java/geniusweb/exampleparties/humangui/HumanGuiTest.java
r9 r10 34 34 import geniusweb.party.inform.YourTurn; 35 35 import geniusweb.profile.Profile; 36 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;36 import geniusweb.profile.utilityspace.LinearAdditive; 37 37 import geniusweb.progress.ProgressRounds; 38 38 import geniusweb.references.Parameters; … … 57 57 private final ProgressRounds progress = mock(ProgressRounds.class); 58 58 private Settings settings; 59 private LinearAdditive UtilitySpaceprofile;59 private LinearAdditive profile; 60 60 private final Parameters parameters = new Parameters(); 61 61 … … 70 70 String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)), 71 71 StandardCharsets.UTF_8); 72 profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized, 73 Profile.class); 72 profile = (LinearAdditive) jackson.readValue(serialized, Profile.class); 74 73 75 74 } … … 93 92 Capabilities capabilities = party.getCapabilities(); 94 93 assertFalse("party does not define protocols", 95 capabilities.get Protocols().isEmpty());94 capabilities.getBehaviours().isEmpty()); 96 95 } 97 96 98 97 @Test 99 98 public void testGetCapabilities() { 100 assertTrue(party.getCapabilities().get Protocols().contains(SAOP));99 assertTrue(party.getCapabilities().getBehaviours().contains(SAOP)); 101 100 } 102 101 -
exampleparties/pom.xml
r2 r10 23 23 <module>boulware</module> 24 24 <module>linear</module> 25 <module>simpleshaop</module> 26 <module>comparebids</module> 25 27 </modules> 26 28 </project> -
exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java
r9 r10 3 3 import java.io.IOException; 4 4 import java.math.BigInteger; 5 import java.net.URI;6 import java.net.URISyntaxException;7 5 import java.util.Arrays; 8 6 import java.util.HashSet; … … 30 28 import geniusweb.progress.Progress; 31 29 import geniusweb.progress.ProgressRounds; 32 import geniusweb.references.ProtocolRef;33 30 import tudelft.utilities.logging.Reporter; 34 31 … … 81 78 @Override 82 79 public Capabilities getCapabilities() { 83 try { 84 return new Capabilities(new HashSet<>( 85 Arrays.asList(new ProtocolRef(new URI("SAOP"))))); 86 } catch (URISyntaxException e) { 87 getReporter().log(Level.SEVERE, "Failed to create capabilities URI", 88 e); 89 return null; 90 } 80 return new Capabilities(new HashSet<>(Arrays.asList("SAOP"))); 91 81 } 92 82 … … 115 105 } 116 106 117 private boolean isGood(Bid bid) {107 private boolean isGood(Bid bid) throws IOException { 118 108 if (bid == null) 119 109 return false; -
exampleparties/randomparty/src/test/java/geniusweb/exampleparties/randomparty/RandomPartyTest.java
r9 r10 42 42 import geniusweb.party.inform.YourTurn; 43 43 import geniusweb.profile.Profile; 44 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;44 import geniusweb.profile.utilityspace.LinearAdditive; 45 45 import geniusweb.progress.ProgressRounds; 46 46 import geniusweb.references.Parameters; … … 53 53 public class RandomPartyTest { 54 54 55 private static final ProtocolRef SAOP = new ProtocolRef("SAOP");55 private static final String SAOP = "SAOP"; 56 56 private static final PartyId otherparty = new PartyId("other"); 57 57 private static final String PROFILE = "src/test/resources/testprofile.json"; … … 63 63 private final ProgressRounds progress = mock(ProgressRounds.class); 64 64 private Settings settings; 65 private LinearAdditive UtilitySpaceprofile;65 private LinearAdditive profile; 66 66 private final Parameters parameters = new Parameters(); 67 67 … … 76 76 String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)), 77 77 StandardCharsets.UTF_8); 78 profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized, 79 Profile.class); 78 profile = (LinearAdditive) jackson.readValue(serialized, Profile.class); 80 79 81 80 } … … 94 93 Capabilities capabilities = party.getCapabilities(); 95 94 assertFalse("party does not define protocols", 96 capabilities.get Protocols().isEmpty());95 capabilities.getBehaviours().isEmpty()); 97 96 } 98 97 … … 176 175 @Test 177 176 public void testGetCapabilities() { 178 assertTrue(party.getCapabilities().get Protocols().contains(SAOP));177 assertTrue(party.getCapabilities().getBehaviours().contains(SAOP)); 179 178 } 180 179 -
exampleparties/randompartypy/src/main/resources/RandomParty.py
r9 r10 65 65 # Override 66 66 def getCapabilities(self): # -> Capabilities 67 try: 68 return Capabilities(HashSet([ ProtocolRef(URI("SAOP"))])) 69 except: 70 getReporter().log(Level.SEVERE, "Failed to create capabilities URI",e); 71 return None 67 return Capabilities(HashSet([ "SAOP"])) 72 68 73 69 # Override -
exampleparties/randompartypy/src/test/java/geniusweb/exampleparties/randompartypy/RandomPartyTest.java
r9 r10 39 39 import geniusweb.party.inform.YourTurn; 40 40 import geniusweb.profile.Profile; 41 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;41 import geniusweb.profile.utilityspace.LinearAdditive; 42 42 import geniusweb.progress.ProgressRounds; 43 43 import geniusweb.pythonadapter.PythonPartyAdapter; … … 51 51 52 52 private static final String PROFILE = "src/test/resources/testprofile.json"; 53 private static final ProtocolRef SAOP = new ProtocolRef("SAOP");53 private static final String SAOP = "SAOP"; 54 54 private static final PartyId otherparty = new PartyId("other"); 55 55 private final static ObjectMapper jackson = new ObjectMapper(); … … 62 62 private final Parameters parameters = new Parameters(); 63 63 64 private LinearAdditive UtilitySpaceprofile; // the real profile64 private LinearAdditive profile; // the real profile 65 65 66 66 @Before … … 80 80 String serialized = new String(Files.readAllBytes(Paths.get(PROFILE)), 81 81 StandardCharsets.UTF_8); 82 profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized, 83 Profile.class); 82 profile = (LinearAdditive) jackson.readValue(serialized, Profile.class); 84 83 85 84 } … … 98 97 Capabilities capabilities = party.getCapabilities(); 99 98 assertFalse("party does not define protocols", 100 capabilities.get Protocols().isEmpty());99 capabilities.getBehaviours().isEmpty()); 101 100 } 102 101 … … 167 166 @Test 168 167 public void testGetCapabilities() { 169 assertTrue(party.getCapabilities().get Protocols().contains(SAOP));168 assertTrue(party.getCapabilities().getBehaviours().contains(SAOP)); 170 169 } 171 170 -
exampleparties/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/ExtendedUtilSpace.java
r4 r10 11 11 import geniusweb.issuevalue.Bid; 12 12 import geniusweb.issuevalue.Value; 13 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;13 import geniusweb.profile.utilityspace.LinearAdditive; 14 14 import tudelft.utilities.immutablelist.ImmutableList; 15 15 … … 20 20 */ 21 21 public class ExtendedUtilSpace { 22 private LinearAdditive UtilitySpaceutilspace;22 private LinearAdditive utilspace; 23 23 private BigDecimal tolerance; // utility tolerance for a bid. 24 24 private BidsWithUtility bidutils; … … 27 27 private BigDecimal maxUtil; 28 28 29 public ExtendedUtilSpace(LinearAdditive UtilitySpacespace) {29 public ExtendedUtilSpace(LinearAdditive space) { 30 30 this.utilspace = space; 31 31 bidutils = new BidsWithUtility(utilspace); -
exampleparties/timedependentparty/src/main/java/geniusweb/exampleparties/timedependentparty/TimeDependentParty.java
r8 r10 4 4 import java.math.BigDecimal; 5 5 import java.math.BigInteger; 6 import java.net.URI;7 import java.net.URISyntaxException;8 6 import java.util.Arrays; 9 7 import java.util.HashSet; … … 24 22 import geniusweb.party.inform.YourTurn; 25 23 import geniusweb.profile.Profile; 26 import geniusweb.profile.utilityspace.LinearAdditive UtilitySpace;24 import geniusweb.profile.utilityspace.LinearAdditive; 27 25 import geniusweb.profileconnection.ProfileConnectionFactory; 28 26 import geniusweb.profileconnection.ProfileInterface; 29 27 import geniusweb.progress.Progress; 30 28 import geniusweb.progress.ProgressRounds; 31 import geniusweb.references.ProtocolRef;32 29 import tudelft.utilities.immutablelist.ImmutableList; 33 30 import tudelft.utilities.logging.Reporter; … … 44 41 private static final BigDecimal DEC100 = new BigDecimal("100"); 45 42 private ProfileInterface profileint; 46 private LinearAdditive UtilitySpaceutilspace = null; // last received space43 private LinearAdditive utilspace = null; // last received space 47 44 private PartyId me; 48 45 private Progress progress; … … 61 58 @Override 62 59 public Capabilities getCapabilities() { 63 try { 64 return new Capabilities(new HashSet<>( 65 Arrays.asList(new ProtocolRef(new URI("SAOP"))))); 66 } catch (URISyntaxException e) { 67 getReporter().log(Level.SEVERE, "Failed to create capabilities URI", 68 e); 69 return null; 70 } 60 return new Capabilities(new HashSet<>(Arrays.asList("SAOP"))); 71 61 } 72 62 … … 148 138 } 149 139 150 private LinearAdditive UtilitySpace updateUtilSpace(){140 private LinearAdditive updateUtilSpace() throws IOException { 151 141 Profile newutilspace = profileint.getProfile(); 152 142 if (!newutilspace.equals(utilspace)) { 153 utilspace = (LinearAdditive UtilitySpace) newutilspace;143 utilspace = (LinearAdditive) newutilspace; 154 144 extendedspace = new ExtendedUtilSpace(utilspace); 155 145 } -
exampleparties/timedependentparty/src/test/java/geniusweb/exampleparties/timedependentparty/TimeDependentPartyTest.java
r9 r10 53 53 public class TimeDependentPartyTest { 54 54 55 private static final ProtocolRef SAOP = new ProtocolRef("SAOP");55 private static final String SAOP = "SAOP"; 56 56 private static final PartyId otherparty = new PartyId("other"); 57 57 private static final String PROFILE = "src/test/resources/testprofile.json"; … … 105 105 Capabilities capabilities = party.getCapabilities(); 106 106 assertFalse("party does not define protocols", 107 capabilities.get Protocols().isEmpty());107 capabilities.getBehaviours().isEmpty()); 108 108 } 109 109 … … 198 198 @Test 199 199 public void testGetCapabilities() { 200 assertTrue(party.getCapabilities().get Protocols().contains(SAOP));200 assertTrue(party.getCapabilities().getBehaviours().contains(SAOP)); 201 201 } 202 202 -
party/src/main/java/geniusweb/party/Capabilities.java
r1 r10 5 5 import com.fasterxml.jackson.annotation.JsonAutoDetect; 6 6 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; 7 8 import geniusweb.references.ProtocolRef;9 10 7 import com.fasterxml.jackson.annotation.JsonCreator; 11 8 import com.fasterxml.jackson.annotation.JsonProperty; … … 19 16 * List of supported protocols 20 17 */ 21 private final Set< ProtocolRef> protocols;18 private final Set<String> behaviours; 22 19 23 20 /** … … 26 23 */ 27 24 @JsonCreator 28 public Capabilities(@JsonProperty(" protocols") Set<ProtocolRef> protocols) {29 if ( protocols == null) {30 throw new IllegalArgumentException(" protocols==null");25 public Capabilities(@JsonProperty("behaviours") Set<String> behaviours) { 26 if (behaviours == null) { 27 throw new IllegalArgumentException("behaviours==null"); 31 28 } 32 this. protocols = protocols;29 this.behaviours = behaviours; 33 30 } 34 31 35 public Set< ProtocolRef> getProtocols() {36 return protocols;32 public Set<String> getBehaviours() { 33 return behaviours; 37 34 } 38 35 … … 42 39 int result = 1; 43 40 result = prime * result 44 + (( protocols == null) ? 0 : protocols.hashCode());41 + ((behaviours == null) ? 0 : behaviours.hashCode()); 45 42 return result; 46 43 } … … 55 52 return false; 56 53 Capabilities other = (Capabilities) obj; 57 if ( protocols == null) {58 if (other. protocols != null)54 if (behaviours == null) { 55 if (other.behaviours != null) 59 56 return false; 60 } else if (! protocols.equals(other.protocols))57 } else if (!behaviours.equals(other.behaviours)) 61 58 return false; 62 59 return true; … … 65 62 @Override 66 63 public String toString() { 67 return "Capabilities[" + " Protocols=" + protocols + "]";64 return "Capabilities[" + "Behaviours=" + behaviours + "]"; 68 65 } 69 66 -
party/src/main/java/geniusweb/party/inform/Inform.java
r1 r10 3 3 import com.fasterxml.jackson.annotation.JsonAutoDetect; 4 4 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; 5 import com.fasterxml.jackson.annotation.JsonSubTypes; 6 import com.fasterxml.jackson.annotation.JsonTypeInfo; 5 7 6 8 import geniusweb.party.Party; 7 8 import com.fasterxml.jackson.annotation.JsonSubTypes;9 import com.fasterxml.jackson.annotation.JsonTypeInfo;10 9 11 10 /** -
party/src/test/java/geniusweb/party/CapabilitiesTest.java
r1 r10 4 4 5 5 import java.io.IOException; 6 import java.net.URI;7 6 import java.net.URISyntaxException; 8 7 import java.util.Arrays; … … 18 17 import com.fasterxml.jackson.databind.ObjectMapper; 19 18 20 import geniusweb.party.Capabilities;21 import geniusweb.references.ProtocolRef;22 19 import tudelft.utilities.junit.GeneralTests; 23 20 … … 26 23 private Capabilities capabilities1, capabilities1a, capabilities2, 27 24 capabilities3; 28 private String asJson = "{\" protocols\":[\"ws:localhost/protocol1\"]}";25 private String asJson = "{\"behaviours\":[\"SAOP\"]}"; 29 26 30 27 @Before 31 28 public void before() throws URISyntaxException { 32 capabilities1 = new Capabilities(Sets 33 .newSet(new ProtocolRef(new URI("ws:localhost/protocol1")))); 34 capabilities1a = new Capabilities(Sets 35 .newSet(new ProtocolRef(new URI("ws:localhost/protocol1")))); 36 capabilities2 = new Capabilities(Sets 37 .newSet(new ProtocolRef(new URI("ws:localhost/protocol2")))); 38 capabilities3 = new Capabilities(Sets 39 .newSet(new ProtocolRef(new URI("ws:localhost/protocol3")))); 29 capabilities1 = new Capabilities(Sets.newSet("SAOP")); 30 capabilities1a = new Capabilities(Sets.newSet("SAOP")); 31 capabilities2 = new Capabilities(Sets.newSet("SEB")); 32 capabilities3 = new Capabilities(Sets.newSet("SEB", "SAOP")); 40 33 } 41 34 … … 48 41 @Override 49 42 public List<String> getGeneralTestStrings() { 50 return Arrays.asList( 51 "Capabilities.*Protocols=.*ProtocolRef.*protocol1.*", 52 "Capabilities.*Protocols=.*ProtocolRef.*protocol2.*", 53 "Capabilities.*Protocols=.*ProtocolRef.*protocol3.*"); 43 return Arrays.asList("Capabilities.*Behaviours=.*SAOP.*", 44 "Capabilities.*Behaviours=.*SEB.*", 45 "Capabilities.*Behaviours=.*SEB.*SAOP.*"); 54 46 } 55 47 -
profile/src/main/java/geniusweb/profile/DefaultPartialOrdering.java
r2 r10 26 26 * limited anyway. 27 27 */ 28 public class DefaultPartialOrdering extends DefaultProfile implements PartialOrdering { 28 public class DefaultPartialOrdering extends DefaultProfile 29 implements PartialOrdering { 29 30 30 31 /** … … 40 41 * @param reservationbid 41 42 * @param bids 42 * @param isbetterList a list of tuples [bid1index, bid2index]. It indicates 43 * that bids[bid1index] isbetterthan bids[bid2index]. 43 * @param isbetterList a list of tuples [bid1index, bid2index]. It 44 * indicates that bids[bid1index] isbetterthan 45 * bids[bid2index]. 44 46 */ 45 47 @JsonCreator 46 public DefaultPartialOrdering(@JsonProperty("name") String name, @JsonProperty("domain") Domain domain, 47 @JsonProperty("reservationBid") Bid reservationbid, @JsonProperty("bids") List<Bid> bids, 48 public DefaultPartialOrdering(@JsonProperty("name") String name, 49 @JsonProperty("domain") Domain domain, 50 @JsonProperty("reservationBid") Bid reservationbid, 51 @JsonProperty("bids") List<Bid> bids, 48 52 @JsonProperty("better") List<List<Integer>> isbetterList) { 49 53 this(name, domain, reservationbid, makeBidMap(bids, isbetterList)); … … 54 58 * @param domain the {@link Domain} description 55 59 * @param reservationbid the reservation {@link Bid} 56 * @param isBetterMap a map with keys = a better bid and value=a less good57 * bid.60 * @param isBetterMap a map with keys = a better bid and value=a less 61 * good bid. 58 62 */ 59 public DefaultPartialOrdering(String name, Domain domain, Bid reservationbid, Map<Bid, Set<Bid>> isBetterMap) { 63 public DefaultPartialOrdering(String name, Domain domain, 64 Bid reservationbid, Map<Bid, Set<Bid>> isBetterMap) { 60 65 super(name, domain, reservationbid); 61 66 this.isBetter = isBetterMap; … … 71 76 /** 72 77 * 73 * @return a list with all the bids 78 * @return a list with all the bids that are referred to, either as better 79 * or as worse than another bid 74 80 */ 75 81 @JsonGetter … … 97 103 if (isBetter.containsKey(bid)) { 98 104 for (Bid worsebid : isBetter.get(bid)) { 99 betterlist.add(Arrays.asList(bidslist.indexOf(bid), bidslist.indexOf(worsebid))); 105 betterlist.add(Arrays.asList(bidslist.indexOf(bid), 106 bidslist.indexOf(worsebid))); 100 107 } 101 108 } … … 107 114 @Override 108 115 public String toString() { 109 return "DefaultPartialOrdering[" + getValuesString() + "," + isBetter + "]"; 116 return "DefaultPartialOrdering[" + getValuesString() + "," + isBetter 117 + "]"; 110 118 } 111 119 112 private static Map<Bid, Set<Bid>> makeBidMap(List<Bid> bids, List<List<Integer>> isBetterList) { 120 private static Map<Bid, Set<Bid>> makeBidMap(List<Bid> bids, 121 List<List<Integer>> isBetterList) { 113 122 Map<Bid, Set<Bid>> betterMap = new HashMap<>(); 114 123 115 124 for (List<Integer> tuple : isBetterList) { 116 125 if (tuple.size() != 2) { 117 throw new IllegalArgumentException("Expected tuple but found " + tuple + "in " + isBetterList); 126 throw new IllegalArgumentException("Expected tuple but found " 127 + tuple + "in " + isBetterList); 118 128 } 119 129 Bid betterbid = bids.get(tuple.get(0)); … … 133 143 final int prime = 31; 134 144 int result = super.hashCode(); 135 result = prime * result + ((isBetter == null) ? 0 : isBetter.hashCode()); 145 result = prime * result 146 + ((isBetter == null) ? 0 : isBetter.hashCode()); 136 147 return result; 137 148 } -
profile/src/main/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilities.java
r9 r10 2 2 3 3 import java.math.BigDecimal; 4 import java.util.Collections; 4 5 import java.util.HashMap; 5 6 import java.util.HashSet; … … 68 69 } 69 70 71 /** 72 * @return copy of the value-utility pair map. 73 */ 74 public Map<DiscreteValue, BigDecimal> getUtilities() { 75 return Collections.unmodifiableMap(valueUtilities); 76 } 77 70 78 @Override 71 79 public String isFitting(ValueSet valueset) { -
profile/src/main/java/geniusweb/profile/utilityspace/LinearAdditiveUtilitySpace.java
r7 r10 25 25 */ 26 26 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE) 27 public class LinearAdditiveUtilitySpace implements UtilitySpace {27 public class LinearAdditiveUtilitySpace implements LinearAdditive { 28 28 29 29 private final String name; … … 131 131 } 132 132 133 /** 134 * 135 * @param issue the issue to get weighted util for 136 * @param value the issue value to use (typically coming from a bid) 137 * @return weighted util of just the issue value: 138 * issueUtilities[issue].utility(value) * issueWeights[issue) 139 */ 140 private BigDecimal util(String issue, Value value) { 141 return issueWeights.get(issue) 142 .multiply(issueUtilities.get(issue).getUtility(value)); 143 } 144 133 @Override 145 134 public BigDecimal getWeight(String issue) { 146 135 return issueWeights.get(issue); … … 220 209 } 221 210 222 /** 223 * @return the map from issue names to valuesetutilities (un-weighted) 224 */ 211 @Override 225 212 public Map<String, ValueSetUtilities> getUtilities() { 226 213 return Collections.unmodifiableMap(issueUtilities); 227 214 } 228 215 229 /** 230 * 231 * @return the map from issue names to weights. weights sum to 1. 232 */ 216 @Override 233 217 public Map<String, BigDecimal> getWeights() { 234 218 return Collections.unmodifiableMap(issueWeights); 235 219 } 236 220 221 /** 222 * 223 * @param issue the issue to get weighted util for 224 * @param value the issue value to use (typically coming from a bid) 225 * @return weighted util of just the issue value: 226 * issueUtilities[issue].utility(value) * issueWeights[issue) 227 */ 228 private BigDecimal util(String issue, Value value) { 229 return issueWeights.get(issue) 230 .multiply(issueUtilities.get(issue).getUtility(value)); 231 } 232 237 233 } -
profile/src/main/java/geniusweb/profile/utilityspace/SumOfGroupsUtilitySpace.java
r9 r10 84 84 * grouping. 85 85 * 86 * @param las the {@link LinearAdditive UtilitySpace} to be converted/copied.87 * 88 */ 89 public SumOfGroupsUtilitySpace(LinearAdditive UtilitySpacelas) {86 * @param las the {@link LinearAdditive} to be converted/copied. 87 * 88 */ 89 public SumOfGroupsUtilitySpace(LinearAdditive las) { 90 90 this(las.getDomain(), las.getName(), las2parts(las), 91 91 las.getReservationBid()); … … 212 212 /** 213 213 * 214 * @param las a {@link LinearAdditive UtilitySpace}214 * @param las a {@link LinearAdditive} 215 215 * @return a Map with partname-PartsUtilities. The partnames are identical 216 216 * to the issues in the given las. 217 217 */ 218 218 private static HashMap<String, PartsUtilities> las2parts( 219 LinearAdditive UtilitySpacelas) {219 LinearAdditive las) { 220 220 221 221 HashMap<String, PartsUtilities> map = new HashMap<>(); -
profile/src/test/java/geniusweb/profile/utilityspace/NumberValueSetUtilTest.java
r9 r10 3 3 import static org.junit.Assert.assertEquals; 4 4 5 import java.io.IOException; 5 6 import java.math.BigDecimal; 6 7 import java.util.Arrays; … … 8 9 9 10 import org.junit.Test; 11 12 import com.fasterxml.jackson.core.JsonParseException; 13 import com.fasterxml.jackson.core.JsonProcessingException; 14 import com.fasterxml.jackson.databind.JsonMappingException; 15 import com.fasterxml.jackson.databind.ObjectMapper; 10 16 11 17 import geniusweb.issuevalue.DiscreteValue; … … 35 41 lowval1, low1util, highvalb, highutil); 36 42 private static final BigDecimal ZERO_1 = new BigDecimal("0.1"); 43 private final String utilstring = "{\"numberutils\":{\"lowValue\":12.5,\"lowUtility\":0.5,\"highValue\":18.5,\"highUtility\":0.9}}"; 44 45 private static final ObjectMapper jackson = new ObjectMapper(); 37 46 38 47 @Override … … 173 182 } 174 183 184 @Test 185 public void testSerialize() throws JsonProcessingException { 186 187 String json = jackson.writeValueAsString(valueset1); 188 System.out.println(json); 189 assertEquals(utilstring, json); 190 } 191 192 @Test 193 public void testDeserialize() 194 throws JsonParseException, JsonMappingException, IOException { 195 ValueSetUtilities valueutils = jackson.readValue(utilstring, 196 ValueSetUtilities.class); 197 assertEquals(valueset1, valueutils); 198 199 } 200 175 201 } -
profileconnection/src/main/java/geniusweb/profileconnection/ProfileInterface.java
r9 r10 1 1 package geniusweb.profileconnection; 2 3 import java.io.IOException; 2 4 3 5 import geniusweb.profile.Profile; … … 12 14 * @return the latest version of the profile. May change at any time, after 13 15 * someone updates the version on the server. Call to this may block 14 * for limited time if the profile is not yet available. May return 15 * null if the profile is not available. 16 */ 17 public Profile getProfile(); 16 * for limited time if the profile is not yet available. 17 * @throws IOException if profile can not be fetched */ 18 public Profile getProfile() throws IOException; 18 19 } -
profileconnection/src/main/java/geniusweb/profileconnection/WebsocketProfileConnector.java
r9 r10 69 69 70 70 @Override 71 public Profile getProfile() {71 public Profile getProfile() throws IOException { 72 72 int remaining_wait = TIMEOUT_MS; 73 73 try { … … 80 80 e); 81 81 } 82 if (profile == null) { 83 throw new IOException("Failed to fetch profile"); 84 } 82 85 return profile; 83 86 } -
profileconnection/src/test/java/geniusweb/profileconnection/WebsocketProfileConnectorTest.java
r1 r10 3 3 import static org.junit.Assert.assertEquals; 4 4 import static org.junit.Assert.assertNotNull; 5 import static org.junit.Assert.assertNull;6 5 import static org.mockito.Matchers.any; 7 6 import static org.mockito.Mockito.mock; … … 22 21 23 22 import geniusweb.profile.Profile; 24 import geniusweb.profileconnection.WebsocketProfileConnector;25 23 import tudelft.utilities.logging.Reporter; 26 24 … … 42 40 43 41 @Test 44 public void testOnOpen()42 public void onOpenSmokeTest() 45 43 throws IOException, DeploymentException, URISyntaxException { 46 44 WebsocketProfileConnector connector = new WebsocketProfileConnector( 47 45 new URI("ws://someprofile"), reporter, wscontainer); 48 46 connector.onOpen(session); 49 assertNull(connector.getProfile());50 47 } 51 48 … … 93 90 } 94 91 95 @Test 92 @Test(expected = IOException.class) 96 93 public void testGetProfileTimeout() 97 94 throws DeploymentException, IOException, URISyntaxException { … … 116 113 } 117 114 }).start(); 118 Profile profile = connector.getProfile(); 119 assertNull(profile); 115 connector.getProfile(); 120 116 } 121 117 -
protocol/src/main/java/geniusweb/protocol/session/DefaultSessionState.java
r9 r10 64 64 Map<PartyId, PartyWithProfile> partyprofiles, ProtocolException e) { 65 65 if (partyprofiles == null) { 66 partyprofiles = Collections. EMPTY_MAP;66 partyprofiles = Collections.emptyMap(); 67 67 } 68 68 if (conns == null) { 69 69 this.connections = new ProtocolToPartyConnections( 70 Collections. EMPTY_LIST);70 Collections.emptyList()); 71 71 } else { 72 72 this.connections = conns; … … 97 97 98 98 /** 99 * @return100 99 * @return map with {@link PartyWithProfile} for the parties. May be an 101 100 * incomplete map, as more parties with their profiles may be set -
protocol/src/main/java/geniusweb/protocol/session/SessionSettings.java
r1 r10 7 7 import geniusweb.protocol.NegoSettings; 8 8 import geniusweb.protocol.session.saop.SAOPSettings; 9 import geniusweb.protocol.session.shaop.SHAOPSettings; 9 10 import geniusweb.references.PartyWithProfile; 10 11 import tudelft.utilities.logging.Reporter; … … 13 14 * interface for settings for session protocols. Immutable. 14 15 */ 15 @JsonSubTypes({ @JsonSubTypes.Type(value = SAOPSettings.class) })16 16 @JsonSubTypes({ @JsonSubTypes.Type(value = SAOPSettings.class), 17 @JsonSubTypes.Type(value = SHAOPSettings.class) }) 17 18 public interface SessionSettings extends NegoSettings { 18 19 … … 22 23 * @return list of {@link PartyWithProfile} items. 23 24 */ 24 public List<PartyWithProfile> getParticipants();25 List<TeamOfPartiesAndProfiles> getTeams(); 25 26 26 27 /** 27 * Allows modification of SessionSettings to include a party. This is needed for28 * tournament auto-configuration of sessions.28 * Allows modification of SessionSettings to include a party. This is needed 29 * for tournament auto-configuration of sessions. 29 30 * 30 * @param partyprof the party with profileto be added31 * @param partyprofteam the {@link TeamOfPartiesAndProfiles} to be added 31 32 * @return new modified SessionSettings object 32 33 */ 33 public SessionSettings with(PartyWithProfile partyprof); 34 SessionSettings with(TeamOfPartiesAndProfiles partyprofteam); 35 36 /** 37 * 38 * @return all parties from all teams, as a flattened ordered list. The 39 * order : start with all parties from team 1, then all from team 2, 40 * etc. The specific order of the parties from a team depends on the 41 * protocol. 42 */ 43 List<PartyWithProfile> getAllParties(); 34 44 35 45 /** 36 46 * @param logger the logger where the protocol can log events to. 37 * @return the an initialized and ready to use {@link SessionProtocol} that can38 * handle this Negotiation.47 * @return the an initialized and ready to use {@link SessionProtocol} that 48 * can handle this Negotiation. 39 49 */ 40 50 @Override 41 publicSessionProtocol getProtocol(Reporter logger);51 SessionProtocol getProtocol(Reporter logger); 42 52 43 53 } -
protocol/src/main/java/geniusweb/protocol/session/saop/SAOP.java
r9 r10 65 65 public class SAOP extends DefaultListenable<ProtocolEvent> 66 66 implements SessionProtocol { 67 p rivatestatic final int TIME_MARGIN = 20;// ms extra delay after deadline68 p rivatestatic final int MINDURATION = 100;69 p rivatestatic final int MIN_SLEEP_TIME = 1000;70 p rivatestatic final int MAX_SLEEP_TIME = 60000;67 public static final int TIME_MARGIN = 20;// ms extra delay after deadline 68 public static final int MINDURATION = 100; 69 public static final int MIN_SLEEP_TIME = 1000; 70 public static final int MAX_SLEEP_TIME = 60000; 71 71 private static final ProtocolRef SAOP = new ProtocolRef("SAOP"); 72 72 private final Reporter log; … … 154 154 throws InterruptedException, IOException { 155 155 List<PartyWithProfile> participants = state.getSettings() 156 .get Participants();156 .getAllParties(); 157 157 List<Reference> parties = participants.stream() 158 158 .map(parti -> (parti.getParty().getPartyRef())) … … 319 319 setState(state.with(new ProtocolException(message, party, e))); 320 320 } 321 log.log(Level.WARNING, "SAOP protocol intercepted error due to party " 322 + party + ":" + message, e); 321 323 } 322 324 -
protocol/src/main/java/geniusweb/protocol/session/saop/SAOPSettings.java
r1 r10 4 4 import java.util.LinkedList; 5 5 import java.util.List; 6 import java.util.stream.Collectors; 6 7 7 8 import com.fasterxml.jackson.annotation.JsonCreator; … … 11 12 import geniusweb.protocol.session.SessionProtocol; 12 13 import geniusweb.protocol.session.SessionSettings; 14 import geniusweb.protocol.session.TeamOfPartiesAndProfiles; 13 15 import geniusweb.references.PartyWithProfile; 14 16 import tudelft.utilities.logging.Reporter; 15 17 16 18 public class SAOPSettings implements SessionSettings { 17 private final List< PartyWithProfile> participants;19 private final List<SaopPartyWithProfile> participants; 18 20 private final Deadline deadline; 19 21 … … 28 30 @JsonCreator 29 31 public SAOPSettings( 30 @JsonProperty("participants") List< PartyWithProfile> participants,32 @JsonProperty("participants") List<SaopPartyWithProfile> participants, 31 33 @JsonProperty("deadline") Deadline deadline) { 32 34 this.participants = participants; … … 51 53 52 54 @Override 53 public List< PartyWithProfile> getParticipants() {55 public List<TeamOfPartiesAndProfiles> getTeams() { 54 56 return Collections.unmodifiableList(participants); 55 57 } … … 60 62 public Deadline getDeadline() { 61 63 return deadline; 64 } 65 66 @Override 67 public List<PartyWithProfile> getAllParties() { 68 return participants.stream() 69 .map(particip -> particip.getAllParties().get(0)) 70 .collect(Collectors.toList()); 62 71 } 63 72 … … 101 110 102 111 @Override 103 public SessionSettings with(PartyWithProfile party) { 104 List<PartyWithProfile> newparts = new LinkedList<>(participants); 105 newparts.add(party); 112 public SessionSettings with(TeamOfPartiesAndProfiles party) { 113 if (!(party instanceof SaopPartyWithProfile)) 114 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); 106 119 return new SAOPSettings(newparts, deadline); 107 120 } -
protocol/src/main/java/geniusweb/protocol/session/saop/SAOPState.java
r9 r10 16 16 import geniusweb.progress.ProgressRounds; 17 17 import geniusweb.protocol.ProtocolException; 18 import geniusweb.protocol.partyconnection.ProtocolToPartyConn; 18 19 import geniusweb.protocol.partyconnection.ProtocolToPartyConnections; 19 import geniusweb.protocol.partyconnection.ProtocolToPartyConn;20 20 import geniusweb.protocol.session.DefaultSessionState; 21 21 import geniusweb.protocol.session.SessionSettings; … … 61 61 62 62 /** 63 * @param actor the actor that did this action. Can be used to check64 * if action is valid. NOTICE caller has to make sure65 * the current state is not final.66 * @param action the action that was proposed by actor.67 * @param currentTimeMs the current time in ms since 1970, see68 * {@link System#currentTimeMillis()}69 * @return new SessionState with the action added as last action.70 */71 public SAOPState with(PartyId actor, Action action) {72 try {73 return with1(actor, action);74 } catch (ProtocolException e) {75 List<Action> newactions = new LinkedList<>(getActions());76 newactions.add(action);77 return new SAOPState(newactions, getConnections(), getProgress(),78 getSettings(), getPartyProfiles(), e);79 }80 }81 82 /**83 63 * 84 64 * @param connection the new {@link ProtocolToPartyConn} … … 164 144 165 145 /** 146 * @param actor the actor that did this action. Can be used to check 147 * if action is valid. NOTICE caller has to make sure 148 * the current state is not final. 149 * @param action the action that was proposed by actor. 150 * @param currentTimeMs the current time in ms since 1970, see 151 * {@link System#currentTimeMillis()} 152 * @return new SessionState with the action added as last action. 153 */ 154 155 public SAOPState with(PartyId actor, Action action) { 156 157 if (actor == null) { // this is a bug 158 throw new IllegalArgumentException("actor must not be null"); 159 } 160 if (!actor.equals(getNextActor())) { 161 throw new IllegalArgumentException("Party does not have the turn "); 162 163 } 164 if (action == null) { 165 throw new IllegalArgumentException("action is null"); 166 } 167 if (!actor.equals(action.getActor())) { 168 throw new IllegalArgumentException( 169 "act contains wrong credentials: " + action); 170 } 171 172 // check protocol is followed for specific actions 173 if (action instanceof Accept) { 174 Bid bid = getLastBid(); 175 if (bid == null) { 176 throw new IllegalArgumentException( 177 "Accept without a recent offer"); 178 } 179 if (!bid.equals(((Accept) action).getBid())) { 180 throw new IllegalArgumentException( 181 "Party accepts a bid differing from the last offer =" 182 + bid + ", action=" + action + ")"); 183 } 184 } else if (action instanceof Offer) { 185 // offer is always fine. We don't check if bid is actually in domain 186 // or complete etc. We would need domain for that 187 } else if (action instanceof EndNegotiation) { 188 // just act, we will get into the final state then. 189 } else { 190 throw new IllegalArgumentException( 191 "Action " + action + " is not allowed in SAOP"); 192 } 193 194 List<Action> newactions = new LinkedList<>(getActions()); 195 newactions.add(action); 196 return new SAOPState(newactions, getConnections(), advanceProgress(), 197 getSettings(), getPartyProfiles(), null); 198 } 199 200 /** 166 201 * Check up to nparticipants-1 steps back if there was an offer. 167 202 * … … 182 217 } 183 218 184 private SAOPState with1(PartyId actor, Action action)185 throws ProtocolException {186 187 if (actor == null) { // this is a bug188 throw new IllegalArgumentException("actor must not be null");189 }190 if (!actor.equals(getNextActor())) {191 throw new ProtocolException("Party does not have the turn ",192 actor.getName());193 194 }195 if (action == null) {196 throw new ProtocolException("action is null", actor.getName());197 }198 if (!actor.equals(action.getActor())) {199 throw new ProtocolException(200 "act contains wrong credentials: " + action,201 actor.getName());202 }203 204 // check protocol is followed for specific actions205 if (action instanceof Accept) {206 Bid bid = getLastBid();207 if (bid == null) {208 throw new ProtocolException("Accept without a recent offer",209 actor.getName());210 }211 if (!bid.equals(((Accept) action).getBid())) {212 throw new ProtocolException(213 "Party accepts a bid differing from the last offer ="214 + bid + ", action=" + action + ")",215 actor.getName());216 }217 } else if (action instanceof Offer) {218 // offer is always fine. We don't check if bid is actually in domain219 // or complete etc. We would need domain for that220 } else if (action instanceof EndNegotiation) {221 // just act, we will get into the final state then.222 } else {223 throw new ProtocolException(224 "Action " + action + " is not allowed in SAOP",225 actor.getName());226 }227 228 List<Action> newactions = new LinkedList<>(getActions());229 newactions.add(action);230 return new SAOPState(newactions, getConnections(), advanceProgress(),231 getSettings(), getPartyProfiles(), null);232 }233 234 219 /** 235 220 * -
protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsProtocol.java
r9 r10 81 81 long now = System.currentTimeMillis(); 82 82 if (sessionstate.isFinal(now)) { 83 // List<TeamOfPartiesAndProfiles> participants = 84 // sessionstate.getSettings().getParticipants() 83 85 SessionResult result = new SessionResult( 84 sessionstate.getSettings().get Participants(),86 sessionstate.getSettings().getAllParties(), 85 87 sessionstate.getAgreement(), sessionstate.getError()); 86 88 state = state.with(result); -
protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsSettings.java
r8 r10 1 1 package geniusweb.protocol.tournament.allpermutations; 2 2 3 import java.net.URI; 4 import java.net.URISyntaxException; 3 5 import java.util.Collections; 4 6 import java.util.List; … … 7 9 import com.fasterxml.jackson.annotation.JsonProperty; 8 10 11 import geniusweb.profile.Profile; 9 12 import geniusweb.protocol.session.SessionSettings; 13 import geniusweb.protocol.session.TeamOfPartiesAndProfiles; 14 import geniusweb.protocol.session.saop.SAOPSettings; 15 import geniusweb.protocol.session.saop.SaopPartyWithProfile; 16 import geniusweb.protocol.session.shaop.SHAOPSettings; 17 import geniusweb.protocol.session.shaop.ShaopTeam; 10 18 import geniusweb.protocol.tournament.TournamentProtocol; 11 19 import geniusweb.protocol.tournament.TournamentSettings; 20 import geniusweb.references.Parameters; 12 21 import geniusweb.references.PartyRef; 13 22 import geniusweb.references.PartyWithParameters; … … 30 39 * Takes a number of parties and profiles and makes all permutations of them 31 40 * with the given number of parties and profiles. All profiles must be in the 32 * same domain. All sessions are based on the given sessionsettings (can be any 33 * session protocol). The parties for each tournament session are added to this 34 * basic sessionsettings. 35 * 41 * same domain. 42 * <p> 43 * All sessions are based on the given {@link SessionSettings} (can be 44 * {@link SAOPSettings} or {@link SHAOPSettings}). The parties for each 45 * tournament session are added to this basic sessionsettings. sessionsettings 46 * contains basically all the normal run-sessionsettings. This is used as a 47 * "template" for all sessions of the tournament. You can put any use any 48 * session setting here, and each session will be run according to the protocol 49 * you select here. 50 * 51 * The participants list usually is empty. The AllPermutationsProtocol adds the 52 * the required parties to this list. So if you provide a non-empty list here, 53 * then these parties would be present in every session in the tournament. 54 * <p> 55 * If the tournament is used with a SHAOP sessionsettings, a number of rules are 56 * used to generate the COB party from the settings. 57 * 58 * The COB party is assumed to be the comparebids-1.0.0 party on the same server 59 * as the party you provide. So if you provide http://server/../party1-1.2.3 60 * then the cob party will be assumed to be at 61 * http://server/../comparebids-1.0.0. The provided parties that you provide are 62 * the SHAOP parties (you can also use SAOP parties). The provided profile is 63 * also given to the SHAOP party. Be aware that you typically need a parameter 64 * like partial=10. The COB party gets the profile as specified, but without the 65 * query part. The COB and SHAOP party are thus a fixed pair. 36 66 */ 37 67 public class AllPermutationsSettings implements TournamentSettings { 68 38 69 private final List<PartyWithParameters> parties; 39 70 private final List<ProfileRef> profiles; … … 49 80 * we use PermutationsWithoutReturn to create the 50 81 * parties. 51 * @param profiles 82 * @param profiles list of available {@link Profile}s to be 83 * permutated over the parties 52 84 * @param partiesPerSession number of parties per session, must be at least 53 85 * 2. … … 97 129 */ 98 130 public ImmutableList<SessionSettings> permutations() { 99 ImmutableList<ImmutableList< PartyWithProfile>> partylistlist;131 ImmutableList<ImmutableList<TeamOfPartiesAndProfiles>> partylistlist; 100 132 ImmutableList<PartyWithParameters> partieslist = new FixedList<PartyWithParameters>( 101 133 parties); … … 166 198 */ 167 199 private SessionSettings createSetting( 168 ImmutableList< PartyWithProfile> partyproflist) {200 ImmutableList<TeamOfPartiesAndProfiles> partyproflist) { 169 201 SessionSettings settings = sessionsettings; 170 for ( PartyWithProfilepartyprof : partyproflist) {202 for (TeamOfPartiesAndProfiles partyprof : partyproflist) { 171 203 settings = settings.with(partyprof); 172 204 } … … 181 213 * @param drawPartyWithPutback if parties can be drawn multiple times 182 214 * @return list of sessionsets where each sessionset contains settings for a 183 * session: a list with {@link PartyWithProfile}s. The sessionsets184 * are made by making all combinations of parties and profiles.185 * Profiles are drawn with replace.186 */ 187 private ImmutableList<ImmutableList< PartyWithProfile>> getParticipants(215 * session: a list with {@link TeamOfPartiesAndProfiles}s. The 216 * sessionsets are made by making all combinations of parties and 217 * profiles. Profiles are drawn with replace. 218 */ 219 private ImmutableList<ImmutableList<TeamOfPartiesAndProfiles>> getParticipants( 188 220 ImmutableList<PartyWithParameters> parties, 189 221 ImmutableList<ProfileRef> profiles, int n, … … 205 237 partiesPermutations, profilesPermutations); 206 238 207 return new MapList<Tuple<ImmutableList<PartyWithParameters>, ImmutableList<ProfileRef>>, ImmutableList< PartyWithProfile>>(208 tuple -> partyprofilelist(tuple), tuples);239 return new MapList<Tuple<ImmutableList<PartyWithParameters>, ImmutableList<ProfileRef>>, ImmutableList<TeamOfPartiesAndProfiles>>( 240 tuple -> teamlist(tuple), tuples); 209 241 } 210 242 … … 213 245 * @param tuple a tuple with (1) ImmutableList<PartyRef> (2) 214 246 * ImmutableList<ProfileRef> 215 * @return list of PartyWithProfile, each picked from the two lists in216 * order.217 */ 218 private ImmutableList< PartyWithProfile> partyprofilelist(247 * @return list of TeamOfPartiesAndProfiles, each picked from the two lists 248 * in order. 249 */ 250 private ImmutableList<TeamOfPartiesAndProfiles> teamlist( 219 251 Tuple<ImmutableList<PartyWithParameters>, ImmutableList<ProfileRef>> tuple) { 220 Function2<PartyWithParameters, ProfileRef, PartyWithProfile> //221 makeparty = new Function2<PartyWithParameters, ProfileRef, PartyWithProfile>() {252 Function2<PartyWithParameters, ProfileRef, TeamOfPartiesAndProfiles> // 253 makeparty = new Function2<PartyWithParameters, ProfileRef, TeamOfPartiesAndProfiles>() { 222 254 @Override 223 public PartyWithProfileapply(PartyWithParameters party,255 public TeamOfPartiesAndProfiles apply(PartyWithParameters party, 224 256 ProfileRef profile) { 225 return new PartyWithProfile(party, profile); 257 if (sessionsettings instanceof SAOPSettings) 258 return new SaopPartyWithProfile(party, profile); 259 else if (sessionsettings instanceof SHAOPSettings) { 260 return new ShaopTeam(new PartyWithProfile(party, profile), 261 makeCob(party.getPartyRef(), profile)); 262 } else 263 throw new IllegalArgumentException( 264 "Unknown/unsupported protocol " 265 + sessionsettings.getClass()); 226 266 } 267 227 268 }; 228 return new MapThreadList< PartyWithProfile, PartyWithParameters, ProfileRef>(269 return new MapThreadList<TeamOfPartiesAndProfiles, PartyWithParameters, ProfileRef>( 229 270 makeparty, tuple.get1(), tuple.get2()); 230 271 } 231 272 273 /** 274 * Extract the raw URL, without the part after the question mark 275 * 276 * @param party a party reference (for another party) 277 * @param profile a profile that may have a filter like "?partial=XX" 278 * @return profile without the filter and with a cob party on the same 279 * machine. IT IS ASSUMED that there will the default 280 * "comparebids-1.0.0" party on the same machine as where the other 281 * party is 282 */ 283 protected static PartyWithProfile makeCob(PartyRef party, 284 ProfileRef profile) { 285 try { 286 URI profileuri = profile.getURI(); 287 URI partyuri = party.getURI(); 288 ProfileRef cobprof = new ProfileRef(profileuri.getScheme() + "://" 289 + profileuri.getAuthority() + profileuri.getPath()); 290 String partypath = partyuri.getPath(); 291 partypath = partypath.substring(0, partypath.lastIndexOf('/')); 292 PartyWithParameters cobparty = new PartyWithParameters(new PartyRef( 293 partyuri.getScheme() + "://" + partyuri.getAuthority() 294 + partypath + "/comparebids-1.0.0"), 295 new Parameters()); 296 return new PartyWithProfile(cobparty, cobprof); 297 298 } catch (URISyntaxException e) { 299 throw new IllegalArgumentException( 300 "Failed making cob party with profile " + profile, e); 301 } 302 } 303 232 304 } -
protocol/src/main/java/geniusweb/protocol/tournament/allpermutations/AllPermutationsState.java
r1 r10 55 55 */ 56 56 public AllPermutationsState with(SessionResult result) { 57 if (!getNextSettings().get Participants()57 if (!getNextSettings().getAllParties() 58 58 .equals(result.getParticipants())) { 59 59 throw new IllegalArgumentException("Inconsistent session result"); -
protocol/src/test/java/geniusweb/protocol/session/DefaultSessionStateTest.java
r9 r10 29 29 import geniusweb.protocol.partyconnection.ProtocolToPartyConnections; 30 30 import geniusweb.protocol.session.saop.SAOPSettings; 31 import geniusweb.protocol.session.saop.SaopPartyWithProfile; 31 32 import geniusweb.references.Parameters; 32 33 import geniusweb.references.PartyRef; … … 39 40 private final ObjectMapper jackson = new ObjectMapper(); 40 41 private DefaultSessionState1 state1, state1a, stateA, stateE, stateF; 42 // The 1 is because we are testing an instance, not the abstract class 41 43 private String state1string = "{\"DefaultSessionState1\":{\"actions\":[],\"progress\":{\"time\":{\"duration\":1000,\"start\":1000}},\"settings\":{\"SAOPSettings\":{\"participants\":[{\"party\":{\"partyref\":\"party1\",\"parameters\":{}},\"profile\":\"profile1\"},{\"party\":{\"partyref\":\"party2\",\"parameters\":{}},\"profile\":\"profile2\"}],\"deadline\":{\"deadlinetime\":{\"durationms\":1000}}}},\"error\":null,\"partyprofiles\":{\"party1\":{\"party\":{\"partyref\":\"party1\",\"parameters\":{}},\"profile\":\"profile1\"}}}}"; 42 44 private ProgressTime progr; … … 58 60 new PartyRef("party2"), new Parameters()); 59 61 ProfileRef profile2 = new ProfileRef("profile2"); 60 List< PartyWithProfile> participants = Arrays.asList(61 new PartyWithProfile(party1ref, profile1),62 new PartyWithProfile(party2ref, profile2));62 List<SaopPartyWithProfile> participants = Arrays.asList( 63 new SaopPartyWithProfile(party1ref, profile1), 64 new SaopPartyWithProfile(party2ref, profile2)); 63 65 SessionSettings settings = new SAOPSettings(participants, deadline); 64 66 ProtocolException e = new ProtocolException("test protocol error", -
protocol/src/test/java/geniusweb/protocol/session/saop/SAOPSettingsTest.java
r8 r10 23 23 import geniusweb.references.PartyRef; 24 24 import geniusweb.references.PartyWithParameters; 25 import geniusweb.references.PartyWithProfile;26 25 import geniusweb.references.ProfileRef; 27 26 import tudelft.utilities.junit.GeneralTests; … … 30 29 public class SAOPSettingsTest extends GeneralTests<SAOPSettings> { 31 30 32 private PartyWithProfile partyprof1 = mock(PartyWithProfile.class);33 private PartyWithProfile partyprof2 = mock(PartyWithProfile.class);34 private PartyWithProfile partyprof3 = mock(PartyWithProfile.class);35 private List< PartyWithProfile> participants2 = Arrays.asList(partyprof1,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, 36 35 partyprof2); 37 private List< PartyWithProfile> participants3 = Arrays.asList(partyprof1,36 private List<SaopPartyWithProfile> participants3 = Arrays.asList(partyprof1, 38 37 partyprof2, partyprof3); 39 38 … … 67 66 new PartyRef("http://party2"), new Parameters()); 68 67 ProfileRef profile2 = new ProfileRef("http://profile2"); 69 PartyWithProfile partywithprof1 = newPartyWithProfile(party1,68 SaopPartyWithProfile partywithprof1 = new SaopPartyWithProfile(party1, 70 69 profile1); 71 PartyWithProfile partywithprof2 = newPartyWithProfile(party2,70 SaopPartyWithProfile partywithprof2 = new SaopPartyWithProfile(party2, 72 71 profile2); 73 List< PartyWithProfile> participants = Arrays.asList(partywithprof1,72 List<SaopPartyWithProfile> participants = Arrays.asList(partywithprof1, 74 73 partywithprof2); 75 74 … … 141 140 SAOPSettings saop = new SAOPSettings(participants2, deadline); 142 141 SessionSettings saop2 = saop.with(partyprof3); 143 assertEquals(3, saop2.get Participants().size());142 assertEquals(3, saop2.getTeams().size()); 144 143 } 145 144 -
protocol/src/test/java/geniusweb/protocol/session/saop/SAOPStateTest.java
r9 r10 27 27 import geniusweb.progress.ProgressTime; 28 28 import geniusweb.protocol.ProtocolException; 29 import geniusweb.protocol.partyconnection.ProtocolToPartyConn; 29 30 import geniusweb.protocol.partyconnection.ProtocolToPartyConnections; 30 import geniusweb.protocol.partyconnection.ProtocolToPartyConn;31 31 import geniusweb.protocol.session.SessionSettings; 32 32 import tudelft.utilities.junit.GeneralTests; … … 220 220 } 221 221 222 @Test 222 @Test(expected = IllegalArgumentException.class) 223 223 public void withWrongActionTest() { 224 224 // wrong because action has actor null which does not match party1 225 225 SAOPState state = state1.with(party1, action); 226 assertEquals(1, state.getActions().size()); 227 assertEquals(action, state.getActions().get(0)); 228 assertTrue(state.isFinal(NOW)); 229 assertEquals( 230 "geniusweb.protocol.ProtocolException: party1:act contains wrong credentials: act1", 231 state.getError().toString()); 232 } 233 234 @Test 226 // assertEquals(1, state.getActions().size()); 227 // assertEquals(action, state.getActions().get(0)); 228 // assertTrue(state.isFinal(NOW)); 229 } 230 231 @Test(expected = IllegalArgumentException.class) 235 232 public void withActionTest() { 236 233 when(action.getActor()).thenReturn(party1); 237 SAOPState state = state1.with(party1, action); 238 assertEquals(1, state.getActions().size()); 239 assertEquals(action, state.getActions().get(0)); 234 state1.with(party1, action); 240 235 } 241 236 … … 265 260 } 266 261 267 @Test 262 @Test(expected = IllegalArgumentException.class) 268 263 public void RefuseImmediateAccept() { 269 264 Accept nullaccept = new Accept(party1, null); 270 265 SAOPState state = state1.with(party1, nullaccept); 271 assertTrue(state.isFinal(NOW)); 272 assertEquals( 273 "geniusweb.protocol.ProtocolException: party1:Accept without a recent offer", 274 state.getError().toString()); 275 } 276 277 @Test 266 } 267 268 @Test(expected = IllegalArgumentException.class) 278 269 public void RefuseNotMyTurn() { 279 270 List<Action> actions = Arrays.asList(offer1); … … 281 272 settings, null, null); 282 273 283 state = state.with(party1, offer1);284 assertTrue(state.isFinal(NOW));285 assertEquals(286 "geniusweb.protocol.ProtocolException: party1:Party does not have the turn ",287 state.getError().toString());288 } 289 290 @Test 274 state.with(party1, offer1); 275 // assertTrue(state.isFinal(NOW)); 276 // assertEquals( 277 // "geniusweb.protocol.ProtocolException: party1:Party does not have the turn ", 278 // state.getError().toString()); 279 } 280 281 @Test(expected = IllegalArgumentException.class) 291 282 public void RefuseNullAccept() { 292 283 List<Action> actions = Arrays.asList(offer1); … … 297 288 state = state.with(party2, nullaccept); 298 289 assertTrue(state.isFinal(NOW)); 299 assertTrue(state.getError().toString().matches( 300 ".*party2.*Party accepts a bid differing from the last offer.*")); 301 } 302 303 @Test 290 } 291 292 @Test(expected = IllegalArgumentException.class) 304 293 public void RefuseNullAction() { 305 294 List<Action> actions = Arrays.asList(offer1); … … 308 297 309 298 state = state.with(party2, null); 310 assertEquals(311 "geniusweb.protocol.ProtocolException: party2:action is null",312 state.getError().toString());313 299 } 314 300 -
protocol/src/test/java/geniusweb/protocol/session/saop/SAOPTest.java
r9 r10 20 20 import java.util.List; 21 21 import java.util.Map; 22 import java.util.stream.Collectors; 22 23 23 24 import org.junit.Test; … … 39 40 import geniusweb.progress.Progress; 40 41 import geniusweb.protocol.ProtocolException; 41 import geniusweb.protocol.partyconnection.ProtocolToPartyConnections;42 42 import geniusweb.protocol.partyconnection.ProtocolToPartyConn; 43 43 import geniusweb.protocol.partyconnection.ProtocolToPartyConnFactory; 44 import geniusweb.protocol.partyconnection.ProtocolToPartyConnections; 45 import geniusweb.protocol.session.TeamOfPartiesAndProfiles; 44 46 import geniusweb.references.Parameters; 45 47 import geniusweb.references.PartyRef; … … 73 75 private final PartyRef party2ref = mock(PartyRef.class); 74 76 private final SAOPSettings settings = mock(SAOPSettings.class); 75 private final PartyWithProfile party1 = mock(PartyWithProfile.class);76 private final PartyWithProfile party2 = mock(PartyWithProfile.class);77 private final SaopPartyWithProfile team1 = mock(SaopPartyWithProfile.class); 78 private final SaopPartyWithProfile team2 = mock(SaopPartyWithProfile.class); 77 79 private SAOP saop; 78 80 private ProtocolToPartyConnFactory factory; … … 80 82 private ProtocolToPartyConn conn1 = mock(ProtocolToPartyConn.class), 81 83 conn2 = mock(ProtocolToPartyConn.class); 82 private Map<PartyId, PartyWithProfile> partyprofiles;84 private Map<PartyId, SaopPartyWithProfile> partyprofiles; 83 85 private Progress progress = mock(Progress.class); 84 86 private ProfileRef profile1; … … 101 103 throws URISyntaxException, IOException, NoResourcesNowException { 102 104 SAOP = new ProtocolRef("SAOP"); 103 when(party1.getParty()).thenReturn(partywithparam1); 104 when(party2.getParty()).thenReturn(partywithparam2); 105 when(team1.getParty()).thenReturn(partywithparam1); 106 when(team2.getParty()).thenReturn(partywithparam2); 107 when(team1.getAllParties()).thenReturn(Arrays.asList(team1)); 108 when(team2.getAllParties()).thenReturn(Arrays.asList(team2)); 105 109 106 110 partyprofiles = new HashMap<>(); 107 partyprofiles.put(PARTY1ID, party1);108 partyprofiles.put(PARTY2ID, party2);111 partyprofiles.put(PARTY1ID, team1); 112 partyprofiles.put(PARTY2ID, team2); 109 113 110 114 when(deadlinetime.getDuration()).thenReturn(1000l); 111 115 112 List<PartyWithProfile> participants = new ArrayList<>(); 113 participants.add(party1); 114 participants.add(party2); 115 when(settings.getParticipants()).thenReturn(participants); 116 List<TeamOfPartiesAndProfiles> teams = new ArrayList<>(); 117 teams.add(team1); 118 teams.add(team2); 119 when(settings.getTeams()).thenReturn(teams); 120 when(settings.getAllParties()).thenReturn(Arrays.asList(team1, team2)); 116 121 when(settings.getDeadline()).thenReturn(deadlinetime); 117 122 … … 126 131 127 132 profile1 = mock(ProfileRef.class); 128 when( party1.getProfile()).thenReturn(profile1);133 when(team1.getProfile()).thenReturn(profile1); 129 134 profile2 = mock(ProfileRef.class); 130 when( party2.getProfile()).thenReturn(profile2);135 when(team2.getProfile()).thenReturn(profile2); 131 136 132 137 mockState(connectedstate, "connected state"); … … 157 162 when(state.getSettings()).thenReturn(settings); 158 163 when(state.getConnections()).thenReturn(connectionswithparties); 159 when(state.getPartyProfiles()).thenReturn(partyprofiles); 164 when(state.getPartyProfiles()) 165 .thenReturn(partyprofiles.entrySet().stream().collect( 166 Collectors.toMap(e -> e.getKey(), e -> e.getValue()))); 160 167 when(state.getProgress()).thenReturn(progress); 161 168 when(state.with(any(ProtocolToPartyConn.class), -
references/src/main/java/geniusweb/references/Parameters.java
r8 r10 11 11 public class Parameters extends HashMap<String, Object> { 12 12 13 /** 14 * Getter with type-check 15 * 16 * @param <T> the expected type 17 * @param paramname the parameter name that must be in the map 18 * @param classType the expected value type for this parameter 19 * @return object of requested type. 20 * @throws IllegalArgumentException if the object is not available. 21 */ 22 @SuppressWarnings("unchecked") 23 public <T> T get(String paramname, Class<T> classType) { 24 if (!containsKey(paramname) 25 || !(get(paramname).getClass().isInstance(classType))) 26 throw new IllegalArgumentException(" Missing contain a parameter " 27 + paramname + " with a " + classType.getName() + " value"); 28 return (T) get(paramname); 29 } 13 30 } -
references/src/main/java/geniusweb/references/PartyWithProfile.java
r8 r10 22 22 } 23 23 24 /** 25 * 26 * @return the {@link PartyWithParameters}. never null. 27 */ 24 28 public PartyWithParameters getParty() { 25 29 return party; … … 27 31 } 28 32 33 /** 34 * @return the profile setting for this party. Never null. 35 */ 29 36 public ProfileRef getProfile() { 30 37 return profile; -
simplerunner/pom.xml
r9 r10 42 42 <artifactId>randomparty</artifactId> 43 43 <version>1.1.0</version> 44 <scope>test</scope> 45 </dependency> 46 <dependency> 47 <groupId>geniusweb.exampleparties</groupId> 48 <artifactId>comparebids</artifactId> 49 <version>1.0.0</version> 50 <scope>test</scope> 51 </dependency> 52 <dependency> 53 <groupId>geniusweb.exampleparties</groupId> 54 <artifactId>simpleshaop</artifactId> 55 <version>1.0.0</version> 44 56 <scope>test</scope> 45 57 </dependency> -
simplerunner/src/main/java/geniusweb/simplerunner/NegoRunner.java
r9 r10 14 14 import geniusweb.protocol.NegoSettings; 15 15 import geniusweb.protocol.partyconnection.ProtocolToPartyConnFactory; 16 import geniusweb.protocol.session.SessionSettings;17 16 import tudelft.utilities.logging.ReportToLogger; 18 17 import tudelft.utilities.logging.Reporter; … … 72 71 String serialized = new String(Files.readAllBytes(Paths.get(args[0])), 73 72 StandardCharsets.UTF_8); 74 SessionSettings settings = jackson.readValue(serialized,75 SessionSettings.class);73 NegoSettings settings = jackson.readValue(serialized, 74 NegoSettings.class); 76 75 77 76 NegoRunner runner = new NegoRunner(settings, -
simplerunner/src/test/java/geniusweb/simplerunner/SessionRunnerE2ETest.java
r2 r10 16 16 import com.fasterxml.jackson.databind.ObjectMapper; 17 17 18 import geniusweb.protocol. session.SessionSettings;18 import geniusweb.protocol.NegoSettings; 19 19 import tudelft.utilities.logging.ReportToLogger; 20 20 import tudelft.utilities.logging.Reporter; … … 34 34 @Parameters 35 35 public static Collection<Object[]> data() { 36 return Arrays.asList( 37 new Object[][] { { "src/test/resources/settings.json" }, { "src/test/resources/settings2.json" } }); 36 return Arrays 37 .asList(new Object[][] { { "src/test/resources/settings.json" }, 38 { "src/test/resources/settings2.json" }, 39 { "src/test/resources/shaoptoursettings.json" } }); 38 40 } 39 41 … … 44 46 @Before 45 47 public void before() throws IOException { 46 String serialized = new String(Files.readAllBytes(Paths.get(filename)), StandardCharsets.UTF_8); 47 SessionSettings settings = jackson.readValue(serialized, SessionSettings.class); 48 System.out.println("Running from file " + filename); 49 String serialized = new String(Files.readAllBytes(Paths.get(filename)), 50 StandardCharsets.UTF_8); 51 NegoSettings settings = jackson.readValue(serialized, 52 NegoSettings.class); 48 53 49 runner = new NegoRunner(settings, new ClassPathConnectionFactory(), logger); 54 runner = new NegoRunner(settings, new ClassPathConnectionFactory(), 55 logger); 50 56 51 57 }
Note:
See TracChangeset
for help on using the changeset viewer.