@Override public void run() { message.send(); } }, 0, 500);
/******************************************************************************************************************* * * * ******************************************************************************************************************/ @Nonnull public static CollaborationCompletedMessage forCollaboration (final @Nonnull Collaboration collaboration) { return new CollaborationCompletedMessage(collaboration); }
/******************************************************************************************************************* * * * ******************************************************************************************************************/ @Nonnull public static DefaultCollaboration getCollaboration (final @Nonnull Object object) { return (object instanceof Provider) ? (DefaultCollaboration)((Provider)object).getCollaboration() : NULL_DEFAULT_COLLABORATION; }
@Test public void must_measure() throws InterruptedException { final Collaboration collaboration = new MeasurementRequest().send(); collaboration.waitForCompletion(); Thread.sleep(1000); // FIXME: to receive CollaborationCompleted messages.verifyCollaborationStarted(); messages.verify(MeasurementRequest.class); messages.verify(MeasurementMessage.class); // messages.verify(DisplayDiscoveryMessage.class).with("displayNames", new Equals(Arrays.asList("SwitchResX4 - Color LCD"))); messages.verifyCollaborationCompleted(); } }
/******************************************************************************************************************* * * * ******************************************************************************************************************/ public synchronized void registerDeliveringMessage (final @Nonnull Object message) { log.trace("registerDeliveringMessage({})", message); if (message.getClass().getAnnotation(Message.class).daemon()) { deliveringMessages.add(message); // Do this *after* enlisting message in deliveringMessages if (!collaborationStartedMessageSent && ! (message instanceof CollaborationStartedMessage)) { CollaborationStartedMessage.forCollaboration(this).send(); collaborationStartedMessageSent = true; } notifyAll(); log(); } }
/******************************************************************************************************************* * * * ******************************************************************************************************************/ private void eventuallySendCompletionMessage (final @Nonnull Object message) { if (!completed && (deliveringMessages.size() + pendingMessages.size() + runningThreads.size() + suspensionTokens.size() == 0)) { log.debug(">>>> sending completion message for {}", this); completed = true; THREAD_LOCAL.remove(); CollaborationCompletedMessage.forCollaboration(this).send(); } }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void onUpdatedArchivedMeasurements (final @ListensTo @Nonnull UniformityArchiveUpdatedMessage message) { log.info("onUpdatedArchivedMeasurements({})", message); archivedMeasurementsRequestor.stop(); populateMeasurementsArchive(message.findMeasurements()); }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void onDisplaySelection (final @ListensTo @Nonnull DisplaySelectionMessage message) { log.info("onDisplaySelection({})", message); selectedDisplay = message.getSelectedDisplay(); presentation.showWaitingOnMeasurementsArchive(); archivedMeasurementsRequestor.start(new UniformityArchiveQuery(selectedDisplay.getDisplay())); }
/******************************************************************************************************************* * * * ******************************************************************************************************************/ @Nonnull public static CollaborationStartedMessage forCollaboration (final @Nonnull Collaboration collaboration) { return new CollaborationStartedMessage(collaboration); }
/******************************************************************************************************************* * * Returns the time this unit of work took to complete. * ******************************************************************************************************************/ @Nonnull public Duration getDuration() { return new Duration(getStartTime().getMillis(), endTime); } }
/******************************************************************************************************************* * * Invites the user to properly position the sensor. * ******************************************************************************************************************/ private void inviteToPositionTheSensor (final @Nonnull Collaboration collaboration) { log.info("inviteToPositionTheSensor()"); collaborationPendingUserIntervention = collaboration; suspensionToken = collaborationPendingUserIntervention.suspend(); presentation.renderSensorPlacementInvitationCellAt(currentPosition); eventuallyMoveOutControlPanel(); continueAction.setEnabled(true); cancelAction.setEnabled(true); }
/******************************************************************************************************************* * * ******************************************************************************************************************/ private void onCancel (final @ListensTo @Nonnull CancelMessage message) { log.info("onCancel()"); cancelAction.setEnabled(false); if (suspensionToken != null) { collaborationPendingUserIntervention.resumeAndDie(suspensionToken); suspensionToken = null; collaborationPendingUserIntervention = NULL_COLLABORATION; } presentation.dismiss(); }
/******************************************************************************************************************* * * ******************************************************************************************************************/ private void onConfirmMeasurement (final @ListensTo @Nonnull ConfirmMeasurementMessage message) { log.info("onConfirmMeasurement()"); presentation.hideInvitationToOperateOnTheSensor(); continueAction.setEnabled(false); cancelAction.setEnabled(false); collaborationPendingUserIntervention.resume(suspensionToken, new Runnable() { @Override public void run() { presentation.renderWhiteCellAt(currentPosition); presentation.showMeasureInProgress(); new MeasurementRequest().sendLater(MEASUREMENT_DELAY, MILLISECONDS); } }); suspensionToken = null; collaborationPendingUserIntervention = NULL_COLLABORATION; }
@Test public void must_discover_displays() throws InterruptedException { final Collaboration collaboration = new DisplayDiscoveryQueryMessage().send(); collaboration.waitForCompletion(); Thread.sleep(1000); // FIXME: to receive CollaborationCompleted messages.verifyCollaborationStarted(); messages.verify(DisplayDiscoveryQueryMessage.class); messages.verify(DisplayDiscoveryMessage.class).with("displayNames", new Equals(Arrays.asList("SwitchResX4 - Color LCD"))); messages.verifyCollaborationCompleted(); } }
@Override public void run() { message.send(); } }, 0, 500);
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void onDiscoveredDisplays (final @ListensTo @Nonnull DisplayDiscoveryMessage message) { log.info("onDiscoveredDisplays({})", message); displayDiscoveryRequestor.stop(); populateDisplays(message.findDisplays()); presentation.selectFirstDisplay(); presentation.hideWaitingOnDisplayList(); }
/******************************************************************************************************************* * * ******************************************************************************************************************/ @PostConstruct public void initialize() { log.info("initialize()"); presentation = presentationBuilder.getPresentation(); propertyRenderers.clear(); propertyRenderers.add(new LuminanceRenderer(presentation)); propertyRenderers.add(new TemperatureRenderer(presentation)); presentation.bind(startNewMeasurementAction, selectedPropertyRendereIndex); presentation.showWaitingOnDisplayList(); displayDiscoveryRequestor.start(new DisplayDiscoveryQueryMessage()); }
@Override public void actionPerformed (final @Nonnull ActionEvent event) { try { getMessage().send(); } catch (InstantiationException e) { log.error("", e); } catch (IllegalAccessException e) { log.error("", e); } }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void onArchivedMeasurementsNotified (final @ListensTo @Nonnull UniformityArchiveContentMessage message) { log.info("onArchivedMeasurementsNotified({})", message); archivedMeasurementsRequestor.stop(); populateMeasurementsArchive(message.findMeasurements()); presentation.hideWaitingOnMeasurementsArchive(); presentation.renderDisplayName(selectedDisplay.getDisplay().getDisplayName()); presentation.renderProfileName(selectedDisplay.getProfile().getName()); }
@Override public void actionPerformed (final @Nonnull ActionEvent event) { try { getMessage().send(); } catch (InstantiationException e) { log.error("", e); } catch (IllegalAccessException e) { log.error("", e); } }