Subversion Repository Public Repository

litesoft

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

Diff revisions: vs.
  @@ -4,8 +4,9 @@
4 4
5 5 public class StyledSafeTextMessageUserSink implements MessageUserSink
6 6 {
7 -
8 - private StyledSafeTextSink mSafeTextSink;
7 + private final Manager mManager = new Manager();
8 + private final StyledSafeTextSink mSafeTextSink;
9 + private PriorityMessage mCurrentMessage;
9 10
10 11 public StyledSafeTextMessageUserSink( StyledSafeTextSink pSafeTextSink )
11 12 {
  @@ -15,31 +16,83 @@
15 16 @Override
16 17 public void clearMessage()
17 18 {
18 - LOGGER.info.log( "clearMessage" );
19 + Priority zNextPriority = mManager.getNextPriority();
20 + if ( !optionallyUpdateCurrentMessage( zNextPriority ) )
21 + {
22 + removeCurrentMessageStyle();
23 + mCurrentMessage = null;
24 + if ( !optionallyUpdateCurrentMessage( zNextPriority ) )
25 + {
26 + setMessageAndStyle( "", Priority.Info );
27 + }
28 + }
19 29 }
20 30
21 31 @Override
22 32 public void clearMessage( String pMessage )
23 33 {
24 - LOGGER.info.log( "clearMessage(", pMessage, ")" );
34 + if ( mCurrentMessage != null && mCurrentMessage.hasMessage( pMessage ) )
35 + {
36 + clearMessage();
37 + return;
38 + }
39 + mManager.removeMessage( pMessage );
25 40 }
26 41
27 42 @Override
28 43 public void setInfoMessage( String pMessage )
29 44 {
30 - LOGGER.info.log( "setMessage(", pMessage, ")" );
45 + optionallyUpdateCurrentMessage( mManager.addMessage( Priority.Info, pMessage ) );
31 46 }
32 47
33 48 @Override
34 49 public void setWarningMessage( String pMessage )
35 50 {
36 - LOGGER.warn.log( "setMessage(", pMessage, ")" );
51 + optionallyUpdateCurrentMessage( mManager.addMessage( Priority.Warning, pMessage ) );
37 52 }
38 53
39 54 @Override
40 55 public void setErrorMessage( String pMessage )
41 56 {
42 - LOGGER.error.log( "setMessage(", pMessage, ")" );
57 + optionallyUpdateCurrentMessage( mManager.addMessage( Priority.Error, pMessage ) );
58 + }
59 +
60 + /**
61 + * @param pNextHighestPriority null OK - means no more messages - Don't update
62 + *
63 + * @return true if updated the the Current Message
64 + */
65 + private boolean optionallyUpdateCurrentMessage( Priority pNextHighestPriority )
66 + {
67 + if ( pNextHighestPriority != null )
68 + {
69 + Priority zCurrentPriority = getCurrentMessagePriority();
70 + if ( zCurrentPriority == null || zCurrentPriority.isLowerPriorityThan( pNextHighestPriority ) )
71 + {
72 + removeCurrentMessageStyle();
73 + mCurrentMessage = mManager.getNextMessage();
74 + setMessageAndStyle( mCurrentMessage.getMessage(), mCurrentMessage.getPriority() );
75 + return true;
76 + }
77 + }
78 + return false;
79 + }
80 +
81 + private void removeCurrentMessageStyle()
82 + {
83 + Priority zCurrentStyle = Priority.deNull( getCurrentMessagePriority() );
84 + mSafeTextSink.removeStyleName( zCurrentStyle.name() );
85 + }
86 +
87 + private void setMessageAndStyle( String pMessage, Priority pPriority )
88 + {
89 + mSafeTextSink.addStyleName( pPriority.name() );
90 + mSafeTextSink.setText( pMessage );
91 + }
92 +
93 + private Priority getCurrentMessagePriority()
94 + {
95 + return (mCurrentMessage != null) ? mCurrentMessage.getPriority() : null;
43 96 }
44 97
45 98 private static class PriorityMessage
  @@ -90,6 +143,23 @@
90 143 *
91 144 * @return null means no more messages
92 145 */
146 + public Priority getNextPriority()
147 + {
148 + for ( Priority zPriority : Priority.values() )
149 + {
150 + if ( !mMessagesByPriority[zPriority.ordinal()].isEmpty() )
151 + {
152 + return zPriority;
153 + }
154 + }
155 + return null;
156 + }
157 +
158 + /**
159 + * Get the Next Message (with the Highest Priority)
160 + *
161 + * @return null means no more messages
162 + */
93 163 public PriorityMessage getNextMessage()
94 164 {
95 165 for ( Priority zPriority : Priority.values() )
  @@ -97,7 +167,7 @@
97 167 List<String> zMessages = mMessagesByPriority[zPriority.ordinal()];
98 168 if ( !zMessages.isEmpty() )
99 169 {
100 - return new PriorityMessage( zPriority, zMessages.remove( 0 ));
170 + return new PriorityMessage( zPriority, zMessages.remove( 0 ) );
101 171 }
102 172 }
103 173 return null;
  @@ -129,5 +199,17 @@
129 199 {
130 200 return (T) pObject;
131 201 }
202 +
203 + public void removeMessage( String pMessage )
204 + {
205 + for ( Priority zPriority : Priority.values() )
206 + {
207 + List<String> zMessages = mMessagesByPriority[zPriority.ordinal()];
208 + if ( zMessages.remove( pMessage ) )
209 + {
210 + return;
211 + }
212 + }
213 + }
132 214 }
133 215 }