Search in sources :

Example 1 with FlowChangeMoveDetails

use of org.apache.nifi.action.details.FlowChangeMoveDetails in project nifi by apache.

the class ProcessGroupAuditor method updateProcessGroupAdvice.

/**
 * Audits the update of process group configuration.
 *
 * @param proceedingJoinPoint join point
 * @param processGroupDTO dto
 * @return group
 * @throws Throwable ex
 */
@Around("within(org.apache.nifi.web.dao.ProcessGroupDAO+) && " + "execution(org.apache.nifi.groups.ProcessGroup updateProcessGroup(org.apache.nifi.web.api.dto.ProcessGroupDTO)) && " + "args(processGroupDTO)")
public ProcessGroup updateProcessGroupAdvice(ProceedingJoinPoint proceedingJoinPoint, ProcessGroupDTO processGroupDTO) throws Throwable {
    ProcessGroupDAO processGroupDAO = getProcessGroupDAO();
    ProcessGroup processGroup = processGroupDAO.getProcessGroup(processGroupDTO.getId());
    String name = processGroup.getName();
    String comments = processGroup.getComments();
    // perform the underlying operation
    ProcessGroup updatedProcessGroup = (ProcessGroup) proceedingJoinPoint.proceed();
    // get the current user
    NiFiUser user = NiFiUserUtils.getNiFiUser();
    // ensure the user was found
    if (user != null) {
        Collection<ActionDetails> details = new ArrayList<>();
        // see if the name has changed
        if (name != null && updatedProcessGroup.getName() != null && !name.equals(updatedProcessGroup.getName())) {
            // create the config details
            FlowChangeConfigureDetails configDetails = new FlowChangeConfigureDetails();
            configDetails.setName("name");
            configDetails.setValue(updatedProcessGroup.getName());
            configDetails.setPreviousValue(name);
            details.add(configDetails);
        }
        // see if the comments has changed
        if (comments != null && updatedProcessGroup.getComments() != null && !comments.equals(updatedProcessGroup.getComments())) {
            // create the config details
            FlowChangeConfigureDetails configDetails = new FlowChangeConfigureDetails();
            configDetails.setName("comments");
            configDetails.setValue(updatedProcessGroup.getComments());
            configDetails.setPreviousValue(comments);
            details.add(configDetails);
        }
        // hold all actions
        Collection<Action> actions = new ArrayList<>();
        // save the actions if necessary
        if (!details.isEmpty()) {
            Date timestamp = new Date();
            // create the actions
            for (ActionDetails detail : details) {
                // determine the type of operation being performed
                Operation operation = Operation.Configure;
                if (detail instanceof FlowChangeMoveDetails) {
                    operation = Operation.Move;
                }
                // create the port action for updating the name
                FlowChangeAction processGroupAction = new FlowChangeAction();
                processGroupAction.setUserIdentity(user.getIdentity());
                processGroupAction.setOperation(operation);
                processGroupAction.setTimestamp(timestamp);
                processGroupAction.setSourceId(updatedProcessGroup.getIdentifier());
                processGroupAction.setSourceName(updatedProcessGroup.getName());
                processGroupAction.setSourceType(Component.ProcessGroup);
                processGroupAction.setActionDetails(detail);
                actions.add(processGroupAction);
            }
        }
        // save actions if necessary
        if (!actions.isEmpty()) {
            saveActions(actions, logger);
        }
    }
    return updatedProcessGroup;
}
Also used : FlowChangeAction(org.apache.nifi.action.FlowChangeAction) Action(org.apache.nifi.action.Action) NiFiUser(org.apache.nifi.authorization.user.NiFiUser) FlowChangeMoveDetails(org.apache.nifi.action.details.FlowChangeMoveDetails) ArrayList(java.util.ArrayList) Operation(org.apache.nifi.action.Operation) Date(java.util.Date) ProcessGroupDAO(org.apache.nifi.web.dao.ProcessGroupDAO) FlowChangeConfigureDetails(org.apache.nifi.action.details.FlowChangeConfigureDetails) ProcessGroup(org.apache.nifi.groups.ProcessGroup) ActionDetails(org.apache.nifi.action.details.ActionDetails) FlowChangeAction(org.apache.nifi.action.FlowChangeAction) Around(org.aspectj.lang.annotation.Around)

Example 2 with FlowChangeMoveDetails

use of org.apache.nifi.action.details.FlowChangeMoveDetails in project nifi by apache.

