Пример #1
0
  static String replaceUrlSymbol(JopSession session, String url) {
    Gdh gdh = session.getGdh();

    CdhrObjid webConfig = gdh.getClassList(Pwrb.cClass_WebBrowserConfig);
    if (webConfig.evenSts()) return url;

    CdhrString webName = gdh.objidToName(webConfig.objid, Cdh.mName_volumeStrict);
    if (webConfig.evenSts()) return url;

    for (int i = 0; i < 10; i++) {
      String attr = webName.str + ".URL_Symbols[" + i + "]";
      CdhrString attrValue = gdh.getObjectInfoString(attr);
      if (attrValue.evenSts()) return url;

      if (attrValue.str.equals("")) continue;

      StringTokenizer token = new StringTokenizer(attrValue.str);
      String symbol = "$" + token.nextToken();
      if (!token.hasMoreTokens()) continue;

      String value = token.nextToken();

      int idx = url.lastIndexOf(symbol);
      while (idx != -1) {
        url = url.substring(0, idx) + value + url.substring(idx + symbol.length());
        idx = url.lastIndexOf(symbol);
      }
    }
    return url;
  }
Пример #2
0
  public static Image getImage(JopSession session, String image) {
    String fullName;
    if (session.getRoot() instanceof JopApplet) {
      String name;
      try {
        URL current = ((JApplet) session.getRoot()).getCodeBase();
        String current_str = current.toString();
        int idx1 = current_str.lastIndexOf('/');
        int idx2 = current_str.lastIndexOf(':');
        int idx = idx1;
        if (idx2 > idx) idx = idx2;
        String path = current_str.substring(0, idx + 1);
        String url_str;

        //        String url_str = new String( path + name);
        if (image.substring(0, 5).compareTo("jpwr/") == 0) {
          idx = image.lastIndexOf('/');
          name = image.substring(5, idx);

          url_str = new String("jar:" + path + "pwr_" + name + ".jar!/" + image);
        } else {
          idx = image.lastIndexOf('/');
          if (idx == -1) name = new String(image);
          else name = image.substring(idx + 1);

          url_str = new String("jar:" + path + "pwrp_" + systemName + "_web.jar!/" + name);
        }
        System.out.println("Opening URL: " + url_str);
        URL url = new URL(url_str);
        return Toolkit.getDefaultToolkit().getImage(url);
      } catch (MalformedURLException e) {
      }
      return null;
    } else {
      // Add default directory /pwrp/img
      System.out.println("Image: " + image);

      //      int idx = image.lastIndexOf('/');
      //      if ( idx == -1)
      //  fullName = new String("/pwrp/img/" + image);
      // else
      fullName = new String(image);
      //      return Toolkit.getDefaultToolkit().getImage( fullName);

      try {
        String name;
        String url_str;
        int idx;
        String path = new String("file://");
        if (image.substring(0, 5).compareTo("jpwr/") == 0) {
          idx = image.lastIndexOf('/');
          name = image.substring(5, idx);

          url_str = new String("$pwr_lib/pwr_" + name + ".jar");
          url_str = Gdh.translateFilename(url_str);
          url_str = new String("jar:" + path + url_str + "!/" + image);
        } else {
          idx = image.lastIndexOf('/');
          if (idx == -1) name = new String(image);
          else name = image.substring(idx + 1);

          url_str = new String("$pwrp_lib/pwrp_" + systemName + ".jar");
          System.out.println("java: " + url_str);
          url_str = Gdh.translateFilename(url_str);
          url_str = new String("jar:" + path + url_str + "!/" + name);
        }
        System.out.println("Opening URL: " + url_str);
        URL url = new URL(url_str);
        return Toolkit.getDefaultToolkit().getImage(url);
      } catch (MalformedURLException e) {
      }
    }
    return null;
  }
