[virtualcommons-svn] commit/foraging: alllee: adding rule selection logic to GroupDataModel and For
Status: Beta
Brought to you by:
alllee
From: Bitbucket <com...@bi...> - 2011-10-02 04:44:49
|
1 new changeset in foraging: http://bitbucket.org/virtualcommons/foraging/changeset/f04d1ff461c3/ changeset: f04d1ff461c3 user: alllee date: 2011-10-02 06:44:39 summary: adding rule selection logic to GroupDataModel and ForagingServer affected #: 8 files (-1 bytes) --- a/src/main/java/edu/asu/commons/foraging/event/VoteRuleRequest.java Sat Oct 01 02:12:11 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -package edu.asu.commons.foraging.event; - - -import edu.asu.commons.event.AbstractPersistableEvent; -import edu.asu.commons.foraging.rules.ForagingRule; -import edu.asu.commons.net.Identifier; - -/** - * $Id: EnforcementRankingRequest.java 522 2010-06-30 19:17:48Z alllee $ - * - * Sent from a client to the server signaling that the client - * has updated the votes to the given options - * - * @author <a href='all...@as...'>Allen Lee</a> - * @version $Revision: 522 $ - */ - -public class VoteRuleRequest extends AbstractPersistableEvent { - - private static final long serialVersionUID = 4360213814026474451L; - private ForagingRule rule; - - public VoteRuleRequest(Identifier id, ForagingRule rule) { - super(id, rule.toString()); - this.rule = rule; - } - - public ForagingRule getRule() { - return rule; - } - - @Override - public String toString() { - return String.format("%s voted for rule [%s]", id, rule); - } - - -} --- a/src/main/java/edu/asu/commons/foraging/model/ClientData.java Sat Oct 01 02:12:11 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/model/ClientData.java Sat Oct 01 21:44:39 2011 -0700 @@ -13,6 +13,7 @@ import edu.asu.commons.foraging.conf.RoundConfiguration.SanctionAction; import edu.asu.commons.foraging.event.RealTimeSanctionRequest; import edu.asu.commons.foraging.graphics.Point3D; +import edu.asu.commons.foraging.rules.ForagingRule; import edu.asu.commons.foraging.ui.Circle; import edu.asu.commons.net.Identifier; import edu.asu.commons.util.Duration; @@ -67,6 +68,7 @@ private double trustGamePlayerOneAmountToKeep; private double[] trustGamePlayerTwoAmountsToKeep; + private ForagingRule votedRule; private ArrayList<String> trustGameLog = new ArrayList<String>(); private double trustGameEarnings = 0.0d; @@ -604,5 +606,13 @@ public void addCorrectQuizAnswers(int numberOfCorrectAnswers) { correctQuizAnswers += numberOfCorrectAnswers; } + + public ForagingRule getVotedRule() { + return votedRule; + } + + public void setVotedRule(ForagingRule votedRule) { + this.votedRule = votedRule; + } } --- a/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java Sat Oct 01 02:12:11 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java Sat Oct 01 21:44:39 2011 -0700 @@ -771,4 +771,39 @@ return serverDataModel.getEventChannel(); } + public ForagingRule generateSelectedRule() { + Map<ForagingRule, Integer> tallyMap = new HashMap<ForagingRule, Integer>(); + for (ClientData client: clients.values()) { + ForagingRule rule = client.getVotedRule(); + Integer count = tallyMap.get(rule); + if (count == null) { + count = 0; + } + tallyMap.put(rule, count + 1); + } + ArrayList<ForagingRule> selectedRules = new ArrayList<ForagingRule>(); + Integer maxSeenValue = 0; + for (Map.Entry<ForagingRule, Integer> entry : tallyMap.entrySet()) { + Integer currentValue = entry.getValue(); +// getLogger().info("rule : " + entry.getKey() + " has a vote value of " + currentValue); + + + if (currentValue > maxSeenValue) { + maxSeenValue = currentValue; +// getLogger().info("That was better than " + maxSeenValue + " - clearing out the old rule set and adding this one."); + selectedRules.clear(); + selectedRules.add(entry.getKey()); + } + else if (currentValue == maxSeenValue) { +// getLogger().info("that was the same as " + maxSeenValue + " - adding this one." + selectedRules); + selectedRules.add(entry.getKey()); + } + } +// getLogger().info("tally map is: " + tallyMap); + getLogger().info("picking first rule from " + selectedRules); + Collections.shuffle(selectedRules); + return selectedRules.get(0); + + } + } --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java Sat Oct 01 02:12:11 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java Sat Oct 01 21:44:39 2011 -0700 @@ -55,6 +55,8 @@ import edu.asu.commons.foraging.event.RealTimeSanctionRequest; import edu.asu.commons.foraging.event.ResetTokenDistributionRequest; import edu.asu.commons.foraging.event.RoundStartedEvent; +import edu.asu.commons.foraging.event.RuleSelectedUpdateEvent; +import edu.asu.commons.foraging.event.RuleVoteRequest; import edu.asu.commons.foraging.event.SanctionAppliedEvent; import edu.asu.commons.foraging.event.ShowRequest; import edu.asu.commons.foraging.event.SurveyIdSubmissionRequest; @@ -62,7 +64,6 @@ import edu.asu.commons.foraging.event.TrustGameSubmissionEvent; import edu.asu.commons.foraging.event.TrustGameSubmissionRequest; import edu.asu.commons.foraging.event.UnlockResourceRequest; -import edu.asu.commons.foraging.event.VoteRuleRequest; import edu.asu.commons.foraging.model.ClientData; import edu.asu.commons.foraging.model.Direction; import edu.asu.commons.foraging.model.EnforcementMechanism; @@ -70,6 +71,7 @@ import edu.asu.commons.foraging.model.ResourceDispenser; import edu.asu.commons.foraging.model.SanctionMechanism; import edu.asu.commons.foraging.model.ServerDataModel; +import edu.asu.commons.foraging.rules.ForagingRule; import edu.asu.commons.foraging.ui.Circle; import edu.asu.commons.net.Dispatcher; import edu.asu.commons.net.Identifier; @@ -372,11 +374,27 @@ resourceDispenser.resetTokenDistribution(event); } }); - addEventProcessor(new EventTypeProcessor<VoteRuleRequest>(VoteRuleRequest.class) { + addEventProcessor(new EventTypeProcessor<RuleVoteRequest>(RuleVoteRequest.class) { + int votesReceived = 0; @Override - public void handle(VoteRuleRequest request) { - - + public void handle(RuleVoteRequest request) { + sendFacilitatorMessage("Received vote rule request: " + request); + ClientData client = clients.get(request.getId()); + client.setVotedRule(request.getRule()); + votesReceived++; + if (votesReceived >= clients.size()) { + // calculate votes + for (GroupDataModel group: serverDataModel.getGroups()) { + ForagingRule selectedRule = group.generateSelectedRule(); + for (Identifier id: group.getClientIdentifiers()) { + sendFacilitatorMessage("Group " + group + " selected " + selectedRule); + transmit(new RuleSelectedUpdateEvent(id, selectedRule)); + } + + } + } + + } }); addEventProcessor(new EventTypeProcessor<RealTimeSanctionRequest>(RealTimeSanctionRequest.class) { --- a/src/main/java/edu/asu/commons/foraging/ui/VotingForm.java Sat Oct 01 02:12:11 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/ui/VotingForm.java Sat Oct 01 21:44:39 2011 -0700 @@ -25,7 +25,7 @@ import javax.swing.JRadioButton; import edu.asu.commons.foraging.client.ForagingClient; -import edu.asu.commons.foraging.event.VoteRuleRequest; +import edu.asu.commons.foraging.event.RuleVoteRequest; import edu.asu.commons.foraging.rules.ForagingRule; /** @@ -102,7 +102,7 @@ return; } ForagingRule selectedRule = ForagingRule.valueOf(model.getActionCommand()); - client.transmit(new VoteRuleRequest(client.getId(), selectedRule)); + client.transmit(new RuleVoteRequest(client.getId(), selectedRule)); } }); return submitButton; Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |