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

jive3.TreePanelHostCollection Maven / Gradle / Ivy

The newest version!
package jive3;

import fr.esrf.Tango.DevFailed;
import fr.esrf.Tango.DevState;
import fr.esrf.Tango.DevVarLongStringArray;
import fr.esrf.TangoApi.*;
import fr.esrf.tangoatk.widget.util.ATKGraphicsUtils;
import jive.DevWizard;
import jive.JiveUtils;
import jive.ServerDlg;
import jive.ThreadDlg;

import javax.swing.*;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.StringTokenizer;

/**
 * A panel for selecting host collection (Astor display)
 */
public class TreePanelHostCollection extends TreePanel {

  public static int NB_LEVELS = 5;

  public TreePanelHostCollection() {

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

  }

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

  String getLevelStr(int level) {
    if(level==0)
      return "Not Controlled";
    else
      return "Level " + Integer.toString(level);
  }


  DevState[] getServerState(DeviceProxy starter,String[] serverNames) throws DevFailed {

    DevState[] retStates = new DevState[serverNames.length];
    for(int i=0;i=0) {
        if(st.equalsIgnoreCase("FAULT")) {
          retStates[idx] = DevState.OFF;
        } else {
          retStates[idx] = DevState.ON;
        }
      }
    }

    return retStates;

  }

  String getHostStateString(DevState state) {

    switch(state.value()) {
      case DevState._ON:
        return "All servers are running";
      case DevState._OFF:
        return "All servers are stopped";
      case DevState._ALARM:
        return "At least one of the servers is stopped";
      case DevState._MOVING:
        return "At least one of the servers is not responding";
      case DevState._FAULT:
        return "FAULT";
      default:
        return "Not responding";
    }

  }

  String getServerStateString(DevState state) {

    if(state==DevState.OFF)
      return "Stopped";
    else if(state==DevState.ON)
      return "Running";
    else
      return "Unknown";

  }

  boolean allServersOff(DevState[] allStates) {

    boolean off = true;
    int i=0;
    while(off && i0 ) {

        JiveUtils.sleep(1000);
        srvState = getServerState(starter,serverNames);
        nbTry--;
        if( !allServersOff(srvState) && nbTry==0 ) {
          int ok = JOptionPane.showConfirmDialog(null,"Some servers are still running.\nSend Hard kill ?","Question",JOptionPane.YES_NO_OPTION);
          if( ok==JOptionPane.YES_OPTION ) {
            for(int i=0;i collection = new ArrayList();
      ArrayList lastCollection = new ArrayList();
      String lastCols[] = new String[0];

      DbDatum datum = db.get_property("Astor", "LastCollections");
      if (!datum.is_empty())
        lastCols = datum.extractStringArray();

      for (int i = 0; i < arg.svalue.length; i++) {
        if (JiveUtils.isInsideArray(arg.svalue[i], lastCols) < 0)
          collection.add(arg.svalue[i]);
        else
          lastCollection.add(arg.svalue[i]);
      }

      Collections.sort(collection);
      Collections.sort(lastCollection);
      collection.addAll(lastCollection);

      for (int i = 0; i < collection.size(); i++)
        add(new CollectionNode(collection.get(i)));

    }

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

    void execAction(int number,boolean allowMultiple) {
    }

  }

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

  class CollectionNode extends TangoNode {

    private String collection;

    CollectionNode(String collection) {
      this.collection = collection;
    }

    void populateNode() throws DevFailed {

      // Get host collection list
      DeviceData argin = new DeviceData();
      String request = "select distinct device from property_device where device like '" +
              JiveUtils.getStarterDeviceHeader() + "%' and name='HostCollection' and value='" + collection + "'";
      argin.insert(request);
      DeviceData argout = db.command_inout("DbMySqlSelect", argin);
      DevVarLongStringArray arg = argout.extractLongStringArray();

      for (int i = 0; i < arg.svalue.length; i++) {
        String s = arg.svalue[i];
        add(new HostNode(collection,s.substring(s.lastIndexOf('/') + 1)));
      }

    }

    public String getValue() {

      StringBuffer retStr = new StringBuffer();
      int count = getChildCount();
      for(int i=0;i allHS = new ArrayList();

      for(int level:allLevels) {
        ArrayList servers = new ArrayList();
        for(int i=0;i0 && !arg[i].toLowerCase().contains("starter")) allHS.add(arg[i]);
        }
        if(servers.size()>0)
          add(new LevelNode(collection,host,level,servers));
      }

      allHostServers = new String[allHS.size()];
      for(int i=0;i0) {
        result.append("");
        result.append(hostInfo);
        result.append("\n\n");
      }

      int count = getChildCount();
      for(int i=0;i"+l.toString()+"\n");
        result.append("
\n"); result.append(l.getValue(true)); result.append("\n"); } return result.toString(); } public String getDisplayValue() { if(hostUsage.length()>0) return toString() + " (" + hostUsage + ")"; else return toString(); } public String toString() { return host; } ImageIcon getIcon() { return TangoNodeRenderer.hostsmallicon; } Action[] getAction() { return new Action[] { TreePanel.getAction(ACTION_START_HOST), TreePanel.getAction(ACTION_STOP_HOST), TreePanel.getAction(ACTION_CH_HOST_USAGE), TreePanel.getAction(ACTION_GO_TO_STATER), TreePanel.getAction(ACTION_NEW_SERVERS), TreePanel.getAction(ACTION_TERMINAL), TreePanel.getAction(ACTION_UNEXPORT_HOST) }; } void execAction(int actionNumber,boolean multipleCall) { int ok; switch (actionNumber) { // ---------------------------------------------------------------------------- case ACTION_START_HOST: ok = JOptionPane.showConfirmDialog(invoker, "Start all servers on " + host + " ?", "Confirmation", JOptionPane.YES_NO_OPTION); if (ok == JOptionPane.YES_OPTION) { try { startServers(starter, allHostServers); } catch (DevFailed e) { JiveUtils.showTangoError(e); } } break; // ---------------------------------------------------------------------------- case ACTION_STOP_HOST: ok = JOptionPane.showConfirmDialog(invoker, "Stop all servers on " + host + "?", "Confirmation", JOptionPane.YES_NO_OPTION); if (ok == JOptionPane.YES_OPTION) { try { stopServers(starter, allHostServers); refreshValues(); } catch (DevFailed e) { JiveUtils.showTangoError(e); } } break; // ---------------------------------------------------------------------------- case ACTION_CH_HOST_USAGE: String newUsage = JOptionPane.showInputDialog(invoker,"Host Usage",hostUsage); if (newUsage != null) { try { DbDatum datum = new DbDatum("HostUsage",newUsage); db.put_device_property(starterName,new DbDatum[]{datum}); refresh(); } catch (DevFailed e) { JiveUtils.showTangoError(e); } } break; // ---------------------------------------------------------------------------- case ACTION_GO_TO_STATER: invoker.goToServerNode("Starter/"+host); break; // ---------------------------------------------------------------------------- case ACTION_NEW_SERVERS: StartServerDlg dlg = new StartServerDlg(db,host,starter,invoker); try { dlg.setServerList(db.get_server_list()); ATKGraphicsUtils.centerFrameOnScreen(dlg); dlg.setVisible(true); } catch (DevFailed e) { JiveUtils.showTangoError(e); } break; // ---------------------------------------------------------------------------- case ACTION_TERMINAL: JSSHTerminal.MainPanel terminal; String defaultUser = null; String defaultPassword = null; try { DbDatum dd = db.get_property("Astor","RloginUser"); if(!dd.is_empty()) defaultUser = dd.extractString(); dd = db.get_property("Astor","RloginPassword"); if(!dd.is_empty()) defaultPassword = dd.extractString(); } catch (DevFailed e) {} if(defaultUser!=null) { terminal = new JSSHTerminal.MainPanel(host,defaultUser,defaultPassword,80,24,500); terminal.setX11Forwarding(true); terminal.setExitOnClose(false); ATKGraphicsUtils.centerFrameOnScreen(terminal); terminal.setVisible(true); } else { JiveUtils.showJiveError("No username !\nAStor/RloginUser free property not defined."); } break; // ---------------------------------------------------------------------------- case ACTION_UNEXPORT_HOST: try { DeviceData argin = new DeviceData(); argin.insert(host); DeviceData argout = db.command_inout("DbGetHostServersInfo", argin); String[] arg = argout.extractStringArray(); ok = JOptionPane.showConfirmDialog(invoker, "Unexport all devices on " + host + " (" + arg.length/3 + " servers)?", "Confirmation", JOptionPane.YES_NO_OPTION); if (ok == JOptionPane.YES_OPTION) { for (int i = 0; i < arg.length; i += 3) { String srvName = arg[i]; db.unexport_server(srvName); } refreshValues(); } } catch (DevFailed e) { JiveUtils.showTangoError(e); } break; } } } // --------------------------------------------------------------- class LevelNode extends TangoNode { private String collection; private String host; private int level; private String[] allServers; LevelNode(String collection,String host,int level,ArrayList servers) { this.host = host; this.collection = collection; this.level = level; allServers = new String[servers.size()]; for(int i=0;i " + e.errors[i].desc + "\n"; result += bStr + "Reason -> " + e.errors[i].reason + "\n"; result += bStr + "Origin -> " + e.errors[i].origin + "\n"; } } return result; } String getValue() { return getValue(false); } ImageIcon getIcon() { return TangoNodeRenderer.levelicon; } Action[] getAction() { return new Action[] { TreePanel.getAction(ACTION_START_LEVEL), TreePanel.getAction(ACTION_STOP_LEVEL) }; } void execAction(int actionNumber,boolean multipleCall) { int ok; switch (actionNumber) { // ---------------------------------------------------------------------------- case ACTION_START_LEVEL: ok = JOptionPane.showConfirmDialog(invoker, "Start level " + level + " on " + host + " ?", "Confirmation", JOptionPane.YES_NO_OPTION); if (ok == JOptionPane.YES_OPTION) { try { startServers(getStarter(), allServers); } catch (DevFailed e) { JiveUtils.showTangoError(e); } } break; // ---------------------------------------------------------------------------- case ACTION_STOP_LEVEL: ok = JOptionPane.showConfirmDialog(invoker, "Stop level " + level + " on " + host + "?", "Confirmation", JOptionPane.YES_NO_OPTION); if (ok == JOptionPane.YES_OPTION) { try { stopServers(getStarter(), allServers); refreshValues(); } catch (DevFailed e) { JiveUtils.showTangoError(e); } } break; } } } // --------------------------------------------------------------- class ServerNode extends TangoNode implements IServerAction { private String collection; private String host; private int level; private String server; ServerNode(String collection,String host,int level,String server) { this.server = server; this.host = host; this.level = level; this.collection = collection; } DeviceProxy getStarter() { return ((LevelNode)getParent()).getStarter(); } void populateNode() throws DevFailed { String[] srvList = null; String[] dbList = null; int i; try { // Try to get class list through the admin device String admName = "dserver/" + server; DeviceProxy adm = new DeviceProxy(admName); DeviceData datum = adm.command_inout("QueryClass"); srvList = datum.extractStringArray(); } catch (DevFailed e) {} // Get the list from the database dbList = db.get_server_class_list(server); if(srvList!=null) { // Add actual class for (i = 0; i < srvList.length; i++) add(new ClassNode(collection,host,level,server,srvList[i])); // No add other class found in database as invalid for (i = 0; i < dbList.length; i++) { if(!JiveUtils.contains(srvList,dbList[i])) { add(new ClassNode(collection,host,level,server,dbList[i])); } } } else { // Old fashion for (i = 0; i < dbList.length; i++) add(new ClassNode(collection,host,level,server,dbList[i])); } } String getTitle() { return "Server Info"; } public String toString() { return server; } ImageIcon getIcon() { return TangoNodeRenderer.srvicon; } DevState getState() throws DevFailed { return getServerState(getStarter(),new String[]{server})[0]; } String getValue() { String result = ""; if(getStarter()==null) return result; try { DevState serverState = getState(); result = server + ": " + getServerStateString(serverState) + "\n"; result += "-- Log ------------------------------\n"; DeviceData argin = new DeviceData(); argin.insert(server); DeviceData argout = getStarter().command_inout("DevReadLog",argin); result += argout.extractString(); } catch (DevFailed e) { for (int i = 0; i < e.errors.length; i++) { result += "Desc -> " + e.errors[i].desc + "\n"; result += "Reason -> " + e.errors[i].reason + "\n"; result += "Origin -> " + e.errors[i].origin + "\n"; } } return result; } Action[] getAction() { if (JiveUtils.readOnly) return new Action[0]; else return new Action[]{ TreePanel.getAction(ACTION_DELETE), TreePanel.getAction(ACTION_ADDCLASS), TreePanel.getAction(ACTION_TESTADMIN), TreePanel.getAction(ACTION_SAVESERVER), TreePanel.getAction(ACTION_CLASSWIZ), TreePanel.getAction(ACTION_UNEXPORT), TreePanel.getAction(ACTION_DEV_DEPEND), TreePanel.getAction(ACTION_THREAD_POLL), TreePanel.getAction(ACTION_MOVE_SERVER), TreePanel.getAction(ACTION_RESTART_SERVER), TreePanel.getAction(ACTION_START_SERVER), TreePanel.getAction(ACTION_STOP_SERVER), TreePanel.getAction(ACTION_CH_LEVEL) }; } void execAction(int actionNumber,boolean multipleCall) throws IOException { int ok; switch(actionNumber) { // ---------------------------------------------------------------------------- case ACTION_DELETE: if(multipleCall) { try { db.delete_server(server); } catch (DevFailed e) { throw new IOException(server + ":" + e.errors[0].desc); } } else { ok = JOptionPane.showConfirmDialog(invoker, "Delete server " + server + " ?", "Confirm delete", JOptionPane.YES_NO_OPTION); if (ok == JOptionPane.YES_OPTION) { try { db.delete_server(server); } catch (DevFailed e) { JiveUtils.showTangoError(e); } refresh(); selectHost(collection,host); } } break; // ---------------------------------------------------------------------------- case ACTION_ADDCLASS: ServerDlg sdlg = new ServerDlg(this); sdlg.setClassList(invoker.getClassTreePanel().getClassList()); sdlg.setValidFields(false, true); sdlg.setDefaults(server, ""); ATKGraphicsUtils.centerFrame(invoker.innerPanel, sdlg); sdlg.setVisible(true); break; // ---------------------------------------------------------------------------- case ACTION_TESTADMIN: testDevice("dserver/" + server); break; // ---------------------------------------------------------------------------- case ACTION_SAVESERVER: if(multipleCall) { saveServerData(TreePanel.globalResFile,server); } else { FileWriter resFile; File file = TreePanel.getSaveFile(invoker); if( file!=null ) { try { resFile = new FileWriter(file.getAbsolutePath()); Date date = new Date(System.currentTimeMillis()); resFile.write("#\n# Resource backup , created " + date + "\n#\n\n"); saveServerData(resFile,server); resFile.close(); } catch (IOException e) { JiveUtils.showJiveError("Failed to create resource file !\n" + e.getMessage()); } } } break; // ---------------------------------------------------------------------------- case TreePanel.ACTION_CLASSWIZ: DevWizard cwdlg = new DevWizard(invoker); cwdlg.showClassesWizard(server); refresh(); break; // ---------------------------------------------------------------------------- case TreePanel.ACTION_UNEXPORT: ok = JOptionPane.showConfirmDialog(invoker, "This will unexport all devices of " + server + "\n Do you want to continue ?", "Confirm unexport device", JOptionPane.YES_NO_OPTION); if (ok == JOptionPane.YES_OPTION) { try { //System.out.println(" Unexport device of" + srvName); db.unexport_server(server); } catch (DevFailed e) { JiveUtils.showTangoError(e); } } break; // ---------------------------------------------------------------------------- case ACTION_DEV_DEPEND: launchDevDepend(server); break; // ---------------------------------------------------------------------------- case ACTION_THREAD_POLL: launchPollingThreadsManager(server); break; // ---------------------------------------------------------------------------- case ACTION_MOVE_SERVER: // Rename a server String newSName = JOptionPane.showInputDialog(null,"Rename server",server); if(newSName==null) return; try { db.rename_server(server,newSName); refresh(); selectServer(collection, host, level, newSName); } catch (DevFailed e) { JiveUtils.showTangoError(e); } break; // ---------------------------------------------------------------------------- case ACTION_RESTART_SERVER: // Restart a controlled server try { if(getStarter()!=null) { stopServer(getStarter(), server); startServer(getStarter(), server); } } catch (DevFailed e) { JiveUtils.showTangoError(e); } break; // ---------------------------------------------------------------------------- case ACTION_START_SERVER: // Start a controlled server try { if(getStarter()!=null) startServer(getStarter(), server); } catch (DevFailed e) { JiveUtils.showTangoError(e); } break; // ---------------------------------------------------------------------------- case ACTION_STOP_SERVER: // Stop a controlled server try { if(getStarter()!=null) stopServer(getStarter(), server); } catch (DevFailed e) { JiveUtils.showTangoError(e); } refreshValues(); break; // ---------------------------------------------------------------------------- case ACTION_CH_LEVEL: DbServer dbs; DbServInfo info = null; try { dbs = new DbServer(server); info = dbs.get_info(); } catch (DevFailed e) { JiveUtils.showTangoError(e); return; } ServerInfoDlg dlg = new ServerInfoDlg(invoker); if (dlg.showDialog(info) == ServerInfoDlg.RET_OK) { try { info = dlg.getSelection(); if (info != null) { info.host = host; if (info.startup_level == 0) info.controlled = false; dbs.put_info(info); refresh(); selectServer(collection, host, info.startup_level, server); } else { // Check if Server is stopped if (getState() == DevState.ON) { JiveUtils.showJiveError("Stop " + server + " Server before !"); return; } // Remove Server info in database dbs.put_info(new DbServInfo(server, host, false, 0)); // Register devices on empty host and un export. String[] deviceName = dbs.get_device_class_list(); for (int i = 0; i < deviceName.length; i += 2) { db.export_device(new DbDevExportInfo(deviceName[i], "", "", "")); db.unexport_device(deviceName[i]); } refresh(); selectHost(collection, host); } } catch (DevFailed e) { JiveUtils.showTangoError(e); } } break; } } // IServerAction (Call by ServerDlg) public void doJob(String server, String classname, String[] devices) { // Add devices try { for (int i = 0; i < devices.length; i++) db.add_device(devices[i], classname, server); } catch (DevFailed e) { JiveUtils.showTangoError(e); } refresh(); selectClass(collection,host,level,server,classname); } } // --------------------------------------------------------------- class ClassNode extends TangoNode implements IServerAction { private String collection; private String host; private int level; private String server; private String className; private String[] devList = new String[0]; ClassNode(String collection,String host,int level,String server,String className) { this.collection = collection; this.host = host; this.level = level; this.server = server; this.className = className; try { devList = db.get_device_name(server , className); } catch (DevFailed e) {} } void populateNode() throws DevFailed { for (int i = 0; i < devList.length; i++) add(new DeviceServerNode(collection,host,level,server,className,devList[i])); } public boolean isLeaf() { return devList.length == 0; } ImageIcon getIcon() { if(devList.length==0) return TangoNodeRenderer.uclassicon; else return TangoNodeRenderer.classicon; } public String toString() { return className; } Action[] getAction() { if(JiveUtils.readOnly) return new Action[0]; else return new Action[]{ TreePanel.getAction(ACTION_RENAME), TreePanel.getAction(ACTION_DELETE), TreePanel.getAction(ACTION_ADDDEVICE), TreePanel.getAction(ACTION_DEVICESWIZ) }; } void execAction(int actionNumber,boolean multipleCall) throws IOException { switch(actionNumber) { // ---------------------------------------------------------------------------- case ACTION_RENAME: // Rename a class String newName = JOptionPane.showInputDialog(null,"Rename class",className); if(newName==null) return; if(searchNode((TangoNode)getParent(),newName)!=null) { JiveUtils.showJiveError("Name already exists."); return; } for(int i=0;i 0) { DbDatum[] data = db.get_device_property(devName, propList); db.put_device_property(nDevName, data); } // Clone attributes properties try { String[] attList = db.get_device_attribute_list(devName); if (attList.length > 0) { DbAttribute[] adata = db.get_device_attribute_property(devName, attList); db.put_device_attribute_property(nDevName, adata); } } catch (DevFailed e3) { JiveUtils.showJiveError("Failed to copy attribute properties of " + devName + "\n" + e3.errors[0].desc); } } // Remove the old device if(isAlive) JiveUtils.showJiveWarning("The old device " + devName + " is still alive and should be removed by hand."); else db.delete_device(devName); } catch (DevFailed e4) { JiveUtils.showTangoError(e4); } } return success; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy