diff options
author | Bernard Normier <bernard@zeroc.com> | 2005-10-15 22:40:40 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2005-10-15 22:40:40 +0000 |
commit | bb143962aa41abafa300039319ef250d8ab9715a (patch) | |
tree | b9cb16bf2a5ab97b216fe0e4278326d516969235 /java | |
parent | ami on some operations (diff) | |
download | ice-bb143962aa41abafa300039319ef250d8ab9715a.tar.bz2 ice-bb143962aa41abafa300039319ef250d8ab9715a.tar.xz ice-bb143962aa41abafa300039319ef250d8ab9715a.zip |
Variable substitution in Application, Node and Replica Group
Diffstat (limited to 'java')
-rwxr-xr-x | java/src/IceGrid/Model.java | 5 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Application.java | 60 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ApplicationEditor.java | 74 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/Node.java | 1 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/NodeEditor.java | 49 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ReplicaGroup.java | 1 | ||||
-rwxr-xr-x | java/src/IceGrid/TreeNode/ReplicaGroupEditor.java | 65 | ||||
-rwxr-xr-x | java/src/IceGrid/Utils.java | 7 |
8 files changed, 222 insertions, 40 deletions
diff --git a/java/src/IceGrid/Model.java b/java/src/IceGrid/Model.java index ac0c8c22c1e..77649ba2e69 100755 --- a/java/src/IceGrid/Model.java +++ b/java/src/IceGrid/Model.java @@ -1082,16 +1082,17 @@ public class Model _actions[CommonBase.DELETE].putValue(Action.SHORT_DESCRIPTION, "Delete");
_actions[CommonBase.SUBSTITUTE_VARS] = new
- AbstractAction("Substitute variables")
+ AbstractAction("${}")
{
public void actionPerformed(ActionEvent e)
{
_actionsTarget.substituteVars();
+ putValue(Action.NAME, _substitute ? "abc" : "${}");
}
};
_actions[CommonBase.SUBSTITUTE_VARS].putValue(
Action.SHORT_DESCRIPTION,
- "Substitute variables and parameters in servers' properties");
+ "Substitute variables and parameters with their values in the Properties pane");
_substituteMenuItem = new
JCheckBoxMenuItem(_actions[CommonBase.SUBSTITUTE_VARS]);
_substituteTool = new
diff --git a/java/src/IceGrid/TreeNode/Application.java b/java/src/IceGrid/TreeNode/Application.java index 935d530cbf5..04df1e024af 100755 --- a/java/src/IceGrid/TreeNode/Application.java +++ b/java/src/IceGrid/TreeNode/Application.java @@ -20,6 +20,7 @@ import IceGrid.ServerDynamicInfo; import IceGrid.ServerState;
import IceGrid.SimpleInternalFrame;
import IceGrid.TemplateDescriptor;
+import IceGrid.Utils;
public class Application extends EditableParent
@@ -50,6 +51,7 @@ public class Application extends EditableParent actions[COPY] = true;
actions[DELETE] = true;
+ actions[SUBSTITUTE_VARS] = true;
Object descriptor = _model.getClipboard();
if(descriptor != null)
@@ -123,6 +125,15 @@ public class Application extends EditableParent }
}
update.removeVariables = (String[])removeVariables.toArray(new String[0]);
+
+ //
+ // Diff distribution
+ //
+ if(!_descriptor.distrib.equals(_origDistrib))
+ {
+ update.distrib = new IceGrid.BoxedDistributionDescriptor(
+ _descriptor.distrib);
+ }
}
else
{
@@ -131,11 +142,6 @@ public class Application extends EditableParent }
//
- // Distribution TODO: implement
- //
- //update.distribution = XXX
-
- //
// Replicated Adapters
//
update.removeReplicaGroups = _replicaGroups.removedElements();
@@ -165,8 +171,9 @@ public class Application extends EditableParent public void commit()
{
super.commit();
- _origVariables = (java.util.Map)_descriptor.variables.clone();
+ _origVariables = _descriptor.variables;
_origDescription = _descriptor.description;
+ _origDistrib = _descriptor.distrib;
}
public Object getDescriptor()
@@ -261,12 +268,15 @@ public class Application extends EditableParent super(brandNew, descriptor.name, model);
_ephemeral = false;
_descriptor = descriptor;
- _origVariables = (java.util.Map)_descriptor.variables.clone();
+ _origVariables = _descriptor.variables;
_origDescription = _descriptor.description;
+ _origDistrib = _descriptor.distrib;
+ _resolver = new Utils.Resolver(_descriptor.variables);
+ _resolver.put("application", descriptor.name);
_replicaGroups = new ReplicaGroups(_descriptor.replicaGroups,
- _model);
+ _model);
addChild(_replicaGroups);
_serviceTemplates = new ServiceTemplates(_descriptor.serviceTemplates,
@@ -294,7 +304,19 @@ public class Application extends EditableParent //
void rebuild() throws UpdateFailedException
{
- _nodes.rebuild();
+ Utils.Resolver oldResolver = _resolver;
+ _resolver = new Utils.Resolver(_descriptor.variables);
+ _resolver.put("application", _id);
+
+ try
+ {
+ _nodes.rebuild();
+ }
+ catch(UpdateFailedException e)
+ {
+ _resolver = oldResolver;
+ throw e;
+ }
}
//
@@ -337,6 +359,13 @@ public class Application extends EditableParent }
_descriptor.variables.putAll(desc.variables);
+ //
+ // Distrib
+ //
+ if(desc.distrib != null)
+ {
+ _descriptor.distrib = desc.distrib.value;
+ }
//
// Replicated adapters
@@ -465,18 +494,23 @@ public class Application extends EditableParent _nodes.nodeDown(nodeName);
}
- private ApplicationDescriptor _descriptor;
+ Utils.Resolver getResolver()
+ {
+ return _resolver;
+ }
+ private ApplicationDescriptor _descriptor;
private final boolean _ephemeral;
+ private Utils.Resolver _resolver;
//
- // Keeps original version (as deep copies) to be able to build
+ // Keeps original version (as shallow copies) to be able to build
// ApplicationUpdateDescriptor
//
- private java.util.Map _origVariables;
+ private java.util.TreeMap _origVariables;
private String _origDescription;
+ private DistributionDescriptor _origDistrib;
-
//
// Children
//
diff --git a/java/src/IceGrid/TreeNode/ApplicationEditor.java b/java/src/IceGrid/TreeNode/ApplicationEditor.java index 555eb526916..cec4137d56b 100755 --- a/java/src/IceGrid/TreeNode/ApplicationEditor.java +++ b/java/src/IceGrid/TreeNode/ApplicationEditor.java @@ -125,6 +125,20 @@ class ApplicationEditor extends Editor }
}
+ Utils.Resolver getDetailResolver()
+ {
+ Application application = (Application)_target;
+ if(application.getModel().substitute())
+ {
+ return application.getResolver();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
ApplicationEditor(JFrame parentFrame)
{
_name.getDocument().addDocumentListener(_updateListener);
@@ -245,45 +259,85 @@ class ApplicationEditor extends Editor detectUpdates(false);
setTarget(application);
- _name.setText(_target.getId());
- _name.setEditable(_target.isEphemeral());
+ Utils.Resolver resolver = getDetailResolver();
+ boolean isEditable = (resolver == null);
- ApplicationDescriptor descriptor = (ApplicationDescriptor)_target.getDescriptor();
-
- _description.setText(descriptor.description);
+ _name.setText(application.getId());
+ _name.setEditable(application.isEphemeral());
+
+ ApplicationDescriptor descriptor =
+ (ApplicationDescriptor)application.getDescriptor();
+
+ _description.setText(
+ Utils.substitute(descriptor.description, resolver));
+ _description.setEditable(isEditable);
+ _description.setOpaque(isEditable);
_variablesMap = descriptor.variables;
setVariablesField();
+ _variablesButton.setEnabled(isEditable);
- if(descriptor.distrib.icepatch.equals(""))
+ _distrib.setEnabled(true);
+ _distrib.setEditable(true);
+ String icepatch =
+ Utils.substitute(descriptor.distrib.icepatch, resolver);
+ if(icepatch.equals(""))
{
_distrib.setSelectedItem(NO_DISTRIB);
}
else
{
- _distrib.setSelectedItem(descriptor.distrib.icepatch);
+ _distrib.setSelectedItem(icepatch);
}
+ _distrib.setEnabled(isEditable);
+ _distrib.setEditable(isEditable);
+
_distribDirsList = new java.util.LinkedList(descriptor.distrib.directories);
setDistribDirsField();
+ _distribDirsButton.setEnabled(isEditable);
_applyButton.setEnabled(application.isEphemeral());
_discardButton.setEnabled(application.isEphemeral());
detectUpdates(true);
}
-
+
private void setDistribDirsField()
{
+ final Utils.Resolver resolver = getDetailResolver();
+
Ice.StringHolder toolTipHolder = new Ice.StringHolder();
+ Utils.Stringifier stringifier = new Utils.Stringifier()
+ {
+ public String toString(Object obj)
+ {
+ return Utils.substitute((String)obj, resolver);
+ }
+ };
+
_distribDirs.setText(
- Utils.stringify(_distribDirsList, ", ", toolTipHolder));
+ Utils.stringify(_distribDirsList, stringifier, ", ", toolTipHolder));
_distribDirs.setToolTipText(toolTipHolder.value);
}
private void setVariablesField()
{
+ final Utils.Resolver resolver = getDetailResolver();
+
+ Utils.Stringifier stringifier = new Utils.Stringifier()
+ {
+ public String toString(Object obj)
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)obj;
+
+ return (String)entry.getKey() + "="
+ + Utils.substitute((String)entry.getValue(), resolver);
+ }
+ };
+
Ice.StringHolder toolTipHolder = new Ice.StringHolder();
_variables.setText(
- Utils.stringify(_variablesMap, "=", ", ", toolTipHolder));
+ Utils.stringify(_variablesMap.entrySet(), stringifier,
+ ", ", toolTipHolder));
_variables.setToolTipText(toolTipHolder.value);
}
diff --git a/java/src/IceGrid/TreeNode/Node.java b/java/src/IceGrid/TreeNode/Node.java index 8fce172f09f..1ab531cccbb 100755 --- a/java/src/IceGrid/TreeNode/Node.java +++ b/java/src/IceGrid/TreeNode/Node.java @@ -63,6 +63,7 @@ class Node extends EditableParent actions[COPY] = true;
actions[DELETE] = true;
+ actions[SUBSTITUTE_VARS] = true;
Object descriptor = _model.getClipboard();
if(descriptor != null)
diff --git a/java/src/IceGrid/TreeNode/NodeEditor.java b/java/src/IceGrid/TreeNode/NodeEditor.java index 6fc3ced302a..1c627ef20ca 100755 --- a/java/src/IceGrid/TreeNode/NodeEditor.java +++ b/java/src/IceGrid/TreeNode/NodeEditor.java @@ -142,6 +142,19 @@ class NodeEditor extends Editor }
}
+ Utils.Resolver getDetailResolver()
+ {
+ Node node = (Node)_target;
+ if(node.getModel().substitute())
+ {
+ return node.getResolver();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
NodeEditor(JFrame parentFrame)
{
_name.getDocument().addDocumentListener(_updateListener);
@@ -217,30 +230,54 @@ class NodeEditor extends Editor detectUpdates(false);
setTarget(node);
+ Utils.Resolver resolver = getDetailResolver();
+ boolean isEditable = (resolver == null);
+
_name.setText(_target.getId());
_name.setEditable(_target.isEphemeral());
NodeDescriptor descriptor = (NodeDescriptor)_target.getDescriptor();
- _description.setText(descriptor.description);
+ _description.setText(
+ Utils.substitute(descriptor.description, resolver));
+ _description.setEditable(isEditable);
+ _description.setOpaque(isEditable);
+
_variablesMap = descriptor.variables;
setVariablesField();
- _loadFactor.setText(descriptor.loadFactor);
-
+ _variablesButton.setEnabled(isEditable);
+
+ _loadFactor.setText(
+ Utils.substitute(descriptor.loadFactor, resolver));
+ _loadFactor.setEditable(isEditable);
+
_applyButton.setEnabled(node.isEphemeral());
_discardButton.setEnabled(node.isEphemeral());
detectUpdates(true);
}
-
+
private void setVariablesField()
{
+ Utils.Stringifier stringifier = new Utils.Stringifier()
+ {
+ final Utils.Resolver resolver = getDetailResolver();
+
+ public String toString(Object obj)
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)obj;
+
+ return (String)entry.getKey() + "="
+ + Utils.substitute((String)entry.getValue(), resolver);
+ }
+ };
+
Ice.StringHolder toolTipHolder = new Ice.StringHolder();
_variables.setText(
- Utils.stringify(_variablesMap, "=", ", ", toolTipHolder));
+ Utils.stringify(_variablesMap.entrySet(), stringifier,
+ ", ", toolTipHolder));
_variables.setToolTipText(toolTipHolder.value);
}
-
private JTextField _name = new JTextField(20);
private JTextArea _description = new JTextArea(3, 20);
private JTextField _variables = new JTextField(20);
diff --git a/java/src/IceGrid/TreeNode/ReplicaGroup.java b/java/src/IceGrid/TreeNode/ReplicaGroup.java index 78b465335c2..ec4bd61fc61 100755 --- a/java/src/IceGrid/TreeNode/ReplicaGroup.java +++ b/java/src/IceGrid/TreeNode/ReplicaGroup.java @@ -34,6 +34,7 @@ class ReplicaGroup extends EditableLeaf actions[PASTE] = true;
}
actions[DELETE] = true;
+ actions[SUBSTITUTE_VARS] = true;
return actions;
}
diff --git a/java/src/IceGrid/TreeNode/ReplicaGroupEditor.java b/java/src/IceGrid/TreeNode/ReplicaGroupEditor.java index 3a13e9301ca..6ffb4563cb9 100755 --- a/java/src/IceGrid/TreeNode/ReplicaGroupEditor.java +++ b/java/src/IceGrid/TreeNode/ReplicaGroupEditor.java @@ -156,6 +156,19 @@ class ReplicaGroupEditor extends Editor } } + Utils.Resolver getDetailResolver() + { + Application application = _target.getApplication(); + if(application.getModel().substitute()) + { + return application.getResolver(); + } + else + { + return null; + } + } + ReplicaGroupEditor(JFrame parentFrame) { _objects.setEditable(false); @@ -294,30 +307,56 @@ class ReplicaGroupEditor extends Editor builder.nextLine(); } - void setObjectsField() { + final Utils.Resolver resolver = getDetailResolver(); + Ice.StringHolder toolTipHolder = new Ice.StringHolder(); - + Utils.Stringifier stringifier = new Utils.Stringifier() + { + public String toString(Object obj) + { + java.util.Map.Entry entry = (java.util.Map.Entry)obj; + + return Utils.substitute((String)entry.getKey(), resolver) + + " as '" + + Utils.substitute((String)entry.getValue(), resolver) + + "'"; + } + }; + _objects.setText( - Utils.stringify(_objectsMap, "=", ", ", toolTipHolder)); + Utils.stringify(_objectsMap.entrySet(), stringifier, + ", ", toolTipHolder)); _objects.setToolTipText(toolTipHolder.value); } + void show(ReplicaGroup replicaGroup) { detectUpdates(false); setTarget(replicaGroup); + Utils.Resolver resolver = getDetailResolver(); + boolean isEditable = (resolver == null); + ReplicaGroupDescriptor descriptor = (ReplicaGroupDescriptor)replicaGroup.getDescriptor(); _id.setText(descriptor.id); - _description.setText(descriptor.description); + _id.setEditable(isEditable); + _description.setText( + Utils.substitute(descriptor.description, resolver)); + _description.setEditable(isEditable); + _description.setOpaque(isEditable); + _objectsMap = AdapterEditor.objectDescriptorSeqToMap(descriptor.objects); setObjectsField(); + _objectsButton.setEnabled(isEditable); + _loadBalancing.setEnabled(true); + _loadBalancing.setEditable(true); if(descriptor.loadBalancing == null) { _loadBalancing.setSelectedItem(RETURN_ALL); @@ -327,26 +366,36 @@ class ReplicaGroupEditor extends Editor else if(descriptor.loadBalancing instanceof RandomLoadBalancingPolicy) { _loadBalancing.setSelectedItem(RANDOM); - _nReplicas.setText(descriptor.loadBalancing.nReplicas); + _nReplicas.setText( + Utils.substitute(descriptor.loadBalancing.nReplicas, resolver)); _loadSample.setSelectedItem("1"); } else if(descriptor.loadBalancing instanceof RoundRobinLoadBalancingPolicy) { _loadBalancing.setSelectedItem(ROUND_ROBIN); - _nReplicas.setText(descriptor.loadBalancing.nReplicas); + _nReplicas.setText( + Utils.substitute(descriptor.loadBalancing.nReplicas, resolver)); _loadSample.setSelectedItem("1"); } else if(descriptor.loadBalancing instanceof AdaptiveLoadBalancingPolicy) { _loadBalancing.setSelectedItem(ADAPTIVE); - _nReplicas.setText(descriptor.loadBalancing.nReplicas); + _nReplicas.setText( + Utils.substitute(descriptor.loadBalancing.nReplicas, resolver)); + _loadSample.setSelectedItem( - ((AdaptiveLoadBalancingPolicy)descriptor.loadBalancing).loadSample); + Utils.substitute( + ((AdaptiveLoadBalancingPolicy)descriptor.loadBalancing).loadSample, + resolver)); } else { assert false; } + _nReplicas.setEditable(isEditable); + _loadSample.setEditable(isEditable); + _loadBalancing.setEnabled(isEditable); + _loadBalancing.setEditable(isEditable); _applyButton.setEnabled(replicaGroup.isEphemeral()); _discardButton.setEnabled(replicaGroup.isEphemeral()); diff --git a/java/src/IceGrid/Utils.java b/java/src/IceGrid/Utils.java index 694c6c1128e..8c3a1ec7a05 100755 --- a/java/src/IceGrid/Utils.java +++ b/java/src/IceGrid/Utils.java @@ -257,6 +257,11 @@ public class Utils //
// Simple resolver
//
+ public Resolver(java.util.Map variables)
+ {
+ this(new java.util.Map[]{variables});
+ }
+
public Resolver(java.util.Map[] variables)
{
_variables = variables;
@@ -378,7 +383,7 @@ public class Utils if(beg > 0 && input.charAt(beg - 1) == '$')
{
int escape = beg - 1;
- while(escape > 0 && input.charAt(escape = 1) == '$')
+ while(escape > 0 && input.charAt(escape - 1) == '$')
{
--escape;
}
|