Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / jigsaw / src / org / w3c / jigadm / editors / StringChoiceEditor.java
diff --git a/JMCR-Stable/real-world application/jigsaw/src/org/w3c/jigadm/editors/StringChoiceEditor.java b/JMCR-Stable/real-world application/jigsaw/src/org/w3c/jigadm/editors/StringChoiceEditor.java
new file mode 100644 (file)
index 0000000..c51956c
--- /dev/null
@@ -0,0 +1,175 @@
+// 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