the class StandardActionDAO method createAction.

@Override
public Action createAction(Action action) throws DataAccessException {
    if (action.getUserIdentity() == null) {
        throw new IllegalArgumentException("User cannot be null.");
    }
    if (action.getTimestamp() == null) {
        throw new IllegalArgumentException("Action timestamp cannot be null.");
    }
    PreparedStatement statement = null;
    ResultSet rs = null;
    try {
        // obtain a statement to insert to the action table
        statement = connection.prepareStatement(INSERT_ACTION, Statement.RETURN_GENERATED_KEYS);
        statement.setString(1, StringUtils.left(action.getUserIdentity(), 4096));
        statement.setString(2, action.getSourceId());
        statement.setString(3, StringUtils.left(action.getSourceName(), 1000));
        statement.setString(4, action.getSourceType().name());
        statement.setString(5, action.getOperation().name());
        statement.setTimestamp(6, new java.sql.Timestamp(action.getTimestamp().getTime()));
        // insert the action
        int updateCount = statement.executeUpdate();
        final FlowChangeAction createdAction = new FlowChangeAction();
        createdAction.setUserIdentity(action.getUserIdentity());
        createdAction.setSourceId(action.getSourceId());
        createdAction.setSourceName(action.getSourceName());
        createdAction.setSourceType(action.getSourceType());
        createdAction.setOperation(action.getOperation());
        createdAction.setTimestamp(action.getTimestamp());
        createdAction.setActionDetails(action.getActionDetails());
        createdAction.setComponentDetails(action.getComponentDetails());
        // get the action id
        rs = statement.getGeneratedKeys();
        if (updateCount == 1 && rs.next()) {
            createdAction.setId(rs.getInt(1));
        } else {
            throw new DataAccessException("Unable to insert action.");
        }
        // close the previous statement
        statement.close();
        // determine the type of component
        ComponentDetails componentDetails = createdAction.getComponentDetails();
        if (componentDetails instanceof FlowChangeExtensionDetails) {
            createExtensionDetails(createdAction.getId(), (ExtensionDetails) componentDetails);
        } else if (componentDetails instanceof FlowChangeRemoteProcessGroupDetails) {
            createRemoteProcessGroupDetails(createdAction.getId(), (RemoteProcessGroupDetails) componentDetails);
        }
        // determine the type of action
        ActionDetails details = createdAction.getActionDetails();
        if (details instanceof FlowChangeConnectDetails) {
            createConnectDetails(createdAction.getId(), (ConnectDetails) details);
        } else if (details instanceof FlowChangeMoveDetails) {
            createMoveDetails(createdAction.getId(), (MoveDetails) details);
        } else if (details instanceof FlowChangeConfigureDetails) {
            createConfigureDetails(createdAction.getId(), (ConfigureDetails) details);
        } else if (details instanceof FlowChangePurgeDetails) {
            createPurgeDetails(createdAction.getId(), (PurgeDetails) details);
        }
        return createdAction;
    } catch (SQLException sqle) {
        throw new DataAccessException(sqle);
    } finally {
        RepositoryUtils.closeQuietly(rs);
        RepositoryUtils.closeQuietly(statement);
    }
}
Also used : FlowChangeMoveDetails(org.apache.nifi.action.details.FlowChangeMoveDetails) MoveDetails(org.apache.nifi.action.details.MoveDetails) FlowChangePurgeDetails(org.apache.nifi.action.details.FlowChangePurgeDetails) SQLException(java.sql.SQLException) FlowChangeMoveDetails(org.apache.nifi.action.details.FlowChangeMoveDetails) PreparedStatement(java.sql.PreparedStatement) FlowChangeRemoteProcessGroupDetails(org.apache.nifi.action.component.details.FlowChangeRemoteProcessGroupDetails) FlowChangeRemoteProcessGroupDetails(org.apache.nifi.action.component.details.FlowChangeRemoteProcessGroupDetails) RemoteProcessGroupDetails(org.apache.nifi.action.component.details.RemoteProcessGroupDetails) FlowChangeConnectDetails(org.apache.nifi.action.details.FlowChangeConnectDetails) FlowChangeConfigureDetails(org.apache.nifi.action.details.FlowChangeConfigureDetails) FlowChangeExtensionDetails(org.apache.nifi.action.component.details.FlowChangeExtensionDetails) ResultSet(java.sql.ResultSet) FlowChangePurgeDetails(org.apache.nifi.action.details.FlowChangePurgeDetails) PurgeDetails(org.apache.nifi.action.details.PurgeDetails) ActionDetails(org.apache.nifi.action.details.ActionDetails) ComponentDetails(org.apache.nifi.action.component.details.ComponentDetails) DataAccessException(org.apache.nifi.admin.dao.DataAccessException) FlowChangeAction(org.apache.nifi.action.FlowChangeAction)

