1 4 package org.terracotta.dso.editors.xmlbeans; 5 6 import org.apache.xmlbeans.XmlObject; 7 8 import com.tc.admin.common.XAbstractAction; 9 import com.tc.admin.common.XSpinner; 10 import org.terracotta.dso.editors.ConfigurationEditorPanel; 11 12 import java.awt.event.ActionEvent ; 13 14 import javax.swing.JFormattedTextField ; 15 import javax.swing.SpinnerNumberModel ; 16 17 public class XmlIntegerSpinner extends XSpinner 18 implements XmlObjectHolder 19 { 20 private XmlObjectHolderHelper m_helper; 21 private boolean m_listening; 22 23 public XmlIntegerSpinner() { 24 super(); 25 m_helper = new XmlObjectHolderHelper(); 26 27 getActionMap().put(RESET, new ResetAction()); 28 getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(RESET_STROKE, RESET); 29 } 30 31 private JFormattedTextField getTextField() { 32 return ((DefaultEditor)getEditor()).getTextField(); 33 } 34 35 protected void ensureXmlObject() { 36 ConfigurationEditorPanel parent = (ConfigurationEditorPanel) 37 getAncestorOfClass(ConfigurationEditorPanel.class, this); 38 39 if(parent != null) { 40 parent.ensureXmlObject(); 41 } 42 } 43 44 private SpinnerNumberModel getSpinnerNumberModel() { 45 return (SpinnerNumberModel )getModel(); 46 } 47 48 private void setSpinnerValue(Number value) { 49 getSpinnerNumberModel().setValue(value); 50 } 51 52 public Number getNumber() { 53 return getSpinnerNumberModel().getNumber(); 54 } 55 56 public void setup(XmlObject parent) { 57 m_listening = false; 58 m_helper.setup(parent); 59 setSpinnerValue(integerValue()); 60 if(isSet()) { 61 m_helper.validateXmlObject(this); 62 } 63 m_listening = true; 64 } 65 66 public void init(Class parentClass, String elementName) { 67 m_helper.init(parentClass, elementName); 68 setModel(new SpinnerNumberModel (m_helper.defaultIntegerValue(), 69 m_helper.minInclusive(), 70 m_helper.maxInclusive(), 71 new Integer (1))); 72 } 73 74 protected void fireStateChanged() { 75 if(m_listening) { 76 set(); 77 } 78 super.fireStateChanged(); 79 } 80 81 public void tearDown() { 82 m_helper.tearDown(); 83 m_listening = false; 84 setSpinnerValue(m_helper.defaultIntegerValue()); 85 } 86 87 public Integer integerValue() { 88 return isSet() ? m_helper.getIntegerValue() : m_helper.defaultIntegerValue(); 89 } 90 91 public boolean isRequired() { 92 return m_helper.isRequired(); 93 } 94 95 public boolean isSet() { 96 return m_helper.isSet(); 97 } 98 99 public void set() { 100 int iVal = getNumber().intValue(); 101 102 ensureXmlObject(); 103 m_helper.set(Integer.toString(iVal)); 104 setSpinnerValue(new Integer (iVal)); 105 m_helper.validateXmlObject(this); 106 } 107 108 public void unset() { 109 if(!isRequired()) { 110 m_listening = false; 111 m_helper.unset(); 112 Integer iVal = m_helper.defaultIntegerValue(); 113 setSpinnerValue(iVal); 114 getTextField().setValue(iVal); 115 m_listening = true; 116 } 117 } 118 119 public synchronized void addXmlObjectStructureListener(XmlObjectStructureListener listener) { 120 m_helper.addXmlObjectStructureListener(listener); 121 } 122 123 public synchronized void removeXmlObjectStructureListener(XmlObjectStructureListener listener) { 124 m_helper.removeXmlObjectStructureListener(listener); 125 } 126 127 class ResetAction extends XAbstractAction { 128 ResetAction() { 129 super("Reset"); 130 setShortDescription("Reset to default value"); 131 } 132 133 public void actionPerformed(ActionEvent ae) { 134 unset(); 135 } 136 } 137 } 138 | Popular Tags |