All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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