Example 3 with FlowChangeMoveDetails

use of org.apache.nifi.action.details.FlowChangeMoveDetails in project nifi by apache.

the class NiFiAuditor method createMoveDetails.

protected MoveDetails createMoveDetails(String previousGroupId, String newGroupId, Logger logger) {
    FlowChangeMoveDetails moveDetails = null;
    // get the groups in question
    ProcessGroup previousGroup = processGroupDAO.getProcessGroup(previousGroupId);
    ProcessGroup newGroup = processGroupDAO.getProcessGroup(newGroupId);
    // ensure the groups were found
    if (previousGroup != null && newGroup != null) {
        // create the move details
        moveDetails = new FlowChangeMoveDetails();
        moveDetails.setPreviousGroupId(previousGroup.getIdentifier());
        moveDetails.setPreviousGroup(previousGroup.getName());
        moveDetails.setGroupId(newGroup.getIdentifier());
        moveDetails.setGroup(newGroup.getName());
    } else {
        logger.warn(String.format("Unable to record move action because old (%s) and new (%s) groups could not be found.", previousGroupId, newGroupId));
    }
    return moveDetails;
}
Also used : FlowChangeMoveDetails(org.apache.nifi.action.details.FlowChangeMoveDetails) ProcessGroup(org.apache.nifi.groups.ProcessGroup)

Example 4 with FlowChangeMoveDetails

use of org.apache.nifi.action.details.FlowChangeMoveDetails in project nifi by apache.

the class StandardActionDAO method getMoveDetails.

private MoveDetails getMoveDetails(Integer actionId) throws DataAccessException {
    FlowChangeMoveDetails moveDetails = null;
    PreparedStatement statement = null;
    ResultSet rs = null;
    try {
        // create the statement
        statement = connection.prepareStatement(SELECT_MOVE_DETAILS_FOR_ACTION);
        statement.setInt(1, actionId);
        // execute the query
        rs = statement.executeQuery();
        // ensure results
        if (rs.next()) {
            moveDetails = new FlowChangeMoveDetails();
            moveDetails.setGroupId(rs.getString("GROUP_ID"));
            moveDetails.setGroup(rs.getString("GROUP_NAME"));
            moveDetails.setPreviousGroupId(rs.getString("PREVIOUS_GROUP_ID"));
            moveDetails.setPreviousGroup(rs.getString("PREVIOUS_GROUP_NAME"));
        }
    } catch (SQLException sqle) {
        throw new DataAccessException(sqle);
    } finally {
        RepositoryUtils.closeQuietly(rs);
        RepositoryUtils.closeQuietly(statement);
    }
    return moveDetails;
}
Also used : SQLException(java.sql.SQLException) FlowChangeMoveDetails(org.apache.nifi.action.details.FlowChangeMoveDetails) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) DataAccessException(org.apache.nifi.admin.dao.DataAccessException)

Example 5 with FlowChangeMoveDetails

use of org.apache.nifi.action.details.FlowChangeMoveDetails in project nifi by apache.

the class DtoFactory method createActionDetailsDto.

/**
 * Creates an ActionDetailsDTO for the specified ActionDetails.
 *
 * @param actionDetails details
 * @return dto
 */
