
admin.astor.tools.DevBrowserTree Maven / Gradle / Ivy
//+======================================================================
// $Source: $
//
// Project: Tango
//
// Description: java source code for Tango manager tool..
//
// $Author$
//
// Copyright (C) : 2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,
// European Synchrotron Radiation Facility
// BP 220, Grenoble 38043
// FRANCE
//
// This file is part of Tango.
//
// Tango is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Tango is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Tango. If not, see .
//
// $Revision$
//
//-======================================================================
package admin.astor.tools;
import admin.astor.AstorUtil;
import admin.astor.ServArchitectureDialog;
import fr.esrf.Tango.DevFailed;
import fr.esrf.TangoApi.*;
import fr.esrf.TangoDs.TangoConst;
import fr.esrf.tangoatk.widget.util.ATKGraphicsUtils;
import javax.swing.*;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.MouseEvent;
public class DevBrowserTree extends JTree implements TangoConst {
private static final int INSTANCE = 3;
private static final int CLASS = 4;
private static final int DEVICE = 5;
private static final int ATTRIB = 6;
private static final int DOMAIN = 3;
private static final int FAMILY = 4;
private static final int MEMBER = 5;
private DefaultTreeModel treeModel;
private DevBrowser browser;
private TreePopupMenu attributeMenu = null;
private TreePopupMenu deviceMenu = null;
private TreePopupMenu serverMenu = null;
private DefaultMutableTreeNode root;
//===============================================================
//===============================================================
public DevBrowserTree(DevBrowser parent) throws DevFailed {
super();
this.browser = parent;
// Get TANGO HOST as title
String tango_host = ApiUtil.get_db_obj().get_tango_host();
initComponent(tango_host);
attributeMenu = new TreePopupMenu(this, TreePopupMenu.MODE_ATTR);
deviceMenu = new TreePopupMenu(this, TreePopupMenu.MODE_DEVICE);
serverMenu = new TreePopupMenu(this, TreePopupMenu.MODE_SERVER);
}
//===============================================================
//===============================================================
private void initComponent(String title) throws DevFailed {
// Create the nodes.
root = new DefaultMutableTreeNode(title);
createServerNodes(root);
createDeviceNodes(root);
createAliasNodes(root);
// Create the tree that allows one selection at a time.
getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
// Create Tree and Tree model
//------------------------------------
treeModel = new DefaultTreeModel(root);
setModel(treeModel);
//Enable tool tips.
ToolTipManager.sharedInstance().registerComponent(this);
// Set the icon for leaf nodes.
setCellRenderer(new TangoRenderer());
// Listen for collapse tree
addTreeExpansionListener(new TreeExpansionListener() {
public void treeCollapsed(TreeExpansionEvent e) {
//collapsedPerformed(e);
}
public void treeExpanded(TreeExpansionEvent e) {
expandedPerformed(e);
}
});
// Add Action listener
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
treeMouseClicked(evt);
}
});
}
//===============================================================
//===============================================================
private boolean createChildNodes(DefaultMutableTreeNode node, String[] str) {
boolean create = false;
if (node.getChildCount() != str.length)
create = true;
else
for (int i = 0; i < str.length; i++)
if (!node.getChildAt(i).toString().equals(str[i]))
create = true;
return create;
}
//===============================================================
//===============================================================
private void createAliasNodes(DefaultMutableTreeNode root) throws DevFailed {
// Create a node for Device
DefaultMutableTreeNode c_node = new DefaultMutableTreeNode("Aliases");
root.add(c_node);
DefaultMutableTreeNode al_node;
Database db = ApiUtil.get_db_obj();
String[] aliases = db.get_device_alias_list("*");
for (String alias : aliases) {
// Create a node for domain
try {
String deviceName = ApiUtil.get_db_obj().get_device_from_alias(alias);
al_node = new DefaultMutableTreeNode(new BrowserDevice(deviceName, alias));
al_node.add(new DefaultMutableTreeNode("dummy"));
c_node.add(al_node);
} catch (DevFailed e) {/* Do Nothing */}
}
}
//===============================================================
//===============================================================
private void createServerNodes(DefaultMutableTreeNode root) throws DevFailed {
// Create a node for Device
DefaultMutableTreeNode c_node = new DefaultMutableTreeNode("Servers");
root.add(c_node);
DefaultMutableTreeNode d_node;
Database db = ApiUtil.get_db_obj();
String[] servers = db.get_server_name_list();
for (String server : servers) {
// Create a node for domain
d_node = new DefaultMutableTreeNode(server);
d_node.add(new DefaultMutableTreeNode("dummy"));
c_node.add(d_node);
}
}
//===============================================================
//===============================================================
private void createInstanceNodes(DefaultMutableTreeNode node) {
try {
DefaultMutableTreeNode s_node;
String binaryFile = (String) node.getUserObject();
String[] instances =
ApiUtil.get_db_obj().get_instance_name_list(binaryFile);
// Check if something has changed.
if (!createChildNodes(node, instances))
return;
for (int i = 0; i < instances.length; i++) {
// Create a node for family
s_node = new DefaultMutableTreeNode(new BrowserServer(binaryFile, instances[i]));
s_node.add(new DefaultMutableTreeNode("Dummy"));
treeModel.insertNodeInto(s_node, node, i);
}
removePreviousNode(node, instances.length);
} catch (DevFailed e) {
displayException(e);
}
}
//===============================================================
//===============================================================
private void createClassNodes(DefaultMutableTreeNode node) {
try {
DefaultMutableTreeNode i_node;
BrowserServer server = (BrowserServer) node.getUserObject();
String[] classes = ApiUtil.get_db_obj().get_server_class_list(server.name);
// Check if something has changed.
if (!createChildNodes(node, classes))
return;
for (int i = 0; i < classes.length; i++) {
// Create a node for family
i_node = new DefaultMutableTreeNode(classes[i]);
i_node.add(new DefaultMutableTreeNode("Dummy"));
treeModel.insertNodeInto(i_node, node, i);
}
removePreviousNode(node, classes.length);
} catch (DevFailed e) {
displayException(e);
}
}
//===============================================================
//===============================================================
private void createDeviceNodesFromServer(DefaultMutableTreeNode node) {
try {
DefaultMutableTreeNode d_node;
DefaultMutableTreeNode s_node = (DefaultMutableTreeNode) node.getParent();
BrowserServer server = (BrowserServer) s_node.getUserObject();
String serverName = server.name;
String className = (String) node.getUserObject();
String[] devices =
ApiUtil.get_db_obj().get_device_name(serverName, className);
// Check if something has changed.
if (!createChildNodes(node, devices))
return;
for (int i = 0; i < devices.length; i++) {
// Create a node for family
d_node = new DefaultMutableTreeNode(new BrowserDevice_2(devices[i]));
d_node.add(new DefaultMutableTreeNode("dummy"));
treeModel.insertNodeInto(d_node, node, i);
}
removePreviousNode(node, devices.length);
} catch (DevFailed e) {
displayException(e);
}
}
//===============================================================
//===============================================================
//===============================================================
//===============================================================
private void createDeviceNodes(DefaultMutableTreeNode root) throws DevFailed {
// Create a node for Device
DefaultMutableTreeNode c_node = new DefaultMutableTreeNode("Devices");
root.add(c_node);
DefaultMutableTreeNode d_node;
Database db = ApiUtil.get_db_obj();
String[] domains = db.get_device_domain("*");
for (String domain : domains) {
// Create a node for domain
d_node = new DefaultMutableTreeNode(domain);
d_node.add(new DefaultMutableTreeNode("dummy"));
c_node.add(d_node);
}
}
//===============================================================
//===============================================================
private void createFamilyNodes(DefaultMutableTreeNode node) {
try {
DefaultMutableTreeNode f_node;
String domain = (String) node.getUserObject();
String[] families =
ApiUtil.get_db_obj().get_device_family(domain + "/*");
// Check if something has changed.
if (!createChildNodes(node, families))
return;
for (int f = 0; f < families.length; f++) {
// Create a node for family
f_node = new DefaultMutableTreeNode(families[f]);
f_node.add(new DefaultMutableTreeNode("Dummy"));
treeModel.insertNodeInto(f_node, node, f);
}
removePreviousNode(node, families.length);
} catch (DevFailed e) {
displayException(e);
}
}
//===============================================================
//===============================================================
private void createMemberNodes(String tango_path, DefaultMutableTreeNode node) {
try {
DefaultMutableTreeNode m_node;
tango_path += (String) node.getUserObject();
String[] members =
ApiUtil.get_db_obj().get_device_member(tango_path + "/*");
// Check if something has changed.
if (!createChildNodes(node, members))
return;
for (int m = 0; m < members.length; m++) {
// Create a node for family
//m_node = new DefaultMutableTreeNode(members[m]);
m_node = new DefaultMutableTreeNode(new BrowserDevice(tango_path + "/" + members[m]));
m_node.add(new DefaultMutableTreeNode("Dummy"));
treeModel.insertNodeInto(m_node, node, m);
}
removePreviousNode(node, members.length);
} catch (DevFailed e) {
displayException(e);
}
}
//===============================================================
//===============================================================
private void createAttributeNodes(DefaultMutableTreeNode node) {
try {
DefaultMutableTreeNode a_node;
BrowserDevice dev = (BrowserDevice) node.getUserObject();
String[] attnames = dev.get_attribute_list();
// Check if something has changed.
if (!createChildNodes(node, attnames))
return;
for (int a = 0; a < attnames.length; a++) {
// Create a node for attribute
BrowserAttribute attr = new BrowserAttribute(attnames[a], dev);
a_node = new DefaultMutableTreeNode(attr);
treeModel.insertNodeInto(a_node, node, a);
}
removePreviousNode(node, attnames.length);
} catch (DevFailed e) {
removePreviousNode(node, 0);
displayException(e);
}
}
//===============================================================
//===============================================================
private void removePreviousNode(DefaultMutableTreeNode node, int offset) {
while (node.getChildCount() > offset) {
DefaultMutableTreeNode leaf =
(DefaultMutableTreeNode) node.getChildAt(offset);
treeModel.removeNodeFromParent(leaf);
}
}
//===============================================================
//===============================================================
private String tangoPath(TreePath path, int nb) {
String p = "";
for (int i = DOMAIN; i < DOMAIN + nb; i++) {
p += path.getPathComponent(i - 1).toString();
p += "/";
}
return p;
}
//===============================================================
//===============================================================
public void expandedPerformed(TreeExpansionEvent evt) {
// Get path
TreePath tp = evt.getPath();
Object[] path = tp.getPath();
if (path.length < 2)
return;
// Get concerned node
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) tp.getPathComponent(path.length - 1);
// and create new ones
String tango_path;
if (path[1].toString().equals("Servers")) {
switch (path.length) {
case INSTANCE:
createInstanceNodes(node);
break;
case CLASS:
createClassNodes(node);
break;
case DEVICE:
createDeviceNodesFromServer(node);
break;
case ATTRIB:
createAttributeNodes(node);
break;
}
} else if (path[1].toString().equals("Devices")) {
switch (path.length) {
case DOMAIN:
createFamilyNodes(node);
break;
case FAMILY:
tango_path = tangoPath(tp, 1);
createMemberNodes(tango_path, node);
break;
case MEMBER:
createAttributeNodes(node);
break;
}
} else if (path[1].toString().equals("Aliases")) {
if (path.length == 3)
createAttributeNodes(node);
}
}
//======================================================
/**
* Manage event on clicked mouse on JTree object.
*/
//======================================================
private boolean obj_has_polling;
private void treeMouseClicked(java.awt.event.MouseEvent evt) {
// Check if click is on a node
if (getRowForLocation(evt.getX(), evt.getY()) < 1)
return;
// Set selection at mouse position
TreePath selectedPath = getPathForLocation(evt.getX(), evt.getY());
if (selectedPath == null) return;
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) selectedPath.getPathComponent(selectedPath.getPathCount() - 1);
Object o = node.getUserObject();
int mask = evt.getModifiers();
clearDisplay();
obj_has_polling = false;
// Check button clicked
if (evt.getClickCount() == 2 && node.isLeaf()) {
// if do not have attributes, retry to read attributes
if (o instanceof BrowserDevice) {
createAttributeNodes(node);
for (int i = 0; i < node.getChildCount(); i++) {
DefaultMutableTreeNode child =
(DefaultMutableTreeNode) node.getChildAt(i);
expandPath(new TreePath(child.getPath()));
}
}
} else if ((mask & MouseEvent.BUTTON3_MASK) != 0) {
// Check if selection is an attribute
if (o instanceof BrowserAttribute) {
attributeMenu.showMenu(evt);
// Check if selection is an attribute
BrowserAttribute attr = (BrowserAttribute) o;
displayEventProperties(attr);
} else if (o instanceof BrowserDevice) {
boolean running = displayDeviceInfo((BrowserDevice) o);
deviceMenu.showMenu(evt, obj_has_polling, running);
} else if (o instanceof BrowserServer) {
boolean running = displayDeviceInfo(((BrowserServer) o).dev);
serverMenu.showMenu(evt, obj_has_polling, running);
}
} else if ((mask & MouseEvent.BUTTON1_MASK) != 0) {
if (o instanceof BrowserServer)
displayDeviceInfo(((BrowserServer) o).dev);
else if (o instanceof BrowserDevice)
displayDeviceInfo((BrowserDevice) o);
else if (o instanceof BrowserAttribute)
displayEventProperties((BrowserAttribute) o);
}
}
//======================================================
//======================================================
private void clearDisplay() {
browser.setText("");
}
//======================================================
//======================================================
private boolean displayDeviceInfo(BrowserDevice dev) {
String message;
try {
DeviceInfo info = dev.get_info();
message = info + "\n\n";
} catch (DevFailed e) {
browser.setText(e.toString());
return false;
}
boolean ok = false;
try {
String str = "\n=======================================\n";
str += " Polling Status:\n\n";
// Check if admin device
if (dev.name().startsWith("dserver/")) {
DeviceData argout = dev.command_inout("QueryDevice");
String[] devlist = argout.extractStringArray();
for (String device : devlist) {
// Take off class name
String devname = device.substring(device.indexOf("::") + 2);
DeviceData argin = new DeviceData();
argin.insert(devname);
argout = dev.command_inout("DevPollStatus", argin);
String[] s = argout.extractStringArray();
str += "----------------- " + devname + " ------------------\n";
for (String line : s)
str += line + "\n\n";
if (s.length > 0)
obj_has_polling = true;
}
ok = true;
} else {
String[] poll_st = dev.polling_status();
for (String line : poll_st)
str += line + "\n\n";
ok = true;
if (poll_st.length > 0)
obj_has_polling = true;
}
message += str;
} catch (DevFailed e) {
try {
dev.ping();
ok = true;
} catch (DevFailed ex) {
message += "\n=======================================\n";
message += AstorUtil.strException(ex);
}
}
browser.setText(message);
return ok;
}
//======================================================
//======================================================
void showProfiler() {
try {
Object o = getSelectedNode().getUserObject();
if (o instanceof BrowserDevice)
new PollingProfiler(browser, ((BrowserDevice) o).name).setVisible(true);
else if (o instanceof BrowserServer) {
DeviceData argOut = ((BrowserServer) o).dev.command_inout("QueryDevice");
String[] deviceNames = argOut.extractStringArray();
// Take off class names.
String s = "::";
for (int i = 0; i < deviceNames.length; i++) {
int idx = deviceNames[i].indexOf(s);
if (idx > 0)
deviceNames[i] = deviceNames[i].substring(idx + s.length());
}
new PollingProfiler(browser, deviceNames).setVisible(true);
}
} catch (DevFailed e) {
Utils.popupError(browser, null, e);
}
}
//======================================================
//======================================================
String getSelectedName() {
Object o = getSelectedNode().getUserObject();
if (o instanceof BrowserAttribute)
return ((BrowserAttribute) o).name;
else if (o instanceof BrowserDevice)
return ((BrowserDevice) o).name;
else if (o instanceof BrowserServer)
return ((BrowserServer) o).name;
else
return "??";
}
//======================================================
//======================================================
private String getAttPollingInfo() {
Object o = getSelectedNode().getUserObject();
if (o instanceof BrowserAttribute) {
try {
BrowserAttribute att = (BrowserAttribute) o;
String header = "Polled attribute name = ";
String[] poll_status = att.dev.polling_status();
for (String line : poll_status) {
String s = line.substring(header.length(),
line.indexOf('\n'));
if (s.toLowerCase().equals(att.name.toLowerCase()))
return line;
}
} catch (DevFailed e) {
return e.toString();
}
}
return "";
}
//======================================================
//======================================================
private void displayEventProperties(BrowserAttribute attr) {
displayEventProperties(attr.attname);
}
//======================================================
//======================================================
void displayEventProperties(String attname) {
String str = "";
try {
// Check if device support archive events
AttributeProxy ap = new AttributeProxy(attname);
int att_idl_version = ap.get_idl_version();
if (att_idl_version < 3) {
browser.setText("Device_" +
att_idl_version + "Impl not supported.");
return;
}
// ok. Get config
AttributeInfoEx info = ap.get_info_ex();
if (info.events != null) {
str = attname;
str += "\n\nChange event properties:\n";
if (info.events.ch_event != null) {
str += "abs_change : " + info.events.ch_event.abs_change + "\n";
str += "rel_change : " + info.events.ch_event.rel_change + "\n";
} else {
str += "rel_change : " + Tango_AlrmValueNotSpec + "\n";
str += "abs_change : " + Tango_AlrmValueNotSpec + "\n";
}
str += "\n\nPeriodic event properties:\n";
if (info.events.per_event != null) {
str += "period : " + info.events.per_event.period;
} else {
str += "period : " + Tango_AlrmValueNotSpec;
}
str += "\n\nArchive event properties:\n";
if (info.events.arch_event != null) {
str += "abs_change : " + info.events.arch_event.abs_change + "\n";
str += "rel_change : " + info.events.arch_event.rel_change + "\n";
str += "period : " + info.events.arch_event.period;
} else {
str += "rel_change : " + Tango_AlrmValueNotSpec + "\n";
str += "abs_change : " + Tango_AlrmValueNotSpec + "\n";
str += "period : " + Tango_AlrmValueNotSpec;
}
}
str += "\n\n\n" + getAttPollingInfo();
browser.setText(str);
} catch (DevFailed e) {
displayException(e);
}
}
//======================================================
//======================================================
void deviceTest() {
Object o = getSelectedNode().getUserObject();
String deviceName = null;
if (o instanceof BrowserDevice)
deviceName = ((BrowserDevice) o).name;
else if (o instanceof BrowserServer)
deviceName = "dserver/" + ((BrowserServer) o).name;
if (deviceName != null) {
try {
JDialog d = new JDialog(browser, false);
d.setTitle(deviceName + " Device Panel");
d.setContentPane(new jive.ExecDev(deviceName));
ATKGraphicsUtils.centerDialog(d);
d.setVisible(true);
} catch (DevFailed e) {
Utils.popupError(browser, null, e);
}
}
}
//======================================================
//======================================================
void serverArchitecture() {
Object o = getSelectedNode().getUserObject();
String serverName = null;
try {
if (o instanceof BrowserDevice) {
BrowserDevice dev = (BrowserDevice) o;
DeviceInfo info = dev.get_info();
serverName = info.server;
} else if (o instanceof BrowserServer)
serverName = ((BrowserServer) o).name;
if (serverName != null) {
ServArchitectureDialog sad = new ServArchitectureDialog(browser, serverName);
ATKGraphicsUtils.centerDialog(sad);
sad.setVisible(true);
}
} catch (DevFailed e) {
displayException(e);
}
}
//======================================================
//======================================================
private void displayException(Exception e) {
browser.setText(AstorUtil.strException(e));
}
//======================================================
//======================================================
void deviceMonitor() {
Object o = getSelectedNode().getUserObject();
if (o instanceof BrowserDevice) {
String devname = ((BrowserDevice) o).name;
atkpanel.MainPanel atkpanel = new atkpanel.MainPanel(devname, false, true);
ATKGraphicsUtils.centerFrameOnScreen(atkpanel);
}
}
//======================================================
//======================================================
DefaultMutableTreeNode getSelectedNode() {
return (DefaultMutableTreeNode) getLastSelectedPathComponent();
}
//======================================================
//======================================================
private BrowserAttribute getAttribute(Object o) {
if (o == null)
return null;
DefaultMutableTreeNode node = (DefaultMutableTreeNode) o;
Object obj = node.getUserObject();
if (obj instanceof BrowserAttribute)
return (BrowserAttribute) obj;
else
return null;
}
//======================================================
//======================================================
void add(int mode) {
BrowserAttribute attr = getAttribute(getSelectedNode());
if (attr != null) {
//editProperties(mode);
browser.add(attr.attname, mode);
}
}
//======================================================
//======================================================
void editProperties(int mode) {
BrowserAttribute attr = getAttribute(getSelectedNode());
if (attr != null) {
new PropertyDialog(browser, attr.attname, mode).showDialog();
displayEventProperties(attr);
}
}
//======================================================
//======================================================
void managePolling() {
BrowserAttribute attr = getAttribute(getSelectedNode());
if (attr != null)
browser.managePolling(attr.dev, attr.name);
else {
Object o = getSelectedNode().getUserObject();
if (o instanceof BrowserDevice_2)
browser.managePolling(((BrowserDevice_2) o).name);
else if (o instanceof BrowserDevice)
browser.managePolling(((BrowserDevice) o).name);
}
}
//======================================================
//======================================================
void displayHostPanel() {
Object o = getSelectedNode().getUserObject();
String deviceName = null;
if (o instanceof BrowserDevice)
deviceName = ((BrowserDevice) o).name;
else if (o instanceof BrowserServer)
deviceName = "dserver/" + ((BrowserServer) o).name;
if (deviceName != null)
browser.displayHostPanel(deviceName);
}
//======================================================
//======================================================
void gotoServer() {
Object o = getSelectedNode().getUserObject();
if (o instanceof BrowserDevice) {
BrowserDevice dev = ((BrowserDevice) o);
try {
DeviceInfo info = dev.get_info();
String serverName = info.server;
String binaryFile = serverName.substring(0, serverName.indexOf('/'));
String instance = serverName.substring(serverName.indexOf('/') + 1);
DefaultMutableTreeNode[] path = new DefaultMutableTreeNode[4];
int idx = 0;
path[idx] = root;
boolean found = false;
for (int i = 0; !found && i < path[idx].getChildCount(); i++) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path[idx].getChildAt(i);
if (found = node.toString().equals("Servers"))
path[++idx] = node;
}
// Search server binary file
found = false;
for (int i = 0; !found && i < path[idx].getChildCount(); i++) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path[idx].getChildAt(i);
if (found = node.toString().equals(binaryFile))
path[++idx] = node;
}
if (!found) {
browser.setText(binaryFile + " Not Found !");
return;
}
// First time check if already created
if (path[idx].getChildCount() == 1)
if (path[idx].getChildAt(0).toString().equals("dummy"))
createInstanceNodes(path[idx]);
// Search server instance
found = false;
for (int i = 0; !found && i < path[idx].getChildCount(); i++) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path[idx].getChildAt(i);
Object obj = node.getUserObject();
if (obj instanceof BrowserServer) {
BrowserServer serv = ((BrowserServer) obj);
if (found = serv.instance.equals(instance))
path[++idx] = node;
}
}
if (!found) {
browser.setText(instance + " Not Found !");
return;
}
TreePath tp = new TreePath(path);
setSelectionPath(tp);
scrollPathToVisible(tp);
} catch (DevFailed e) {
displayException(e);
}
}
}
//======================================================
//======================================================
String getCollection() {
/*
DefaultMutableTreeNode node = getSelectedNode();
TreeNode[] path = node.getPath();
return path[1].toString();
*/
Object o = getSelectedNode().getUserObject();
if (o instanceof BrowserDevice_2)
return "Servers";
else
return "Devices";
}
//==========================================================
//==========================================================
private class BrowserServer {
String name;
String instance;
BrowserDevice_2 dev;
//==========================================================
BrowserServer(String binfile, String instance) {
this.name = binfile + "/" + instance;
this.instance = instance;
try {
dev = new BrowserDevice_2("dserver/" + name);
} catch (DevFailed e) { /* Do nothing */}
}
//==========================================================
//==========================================================
public String toString() {
return instance;
}
//==========================================================
}
//==========================================================
//==========================================================
private class BrowserDevice extends DeviceProxy {
String name;
String member;
//==========================================================
BrowserDevice(String name) throws DevFailed {
super(name);
this.name = name;
int idx = name.lastIndexOf('/');
if (idx < 0)
this.member = name;
else
this.member = name.substring(idx + 1);
}
//==========================================================
BrowserDevice(String name, String aliasname) throws DevFailed {
super(name);
this.name = name;
member = aliasname;
}
//==========================================================
public String toString() {
return member;
}
}
//==========================================================
//==========================================================
private class BrowserDevice_2 extends BrowserDevice {
//==========================================================
BrowserDevice_2(String name) throws DevFailed {
super(name);
}
//==========================================================
public String toString() {
return name;
}
}
//==========================================================
//==========================================================
private class BrowserAttribute {
BrowserDevice dev;
String name;
String attname;
//==========================================================
BrowserAttribute(String name, BrowserDevice dev) {
this.name = name;
this.dev = dev;
this.attname = dev.name + "/" + name;
}
//==========================================================
public String toString() {
return name;
}
}
//===============================================================
/**
* Renderer Class
*/
//===============================================================
private class TangoRenderer extends DefaultTreeCellRenderer {
private ImageIcon tangoIcon;
private ImageIcon serv_icon;
private ImageIcon dev_icon;
private ImageIcon attr_icon;
private ImageIcon class_icon;
private Font[] fonts;
private final int TITLE = 0;
private final int DEVICE = 1;
private final int ATTR = 2;
//===============================================================
//===============================================================
public TangoRenderer() {
tangoIcon = Utils.getResizedIcon(Utils.getTangoTansparIcon(), 0.15);
serv_icon = Utils.getServerIcon();
dev_icon = Utils.getDeviceIcon();
attr_icon = Utils.getLeafIcon();
class_icon = Utils.getClassIcon();
fonts = new Font[3];
fonts[TITLE] = new Font("courrier", Font.BOLD, 18);
// width fixed font
fonts[DEVICE] = new Font("Monospaced", Font.BOLD, 12);
fonts[ATTR] = new Font("Monospaced", Font.PLAIN, 12);
}
//===============================================================
//===============================================================
public Component getTreeCellRendererComponent(
JTree tree,
Object obj,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(
tree, obj, sel,
expanded, leaf, row,
hasFocus);
if (row == 0) {
// ROOT
setFont(fonts[TITLE]);
setIcon(tangoIcon);
} else {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) obj;
if (node.getUserObject() instanceof String) {
setFont(fonts[TITLE]);
if (obj.toString().equals("Servers"))
setIcon(serv_icon);
else if (obj.toString().equals("Devices"))
setIcon(dev_icon);
else if (obj.toString().equals("Aliases"))
setIcon(dev_icon);
else {
setFont(fonts[DEVICE]);
setIcon(class_icon);
}
} else if (node.getUserObject() instanceof BrowserAttribute)//getAttribute(node)!=null)
{
setFont(fonts[ATTR]);
setIcon(attr_icon);
} else if (node.getUserObject() instanceof BrowserDevice) {
setFont(fonts[DEVICE]);
setIcon(dev_icon);
} else if (node.getUserObject() instanceof BrowserServer) {
setFont(fonts[DEVICE]);
setIcon(serv_icon);
}
}
return this;
}
}// End of Renderer Class
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy