--- /dev/null
+// 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