summaryrefslogtreecommitdiff
path: root/java/src/IceGrid/TreeNode/Services.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceGrid/TreeNode/Services.java')
-rwxr-xr-xjava/src/IceGrid/TreeNode/Services.java201
1 files changed, 180 insertions, 21 deletions
diff --git a/java/src/IceGrid/TreeNode/Services.java b/java/src/IceGrid/TreeNode/Services.java
index ebf5a2aea2d..2444782eda8 100755
--- a/java/src/IceGrid/TreeNode/Services.java
+++ b/java/src/IceGrid/TreeNode/Services.java
@@ -8,14 +8,100 @@
// **********************************************************************
package IceGrid.TreeNode;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JPopupMenu;
+
import IceGrid.Model;
import IceGrid.ServiceDescriptor;
import IceGrid.ServiceInstanceDescriptor;
import IceGrid.TemplateDescriptor;
import IceGrid.Utils;
-class Services extends Parent
+class Services extends SimpleContainer
{
+ static class NewPopupMenu extends JPopupMenu
+ {
+ NewPopupMenu()
+ {
+ _newService = new AbstractAction("New service")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ ServiceDescriptor sd =
+ new ServiceDescriptor(new java.util.LinkedList(),
+ new java.util.LinkedList(),
+ new java.util.LinkedList(),
+ "",
+ "NewService",
+ "");
+
+ ServiceInstanceDescriptor descriptor =
+ new ServiceInstanceDescriptor("",
+ new java.util.TreeMap(),
+ sd);
+ _parent.newService(descriptor);
+ }
+ };
+
+ add(_newService);
+
+ _newInstance = new AbstractAction("New template instance")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ ServiceInstanceDescriptor descriptor =
+ new ServiceInstanceDescriptor("",
+ new java.util.TreeMap(),
+ null);
+ _parent.newService(descriptor);
+ }
+ };
+
+ add(_newInstance);
+ }
+
+ void setParent(Services parent)
+ {
+ _parent = parent;
+ }
+
+ private Services _parent;
+ private Action _newService;
+ private Action _newInstance;
+ }
+
+ public JPopupMenu getPopupMenu()
+ {
+ if(_isEditable)
+ {
+ if(_popup == null)
+ {
+ _popup = new NewPopupMenu();
+ }
+ _popup.setParent(this);
+ return _popup;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ static public java.util.LinkedList
+ copyDescriptors(java.util.LinkedList descriptors)
+ {
+ java.util.LinkedList copy = new java.util.LinkedList();
+ java.util.Iterator p = descriptors.iterator();
+ while(p.hasNext())
+ {
+ copy.add(Service.copyDescriptor((ServiceInstanceDescriptor)p.next()));
+ }
+ return copy;
+ }
+
Services(java.util.List descriptors,
Editable editable,
Utils.Resolver resolver, // Null within template
@@ -24,6 +110,7 @@ class Services extends Parent
{
super("Services", application.getModel());
_descriptors = descriptors;
+ _isEditable = (editable != null);
java.util.Iterator p = _descriptors.iterator();
while(p.hasNext())
@@ -41,34 +128,46 @@ class Services extends Parent
TemplateDescriptor templateDescriptor
= application.findServiceTemplateDescriptor(descriptor.template);
- assert templateDescriptor != null;
- serviceDescriptor = (ServiceDescriptor)templateDescriptor.descriptor;
- assert serviceDescriptor != null;
-
- if(resolver != null)
+ if(templateDescriptor == null)
{
- serviceResolver = new Utils.Resolver(resolver, descriptor.parameterValues);
- serviceName = serviceResolver.substitute(serviceDescriptor.name);
- serviceResolver.put("service", serviceName);
- displayString = serviceName + ": "
- + templateLabel(descriptor.template,
- serviceResolver.getParameters().values());
+ //
+ // We've just removed this template instance;
+ // cascadeDeleteServiceInstance will later remove this descriptor
+ //
+ assert editable != null;
+ editable.markModified();
+ continue;
}
else
{
- //
- // serviceName = TemplateName<unsubstituted param 1, ....>
- //
- serviceName = templateLabel(descriptor.template,
- descriptor.parameterValues.values());
-
+ serviceDescriptor = (ServiceDescriptor)templateDescriptor.descriptor;
+ assert serviceDescriptor != null;
+
+ if(resolver != null)
+ {
+ serviceResolver = new Utils.Resolver(resolver, descriptor.parameterValues);
+ serviceName = serviceResolver.substitute(serviceDescriptor.name);
+ serviceResolver.put("service", serviceName);
+ displayString = serviceName + ": "
+ + templateLabel(descriptor.template,
+ serviceResolver.getParameters().values());
+ }
+ else
+ {
+ //
+ // serviceName = TemplateName<unsubstituted param 1, ....>
+ //
+ serviceName = templateLabel(descriptor.template,
+ descriptor.parameterValues.values());
+
+ }
}
}
else
{
serviceDescriptor = descriptor.descriptor;
assert serviceDescriptor != null;
-
+
if(resolver != null)
{
serviceResolver = new Utils.Resolver(resolver);
@@ -85,7 +184,7 @@ class Services extends Parent
displayString,
descriptor,
serviceDescriptor,
- editable,
+ editable != null,
serviceResolver,
application,
_model));
@@ -102,5 +201,65 @@ class Services extends Parent
}
}
- private java.util.List _descriptors;
+ void newService(ServiceInstanceDescriptor descriptor)
+ {
+ String baseName = descriptor.descriptor == null ? "NewService" :
+ descriptor.descriptor.name;
+ String name = baseName;
+ int i = 0;
+ while(findChild(name) != null || findChild("*" + name) != null)
+ {
+ name = baseName + "-" + (++i);
+ }
+
+ if(descriptor.descriptor != null)
+ {
+ descriptor.descriptor.name = name;
+ }
+
+ Service service = new Service(name, descriptor, _model);
+ try
+ {
+ addChild(service, true);
+ }
+ catch(DuplicateIdException e)
+ {
+ assert false;
+ }
+ service.setParent(this);
+ _model.setSelectionPath(service.getPath());
+ }
+
+ public void paste(Object descriptor)
+ {
+ if(_isEditable && descriptor instanceof ServiceInstanceDescriptor)
+ {
+ ServiceInstanceDescriptor d = (ServiceInstanceDescriptor)descriptor;
+ newService(Service.copyDescriptor(d));
+ }
+ }
+
+
+ void cascadeDeleteServiceInstance(String templateId)
+ {
+ java.util.Iterator p = _descriptors.iterator();
+ while(p.hasNext())
+ {
+ ServiceInstanceDescriptor instanceDescriptor =
+ (ServiceInstanceDescriptor)p.next();
+
+ if(instanceDescriptor.template.equals(templateId))
+ {
+ p.remove();
+ }
+ }
+ }
+
+ boolean isEditable()
+ {
+ return _isEditable;
+ }
+
+ private final boolean _isEditable;
+ static private NewPopupMenu _popup;
}