예제 #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
  // See comment in createericlist regarding HandleViewParams
  private /*synchronized*/ String HandleViewParams(
      String tempString, LinkedList tempList, StringTokenizer st) throws VisualizerLoadException {
    while (tempString.toUpperCase().startsWith("VIEW")) {
      StringTokenizer t = new StringTokenizer(tempString, " \t");
      String s1 = t.nextToken().toUpperCase();
      String s2 = t.nextToken().toUpperCase();
      String s3 = t.nextToken();

      // HERE PROCESS URL's AS YOU DID QUESTIONS

      if (s2.compareTo("ALGO") == 0) {
        add_a_pseudocode_URL(s3);
        // System.out.println("Adding to urls: "+Snaps+":"+s3);
        //                 urlList.append(Snaps+1 +":"+s3);
      } else if (s2.compareTo("DOCS") == 0) {
        add_a_documentation_URL(s3);
        // System.out.println("Adding to urls: "+Snaps+":"+s3);
        //                 if (debug) System.out.println("Adding to urlList: "+Snaps+1+":"+s3);
        //                 urlList.append(Snaps+1 +":"+s3);
      } else if (s2.compareTo("SCALE") == 0) {
        GKS.scale(Format.atof(s3.toUpperCase()), tempList, this);
      } else if (s2.compareTo("WINDOWS") == 0) {
        GKS.windows(Format.atoi(s3.toUpperCase()), tempList, this);
      } else if (s2.compareTo("JUMP") == 0) {
        GKS.jump(Format.atoi(s3.toUpperCase()), tempList, this);
      } else throw (new VisualizerLoadException(s2 + " is invalid VIEW parameter"));
      tempString = st.nextToken();
    }
    //         if (urlList.size() == 0)
    //             urlList.append("**");
    return (tempString);
  }
예제 #3
0
  // createericlist with a String signature is used to process a String
  // containing a sequence of GAIGS structures
  // createericlist creates the list of graphics primitives for these snapshot(s).
  // After creating these lists, that are then appended to l, the list of snapshots,
  // Also must return the number of snapshots loaded from the string
  public /*synchronized*/ int createericlist(String structString) {
    int numsnaps = 0;
    if (debug) System.out.println("In create eric " + structString);
    StringTokenizer st = new StringTokenizer(structString, "\r\n");
    while (st.hasMoreTokens()) {
      numsnaps++; // ??
      String tempString;
      LinkedList tempList = new LinkedList();
      StructureType strct;
      tempString = st.nextToken();
      try {
        boolean headers = true;
        while (headers) {
          headers = false;
          if (tempString.toUpperCase().startsWith("VIEW")) {
            tempString = HandleViewParams(tempString, tempList, st);
            headers = true;
          }
          if (tempString.toUpperCase().startsWith("FIBQUESTION ")
              || tempString.toUpperCase().startsWith("MCQUESTION ")
              || tempString.toUpperCase().startsWith("MSQUESTION ")
              || tempString.toUpperCase().startsWith("TFQUESTION ")) {
            tempString = add_a_question(tempString, st);
            headers = true;
          }
        }

        if (tempString.toUpperCase().equals("STARTQUESTIONS")) {
          numsnaps--; // questions don't count as snapshots
          readQuestions(st);
          break;
        }
        // After returning from HandleViewParams, tempString should now contain
        // the line with the structure type and possible additional text height info
        StringTokenizer structLine = new StringTokenizer(tempString, " \t");
        String structType = structLine.nextToken();
        if (debug) System.out.println("About to assign structure" + structType);
        strct = assignStructureType(structType);
        strct.loadTextHeights(structLine, tempList, this);
        strct.loadLinesPerNodeInfo(st, tempList, this);

        strct.loadTitle(st, tempList, this);
        strct.loadStructure(st, tempList, this);
        strct.calcDimsAndStartPts(tempList, this);
        strct.drawTitle(tempList, this);
        strct.drawStructure(tempList, this);
      } catch (VisualizerLoadException e) {
        System.out.println(e.toString());
      }
      //             // You've just created a snapshot.  Need to insure that "**" is appended
      //             // to the URLList for this snapshot IF no VIEW ALGO line was parsed in the
      //             // string for the snapshot.  This could probably best be done in the
      //             // HandleViewParams method
      list_of_snapshots.append(tempList);
      Snaps++;
    }
    return (numsnaps);
  } // createericlist(string)
 {
   StringBuffer sb = new StringBuffer();
   StringTokenizer st = new StringTokenizer(cfg.REQPARAM_CONTACT_LIST_LOGIN_IDS, ",");
   while (st.hasMoreTokens()) {
     sb.append(st.nextToken());
     if (st.hasMoreTokens()) sb.append("\n");
   }
   contactList.setText(sb.toString());
 }
예제 #5
0
 private /*synchronized*/ String add_a_question(String tmpStr, StringTokenizer st)
     throws VisualizerLoadException {
   try {
     StringTokenizer tokzer = new StringTokenizer(tmpStr);
     String idTok = tokzer.nextToken();
     idTok = tokzer.nextToken(); // what we really want is the id
     //             FIBQuestion q = new FIBQuestion(idTok);
     //             qTable.put(idTok, q);                   //add map id -> q
     GaigsAV.qCtlTable.put(new Integer(Snaps), idTok); // add map snap -> q (assumes <= 1 q/snap)
     if (debug) System.out.println("Adding question for snap " + Snaps);
     return st.nextToken();
   } catch (Exception e) {
     throw new VisualizerLoadException("Aieee... bad SHO file");
   }
 }
 String[] getContactList() {
   java.util.List cl = new java.util.LinkedList();
   StringTokenizer st = new StringTokenizer(contactList.getText());
   StringBuffer sb = new StringBuffer();
   StringBuffer dbg = new StringBuffer("test applet contactlist: ");
   while (st.hasMoreTokens()) {
     String loginId = st.nextToken().trim();
     if (loginId.length() == 0) continue;
     dbg.append("'" + loginId + "' ");
     cl.add(loginId);
     sb.append(loginId).append('\n');
   }
   CAT.info(dbg.toString());
   contactList.setText(sb.toString());
   return (String[]) cl.toArray(new String[cl.size()]);
 }
예제 #7
0
  protected void loadJarFiles(AppletClassLoader loader) throws IOException, InterruptedException {
    // Load the archives if present.
    // REMIND - this probably should be done in a separate thread,
    // or at least the additional archives (epll).
    String jarFiles = getJarFiles();

    if (jarFiles != null) {
      StringTokenizer st = new StringTokenizer(jarFiles, ",", false);
      while (st.hasMoreTokens()) {
        String tok = st.nextToken().trim();
        try {
          loader.addJar(tok);
        } catch (IllegalArgumentException e) {
          // bad archive name
          continue;
        }
      }
    }
  }
예제 #8
0
  // Parse STRING into a VRML scene and return the list of root
  // nodes for the resulting scene
  public Node[] createVrmlFromString(String vrmlSyntax) throws InvalidVrmlException {

    Node[] x = new Node[100];
    StringTokenizer tokens;
    String retval;
    String temp;
    int count;

    synchronized (FreeWRLToken) {
      EAIoutSender.send("" + queryno + "S #VRML V2.0 utf8\n" + vrmlSyntax + "\nEOT\n");
      retval = getVRMLreply(queryno);

      // System.out.println ("Browser.java - got " + retval);

      tokens = new StringTokenizer(retval);

      // We return a (node-index C-pointer) pair, so we have to divide by two
      x = new Node[tokens.countTokens()];
      count = 0;

      // Lets go through the output, and temporarily store it
      // XXX - is there a better way? ie, using a vector?
      while (tokens.hasMoreTokens()) {
        x[count] = new Node();
        x[count].nodeptr = Integer.parseInt(tokens.nextToken());
        x[count].offset = 0;
        x[count].datasize = 4;
        x[count].datatype = "h"; // see CFuncs/EAIServ.c for a complete desc.

        // System.out.println ("CVS - for this one, we have NODE" +
        //	" pointer:" + x[count].nodeptr + " offset:" + x[count].offset +
        //	" datasize: " + x[count].datasize + " datatype:" + x[count].datatype);

        count++;
        if (count == 100) {
          count = 99;
          System.out.println("EAI: createVrmlFromString - warning, tied to 100 nodes");
        }
      }
      queryno += 1;
    }
    return x;
  }
