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

jive3.TreePanelClass Maven / Gradle / Ivy

The newest version!
package jive3;

import fr.esrf.Tango.DevFailed;

import javax.swing.*;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import fr.esrf.Tango.DevVarLongStringArray;
import fr.esrf.TangoApi.*;
import jive.JiveUtils;


/**
 * A panel for selecting tango classes
 */
public class TreePanelClass extends TreePanel {

  // Filtering stuff
  String  classFilterString="*";
  Pattern classPattern=null;
  String[] classList;

  public TreePanelClass() {

    this.self = this;
    setLayout(new BorderLayout());

  }

  public TangoNode createRoot() {
    return new RootNode(this);
  }

  void addAttribute(TangoNode attNode,String className,String attName) {
    if(searchNode(attNode,attName)!=null) {
      JOptionPane.showMessageDialog(null,"Attribute already exists","Error",JOptionPane.ERROR_MESSAGE);
      return;
    }
    treeModel.insertNodeInto(new TaskClassAttributePropertyNode(self,db,className,attName), attNode, 0);
  }

  public void applyFilter(String filter) {

    classFilterString = filter;

    if( filter.equals("*") ) {
      classPattern = null;
    } else if (filter.length()==0) {
      classPattern = null;
    } else {
      try {
        String f = filterToRegExp(classFilterString);
        classPattern = Pattern.compile(f);
      } catch (PatternSyntaxException e) {
        JOptionPane.showMessageDialog(invoker,e.getMessage());
      }
    }

  }

  public String getFilter() {
    return classFilterString;
  }

  public String[] getClassList() {
    return classList;
  }

  public TangoNode selectClass(String className) {

    // Search class
    TangoNode classNode = searchNode(root,className);
    if(classNode==null) return null;
    TreePath selPath = new TreePath(root);
    selPath = selPath.pathByAddingChild(classNode);
    tree.setSelectionPath(selPath);
    return classNode;

  }

  // ---------------------------------------------------------------

  class RootNode extends TangoNode {

    RootNode(TreePanel parentPanel) {
      this.parentPanel = parentPanel;
    }

    void populateNode() throws DevFailed {
      classList = db.get_class_list("*");
      for (int i = 0; i < classList.length; i++) {
        if( classPattern!=null ) {
          Matcher matcher =  classPattern.matcher(classList[i].toLowerCase());
          if( matcher.find() && matcher.start()==0 && matcher.end()==classList[i].length() ) {
            add(new ClassNode(classList[i],parentPanel));
          }
        } else {
          add(new ClassNode(classList[i],parentPanel));
        }
      }
    }

    public String toString() {
      return "Class:";
    }

    void execAction(int number,boolean multipleCall) {
    }

  }

  // ---------------------------------------------------------------

  class ClassNode extends TangoNode {

    private String className;

    ClassNode(String className,TreePanel parentPanel) { this.className = className; this.parentPanel =parentPanel; }

    Action[] getAction() {
      if(JiveUtils.readOnly)
        return new Action[0];
      else
        return new Action[] {
            TreePanel.getAction(ACTION_SAVE_PROP)
        };
    }

    void execAction(int actionNumber,boolean multipleCall) {

      switch(actionNumber) {

        // ----------------------------------------------------------------------------
        case ACTION_SAVE_PROP:
          try {
            DbFileWriter.SaveAllClassProperties(className);
          } catch (DevFailed e) {
            JiveUtils.showTangoError(e);
          } catch (IOException e2) {
            JiveUtils.showJiveError(e2.getMessage());
          }
          break;

      }

    }

    void populateNode() throws DevFailed {
      add(new TaskClassPropertyNode(self,db,className));
      add(new ClassAttributeNode(className));
      add(new DevicesNode(className,parentPanel));
    }

    public String toString() {
      return className;
    }

  }

  // ---------------------------------------------------------------

  class ClassAttributeNode extends TangoNode {

    private String className;

    ClassAttributeNode(String className) {
      this.className = className;
    }

    void populateNode() throws DevFailed {
      String[] list = db.get_class_attribute_list(getParent().toString(), "*");
      for(int i=0;i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy