/**
   * Execute action's workflow.
   *
   * @throws org.areasy.runtime.engine.base.AREasyException if any global error occurs. All errors
   *     comming from action's execution will become output items
   */
  public void run() throws AREasyException {
    // execute the requested action for each user
    for (int i = 0; i < getUsers().size(); i++) {
      String username = (String) getUsers().get(i);

      try {
        People person = new People();
        person.setLoginId(username);
        person.read(getServerConnection());

        if (person.exists()) {
          // check people unrestricted access flag.
          if (person.getAttributeValue(1000003975) != null) {
            person.setNullAttribute(1000003975);
            person.setIgnoreNullValues(false);

            person.update(getServerConnection());
            RuntimeLogger.info("Unrestricted access flag was removed for user '" + username + "'");
          }
        } else RuntimeLogger.error("People account wasn't found: " + person);
      } catch (Throwable th) {
        RuntimeLogger.error(
            "Error removing unrestricted access for user '" + username + "': " + th.getMessage());
        getLogger().debug("Exception", th);
      }

      // check interruption and and exit if the execution was really interrupted
      if (isInterrupted()) {
        RuntimeLogger.warn("Execution interrupted by user");
        return;
      }
    }
  }
  public void perform(DevProcessAction develop) {
    // prepare data for export
    for (int i = 0; getObjectsList() != null && i < getObjectsList().size(); i++) {
      String objname = null;
      String objtype = null;

      try {
        // read developed object
        WorksheetObject devobj = (WorksheetObject) getObjectsList().get(i);

        objname = devobj.getObjectName();
        objtype = devobj.getSignature();

        // take the corresponding action
        OverlayAction action = new OverlayAction();
        action.init(develop);

        // get the base object instance and run the action
        String objSignature = getPluralObjectTypeNameBySignature(objtype);
        ObjectWrapper wrapper = action.getObjectWrapper(objSignature);

        if (wrapper instanceof FormRelatedWrapper) {
          ((FormRelatedWrapper) wrapper).setFormName(objname);
          objname = devobj.getRelatedData();
        }

        ObjectBase object = wrapper.getInstance(objname);

        action.execute(object);
      } catch (Throwable th) {
        RuntimeLogger.error(
            "Error running overlay action for a '" + objname + "' definition: " + th.getMessage());
        getLogger().debug("Exception", th);
      }
    }

    RuntimeLogger.info("Overlay action for the specified development package has been done");
  }