/******************************************************************************************************************* * * If the current position is the one where the ControlPanel is rendered, move it to the alternate position. * ******************************************************************************************************************/ private void eventuallyMoveOutControlPanel() { if (currentPosition.equals(DEFAULT_CONTROL_PANEL_POSITION)) { presentation.renderControlPanelAt(ALTERNATE_CONTROL_PANEL_POSITION); } }
/******************************************************************************************************************* * * If the ControlPanel was moved to the alternate position, restore it. * ******************************************************************************************************************/ private void eventuallyMoveBackControlPanel() { if (currentPosition.equals(DEFAULT_CONTROL_PANEL_POSITION)) { presentation.renderControlPanelAt(DEFAULT_CONTROL_PANEL_POSITION); presentation.renderEmptyCellAt(ALTERNATE_CONTROL_PANEL_POSITION); } }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void render (@Nonnull UniformityMeasurements measurements) { final int columns = measurements.getColumns(); final int rows = measurements.getRows(); final UniformityMeasurement centerMeasurement = measurements.getAt(xy(columns / 2, rows / 2)); final String[][] s = new String[rows][columns]; for (int row = 0; row < rows; row++) { for (int column = 0; column < columns; column++) { s[row][column] = formatMeasurement(centerMeasurement, measurements.getAt(xy(column, row))); } } presentation.populateMeasurements(s); }
@Nonnull public static UniformityMeasurements createMeasurements (final @Nonnull String displayName, final @Nonnull Random r) { final DateTime dateTime = new DateTime((40L * 365 * 24 * 60 * 60 + r.nextLong() % (365L * 24 * 60 * 60)) * 1000); final SortedMap<Position, UniformityMeasurement> m = new TreeMap<Position, UniformityMeasurement>(); m.put(xy(0, 0), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(1, 0), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(2, 0), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(0, 1), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(1, 1), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(2, 1), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(0, 2), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(1, 2), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(2, 2), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); return new UniformityMeasurements(new ProfiledDisplay(new Display(displayName, 0), "profile"), dateTime, m); }
@Override public void marshal (final @Nonnull OutputStream os) throws IOException { final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw); final int rows = uniformityMeasurements.getRows(); final int columns = uniformityMeasurements.getColumns(); final DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis(); pw.printf("%s ; D='%s' ; P='%s'", formatter.print(uniformityMeasurements.getDateTime()), uniformityMeasurements.getDisplay().getDisplay().getDisplayName(), uniformityMeasurements.getDisplay().getProfileName()); for (int row = 0; row < rows; row++) { for (int column = 0; column < columns; column++) { final UniformityMeasurement measurement = uniformityMeasurements.getAt(xy(column, row)); pw.printf(" ; L[%d,%d]=%3d", column, row, measurement.getLuminance()); pw.printf(" ; T[%d,%d]=%5d", column, row, measurement.getTemperature().getValue()); } } pw.println(); pw.close(); os.write(sw.toString().getBytes()); // FIXME: charset } }
/******************************************************************************************************************* * * Prepares for the next measurement. * ******************************************************************************************************************/ private void prepareNextMeasurement (final @Nonnull Collaboration collaboration) { log.info("prepareNextMeasurement()"); if (!positionIterator.hasNext()) { presentation.dismiss(); new UniformityMeasurementMessage(new UniformityMeasurements(display, measurementMapByPosition)).send(); } else { currentPosition = positionIterator.next(); inviteToPositionTheSensor(collaboration); } }
@Override @Nonnull public UniformityArchive unmarshal (final @Nonnull InputStream is) throws IOException { final UniformityArchive archive = new UniformityArchive(); for (;;) { try { final UniformityMeasurements measurements = new UniformityMeasurements().as(Unmarshallable).unmarshal(is); archive.add(measurements); } catch (EOFException e) { break; // ok, finished } } return archive; } }
/******************************************************************************************************************* * * * ******************************************************************************************************************/ public void onNewMeasurement (final @ListensTo @Nonnull UniformityMeasurementMessage message) throws IOException { log.info("onNewMeasurement({})", message); archive.add(message.getMeasurements()); storeArchive(); new UniformityArchiveUpdatedMessage(archive.findMeasurementsByDisplay(message.getMeasurements().getDisplay().getDisplay())).send(); }
@Override public void actionPerformed (final @Nonnull ActionEvent event) { setEnabled(false); new UniformityCheckRequest(selectedDisplay).send(); } };
/******************************************************************************************************************* * * Compute the sequence of positions to make measurements. It starts from the central cell then it proceeds from the * upper left control, rightbound and downwards. * ******************************************************************************************************************/ private void computePositions() { positionSequence.clear(); for (int row = 0; row < ROWS; row++) { for (int column = 0; column < COLUMNS; column++) { positionSequence.add(xy(column, row)); } } positionSequence.add(0, positionSequence.remove((ROWS * COLUMNS) / 2)); positionIterator = positionSequence.iterator(); } }
/******************************************************************************************************************* * * ******************************************************************************************************************/ private void refreshPresentation() { if (selectedMeasurements != null) { propertyRenderers.get(selectedPropertyRendereIndex.getValue()).render(selectedMeasurements); presentation.renderDisplayName(selectedMeasurements.getDisplay().getDisplay().getDisplayName()); presentation.renderProfileName(selectedMeasurements.getDisplay().getProfile().getName()); } } }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void onMeasurementsRequest (final @ListensTo @Nonnull UniformityCheckRequest message) { log.info("onMeasurementsRequest({})", message); display = message.getDisplay(); initializeMeasurement(); prepareNextMeasurement(message.getCollaboration()); }
@Test(dataProvider="testCaseProvider") public void must_properly_marshall (final long seed, final @Nonnull String expectedValue) throws IOException { final Random r = new Random(seed); final UniformityMeasurements measurements = FakeUniformityMeasurementsGenerator.createMeasurements("display1", r); final UniformityMeasurementsMarshallable fixture = new UniformityMeasurementsMarshallable(measurements); final ByteArrayOutputStream os = new ByteArrayOutputStream(); fixture.marshal(os); os.close(); final String s = new String(os.toByteArray()); assertThat(s, is(expectedValue)); }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void onNewMeasurements (final @ListensTo @Nonnull UniformityMeasurementMessage message) { log.info("onNewMeasurements({})", message); selectedMeasurements = null; // prevents a double refresh because of changing selectedMeasurement selectedPropertyRendereIndex.setValue(0); selectedMeasurements = message.getMeasurements(); refreshPresentation(); startNewMeasurementAction.setEnabled(true); }
@Override protected double getValue (final @Nonnull UniformityMeasurement measurement) { return measurement.getLuminance(); } }
@Override @Nonnull public String getDisplayName() { return DATE_FORMAT.print(measurements.getDateTime()); } }
@Override protected double getValue (final @Nonnull UniformityMeasurement measurement) { return measurement.getTemperature().getValue(); } }
@Override public void marshal (final @Nonnull OutputStream os) throws IOException { for (final UniformityMeasurements measurements : archive.findMeasurements().sort(BY_DATE_TIME).results()) { measurements.as(Marshallable).marshal(os); } os.close(); } }
@Override @Nonnull protected List<? extends UniformityMeasurements> computeResults() { final ArrayList<UniformityMeasurements> result = new ArrayList<UniformityMeasurements>(); for (final UniformityMeasurements measurements : contents) { if (measurements.getDisplay().getDisplay().getDisplayName().equals(display.getDisplayName())) { result.add(measurements); } } return result; } };
@Nonnull public static UniformityMeasurements createMeasurements (final @Nonnull String displayName, final @Nonnull Random r) { final DateTime dateTime = new DateTime((40L * 365 * 24 * 60 * 60 + r.nextLong() % (365L * 24 * 60 * 60)) * 1000); final SortedMap<Position, UniformityMeasurement> m = new TreeMap<Position, UniformityMeasurement>(); m.put(xy(0, 0), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(1, 0), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(2, 0), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(0, 1), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(1, 1), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(2, 1), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(0, 2), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(1, 2), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(2, 2), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); return new UniformityMeasurements(new ProfiledDisplay(new Display(displayName, 0), new Profile("profile")), dateTime, m); }