001    package org.springframework.richclient.form.binding.swing;
002    
003    import org.springframework.binding.form.FormModel;
004    import org.springframework.richclient.form.binding.support.CustomBinding;
005    import org.springframework.richclient.components.TimeTextField;
006    
007    import javax.swing.*;
008    import java.beans.PropertyChangeListener;
009    import java.beans.PropertyChangeEvent;
010    
011    @SuppressWarnings("unchecked")
012    public final class TimeBinding extends CustomBinding implements PropertyChangeListener
013    {
014    
015        private final TimeTextField field;
016    
017        public TimeBinding(FormModel model, String path, Class requiredSourceClass, TimeTextField field)
018        {
019            super(model, path, requiredSourceClass);
020            this.field = field;
021        }
022    
023        protected void valueModelChanged(Object newValue)
024        {
025            field.setValue(newValue);
026            readOnlyChanged();
027        }
028    
029        protected JComponent doBindControl()
030        {
031            field.setValue(getValue());
032            field.addPropertyChangeListener("value", this);
033            return field;
034        }
035    
036        public void propertyChange(PropertyChangeEvent evt)
037        {
038            controlValueChanged(field.getValue());
039        }
040    
041        protected void readOnlyChanged()
042        {
043            field.setEditable(isEnabled() && !isReadOnly());
044        }
045    
046        protected void enabledChanged()
047        {
048            field.setEnabled(isEnabled());
049            readOnlyChanged();
050        }
051    }
052