virtualcommons-svn Mailing List for Virtual Commons Experiment Software (Page 15)
Status: Beta
Brought to you by:
alllee
You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(21) |
Aug
(31) |
Sep
(6) |
Oct
(15) |
Nov
(2) |
Dec
(9) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(4) |
Feb
(6) |
Mar
(12) |
Apr
(52) |
May
(14) |
Jun
(19) |
Jul
(81) |
Aug
(115) |
Sep
(36) |
Oct
(88) |
Nov
(46) |
Dec
(58) |
2010 |
Jan
(52) |
Feb
(55) |
Mar
(48) |
Apr
(15) |
May
(5) |
Jun
(38) |
Jul
(27) |
Aug
(24) |
Sep
(28) |
Oct
(1) |
Nov
(2) |
Dec
(29) |
2011 |
Jan
(87) |
Feb
(39) |
Mar
(63) |
Apr
(42) |
May
(26) |
Jun
(53) |
Jul
(23) |
Aug
(43) |
Sep
(37) |
Oct
(25) |
Nov
(4) |
Dec
(7) |
2012 |
Jan
(73) |
Feb
(79) |
Mar
(62) |
Apr
(28) |
May
(12) |
Jun
(2) |
Jul
(9) |
Aug
(1) |
Sep
(8) |
Oct
|
Nov
(3) |
Dec
(3) |
2013 |
Jan
(8) |
Feb
(16) |
Mar
(38) |
Apr
(74) |
May
(62) |
Jun
(15) |
Jul
(49) |
Aug
(19) |
Sep
(9) |
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(25) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Bitbucket <com...@bi...> - 2012-05-04 15:26:17
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/b6b0fbcabc4f/ changeset: b6b0fbcabc4f user: alllee date: 2012-05-04 17:26:11 summary: removing english text where possible affected #: 1 file diff -r eb36e2e86cd79eb8f02d0a9a3ccafb54f9cc3c7a -r b6b0fbcabc4fb1267ecf68351278fed71850ee2c src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -664,11 +664,12 @@ else if (resourceGeneratorType.equals("top-bottom-patchy")) { addSpecialInstructions(builder, getPatchyResourceInstructions()); } - if (builder.toString().isEmpty()) { + if (builder.length() == 0) { return instructionsBuilder; } else { - return instructionsBuilder.append("<h2>Additional instructions</h2><hr><ul>").append(builder).append("</ul>"); + // FIXME: localize via ResourceBundle + return instructionsBuilder.append("<hr><ul>").append(builder).append("</ul>"); } } 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. |
From: Bitbucket <com...@bi...> - 2012-05-04 02:37:35
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/eb36e2e86cd7/ changeset: eb36e2e86cd7 user: alllee date: 2012-05-04 04:37:31 summary: temporary makeshift for localizing trust game panel messages and strings affected #: 3 files diff -r 9293c7d74dfd9beebcfc6949e5a7e38630406926 -r eb36e2e86cd79eb8f02d0a9a3ccafb54f9cc3c7a src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -850,4 +850,29 @@ return getProperty("survey-confirmation-message", "Please make sure you have completed the survey before continuing. Have you completed the survey?"); } + + public String[] getTrustGamePlayerTwoColumnNames() { + return getParentConfiguration().getTrustGamePlayerTwoColumnNames(); + } + + public String getTrustGamePlayerOneAllocationLabel() { + return getParentConfiguration().getTrustGamePlayerOneAllocationLabel(); + } + + public String getTrustGamePlayerTwoAllocationLabel() { + return getParentConfiguration().getTrustGamePlayerTwoAllocationLabel(); + } + + public String getTrustGamePlayerTwoInstructionLabel() { + return getParentConfiguration().getTrustGamePlayerTwoInstructionLabel(); + } + + public String getPlayerOneAmountToKeepValidation() { + return getParentConfiguration().getPlayerOneAmountToKeepValidation(); + } + + public String getPlayerTwoAmountToKeepValidation() { + return getParentConfiguration().getPlayerTwoAmountToKeepValidation(); + } + } diff -r 9293c7d74dfd9beebcfc6949e5a7e38630406926 -r eb36e2e86cd79eb8f02d0a9a3ccafb54f9cc3c7a src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java @@ -163,4 +163,33 @@ return getProperty("waiting-room-instructions", "<h1>Please wait</h1><hr><p>Please wait while the rest of the participants complete the task.</p>"); } + public String[] getTrustGamePlayerTwoColumnNames() { + return new String[] { + getProperty("trust-game-p2-column-0", "Amount sent by P1"), + getProperty("trust-game-p2-column-1", "Total amount received"), + getProperty("trust-game-p2-column-2", "Amount to keep"), + getProperty("trust-game-p2-column-3", "Amount to return to P1") + }; + } + + public String getTrustGamePlayerOneAllocationLabel() { + return getProperty("trust-game-p1-allocation", "Player 1: Please select one of the following allocations."); + } + + public String getTrustGamePlayerTwoAllocationLabel() { + return getProperty("trust-game-p2-allocation", "Player 2: Please enter data for ALL of the following allocations."); + } + + public String getTrustGamePlayerTwoInstructionLabel() { + return getProperty("trust-game-p2-amount-to-keep-label", "Click in the \"Amount to keep\" column to select how much to keep if you are selected as player 2."); + } + + public String getPlayerOneAmountToKeepValidation() { + return getProperty("trust-game-p1-validation", "Please select the amount you would like to keep as player 1."); + } + + public String getPlayerTwoAmountToKeepValidation() { + return getProperty("trust-game-p2-validation", "Please select the amount you would like to keep as player 1."); + } + } diff -r 9293c7d74dfd9beebcfc6949e5a7e38630406926 -r eb36e2e86cd79eb8f02d0a9a3ccafb54f9cc3c7a src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.java --- a/src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.java +++ b/src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.java @@ -39,6 +39,10 @@ { "1.0", "(3 x 1) = 3", "", "" } }; + public void setColumnNames(String[] columnNames) { + this.columnNames = columnNames; + } + @Override public int getColumnCount() { return columnNames.length; @@ -103,9 +107,9 @@ } } - private TableModel playerTwoTableModel; + private PlayerTwoTableModel playerTwoTableModel; - private TableModel getPlayerTwoTableModel() { + private PlayerTwoTableModel getPlayerTwoTableModel() { if (playerTwoTableModel == null) { playerTwoTableModel = new PlayerTwoTableModel(); } @@ -152,6 +156,10 @@ public void setRoundConfiguration(RoundConfiguration configuration) { this.roundConfiguration = configuration; + getPlayerTwoTableModel().setColumnNames(configuration.getTrustGamePlayerTwoColumnNames()); + playerOneTableLabel.setText(roundConfiguration.getTrustGamePlayerOneAllocationLabel()); + playerTwoLabel.setText(roundConfiguration.getTrustGamePlayerTwoAllocationLabel()); + jLabel16.setText(roundConfiguration.getTrustGamePlayerTwoInstructionLabel()); } /** @@ -313,7 +321,7 @@ playerTwoLabel.setText("Player 2: Please enter data for ALL of the following allocations."); submitButton.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N - submitButton.setText("Submit"); + submitButton.setText("OK"); submitButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { submitButtonActionPerformed(evt); @@ -498,7 +506,7 @@ // default player action is to keep everything if (model == null) { - JOptionPane.showMessageDialog(this, "Please select the amount you would like to keep as player 1."); + JOptionPane.showMessageDialog(this, roundConfiguration.getPlayerOneAmountToKeepValidation()); return; } String selectedPlayerOneAction = model.getActionCommand(); @@ -509,7 +517,7 @@ Object value = playerTwoTable.getValueAt(rowIndex, 2); System.err.println("value is: " + value); if (value == null || "".equals(value)) { - JOptionPane.showMessageDialog(this, "Please enter the amount you would like to keep as player 2."); + JOptionPane.showMessageDialog(this, roundConfiguration.getPlayerTwoAmountToKeepValidation()); playerTwoTable.setColumnSelectionAllowed(true); playerTwoTable.setColumnSelectionInterval(2, 2); return; 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. |
From: Bitbucket <com...@bi...> - 2012-05-04 02:03:45
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/9293c7d74dfd/ changeset: 9293c7d74dfd user: alllee date: 2012-05-04 04:03:46 summary: adding server.xml customizable in-round-chat-instructions affected #: 3 files diff -r af1eeda5894979d7821c5b9c83087af995374a4d -r 9293c7d74dfd9beebcfc6949e5a7e38630406926 src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -685,7 +685,7 @@ } private String getInRoundChatInstructions() { - return getProperty("in-round-chat-instructions", "<p>You can chat during this round with all players visible on the screen.</p>"); + return getProperty("in-round-chat-instructions", getParentConfiguration().getInRoundChatInstructions()); } public String getTrustGameInstructions() { diff -r af1eeda5894979d7821c5b9c83087af995374a4d -r 9293c7d74dfd9beebcfc6949e5a7e38630406926 src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java @@ -155,6 +155,10 @@ return getIntProperty("server-sleep-interval", 50); } + public String getInRoundChatInstructions() { + return getProperty("in-round-chat-instructions", "<p>You can chat during this round with all players visible on the screen.</p>"); + } + public String getWaitingRoomInstructions() { return getProperty("waiting-room-instructions", "<h1>Please wait</h1><hr><p>Please wait while the rest of the participants complete the task.</p>"); } diff -r af1eeda5894979d7821c5b9c83087af995374a4d -r 9293c7d74dfd9beebcfc6949e5a7e38630406926 src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.java --- a/src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.java +++ b/src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.java @@ -29,11 +29,9 @@ private ForagingClient client; private class PlayerTwoTableModel extends AbstractTableModel { - private static final long serialVersionUID = 8044821545875471685L; private String[] columnNames = { "Amount sent by P1", "Total amount received", "Amount to keep", "Amount to return to P1" }; private Object[][] columnDataTable = { - { "0", "(3 x 0) = 0", 0.0d, 0.0d }, { "0.25", "(3 x 0.25) = 0.75", "", "" }, { "0.50", "(3 x 0.5) = 1.5", "", "" }, 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. |
From: Bitbucket <com...@bi...> - 2012-05-04 01:25:26
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/af1eeda58949/ changeset: af1eeda58949 user: alllee date: 2012-05-04 03:25:27 summary: ServerConfiguration dollars per token wasn't respecting dollars per token affected #: 1 file diff -r 059c6a69c53537aab034f9e0cf8067b28d2c9007 -r af1eeda5894979d7821c5b9c83087af995374a4d src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java @@ -110,7 +110,7 @@ } public double getDollarsPerToken() { - return DEFAULT_DOLLARS_PER_TOKEN; + return getDoubleProperty("dollars-per-token", DEFAULT_DOLLARS_PER_TOKEN); } public String getFinalRoundFacilitatorInstructions() { 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. |
From: Bitbucket <com...@bi...> - 2012-05-03 20:17:51
|
2 new commits in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/79f5da33995d/ changeset: 79f5da33995d branch: asu-foraging-2012 user: alllee date: 2012-05-03 20:48:39 summary: moving MovieCreatorProcessor into data package affected #: 3 files diff -r d6ccdb8b4c74a1786eb718021af8a001e877d841 -r 79f5da33995d744a27bb59d2a28249502746e6fa src/main/java/edu/asu/commons/foraging/data/ForagingSaveFileConverter.java --- a/src/main/java/edu/asu/commons/foraging/data/ForagingSaveFileConverter.java +++ b/src/main/java/edu/asu/commons/foraging/data/ForagingSaveFileConverter.java @@ -9,7 +9,7 @@ import edu.asu.commons.experiment.SaveFileProcessor; /** - * $Id: ForagingSaveFileConverter.java 526 2010-08-06 01:25:27Z alllee $ + * $Id$ * <p> * Save file processors used to convert binary data files from the foraging experiment. * @@ -31,8 +31,8 @@ new AggregateTokenSpatialDistributionProcessor(), new CollectedTokenSpatialDistributionProcessor(), new MovementStatisticsProcessor(), + new MovieCreatorProcessor(), new AggregateCollectedTokenNeighborProcessor() - // new MovieCreatorProcessor() )); Persister.processSaveFiles(allSaveFilesDirectory, processors); return true; diff -r d6ccdb8b4c74a1786eb718021af8a001e877d841 -r 79f5da33995d744a27bb59d2a28249502746e6fa src/main/java/edu/asu/commons/foraging/data/MovieCreatorProcessor.java --- /dev/null +++ b/src/main/java/edu/asu/commons/foraging/data/MovieCreatorProcessor.java @@ -0,0 +1,156 @@ +package edu.asu.commons.foraging.data; + +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.JFrame; +import javax.swing.SwingUtilities; + +import edu.asu.commons.event.PersistableEvent; +import edu.asu.commons.experiment.SaveFileProcessor; +import edu.asu.commons.experiment.SavedRoundData; +import edu.asu.commons.foraging.conf.RoundConfiguration; +import edu.asu.commons.foraging.event.AddClientEvent; +import edu.asu.commons.foraging.facilitator.GroupView; +import edu.asu.commons.foraging.model.GroupDataModel; +import edu.asu.commons.foraging.model.ServerDataModel; +import edu.asu.commons.foraging.util.*; + +/** + * $Id$ + * + * Foraging save file processor to create quicktime movies. + * + * @author <a href='mailto:All...@as...'>Allen Lee</a> + * @version $Rev: 522 $ + */ +class MovieCreatorProcessor extends SaveFileProcessor.Base { + + private VideoFormat videoFormat; + + public MovieCreatorProcessor() { + this(VideoFormat.PNG); + } + + public MovieCreatorProcessor(VideoFormat videoFormat) { + this.videoFormat = videoFormat; + } + + @Override + public void process(SavedRoundData savedRoundData, OutputStream stream) { + // hmm, there needs to be one output stream per group because we write 1 video per group. + // QuickTimeOutputStream quickTimeOutputStream = new QuickTimeOutputStream(stream, videoFormat); + ServerDataModel serverDataModel = (ServerDataModel) savedRoundData.getDataModel(); + RoundConfiguration roundConfiguration = (RoundConfiguration) savedRoundData.getRoundParameters(); + final List<GroupView> groupViewList = new ArrayList<GroupView>(); + final Map<GroupView, QuickTimeOutputStream> groupViewMap = new HashMap<GroupView, QuickTimeOutputStream>(); + serverDataModel.reinitialize(roundConfiguration); + List<JFrame> jframes = new ArrayList<JFrame>(); + Dimension dimension = new Dimension(800, 800); + File savedRoundDataFile = new File(savedRoundData.getSaveFilePath()); + String saveFilePath = savedRoundDataFile.getName(); + for (GroupDataModel groupDataModel: serverDataModel.getGroups()) { + GroupView groupView = new GroupView(dimension, groupDataModel); + groupView.setup(roundConfiguration); + groupViewList.add(groupView); + try { + File groupMovieFile = new File(savedRoundDataFile.getCanonicalPath() + "-group-" + groupDataModel.getGroupId() + "-" + saveFilePath + ".mov"); + groupViewMap.put(groupView, new QuickTimeOutputStream(groupMovieFile, videoFormat)); + } + catch (IOException exception) { + exception.printStackTrace(); + } + JFrame jframe = new JFrame("Group: " + groupDataModel.getGroupId()); + jframe.add(groupView); + jframe.pack(); + jframe.setVisible(true); + jframes.add(jframe); + } + // grab out all add client events to initialize the state of the game properly. + for (PersistableEvent event: savedRoundData.getActions()) { + if (event instanceof AddClientEvent) { + System.err.println("Adding client: " + event); + serverDataModel.apply(event); + } + } + IntervalChecker intervalChecker = new IntervalChecker(); + // 10 frames per second + intervalChecker.setUnitsPerInterval(100); + + for (PersistableEvent event: savedRoundData.getActions()) { + final long elapsedTimeInMillis = savedRoundData.getElapsedTime(event); + + serverDataModel.apply(event); + if ( intervalChecker.isIntervalElapsed(elapsedTimeInMillis) && serverDataModel.isDirty() ) { + + for (final GroupView groupView: groupViewList) { + try { + // groupView.repaint(); + final Dimension groupViewSize = groupView.getSize(); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + Graphics2D graphics = (Graphics2D) groupView.getGraphics(); + BufferedImage bufferedImage = graphics.getDeviceConfiguration().createCompatibleImage(groupViewSize.width, groupViewSize.height); + Graphics2D bufferedImageGraphics = bufferedImage.createGraphics(); + groupView.paint(bufferedImageGraphics); + try { + // 600 time scale units = 1 s + // 10 fps = one frame per 60 time scale units + groupViewMap.get(groupView).writeFrame(bufferedImage, 60); + } + catch (IOException exception) { + exception.printStackTrace(); + throw new RuntimeException(exception); + } + } + }); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + serverDataModel.setDirty(false); + + } + + } + for (QuickTimeOutputStream out : groupViewMap.values()) { + try { + out.close(); + } + catch (IOException exception) { + exception.printStackTrace(); + } + } + for (JFrame jframe : jframes) { + jframe.setVisible(false); + jframe.dispose(); + } + groupViewMap.clear(); + } + + + @Override + public void process(SavedRoundData savedRoundData, PrintWriter writer) { + throw new UnsupportedOperationException("This method is not suitable for this class (consider removing as requirement for super class)"); + } + + @Override + public String getOutputFileExtension() { + String videoFormatString = videoFormat.toString().toLowerCase(); + return String.format("-%s-movie.%s", videoFormatString, videoFormatString); + } +} diff -r d6ccdb8b4c74a1786eb718021af8a001e877d841 -r 79f5da33995d744a27bb59d2a28249502746e6fa src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java --- a/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java +++ /dev/null @@ -1,155 +0,0 @@ -package edu.asu.commons.foraging.util; - -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.swing.JFrame; -import javax.swing.SwingUtilities; - -import edu.asu.commons.event.PersistableEvent; -import edu.asu.commons.experiment.SaveFileProcessor; -import edu.asu.commons.experiment.SavedRoundData; -import edu.asu.commons.foraging.conf.RoundConfiguration; -import edu.asu.commons.foraging.event.AddClientEvent; -import edu.asu.commons.foraging.facilitator.GroupView; -import edu.asu.commons.foraging.model.GroupDataModel; -import edu.asu.commons.foraging.model.ServerDataModel; - -/** - * $Id$ - * - * Foraging save file processor to create quicktime movies. - * - * @author <a href='mailto:All...@as...'>Allen Lee</a> - * @version $Rev: 522 $ - */ -class MovieCreatorProcessor extends SaveFileProcessor.Base { - - private VideoFormat videoFormat; - - public MovieCreatorProcessor() { - this(VideoFormat.PNG); - } - - public MovieCreatorProcessor(VideoFormat videoFormat) { - this.videoFormat = videoFormat; - } - - @Override - public void process(SavedRoundData savedRoundData, OutputStream stream) { - // hmm, there needs to be one output stream per group because we write 1 video per group. - // QuickTimeOutputStream quickTimeOutputStream = new QuickTimeOutputStream(stream, videoFormat); - ServerDataModel serverDataModel = (ServerDataModel) savedRoundData.getDataModel(); - RoundConfiguration roundConfiguration = (RoundConfiguration) savedRoundData.getRoundParameters(); - final List<GroupView> groupViewList = new ArrayList<GroupView>(); - final Map<GroupView, QuickTimeOutputStream> groupViewMap = new HashMap<GroupView, QuickTimeOutputStream>(); - serverDataModel.reinitialize(roundConfiguration); - List<JFrame> jframes = new ArrayList<JFrame>(); - Dimension dimension = new Dimension(800, 800); - File savedRoundDataFile = new File(savedRoundData.getSaveFilePath()); - String saveFilePath = savedRoundDataFile.getName(); - for (GroupDataModel groupDataModel: serverDataModel.getGroups()) { - GroupView groupView = new GroupView(dimension, groupDataModel); - groupView.setup(roundConfiguration); - groupViewList.add(groupView); - try { - File groupMovieFile = new File(savedRoundDataFile.getCanonicalPath() + "-group-" + groupDataModel.getGroupId() + "-" + saveFilePath + ".mov"); - groupViewMap.put(groupView, new QuickTimeOutputStream(groupMovieFile, videoFormat)); - } - catch (IOException exception) { - exception.printStackTrace(); - } - JFrame jframe = new JFrame("Group: " + groupDataModel.getGroupId()); - jframe.add(groupView); - jframe.pack(); - jframe.setVisible(true); - jframes.add(jframe); - } - // grab out all add client events to initialize the state of the game properly. - for (PersistableEvent event: savedRoundData.getActions()) { - if (event instanceof AddClientEvent) { - System.err.println("Adding client: " + event); - serverDataModel.apply(event); - } - } - IntervalChecker intervalChecker = new IntervalChecker(); - // 10 frames per second - intervalChecker.setUnitsPerInterval(100); - - for (PersistableEvent event: savedRoundData.getActions()) { - final long elapsedTimeInMillis = savedRoundData.getElapsedTime(event); - - serverDataModel.apply(event); - if ( intervalChecker.isIntervalElapsed(elapsedTimeInMillis) && serverDataModel.isDirty() ) { - - for (final GroupView groupView: groupViewList) { - try { - // groupView.repaint(); - final Dimension groupViewSize = groupView.getSize(); - SwingUtilities.invokeAndWait(new Runnable() { - public void run() { - Graphics2D graphics = (Graphics2D) groupView.getGraphics(); - BufferedImage bufferedImage = graphics.getDeviceConfiguration().createCompatibleImage(groupViewSize.width, groupViewSize.height); - Graphics2D bufferedImageGraphics = bufferedImage.createGraphics(); - groupView.paint(bufferedImageGraphics); - try { - // 600 time scale units = 1 s - // 10 fps = one frame per 60 time scale units - groupViewMap.get(groupView).writeFrame(bufferedImage, 60); - } - catch (IOException exception) { - exception.printStackTrace(); - throw new RuntimeException(exception); - } - } - }); - } - catch (InterruptedException e) { - e.printStackTrace(); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } - } - serverDataModel.setDirty(false); - - } - - } - for (QuickTimeOutputStream out : groupViewMap.values()) { - try { - out.close(); - } - catch (IOException exception) { - exception.printStackTrace(); - } - } - for (JFrame jframe : jframes) { - jframe.setVisible(false); - jframe.dispose(); - } - groupViewMap.clear(); - } - - - @Override - public void process(SavedRoundData savedRoundData, PrintWriter writer) { - throw new UnsupportedOperationException("This method is not suitable for this class (consider removing as requirement for super class)"); - } - - @Override - public String getOutputFileExtension() { - String videoFormatString = videoFormat.toString().toLowerCase(); - return String.format("-%s-movie.%s", videoFormatString, videoFormatString); - } -} https://bitbucket.org/virtualcommons/foraging/changeset/059c6a69c535/ changeset: 059c6a69c535 user: alllee date: 2012-05-03 20:58:51 summary: merging movie creator processing enabling back into default affected #: 3 files diff -r d247b710a9b39018cad2004a373a29df8e955555 -r 059c6a69c53537aab034f9e0cf8067b28d2c9007 src/main/java/edu/asu/commons/foraging/data/ForagingSaveFileConverter.java --- a/src/main/java/edu/asu/commons/foraging/data/ForagingSaveFileConverter.java +++ b/src/main/java/edu/asu/commons/foraging/data/ForagingSaveFileConverter.java @@ -9,7 +9,7 @@ import edu.asu.commons.experiment.SaveFileProcessor; /** - * $Id: ForagingSaveFileConverter.java 526 2010-08-06 01:25:27Z alllee $ + * $Id$ * <p> * Save file processors used to convert binary data files from the foraging experiment. * @@ -31,8 +31,8 @@ new AggregateTokenSpatialDistributionProcessor(), new CollectedTokenSpatialDistributionProcessor(), new MovementStatisticsProcessor(), + new MovieCreatorProcessor(), new AggregateCollectedTokenNeighborProcessor() - // new MovieCreatorProcessor() )); Persister.processSaveFiles(allSaveFilesDirectory, processors); return true; diff -r d247b710a9b39018cad2004a373a29df8e955555 -r 059c6a69c53537aab034f9e0cf8067b28d2c9007 src/main/java/edu/asu/commons/foraging/data/MovieCreatorProcessor.java --- /dev/null +++ b/src/main/java/edu/asu/commons/foraging/data/MovieCreatorProcessor.java @@ -0,0 +1,156 @@ +package edu.asu.commons.foraging.data; + +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.JFrame; +import javax.swing.SwingUtilities; + +import edu.asu.commons.event.PersistableEvent; +import edu.asu.commons.experiment.SaveFileProcessor; +import edu.asu.commons.experiment.SavedRoundData; +import edu.asu.commons.foraging.conf.RoundConfiguration; +import edu.asu.commons.foraging.event.AddClientEvent; +import edu.asu.commons.foraging.facilitator.GroupView; +import edu.asu.commons.foraging.model.GroupDataModel; +import edu.asu.commons.foraging.model.ServerDataModel; +import edu.asu.commons.foraging.util.*; + +/** + * $Id$ + * + * Foraging save file processor to create quicktime movies. + * + * @author <a href='mailto:All...@as...'>Allen Lee</a> + * @version $Rev: 522 $ + */ +class MovieCreatorProcessor extends SaveFileProcessor.Base { + + private VideoFormat videoFormat; + + public MovieCreatorProcessor() { + this(VideoFormat.PNG); + } + + public MovieCreatorProcessor(VideoFormat videoFormat) { + this.videoFormat = videoFormat; + } + + @Override + public void process(SavedRoundData savedRoundData, OutputStream stream) { + // hmm, there needs to be one output stream per group because we write 1 video per group. + // QuickTimeOutputStream quickTimeOutputStream = new QuickTimeOutputStream(stream, videoFormat); + ServerDataModel serverDataModel = (ServerDataModel) savedRoundData.getDataModel(); + RoundConfiguration roundConfiguration = (RoundConfiguration) savedRoundData.getRoundParameters(); + final List<GroupView> groupViewList = new ArrayList<GroupView>(); + final Map<GroupView, QuickTimeOutputStream> groupViewMap = new HashMap<GroupView, QuickTimeOutputStream>(); + serverDataModel.reinitialize(roundConfiguration); + List<JFrame> jframes = new ArrayList<JFrame>(); + Dimension dimension = new Dimension(800, 800); + File savedRoundDataFile = new File(savedRoundData.getSaveFilePath()); + String saveFilePath = savedRoundDataFile.getName(); + for (GroupDataModel groupDataModel: serverDataModel.getGroups()) { + GroupView groupView = new GroupView(dimension, groupDataModel); + groupView.setup(roundConfiguration); + groupViewList.add(groupView); + try { + File groupMovieFile = new File(savedRoundDataFile.getCanonicalPath() + "-group-" + groupDataModel.getGroupId() + "-" + saveFilePath + ".mov"); + groupViewMap.put(groupView, new QuickTimeOutputStream(groupMovieFile, videoFormat)); + } + catch (IOException exception) { + exception.printStackTrace(); + } + JFrame jframe = new JFrame("Group: " + groupDataModel.getGroupId()); + jframe.add(groupView); + jframe.pack(); + jframe.setVisible(true); + jframes.add(jframe); + } + // grab out all add client events to initialize the state of the game properly. + for (PersistableEvent event: savedRoundData.getActions()) { + if (event instanceof AddClientEvent) { + System.err.println("Adding client: " + event); + serverDataModel.apply(event); + } + } + IntervalChecker intervalChecker = new IntervalChecker(); + // 10 frames per second + intervalChecker.setUnitsPerInterval(100); + + for (PersistableEvent event: savedRoundData.getActions()) { + final long elapsedTimeInMillis = savedRoundData.getElapsedTime(event); + + serverDataModel.apply(event); + if ( intervalChecker.isIntervalElapsed(elapsedTimeInMillis) && serverDataModel.isDirty() ) { + + for (final GroupView groupView: groupViewList) { + try { + // groupView.repaint(); + final Dimension groupViewSize = groupView.getSize(); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + Graphics2D graphics = (Graphics2D) groupView.getGraphics(); + BufferedImage bufferedImage = graphics.getDeviceConfiguration().createCompatibleImage(groupViewSize.width, groupViewSize.height); + Graphics2D bufferedImageGraphics = bufferedImage.createGraphics(); + groupView.paint(bufferedImageGraphics); + try { + // 600 time scale units = 1 s + // 10 fps = one frame per 60 time scale units + groupViewMap.get(groupView).writeFrame(bufferedImage, 60); + } + catch (IOException exception) { + exception.printStackTrace(); + throw new RuntimeException(exception); + } + } + }); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + serverDataModel.setDirty(false); + + } + + } + for (QuickTimeOutputStream out : groupViewMap.values()) { + try { + out.close(); + } + catch (IOException exception) { + exception.printStackTrace(); + } + } + for (JFrame jframe : jframes) { + jframe.setVisible(false); + jframe.dispose(); + } + groupViewMap.clear(); + } + + + @Override + public void process(SavedRoundData savedRoundData, PrintWriter writer) { + throw new UnsupportedOperationException("This method is not suitable for this class (consider removing as requirement for super class)"); + } + + @Override + public String getOutputFileExtension() { + String videoFormatString = videoFormat.toString().toLowerCase(); + return String.format("-%s-movie.%s", videoFormatString, videoFormatString); + } +} diff -r d247b710a9b39018cad2004a373a29df8e955555 -r 059c6a69c53537aab034f9e0cf8067b28d2c9007 src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java --- a/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java +++ /dev/null @@ -1,155 +0,0 @@ -package edu.asu.commons.foraging.util; - -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.swing.JFrame; -import javax.swing.SwingUtilities; - -import edu.asu.commons.event.PersistableEvent; -import edu.asu.commons.experiment.SaveFileProcessor; -import edu.asu.commons.experiment.SavedRoundData; -import edu.asu.commons.foraging.conf.RoundConfiguration; -import edu.asu.commons.foraging.event.AddClientEvent; -import edu.asu.commons.foraging.facilitator.GroupView; -import edu.asu.commons.foraging.model.GroupDataModel; -import edu.asu.commons.foraging.model.ServerDataModel; - -/** - * $Id$ - * - * Foraging save file processor to create quicktime movies. - * - * @author <a href='mailto:All...@as...'>Allen Lee</a> - * @version $Rev: 522 $ - */ -class MovieCreatorProcessor extends SaveFileProcessor.Base { - - private VideoFormat videoFormat; - - public MovieCreatorProcessor() { - this(VideoFormat.PNG); - } - - public MovieCreatorProcessor(VideoFormat videoFormat) { - this.videoFormat = videoFormat; - } - - @Override - public void process(SavedRoundData savedRoundData, OutputStream stream) { - // hmm, there needs to be one output stream per group because we write 1 video per group. - // QuickTimeOutputStream quickTimeOutputStream = new QuickTimeOutputStream(stream, videoFormat); - ServerDataModel serverDataModel = (ServerDataModel) savedRoundData.getDataModel(); - RoundConfiguration roundConfiguration = (RoundConfiguration) savedRoundData.getRoundParameters(); - final List<GroupView> groupViewList = new ArrayList<GroupView>(); - final Map<GroupView, QuickTimeOutputStream> groupViewMap = new HashMap<GroupView, QuickTimeOutputStream>(); - serverDataModel.reinitialize(roundConfiguration); - List<JFrame> jframes = new ArrayList<JFrame>(); - Dimension dimension = new Dimension(800, 800); - File savedRoundDataFile = new File(savedRoundData.getSaveFilePath()); - String saveFilePath = savedRoundDataFile.getName(); - for (GroupDataModel groupDataModel: serverDataModel.getGroups()) { - GroupView groupView = new GroupView(dimension, groupDataModel); - groupView.setup(roundConfiguration); - groupViewList.add(groupView); - try { - File groupMovieFile = new File(savedRoundDataFile.getCanonicalPath() + "-group-" + groupDataModel.getGroupId() + "-" + saveFilePath + ".mov"); - groupViewMap.put(groupView, new QuickTimeOutputStream(groupMovieFile, videoFormat)); - } - catch (IOException exception) { - exception.printStackTrace(); - } - JFrame jframe = new JFrame("Group: " + groupDataModel.getGroupId()); - jframe.add(groupView); - jframe.pack(); - jframe.setVisible(true); - jframes.add(jframe); - } - // grab out all add client events to initialize the state of the game properly. - for (PersistableEvent event: savedRoundData.getActions()) { - if (event instanceof AddClientEvent) { - System.err.println("Adding client: " + event); - serverDataModel.apply(event); - } - } - IntervalChecker intervalChecker = new IntervalChecker(); - // 10 frames per second - intervalChecker.setUnitsPerInterval(100); - - for (PersistableEvent event: savedRoundData.getActions()) { - final long elapsedTimeInMillis = savedRoundData.getElapsedTime(event); - - serverDataModel.apply(event); - if ( intervalChecker.isIntervalElapsed(elapsedTimeInMillis) && serverDataModel.isDirty() ) { - - for (final GroupView groupView: groupViewList) { - try { - // groupView.repaint(); - final Dimension groupViewSize = groupView.getSize(); - SwingUtilities.invokeAndWait(new Runnable() { - public void run() { - Graphics2D graphics = (Graphics2D) groupView.getGraphics(); - BufferedImage bufferedImage = graphics.getDeviceConfiguration().createCompatibleImage(groupViewSize.width, groupViewSize.height); - Graphics2D bufferedImageGraphics = bufferedImage.createGraphics(); - groupView.paint(bufferedImageGraphics); - try { - // 600 time scale units = 1 s - // 10 fps = one frame per 60 time scale units - groupViewMap.get(groupView).writeFrame(bufferedImage, 60); - } - catch (IOException exception) { - exception.printStackTrace(); - throw new RuntimeException(exception); - } - } - }); - } - catch (InterruptedException e) { - e.printStackTrace(); - } - catch (InvocationTargetException e) { - e.printStackTrace(); - } - } - serverDataModel.setDirty(false); - - } - - } - for (QuickTimeOutputStream out : groupViewMap.values()) { - try { - out.close(); - } - catch (IOException exception) { - exception.printStackTrace(); - } - } - for (JFrame jframe : jframes) { - jframe.setVisible(false); - jframe.dispose(); - } - groupViewMap.clear(); - } - - - @Override - public void process(SavedRoundData savedRoundData, PrintWriter writer) { - throw new UnsupportedOperationException("This method is not suitable for this class (consider removing as requirement for super class)"); - } - - @Override - public String getOutputFileExtension() { - String videoFormatString = videoFormat.toString().toLowerCase(); - return String.format("-%s-movie.%s", videoFormatString, videoFormatString); - } -} 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. |
From: A L. <iss...@bi...> - 2012-04-21 06:26:49
|
--- you can reply above this line --- New issue 52: look into geodjango for storing location data https://bitbucket.org/virtualcommons/vcweb/issue/52/look-into-geodjango-for-storing-location A Lee / alllee on Sat, 21 Apr 2012 08:26:39 +0200: Might be too much work for just one fork. https://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/ Responsible: alllee -- This is an issue notification from bitbucket.org. You are receiving this either because you are the owner of the issue, or you are following the issue. |
From: A L. <iss...@bi...> - 2012-04-16 18:13:53
|
--- you can reply above this line --- New issue 51: javascript charting libraries https://bitbucket.org/virtualcommons/vcweb/issue/51/javascript-charting-libraries A Lee / alllee on Mon, 16 Apr 2012 20:04:58 +0200: http://code.shutterstock.com/rickshaw/ Responsible: alllee -- This is an issue notification from bitbucket.org. You are receiving this either because you are the owner of the issue, or you are following the issue. |
From: A L. <iss...@bi...> - 2012-04-16 07:19:32
|
--- you can reply above this line --- New issue 50: setup oauth 2.0 support https://bitbucket.org/virtualcommons/vcweb/issue/50/setup-oauth-20-support A Lee / alllee on Mon, 16 Apr 2012 09:19:20 +0200: It looks like https://github.com/omab/django-social-auth#readme might be well worth the integration time. Responsible: alllee -- This is an issue notification from bitbucket.org. You are receiving this either because you are the owner of the issue, or you are following the issue. |
From: Bitbucket <com...@bi...> - 2012-04-13 22:18:05
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/d247b710a9b3/ changeset: d247b710a9b3 user: alllee date: 2012-04-14 00:17:55 summary: removing hard coded references to dollars / cents affected #: 2 files diff -r 4e12e472391aad5755d693e329e8bdd8ca728984 -r d247b710a9b39018cad2004a373a29df8e955555 src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.form --- a/src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.form +++ b/src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.form @@ -264,7 +264,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="0 cents"/> + <Property name="text" type="java.lang.String" value="0"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -278,7 +278,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="1 dollar"/> + <Property name="text" type="java.lang.String" value="1"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -292,7 +292,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="(3 x 1) = 3 dollars"/> + <Property name="text" type="java.lang.String" value="(3 x 1) = 3"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -307,7 +307,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="(3 x 0.75) = 2.25 dollars"/> + <Property name="text" type="java.lang.String" value="(3 x 0.75) = 2.25"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -322,7 +322,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="75 cents"/> + <Property name="text" type="java.lang.String" value="0.75"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -336,7 +336,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="25 cents"/> + <Property name="text" type="java.lang.String" value="0.25"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -366,7 +366,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="50 cents"/> + <Property name="text" type="java.lang.String" value="0.50"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -380,7 +380,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="50 cents"/> + <Property name="text" type="java.lang.String" value="0.50"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -394,7 +394,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="(3 x 0.5) = 1.5 dollars"/> + <Property name="text" type="java.lang.String" value="(3 x 0.5) = 1.5"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -417,7 +417,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="75 cents"/> + <Property name="text" type="java.lang.String" value="0.75"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -431,7 +431,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="25 cents"/> + <Property name="text" type="java.lang.String" value="0.25"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -445,7 +445,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="(3 x 0.25) = 0.75 cents"/> + <Property name="text" type="java.lang.String" value="(3 x 0.25) = 0.75"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -476,7 +476,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="1 dollar"/> + <Property name="text" type="java.lang.String" value="1"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -490,7 +490,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="0 cents"/> + <Property name="text" type="java.lang.String" value="0"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> @@ -504,7 +504,7 @@ <Font name="Tahoma" size="14" style="0"/></Property><Property name="horizontalAlignment" type="int" value="0"/> - <Property name="text" type="java.lang.String" value="(3 x 0) = 0 cents"/> + <Property name="text" type="java.lang.String" value="(3 x 0) = 0"/><Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"><Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"><LineBorder/> diff -r 4e12e472391aad5755d693e329e8bdd8ca728984 -r d247b710a9b39018cad2004a373a29df8e955555 src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.java --- a/src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.java +++ b/src/main/java/edu/asu/commons/foraging/ui/TrustGamePanel.java @@ -34,11 +34,11 @@ private String[] columnNames = { "Amount sent by P1", "Total amount received", "Amount to keep", "Amount to return to P1" }; private Object[][] columnDataTable = { - { "0 cents", "(3 x 0) = 0 cents", 0.0d, 0.0d }, - { "25 cents", "(3 x 0.25) = 75 cents", "", "" }, - { "50 cents", "(3 x 0.5) = 1.5 dollars", "", "" }, - { "75 cents", "(3 x 0.75) = 2.25 dollars", "", "" }, - { "1 dollar", "(3 x 1) = 3 dollars", "", "" } + { "0", "(3 x 0) = 0", 0.0d, 0.0d }, + { "0.25", "(3 x 0.25) = 0.75", "", "" }, + { "0.50", "(3 x 0.5) = 1.5", "", "" }, + { "0.75", "(3 x 0.75) = 2.25", "", "" }, + { "1.0", "(3 x 1) = 3", "", "" } }; @Override @@ -218,34 +218,34 @@ jLabel1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel1.setText("0 cents"); + jLabel1.setText("0"); jLabel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel2.setText("1 dollar"); + jLabel2.setText("1"); jLabel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel4.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel4.setText("(3 x 1) = 3 dollars"); + jLabel4.setText("(3 x 1) = 3"); jLabel4.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel4.setFocusable(false); jLabel5.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel5.setText("(3 x 0.75) = 2.25 dollars"); + jLabel5.setText("(3 x 0.75) = 2.25"); jLabel5.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel5.setFocusable(false); jLabel3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel3.setText("75 cents"); + jLabel3.setText("0.75"); jLabel3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel6.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel6.setText("25 cents"); + jLabel6.setText("0.25"); jLabel6.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); playerOneActionButtonGroup.add(playerOneRadioButton1); @@ -256,17 +256,17 @@ jLabel7.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel7.setText("50 cents"); + jLabel7.setText("0.50"); jLabel7.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel8.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel8.setText("50 cents"); + jLabel8.setText("0.50"); jLabel8.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel9.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel9.setText("(3 x 0.5) = 1.5 dollars"); + jLabel9.setText("(3 x 0.5) = 1.5"); jLabel9.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel9.setFocusable(false); @@ -275,17 +275,17 @@ jLabel10.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel10.setText("75 cents"); + jLabel10.setText("0.75"); jLabel10.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel11.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel11.setText("25 cents"); + jLabel11.setText("0.25"); jLabel11.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel12.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel12.setText("(3 x 0.25) = 0.75 cents"); + jLabel12.setText("(3 x 0.25) = 0.75"); jLabel12.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel12.setFocusable(false); @@ -297,17 +297,17 @@ jLabel13.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel13.setText("1 dollar"); + jLabel13.setText("1"); jLabel13.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel14.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel14.setText("0 cents"); + jLabel14.setText("0"); jLabel14.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel15.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel15.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel15.setText("(3 x 0) = 0 cents"); + jLabel15.setText("(3 x 0) = 0"); jLabel15.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel15.setFocusable(false); 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. |
From: Bitbucket <com...@bi...> - 2012-04-13 22:01:16
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/4e12e472391a/ changeset: 4e12e472391a user: alllee date: 2012-04-14 00:01:00 summary: retrofitting summary data processor to produce data for Stockholm experimenters affected #: 1 file diff -r 13b37a442dffba713ea0ceba4170a96acbc0f7cd -r 4e12e472391aad5755d693e329e8bdd8ca728984 src/main/java/edu/asu/commons/foraging/data/SummaryProcessor.java --- a/src/main/java/edu/asu/commons/foraging/data/SummaryProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/data/SummaryProcessor.java @@ -30,9 +30,11 @@ public void process(SavedRoundData savedRoundData, PrintWriter writer) { ServerDataModel serverDataModel = (ServerDataModel) savedRoundData.getDataModel(); List<GroupDataModel> groups = serverDataModel.getOrderedGroups(); + String header = "Participant, Group, Collected tokens, Given punishment, Received punishment"; + writer.println(header); for (GroupDataModel group: groups) { - int totalConsumedGroupTokens = 0; - ArrayList<String> clientTokens = new ArrayList<String>(); + int totalTokensHarvestedThisRound = 0; + int totalTokensHarvested = 0; ArrayList<ClientData> clientDataList = new ArrayList<ClientData>(group.getClientDataMap().values()); Collections.sort(clientDataList, new Comparator<ClientData>() { @Override @@ -41,16 +43,15 @@ } }); for (ClientData data : clientDataList) { - clientTokens.add(String.format("%s, %s", data, data.getTotalTokens())); - totalConsumedGroupTokens += data.getTotalTokens(); + writer.println(String.format("%s, %s, %s, %s, %s", + data.getId(), group, data.getCurrentTokens(), data.getSanctionCosts(), data.getSanctionPenalties())); + totalTokensHarvestedThisRound += data.getCurrentTokens(); + totalTokensHarvested += data.getTotalTokens(); } - writer.println( - String.format("%s, %s, %s, %s", - group, - Utils.join(',', clientTokens), - group.getResourceDistributionSize(), - totalConsumedGroupTokens) - ); + writer.println(String.format("%s, %d tokens harvested this round, %d tokens harvested over all rounds, %s", group, + totalTokensHarvestedThisRound, + totalTokensHarvested, + Utils.join(',', clientDataList))); } Map<GroupDataModel, SortedSet<ChatRequest>> chatRequestMap = new HashMap<GroupDataModel, SortedSet<ChatRequest>>(); SortedSet<ChatRequest> allChatRequests = savedRoundData.getChatRequests(); 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. |
From: Bitbucket <com...@bi...> - 2012-04-13 19:49:55
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/13b37a442dff/ changeset: 13b37a442dff user: alllee date: 2012-04-13 21:49:44 summary: setting default savefile.dir to local experiment-data dir affected #: 1 file diff -r ea41070ef5c526183d0d2b4fbd86118ba4e08d72 -r 13b37a442dffba713ea0ceba4170a96acbc0f7cd build.xml --- a/build.xml +++ b/build.xml @@ -84,7 +84,7 @@ test - Run all JUnit in the test source tree. build-all - builds the client, server, and facilitator jars. deploy - invokes build-all and then copies the client and facilitator jars to ${web.dir} - convert - invokes the ForagingSaveFileConverter to process the savefiles in the raw-data directory or as specified by -Dsavefile.dir=foo + convert - invokes the ForagingSaveFileConverter to process the savefiles in the experiment-data directory or as specified by -Dsavefile.dir=foo </echo></target><target name="build-all" depends="facilitator-jar, client-jar, server-jar, compile"/> @@ -281,8 +281,8 @@ </junit></target><property name="savefile.converter.class" value="edu.asu.commons.foraging.data.ForagingSaveFileConverter"/> - <!-- default savefile directory is the raw-data directory --> - <property name="savefile.dir" value="raw-data"/> + <!-- default savefile directory is the experiment-data directory --> + <property name="savefile.dir" value="experiment-data"/><target name="convert" depends="compile"><java classname="${savefile.converter.class}" classpathref="project.classpath" fork="yes"><arg value="${savefile.dir}"/> 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. |
From: Bitbucket <com...@bi...> - 2012-04-11 22:04:17
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/changeset/87f79cd356df/ changeset: 87f79cd356df user: alllee date: 2012-04-12 00:04:07 summary: minor formatting changes affected #: 1 file diff -r e5ca3f6531adb3c270830bc97289560c5d2af71b -r 87f79cd356df33c02f7a32183f3789c3e974ad16 src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java --- a/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java +++ b/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java @@ -79,8 +79,7 @@ super(configuration); serverDataModel = new ServerDataModel(); serverDataModel.setEventChannel(getEventChannel()); - serverDataModel.setRoundConfiguration(configuration - .getCurrentParameters()); + serverDataModel.setRoundConfiguration(configuration.getCurrentParameters()); persister = new IrrigationPersister(getEventChannel(), configuration); initializeFacilitatorHandlers(); initializeClientHandlers(); @@ -88,8 +87,7 @@ @SuppressWarnings("rawtypes") private void initializeFacilitatorHandlers() { - addEventProcessor(new EventTypeProcessor<FacilitatorRegistrationRequest>( - FacilitatorRegistrationRequest.class) { + addEventProcessor(new EventTypeProcessor<FacilitatorRegistrationRequest>(FacilitatorRegistrationRequest.class) { @Override public void handle(FacilitatorRegistrationRequest event) { getLogger().info("facilitator registered: " + event.getId()); @@ -116,9 +114,8 @@ @Override public void handle(BeginRoundRequest event) { if (!event.getId().equals(getFacilitatorId())) { - sendFacilitatorMessage(String - .format("facilitator is [%s] but received begin round request from non-facilitator [%s]", - getFacilitatorId(), event.getId())); + sendFacilitatorMessage(String.format("facilitator is [%s] but received begin round request from non-facilitator [%s]", + getFacilitatorId(), event.getId())); return; } // ignore the request if not every group has submit their @@ -129,22 +126,18 @@ roundSignal.notifyAll(); } } else { - sendFacilitatorMessage(String - .format("Cannot start round, %d of %d clients have submitted token investments", - submittedClients, clients.size())); + sendFacilitatorMessage(String.format("Cannot start round, %d of %d clients have submitted token investments", + submittedClients, clients.size())); } } }); - addEventProcessor(new EventTypeProcessor<EndRoundRequest>( - EndRoundRequest.class) { + addEventProcessor(new EventTypeProcessor<EndRoundRequest>(EndRoundRequest.class) { @Override public void handleInExperimentThread(EndRoundRequest request) { currentRoundDuration.stop(); } - }); - addEventProcessor(new EventTypeProcessor<BeginChatRoundRequest>( - BeginChatRoundRequest.class) { + addEventProcessor(new EventTypeProcessor<BeginChatRoundRequest>(BeginChatRoundRequest.class) { @Override public void handle(BeginChatRoundRequest request) { // XXX: the participants have already been added to the data @@ -165,8 +158,7 @@ } } }); - addEventProcessor(new EventTypeProcessor<ShowRequest>( - ShowRequest.class, true) { + addEventProcessor(new EventTypeProcessor<ShowRequest>(ShowRequest.class, true) { @Override public void handle(ShowRequest request) { /* @@ -182,8 +174,7 @@ } } } else { - sendFacilitatorMessage("Received invalid show request " - + request + " from " + getFacilitatorId()); + sendFacilitatorMessage("Received invalid show request " + request + " from " + getFacilitatorId()); } } }); @@ -194,8 +185,7 @@ * encapsulates the handling of a specific kind of message event. */ private void initializeClientHandlers() { - addEventProcessor(new EventTypeProcessor<SocketIdentifierUpdateRequest>( - SocketIdentifierUpdateRequest.class) { + addEventProcessor(new EventTypeProcessor<SocketIdentifierUpdateRequest>(SocketIdentifierUpdateRequest.class) { @Override public void handle(SocketIdentifierUpdateRequest request) { SocketIdentifier socketId = request.getSocketIdentifier(); @@ -205,13 +195,11 @@ + socketId); return; } - SocketIdentifier clientSocketId = (SocketIdentifier) clientData - .getId(); + SocketIdentifier clientSocketId = (SocketIdentifier) clientData.getId(); clientSocketId.setStationNumber(request.getStationNumber()); } }); - addEventProcessor(new EventTypeProcessor<ConnectionEvent>( - ConnectionEvent.class) { + addEventProcessor(new EventTypeProcessor<ConnectionEvent>(ConnectionEvent.class) { @Override public void handle(ConnectionEvent event) { sendFacilitatorMessage("incoming connection: " + event); @@ -222,12 +210,10 @@ clients.put(identifier, clientData); serverDataModel.addClient(clientData); } - transmit(new RegistrationEvent(clientData, - getRoundConfiguration())); + transmit(new RegistrationEvent(clientData, getRoundConfiguration())); } }); - addEventProcessor(new EventTypeProcessor<DisconnectionRequest>( - DisconnectionRequest.class) { + addEventProcessor(new EventTypeProcessor<DisconnectionRequest>(DisconnectionRequest.class) { @Override public void handle(DisconnectionRequest request) { sendFacilitatorMessage("irrigation server handling disconnection request: " @@ -255,12 +241,10 @@ // relay to all clients in this client's group. boolean restrictedVisibility = getRoundConfiguration() .isRestrictedVisibility(); - for (ClientData clientData : clients.get(source) - .getGroupDataModel().getClientDataMap().values()) { + for (ClientData clientData : clients.get(source).getGroupDataModel().getClientDataMap().values()) { Identifier targetId = clientData.getId(); if (targetId.equals(source) - || (restrictedVisibility && !sendingClient - .isImmediateNeighbor(clientData))) { + || (restrictedVisibility && !sendingClient.isImmediateNeighbor(clientData))) { // don't send the message if the target is the // source or we're in a restricted visibility // condition and the client isn't an immediate @@ -274,8 +258,7 @@ } } else { allTargets.add(clients.get(target)); - ChatEvent chatEvent = new ChatEvent(target, - request.getMessage(), source); + ChatEvent chatEvent = new ChatEvent(target, request.getMessage(), source); transmit(chatEvent); } sendFacilitatorMessage(String.format("%s->%s: %s", @@ -283,8 +266,7 @@ persister.store(request); } }); - addEventProcessor(new EventTypeProcessor<InvestedTokensEvent>( - InvestedTokensEvent.class) { + addEventProcessor(new EventTypeProcessor<InvestedTokensEvent>(InvestedTokensEvent.class) { @Override public void handle(InvestedTokensEvent event) { if (isTokenInvestmentComplete()) { @@ -292,8 +274,7 @@ + event); return; } - clients.get(event.getId()).setInvestedTokens( - event.getInvestedTokens()); + clients.get(event.getId()).setInvestedTokens(event.getInvestedTokens()); submittedClients++; if (isTokenInvestmentComplete()) { // everyone's submitted their tokens so we can calculate the @@ -304,8 +285,7 @@ } } }); - addEventProcessor(new EventTypeProcessor<QuizResponseEvent>( - QuizResponseEvent.class) { + addEventProcessor(new EventTypeProcessor<QuizResponseEvent>(QuizResponseEvent.class) { private volatile int numberOfCompletedQuizzes = 0; @Override @@ -324,14 +304,12 @@ persister.store(quizResponseEvent); } }); - addEventProcessor(new EventTypeProcessor<OpenGateEvent>( - OpenGateEvent.class) { + addEventProcessor(new EventTypeProcessor<OpenGateEvent>(OpenGateEvent.class) { public void handle(OpenGateEvent event) { clients.get(event.getId()).openGate(); } }); - addEventProcessor(new EventTypeProcessor<CloseGateEvent>( - CloseGateEvent.class) { + addEventProcessor(new EventTypeProcessor<CloseGateEvent>(CloseGateEvent.class) { public void handle(CloseGateEvent event) { clients.get(event.getId()).closeGate(); } @@ -400,18 +378,17 @@ } public static void main(String[] args) { - IrrigationServer server = new IrrigationServer( - new ServerConfiguration()); + IrrigationServer server = new IrrigationServer(new ServerConfiguration()); server.start(); server.repl(); } private void shuffleParticipants() { serverDataModel.clear(); - List<ClientData> clientDataList = new ArrayList<ClientData>( - clients.values()); + List<ClientData> clientDataList = new ArrayList<ClientData>(clients.values()); // randomize the client data list Collections.shuffle(clientDataList); + sendFacilitatorMessage("shuffling participants: " + clientDataList); // re-add each the clients to the server data model for (ClientData data : clientDataList) { serverDataModel.addClient(data); @@ -575,7 +552,7 @@ @Override public void processReplInput(String input, BufferedReader reader) { if ("clients".equals(input)) { - System.err.println("clients: " + clients); + sendFacilitatorMessage(String.format("%d clients: %s", clients.size(), clients)); } } Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: Bitbucket <com...@bi...> - 2012-04-11 22:03:43
|
2 new commits in irrigation: https://bitbucket.org/virtualcommons/irrigation/changeset/0526dad3d46d/ changeset: 0526dad3d46d branch: stable user: alllee date: 2012-04-11 23:58:42 summary: minor diagnostics affected #: 1 file diff -r 7a3f49195c80277e4021aed495010ec1b98f63e0 -r 0526dad3d46d4a9336fb88d06262e8deb29bb3aa src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java --- a/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java +++ b/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java @@ -408,10 +408,10 @@ private void shuffleParticipants() { serverDataModel.clear(); - List<ClientData> clientDataList = new ArrayList<ClientData>( - clients.values()); + List<ClientData> clientDataList = new ArrayList<ClientData>(clients.values()); // randomize the client data list Collections.shuffle(clientDataList); + sendFacilitatorMessage("shuffling participants: " + clientDataList); // re-add each the clients to the server data model for (ClientData data : clientDataList) { serverDataModel.addClient(data); https://bitbucket.org/virtualcommons/irrigation/changeset/8ff3c9cf0274/ changeset: 8ff3c9cf0274 branch: stable user: alllee date: 2012-04-12 00:03:29 summary: minor formatting changes affected #: 1 file diff -r 0526dad3d46d4a9336fb88d06262e8deb29bb3aa -r 8ff3c9cf0274dfeba84d50a6787b41b752235ce7 src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java --- a/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java +++ b/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java @@ -79,8 +79,7 @@ super(configuration); serverDataModel = new ServerDataModel(); serverDataModel.setEventChannel(getEventChannel()); - serverDataModel.setRoundConfiguration(configuration - .getCurrentParameters()); + serverDataModel.setRoundConfiguration(configuration.getCurrentParameters()); persister = new IrrigationPersister(getEventChannel(), configuration); initializeFacilitatorHandlers(); initializeClientHandlers(); @@ -88,8 +87,7 @@ @SuppressWarnings("rawtypes") private void initializeFacilitatorHandlers() { - addEventProcessor(new EventTypeProcessor<FacilitatorRegistrationRequest>( - FacilitatorRegistrationRequest.class) { + addEventProcessor(new EventTypeProcessor<FacilitatorRegistrationRequest>(FacilitatorRegistrationRequest.class) { @Override public void handle(FacilitatorRegistrationRequest event) { getLogger().info("facilitator registered: " + event.getId()); @@ -116,9 +114,8 @@ @Override public void handle(BeginRoundRequest event) { if (!event.getId().equals(getFacilitatorId())) { - sendFacilitatorMessage(String - .format("facilitator is [%s] but received begin round request from non-facilitator [%s]", - getFacilitatorId(), event.getId())); + sendFacilitatorMessage(String.format("facilitator is [%s] but received begin round request from non-facilitator [%s]", + getFacilitatorId(), event.getId())); return; } // ignore the request if not every group has submit their @@ -129,22 +126,18 @@ roundSignal.notifyAll(); } } else { - sendFacilitatorMessage(String - .format("Cannot start round, %d of %d clients have submitted token investments", - submittedClients, clients.size())); + sendFacilitatorMessage(String.format("Cannot start round, %d of %d clients have submitted token investments", + submittedClients, clients.size())); } } }); - addEventProcessor(new EventTypeProcessor<EndRoundRequest>( - EndRoundRequest.class) { + addEventProcessor(new EventTypeProcessor<EndRoundRequest>(EndRoundRequest.class) { @Override public void handleInExperimentThread(EndRoundRequest request) { currentRoundDuration.stop(); } - }); - addEventProcessor(new EventTypeProcessor<BeginChatRoundRequest>( - BeginChatRoundRequest.class) { + addEventProcessor(new EventTypeProcessor<BeginChatRoundRequest>(BeginChatRoundRequest.class) { @Override public void handle(BeginChatRoundRequest request) { // XXX: the participants have already been added to the data @@ -165,8 +158,7 @@ } } }); - addEventProcessor(new EventTypeProcessor<ShowRequest>( - ShowRequest.class, true) { + addEventProcessor(new EventTypeProcessor<ShowRequest>(ShowRequest.class, true) { @Override public void handle(ShowRequest request) { /* @@ -182,8 +174,7 @@ } } } else { - sendFacilitatorMessage("Received invalid show request " - + request + " from " + getFacilitatorId()); + sendFacilitatorMessage("Received invalid show request " + request + " from " + getFacilitatorId()); } } }); @@ -194,8 +185,7 @@ * encapsulates the handling of a specific kind of message event. */ private void initializeClientHandlers() { - addEventProcessor(new EventTypeProcessor<SocketIdentifierUpdateRequest>( - SocketIdentifierUpdateRequest.class) { + addEventProcessor(new EventTypeProcessor<SocketIdentifierUpdateRequest>(SocketIdentifierUpdateRequest.class) { @Override public void handle(SocketIdentifierUpdateRequest request) { SocketIdentifier socketId = request.getSocketIdentifier(); @@ -205,13 +195,11 @@ + socketId); return; } - SocketIdentifier clientSocketId = (SocketIdentifier) clientData - .getId(); + SocketIdentifier clientSocketId = (SocketIdentifier) clientData.getId(); clientSocketId.setStationNumber(request.getStationNumber()); } }); - addEventProcessor(new EventTypeProcessor<ConnectionEvent>( - ConnectionEvent.class) { + addEventProcessor(new EventTypeProcessor<ConnectionEvent>(ConnectionEvent.class) { @Override public void handle(ConnectionEvent event) { sendFacilitatorMessage("incoming connection: " + event); @@ -222,12 +210,10 @@ clients.put(identifier, clientData); serverDataModel.addClient(clientData); } - transmit(new RegistrationEvent(clientData, - getRoundConfiguration())); + transmit(new RegistrationEvent(clientData, getRoundConfiguration())); } }); - addEventProcessor(new EventTypeProcessor<DisconnectionRequest>( - DisconnectionRequest.class) { + addEventProcessor(new EventTypeProcessor<DisconnectionRequest>(DisconnectionRequest.class) { @Override public void handle(DisconnectionRequest request) { sendFacilitatorMessage("irrigation server handling disconnection request: " @@ -255,12 +241,10 @@ // relay to all clients in this client's group. boolean restrictedVisibility = getRoundConfiguration() .isRestrictedVisibility(); - for (ClientData clientData : clients.get(source) - .getGroupDataModel().getClientDataMap().values()) { + for (ClientData clientData : clients.get(source).getGroupDataModel().getClientDataMap().values()) { Identifier targetId = clientData.getId(); if (targetId.equals(source) - || (restrictedVisibility && !sendingClient - .isImmediateNeighbor(clientData))) { + || (restrictedVisibility && !sendingClient.isImmediateNeighbor(clientData))) { // don't send the message if the target is the // source or we're in a restricted visibility // condition and the client isn't an immediate @@ -274,8 +258,7 @@ } } else { allTargets.add(clients.get(target)); - ChatEvent chatEvent = new ChatEvent(target, - request.getMessage(), source); + ChatEvent chatEvent = new ChatEvent(target, request.getMessage(), source); transmit(chatEvent); } sendFacilitatorMessage(String.format("%s->%s: %s", @@ -283,8 +266,7 @@ persister.store(request); } }); - addEventProcessor(new EventTypeProcessor<InvestedTokensEvent>( - InvestedTokensEvent.class) { + addEventProcessor(new EventTypeProcessor<InvestedTokensEvent>(InvestedTokensEvent.class) { @Override public void handle(InvestedTokensEvent event) { if (isTokenInvestmentComplete()) { @@ -292,8 +274,7 @@ + event); return; } - clients.get(event.getId()).setInvestedTokens( - event.getInvestedTokens()); + clients.get(event.getId()).setInvestedTokens(event.getInvestedTokens()); submittedClients++; if (isTokenInvestmentComplete()) { // everyone's submitted their tokens so we can calculate the @@ -304,8 +285,7 @@ } } }); - addEventProcessor(new EventTypeProcessor<QuizResponseEvent>( - QuizResponseEvent.class) { + addEventProcessor(new EventTypeProcessor<QuizResponseEvent>(QuizResponseEvent.class) { private volatile int numberOfCompletedQuizzes = 0; @Override @@ -324,14 +304,12 @@ persister.store(quizResponseEvent); } }); - addEventProcessor(new EventTypeProcessor<OpenGateEvent>( - OpenGateEvent.class) { + addEventProcessor(new EventTypeProcessor<OpenGateEvent>(OpenGateEvent.class) { public void handle(OpenGateEvent event) { clients.get(event.getId()).openGate(); } }); - addEventProcessor(new EventTypeProcessor<CloseGateEvent>( - CloseGateEvent.class) { + addEventProcessor(new EventTypeProcessor<CloseGateEvent>(CloseGateEvent.class) { public void handle(CloseGateEvent event) { clients.get(event.getId()).closeGate(); } @@ -400,8 +378,7 @@ } public static void main(String[] args) { - IrrigationServer server = new IrrigationServer( - new ServerConfiguration()); + IrrigationServer server = new IrrigationServer(new ServerConfiguration()); server.start(); server.repl(); } @@ -575,7 +552,7 @@ @Override public void processReplInput(String input, BufferedReader reader) { if ("clients".equals(input)) { - System.err.println("clients: " + clients); + sendFacilitatorMessage(String.format("%d clients: %s", clients.size(), clients)); } } Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: Bitbucket <com...@bi...> - 2012-04-11 18:29:18
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/d76a4a143926/ changeset: d76a4a143926 branch: stable user: alllee date: 2012-04-11 20:29:05 summary: merging save file conversion bug fixes into stable affected #: 9 files diff -r bcf54014af556889e9d7983ac48d6098cbd50705 -r d76a4a1439269f24f331741b86d1811977e0c33d deploy.bat --- a/deploy.bat +++ b/deploy.bat @@ -5,6 +5,6 @@ REM This script will not work unless you make sure that ANT_HOME, M2_HOME, and JAVA_HOME are pointing at the correct location. set ANT_HOME=C:\tools\ant set M2_HOME=C:\tools\maven -set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_26 +set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_31 set PATH=%M2_HOME%\bin;%ANT_HOME%\bin;%JAVA_HOME%\bin;%PATH% ant clean deploy server diff -r bcf54014af556889e9d7983ac48d6098cbd50705 -r d76a4a1439269f24f331741b86d1811977e0c33d ivy.xml --- a/ivy.xml +++ b/ivy.xml @@ -5,7 +5,7 @@ <ivy-module version="2.0"><info organisation="edu.asu.commons" module="foraging"/><dependencies> - <dependency org="edu.asu.commons" name="csidex" rev="0.5-SNAPSHOT" /> + <dependency org="edu.asu.commons" name="csidex" rev="0.6-SNAPSHOT" /><dependency org="net.java.dev.jogl" name="jogl" rev="1.1.1-rc6"/><dependency org="javax.media" name="jmf" rev="2.1.1e"/><dependency org="javax.jnlp" name="javaws" rev="1.6.0_30"/> diff -r bcf54014af556889e9d7983ac48d6098cbd50705 -r d76a4a1439269f24f331741b86d1811977e0c33d pom.xml --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ <dependency><groupId>edu.asu.commons</groupId><artifactId>csidex</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.6-SNAPSHOT</version></dependency><dependency><groupId>net.java.dev.jogl</groupId> diff -r bcf54014af556889e9d7983ac48d6098cbd50705 -r d76a4a1439269f24f331741b86d1811977e0c33d src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java --- a/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java @@ -55,9 +55,9 @@ SortedSet<PersistableEvent> actions = savedRoundData.getActions(); ServerDataModel dataModel = (ServerDataModel) savedRoundData.getDataModel(); Map<Identifier, ClientMovementTokenCount> clientMovementTokenCounts = ClientMovementTokenCount.createMap(dataModel); + boolean restrictedVisibility = roundConfiguration.isSubjectsFieldOfVisionEnabled(); + dataModel.reinitialize(roundConfiguration); Map<Identifier, ClientData> clientDataMap = dataModel.getClientDataMap(); - boolean restrictedVisibility = roundConfiguration.isSubjectsFieldOfVisionEnabled(); - dataModel.reinitialize(); for (PersistableEvent event: actions) { if (event instanceof MovementEvent) { MovementEvent movementEvent = (MovementEvent) event; @@ -66,11 +66,12 @@ ClientMovementTokenCount client = clientMovementTokenCounts.get(event.getId()); client.moves++; GroupDataModel group = clientData.getGroupDataModel(); - String line = String.format("%s, %s, %d, %d, %s, %s", + String line = String.format("%s, %s, %d, %d, %s, %s, %s", savedRoundData.toSecondString(event), clientData.getId(), group.getGroupId(), client.moves, + clientData.getPosition(), movementEvent.getDirection(), "movement event" ); @@ -112,6 +113,10 @@ for (Map.Entry<Identifier, Point> entry: group.getClientPositions().entrySet()) { Identifier id = entry.getKey(); Point position = entry.getValue(); +// System.err.println(String.format("id %s at position %s", id, position)); + if (id.equals(sourceId)) { + continue; + } if (circle.contains(position)) { targetStringBuilder.append(id).append(','); } diff -r bcf54014af556889e9d7983ac48d6098cbd50705 -r d76a4a1439269f24f331741b86d1811977e0c33d src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorWindow.java --- a/src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorWindow.java +++ b/src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorWindow.java @@ -2,24 +2,13 @@ import java.awt.BorderLayout; import java.awt.Dimension; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.Transferable; -import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.Reader; -import java.io.StringReader; -import java.util.Arrays; import java.util.HashMap; import java.util.Map; import javax.jnlp.ClipboardService; -import javax.jnlp.ServiceManager; -import javax.jnlp.UnavailableServiceException; import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JMenu; @@ -41,6 +30,7 @@ import edu.asu.commons.foraging.rules.Strategy; import edu.asu.commons.foraging.rules.iu.ForagingStrategy; import edu.asu.commons.ui.HtmlEditorPane; +import edu.asu.commons.ui.HtmlSelection; import edu.asu.commons.ui.UserInterfaceUtils; /** @@ -270,11 +260,14 @@ return; } } - ClipboardService service = getClipboardService(); + ClipboardService service = UserInterfaceUtils.getClipboardService(); if (service != null) { HtmlSelection selection = new HtmlSelection(text); service.setContents(selection); } + else { + addMessage("Clipboard service is only available when run as a WebStart application."); + } } }); @@ -418,60 +411,4 @@ } } - public ClipboardService getClipboardService() { - if (clipboardService == null) { - try { - clipboardService = (ClipboardService) ServiceManager.lookup(JAVAX_JNLP_CLIPBOARD_SERVICE); - } catch (UnavailableServiceException e) { - e.printStackTrace(); - addMessage("Unable to load the ClipboardService for all your clipboard needs. Sorry!"); - } - } - return clipboardService; - } - - private static class HtmlSelection implements Transferable { - - private static DataFlavor[] htmlFlavors = new DataFlavor[3]; - private final String html; - static { - try { - htmlFlavors[0] = new DataFlavor("text/html;class=java.lang.String"); - htmlFlavors[1] = new DataFlavor("text/html;class=java.io.Reader"); - htmlFlavors[2] = new DataFlavor("text/html;charset=unicode;class=java.io.InputStream"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } - - public HtmlSelection(String html) { - this.html = html; - } - - @Override - public DataFlavor[] getTransferDataFlavors() { - return htmlFlavors; - } - - @Override - public boolean isDataFlavorSupported(DataFlavor flavor) { - return Arrays.asList(htmlFlavors).contains(flavor); - } - - @Override - public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { - if (String.class.equals(flavor.getRepresentationClass())) { - return html; - } - else if (Reader.class.equals(flavor.getRepresentationClass())) { - return new StringReader(html); - } - else if (InputStream.class.equals(flavor.getRepresentationClass())) { - return new ByteArrayInputStream(html.getBytes()); - } - throw new UnsupportedFlavorException(flavor); - } - - } - } diff -r bcf54014af556889e9d7983ac48d6098cbd50705 -r d76a4a1439269f24f331741b86d1811977e0c33d src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java @@ -458,9 +458,13 @@ public void moveClient(Identifier id, Direction direction) { ClientData clientData = clients.get(id); Point newPosition = direction.apply(clientData.getPoint()); +// System.err.println(String.format("Moving client %s in direction %s to position %s", id, direction, newPosition)); + if (serverDataModel.isValidPosition(newPosition)) { // check occupancy if ( isCellAvailable(newPosition) ) { +// System.err.println("setting position: " + newPosition); + clientData.setPosition(newPosition); // if the client is explicitly collecting, then movement does not automatically // collect a token. diff -r bcf54014af556889e9d7983ac48d6098cbd50705 -r d76a4a1439269f24f331741b86d1811977e0c33d src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java @@ -349,13 +349,18 @@ * </ol> * FIXME: may be safer to return a clone() instead? */ - public void reinitialize() { + public void reinitialize(RoundConfiguration roundConfiguration) { + setRoundConfiguration(roundConfiguration); setNullEventChannel(); resetGroupResourceDistributions(); // initialize all client positions for (GroupDataModel group: getGroups()) { for (ClientData clientData: group.getClientDataMap().values()) { clientData.initializePosition(); + if (! clientData.getGroupDataModel().equals(group)) { + logger.warning("client data model had different group " + clientData.getGroupDataModel() + " than server's group: " + group); + clientData.setGroupDataModel(group); + } } } } diff -r bcf54014af556889e9d7983ac48d6098cbd50705 -r d76a4a1439269f24f331741b86d1811977e0c33d src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -4,6 +4,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -770,33 +771,32 @@ Identifier source = request.getSource(); Identifier target = request.getTarget(); ClientData clientData = clients.get(source); - sendFacilitatorMessage(String.format("CHAT: %s: [ %s ]", clientData.toString(), request)); + ArrayList<Identifier> targets = new ArrayList<Identifier>(); if (Identifier.ALL.equals(target)) { // relay to all clients in this client's group. - RoundConfiguration currentConfiguration = getCurrentRoundConfiguration(); // check for field of vision if (currentConfiguration.isFieldOfVisionEnabled()) { // FIXME: replace with clientData.getFieldOfVision? Circle circle = new Circle(clientData.getPosition(), currentConfiguration.getViewSubjectsRadius()); - sendChatEvent(request, clientData.getGroupDataModel().getClientIdentifiersWithin(circle)); + targets.addAll(clientData.getGroupDataModel().getClientIdentifiersWithin(circle)); } else { - sendChatEvent(request, clientData.getGroupDataModel().getClientIdentifiers()); + targets.addAll(clientData.getGroupDataModel().getClientIdentifiers()); } } else { - getLogger().info(String.format("%s sending [%s] to target [%s]", request.getSource(), request, request.getTarget())); - ChatEvent chatEvent = new ChatEvent(request.getTarget(), request.toString(), request.getSource()); - transmit(chatEvent); + targets.add(request.getTarget()); } + sendChatEvent(request, targets); persister.store(request); } private void sendChatEvent(ChatRequest request, Collection<Identifier> identifiers) { + sendFacilitatorMessage(String.format("%s->%s : [%s]", request.getSource(), identifiers, request)); for (Identifier targetId : identifiers) { ChatEvent chatEvent = new ChatEvent(targetId, request.toString(), request.getSource(), true); - transmit(chatEvent); + transmitAndStore(chatEvent); } } diff -r bcf54014af556889e9d7983ac48d6098cbd50705 -r d76a4a1439269f24f331741b86d1811977e0c33d src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java --- a/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java @@ -26,7 +26,7 @@ import edu.asu.commons.foraging.model.ServerDataModel; /** - * $Id: MovieCreatorProcessor.java 522 2010-06-30 19:17:48Z alllee $ + * $Id$ * * Foraging save file processor to create quicktime movies. * @@ -53,7 +53,7 @@ RoundConfiguration roundConfiguration = (RoundConfiguration) savedRoundData.getRoundParameters(); final List<GroupView> groupViewList = new ArrayList<GroupView>(); final Map<GroupView, QuickTimeOutputStream> groupViewMap = new HashMap<GroupView, QuickTimeOutputStream>(); - serverDataModel.reinitialize(); + serverDataModel.reinitialize(roundConfiguration); List<JFrame> jframes = new ArrayList<JFrame>(); Dimension dimension = new Dimension(800, 800); File savedRoundDataFile = new File(savedRoundData.getSaveFilePath()); 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. |
From: Bitbucket <com...@bi...> - 2012-04-11 18:28:32
|
2 new commits in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/d8f1d65e3b09/ changeset: d8f1d65e3b09 user: alllee date: 2012-04-11 20:25:37 summary: kwexpand on touch affected #: 1 file diff -r 0a6c2d4ad5f75068215c8c3470004bc12466cd4a -r d8f1d65e3b095a85c21481915b5c2bed87ff9cab src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java --- a/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java @@ -26,7 +26,7 @@ import edu.asu.commons.foraging.model.ServerDataModel; /** - * $Id: MovieCreatorProcessor.java 522 2010-06-30 19:17:48Z alllee $ + * $Id$ * * Foraging save file processor to create quicktime movies. * https://bitbucket.org/virtualcommons/foraging/changeset/ea41070ef5c5/ changeset: ea41070ef5c5 user: alllee date: 2012-04-11 20:28:17 summary: merging issue 36 fixes from asu-foraging-2012 affected #: 4 files diff -r d8f1d65e3b095a85c21481915b5c2bed87ff9cab -r ea41070ef5c526183d0d2b4fbd86118ba4e08d72 src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java --- a/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java @@ -55,9 +55,9 @@ SortedSet<PersistableEvent> actions = savedRoundData.getActions(); ServerDataModel dataModel = (ServerDataModel) savedRoundData.getDataModel(); Map<Identifier, ClientMovementTokenCount> clientMovementTokenCounts = ClientMovementTokenCount.createMap(dataModel); + boolean restrictedVisibility = roundConfiguration.isSubjectsFieldOfVisionEnabled(); + dataModel.reinitialize(roundConfiguration); Map<Identifier, ClientData> clientDataMap = dataModel.getClientDataMap(); - boolean restrictedVisibility = roundConfiguration.isSubjectsFieldOfVisionEnabled(); - dataModel.reinitialize(); for (PersistableEvent event: actions) { if (event instanceof MovementEvent) { MovementEvent movementEvent = (MovementEvent) event; @@ -113,6 +113,10 @@ for (Map.Entry<Identifier, Point> entry: group.getClientPositions().entrySet()) { Identifier id = entry.getKey(); Point position = entry.getValue(); +// System.err.println(String.format("id %s at position %s", id, position)); + if (id.equals(sourceId)) { + continue; + } if (circle.contains(position)) { targetStringBuilder.append(id).append(','); } diff -r d8f1d65e3b095a85c21481915b5c2bed87ff9cab -r ea41070ef5c526183d0d2b4fbd86118ba4e08d72 src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java @@ -458,9 +458,13 @@ public void moveClient(Identifier id, Direction direction) { ClientData clientData = clients.get(id); Point newPosition = direction.apply(clientData.getPoint()); +// System.err.println(String.format("Moving client %s in direction %s to position %s", id, direction, newPosition)); + if (serverDataModel.isValidPosition(newPosition)) { // check occupancy if ( isCellAvailable(newPosition) ) { +// System.err.println("setting position: " + newPosition); + clientData.setPosition(newPosition); // if the client is explicitly collecting, then movement does not automatically // collect a token. diff -r d8f1d65e3b095a85c21481915b5c2bed87ff9cab -r ea41070ef5c526183d0d2b4fbd86118ba4e08d72 src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java @@ -349,7 +349,8 @@ * </ol> * FIXME: may be safer to return a clone() instead? */ - public void reinitialize() { + public void reinitialize(RoundConfiguration roundConfiguration) { + setRoundConfiguration(roundConfiguration); setNullEventChannel(); resetGroupResourceDistributions(); // initialize all client positions diff -r d8f1d65e3b095a85c21481915b5c2bed87ff9cab -r ea41070ef5c526183d0d2b4fbd86118ba4e08d72 src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java --- a/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java @@ -53,7 +53,7 @@ RoundConfiguration roundConfiguration = (RoundConfiguration) savedRoundData.getRoundParameters(); final List<GroupView> groupViewList = new ArrayList<GroupView>(); final Map<GroupView, QuickTimeOutputStream> groupViewMap = new HashMap<GroupView, QuickTimeOutputStream>(); - serverDataModel.reinitialize(); + serverDataModel.reinitialize(roundConfiguration); List<JFrame> jframes = new ArrayList<JFrame>(); Dimension dimension = new Dimension(800, 800); File savedRoundDataFile = new File(savedRoundData.getSaveFilePath()); 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. |
From: Bitbucket <com...@bi...> - 2012-04-11 18:25:10
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/d6ccdb8b4c74/ changeset: d6ccdb8b4c74 branch: asu-foraging-2012 user: alllee date: 2012-04-11 20:24:58 summary: fixes issue 36 - the ServerDataModel wasn't getting its boardWidth/boardHeight variables set properly added RoundConfiguration as a parameter to the reinitialize() method along with an explicit setRoundConfiguration Thanks for catching this Mady! affected #: 4 files diff -r 096fd95440a94bc7c97e1daa580ee75f38f77cdb -r d6ccdb8b4c74a1786eb718021af8a001e877d841 src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java --- a/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java @@ -55,9 +55,9 @@ SortedSet<PersistableEvent> actions = savedRoundData.getActions(); ServerDataModel dataModel = (ServerDataModel) savedRoundData.getDataModel(); Map<Identifier, ClientMovementTokenCount> clientMovementTokenCounts = ClientMovementTokenCount.createMap(dataModel); + boolean restrictedVisibility = roundConfiguration.isSubjectsFieldOfVisionEnabled(); + dataModel.reinitialize(roundConfiguration); Map<Identifier, ClientData> clientDataMap = dataModel.getClientDataMap(); - boolean restrictedVisibility = roundConfiguration.isSubjectsFieldOfVisionEnabled(); - dataModel.reinitialize(); for (PersistableEvent event: actions) { if (event instanceof MovementEvent) { MovementEvent movementEvent = (MovementEvent) event; @@ -113,6 +113,10 @@ for (Map.Entry<Identifier, Point> entry: group.getClientPositions().entrySet()) { Identifier id = entry.getKey(); Point position = entry.getValue(); +// System.err.println(String.format("id %s at position %s", id, position)); + if (id.equals(sourceId)) { + continue; + } if (circle.contains(position)) { targetStringBuilder.append(id).append(','); } diff -r 096fd95440a94bc7c97e1daa580ee75f38f77cdb -r d6ccdb8b4c74a1786eb718021af8a001e877d841 src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java @@ -456,9 +456,13 @@ public void moveClient(Identifier id, Direction direction) { ClientData clientData = clients.get(id); Point newPosition = direction.apply(clientData.getPoint()); +// System.err.println(String.format("Moving client %s in direction %s to position %s", id, direction, newPosition)); + if (serverDataModel.isValidPosition(newPosition)) { // check occupancy if ( isCellAvailable(newPosition) ) { +// System.err.println("setting position: " + newPosition); + clientData.setPosition(newPosition); // if the client is explicitly collecting, then movement does not automatically // collect a token. diff -r 096fd95440a94bc7c97e1daa580ee75f38f77cdb -r d6ccdb8b4c74a1786eb718021af8a001e877d841 src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java @@ -355,7 +355,8 @@ } } - public void reinitialize() { + public void reinitialize(RoundConfiguration roundConfiguration) { + setRoundConfiguration(roundConfiguration); setNullEventChannel(); resetGroupResourceDistributions(); // initialize all client positions diff -r 096fd95440a94bc7c97e1daa580ee75f38f77cdb -r d6ccdb8b4c74a1786eb718021af8a001e877d841 src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java --- a/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java @@ -26,7 +26,7 @@ import edu.asu.commons.foraging.model.ServerDataModel; /** - * $Id: MovieCreatorProcessor.java 522 2010-06-30 19:17:48Z alllee $ + * $Id$ * * Foraging save file processor to create quicktime movies. * @@ -53,7 +53,7 @@ RoundConfiguration roundConfiguration = (RoundConfiguration) savedRoundData.getRoundParameters(); final List<GroupView> groupViewList = new ArrayList<GroupView>(); final Map<GroupView, QuickTimeOutputStream> groupViewMap = new HashMap<GroupView, QuickTimeOutputStream>(); - serverDataModel.reinitialize(); + serverDataModel.reinitialize(roundConfiguration); List<JFrame> jframes = new ArrayList<JFrame>(); Dimension dimension = new Dimension(800, 800); File savedRoundDataFile = new File(savedRoundData.getSaveFilePath()); 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. |
From: Bitbucket <com...@bi...> - 2012-04-11 17:25:30
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/096fd95440a9/ changeset: 096fd95440a9 branch: asu-foraging-2012 user: alllee date: 2012-04-11 19:01:13 summary: adding sanity check on serverdatamodel.reinitialize and current client position to all data file (transplanted from a982f628da46cfbc4db575e00e58f4bc1015a91a) affected #: 2 files diff -r bb81663c5b40d9ec1833f93fd51e133834f49aeb -r 096fd95440a94bc7c97e1daa580ee75f38f77cdb src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java --- a/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java @@ -66,11 +66,12 @@ ClientMovementTokenCount client = clientMovementTokenCounts.get(event.getId()); client.moves++; GroupDataModel group = clientData.getGroupDataModel(); - String line = String.format("%s, %s, %d, %d, %s, %s", + String line = String.format("%s, %s, %d, %d, %s, %s, %s", savedRoundData.toSecondString(event), clientData.getId(), group.getGroupId(), client.moves, + clientData.getPosition(), movementEvent.getDirection(), "movement event" ); diff -r bb81663c5b40d9ec1833f93fd51e133834f49aeb -r 096fd95440a94bc7c97e1daa580ee75f38f77cdb src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java @@ -362,6 +362,10 @@ for (GroupDataModel group: getGroups()) { for (ClientData clientData: group.getClientDataMap().values()) { clientData.initializePosition(); + if (! clientData.getGroupDataModel().equals(group)) { + logger.warning("client data model had different group " + clientData.getGroupDataModel() + " than server's group: " + group); + clientData.setGroupDataModel(group); + } } } } 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. |
From: Bitbucket <com...@bi...> - 2012-04-11 17:22:44
|
2 new commits in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/a982f628da46/ changeset: a982f628da46 user: alllee date: 2012-04-11 19:01:13 summary: adding sanity check on serverdatamodel.reinitialize and current client position to all data file affected #: 2 files diff -r ccdf6a26a534cfc24e1d66a91d26fa2b0fc1f0d0 -r a982f628da46cfbc4db575e00e58f4bc1015a91a src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java --- a/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java +++ b/src/main/java/edu/asu/commons/foraging/data/AllDataProcessor.java @@ -66,11 +66,12 @@ ClientMovementTokenCount client = clientMovementTokenCounts.get(event.getId()); client.moves++; GroupDataModel group = clientData.getGroupDataModel(); - String line = String.format("%s, %s, %d, %d, %s, %s", + String line = String.format("%s, %s, %d, %d, %s, %s, %s", savedRoundData.toSecondString(event), clientData.getId(), group.getGroupId(), client.moves, + clientData.getPosition(), movementEvent.getDirection(), "movement event" ); diff -r ccdf6a26a534cfc24e1d66a91d26fa2b0fc1f0d0 -r a982f628da46cfbc4db575e00e58f4bc1015a91a src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java @@ -356,6 +356,10 @@ for (GroupDataModel group: getGroups()) { for (ClientData clientData: group.getClientDataMap().values()) { clientData.initializePosition(); + if (! clientData.getGroupDataModel().equals(group)) { + logger.warning("client data model had different group " + clientData.getGroupDataModel() + " than server's group: " + group); + clientData.setGroupDataModel(group); + } } } } https://bitbucket.org/virtualcommons/foraging/changeset/0a6c2d4ad5f7/ changeset: 0a6c2d4ad5f7 user: alllee date: 2012-04-11 19:21:35 summary: storing ChatEvents in the persister explicitly with a list of all the targets of said chat event. affected #: 3 files diff -r a982f628da46cfbc4db575e00e58f4bc1015a91a -r 0a6c2d4ad5f75068215c8c3470004bc12466cd4a ivy.xml --- a/ivy.xml +++ b/ivy.xml @@ -5,7 +5,7 @@ <ivy-module version="2.0"><info organisation="edu.asu.commons" module="foraging"/><dependencies> - <dependency org="edu.asu.commons" name="csidex" rev="0.5-SNAPSHOT" /> + <dependency org="edu.asu.commons" name="csidex" rev="0.6-SNAPSHOT" /><dependency org="net.java.dev.jogl" name="jogl" rev="1.1.1-rc6"/><dependency org="javax.media" name="jmf" rev="2.1.1e"/><dependency org="javax.jnlp" name="javaws" rev="1.6.0_30"/> diff -r a982f628da46cfbc4db575e00e58f4bc1015a91a -r 0a6c2d4ad5f75068215c8c3470004bc12466cd4a pom.xml --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ <dependency><groupId>edu.asu.commons</groupId><artifactId>csidex</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.6-SNAPSHOT</version></dependency><dependency><groupId>net.java.dev.jogl</groupId> diff -r a982f628da46cfbc4db575e00e58f4bc1015a91a -r 0a6c2d4ad5f75068215c8c3470004bc12466cd4a src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -4,6 +4,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -770,33 +771,32 @@ Identifier source = request.getSource(); Identifier target = request.getTarget(); ClientData clientData = clients.get(source); - sendFacilitatorMessage(String.format("CHAT: %s: [ %s ]", clientData.toString(), request)); + ArrayList<Identifier> targets = new ArrayList<Identifier>(); if (Identifier.ALL.equals(target)) { // relay to all clients in this client's group. - RoundConfiguration currentConfiguration = getCurrentRoundConfiguration(); // check for field of vision if (currentConfiguration.isFieldOfVisionEnabled()) { // FIXME: replace with clientData.getFieldOfVision? Circle circle = new Circle(clientData.getPosition(), currentConfiguration.getViewSubjectsRadius()); - sendChatEvent(request, clientData.getGroupDataModel().getClientIdentifiersWithin(circle)); + targets.addAll(clientData.getGroupDataModel().getClientIdentifiersWithin(circle)); } else { - sendChatEvent(request, clientData.getGroupDataModel().getClientIdentifiers()); + targets.addAll(clientData.getGroupDataModel().getClientIdentifiers()); } } else { - getLogger().info(String.format("%s sending [%s] to target [%s]", request.getSource(), request, request.getTarget())); - ChatEvent chatEvent = new ChatEvent(request.getTarget(), request.toString(), request.getSource()); - transmit(chatEvent); + targets.add(request.getTarget()); } + sendChatEvent(request, targets); persister.store(request); } private void sendChatEvent(ChatRequest request, Collection<Identifier> identifiers) { + sendFacilitatorMessage(String.format("%s->%s : [%s]", request.getSource(), identifiers, request)); for (Identifier targetId : identifiers) { ChatEvent chatEvent = new ChatEvent(targetId, request.toString(), request.getSource(), true); - transmit(chatEvent); + transmitAndStore(chatEvent); } } 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. |
From: <ro...@so...> - 2012-04-10 07:25:49
|
A new event has been recorded in Sentry: ValueError: too many values to unpack Details ------- http://vcweb.asu.edu:9000/1/group/15/ Logger: root First Seen: April 10, 2012 Stacktrace ----------- Stacktrace (most recent call last): File "django/core/handlers/base.py", line 168, in get_response receivers = signals.got_request_exception.send(sender=self.__class__, request=request) File "django/contrib/admin/sites.py", line 214, in wrapper return self.admin_view(view, cacheable)(*args, **kwargs) File "django/utils/decorators.py", line 99, in _wrapped_view raise File "django/views/decorators/cache.py", line 79, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "django/contrib/admin/sites.py", line 196, in inner return self.login(request) File "django/views/decorators/cache.py", line 79, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "django/contrib/admin/sites.py", line 331, in login return login(request, **defaults) File "django/utils/decorators.py", line 99, in _wrapped_view raise File "django/views/decorators/cache.py", line 79, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "django/contrib/auth/views.py", line 35, in login if form.is_valid(): File "django/forms/forms.py", line 121, in is_valid return self.is_bound and not bool(self.errors) File "django/forms/forms.py", line 112, in _get_errors self.full_clean() File "django/forms/forms.py", line 268, in full_clean self._clean_form() File "django/forms/forms.py", line 298, in _clean_form self._errors[NON_FIELD_ERRORS] = self.error_class(e.messages) File "django/contrib/admin/forms.py", line 26, in clean self.user_cache = authenticate(username=username, password=password) File "django/contrib/auth/__init__.py", line 58, in authenticate continue File "django/contrib/auth/backends.py", line 21, in authenticate return None File "django/contrib/auth/models.py", line 275, in check_password return check_password(raw_password, self.password) File "django/contrib/auth/models.py", line 42, in check_password algo, salt, hsh = enc_password.split('$') Http ----------- <table><colgroup><col style="width:60px;"></colgroup><tbody><tr><th>URL:</th><td><a href="http://vcweb.asu.edu:9000/admin/">http://vcweb.asu.edu:9000/admin/</a></td></tr><tr><th>Method:</th><td>POST</td></tr><tr><th>Query:</th><td><code>''</code></td></tr></tbody></table> |
From: <ro...@so...> - 2012-04-10 07:25:45
|
A new event has been recorded in Sentry: Internal Server Error: /admin/ Details ------- http://vcweb.asu.edu:9000/1/group/16/ Logger: django.request First Seen: April 10, 2012 Stacktrace ----------- Stacktrace (most recent call last): File "django/core/handlers/base.py", line 169, in get_response response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) File "django/contrib/admin/sites.py", line 214, in wrapper return self.admin_view(view, cacheable)(*args, **kwargs) File "django/utils/decorators.py", line 99, in _wrapped_view raise File "django/views/decorators/cache.py", line 79, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "django/contrib/admin/sites.py", line 196, in inner return self.login(request) File "django/views/decorators/cache.py", line 79, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "django/contrib/admin/sites.py", line 331, in login return login(request, **defaults) File "django/utils/decorators.py", line 99, in _wrapped_view raise File "django/views/decorators/cache.py", line 79, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "django/contrib/auth/views.py", line 35, in login if form.is_valid(): File "django/forms/forms.py", line 121, in is_valid return self.is_bound and not bool(self.errors) File "django/forms/forms.py", line 112, in _get_errors self.full_clean() File "django/forms/forms.py", line 268, in full_clean self._clean_form() File "django/forms/forms.py", line 298, in _clean_form self._errors[NON_FIELD_ERRORS] = self.error_class(e.messages) File "django/contrib/admin/forms.py", line 26, in clean self.user_cache = authenticate(username=username, password=password) File "django/contrib/auth/__init__.py", line 58, in authenticate continue File "django/contrib/auth/backends.py", line 21, in authenticate return None File "django/contrib/auth/models.py", line 275, in check_password return check_password(raw_password, self.password) File "django/contrib/auth/models.py", line 42, in check_password algo, salt, hsh = enc_password.split('$') Http ----------- <table><colgroup><col style="width:60px;"></colgroup><tbody><tr><th>URL:</th><td><a href="http://vcweb.asu.edu:9000/admin/">http://vcweb.asu.edu:9000/admin/</a></td></tr><tr><th>Method:</th><td>POST</td></tr><tr><th>Query:</th><td><code>''</code></td></tr></tbody></table> |
From: <ro...@so...> - 2012-04-10 06:43:02
|
A new event has been recorded in Sentry: Internal Server Error: /login/ Details ------- http://vcweb.asu.edu:9000/1/group/14/ Logger: django.request First Seen: April 10, 2012 Stacktrace ----------- Stacktrace (most recent call last): File "django/core/handlers/base.py", line 169, in get_response response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) File "django/utils/decorators.py", line 99, in _wrapped_view raise File "sentry/web/frontend/accounts.py", line 25, in login if form.is_valid(): File "django/forms/forms.py", line 121, in is_valid return self.is_bound and not bool(self.errors) File "django/forms/forms.py", line 112, in _get_errors self.full_clean() File "django/forms/forms.py", line 268, in full_clean self._clean_form() File "django/forms/forms.py", line 298, in _clean_form self._errors[NON_FIELD_ERRORS] = self.error_class(e.messages) File "django/contrib/auth/forms.py", line 85, in clean self.user_cache = authenticate(username=username, password=password) File "django/contrib/auth/__init__.py", line 58, in authenticate continue File "django/contrib/auth/backends.py", line 21, in authenticate return None File "django/contrib/auth/models.py", line 275, in check_password return check_password(raw_password, self.password) File "django/contrib/auth/models.py", line 42, in check_password algo, salt, hsh = enc_password.split('$') Http ----------- <table><colgroup><col style="width:60px;"></colgroup><tbody><tr><th>URL:</th><td><a href="http://vcweb.asu.edu:9000/login/">http://vcweb.asu.edu:9000/login/</a></td></tr><tr><th>Method:</th><td>POST</td></tr><tr><th>Query:</th><td><code>''</code></td></tr></tbody></table> |
From: <ro...@so...> - 2012-04-10 06:43:01
|
A new event has been recorded in Sentry: ValueError: too many values to unpack Details ------- http://vcweb.asu.edu:9000/1/group/13/ Logger: root First Seen: April 10, 2012 Stacktrace ----------- Stacktrace (most recent call last): File "django/core/handlers/base.py", line 168, in get_response receivers = signals.got_request_exception.send(sender=self.__class__, request=request) File "django/utils/decorators.py", line 99, in _wrapped_view raise File "sentry/web/frontend/accounts.py", line 25, in login if form.is_valid(): File "django/forms/forms.py", line 121, in is_valid return self.is_bound and not bool(self.errors) File "django/forms/forms.py", line 112, in _get_errors self.full_clean() File "django/forms/forms.py", line 268, in full_clean self._clean_form() File "django/forms/forms.py", line 298, in _clean_form self._errors[NON_FIELD_ERRORS] = self.error_class(e.messages) File "django/contrib/auth/forms.py", line 85, in clean self.user_cache = authenticate(username=username, password=password) File "django/contrib/auth/__init__.py", line 58, in authenticate continue File "django/contrib/auth/backends.py", line 21, in authenticate return None File "django/contrib/auth/models.py", line 275, in check_password return check_password(raw_password, self.password) File "django/contrib/auth/models.py", line 42, in check_password algo, salt, hsh = enc_password.split('$') Http ----------- <table><colgroup><col style="width:60px;"></colgroup><tbody><tr><th>URL:</th><td><a href="http://vcweb.asu.edu:9000/login/">http://vcweb.asu.edu:9000/login/</a></td></tr><tr><th>Method:</th><td>POST</td></tr><tr><th>Query:</th><td><code>''</code></td></tr></tbody></table> |
From: <ro...@so...> - 2012-04-10 06:42:51
|
A new event has been recorded in Sentry: AttributeError: 'Experiment' object has no attribute 'groups' Details ------- http://vcweb.asu.edu:9000/1/group/12/ Logger: root First Seen: April 10, 2012 Stacktrace ----------- Stacktrace (most recent call last): File "django/core/handlers/base.py", line 178, in get_response signals.got_request_exception.send(sender=self.__class__, request=request) File "django/contrib/auth/decorators.py", line 20, in _wrapped_view return view_func(request, *args, **kwargs) File "vcweb/core/views.py", line 334, in download_data return redirect('core:dashboard') Http ----------- <table><colgroup><col style="width:60px;"></colgroup><tbody><tr><th>URL:</th><td><a href="https://vcweb.asu.edu/experiment/27/download/csv">https://vcweb.asu.edu/experiment/27/download/csv</a></td></tr><tr><th>Method:</th><td>GET</td></tr><tr><th>Query:</th><td><code>''</code></td></tr></tbody></table> |
From: A L. <iss...@bi...> - 2012-04-09 22:45:08
|
--- you can reply above this line --- New issue 49: create data migrations for activity_performed foreign keys https://bitbucket.org/virtualcommons/vcweb/issue/49/create-data-migrations-for A Lee / alllee on Tue, 10 Apr 2012 00:45:02 +0200: Responsible: alllee -- This is an issue notification from bitbucket.org. You are receiving this either because you are the owner of the issue, or you are following the issue. |
From: A L. <iss...@bi...> - 2012-04-09 20:33:31
|
--- you can reply above this line --- New issue 48: save data reports https://bitbucket.org/virtualcommons/vcweb/issue/48/save-data-reports A Lee / alllee on Mon, 9 Apr 2012 22:33:25 +0200: produce save data files for the lighter footprints pretest that: # show the points per group over time # the distribution of points earned among the participants Responsible: alllee -- This is an issue notification from bitbucket.org. You are receiving this either because you are the owner of the issue, or you are following the issue. |