Пример #3
0
  static int command(JopSession session, String cmd) {
    boolean local_cmd = false;
    Object root = session.getRoot();
    Gdh gdh = session.getEngine().gdh;

    System.out.println("JopSpider command : " + cmd);
    if (root instanceof JopApplet) {
      if (((JopApplet) root).engine.isInstance())
        cmd = RtUtilities.strReplace(cmd, "$object", ((JopApplet) root).engine.getInstance());
    }

    Cli cli = new Cli(cliTable);
    String command = cli.parse(cmd);
    if (cli.oddSts()) {
      System.out.println("JopSpider1 : " + command);
      if (command.equals("OPEN")) {
        if (cli.qualifierFound("cli_arg1")) {

          String jgraph = "JGRAPH";
          String graph = "GRAPH";
          String url = "URL";
          String trend = "TREND";
          String fast = "FAST";
          String cli_arg1 = cli.getQualValue("cli_arg1").toUpperCase();
          if (jgraph.length() >= cli_arg1.length()
              && jgraph.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "OPEN JGRAPH"

            boolean newFrame = cli.qualifierFound("/NEW");
            boolean scrollbar = cli.qualifierFound("/SCROLLBAR");

            if (!cli.qualifierFound("cli_arg2")) {
              System.out.println("Syntax error");
              return 0;
            }
            String frameName = cli.getQualValue("cli_arg2");
            String instance = cli.getQualValue("/INSTANCE");

            if (session.isOpWindowApplet()) {
              frameName = frameName.substring(0, 1).toUpperCase() + frameName.substring(1);
              System.out.println("Open frame " + frameName);
              session.openGraphFrame(frameName, instance, scrollbar, false);
            } else if (session.isApplet()) {
              System.out.println("Loading applet \"" + frameName + "\"");
              openURL(session, frameName, newFrame, null, null);
              local_cmd = true;
            } else {
              System.out.println("Loading frame \"" + frameName + "\"");
              try {
                loadFrame(session, frameName, instance, scrollbar);
              } catch (ClassNotFoundException e) {
              }
              local_cmd = true;
            }
          } else if (graph.length() >= cli_arg1.length()
              && graph.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "OPEN GRAPH"
            if (root instanceof JopApplet) {
              System.out.println("open graph for JopApplet");

              boolean newFrame = cli.qualifierFound("/NEW");
              boolean scrollbar = cli.qualifierFound("/SCROLLBAR");

              if (cli.qualifierFound("/OBJECT")) {
                String objectValue = cli.getQualValue("/OBJECT");
                String objectName;
                String appletName;
                String instance = null;

                // Replace * by node object
                if (objectValue.charAt(0) == '*') {
                  CdhrObjid cdhr_node = gdh.getNodeObject(0);
                  if (cdhr_node.evenSts()) return 0;
                  CdhrString cdhr_nodestr =
                      gdh.objidToName(cdhr_node.objid, Cdh.mName_volumeStrict);
                  objectName = cdhr_nodestr.str + objectValue.substring(1);
                } else objectName = objectValue;

                String attrName = objectName + ".Action";
                CdhrString cdhr = gdh.getObjectInfoString(attrName);
                if (cdhr.evenSts()) {
                  System.out.println("Object name error");
                  return 0;
                }
                int idx = cdhr.str.lastIndexOf(".pwg");
                if (idx != -1) {
                  // appletName = cdhr.str.substring(0, idx);
                  appletName = cdhr.str; // atest
                } else {
                  idx = cdhr.str.lastIndexOf(".class");
                  if (idx != -1) appletName = cdhr.str.substring(0, idx);
                  else {
                    // This is a command
                    return command(session, cdhr.str);
                  }
                }

                attrName = objectName + ".Object";
                cdhr = gdh.getObjectInfoString(attrName);
                if (cdhr.oddSts() && !cdhr.str.equals("")) instance = cdhr.str;

                if (session.isOpWindowApplet()) {
                  // atest  appletName = appletName.substring(0,1).toUpperCase() +
                  //       appletName.substring(1);
                  System.out.println("Open frame " + appletName);
                  session.openGraphFrame(appletName, instance, false, false);
                } else {
                  System.out.println("Loading applet \"" + appletName + "\"");
                  openURL(session, appletName, newFrame, null, null);
                }
                local_cmd = true;
              } else {
                if (true /* session.isOpWindowApplet() */) {
                  String frameName = null;
                  String instanceValue = null;
                  boolean classGraph = false;

                  if (cli.qualifierFound("/INSTANCE")) {
                    instanceValue = cli.getQualValue("/INSTANCE");
                    classGraph = cli.qualifierFound("/CLASSGRAPH");
                    boolean parent = cli.qualifierFound("/PARENT");
                    if (parent) {
                      int idx = instanceValue.lastIndexOf('.');
                      if (idx != -1 && idx != 0) instanceValue = instanceValue.substring(0, idx);
                      System.out.println("open graph /parent: " + instanceValue);
                    }
                  }
                  if (!classGraph) {
                    if (!cli.qualifierFound("cli_arg2")) {
                      System.out.println("Syntax error");
                      return 0;
                    }
                    frameName = cli.getQualValue("cli_arg2").toLowerCase();

                    frameName = frameName.substring(0, 1).toUpperCase() + frameName.substring(1);
                    System.out.println("Open frame " + frameName);
                  }
                  session.openGraphFrame(frameName, instanceValue, scrollbar, classGraph);
                }
                /**
                 * *********** else { String frameName = null; if ( !
                 * cli.qualifierFound("cli_arg2")) { System.out.println("Syntax error"); return 0; }
                 * frameName = cli.getQualValue("cli_arg2").toLowerCase();
                 *
                 * <p>if ( cli.qualifierFound("/INSTANCE")) { String instanceValue =
                 * cli.getQualValue("/INSTANCE").toLowerCase();
                 *
                 * <p>boolean parent = cli.qualifierFound("/PARENT"); if ( parent) { int idx =
                 * instanceValue.lastIndexOf( '.'); if ( idx != -1 && idx != 0) instanceValue =
                 * instanceValue.substring( 0, idx); System.out.println( "open graph /parent: " +
                 * instanceValue); }
                 *
                 * <p>String tempFile = frameName + "_" +
                 * instanceValue.replace('å','a').replace('ä','a').replace('ö','o'); PwrtStatus psts
                 * = gdh.createInstanceFile( "$pwrp_websrv/"+frameName+".html", tempFile+".html",
                 * instanceValue); if ( psts.evenSts()) { System.out.println("createInstanceFile
                 * error"); return 0; } frameName = tempFile; }
                 *
                 * <p>System.out.println( "Loading applet \"" + frameName + "\"");
                 *
                 * <p>openURL( session, frameName, newFrame, null, null); local_cmd = true; } *
                 */
              }
            } else {
              // Application
              boolean newFrame = cli.qualifierFound("/NEW");
              boolean scrollbar = cli.qualifierFound("/SCROLLBAR");
              String frameName = null;
              String instanceValue = null;
              boolean classGraph = false;
              if (cli.qualifierFound("/INSTANCE")) {
                instanceValue = cli.getQualValue("/INSTANCE");
                classGraph = cli.qualifierFound("/CLASSGRAPH");

                boolean parent = cli.qualifierFound("/PARENT");
                if (parent) {
                  int idx = instanceValue.lastIndexOf('.');
                  if (idx != -1 && idx != 0) instanceValue = instanceValue.substring(0, idx);
                  System.out.println("open graph /parent: " + instanceValue);
                }
              }
              if (cli.qualifierFound("/OBJECT")) {
                String objectValue = cli.getQualValue("/OBJECT");
                String objectName;
                String appletName;
                String instance = null;

                // Replace * by node object
                if (objectValue.charAt(0) == '*') {
                  CdhrObjid cdhr_node = gdh.getNodeObject(0);
                  if (cdhr_node.evenSts()) return 0;
                  CdhrString cdhr_nodestr =
                      gdh.objidToName(cdhr_node.objid, Cdh.mName_volumeStrict);
                  objectName = cdhr_nodestr.str + objectValue.substring(1);
                } else objectName = objectValue;

                String attrName = objectName + ".Action";
                CdhrString cdhr = gdh.getObjectInfoString(attrName);
                if (cdhr.evenSts()) {
                  System.out.println("Object name error");
                  return 0;
                }
                int idx = cdhr.str.lastIndexOf(".pwg");
                if (idx != -1) {
                  // appletName = cdhr.str.substring(0, idx);
                  appletName = cdhr.str; // atest
                } else {
                  idx = cdhr.str.lastIndexOf(".class");
                  if (idx != -1) appletName = cdhr.str.substring(0, idx);
                  else {
                    // This is a command
                    return command(session, cdhr.str);
                  }
                }

                attrName = objectName + ".Object";
                cdhr = gdh.getObjectInfoString(attrName);
                if (cdhr.oddSts() && !cdhr.str.equals("")) instance = cdhr.str;

                System.out.println("Open frame " + appletName);
                session.openGraphFrame(appletName, instance, false, false);
                local_cmd = true;
              }
              if (!classGraph) {
                if (cli.qualifierFound("/FILE")) {
                  frameName = cli.getQualValue("/FILE");
                  if (frameName.indexOf(".pwg") == -1) frameName = frameName + ".pwg";
                } else if (cli.qualifierFound("cli_arg2")) {
                  frameName = cli.getQualValue("cli_arg2").toLowerCase();

                  frameName = frameName.substring(0, 1).toUpperCase() + frameName.substring(1);
                } else {
                  System.out.println("Syntax error");
                  return 0;
                }

                System.out.println("Open frame " + frameName);
              }
              session.openGraphFrame(frameName, instanceValue, scrollbar, classGraph);
            }
          } else if (url.length() >= cli_arg1.length()
              && url.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "OPEN URL"
            if (root instanceof JopApplet) {
              if (cli.qualifierFound("cli_arg2")) {
                Boolean newFrame = true;
                String frameName = null;
                String urlValue = cli.getQualValue("cli_arg2");
                System.out.println("open url " + urlValue);
                if (urlValue.startsWith("pwrb_")
                    || urlValue.startsWith("pwrs_")
                    || urlValue.startsWith("nmps_")
                    || urlValue.startsWith("profibus_")
                    || urlValue.startsWith("otherio_")
                    || urlValue.startsWith("opc_")
                    || urlValue.startsWith("basecomponent_")
                    || urlValue.startsWith("abb_")
                    || urlValue.startsWith("siemens_")
                    || urlValue.startsWith("ssabox_"))
                  // Object reference manual
                  urlValue = "$pwr_doc/" + session.getLang() + "/orm/" + urlValue;

                if (cli.qualifierFound("/NAME")) {
                  frameName = cli.getQualValue("/NAME");
                  newFrame = false;
                }

                openURL(session, urlValue, newFrame, frameName, null);
              }
            }
          } else if (trend.length() >= cli_arg1.length()
              && trend.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "OPEN TREND"
            String name;

            if (cli.qualifierFound("cli_arg2")) name = cli.getQualValue("cli_arg2");
            else name = cli.getQualValue("/NAME");

            StringTokenizer tokens = new StringTokenizer(name, ",");
            int cnt = tokens.countTokens();
            String[] trendList = new String[cnt];

            for (int i = 0; i < cnt; i++) trendList[i] = tokens.nextToken();

            session.openTrend(trendList);
          } else if (fast.length() >= cli_arg1.length()
              && fast.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "OPEN FAST"
            String name;

            if (cli.qualifierFound("cli_arg2")) name = cli.getQualValue("cli_arg2");
            else name = cli.getQualValue("/NAME");

            session.openFast(name);
          } else {
            System.out.println("Unknown command");
          }
        }
      } else if (command.equals("HELP")) {
        if (root instanceof JopApplet) {
          String fileName = "xtt_help_";
          String bookmarkValue = null;

          if (cli.qualifierFound("/VERSION")) {
            openURL(session, "$pwr_doc/xtt_version_help_version.html", true, null, null);
          } else {
            if (cli.qualifierFound("/BASE"))
              // Not language dependent !! TODO
              fileName = "$pwr_doc/help/xtt_help_";

            if (cli.qualifierFound("cli_arg1"))
              fileName += cli.getQualValue("cli_arg1").toLowerCase();
            if (cli.qualifierFound("cli_arg2"))
              fileName += "_" + cli.getQualValue("cli_arg2").toLowerCase();
            if (cli.qualifierFound("cli_arg3"))
              fileName += "_" + cli.getQualValue("cli_arg3").toLowerCase();
            if (cli.qualifierFound("cli_arg4"))
              fileName += "_" + cli.getQualValue("cli_arg4").toLowerCase();

            if (fileName.startsWith("pwrb_")
                || fileName.startsWith("pwrs_")
                || fileName.startsWith("nmps_")
                || fileName.startsWith("profibus_")
                || fileName.startsWith("otherio_")
                || fileName.startsWith("opc_")
                || fileName.startsWith("basecomponent_")
                || fileName.startsWith("abb_")
                || fileName.startsWith("siemens_")
                || fileName.startsWith("ssabox_"))
              // Object reference manual
              fileName = "$pwr_doc/orm/" + fileName;

            if (cli.qualifierFound("/BOOKMARK")) bookmarkValue = cli.getQualValue("/BOOKMARK");

            System.out.println("Loading helpfile \"" + fileName + "\"");
            openURL(session, fileName, true, null, bookmarkValue);
          }
          local_cmd = true;
        }
      } else if (command.equals("SET")) {
        if (cli.qualifierFound("cli_arg1")) {

          String parameter = "PARAMETER";
          String cli_arg1 = cli.getQualValue("cli_arg1").toUpperCase();
          if (parameter.length() >= cli_arg1.length()
              && parameter.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "SET PARAMETER"
            if (root instanceof JopApplet) {
              String name;
              String value;
              PwrtStatus sts;

              local_cmd = true;
              if (cli.qualifierFound("/NAME")) name = cli.getQualValue("/NAME");
              else {
                System.out.println("Cmd: name is missing\n");
                return 0;
              }
              if (cli.qualifierFound("/VALUE")) value = cli.getQualValue("/VALUE");
              else {
                System.out.println("Cmd: value is missing\n");
                return 0;
              }
              boolean bypass = cli.qualifierFound("/BYPASS");
              if (!bypass) {
                // Need RtWrite or System to set attribute
                if (!gdh.isAuthorized(Pwr.mPrv_RtWrite | Pwr.mPrv_System)) {
                  System.out.println("No authorized");
                  return 0;
                }
              }

              // Get type of attribute
              GdhrGetAttributeChar ret = gdh.getAttributeChar(name);
              if (ret.evenSts()) return 0;

              if (ret.typeId == Pwr.eType_Float32) {
                float setValue = Float.parseFloat(value);
                sts = gdh.setObjectInfo(name, setValue);
              } else if (ret.typeId == Pwr.eType_Boolean) {
                boolean setValue = (Integer.parseInt(value, 10) != 0);
                sts = gdh.setObjectInfo(name, setValue);
              } else if (ret.typeId == Pwr.eType_Int32
                  || ret.typeId == Pwr.eType_UInt32
                  || ret.typeId == Pwr.eType_Int16
                  || ret.typeId == Pwr.eType_UInt16
                  || ret.typeId == Pwr.eType_Int8
                  || ret.typeId == Pwr.eType_UInt8
                  || ret.typeId == Pwr.eType_Mask
                  || ret.typeId == Pwr.eType_Enum) {
                int setValue = Integer.parseInt(value, 10);
                sts = gdh.setObjectInfo(name, setValue);
              } else if (ret.typeId == Pwr.eType_String) {
                sts = gdh.setObjectInfo(name, value);
              } else return 0;

              if (sts.evenSts()) System.out.println("setObjectInfoError " + sts);
            }
          }
        }
      } else if (command.equals("CHECK")) {
        if (cli.qualifierFound("cli_arg1")) {

          String methodstr = "METHOD";
          String isattributestr = "ISATTRIBUTE";
          String cli_arg1 = cli.getQualValue("cli_arg1").toUpperCase();
          if (methodstr.length() >= cli_arg1.length()
              && methodstr.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "CHECK METHOD"
            String method;
            String object;

            if (cli.qualifierFound("/METHOD")) method = cli.getQualValue("/METHOD");
            else {
              System.out.println("Cmd: Method is missing\n");
              return 0;
            }

            if (cli.qualifierFound("/OBJECT")) object = cli.getQualValue("/OBJECT");
            else {
              System.out.println("Cmd: Object is missing\n");
              return 0;
            }

            if (methObject == null || object.compareToIgnoreCase(methObject) != 0) {
              CdhrAttrRef oret = gdh.nameToAttrRef(object);
              if (oret.evenSts()) return 0;

              CdhrTypeId cret = gdh.getAttrRefTid(oret.aref);
              if (cret.evenSts()) return 0;

              methObject = object;
              methAref = oret.aref;
              methClassId = cret.typeId;
            }

            JopMethods methods =
                new JopMethods(session, methAref, methObject, methClassId, JopUtility.NO);

            boolean b = methods.callFilterMethod(method);
            System.out.println(
                "Cmd check method: " + method + " , Object: " + object + ", value: " + b);
            if (b) return 1;
            else return 0;
          } else if (isattributestr.length() >= cli_arg1.length()
              && isattributestr.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "CHECK ISATTRIBUTE"
            String method;
            String object;

            if (cli.qualifierFound("/OBJECT")) object = cli.getQualValue("/OBJECT");
            else {
              System.out.println("Cmd: Object is missing\n");
              return 0;
            }

            if (methObject == null || object.compareToIgnoreCase(methObject) != 0) {
              CdhrAttrRef oret = gdh.nameToAttrRef(object);
              if (oret.evenSts()) return 0;

              CdhrTypeId cret = gdh.getAttrRefTid(oret.aref);
              if (cret.evenSts()) return 0;

              methObject = object;
              methAref = oret.aref;
              methClassId = cret.typeId;
            }

            if ((methAref.flags & PwrtAttrRef.OBJECTATTR) != 0) return 1;
            else return 0;
          }
        }
      } else if (command.equals("CALL")) {
        if (cli.qualifierFound("cli_arg1")) {

          String parameter = "METHOD";
          String cli_arg1 = cli.getQualValue("cli_arg1").toUpperCase();
          if (parameter.length() >= cli_arg1.length()
              && parameter.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "CHECK METHOD"
            String method;
            String object;

            if (cli.qualifierFound("/METHOD")) method = cli.getQualValue("/METHOD");
            else {
              System.out.println("Cmd: Method is missing\n");
              return 0;
            }

            if (cli.qualifierFound("/OBJECT")) object = cli.getQualValue("/OBJECT");
            else {
              System.out.println("Cmd: Object is missing\n");
              return 0;
            }

            if (methObject == null || object.compareToIgnoreCase(methObject) != 0) {
              CdhrAttrRef oret = gdh.nameToAttrRef(object);
              if (oret.evenSts()) return 0;

              CdhrTypeId cret = gdh.getAttrRefTid(oret.aref);
              if (cret.evenSts()) return 0;

              methObject = object;
              methAref = oret.aref;
              methClassId = cret.typeId;
            }

            JopMethods methods =
                new JopMethods(session, methAref, methObject, methClassId, JopUtility.NO);

            methods.callMethod(method);
            System.out.println("Cmd call method: " + method + " , Object: " + object);
            return 1;
          }
        }
      } else if (command.equals("SET")) {
        if (cli.qualifierFound("cli_arg1")) {

          String parameter = "LANGUAGE";
          String cli_arg1 = cli.getQualValue("cli_arg1").toUpperCase();
          if (parameter.length() >= cli_arg1.length()
              && parameter.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "SET LANGUAGE"
            String cli_arg2;

            if (cli.qualifierFound("cli_arg2")) cli_arg2 = cli.getQualValue("cli_arg2");
            else {
              System.out.println("Cmd: Language is missing\n");
              return 0;
            }

            JopLang lng = new JopLang(session);
            lng.set(cli_arg2);
            JopLang.setDefault(lng);
            return 1;
          }
        }
      }
    } else {
      System.out.println("JopSpider: Parse error " + cli.getStsString());
      return 0;
    }

    if (!local_cmd) {
      // Send to xtt
      if (qcom != null) {
        PwrtStatus sts = qcom.put(op_qcom_qix, op_qcom_nid, cmd);
        System.out.println("Send " + cmd + "  sts: " + sts.getSts());
        if (sts.evenSts()) System.out.println("Qcom put error: " + sts.getSts());
      }
    }
    return 1;
  }
