/**
     * Create an EmitterDescriptor for the given methodName. This conmstructor creates a descriptor
     * that represents explicitly the types and size of the operands of the given emit* method. This
     * constructor encapsulate the logic to parse the given method name into the appropriate
     * explicit representation.
     */
    EmitterDescriptor(String methodName, Class<?>[] argTypes) {
      StringTokenizer toks = new StringTokenizer(methodName, "_");
      toks.nextElement(); // first element is emitXXX;
      args = new ArgumentType[toks.countTokens()];
      ArgumentType size = null;
      int count = 0;
      int argTypeNum = 0;
      for (int i = 0; i < args.length; i++) {
        String cs = toks.nextToken();
        ArgumentType code;
        if (argTypeNum < argTypes.length) {
          code = getEncoding(cs, argTypes[argTypeNum]);
        } else {
          code = getEncoding(cs, null);
        }
        argTypeNum += code.getParameters();
        if (DEBUG) {
          System.err.println(methodName + "[" + i + "] is " + code + " for " + cs);
        }

        args[count] = code;
        count++;
        if (code.isSize()) {
          size = code;
          count--;
        }
      }
      this.size = size;
      this.count = count;
    }
Exemple #2
0
 private static Object parseValue(String value, Prop p, Class type) {
   Object v = value;
   if (type.isArray()) {
     StringTokenizer st = new StringTokenizer(value, ",");
     Class ctype = type.getComponentType();
     v = Array.newInstance(ctype, st.countTokens());
     for (int i = 0; st.hasMoreTokens(); i++)
       Array.set(v, i, parseValue(st.nextToken(), p, ctype));
   } else if (type == boolean.class) {
     v = Boolean.valueOf(value);
   } else if (type == double.class) {
     v = Double.valueOf(value);
   } else if (type == int.class) {
     v = Integer.valueOf(value);
   } else if (p.field.isAnnotationPresent(TimeIntervalProp.class)) {
     if (value.endsWith("s")) {
       v = (long) (Double.parseDouble(value.substring(0, value.length() - 1)) * SEC);
     } else if (value.endsWith("m")) {
       v = (long) (Double.parseDouble(value.substring(0, value.length() - 1)) * MIN);
     } else {
       v = Long.valueOf(value);
     }
   }
   return v;
 }
Exemple #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;
  }
Exemple #4
0
  /**
   * convert an array of strings of the form &quot;package.Class.method(Class, Class, ...)&quot; to
   * an array of Method objects
   */
  public static Method[] stringsToMethods(String[] strings) {
    int len = strings.length;
    Method[] methods = new Method[len];
    for (int j = 0; j < len; j++) {
      // remove spaces
      StringTokenizer t = new StringTokenizer(strings[j], " ", false);
      String s = "";
      while (t.hasMoreTokens()) s = s + t.nextToken();

      // separate into two strings
      t = new StringTokenizer(s, "(", false);
      String pre = t.nextToken();
      String post = t.nextToken();

      // separate first string into class and method strings
      t = new StringTokenizer(pre, ".", false);
      String c = t.nextToken();
      int count = t.countTokens();
      for (int i = 0; i < count - 1; i++) c = c + "." + t.nextToken();
      String m = t.nextToken();

      // get argument array of strings
      t = new StringTokenizer(post, ",)", false);
      count = t.countTokens();
      String[] a;
      if (count == 0) a = null;
      else a = new String[count];
      int x = 0;
      while (t.hasMoreTokens()) a[x++] = t.nextToken();

      // convert result to Method object
      Class clas = null;
      try {
        clas = Class.forName(c);
      } catch (ClassNotFoundException exc) {
        if (FormulaVar.DEBUG) {
          System.out.println("ERROR: Class " + c + " does not exist!");
        }
        methods[j] = null;
        continue;
      }
      Class[] param;
      if (a == null) param = null;
      else param = new Class[a.length];
      for (int i = 0; i < count; i++) {
        // hack to convert array arguments to correct form
        if (a[i].endsWith("[]")) {
          a[i] = "[L" + a[i].substring(0, a[i].length() - 2);
          while (a[i].endsWith("[]")) {
            a[i] = "[" + a[i].substring(0, a[i].length() - 2);
          }
          a[i] = a[i] + ";";
        }

        try {
          param[i] = Class.forName(a[i]);
        } catch (ClassNotFoundException exc) {
          if (FormulaVar.DEBUG) {
            System.out.println("ERROR: Class " + a[i] + " (" + i + ") does not exist!");
          }
          methods[j] = null;
          continue;
        }
      }
      Method method = null;
      try {
        method = clas.getMethod(m, param);
      } catch (NoSuchMethodException exc) {
        if (FormulaVar.DEBUG) {
          System.out.println("ERROR: Method " + m + " does not exist!");
        }
        methods[j] = null;
        continue;
      }
      methods[j] = method;
    }
    return methods;
  }
Exemple #5
0
  public static DeepHierarchyElement[] getDeepFieldHierarchy(
      Class<?> parentClass, String field, HintContainer deepIndexHintContainer) {
    if (!MappingUtils.isDeepMapping(field)) {
      MappingUtils.throwMappingException("Field does not contain deep field delimitor");
    }

    StringTokenizer toks = new StringTokenizer(field, DozerConstants.DEEP_FIELD_DELIMITER);
    Class<?> latestClass = parentClass;
    DeepHierarchyElement[] hierarchy = new DeepHierarchyElement[toks.countTokens()];
    int index = 0;
    int hintIndex = 0;
    while (toks.hasMoreTokens()) {
      String aFieldName = toks.nextToken();
      String theFieldName = aFieldName;
      int collectionIndex = -1;

      if (aFieldName.contains("[")) {
        theFieldName = aFieldName.substring(0, aFieldName.indexOf("["));
        collectionIndex =
            Integer.parseInt(
                aFieldName.substring(aFieldName.indexOf("[") + 1, aFieldName.indexOf("]")));
      }

      PropertyDescriptor propDescriptor =
          findPropertyDescriptor(latestClass, theFieldName, deepIndexHintContainer);
      DeepHierarchyElement r = new DeepHierarchyElement(propDescriptor, collectionIndex);

      if (propDescriptor == null) {
        MappingUtils.throwMappingException(
            "Exception occurred determining deep field hierarchy for Class --> "
                + parentClass.getName()
                + ", Field --> "
                + field
                + ".  Unable to determine property descriptor for Class --> "
                + latestClass.getName()
                + ", Field Name: "
                + aFieldName);
      }

      latestClass = propDescriptor.getPropertyType();
      if (toks.hasMoreTokens()) {
        if (latestClass.isArray()) {
          latestClass = latestClass.getComponentType();
        } else if (Collection.class.isAssignableFrom(latestClass)) {
          Class<?> genericType = determineGenericsType(propDescriptor);

          if (genericType == null && deepIndexHintContainer == null) {
            MappingUtils.throwMappingException(
                "Hint(s) or Generics not specified.  Hint(s) or Generics must be specified for deep mapping with indexed field(s). Exception occurred determining deep field hierarchy for Class --> "
                    + parentClass.getName()
                    + ", Field --> "
                    + field
                    + ".  Unable to determine property descriptor for Class --> "
                    + latestClass.getName()
                    + ", Field Name: "
                    + aFieldName);
          }
          if (genericType != null) {
            latestClass = genericType;
          } else {
            latestClass = deepIndexHintContainer.getHint(hintIndex);
            hintIndex += 1;
          }
        }
      }
      hierarchy[index++] = r;
    }

    return hierarchy;
  }