/**
   * {@inheritDoc}
   *
   * @see org.komodo.shell.BuiltInShellCommand#doExecute()
   */
  @Override
  protected CommandResult doExecute() {
    CommandResult result = null;

    try {
      final String name =
          requiredArgument(0, I18n.bind(WorkspaceCommandsI18n.missingPropertyNameValue));
      final String value =
          requiredArgument(1, I18n.bind(WorkspaceCommandsI18n.missingPropertyNameValue));

      final DataRole dataRole = getDataRole();
      final UnitOfWork transaction = getTransaction();
      String errorMsg = null;

      switch (name) {
        case ALLOWED_CREATE_TEMPORARY_TABLES:
          if (Boolean.TRUE.toString().equals(value) || Boolean.FALSE.toString().equals(value)) {
            dataRole.setAllowCreateTempTables(transaction, Boolean.parseBoolean(value));
          } else {
            errorMsg =
                I18n.bind(
                    WorkspaceCommandsI18n.invalidBooleanPropertyValue,
                    ALLOWED_CREATE_TEMPORARY_TABLES);
          }

          break;
        case ANY_AUTHENTICATED:
          if (Boolean.TRUE.toString().equals(value) || Boolean.FALSE.toString().equals(value)) {
            dataRole.setAnyAuthenticated(transaction, Boolean.parseBoolean(value));
          } else {
            I18n.bind(WorkspaceCommandsI18n.invalidBooleanPropertyValue, ANY_AUTHENTICATED);
          }

          break;
        case DESCRIPTION:
          dataRole.setDescription(transaction, value);
          break;
        case GRANT_ALL:
          if (Boolean.TRUE.toString().equals(value) || Boolean.FALSE.toString().equals(value)) {
            dataRole.setGrantAll(transaction, Boolean.parseBoolean(value));
          } else {
            errorMsg = I18n.bind(WorkspaceCommandsI18n.invalidBooleanPropertyValue, GRANT_ALL);
          }

          break;
        default:
          errorMsg =
              I18n.bind(
                  WorkspaceCommandsI18n.invalidPropertyName, name, DataRole.class.getSimpleName());
          break;
      }

      if (StringUtils.isBlank(errorMsg)) {
        result = new CommandResultImpl(I18n.bind(WorkspaceCommandsI18n.setPropertySuccess, name));
      } else {
        result = new CommandResultImpl(false, errorMsg, null);
      }
    } catch (final Exception e) {
      result = new CommandResultImpl(e);
    }

    return result;
  }