Subversion Repository Public Repository

litesoft

Diff Revisions 535 vs 536 for /trunk/GWT_Sandbox/MultiModule/common/src/org/litesoft/sandbox/multimodule/common/client/infrastructure/StyledSafeTextMessageUserSink.java

Diff revisions: vs.
  @@ -1,7 +1,10 @@
1 1 package org.litesoft.sandbox.multimodule.common.client.infrastructure;
2 2
3 + import java.util.*;
4 +
3 5 public class StyledSafeTextMessageUserSink implements MessageUserSink
4 6 {
7 +
5 8 private StyledSafeTextSink mSafeTextSink;
6 9
7 10 public StyledSafeTextMessageUserSink( StyledSafeTextSink pSafeTextSink )
  @@ -39,12 +42,92 @@
39 42 LOGGER.error.log( "setMessage(", pMessage, ")" );
40 43 }
41 44
42 - public static final MessageUserSinkAccessor FACTORY = new MessageUserSinkAccessor()
45 + private static class PriorityMessage
43 46 {
44 - @Override
45 - public MessageUserSink getMessageUserSink()
47 + private Priority mPriority;
48 + private String mMessage;
49 +
50 + public PriorityMessage( Priority pPriority, String pMessage )
51 + {
52 + mPriority = pPriority;
53 + mMessage = pMessage;
54 + }
55 +
56 + public Priority getPriority()
57 + {
58 + return mPriority;
59 + }
60 +
61 + public String getMessage()
62 + {
63 + return mMessage;
64 + }
65 +
66 + public boolean isLowerPriorityThan( Priority pPriority )
46 67 {
47 - return StyledSafeTextMessageUserSink.INSTANCE;
68 + return mPriority.isLowerPriorityThan( pPriority );
48 69 }
49 - };
70 +
71 + public boolean hasMessage( String pMessage )
72 + {
73 + return mMessage.equals( pMessage );
74 + }
75 + }
76 +
77 + private static class Manager
78 + {
79 + private final List<String>[] mMessagesByPriority = cast( new List[Priority.values().length] );
80 +
81 + {
82 + for ( int i = 0; i < mMessagesByPriority.length; i++ )
83 + {
84 + mMessagesByPriority[i] = new ArrayList<String>();
85 + }
86 + }
87 +
88 + /**
89 + * Get the Next Message (with the Highest Priority)
90 + *
91 + * @return null means no more messages
92 + */
93 + public PriorityMessage getNextMessage()
94 + {
95 + for ( Priority zPriority : Priority.values() )
96 + {
97 + List<String> zMessages = mMessagesByPriority[zPriority.ordinal()];
98 + if ( !zMessages.isEmpty() )
99 + {
100 + return new PriorityMessage( zPriority, zMessages.remove( 0 ));
101 + }
102 + }
103 + return null;
104 + }
105 +
106 + /**
107 + * Add a new Message.
108 + *
109 + * @return The Highest Priority Message's Priority OR null if no Messages waiting
110 + */
111 + public Priority addMessage( Priority pPriority, String pMessage )
112 + {
113 + if ( (pMessage != null) && ((pMessage = pMessage.trim()).length() != 0) )
114 + {
115 + mMessagesByPriority[Priority.deNull( pPriority ).ordinal()].add( pMessage );
116 + }
117 + for ( Priority zPriority : Priority.values() )
118 + {
119 + if ( !mMessagesByPriority[zPriority.ordinal()].isEmpty() )
120 + {
121 + return zPriority;
122 + }
123 + }
124 + return null;
125 + }
126 +
127 + @SuppressWarnings({"unchecked"})
128 + private static <T> T cast( Object pObject )
129 + {
130 + return (T) pObject;
131 + }
132 + }
50 133 }