예제 #9
0
  public Node getNode(String getName) throws InvalidNodeException {
    Node temp;
    StringTokenizer tokens;
    String retval;

    temp = new Node();

    synchronized (FreeWRLToken) {
      EAIoutSender.send("" + queryno + "A " + getName + "\n");
      retval = getVRMLreply(queryno);
    }

    tokens = new StringTokenizer(retval);

    temp.nodeptr = Integer.parseInt(tokens.nextToken());
    queryno += 1;

    if (temp.nodeptr == 0) throw new InvalidNodeException(getName + " undefined");

    return temp;
  }
예제 #10
0
  public /*synchronized*/ Color colorSet(String values) {
    String temp;
    int x;
    Color c = Color.black;

    StringTokenizer st = new StringTokenizer(values);
    x = Format.atoi(st.nextToken());
    if (x == 1) c = Color.black;
    else if (x == 2) c = Color.blue;
    else if (x == 6) c = Color.cyan;
    else if (x == 13) c = Color.darkGray;
    else if (x == 11) c = Color.gray;
    else if (x == 3) c = Color.green;
    else if (x == 9) c = Color.lightGray;
    else if (x == 5) c = Color.magenta;
    else if (x == 10) c = Color.orange;
    else if (x == 12) c = Color.pink;
    else if (x == 4) c = Color.red;
    else if (x == 8) c = Color.white;
    else if (x == 7) c = Color.yellow;
    else if (x < 0) c = new Color(-x);
    return c;
  }
예제 #11
0
  private /*synchronized*/ void readQuestions(StringTokenizer st) throws VisualizerLoadException {
    String tmpStr =
        "STARTQUESTIONS\n"; // When CG's QuestionFactory parses from a string, it looks for
    // a line with STARTQUESTIONS -- hence we add it artificially here
    try { // Build the string for the QuestionFactory
      while (st.hasMoreTokens()) {
        tmpStr += st.nextToken() + "\n";
      }
    } catch (Exception e) {
      e.printStackTrace();
      throw new VisualizerLoadException("Ooof!  bad question format");
    }

    try {
      // System.out.println(tmpStr);
      // Problem -- must make this be line oriented
      GaigsAV.questionCollection = QuestionFactory.parseScript(tmpStr);
    } catch (QuestionParseException e) {
      e.printStackTrace();
      System.out.println("Error parsing questions.");
      throw new VisualizerLoadException("Ooof!  bad question format");
      // throw new IOException();
    }
  } // readQuestions(st)
예제 #12
0
  // Tells the browser to load a VRML scene from the passed URL or
  // URLs. After the scene is loaded, an event is sent to the MFNode
  // eventIn in node NODE named by the EVENT argument
  public void createVrmlFromURL(String[] url, Node node, String event) {

    EventInMFNode Evin;
    String retval;
    Node[] x = new Node[1];
    StringTokenizer tokens;
    int count;

    synchronized (FreeWRLToken) {
      EAIoutSender.send("" + queryno + "T " + url[0] + "\n");

      retval = getVRMLreply(queryno);

      tokens = new StringTokenizer(retval);
      count = 0;
      x = new Node[tokens.countTokens()];

      while (tokens.hasMoreTokens()) {
        x[count] = new Node();
        x[count].nodeptr = Integer.parseInt(tokens.nextToken());
        x[count].offset = 0;
        x[count].datasize = 4;
        x[count].datatype = "h"; // see CFuncs/EAIServ.c for a complete desc.
        // System.out.println ("CVU - for this one, we have NODE" +
        //	" pointer:" + x[count].nodeptr + " offset:" + x[count].offset +
        //	" datasize: " + x[count].datasize + " datatype:" + x[count].datatype);

        count++;
      }
      queryno += 1;
    }

    // Now, sent the event to the event!
    Evin = (EventInMFNode) node.getEventIn(event);
    Evin.setValue(x);
  }
