diff options
Diffstat (limited to 'java/src/IceGrid/TreeNode/TemplateEditor.java')
-rwxr-xr-x | java/src/IceGrid/TreeNode/TemplateEditor.java | 377 |
1 files changed, 377 insertions, 0 deletions
diff --git a/java/src/IceGrid/TreeNode/TemplateEditor.java b/java/src/IceGrid/TreeNode/TemplateEditor.java new file mode 100755 index 00000000000..042af49bef3 --- /dev/null +++ b/java/src/IceGrid/TreeNode/TemplateEditor.java @@ -0,0 +1,377 @@ +// **********************************************************************
+//
+// Copyright (c) 2003-2005 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+package IceGrid.TreeNode;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.JTree;
+
+import javax.swing.event.DocumentListener;
+
+import javax.swing.tree.TreePath;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.factories.Borders;
+import com.jgoodies.forms.factories.ButtonBarFactory;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.util.LayoutStyle;
+
+import IceGrid.AdapterDescriptor;
+import IceGrid.Model;
+import IceGrid.ObjectDescriptor;
+import IceGrid.TableDialog;
+import IceGrid.Utils;
+
+abstract class TemplateEditor extends Editor
+{
+ /*
+
+ TemplateEditor(boolean service)
+ {
+ _templateId.addDocumentListener(_updateListener);
+ _parameters.addDocumentListener(_updateListener);
+
+ if(service)
+ {
+ _subEditor = new ServiceEditor(this);
+ }
+ else
+ {
+ // TODO: ServerEditor
+ }
+ }
+
+ JComponent getComponent()
+ {
+ if(_panel == null)
+ {
+ //
+ // Build everything using JGoodies's DefaultFormBuilder
+ //
+ FormLayout layout = new FormLayout(
+ "right:pref, 3dlu, fill:pref:grow, 3dlu, pref", "");
+
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+ builder.setBorder(Borders.DLU2_BORDER);
+ builder.setRowGroupingEnabled(true);
+
+ builder.setLineGapSize(LayoutStyle.getCurrent().getLinePad());
+
+ builder.append("Template ID");
+ builder.append(_templateId, 3);
+ builder.nextLine();
+ builder.append("Parameters");
+ builder.append(_parameters, 3);
+ builder.nextLine();
+ _subEditor.buildSubPanel(builder);
+
+
+ _panel = buildPanel(builder.getPanel());
+ }
+ return _panel;
+ }
+
+ protected CommonBase getTarget()
+ {
+ return _template;
+ }
+
+ static private java.util.LinkedList stringToSortedParams(String s)
+ {
+ java.util.List params = java.util.Arrays.asList(s.getText.split("\s+"));
+ java.util.Collections.sort(params);
+ return java.util.LinkedList(params);
+ }
+
+ static private String stringify(java.util.List params)
+ {
+ String result = "";
+ java.util.Iterator p = params.iterator();
+ while(p.hasNext())
+ {
+ if(result.equals(""))
+ {
+ result = (String)p.next();
+ }
+ else
+ {
+ result = result + " " + (String)p.next();
+ }
+ }
+ return result;
+ }
+
+ void writeDescriptor(boolean fullUpdate)
+ {
+ TemplateDescriptor descriptor = _template.getDescriptor();
+
+ if(fullUpdate)
+ {
+ descriptor.descriptor = _instanceEditor.getNewDescriptor();
+ }
+ else
+ {
+ _instanceEditor.writeDescriptor();
+ }
+ descriptor.params = stringToSortedParams(_parameters.getText());
+ }
+
+ TemplateDescriptor getNewDescriptor()
+ {
+ return new TemplateDescriptor(
+ _instanceEditor.getNewDescriptor(),
+ stringToSortedParams(_parameters.getText()));
+ }
+
+ private boolean isUpdateSafe()
+ {
+ //
+ // If parameter change => not safe!
+ //
+ if(_origParams.equals(_parameters.getText()))
+ {
+ return _instanceEditor.isUpdateSafe();
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ protected void applyUpdate()
+ {
+ if(_template.getModel().canUpdate())
+ {
+ _template.getModel().disableDisplay();
+
+ String oldId = _template.getId();
+ String newId = _templateId.getText();
+
+ try
+ {
+ TemplateDescriptor descriptor = _template.getDescriptor();
+
+ if(_template.isEphemeral())
+ {
+ Templates parent = (Templates)_template.getParent();
+ writeDescriptor(false);
+
+ if(!parent.addDescriptor(newId, descriptor))
+ {
+ JOptionPane.showMessageDialog(
+ _template.getModel().getMainFrame(),
+ "The id '" + newId + "' is already in use",
+ "Duplicate template id",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ _template.destroy();
+
+ if(!_template.getApplication().applyUpdate())
+ {
+ //
+ // Restores old display
+ //
+ parent = (Templates)_templates.getModel()
+ .findNewNode(parent.getPath());
+ parent.removeDescriptor(newId);
+ try
+ {
+ parent.addChild(_adapter, true);
+ }
+ catch(DuplicateIdException die)
+ {
+ assert false;
+ }
+ _template.setParent(parent);
+ _template.getModel().setSelectionPath(
+ _template.getPath());
+ return;
+ }
+ else
+ {
+ parent = (Templates)_template.getModel()
+ .findNewNode(parent.getPath());
+ _template = (Template)parent.findChild(newId);
+ _template.getModel()
+ .setSelectionPath(_template.getPath());
+ }
+ }
+ else if(oldId.equals(newId))
+ {
+ if(isSafeUpdate())
+ {
+ writeDescriptor(false);
+ }
+ else
+ {
+ //
+ // Full update
+ //
+
+ //
+ // Save to be able to rollback
+ //
+ TemplateDescriptor oldDescriptor = null;
+ try
+ {
+ //
+ // Shallow copy
+ //
+ oldDescriptor = (TemplateDescriptor)descriptor.clone();
+ }
+ catch(CloneNotSupportedException ce)
+ {
+ assert false; // impossible
+ }
+
+ TreePath oldPath = _template.getPath();
+ Templates parent = (Templates)_template.getParent();
+
+ writeDescriptor(true);
+
+ if(!_template.getApplication().applyUpdate())
+ {
+ //
+ // Restore descriptor
+ // IMPORTANT: keep the same object!
+ //
+ descriptor.descriptor = oldDescriptor.descriptor;
+ descriptor.parameters = oldDescriptor.parameters;
+
+ //
+ // Need to find new template node!
+ //
+ _template = (Template)_template.getModel().findNewNode(oldPath);
+ _template.getModel().setSelectionPath(_template.getPath());
+ //
+ //
+ // Everything was restored, user must deal with error
+ //
+ return;
+ }
+ //
+ // Else, no renaming, so proper node already selected
+ //
+ }
+ }
+ else
+ {
+ //
+ // Renaming
+ //
+
+ Templates parent = (Templates)_template.getParent();
+
+ TemplateDescriptor oldDescriptor = descriptor;
+ TemplateDescriptor newDescriptor = getNewDescriptor();
+
+ if(!parent.addDescriptor(newId, newDescriptor))
+ {
+ JOptionPane.showMessageDialog(
+ _template.getModel().getMainFrame(),
+ "The id '" + newId + "' is already in use",
+ "Duplicate template id",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ parent.removeDescriptor(oldId);
+
+ if(!_template.getApplication().applyUpdate())
+ {
+ parent = (Templates)_template.getModel()
+ .findNewNode(parent.getPath());
+
+ parent.addDescriptor(oldId, oldDescriptor);
+
+ //
+ // Need to find new template node!
+ //
+ _template = (Template)_template.getModel().findNewNode(oldPath);
+ _template.getModel().setSelectionPath(_template.getPath());
+ //
+ //
+ // Everything was restored, user must deal with error
+ //
+ return;
+ }
+ else
+ {
+ _instanceEditor.cascadeDelete(oldId);
+
+ parent = (Templates)_template.getModel()
+ .findNewNode(parent.getPath());
+ _template = (Template)parent.findChild(newId);
+ _template.getModel()
+ .setSelectionPath(_template.getPath());
+ }
+ }
+
+ //
+ // Mark modified
+ //
+ _template.markModified();
+
+ _applyButton.setEnabled(false);
+ _discardButton.setEnabled(false);
+ }
+ finally
+ {
+ _template.getModel().enableDisplay();
+ }
+ }
+ //
+ // Otherwise, may wait until other user is done!
+ //
+ }
+
+
+ void show(Template template)
+ {
+ detectUpdates(false);
+
+ _template = template;
+ TemplateDescriptor descriptor = _template.getDescriptor();
+
+ _templateId.setText(_template.getId());
+ _origParams = stringify(_template.parameters);
+ _parameters.setText(_origParams);
+ _instanceEditor.show();
+
+ _applyButton.setEnabled(_template.isEphemeral());
+ _discardButton.setEnabled(_template.isEphemeral());
+ detectUpdates(true);
+ }
+
+ TemplateDescriptor getDescriptor()
+ {
+ return _template.getDescriptor();
+ }
+
+
+ private JTextField _templateId = new JTextField(20);
+ private JTextField _parameters = new JTextField(20);
+
+ private String _origParams;
+
+ private JPanel _panel;
+ private Template _template;
+ */
+}
|