예제 #1
0
  private void addCmdInCalc(
      CStackCalc calc,
      String cmdName,
      String className,
      Hashtable<FieldCmdKind, Object> fieldsValue) {
    Class cls; // Полученный по тектовому имени объект класса Class.
    Object o; // Создаваемый по имени класса объект команды.
    ICmd cmd; // Объект команды, приведенный к базовому классу команды.

    try {
      cls = Class.forName(className);
      o = cls.newInstance();

      if (o instanceof ICmd) {
        cmd = (ICmd) o;
        cmd.setCmdText(cmdName.toUpperCase());
        InitFieldCmd(cmd, fieldsValue);

        if (proxyMode == ProxyMode.PROXYIN) cmd = cmdProxy(cmd);

        calc.addCmdCalc(cmd);
        log.info("Добавили команду в калькулятор (" + cmd.getCmdText() + ")!");
      }
    } catch (Exception e) {
      log.warn(
          "При создании команды для калькулятора использовано неизвестное имя класса ("
              + className
              + ")!");
    }
  }
예제 #2
0
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
      if ("getCmdText".equals(method.getName())) {
        return cmd.getCmdText();
      }
      if ("setCmdText".equals(method.getName())) {
        if (args.length > 0) cmd.setCmdText((String) args[0]);
        return (Void.TYPE);
      }
      if ("execute".equals(method.getName())) {
        if (args.length > 0) {
          if (log.isDebugEnabled()) {
            log.debug("Stack before:");
            outStackInLog();
            log.debug("Context:");
            outContextInLog();

            StringBuilder outStr = new StringBuilder();

            log.debug("Arguments:");

            for (Object iArgs : args) {
              outStr.append(iArgs);
              outStr.append(";  ");
            }

            log.debug(outStr);
          }

          cmd.execute((String) args[0]); // Результат реально отработавшей функции.

          if (log.isDebugEnabled()) {
            log.debug("Stack After:");
            outStackInLog();
          }
        }
        return Void.TYPE;
      }

      return null; // To change body of implemented methods use File | Settings | File Templates.
    }