--- /dev/null
+// StringChoiceEditor.java\r
+// $Id: StringChoiceEditor.java,v 1.2 2010/06/15 17:52:56 smhuang Exp $\r
+// (c) COPYRIGHT MIT and INRIA, 1997.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+\r
+package org.w3c.jigadm.editors;\r
+\r
+import java.awt.Component;\r
+import java.awt.Dimension;\r
+\r
+import java.awt.event.TextEvent;\r
+import java.awt.event.TextListener;\r
+\r
+import java.util.Hashtable;\r
+import java.util.Properties;\r
+\r
+import org.w3c.tools.resources.Attribute;\r
+\r
+import org.w3c.jigadm.RemoteResourceWrapper;\r
+\r
+import org.w3c.jigsaw.admin.RemoteAccessException;\r
+\r
+import org.w3c.tools.widgets.StringChoice;\r
+\r
+/**\r
+ * An editor for StringChoice attributes. \r
+ * @author Benoit Mahe <bmahe@sophia.inria.fr>\r
+ */\r
+\r
+public class StringChoiceEditor extends AttributeEditor {\r
+\r
+ class StringChoiceComponent extends StringChoice \r
+ implements TextListener\r
+ {\r
+\r
+ EditorFeeder feeder = null;\r
+ StringChoiceEditor editor = null;\r
+\r
+ //TextListener\r
+ public void textValueChanged(TextEvent e) {\r
+ editor.setModified();\r
+ }\r
+\r
+ StringChoiceComponent(StringChoiceEditor editor,\r
+ String selected,\r
+ EditorFeeder feeder) \r
+ {\r
+ super();\r
+ addTextListener(this);\r
+ this.editor = editor;\r
+ this.feeder = feeder;\r
+ setText(selected);\r
+ removeAll();\r
+ String items[] = feeder.getDefaultItems();\r
+ addItems(items);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Properties - The feeder's class name.\r
+ */\r
+ public static final String FEEDER_CLASS_P = "feeder.class";\r
+\r
+ protected boolean hasChanged = false;\r
+ protected String oldvalue = null;\r
+ protected StringChoiceComponent comp = null;\r
+\r
+ protected Dimension getPopupSize() {\r
+ return new Dimension(400,160);\r
+ }\r
+\r
+ protected void createComponent(EditorFeeder feeder, String selected) {\r
+ if ( comp == null ) \r
+ comp = new StringChoiceComponent(this, selected, feeder);\r
+ }\r
+\r
+ protected void setModified() {\r
+ hasChanged = true;\r
+ }\r
+\r
+ /**\r
+ * Tells if the edited value has changed\r
+ * @return true if the value changed.\r
+ */\r
+ public boolean hasChanged() {\r
+ return hasChanged;\r
+ }\r
+\r
+ /**\r
+ * set the current value to be the original value, ie: changed\r
+ * must return <strong>false</strong> after a reset.\r
+ */\r
+ public void clearChanged() {\r
+ hasChanged = false;\r
+ }\r
+\r
+ /**\r
+ * reset the changes (if any)\r
+ */\r
+ public void resetChanges() {\r
+ hasChanged = false;\r
+ comp.setText(oldvalue);\r
+ }\r
+\r
+ /**\r
+ * Get the current value of the edited value\r
+ * @return an object or <strong>null</strong> if the object was not\r
+ * initialized\r
+ */\r
+ public Object getValue() {\r
+ return comp.getText();\r
+ }\r
+\r
+ /**\r
+ * Set the value of the edited value\r
+ * @param o the new value.\r
+ */\r
+ public void setValue(Object o) {\r
+ this.oldvalue = (String) o;\r
+ comp.setText(oldvalue);\r
+ }\r
+\r
+ /**\r
+ * get the Component created by the editor.\r
+ * @return a Component\r
+ */\r
+ public Component getComponent() {\r
+ return comp;\r
+ }\r
+\r
+ \r
+ \r
+ /**\r
+ * Initialize the editor\r
+ * @param w the ResourceWrapper father of the attribute\r
+ * @param a the Attribute we are editing\r
+ * @param o the value of the above attribute\r
+ * @param p some Properties, used to fine-tune the editor\r
+ * @exception RemoteAccessException if a remote access error occurs.\r
+ */\r
+ public void initialize(RemoteResourceWrapper w\r
+ , Attribute a\r
+ , Object o\r
+ , Properties p) \r
+ throws RemoteAccessException\r
+ {\r
+ // Get the feeder class fromproperties:\r
+ EditorFeeder feeder = null;\r
+ String feederClass = null;\r
+\r
+ feederClass = (String)p.get(FEEDER_CLASS_P);\r
+ if ( feederClass == null )\r
+ throw new RuntimeException("StringChoiceEditor mis-configuration:"+\r
+ FEEDER_CLASS_P + \r
+ " property undefined.");\r
+ try {\r
+ Class c = Class.forName(feederClass);\r
+ feeder = (EditorFeeder) c.newInstance();\r
+ //Added by Jeff Huang\r
+ //TODO: FIXIT\r
+ feeder.initialize(w,p);\r
+ } catch (Exception ex) {\r
+ ex.printStackTrace();\r
+ throw new RuntimeException("StringChoiceEditor mis-configured: "+\r
+ " unable to instantiate "+\r
+ feederClass +".");\r
+ }\r
+ createComponent(feeder, (String) o);\r
+ oldvalue = (String) o;\r
+ }\r
+\r
+ public StringChoiceEditor() {\r
+ super();\r
+ }\r
+}\r