diff options
author | Joe George <joe@zeroc.com> | 2015-03-03 17:30:50 -0500 |
---|---|---|
committer | Joe George <joe@zeroc.com> | 2015-05-12 11:41:55 -0400 |
commit | d35bb9f5c19e34aee31f83d445695a8186ef675e (patch) | |
tree | d5324eaf44f5f9776495537c51653f50a66a7237 /java/src/IceGridGUI/Application/TemplateEditor.java | |
download | ice-d35bb9f5c19e34aee31f83d445695a8186ef675e.tar.bz2 ice-d35bb9f5c19e34aee31f83d445695a8186ef675e.tar.xz ice-d35bb9f5c19e34aee31f83d445695a8186ef675e.zip |
Ice 3.4.2 Source Distributionv3.4.2
Diffstat (limited to 'java/src/IceGridGUI/Application/TemplateEditor.java')
-rw-r--r-- | java/src/IceGridGUI/Application/TemplateEditor.java | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/java/src/IceGridGUI/Application/TemplateEditor.java b/java/src/IceGridGUI/Application/TemplateEditor.java new file mode 100644 index 00000000000..e52b1d16691 --- /dev/null +++ b/java/src/IceGridGUI/Application/TemplateEditor.java @@ -0,0 +1,215 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2011 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 IceGridGUI.Application; + +import java.awt.event.ActionEvent; + +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.JButton; +import javax.swing.JOptionPane; +import javax.swing.JScrollPane; +import javax.swing.JTextField; + +import com.jgoodies.forms.builder.DefaultFormBuilder; +import com.jgoodies.forms.layout.CellConstraints; + +import IceGrid.*; +import IceGridGUI.*; + +class TemplateEditor extends Editor +{ + TemplateEditor() + { + _template.getDocument().addDocumentListener(_updateListener); + _template.setToolTipText("Must be unique within the enclosing application"); + + _parameters = new ParametersField(this); + } + + TemplateDescriptor getDescriptor() + { + return (TemplateDescriptor)_target.getDescriptor(); + } + + Object getSubDescriptor() + { + return getDescriptor().descriptor; + } + + void writeDescriptor() + { + TemplateDescriptor descriptor = getDescriptor(); + java.util.LinkedList<String> parameters = new java.util.LinkedList<String>(); + descriptor.parameterDefaults = _parameters.get(parameters); + descriptor.parameters = parameters; + } + + boolean isSimpleUpdate() + { + TemplateDescriptor descriptor = getDescriptor(); + java.util.List<String> parameters = new java.util.LinkedList<String>(); + java.util.Map<String, String> defaultValues = _parameters.get(parameters); + + return descriptor.parameters.equals(parameters) && descriptor.parameterDefaults.equals(defaultValues); + } + + protected void appendProperties(DefaultFormBuilder builder) + { + builder.append("Template ID"); + builder.append(_template, 3); + builder.nextLine(); + + builder.append("Parameters"); + builder.nextLine(); + builder.append(""); + builder.nextLine(); + builder.append(""); + builder.nextLine(); + builder.append(""); + + builder.nextRow(-6); + JScrollPane scrollPane = new JScrollPane(_parameters); + CellConstraints cc = new CellConstraints(); + builder.add(scrollPane, cc.xywh(builder.getColumn(), builder.getRow(), 3, 7)); + builder.nextRow(6); + builder.nextLine(); + } + + protected boolean validate() + { + return check(new String[]{"Template ID", _template.getText().trim()}); + } + + void show() + { + TemplateDescriptor descriptor = getDescriptor(); + _template.setText(_target.getId()); + _template.setEditable(_target.isEphemeral()); + + _parameters.set(descriptor.parameters, descriptor.parameterDefaults); + } + + protected boolean applyUpdate(boolean refresh) + { + Root root = _target.getRoot(); + root.disableSelectionListener(); + + try + { + if(_target.isEphemeral()) + { + writeDescriptor(); + TemplateDescriptor descriptor = getDescriptor(); + Templates parent = (Templates)_target.getParent(); + _target.destroy(); // just removes the child + + try + { + parent.tryAdd(_template.getText().trim(), descriptor); + } + catch(UpdateFailedException e) + { + // + // Re-add ephemeral child + // + try + { + parent.insertChild(_target, true); + } + catch(UpdateFailedException die) + { + assert false; + } + root.setSelectedNode(_target); + + JOptionPane.showMessageDialog( + _target.getCoordinator().getMainFrame(), + e.toString(), + "Apply failed", + JOptionPane.ERROR_MESSAGE); + return false; + } + + // + // Success + // + _target = parent.findChildWithDescriptor(descriptor); + root.updated(); + _template.setEditable(false); + if(refresh) + { + root.setSelectedNode(_target); + } + } + else if(isSimpleUpdate()) + { + writeDescriptor(); + ((Communicator)_target).getEnclosingEditable().markModified(); + root.updated(); + } + else + { + // + // Save to be able to rollback + // + Object savedDescriptor = ((Communicator)_target).saveDescriptor(); + Templates parent = (Templates)_target.getParent(); + writeDescriptor(); + + try + { + parent.tryUpdate((Communicator)_target); + } + catch(UpdateFailedException e) + { + ((Communicator)_target).restoreDescriptor(savedDescriptor); + + JOptionPane.showMessageDialog( + _target.getCoordinator().getMainFrame(), + e.toString(), + "Apply failed", + JOptionPane.ERROR_MESSAGE); + // + // Everything was restored, user must deal with error + // + return false; + } + + // + // Success + // + ((Communicator)_target).getEnclosingEditable().markModified(); + root.updated(); + + _target = parent.findChildWithDescriptor(getDescriptor()); + if(refresh) + { + root.setSelectedNode(_target); + } + } + + if(refresh) + { + root.getCoordinator().getCurrentTab().showNode(_target); + } + _applyButton.setEnabled(false); + _discardButton.setEnabled(false); + return true; + } + finally + { + root.enableSelectionListener(); + } + } + + private JTextField _template = new JTextField(20); + private ParametersField _parameters; +} |