Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / jigsaw / src / org / w3c / jigadm / editors / SelectEditor.java
diff --git a/JMCR-Stable/real-world application/jigsaw/src/org/w3c/jigadm/editors/SelectEditor.java b/JMCR-Stable/real-world application/jigsaw/src/org/w3c/jigadm/editors/SelectEditor.java
new file mode 100644 (file)
index 0000000..a9cbd65
--- /dev/null
@@ -0,0 +1,285 @@
+// SelectEditor.java\r
+// $Id: SelectEditor.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.BorderLayout;\r
+import java.awt.Button;\r
+import java.awt.Component;\r
+import java.awt.Container;\r
+import java.awt.Panel;\r
+import java.awt.TextComponent;\r
+import java.awt.TextField;\r
+import java.awt.Window;\r
+\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.ItemEvent;\r
+import java.awt.event.ItemListener;\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.tools.widgets.ClosableFrame;\r
+\r
+import org.w3c.jigadm.RemoteResourceWrapper;\r
+\r
+import org.w3c.jigsaw.admin.RemoteAccessException;\r
+\r
+/**\r
+ * SelectEditor :\r
+ * @author Benoit Mahe <bmahe@sophia.inria.fr>\r
+ */\r
+\r
+public class SelectEditor extends AttributeEditor {\r
+\r
+    class SelectPopup extends ClosableFrame implements ItemListener {\r
+\r
+       SelectComponent parent   = null;\r
+       java.awt.List   list     = null; \r
+       EditorFeeder    feeder   = null;\r
+       EditorModifier  modifier = null;\r
+\r
+       // ItemListener\r
+       public void itemStateChanged(ItemEvent e) {\r
+           if (e.getStateChange() == ItemEvent.SELECTED) {\r
+               String selected = (String)\r
+                   list.getItem(((Integer)e.getItem()).intValue());\r
+               if (modifier != null)\r
+                   selected = modifier.modify(selected);\r
+               parent.setText(selected);\r
+               setVisible(false);\r
+           }\r
+       }\r
+\r
+       protected void setDefaultItems() {\r
+           list.removeAll();\r
+           String items[] = feeder.getDefaultItems();\r
+           if (items != null) {\r
+               for (int i = 0 ; i < items.length ; i++) \r
+                   if ( items[i] != null )\r
+                       list.addItem(items[i]);\r
+           }\r
+       }\r
+\r
+        protected void close() {\r
+           setVisible(false);\r
+       }\r
+\r
+       SelectPopup(SelectComponent parent, \r
+                   EditorFeeder feeder,\r
+                   EditorModifier modifier) \r
+       {\r
+           super("Select");\r
+           this.parent   = parent;\r
+           this.feeder   = feeder;\r
+           this.modifier = modifier;\r
+           setLayout(new BorderLayout());\r
+           list = new java.awt.List(20);\r
+           list.addItemListener(this);\r
+           setDefaultItems();\r
+           add(list);\r
+           setSize(170,300);\r
+       }\r
+    }\r
+\r
+    class SelectComponent extends Panel implements ActionListener, \r
+                                                  TextListener \r
+    {\r
+\r
+       protected TextField    selected = null;\r
+       protected SelectPopup  popup    = null;\r
+       protected SelectEditor editor   = null;\r
+       EditorFeeder   feeder   = null;\r
+       EditorModifier modifier = null;\r
+\r
+       public void textValueChanged(TextEvent e) {\r
+           setModified();\r
+       }\r
+\r
+       public void actionPerformed(ActionEvent e) {\r
+           String command = e.getActionCommand();\r
+           if (command != null) {\r
+               if (command.equals("edit")) {\r
+                   if (popup == null)\r
+                       popup = new SelectPopup(this, feeder, modifier);\r
+                   popup.show();\r
+               }\r
+           }\r
+       }\r
+\r
+       public String getText() {\r
+           return selected.getText();\r
+       }\r
+\r
+       public void setText(String text) {\r
+           selected.setText(text);\r
+           editor.setModified();\r
+       }\r
+\r
+       SelectComponent (SelectEditor editor,\r
+                        EditorFeeder feeder,\r
+                        EditorModifier modifier,\r
+                        String selected)\r
+       {\r
+           super();\r
+           this.feeder = feeder;\r
+           this.modifier = modifier;\r
+           this.editor = editor;\r
+           this.selected = new TextField(20);\r
+           this.selected.setText(selected);\r
+           this.selected.addTextListener(this);\r
+           Button editB = new Button("Change");\r
+           editB.setActionCommand("edit");\r
+           editB.addActionListener(this);\r
+           setLayout( new BorderLayout());\r
+           add(this.selected,"West");\r
+           add(editB,"Center");\r
+       }\r
+\r
+    }\r
+\r
+    // The SelectEditor itself\r
+\r
+    /**\r
+     * Properties - The feeder's class name.\r
+     */\r
+    public static final String FEEDER_CLASS_P = "feeder.class";\r
+    public static final String MODIFIER_CLASS_P = "modifier.class";\r
+\r
+    protected SelectComponent comp = null;\r
+    protected boolean hasChanged = false;\r
+    protected String oldvalue  = null;\r
+\r
+    protected void createComponent( EditorFeeder feeder,\r
+                                   EditorModifier modifier,\r
+                                   String selected) \r
+    {\r
+       if ( comp == null ) \r
+           comp = new SelectComponent(this, feeder, modifier, selected);\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
+       try {\r
+           return comp.getText();\r
+       } catch (Exception ex) {\r
+           ex.printStackTrace();\r
+       }\r
+       return null;\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
+     * 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
+       EditorModifier modifier    = null;\r
+       String         feederClass = null;\r
+\r
+       feederClass = (String)p.get(FEEDER_CLASS_P);\r
+       if ( feederClass == null )\r
+           throw new RuntimeException("SelectEditor 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("SelectEditor mis-configured: "+\r
+                                      " unable to instantiate "+\r
+                                      feederClass +".");\r
+       }\r
+\r
+       String modifierClass = (String)p.get(MODIFIER_CLASS_P);\r
+       if (modifierClass != null) {\r
+           try {\r
+               Class cm = Class.forName(modifierClass);\r
+               modifier  = (EditorModifier) cm.newInstance();\r
+           //Added by Jeff Huang\r
+           //TODO: FIXIT\r
+           } catch (Exception ex) {\r
+               ex.printStackTrace();\r
+               throw new RuntimeException("SelectEditor mis-configured: "+\r
+                                          " unable to instantiate "+\r
+                                          modifierClass +".");\r
+           }\r
+       }\r
+\r
+       String selected = (String)o;\r
+       createComponent(feeder, modifier, selected);\r
+       if (selected != null)\r
+           oldvalue = new String(selected);\r
+    }\r
+\r
+}\r