summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2005-10-15 22:40:40 +0000
committerBernard Normier <bernard@zeroc.com>2005-10-15 22:40:40 +0000
commitbb143962aa41abafa300039319ef250d8ab9715a (patch)
treeb9cb16bf2a5ab97b216fe0e4278326d516969235 /java/src
parentami on some operations (diff)
downloadice-bb143962aa41abafa300039319ef250d8ab9715a.tar.bz2
ice-bb143962aa41abafa300039319ef250d8ab9715a.tar.xz
ice-bb143962aa41abafa300039319ef250d8ab9715a.zip
Variable substitution in Application, Node and Replica Group
Diffstat (limited to 'java/src')
-rwxr-xr-xjava/src/IceGrid/Model.java5
-rwxr-xr-xjava/src/IceGrid/TreeNode/Application.java60
-rwxr-xr-xjava/src/IceGrid/TreeNode/ApplicationEditor.java74
-rwxr-xr-xjava/src/IceGrid/TreeNode/Node.java1
-rwxr-xr-xjava/src/IceGrid/TreeNode/NodeEditor.java49
-rwxr-xr-xjava/src/IceGrid/TreeNode/ReplicaGroup.java1
-rwxr-xr-xjava/src/IceGrid/TreeNode/ReplicaGroupEditor.java65
-rwxr-xr-xjava/src/IceGrid/Utils.java7
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;
}