
jive3.TreePanelDevice Maven / Gradle / Ivy
The newest version!
package jive3;
import fr.esrf.Tango.DevFailed;
import fr.esrf.Tango.DevVarLongStringArray;
import fr.esrf.TangoApi.DeviceProxy;
import fr.esrf.TangoApi.DeviceData;
import fr.esrf.TangoApi.DbDevImportInfo;
import javax.swing.*;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.io.IOException;
import jive.DevWizard;
import jive.JiveUtils;
/**
* A panel for selecting tango devices
*/
public class TreePanelDevice extends TreePanel {
// Filtering stuff
String deviceFilterString="*/*/*";
String domainFilterString="*";
String familyFilterString="*";
String memberFilterString="*";
public TreePanelDevice() {
this.self = this;
setLayout(new BorderLayout());
}
public boolean isDomain(String domain) {
TangoNode domainNode = searchNode(root,domain);
return domainNode!=null;
}
public TangoNode selectDevice(String devName) {
int bslash = devName.indexOf('/');
int lslash = devName.lastIndexOf('/');
String domain = devName.substring(0,bslash);
String family = devName.substring(bslash+1,lslash);
String member = devName.substring(lslash+1);
// Search server
TangoNode domainNode = searchNode(root,domain);
if(domainNode==null) return null;
TangoNode familyNode = searchNode(domainNode,family);
if(familyNode==null) return null;
TangoNode memberNode = searchNode(familyNode,member);
if(memberNode==null) return null;
TreePath selPath = new TreePath(root);
selPath = selPath.pathByAddingChild(domainNode);
selPath = selPath.pathByAddingChild(familyNode);
selPath = selPath.pathByAddingChild(memberNode);
tree.setSelectionPath(selPath);
return memberNode;
}
public TangoNode createRoot() {
return new RootNode(this);
}
public void applyFilter(String filter) {
String[] filters = filter.split("/");
if(filters.length!=3) {
JOptionPane.showMessageDialog(invoker,"Invalid device filter\n3 fields expected: domain/family/member");
return;
}
deviceFilterString = filter;
domainFilterString = filters[0];
familyFilterString = filters[1];
memberFilterString = filters[2];
}
public String getFilter() {
return deviceFilterString;
}
// ---------------------------------------------------------------
class RootNode extends TangoNode {
RootNode(TreePanel parentPanel) {
this.parentPanel = parentPanel;
}
void populateNode() throws DevFailed {
if( domainFilterString.equals("*") &&
familyFilterString.equals("*") &&
memberFilterString.equals("*") ) {
// No filtering
String[] list = db.get_device_domain(domainFilterString);
for (int i = 0; i < list.length; i++)
add(new DomainNode(list[i],parentPanel));
} else {
// Filtering
String nameFilter = domainFilterString+"/"+familyFilterString+"/"+memberFilterString;
String nameFilterSQL = parentPanel.replaceWildcard(nameFilter);
DeviceData argin = new DeviceData();
String request = "select distinct domain from device where name LIKE '" + nameFilterSQL +
"' order by domain";
argin.insert(request);
DeviceData argout = db.command_inout("DbMySqlSelect",argin);
DevVarLongStringArray arg = argout.extractLongStringArray();
for(int i=0;i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy