litesoft
@ 950
litesoft / trunk / GWT_Sandbox / FormEngine / src / com / temp / client / foundation / widget / input / fieldsupport / InputWidgetChangeFilter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
package com.temp.client.foundation.widget.input.fieldsupport; import com.google.gwt.event.dom.client.*; import com.google.gwt.event.shared.*; import com.temp.client.foundation.widget.input.support.*; import com.temp.client.foundation.widget.input.support.events.*; import com.temp.shared.utils.*; public class InputWidgetChangeFilter<T> implements InputWidgetValueAdapter<T> { protected final NonDomHandlerManager<ChangeHandler> handlerManager; protected final InputWidgetValueAdapter<T> delegateTo; protected T baseNotChangedValue; protected boolean isChanged; public InputWidgetChangeFilter( InputWidgetValueAdapter<T> delegateTo ) { handlerManager = new NonDomHandlerManager<ChangeHandler>( this ); this.delegateTo = delegateTo; baseNotChangedValue = delegateTo.getValue(); delegateTo.addChangeHandler( new ChangeHandler() { @Override public void onChange( ChangeEvent event ) { checkForChange(); } } ); } public HandlerRegistration addFilteredChangeHandler( ChangeHandler handler ) { return handler == null ? null : registerChangeHandler( handler ); } @Override public HandlerRegistration addChangeHandler( ChangeHandler handler ) { return delegateTo.addChangeHandler( handler ); } @Override public T getValue() { return checkForChange(); } @Override public void setValue( T value ) { delegateTo.setValue( value ); baseNotChangedValue = delegateTo.getValue(); setChanged( false ); } public T getBaseValue() { return baseNotChangedValue; } public void setValueAsUser( T value ) { delegateTo.setValue( value ); checkForChange(); } public boolean isChanged() { return isChanged; } protected T checkForChange() { T curValue = delegateTo.getValue(); setChanged( !ObjectUtils.areEqual( baseNotChangedValue, curValue ) ); return curValue; } protected void setChanged( boolean newChangedState ) { boolean curChangedState = isChanged; isChanged = newChangedState; if ( curChangedState != newChangedState ) { notifyChangeHandlers(); } } protected void notifyChangeHandlers() { handlerManager.fireEvent( new NonDomChangeEvent() ); } protected HandlerRegistration registerChangeHandler( ChangeHandler handler ) { return handlerManager.addHandler( handler ); } } |