private ActionDetailsDTO createActionDetailsDto(final ActionDetails actionDetails) {
    if (actionDetails == null) {
        return null;
    }
    if (actionDetails instanceof FlowChangeConfigureDetails) {
        final ConfigureDetailsDTO configureDetails = new ConfigureDetailsDTO();
        configureDetails.setName(((ConfigureDetails) actionDetails).getName());
        configureDetails.setPreviousValue(((ConfigureDetails) actionDetails).getPreviousValue());
        configureDetails.setValue(((ConfigureDetails) actionDetails).getValue());
        return configureDetails;
    } else if (actionDetails instanceof FlowChangeConnectDetails) {
        final ConnectDetailsDTO connectDetails = new ConnectDetailsDTO();
        connectDetails.setSourceId(((ConnectDetails) actionDetails).getSourceId());
        connectDetails.setSourceName(((ConnectDetails) actionDetails).getSourceName());
        connectDetails.setSourceType(((ConnectDetails) actionDetails).getSourceType().toString());
        connectDetails.setRelationship(((ConnectDetails) actionDetails).getRelationship());
        connectDetails.setDestinationId(((ConnectDetails) actionDetails).getDestinationId());
        connectDetails.setDestinationName(((ConnectDetails) actionDetails).getDestinationName());
        connectDetails.setDestinationType(((ConnectDetails) actionDetails).getDestinationType().toString());
        return connectDetails;
    } else if (actionDetails instanceof FlowChangeMoveDetails) {
        final MoveDetailsDTO moveDetails = new MoveDetailsDTO();
        moveDetails.setPreviousGroup(((MoveDetails) actionDetails).getPreviousGroup());
        moveDetails.setPreviousGroupId(((MoveDetails) actionDetails).getPreviousGroupId());
        moveDetails.setGroup(((MoveDetails) actionDetails).getGroup());
        moveDetails.setGroupId(((MoveDetails) actionDetails).getGroupId());
        return moveDetails;
    } else if (actionDetails instanceof FlowChangePurgeDetails) {
        final PurgeDetailsDTO purgeDetails = new PurgeDetailsDTO();
        purgeDetails.setEndDate(((PurgeDetails) actionDetails).getEndDate());
        return purgeDetails;
    } else {
        throw new WebApplicationException(new IllegalArgumentException(String.format("Unrecognized type of action details encountered %s during serialization.", actionDetails.toString())));
    }
}
Also used : FlowChangeConnectDetails(org.apache.nifi.action.details.FlowChangeConnectDetails) ConfigureDetailsDTO(org.apache.nifi.web.api.dto.action.details.ConfigureDetailsDTO) MoveDetailsDTO(org.apache.nifi.web.api.dto.action.details.MoveDetailsDTO) FlowChangePurgeDetails(org.apache.nifi.action.details.FlowChangePurgeDetails) WebApplicationException(javax.ws.rs.WebApplicationException) FlowChangeConfigureDetails(org.apache.nifi.action.details.FlowChangeConfigureDetails) ConnectDetails(org.apache.nifi.action.details.ConnectDetails) FlowChangeConnectDetails(org.apache.nifi.action.details.FlowChangeConnectDetails) FlowChangeMoveDetails(org.apache.nifi.action.details.FlowChangeMoveDetails) FlowChangePurgeDetails(org.apache.nifi.action.details.FlowChangePurgeDetails) PurgeDetails(org.apache.nifi.action.details.PurgeDetails) PurgeDetailsDTO(org.apache.nifi.web.api.dto.action.details.PurgeDetailsDTO) ConnectDetailsDTO(org.apache.nifi.web.api.dto.action.details.ConnectDetailsDTO)

Aggregations

FlowChangeMoveDetails (org.apache.nifi.action.details.FlowChangeMoveDetails)5 FlowChangeConfigureDetails (org.apache.nifi.action.details.FlowChangeConfigureDetails)3 PreparedStatement (java.sql.PreparedStatement)2 ResultSet (java.sql.ResultSet)2 SQLException (java.sql.SQLException)2 FlowChangeAction (org.apache.nifi.action.FlowChangeAction)2 ActionDetails (org.apache.nifi.action.details.ActionDetails)2 FlowChangeConnectDetails (org.apache.nifi.action.details.FlowChangeConnectDetails)2 FlowChangePurgeDetails (org.apache.nifi.action.details.FlowChangePurgeDetails)2 PurgeDetails (org.apache.nifi.action.details.PurgeDetails)2 DataAccessException (org.apache.nifi.admin.dao.DataAccessException)2 ProcessGroup (org.apache.nifi.groups.ProcessGroup)2 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 WebApplicationException (javax.ws.rs.WebApplicationException)1 Action (org.apache.nifi.action.Action)1 Operation (org.apache.nifi.action.Operation)1 ComponentDetails (org.apache.nifi.action.component.details.ComponentDetails)1 FlowChangeExtensionDetails (org.apache.nifi.action.component.details.FlowChangeExtensionDetails)1 FlowChangeRemoteProcessGroupDetails (org.apache.nifi.action.component.details.FlowChangeRemoteProcessGroupDetails)1