예제 #13
0
  // creates the list of snapshots
  public /*synchronized*/ obj dothis(String inputString) {
    /* Snapshot codes

    29 - rectangle draw
    2 - oval draw
    5 - fill oval
    6 - string
    7 - line & text color
    8 - fill color
    9 - text color (possible to ignore)
    10 - text height
    11 - polydraw
    4 - fill poly
    14 - arc draw
    30 - fill arc
    12 - text style, centered horizontal/vertical
    ???? 45 - url.  Note, when bring up multiple algorithms, the URL's for the most recently
    run algorithm are posted in the upper browser frame
    THE CODE BELOW WOULD INDICATE THIS IS 54, NOT 45 ????

    20 - number of windows.  For static algorithms, 1, 2, 3, 4 have the obvious meaning.
    21 - scale factor
    22 - jump factor

    For 20, 21, 22, the last factor loaded is the one that will affect all snapshots in
    the show

     */

    obj temp = new rectDraw("0 0 0 0", lineC);
    Object urlTest;
    String arrg;

    int graphic_obj_code = Format.atoi(inputString.substring(0, 3));
    StringTokenizer tmp = null;

    switch (graphic_obj_code) {
      case 29:
        temp = new rectDraw(inputString.substring(3, (inputString.length())), lineC);
        break;
      case 2:
        temp = new ovalDraw(inputString.substring(3, (inputString.length())), lineC);
        break;
      case 5:
        temp = new fillOvalDraw(inputString.substring(3, (inputString.length())), fillC);
        break;
      case 6:
        temp =
            new stringDraw(
                inputString.substring(3, (inputString.length())), textC, LineH, LineV, fontMult);
        // 		System.out.println(" printing " + inputString);
        break;
      case 7:
        lineC = colorSet(inputString.substring(3, (inputString.length())));
        textC = lineC;
        break;
      case 8:
        tmp = new StringTokenizer(inputString.substring(2, (inputString.length())));
        fillC = colorSet(tmp.nextToken());
        break;
      case 9:
        textC = colorSet(inputString.substring(3, (inputString.length())));
        break;
      case 10:
        StringTokenizer st = new StringTokenizer(inputString.substring(3, (inputString.length())));
        fontMult = Format.atof(st.nextToken());
        // 		System.out.println("setting fontMult= " + fontMult);
        break;
        // TLN changed on 10/14/97 to accomodate condensed prm files
        // temp=new textHeight(inputString.substring(3,(inputString.length())));
      case 11:
        temp = new polyDraw(inputString.substring(3, (inputString.length())), lineC);
        break;
      case 4:
        temp = new fillPolyDraw(inputString.substring(3, (inputString.length())), fillC);
        break;
      case 64:
        temp = new animated_fillPolyDraw(inputString.substring(3, (inputString.length())), fillC);
        break;
      case 14:
        temp = new arcDraw(inputString.substring(3, (inputString.length())), lineC);
        break;
      case 30:
        temp = new fillArcDraw(inputString.substring(3, (inputString.length())), fillC);
        break;
      case 12:
        tmp = new StringTokenizer(inputString.substring(3, (inputString.length())));
        LineH = Format.atoi(tmp.nextToken());
        LineV = Format.atoi(tmp.nextToken());
        break;
      case 20:
        tmp = new StringTokenizer(inputString.substring(3, (inputString.length())));
        // graphWin.setNumViews(Format.atoi(tmp.nextToken()));
        // multiTrigger=true;
        break;
      case 21:
        tmp = new StringTokenizer(inputString.substring(3, (inputString.length())));
        double tempFloat = Format.atof(tmp.nextToken());
        zoom = tempFloat;
        break;
      case 22:
        tmp = new StringTokenizer(inputString.substring(3, (inputString.length())));
        //            graphWin.setJump(Format.atoi(tmp.nextToken()));  // This is now a noop in
        // gaigs2
        break;
      case 54:
        tmp = new StringTokenizer(inputString.substring(3, (inputString.length())));
        //             if (tmp.hasMoreElements()){
        //                 urlTest=tmp.nextToken();
        //                 urlList.append(urlTest);
        //             }
        //             else{
        //                 tmp=new StringTokenizer("**");
        //                 urlTest=tmp.nextToken();
        //                 urlList.append(urlTest);
        //             }
        break;
    } // end switch

    return (temp);
  }
예제 #14
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;
  }