summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rwxr-xr-xjava/src/IceGrid/MainPane.java140
-rwxr-xr-xjava/src/IceGrid/Model.java18
-rwxr-xr-xjava/src/IceGrid/SessionKeeper.java2
-rwxr-xr-xjava/src/IceGrid/TreeModelI.java4
-rwxr-xr-xjava/src/IceGrid/TreeNode/Application.java6
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommonBase.java8
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommonBaseI.java38
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerDescriptorRenderer.java165
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerInstance.java148
-rwxr-xr-xjava/src/IceGrid/Utils.java81
10 files changed, 574 insertions, 36 deletions
diff --git a/java/src/IceGrid/MainPane.java b/java/src/IceGrid/MainPane.java
index 97ed8422f91..8ad3819e6a8 100755
--- a/java/src/IceGrid/MainPane.java
+++ b/java/src/IceGrid/MainPane.java
@@ -11,7 +11,14 @@ package IceGrid;
import java.util.prefs.Preferences;
import java.util.prefs.BackingStoreException;
import javax.swing.*;
+
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+
import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.TreeSelectionModel;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.WindowAdapter;
@@ -20,10 +27,13 @@ import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+
import com.jgoodies.looks.Options;
import com.jgoodies.looks.plastic.PlasticLookAndFeel;
import com.jgoodies.looks.windows.WindowsLookAndFeel;
import com.jgoodies.forms.factories.Borders;
+import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.SplitPaneUI;
@@ -33,9 +43,9 @@ import javax.swing.border.AbstractBorder;
import IceGrid.TreeNode.CommonBase;
-public class MainPane extends JSplitPane
+public class MainPane extends JSplitPane implements Model.TreeNodeSelector
{
- class PopupListener extends MouseAdapter
+ static class PopupListener extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
@@ -68,6 +78,68 @@ public class MainPane extends JSplitPane
}
}
+ class SelectionListener implements TreeSelectionListener
+ {
+ SelectionListener(int view)
+ {
+ _view = view;
+ }
+
+ public void valueChanged(TreeSelectionEvent e)
+ {
+ TreePath path = e.getPath();
+ if(path != null)
+ {
+ CommonBase node = (CommonBase)path.getLastPathComponent();
+ node.displayProperties(_rightPane, _view);
+ }
+ }
+
+ private int _view;
+
+ }
+
+ class TabListener implements ChangeListener
+ {
+ public void stateChanged(ChangeEvent e)
+ {
+ JTabbedPane tabbedPane = (JTabbedPane)e.getSource();
+ int selectedPane = tabbedPane.getSelectedIndex();
+ if(selectedPane >= 0)
+ {
+ if(_treeList.size() > selectedPane)
+ {
+ JTree tree = (JTree)_treeList.get(selectedPane);
+ TreePath path = tree.getSelectionPath();
+ if(path != null)
+ {
+ CommonBase node = (CommonBase)path.getLastPathComponent();
+
+ //
+ // Assumes the pane indexing matches the view indexing
+ //
+ node.displayProperties(_rightPane, selectedPane);
+ return;
+ }
+ }
+ }
+ if(_rightPane != null)
+ {
+ _rightPane.setTitle("Properties");
+ _rightPane.setContent(_emptyPanel);
+ _rightPane.validate();
+ _rightPane.repaint();
+ }
+ }
+
+ void add(JTree tree)
+ {
+ _treeList.add(tree);
+ }
+
+ private java.util.List _treeList = new java.util.Vector();
+ }
+
public void updateUI()
{
@@ -80,7 +152,7 @@ public class MainPane extends JSplitPane
SplitPaneUI splitPaneUI = getUI();
if(splitPaneUI instanceof BasicSplitPaneUI)
{
- BasicSplitPaneUI basicUI = (BasicSplitPaneUI) splitPaneUI;
+ BasicSplitPaneUI basicUI = (BasicSplitPaneUI)splitPaneUI;
basicUI.getDivider().setBorder(BorderFactory.createEmptyBorder());
}
}
@@ -90,23 +162,34 @@ public class MainPane extends JSplitPane
{
super(JSplitPane.HORIZONTAL_SPLIT, true);
_model = model;
- setBorder(new EmptyBorder(10, 10, 10, 10));
+ _model.setTreeNodeSelector(this);
+ setBorder(new EmptyBorder(10, 10, 10, 10));
+
//
// Left pane
//
- JTabbedPane tabbedPane = new JTabbedPane();
- tabbedPane.setMinimumSize(new Dimension(200, 300));
- tabbedPane.putClientProperty(Options.NO_CONTENT_BORDER_KEY, Boolean.TRUE);
- tabbedPane.setBorder(new ShadowBorder());
+ _tabbedPane = new JTabbedPane();
+ _tabbedPane.setMinimumSize(new Dimension(200, 300));
+ _tabbedPane.putClientProperty(Options.NO_CONTENT_BORDER_KEY, Boolean.TRUE);
+ _tabbedPane.setBorder(new ShadowBorder());
+ TabListener tabListener = new TabListener();
+ _tabbedPane.addChangeListener(tabListener);
TreeCellRenderer renderer = new CellRenderer();
PopupListener popupListener = new PopupListener();
+
JTree nodeTree = new JTree(_model.getTreeModel(TreeModelI.NODE_VIEW));
nodeTree.setCellRenderer(renderer);
ToolTipManager.sharedInstance().registerComponent(nodeTree);
nodeTree.addMouseListener(popupListener);
+
+ nodeTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+ SelectionListener treeSelectionListener = new SelectionListener(TreeModelI.NODE_VIEW);
+ nodeTree.addTreeSelectionListener(treeSelectionListener);
+ nodeTree.setRootVisible(true);
+ _treeArray[0] = nodeTree;
JScrollPane nodeScroll =
@@ -116,37 +199,54 @@ public class MainPane extends JSplitPane
nodeScroll.setBorder(Borders.DIALOG_BORDER);
- tabbedPane.addTab("Node View", nodeScroll);
+ _tabbedPane.addTab("Node View", nodeScroll);
+ tabListener.add(nodeTree);
JTree appTree = new JTree(_model.getTreeModel(TreeModelI.APPLICATION_VIEW));
appTree.setCellRenderer(renderer);
ToolTipManager.sharedInstance().registerComponent(appTree);
appTree.addMouseListener(popupListener);
+ appTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+ SelectionListener appSelectionListener = new SelectionListener(TreeModelI.APPLICATION_VIEW);
+ appTree.addTreeSelectionListener(appSelectionListener);
+ appTree.setRootVisible(true);
+ _treeArray[1] = appTree;
+
JScrollPane appScroll =
new JScrollPane(appTree,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
appScroll.setBorder(Borders.DIALOG_BORDER);
- tabbedPane.addTab("Application View", appScroll);
-
+ _tabbedPane.addTab("Application View", appScroll);
+ tabListener.add(appTree);
JPanel leftPane = new JPanel(new BorderLayout());
- leftPane.add(tabbedPane);
+ leftPane.add(_tabbedPane);
//
// Right pane
//
- JPanel rightPane = new com.jgoodies.uif_lite.panel.SimpleInternalFrame("Properties");
+ _rightPane = new SimpleInternalFrame("Properties");
+ _emptyPanel = new JPanel();
+ _emptyPanel.setBackground(Color.RED);
+ _rightPane.setContent(_emptyPanel);
- /* JScrollPane rightPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
- JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
- */
setLeftComponent(leftPane);
- setRightComponent(rightPane);
+ setRightComponent(_rightPane);
+ }
+
+ public void selectNode(TreePath path, int view)
+ {
+ if(_tabbedPane.getSelectedIndex() != view)
+ {
+ _tabbedPane.setSelectedIndex(view);
+ }
+ _treeArray[view].setSelectionPath(path);
}
+
//
// Adapted from JGoodies SimpleInternalFrame
//
@@ -199,4 +299,10 @@ public class MainPane extends JSplitPane
}
private Model _model;
+
+ private JTabbedPane _tabbedPane;
+ private JTree[] _treeArray = new JTree[TreeModelI.VIEW_COUNT];
+ private SimpleInternalFrame _rightPane;
+
+ static private JPanel _emptyPanel;
}
diff --git a/java/src/IceGrid/Model.java b/java/src/IceGrid/Model.java
index 2eb2d548ac8..f44db467edb 100755
--- a/java/src/IceGrid/Model.java
+++ b/java/src/IceGrid/Model.java
@@ -15,6 +15,7 @@ import java.awt.Cursor;
import javax.swing.tree.TreeModel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
+import javax.swing.tree.TreePath;
import IceGrid.TreeNode.NodeViewRoot;
import IceGrid.TreeNode.ApplicationViewRoot;
@@ -97,6 +98,11 @@ public class Model
// -- adapters, databases (see above)
+ public static interface TreeNodeSelector
+ {
+ void selectNode(TreePath path, int view);
+ }
+
public static class ConnectInfo
{
ConnectInfo(Preferences connectionPrefs,
@@ -369,6 +375,16 @@ public class Model
return _statusBar;
}
+ public void setTreeNodeSelector(TreeNodeSelector selector)
+ {
+ _treeNodeSelector = selector;
+ }
+
+ public TreeNodeSelector getTreeNodeSelector()
+ {
+ return _treeNodeSelector;
+ }
+
Model(Ice.Communicator communicator, StatusBar statusBar)
{
@@ -396,4 +412,6 @@ public class Model
private TreeModelI _applicationModel;
private int _latestSerial = -1;
+
+ private TreeNodeSelector _treeNodeSelector;
}
diff --git a/java/src/IceGrid/SessionKeeper.java b/java/src/IceGrid/SessionKeeper.java
index 21faaa5f92f..c8f636eaeff 100755
--- a/java/src/IceGrid/SessionKeeper.java
+++ b/java/src/IceGrid/SessionKeeper.java
@@ -117,7 +117,7 @@ class SessionKeeper
builder.nextLine();
builder.append("Username", _username);
builder.nextLine();
- builder.append(_passwordLabel,_password);
+ builder.append(_passwordLabel, _password);
builder.appendSeparator("Options");
builder.append("", _useGlacier);
builder.nextLine();
diff --git a/java/src/IceGrid/TreeModelI.java b/java/src/IceGrid/TreeModelI.java
index ebb710bf348..9037500d3ee 100755
--- a/java/src/IceGrid/TreeModelI.java
+++ b/java/src/IceGrid/TreeModelI.java
@@ -24,8 +24,8 @@ public class TreeModelI implements TreeModel
//
// Available views
//
- static public final int APPLICATION_VIEW = 0;
- static public final int NODE_VIEW = 1;
+ static public final int NODE_VIEW = 0;
+ static public final int APPLICATION_VIEW = 1;
static public final int VIEW_COUNT = 2;
diff --git a/java/src/IceGrid/TreeNode/Application.java b/java/src/IceGrid/TreeNode/Application.java
index 195dd921167..0453f5283ef 100755
--- a/java/src/IceGrid/TreeNode/Application.java
+++ b/java/src/IceGrid/TreeNode/Application.java
@@ -112,6 +112,12 @@ class Application extends Parent
_serverInstances.update(desc.servers, desc.removeServers);
}
+ ServerTemplate findServerTemplate(String id)
+ {
+ return (ServerTemplate)_serverTemplates.findChild(id);
+ }
+
+
private ApplicationDescriptor _descriptor;
//
diff --git a/java/src/IceGrid/TreeNode/CommonBase.java b/java/src/IceGrid/TreeNode/CommonBase.java
index a17e06f5176..c71f3816cd2 100755
--- a/java/src/IceGrid/TreeNode/CommonBase.java
+++ b/java/src/IceGrid/TreeNode/CommonBase.java
@@ -13,6 +13,8 @@ import javax.swing.tree.TreeCellRenderer;
import javax.swing.JPopupMenu;
import javax.swing.JPanel;
+import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+
//
// CommonBase is similar to javax.swing.tree.TreeNode
//
@@ -77,8 +79,6 @@ public interface CommonBase extends TreeCellRenderer
//
JPopupMenu getPopupMenu();
- //
- // Get properties panel
- //
- JPanel getProperties(int view);
+ void displayProperties(SimpleInternalFrame frame, int view);
+
}
diff --git a/java/src/IceGrid/TreeNode/CommonBaseI.java b/java/src/IceGrid/TreeNode/CommonBaseI.java
index 40c3f8515ca..e2ff879cc36 100755
--- a/java/src/IceGrid/TreeNode/CommonBaseI.java
+++ b/java/src/IceGrid/TreeNode/CommonBaseI.java
@@ -9,11 +9,16 @@
package IceGrid.TreeNode;
import java.awt.Component;
-import javax.swing.tree.TreePath;
-import javax.swing.JTree;
import javax.swing.JPopupMenu;
+import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
+import javax.swing.tree.TreePath;
+
+import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+import com.jgoodies.forms.factories.Borders;
+import com.jgoodies.forms.factories.DefaultComponentFactory;
import IceGrid.TreeModelI;
import IceGrid.Model;
@@ -104,12 +109,20 @@ abstract class CommonBaseI implements CommonBase
return null;
}
- public JPanel getProperties(int view)
+ public void displayProperties(SimpleInternalFrame frame, int view)
{
- //
- // TODO: nicer emptyx panel
- //
- return null;
+ if(_panel == null)
+ {
+ JLabel label = DefaultComponentFactory.getInstance().createTitle("This element has no property");
+ _panel = new JPanel();
+ _panel.add(label);
+ _panel.setBorder(Borders.DIALOG_BORDER);
+ }
+
+ frame.setTitle("Properties");
+ frame.setContent(_panel);
+ frame.validate();
+ frame.repaint();
}
public Component getTreeCellRendererComponent(
@@ -227,6 +240,12 @@ abstract class CommonBaseI implements CommonBase
}
}
+ Model getModel()
+ {
+ return _model;
+ }
+
+
//
// view to Path/Parent arrays
//
@@ -242,4 +261,9 @@ abstract class CommonBaseI implements CommonBase
// The Model
//
protected IceGrid.Model _model;
+
+ //
+ // The default panel
+ //
+ protected JPanel _panel;
}
diff --git a/java/src/IceGrid/TreeNode/ServerDescriptorRenderer.java b/java/src/IceGrid/TreeNode/ServerDescriptorRenderer.java
new file mode 100755
index 00000000000..6aa8b8e5bdd
--- /dev/null
+++ b/java/src/IceGrid/TreeNode/ServerDescriptorRenderer.java
@@ -0,0 +1,165 @@
+// **********************************************************************
+//
+// 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 IceGrid.ServerDescriptor;
+import IceGrid.IceBoxDescriptor;
+import IceGrid.PropertyDescriptor;
+import IceGrid.Utils;
+
+import javax.swing.JTextField;
+import javax.swing.JTextArea;
+import javax.swing.JLabel;
+import javax.swing.JScrollPane;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+
+class ServerDescriptorRenderer
+{
+ void build(DefaultFormBuilder builder)
+ {
+ builder.appendSeparator("Server Descriptor");
+ builder.append("Name");
+ builder.append(_name, 3);
+ builder.nextLine();
+ builder.append("Properties");
+ builder.append(_properties, 3);
+ builder.nextLine();
+ builder.append("Comment");
+ builder.nextLine();
+ builder.append("");
+ builder.nextRow(-2);
+ CellConstraints cc = new CellConstraints();
+ JScrollPane scrollPane = new JScrollPane(_comment);
+ builder.add(scrollPane,
+ cc.xywh(builder.getColumn(), builder.getRow(), 3, 3));
+ builder.nextRow(2);
+ builder.nextLine();
+ builder.append("Command");
+ builder.append(_exe, 3);
+ builder.nextLine();
+ builder.append("Command Arguments");
+ builder.append(_options, 3);
+ builder.nextLine();
+ builder.append("Working Directory");
+ builder.append(_pwd, 3);
+ builder.nextLine();
+ builder.append("Interpreter");
+ builder.append(_interpreter, 3);
+ builder.nextLine();
+ builder.append("Interpreter Options");
+ builder.append(_interpreterOptions, 3);
+ builder.nextLine();
+ builder.append("Environment Variables");
+ builder.append(_envs, 3);
+ builder.nextLine();
+ builder.append("Activation Mode");
+ builder.append(_activation, 3);
+ builder.nextLine();
+ builder.append(_endpointsLabel);
+ builder.append(_endpoints, 3);
+
+ //
+ // Make every component non-editable (they are just for show)
+ //
+ _name.setEditable(false);
+ _properties.setEditable(false);
+ _comment.setEditable(false);
+ _comment.setOpaque(false);
+ _exe.setEditable(false);
+ _options.setEditable(false);
+ _pwd.setEditable(false);
+ _interpreter.setEditable(false);
+ _interpreterOptions.setEditable(false);
+ _envs.setEditable(false);
+ _activation.setEditable(false);
+ _endpoints.setEditable(false);
+ }
+
+ void showDescriptor(ServerDescriptor descriptor)
+ {
+ //
+ // Unfortunately this does not resize the panel;
+ // not a big deal for just one line
+ //
+ if(descriptor instanceof IceBoxDescriptor)
+ {
+ IceBoxDescriptor iceBoxDescriptor = (IceBoxDescriptor)descriptor;
+ _endpoints.setText(iceBoxDescriptor.endpoints);
+ _endpointsLabel.setVisible(true);
+ _endpoints.setVisible(true);
+ }
+ else
+ {
+ _endpointsLabel.setVisible(false);
+ _endpoints.setVisible(false);
+ }
+
+ _name.setText(descriptor.name);
+
+ Ice.StringHolder toolTipHolder = new Ice.StringHolder();
+
+ Utils.Stringifier propertyStringifier = new Utils.Stringifier()
+ {
+ public String toString(Object obj)
+ {
+ PropertyDescriptor pd = (PropertyDescriptor)obj;
+ return pd.name + "=" + pd.value;
+ }
+ };
+
+ _properties.setText(Utils.stringify(descriptor.properties, propertyStringifier,
+ ", ", toolTipHolder));
+ _properties.setToolTipText(toolTipHolder.value);
+
+ _comment.setText(descriptor.comment);
+ _exe.setText(descriptor.exe);
+
+ _options.setText(Utils.stringify(descriptor.options, " ", toolTipHolder));
+ _options.setToolTipText(toolTipHolder.value);
+
+ _interpreter.setText(descriptor.interpreter);
+
+ _interpreterOptions.setText(Utils.stringify(descriptor.interpreterOptions, " ", toolTipHolder));
+ _interpreterOptions.setToolTipText(toolTipHolder.value);
+
+
+ _envs.setText(Utils.stringify(descriptor.envs, " ", toolTipHolder));
+ _envs.setToolTipText(toolTipHolder.value);
+
+ _activation.setText(descriptor.activation);
+ }
+
+ //
+ // ComponentDescriptor
+ //
+ private JTextField _name = new JTextField(20);
+ private JTextField _variables = new JTextField(20);
+ private JTextField _properties = new JTextField(20);
+ private JTextArea _comment = new JTextArea(3, 20);
+
+ //
+ // ServerDescriptor
+ //
+ private JTextField _exe = new JTextField(20);
+ private JTextField _pwd = new JTextField(20);
+ private JTextField _options = new JTextField(20);
+ private JTextField _interpreter = new JTextField(20);
+ private JTextField _interpreterOptions = new JTextField(20);
+ private JTextField _envs = new JTextField(20);
+ private JTextField _activation = new JTextField(20);
+
+ //
+ // IceBoxDescriptor
+ //
+ private JLabel _endpointsLabel = new JLabel("IceBox Endpoints");
+ private JTextField _endpoints = new JTextField(20);
+};
diff --git a/java/src/IceGrid/TreeNode/ServerInstance.java b/java/src/IceGrid/TreeNode/ServerInstance.java
index f115b5cd02b..c3e1a6cc4c6 100755
--- a/java/src/IceGrid/TreeNode/ServerInstance.java
+++ b/java/src/IceGrid/TreeNode/ServerInstance.java
@@ -17,8 +17,21 @@ import javax.swing.Icon;
import javax.swing.JMenuItem;
import javax.swing.Action;
import javax.swing.AbstractAction;
+import javax.swing.JTextField;
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.JTextField;
+import javax.swing.JComboBox;
+import javax.swing.JButton;
+import javax.swing.JToggleButton;
+
+import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import com.jgoodies.forms.factories.Borders;
+
import IceGrid.TreeModelI;
import IceGrid.IceBoxDescriptor;
import IceGrid.ServerInstanceDescriptor;
@@ -30,6 +43,116 @@ import IceGrid.ServerDynamicInfo;
class ServerInstance extends Parent
{
+
+ static class Editor
+ {
+ JComponent getComponent()
+ {
+ if(_scrollPane == 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.appendSeparator("Server Instance Descriptor");
+
+ builder.append("Node");
+ builder.append(_node, 3);
+ builder.nextLine();
+
+ AbstractAction gotoTemplate = new AbstractAction("->")
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ if(_server != null)
+ {
+ CommonBase parent = _server.getParent(TreeModelI.APPLICATION_VIEW);
+ if(parent != null)
+ {
+ Application app = (Application)parent.getParent(TreeModelI.APPLICATION_VIEW);
+ if(app != null)
+ {
+ ServerTemplate template = app.findServerTemplate(_template.getText());
+ if(template != null)
+ {
+ _server.getModel().getTreeNodeSelector().selectNode(
+ template.getPath(TreeModelI.APPLICATION_VIEW),
+ TreeModelI.APPLICATION_VIEW);
+ }
+ }
+ }
+ }
+ }
+ };
+ gotoTemplate.putValue(Action.SHORT_DESCRIPTION, "Goto this template");
+
+
+ builder.append("Template", _template);
+ builder.append(new JButton(gotoTemplate));
+ builder.nextLine();
+
+ builder.append("Parameters", _parameterValues);
+ builder.append(new JButton("..."));
+ builder.nextLine();
+
+ _myDescriptor = new JComboBox();
+ _myDescriptor.addItem("");
+ _myDescriptor.addItem("ServerDescriptor");
+ _myDescriptor.addItem("IceBoxDescriptor");
+ builder.append("My Descriptor", _myDescriptor);
+ builder.append(new JToggleButton("Edit"));
+
+ builder.append("Targets");
+ builder.append(_targets, 3);
+ _targets.setEditable(false);
+ builder.nextLine();
+ _serverDescriptorRenderer.build(builder);
+
+ _scrollPane = new JScrollPane(builder.getPanel(),
+ JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+ _scrollPane.setBorder(Borders.DIALOG_BORDER);
+ }
+ return _scrollPane;
+ }
+
+ void show(ServerInstance server)
+ {
+ _server = server;
+ ServerInstanceDescriptor descriptor = server.getDescriptor();
+ _template.setText(descriptor.template);
+ _node.setText(descriptor.node);
+
+ Ice.StringHolder toolTipHolder = new Ice.StringHolder();
+
+ _parameterValues.setText(Utils.stringify(descriptor.parameterValues, "=",
+ ", ", toolTipHolder));
+ _parameterValues.setToolTipText(toolTipHolder.value);
+
+ _targets.setText(Utils.stringify(descriptor.targets, ", ", toolTipHolder));
+ _targets.setToolTipText(toolTipHolder.value);
+
+ _serverDescriptorRenderer.showDescriptor(descriptor.descriptor);
+ }
+
+ private JTextField _node = new JTextField(20);
+ private JTextField _template = new JTextField(20);
+ private JTextField _parameterValues = new JTextField(20);
+ private JComboBox _myDescriptor;
+ private JTextField _targets = new JTextField(20);
+
+ private ServerDescriptorRenderer _serverDescriptorRenderer =
+ new ServerDescriptorRenderer();
+
+ private ServerInstance _server;
+
+ private JScrollPane _scrollPane;
+ }
+
static class PopupMenu extends JPopupMenu
{
PopupMenu()
@@ -67,9 +190,8 @@ class ServerInstance extends Parent
private ServerInstance _server;
private Action _startAction;
private Action _stopAction;
-
}
-
+
public JPopupMenu getPopupMenu()
{
@@ -81,11 +203,21 @@ class ServerInstance extends Parent
return _popup;
}
- public JPanel getProperties(int view)
+ public void displayProperties(SimpleInternalFrame frame, int view)
{
- return null;
+ frame.setTitle("Properties for " + _id);
+
+ if(_editor == null)
+ {
+ _editor = new Editor();
+ }
+ _editor.show(this);
+ frame.setContent(_editor.getComponent());
+ frame.validate();
+ frame.repaint();
}
-
+
+
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
@@ -319,6 +451,11 @@ class ServerInstance extends Parent
return _state;
}
+ ServerInstanceDescriptor getDescriptor()
+ {
+ return _descriptor;
+ }
+
public String toString()
{
@@ -363,5 +500,6 @@ class ServerInstance extends Parent
static private DefaultTreeCellRenderer _cellRenderer;
static private Icon[] _icons;
static private PopupMenu _popup;
+ static private Editor _editor;
}
diff --git a/java/src/IceGrid/Utils.java b/java/src/IceGrid/Utils.java
index 5997f1a7e62..e93d96e471b 100755
--- a/java/src/IceGrid/Utils.java
+++ b/java/src/IceGrid/Utils.java
@@ -18,4 +18,85 @@ public class Utils
assert(imgURL != null);
return new ImageIcon(imgURL);
}
+
+ static public interface Stringifier
+ {
+ public String toString(Object obj);
+ }
+
+ //
+ // Stringify helpers
+ //
+ static public String stringify(java.util.Collection col,
+ Stringifier stringifier,
+ String separator,
+ Ice.StringHolder toolTipHolder)
+ {
+ String result = "";
+ toolTipHolder.value = null;
+ java.util.Iterator p = col.iterator();
+
+ while(p.hasNext())
+ {
+ if(result.length() > 0)
+ {
+ result += separator;
+ toolTipHolder.value += "<br>";
+ }
+ else
+ {
+ toolTipHolder.value = "<html>";
+ }
+ String elt = stringifier.toString(p.next());
+ result += elt;
+ toolTipHolder.value += elt;
+ }
+ if(toolTipHolder.value != null)
+ {
+ toolTipHolder.value += "</html>";
+ }
+
+ return result;
+ }
+
+ static public String stringify(java.util.Collection col,
+ String separator,
+ Ice.StringHolder toolTipHolder)
+ {
+
+ Stringifier stringifier = new Stringifier()
+ {
+ public String toString(Object obj)
+ {
+ return (String)obj;
+ }
+ };
+ return stringify(col, stringifier, separator, toolTipHolder);
+
+ }
+
+ static public String stringify(String[] stringSeq, String separator,
+ Ice.StringHolder toolTipHolder)
+ {
+
+ return stringify(java.util.Arrays.asList(stringSeq), separator, toolTipHolder);
+ }
+
+ static public String stringify(java.util.Map stringMap,
+ final String pairSeparator,
+ String separator,
+ Ice.StringHolder toolTipHolder)
+ {
+ Stringifier stringifier = new Stringifier()
+ {
+ public String toString(Object obj)
+ {
+ java.util.Map.Entry entry = (java.util.Map.Entry)obj;
+ return (String)entry.getKey() + pairSeparator + (String)entry.getValue();
+ }
+ };
+
+ return stringify(stringMap.entrySet(), stringifier, separator, toolTipHolder);
+ }
+
}