package jas.util; import java.awt.Checkbox; import java.awt.Choice; import java.awt.TextField; import java.beans.PropertyDescriptor; import java.util.Observer; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JSpinner; import javax.swing.JTextField; public class PropertyBinding { public PropertyBinding(FieldBinding field, String property) { m_field = field; m_property = property; } public PropertyBinding(TextField field, String property, byte flags) { m_field = new TextFieldBinding(field, flags); m_property = property; } public PropertyBinding(TextField field, String property) { m_field = new TextFieldBinding(field); m_property = property; } public PropertyBinding(JTextField field, String property, byte flags) { m_field = new JTextFieldBinding(field, flags); m_property = property; } public PropertyBinding(JTextField field, String property) { m_field = new JTextFieldBinding(field); m_property = property; } public PropertyBinding(JCheckBox field, String property) { m_field = new JCheckBoxFieldBinding(field); m_property = property; } public PropertyBinding(Checkbox field, String property) { m_field = new CheckboxFieldBinding(field); m_property = property; } public PropertyBinding(Choice field, String property) { m_field = new ChoiceFieldBinding(field); m_property = property; } public PropertyBinding(JComboBox field, String property) { m_field = new JComboBoxFieldBinding(field); m_property = property; } public PropertyBinding(ColorChooser field, String property) { m_field = new ColorFieldBinding(field); m_property = property; } public PropertyBinding(SpinBox field, String property) { m_field = new SpinFieldBinding(field); m_property = property; } public PropertyBinding(JSpinner field, String property) { m_field = new JSpinnerFieldBinding(field); m_property = property; } public void setBeanClass(Class c) { m_beanClass = c; } void addObserver(Observer o) { m_field.addObserver(o); } void doDataExchange(boolean set,Object bean) { if (m_beanClass != null && !m_beanClass.isAssignableFrom(bean.getClass())) return; try { PropertyDescriptor desc = new PropertyDescriptor(m_property,bean.getClass()); Class type = desc.getPropertyType(); if (!set) { Object value = desc.getReadMethod().invoke(bean,noargs); m_field.set(value); } else { if (!m_field.hasValueChanged()) return; Object o = m_field.get(type); Object[] args = { o }; desc.getWriteMethod().invoke(bean,args); } m_field.reset(); } catch (java.lang.reflect.InvocationTargetException x) { System.err.println("Problem dealing with property "+m_property); x.getTargetException().printStackTrace(); } catch (Exception x) { System.err.println("Problem dealing with property "+m_property); x.printStackTrace(); } } boolean hasValidInput() { return m_field.hasValidInput(); } private Class m_beanClass; private FieldBinding m_field; private String m_property; private final static Object[] noargs = new Object[0]; }