Пример #4
0
  static void command(JopSession session, String cmd) {
    boolean local_cmd = false;
    Object root = session.getRoot();
    Gdh gdh = session.getEngine().gdh;

    System.out.println("JopSpider command : " + cmd);
    if (root instanceof JopApplet) {
      if (((JopApplet) root).engine.isInstance())
        cmd = RtUtilities.strReplace(cmd, "$object", ((JopApplet) root).engine.getInstance());
    }

    Cli cli = new Cli(cliTable);
    String command = cli.parse(cmd);
    if (cli.oddSts()) {
      System.out.println("JopSpider1 : " + command);
      if (command.equals("OPEN")) {
        if (cli.qualifierFound("cli_arg1")) {

          String jgraph = "JGRAPH";
          String graph = "GRAPH";
          String url = "URL";
          String cli_arg1 = cli.getQualValue("cli_arg1").toUpperCase();
          if (jgraph.length() >= cli_arg1.length()
              && jgraph.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "OPEN JGRAPH"

            boolean newFrame = cli.qualifierFound("/NEW");
            boolean scrollbar = cli.qualifierFound("/SCROLLBAR");

            if (!cli.qualifierFound("cli_arg2")) {
              System.out.println("Syntax error");
              return;
            }
            String frameName = cli.getQualValue("cli_arg2");
            String instance = cli.getQualValue("/INSTANCE");

            if (session.isOpWindowApplet()) {
              frameName = frameName.substring(0, 1).toUpperCase() + frameName.substring(1);
              System.out.println("Open frame " + frameName);
              session.openGraphFrame(frameName, instance, scrollbar, false);
            } else if (session.isApplet()) {
              System.out.println("Loading applet \"" + frameName + "\"");
              openURL(session, frameName, newFrame, null);
              local_cmd = true;
            } else {
              System.out.println("Loading frame \"" + frameName + "\"");
              loadFrame(session, frameName, instance, scrollbar);
              local_cmd = true;
            }
          } else if (graph.length() >= cli_arg1.length()
              && graph.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "OPEN GRAPH"
            if (root instanceof JopApplet) {
              boolean newFrame = cli.qualifierFound("/NEW");
              boolean scrollbar = cli.qualifierFound("/SCROLLBAR");

              if (cli.qualifierFound("/OBJECT")) {
                String objectValue = cli.getQualValue("/OBJECT");
                String objectName;
                String appletName;
                String instance = null;

                // Replace * by node object
                if (objectValue.charAt(0) == '*') {
                  CdhrObjid cdhr_node = gdh.getNodeObject(0);
                  if (cdhr_node.evenSts()) return;
                  CdhrString cdhr_nodestr =
                      gdh.objidToName(cdhr_node.objid, Cdh.mName_volumeStrict);
                  objectName = cdhr_nodestr.str + objectValue.substring(1);
                } else objectName = objectValue;

                String attrName = objectName + ".Action";
                CdhrString cdhr = gdh.getObjectInfoString(attrName);
                if (cdhr.evenSts()) {
                  System.out.println("Object name error");
                  return;
                }
                int idx = cdhr.str.lastIndexOf(".pwg");
                if (idx != -1) appletName = cdhr.str.substring(0, idx);
                else {
                  idx = cdhr.str.lastIndexOf(".class");
                  if (idx != -1) appletName = cdhr.str.substring(0, idx);
                  else {
                    // This is a command
                    command(session, cdhr.str);
                    return;
                  }
                }

                attrName = objectName + ".Object";
                cdhr = gdh.getObjectInfoString(attrName);
                if (cdhr.oddSts() && !cdhr.str.equals("")) instance = cdhr.str;

                if (session.isOpWindowApplet()) {
                  appletName = appletName.substring(0, 1).toUpperCase() + appletName.substring(1);
                  System.out.println("Open frame " + appletName);
                  session.openGraphFrame(appletName, instance, false, false);
                } else {
                  System.out.println("Loading applet \"" + appletName + "\"");
                  openURL(session, appletName, newFrame, null);
                }
                local_cmd = true;
              } else {
                if (session.isOpWindowApplet()) {
                  String frameName = null;
                  String instanceValue = null;
                  boolean classGraph = false;
                  if (cli.qualifierFound("/INSTANCE")) {
                    instanceValue = cli.getQualValue("/INSTANCE");
                    classGraph = cli.qualifierFound("/CLASSGRAPH");
                  }
                  if (!classGraph) {
                    if (!cli.qualifierFound("cli_arg2")) {
                      System.out.println("Syntax error");
                      return;
                    }
                    frameName = cli.getQualValue("cli_arg2").toLowerCase();

                    frameName = frameName.substring(0, 1).toUpperCase() + frameName.substring(1);
                    System.out.println("Open frame " + frameName);
                  }
                  session.openGraphFrame(frameName, instanceValue, scrollbar, classGraph);
                } else {
                  String frameName = null;
                  if (!cli.qualifierFound("cli_arg2")) {
                    System.out.println("Syntax error");
                    return;
                  }
                  frameName = cli.getQualValue("cli_arg2").toLowerCase();

                  if (cli.qualifierFound("/INSTANCE")) {
                    String instanceValue = cli.getQualValue("/INSTANCE").toLowerCase();

                    String tempFile =
                        frameName
                            + "_"
                            + instanceValue.replace('å', 'a').replace('ä', 'a').replace('ö', 'o');
                    PwrtStatus psts =
                        gdh.createInstanceFile(
                            "$pwrp_websrv/" + frameName + ".html",
                            tempFile + ".html",
                            instanceValue);
                    if (psts.evenSts()) {
                      System.out.println("createInstanceFile error");
                      return;
                    }
                    frameName = tempFile;
                  }

                  System.out.println("Loading applet \"" + frameName + "\"");

                  openURL(session, frameName, newFrame, null);
                  local_cmd = true;
                }
              }
            } else {
              // Application
              boolean newFrame = cli.qualifierFound("/NEW");
              boolean scrollbar = cli.qualifierFound("/SCROLLBAR");
              String frameName = null;
              String instanceValue = null;
              boolean classGraph = false;
              if (cli.qualifierFound("/INSTANCE")) {
                instanceValue = cli.getQualValue("/INSTANCE");
                classGraph = cli.qualifierFound("/CLASSGRAPH");
              }
              if (!classGraph) {
                if (!cli.qualifierFound("cli_arg2")) {
                  System.out.println("Syntax error");
                  return;
                }
                frameName = cli.getQualValue("cli_arg2").toLowerCase();

                frameName = frameName.substring(0, 1).toUpperCase() + frameName.substring(1);
                System.out.println("Open frame " + frameName);
              }
              session.openGraphFrame(frameName, instanceValue, scrollbar, classGraph);
            }
          } else if (url.length() >= cli_arg1.length()
              && url.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "OPEN URL"
            if (root instanceof JopApplet) {
              if (cli.qualifierFound("cli_arg2")) {
                String urlValue = cli.getQualValue("cli_arg2");
                System.out.println("open url " + urlValue);
                if (urlValue.startsWith("pwrb_")
                    || urlValue.startsWith("pwrs_")
                    || urlValue.startsWith("nmps_")
                    || urlValue.startsWith("ssab_"))
                  // Object reference manual
                  urlValue = "$pwr_doc/orm/" + urlValue;

                openURL(session, urlValue, true, null);
              }
            }
          } else {
            System.out.println("Unknown command");
          }
        }
      } else if (command.equals("HELP")) {
        if (root instanceof JopApplet) {
          String fileName = "xtt_help_";
          String bookmarkValue = null;

          if (cli.qualifierFound("/VERSION")) {
            openURL(session, "$pwr_doc/xtt_version_help_version.html", true, null);
          } else {
            if (cli.qualifierFound("/BASE"))
              // Not language dependent !! TODO
              fileName = "$pwr_doc/help/xtt_help_";

            if (cli.qualifierFound("cli_arg1"))
              fileName += cli.getQualValue("cli_arg1").toLowerCase();
            if (cli.qualifierFound("cli_arg2"))
              fileName += "_" + cli.getQualValue("cli_arg2").toLowerCase();
            if (cli.qualifierFound("cli_arg3"))
              fileName += "_" + cli.getQualValue("cli_arg3").toLowerCase();
            if (cli.qualifierFound("cli_arg4"))
              fileName += "_" + cli.getQualValue("cli_arg4").toLowerCase();

            if (fileName.startsWith("pwrb_")
                || fileName.startsWith("pwrs_")
                || fileName.startsWith("nmps_")
                || fileName.startsWith("ssab_"))
              // Object reference manual
              fileName = "$pwr_doc/orm/" + fileName;

            if (cli.qualifierFound("/BOOKMARK")) bookmarkValue = cli.getQualValue("/BOOKMARK");

            System.out.println("Loading helpfile \"" + fileName + "\"");
            openURL(session, fileName, true, bookmarkValue);
          }
          local_cmd = true;
        }
      } else if (command.equals("SET")) {
        if (cli.qualifierFound("cli_arg1")) {

          String parameter = "PARAMETER";
          String cli_arg1 = cli.getQualValue("cli_arg1").toUpperCase();
          if (parameter.length() >= cli_arg1.length()
              && parameter.substring(0, cli_arg1.length()).equals(cli_arg1)) {
            // Command is "SET PARAMETER"
            if (root instanceof JopApplet) {
              String name;
              String value;
              PwrtStatus sts;

              local_cmd = true;
              if (cli.qualifierFound("/NAME")) name = cli.getQualValue("/NAME");
              else {
                System.out.println("Cmd: name is missing\n");
                return;
              }
              if (cli.qualifierFound("/VALUE")) value = cli.getQualValue("/VALUE");
              else {
                System.out.println("Cmd: value is missing\n");
                return;
              }
              boolean bypass = cli.qualifierFound("/BYPASS");
              if (!bypass) {
                // Need RtWrite or System to set attribute
                if (!gdh.isAuthorized(Pwr.mPrv_RtWrite | Pwr.mPrv_System)) {
                  System.out.println("No authorized");
                  return;
                }
              }

              // Get type of attribute
              GdhrGetAttributeChar ret = gdh.getAttributeChar(name);
              if (ret.evenSts()) return;

              if (ret.typeId == Pwr.eType_Float32) {
                float setValue = Float.parseFloat(value);
                sts = gdh.setObjectInfo(name, setValue);
              } else if (ret.typeId == Pwr.eType_Boolean) {
                boolean setValue = (Integer.parseInt(value, 10) != 0);
                sts = gdh.setObjectInfo(name, setValue);
              } else if (ret.typeId == Pwr.eType_Int32
                  || ret.typeId == Pwr.eType_UInt32
                  || ret.typeId == Pwr.eType_Int16
                  || ret.typeId == Pwr.eType_UInt16
                  || ret.typeId == Pwr.eType_Int8
                  || ret.typeId == Pwr.eType_UInt8
                  || ret.typeId == Pwr.eType_Mask
                  || ret.typeId == Pwr.eType_Enum) {
                int setValue = Integer.parseInt(value, 10);
                sts = gdh.setObjectInfo(name, setValue);
              } else if (ret.typeId == Pwr.eType_String) {
                sts = gdh.setObjectInfo(name, value);
              } else return;

              if (sts.evenSts()) System.out.println("setObjectInfoError " + sts);
            }
          }
        }
      }
    } else System.out.println("JopSpider: Parse error " + cli.getStsString());

    if (!local_cmd) {
      // Send to xtt
      if (qcom != null) {
        PwrtStatus sts = qcom.put(op_qcom_qix, op_qcom_nid, cmd);
        System.out.println("Send " + cmd + "  sts: " + sts.getSts());
        if (sts.evenSts()) System.out.println("Qcom put error: " + sts.getSts());
      }
    }
  }