@Override
  public ActionResponse execute(
      TestContext context,
      PropertyList propertyList,
      List<Metadata> metadataList,
      SubEngineActionType actionType)
      throws SubEngineException {

    Metadata metadata = null;

    try {
      // Validation
      this.validateArguments(context, propertyList, metadataList, actionType);

      SwingActionType swingAction = (SwingActionType) actionType;

      // Init result
      metadata = metadataList.get(metadataList.size() - 1);
      this.initResult(context, metadata, actionType);

      //            this.validateComponent(propertyList, swingAction);

      // Execute Command
      ExecutionCommand command = createCommand(propertyList, metadata, swingAction);
      Integer timeout = getTimeout(metadata, swingAction);
      Property reply = executeCommand(context, command, timeout);

      if (reply != null) {
        PropertyList returnList = PropertyHelper.createPropertyList("Return");
        PropertyHelper.add(reply, returnList);
        result.setReturnProperties(returnList);
      }

    } catch (SwingValidationException e) {
      logger.error(e, "Error validating Swing component.");
      failResult(metadata, actionType, e.getMessage());
    } catch (Exception e) {
      logger.error(e, "Error during Swing component execution.");
      failResult(metadata, actionType);
    }

    return result;
  }