Subversion Repository Public Repository

litesoft

Diff Revisions 949 vs 950 for /trunk/GWT_Sandbox/FormEngine/src/com/temp/client/foundation/widget/input/fieldsupport/AbstractNonProxyInputField.java

Diff revisions: vs.
  @@ -1,296 +1,296 @@
1 - package com.temp.client.foundation.widget.input.fieldsupport;
2 -
3 - import org.litesoft.core.util.externalization.*;
4 -
5 - import com.google.gwt.event.dom.client.*;
6 - import com.google.gwt.user.client.ui.*;
7 - import com.temp.client.foundation.widget.*;
8 - import com.temp.client.foundation.widget.input.*;
9 - import com.temp.shared.*;
10 - import com.temp.shared.utils.*;
11 -
12 - import java.util.*;
13 -
14 - /**
15 - * Common abstract helper for both the generated Widget and the Proxied versions of the InputField.
16 - */
17 - public abstract class AbstractNonProxyInputField<T, C extends AbstractNonProxyInputField<T, C>> extends AbstractInputField<T, C> {
18 - // Required to be set
19 - private String name;
20 -
21 - // The above must be set/changed BEFORE the widget is attached!
22 -
23 - // Optionally set
24 - private List<ValueValidator<T>> validators = new ArrayList<ValueValidator<T>>();
25 -
26 - private CompleteInputFieldAccessor<T> completeInputFieldAccessor;
27 -
28 - protected final List<HasName> namedWidgets = new ArrayList<HasName>();
29 -
30 - // Configuration Methods
31 -
32 - @Override
33 - public final String getName() {
34 - return name;
35 - }
36 -
37 - @Override
38 - public final void setName( String name ) {
39 - assertBuildMode( "setName" );
40 - setValidatedName( Validate.noEmptyIdentifier( "Name", name ) );
41 - }
42 -
43 - public final C name( String name ) {
44 - assertBuildMode( "name" );
45 - setValidatedName( Validate.noEmptyIdentifier( "Name", name ) );
46 - return inheritanceLeaf();
47 - }
48 -
49 - protected void setValidatedName( String name ) {
50 - this.name = name;
51 - }
52 -
53 - /**
54 - * The 'Builder' to 'Run' state transition method fully constructs/populates the InputField's Widget / container.
55 - *
56 - * @param parentResolver
57 - *
58 - * @return this for method chaining
59 - */
60 - @Override
61 - public final void init( E13nResolver parentResolver ) {
62 - Validate.notNull( "resolver", parentResolver );
63 - if ( name == null ) {
64 - throw new IllegalStateException( "Unable to init, Name not set" );
65 - }
66 - assertBuildMode( "init" );
67 -
68 - E13nResolver resolver = new OptionallyPrefixingE13nResolver( name, parentResolver ); // add our name to keys!
69 -
70 - completeInputFieldAccessor = buildActualWidget( resolver );
71 - completeInputFieldAccessor.init( enabled, // propagate current enabled state
72 - new FocusChangedListener() {
73 - @Override
74 - public void focusChanged() {
75 - processFocusChanged();
76 - }
77 - } );
78 - completeInputFieldAccessor.getInput().addChangeHandler( new ChangeHandler() {
79 - @Override
80 - public void onChange( ChangeEvent event ) {
81 - processDataChanged();
82 - }
83 - } );
84 - }
85 -
86 - @Override
87 - public final boolean isRunMode() {
88 - return (completeInputFieldAccessor != null);
89 - }
90 -
91 - public final ValueValidator<T>[] getValidators() {
92 - return ObjectUtils.cast( validators.isEmpty() ? ValueValidator.EMPTY_ARRAY : validators.toArray( new ValueValidator[validators.size()] ) );
93 - }
94 -
95 - public final InputField<T> add( ValueValidator<T> validator ) {
96 - if ( validator != null ) {
97 - validators.add( validator );
98 - validatorAdded( validator );
99 - }
100 - return this;
101 - }
102 -
103 - public final InputField<T> add( ValueValidator<T>... additionalValidators ) {
104 - if ( additionalValidators != null ) {
105 - for ( ValueValidator<T> validator : additionalValidators ) {
106 - add( validator ); // null OK will be filter later
107 - }
108 - }
109 - return this;
110 - }
111 -
112 - abstract protected void validatorAdded( ValueValidator<T> validator );
113 -
114 - protected final HasEnabled getEnableable() {
115 - return completeInputFieldAccessor;
116 - }
117 -
118 - // Anytime Methods
119 -
120 - // Only callable in Run Mode
121 -
122 - @Override
123 - public final void reset() {
124 - updateCurrentValue( checkRunMode( "reset" ), null );
125 - }
126 -
127 - @Override
128 - public final T setCurrentValue( T value ) {
129 - CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "setCurrentValue" );
130 - updateCurrentValue( fieldAccessor, value );
131 - return fieldAccessor.getInput().getValue();
132 - }
133 -
134 - @Override
135 - public final T getCurrentValue() {
136 - return checkRunMode( "getCurrentValue" ).getInput().getValue();
137 - }
138 -
139 - @Override
140 - public final T getBaseValue() {
141 - return checkRunMode( "getBaseValue" ).getInput().getBaseValue();
142 - }
143 -
144 - @Override
145 - public final void revert() {
146 - CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "revert" );
147 - updateCurrentValue( fieldAccessor, fieldAccessor.getInput().getBaseValue() );
148 - }
149 -
150 - protected final void updateCurrentValue( CompleteInputFieldAccessor<T> fieldAccessor, T value ) {
151 - fieldAccessor.getInput().setValue( value );
152 - clearError( fieldAccessor );
153 - }
154 -
155 - protected final void clearError( CompleteInputFieldAccessor<T> fieldAccessor ) {
156 - updateErrorLabel( fieldAccessor.getErrorLabel(), null );
157 - }
158 -
159 - @Override
160 - public final boolean isChanged() {
161 - return checkRunMode( "isChanged" ).getInput().isChanged();
162 - }
163 -
164 - @Override
165 - public final Boolean isFocused() {
166 - CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "isFocused" );
167 - Boolean focused = fieldAccessor.isFocused();
168 - return Boolean.TRUE.equals( focused ) ? isVisible() : focused;
169 - }
170 -
171 - @Override
172 - public final boolean isErrored() {
173 - return (null != checkRunMode( "isErrored" ).getValidator().getErrorData());
174 - }
175 -
176 - @Override
177 - public final E13nData getErrorData() {
178 - return checkRunMode( "getErrorData" ).getValidator().getErrorData();
179 - }
180 -
181 - @Override
182 - public final boolean validate() {
183 - CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "validate" );
184 - E13nData error = fieldAccessor.getValidator().validate();
185 - updateStyle( fieldAccessor );
186 - updateErrorLabel( fieldAccessor.getErrorLabel(), error );
187 - return (error == null);
188 - }
189 -
190 - @Override
191 - public final boolean setFocused() {
192 - CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "setFocused" );
193 - return isVisible() && fieldAccessor.setFocused();
194 - }
195 -
196 - @Override
197 - public final E13nResolver getE13nResolver() {
198 - return checkRunMode( "E13nResolver" ).getE13nResolver();
199 - }
200 -
201 - public final Widget getInputWidget() {
202 - return checkRunMode( "InputWidget" ).getInputWidget();
203 - }
204 -
205 - public final InputWidgetChangeFilter<T> getInput() {
206 - return checkRunMode( "Input" ).getInput();
207 - }
208 -
209 - public final InputWidgetValidator<T> getValidator() {
210 - return checkRunMode( "Validator" ).getValidator();
211 - }
212 -
213 - public final Widget getLabelLabel() {
214 - return checkRunMode( "LabelLabel" ).getLabelLabel();
215 - }
216 -
217 - public final Widget getExtendedLabel() {
218 - return checkRunMode( "ExtendedLabel" ).getExtendedLabel();
219 - }
220 -
221 - public final Widget getExampleLabel() {
222 - return checkRunMode( "ExampleLabel" ).getExampleLabel();
223 - }
224 -
225 - public final Widget getErrorLabel() {
226 - return checkRunMode( "ErrorLabel" ).getErrorLabel();
227 - }
228 -
229 - public final Widget getHelpWidget() {
230 - return checkRunMode( "HelpWidget" ).getHelpWidget();
231 - }
232 -
233 - @Override
234 - public NameToID addNamedWidgetsTo( NameToID nameToID ) {
235 - assertRunMode( "addNamedWidgetsTo" );
236 - return nameToID.add( namedWidgets );
237 - }
238 -
239 - // Support Methods...
240 -
241 - protected final <W extends Widget & HasName> W addNamedWidgetWithStyle( W widget, String style ) {
242 - widget.addStyleName( style );
243 - return addNamedWidgetWithNameExtension( widget, style );
244 - }
245 -
246 - protected final <W extends HasName> W addNamedWidgetWithNameExtension( W widget, String nameExtension ) {
247 - widget.setName( getName() + "_" + nameExtension );
248 - return addNamedWidget( widget );
249 - }
250 -
251 - protected final <W extends HasName> W addNamedWidget( W widget ) {
252 - namedWidgets.add( widget );
253 - return widget;
254 - }
255 -
256 - protected void processDataChanged() {
257 - CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "processDataChanged" );
258 - updateStyle( fieldAccessor );
259 - clearError( fieldAccessor );
260 - notifyChangeListeners();
261 - }
262 -
263 - protected void processFocusChanged() {
264 - updateStyle( checkRunMode( "processFocusChanged" ) );
265 - notifyFocusChangeListeners();
266 - }
267 -
268 - protected void updateStyle( CompleteInputFieldAccessor<T> fieldAccessor ) {
269 - updateStyle( StateInputField.BASE //
270 - .errored( fieldAccessor.getValidator().getErrorData() != null ) //
271 - .focused( Boolean.TRUE.equals( fieldAccessor.isFocused() ) ) //
272 - .changed( fieldAccessor.getInput().isChanged() ) );
273 - }
274 -
275 - protected String revolve( String method, E13nData error ) {
276 - if ( error != null ) {
277 - CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( method );
278 - String resolved = fieldAccessor.getE13nResolver().resolve( error );
279 - return StringUtils.noEmpty( StringUtils.convertNBSPsToSpaces( resolved ) );
280 - }
281 - return null;
282 - }
283 -
284 - protected final CompleteInputFieldAccessor<T> checkRunMode( String method ) {
285 - assertRunMode( method );
286 - return completeInputFieldAccessor;
287 - }
288 -
289 - protected final CompleteInputFieldAccessor<T> checkRunMode() {
290 - return completeInputFieldAccessor;
291 - }
292 -
293 - abstract protected CompleteInputFieldAccessor<T> buildActualWidget( E13nResolver resolver );
294 -
295 - abstract protected void updateErrorLabel( Widget errorLabel, E13nData error );
296 - }
1 + package com.temp.client.foundation.widget.input.fieldsupport;
2 +
3 + import org.litesoft.core.util.externalization.*;
4 +
5 + import com.google.gwt.event.dom.client.*;
6 + import com.google.gwt.user.client.ui.*;
7 + import com.temp.client.foundation.widget.*;
8 + import com.temp.client.foundation.widget.input.*;
9 + import com.temp.shared.*;
10 + import com.temp.shared.utils.*;
11 +
12 + import java.util.*;
13 +
14 + /**
15 + * Common abstract helper for both the generated Widget and the Proxied versions of the InputField.
16 + */
17 + public abstract class AbstractNonProxyInputField<T, C extends AbstractNonProxyInputField<T, C>> extends AbstractInputField<T, C> {
18 + // Required to be set
19 + private String name;
20 +
21 + // The above must be set/changed BEFORE the widget is attached!
22 +
23 + // Optionally set
24 + private List<ValueValidator<T>> validators = new ArrayList<ValueValidator<T>>();
25 +
26 + private CompleteInputFieldAccessor<T> completeInputFieldAccessor;
27 +
28 + protected final List<HasName> namedWidgets = new ArrayList<HasName>();
29 +
30 + // Configuration Methods
31 +
32 + @Override
33 + public final String getName() {
34 + return name;
35 + }
36 +
37 + @Override
38 + public final void setName( String name ) {
39 + assertBuildMode( "setName" );
40 + setValidatedName( Validate.noEmptyIdentifier( "Name", name ) );
41 + }
42 +
43 + public final C name( String name ) {
44 + assertBuildMode( "name" );
45 + setValidatedName( Validate.noEmptyIdentifier( "Name", name ) );
46 + return inheritanceLeaf();
47 + }
48 +
49 + protected void setValidatedName( String name ) {
50 + this.name = name;
51 + }
52 +
53 + /**
54 + * The 'Builder' to 'Run' state transition method fully constructs/populates the InputField's Widget / container.
55 + *
56 + * @param parentResolver
57 + *
58 + * @return this for method chaining
59 + */
60 + @Override
61 + public final void init( E13nResolver parentResolver ) {
62 + Validate.notNull( "resolver", parentResolver );
63 + if ( name == null ) {
64 + throw new IllegalStateException( "Unable to init, Name not set" );
65 + }
66 + assertBuildMode( "init" );
67 +
68 + E13nResolver resolver = new OptionallyPrefixingE13nResolver( name, parentResolver ); // add our name to keys!
69 +
70 + completeInputFieldAccessor = buildActualWidget( resolver );
71 + completeInputFieldAccessor.init( enabled, // propagate current enabled state
72 + new FocusChangedListener() {
73 + @Override
74 + public void focusChanged() {
75 + processFocusChanged();
76 + }
77 + } );
78 + completeInputFieldAccessor.getInput().addChangeHandler( new ChangeHandler() {
79 + @Override
80 + public void onChange( ChangeEvent event ) {
81 + processDataChanged();
82 + }
83 + } );
84 + }
85 +
86 + @Override
87 + public final boolean isRunMode() {
88 + return (completeInputFieldAccessor != null);
89 + }
90 +
91 + public final ValueValidator<T>[] getValidators() {
92 + return ObjectUtils.cast( validators.isEmpty() ? ValueValidator.EMPTY_ARRAY : validators.toArray( new ValueValidator[validators.size()] ) );
93 + }
94 +
95 + public final InputField<T> add( ValueValidator<T> validator ) {
96 + if ( validator != null ) {
97 + validators.add( validator );
98 + validatorAdded( validator );
99 + }
100 + return this;
101 + }
102 +
103 + public final InputField<T> add( ValueValidator<T>... additionalValidators ) {
104 + if ( additionalValidators != null ) {
105 + for ( ValueValidator<T> validator : additionalValidators ) {
106 + add( validator ); // null OK will be filter later
107 + }
108 + }
109 + return this;
110 + }
111 +
112 + abstract protected void validatorAdded( ValueValidator<T> validator );
113 +
114 + protected final HasEnabled getEnableable() {
115 + return completeInputFieldAccessor;
116 + }
117 +
118 + // Anytime Methods
119 +
120 + // Only callable in Run Mode
121 +
122 + @Override
123 + public final void reset() {
124 + updateCurrentValue( checkRunMode( "reset" ), null );
125 + }
126 +
127 + @Override
128 + public final T setCurrentValue( T value ) {
129 + CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "setCurrentValue" );
130 + updateCurrentValue( fieldAccessor, value );
131 + return fieldAccessor.getInput().getValue();
132 + }
133 +
134 + @Override
135 + public final T getCurrentValue() {
136 + return checkRunMode( "getCurrentValue" ).getInput().getValue();
137 + }
138 +
139 + @Override
140 + public final T getBaseValue() {
141 + return checkRunMode( "getBaseValue" ).getInput().getBaseValue();
142 + }
143 +
144 + @Override
145 + public final void revert() {
146 + CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "revert" );
147 + updateCurrentValue( fieldAccessor, fieldAccessor.getInput().getBaseValue() );
148 + }
149 +
150 + protected final void updateCurrentValue( CompleteInputFieldAccessor<T> fieldAccessor, T value ) {
151 + fieldAccessor.getInput().setValue( value );
152 + clearError( fieldAccessor );
153 + }
154 +
155 + protected final void clearError( CompleteInputFieldAccessor<T> fieldAccessor ) {
156 + updateErrorLabel( fieldAccessor.getErrorLabel(), null );
157 + }
158 +
159 + @Override
160 + public final boolean isChanged() {
161 + return checkRunMode( "isChanged" ).getInput().isChanged();
162 + }
163 +
164 + @Override
165 + public final Boolean isFocused() {
166 + CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "isFocused" );
167 + Boolean focused = fieldAccessor.isFocused();
168 + return Boolean.TRUE.equals( focused ) ? isVisible() : focused;
169 + }
170 +
171 + @Override
172 + public final boolean isErrored() {
173 + return (null != checkRunMode( "isErrored" ).getValidator().getErrorData());
174 + }
175 +
176 + @Override
177 + public final E13nData getErrorData() {
178 + return checkRunMode( "getErrorData" ).getValidator().getErrorData();
179 + }
180 +
181 + @Override
182 + public final boolean validate() {
183 + CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "validate" );
184 + E13nData error = fieldAccessor.getValidator().validate();
185 + updateStyle( fieldAccessor );
186 + updateErrorLabel( fieldAccessor.getErrorLabel(), error );
187 + return (error == null);
188 + }
189 +
190 + @Override
191 + public final boolean setFocused() {
192 + CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "setFocused" );
193 + return isVisible() && fieldAccessor.setFocused();
194 + }
195 +
196 + @Override
197 + public final E13nResolver getE13nResolver() {
198 + return checkRunMode( "E13nResolver" ).getE13nResolver();
199 + }
200 +
201 + public final Widget getInputWidget() {
202 + return checkRunMode( "InputWidget" ).getInputWidget();
203 + }
204 +
205 + public final InputWidgetChangeFilter<T> getInput() {
206 + return checkRunMode( "Input" ).getInput();
207 + }
208 +
209 + public final InputWidgetValidator<T> getValidator() {
210 + return checkRunMode( "Validator" ).getValidator();
211 + }
212 +
213 + public final Widget getLabelLabel() {
214 + return checkRunMode( "LabelLabel" ).getLabelLabel();
215 + }
216 +
217 + public final Widget getExtendedLabel() {
218 + return checkRunMode( "ExtendedLabel" ).getExtendedLabel();
219 + }
220 +
221 + public final Widget getExampleLabel() {
222 + return checkRunMode( "ExampleLabel" ).getExampleLabel();
223 + }
224 +
225 + public final Widget getErrorLabel() {
226 + return checkRunMode( "ErrorLabel" ).getErrorLabel();
227 + }
228 +
229 + public final Widget getHelpWidget() {
230 + return checkRunMode( "HelpWidget" ).getHelpWidget();
231 + }
232 +
233 + @Override
234 + public NameToID addNamedWidgetsTo( NameToID nameToID ) {
235 + assertRunMode( "addNamedWidgetsTo" );
236 + return nameToID.add( namedWidgets );
237 + }
238 +
239 + // Support Methods...
240 +
241 + protected final <W extends Widget & HasName> W addNamedWidgetWithStyle( W widget, String style ) {
242 + widget.addStyleName( style );
243 + return addNamedWidgetWithNameExtension( widget, style );
244 + }
245 +
246 + protected final <W extends HasName> W addNamedWidgetWithNameExtension( W widget, String nameExtension ) {
247 + widget.setName( getName() + "_" + nameExtension );
248 + return addNamedWidget( widget );
249 + }
250 +
251 + protected final <W extends HasName> W addNamedWidget( W widget ) {
252 + namedWidgets.add( widget );
253 + return widget;
254 + }
255 +
256 + protected void processDataChanged() {
257 + CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( "processDataChanged" );
258 + updateStyle( fieldAccessor );
259 + clearError( fieldAccessor );
260 + notifyChangeListeners();
261 + }
262 +
263 + protected void processFocusChanged() {
264 + updateStyle( checkRunMode( "processFocusChanged" ) );
265 + notifyFocusChangeListeners();
266 + }
267 +
268 + protected void updateStyle( CompleteInputFieldAccessor<T> fieldAccessor ) {
269 + updateStyle( StateInputField.BASE //
270 + .errored( fieldAccessor.getValidator().getErrorData() != null ) //
271 + .focused( Boolean.TRUE.equals( fieldAccessor.isFocused() ) ) //
272 + .changed( fieldAccessor.getInput().isChanged() ) );
273 + }
274 +
275 + protected String revolve( String method, E13nData error ) {
276 + if ( error != null ) {
277 + CompleteInputFieldAccessor<T> fieldAccessor = checkRunMode( method );
278 + String resolved = fieldAccessor.getE13nResolver().resolve( error );
279 + return StringUtils.noEmpty( StringUtils.convertNBSPsToSpaces( resolved ) );
280 + }
281 + return null;
282 + }
283 +
284 + protected final CompleteInputFieldAccessor<T> checkRunMode( String method ) {
285 + assertRunMode( method );
286 + return completeInputFieldAccessor;
287 + }
288 +
289 + protected final CompleteInputFieldAccessor<T> checkRunMode() {
290 + return completeInputFieldAccessor;
291 + }
292 +
293 + abstract protected CompleteInputFieldAccessor<T> buildActualWidget( E13nResolver resolver );
294 +
295 + abstract protected void updateErrorLabel( Widget errorLabel, E13nData error );
296 + }