From c40c32d7828923365b076e04c4da7bf0309f5a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 18 May 2009 19:39:23 +0200 Subject: [PATCH] ItEr09S11ArquitecturaClientesItEr08S06: Ensure minimum visualization time for messages. --- .../web/common/MessagesForUser.java | 41 ++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/MessagesForUser.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/MessagesForUser.java index 35d5def1d..b724210ec 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/MessagesForUser.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/MessagesForUser.java @@ -21,14 +21,41 @@ import org.zkoss.zul.Label; public class MessagesForUser extends GenericForwardComposer implements IMessagesForUser { + private static final long DEFAULT_MINIMUM_VISUALIZATION_TIME_MILLIS = + 1000 * 2; // 2 seconds + + private class ComponentHolderTimestamped { + final Component component; + final long timestamp; + + ComponentHolderTimestamped(Component component) { + this.component = component; + this.timestamp = System.currentTimeMillis(); + } + + public boolean minimumVisualizationTimeSurpased(long currentTime) { + return currentTime - timestamp > minimumVisualizationTimeMilliseconds; + } + } + private Component container; - private Queue pendingToDetach = new ConcurrentLinkedQueue(); + private final long minimumVisualizationTimeMilliseconds; + + private Queue pendingToDetach = + new ConcurrentLinkedQueue(); private static final String DETACH_EVENT_NAME = "onMarkDetached"; public MessagesForUser(Component container) { + this(container, DEFAULT_MINIMUM_VISUALIZATION_TIME_MILLIS); + } + + public MessagesForUser(Component container, + long minimumVisualizationTimeMilliseconds) { this.container = container; + this.minimumVisualizationTimeMilliseconds = + minimumVisualizationTimeMilliseconds; container.getPage().getDesktop().addListener(new EventInterceptor() { @Override @@ -46,9 +73,13 @@ public class MessagesForUser extends GenericForwardComposer implements || pendingToDetach.isEmpty()) { return event; } - Component currrent = null; - while ((currrent = pendingToDetach.poll()) != null) { - currrent.detach(); + long currentTime = System.currentTimeMillis(); + ComponentHolderTimestamped currrent = null; + while ((currrent = pendingToDetach.peek()) != null + && currrent + .minimumVisualizationTimeSurpased(currentTime)) { + currrent.component.detach(); + pendingToDetach.poll(); } return event; } @@ -85,7 +116,7 @@ public class MessagesForUser extends GenericForwardComposer implements @Override public void onEvent(Event event) throws Exception { - pendingToDetach.offer(label); + pendingToDetach.offer(new ComponentHolderTimestamped(label)); } }); }