http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/300952a9/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardActionDAO.java ---------------------------------------------------------------------- diff --git a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardActionDAO.java b/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardActionDAO.java deleted file mode 100644 index 4b89655..0000000 --- a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardActionDAO.java +++ /dev/null @@ -1,1056 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.nifi.admin.dao.impl; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import org.apache.nifi.action.Action; -import org.apache.nifi.action.Component; -import org.apache.nifi.action.Operation; -import org.apache.nifi.action.component.details.ComponentDetails; -import org.apache.nifi.action.component.details.ProcessorDetails; -import org.apache.nifi.action.component.details.RemoteProcessGroupDetails; -import org.apache.nifi.action.details.ActionDetails; -import org.apache.nifi.action.details.ConfigureDetails; -import org.apache.nifi.action.details.ConnectDetails; -import org.apache.nifi.action.details.MoveDetails; -import org.apache.nifi.action.details.PurgeDetails; -import org.apache.nifi.admin.RepositoryUtils; -import org.apache.nifi.admin.dao.ActionDAO; -import org.apache.nifi.admin.dao.DataAccessException; -import org.apache.nifi.history.History; -import org.apache.nifi.history.HistoryQuery; -import org.apache.nifi.history.PreviousValue; -import org.apache.commons.lang3.StringUtils; - -/** - * - */ -public class StandardActionDAO implements ActionDAO { - - // ------------ - // action table - // ------------ - private static final String INSERT_ACTION = "INSERT INTO ACTION (" - + "USER_DN, USER_NAME, SOURCE_ID, SOURCE_NAME, SOURCE_TYPE, OPERATION, ACTION_TIMESTAMP" - + ") VALUES (" - + "?, " - + "?, " - + "?, " - + "?, " - + "?, " - + "?, " - + "?, " - + ")"; - - // ----------------- - // component details - // ----------------- - private static final String INSERT_PROCESSOR_DETAILS = "INSERT INTO PROCESSOR_DETAILS (" - + "ACTION_ID, TYPE" - + ") VALUES (" - + "?, " - + "?" - + ")"; - - private static final String INSERT_REMOTE_PROCESS_GROUP_DETAILS = "INSERT INTO REMOTE_PROCESS_GROUP_DETAILS (" - + "ACTION_ID, URI" - + ") VALUES (" - + "?, " - + "?" - + ")"; - - // -------------- - // action details - // -------------- - private static final String INSERT_CONFIGURE_DETAILS = "INSERT INTO CONFIGURE_DETAILS (" - + "ACTION_ID, NAME, VALUE, PREVIOUS_VALUE" - + ") VALUES (" - + "?, " - + "?, " - + "?, " - + "?" - + ")"; - - private static final String INSERT_CONNECT_DETAILS = "INSERT INTO CONNECT_DETAILS (" - + "ACTION_ID, SOURCE_ID, SOURCE_NAME, SOURCE_TYPE, RELATIONSHIP, DESTINATION_ID, DESTINATION_NAME, DESTINATION_TYPE" - + ") VALUES (" - + "?, " - + "?, " - + "?, " - + "?, " - + "?, " - + "?, " - + "?, " - + "?" - + ")"; - - private static final String INSERT_MOVE_DETAILS = "INSERT INTO MOVE_DETAILS (" - + "ACTION_ID, GROUP_ID, GROUP_NAME, PREVIOUS_GROUP_ID, PREVIOUS_GROUP_NAME" - + ") VALUES (" - + "?, " - + "?, " - + "?, " - + "?, " - + "?" - + ")"; - - private static final String INSERT_PURGE_DETAILS = "INSERT INTO PURGE_DETAILS (" - + "ACTION_ID, END_DATE" - + ") VALUES (" - + "?, " - + "?" - + ")"; - - // ------------ - // action table - // ------------ - private static final String SELECT_ACTIONS = "SELECT * FROM ACTION"; - - private static final String SELECT_ACTION_COUNT = "SELECT COUNT(*) AS ACTION_COUNT FROM ACTION"; - - private static final String SELECT_ACTION_BY_ID = "SELECT * " - + "FROM ACTION " - + "WHERE " - + "ID = ?"; - - private static final String DELETE_ACTIONS = "DELETE FROM ACTION WHERE ACTION_TIMESTAMP < ?"; - - private static final String DELETE_SPECIFIC_ACTIONS = "DELETE FROM %s WHERE %s IN (SELECT ID FROM ACTION WHERE ACTION_TIMESTAMP < ?)"; - - // ----------------- - // component details - // ----------------- - private static final String SELECT_PROCESSOR_DETAILS_FOR_ACTION = "SELECT * FROM PROCESSOR_DETAILS WHERE ACTION_ID = ?"; - - private static final String SELECT_REMOTE_PROCESS_GROUP_DETAILS_FOR_ACTION = "SELECT * FROM REMOTE_PROCESS_GROUP_DETAILS WHERE ACTION_ID = ?"; - - // -------------- - // action details - // -------------- - private static final String SELECT_MOVE_DETAILS_FOR_ACTION = "SELECT * FROM MOVE_DETAILS WHERE ACTION_ID = ?"; - - private static final String SELECT_CONFIGURE_DETAILS_FOR_ACTION = "SELECT * FROM CONFIGURE_DETAILS WHERE ACTION_ID = ?"; - - private static final String SELECT_CONNECT_DETAILS_FOR_ACTION = "SELECT * FROM CONNECT_DETAILS WHERE ACTION_ID = ?"; - - private static final String SELECT_PURGE_DETAILS_FOR_ACTION = "SELECT * FROM PURGE_DETAILS WHERE ACTION_ID = ?"; - - // --------------- - // previous values - // --------------- - private static final String SELECT_PREVIOUSLY_CONFIGURED_FIELDS = "SELECT DISTINCT CD.NAME " - + "FROM CONFIGURE_DETAILS CD " - + "INNER JOIN ACTION A " - + "ON CD.ACTION_ID = A.ID " - + "WHERE A.SOURCE_ID = ?"; - - private static final String SELECT_PREVIOUS_VALUES = "SELECT CD.VALUE, " - + "A.ACTION_TIMESTAMP, " - + "A.USER_NAME " - + "FROM CONFIGURE_DETAILS CD " - + "INNER JOIN ACTION A " - + "ON CD.ACTION_ID = A.ID " - + "WHERE A.SOURCE_ID = ? AND CD.NAME = ? " - + "ORDER BY A.ACTION_TIMESTAMP DESC " - + "LIMIT 4"; - - private Connection connection; - private Map<String, String> columnMap; - - public StandardActionDAO(Connection connection) { - this.connection = connection; - - // initialize the column mappings - this.columnMap = new HashMap<>(); - this.columnMap.put("timestamp", "ACTION_TIMESTAMP"); - this.columnMap.put("sourceName", "SOURCE_NAME"); - this.columnMap.put("sourceType", "SOURCE_TYPE"); - this.columnMap.put("operation", "OPERATION"); - this.columnMap.put("userName", "USER_NAME"); - } - - @Override - public void createAction(Action action) throws DataAccessException { - if (action.getUserDn() == 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.getUserDn(), 255)); - statement.setString(2, StringUtils.left(action.getUserName(), 100)); - statement.setString(3, action.getSourceId()); - statement.setString(4, StringUtils.left(action.getSourceName(), 1000)); - statement.setString(5, action.getSourceType().toString()); - statement.setString(6, action.getOperation().toString()); - statement.setTimestamp(7, new java.sql.Timestamp(action.getTimestamp().getTime())); - - // insert the action - int updateCount = statement.executeUpdate(); - - // get the action id - rs = statement.getGeneratedKeys(); - if (updateCount == 1 && rs.next()) { - action.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 = action.getComponentDetails(); - if (componentDetails instanceof ProcessorDetails) { - createProcessorDetails(action.getId(), (ProcessorDetails) componentDetails); - } else if (componentDetails instanceof RemoteProcessGroupDetails) { - createRemoteProcessGroupDetails(action.getId(), (RemoteProcessGroupDetails) componentDetails); - } - - // determine the type of action - ActionDetails details = action.getActionDetails(); - if (details instanceof ConnectDetails) { - createConnectDetails(action.getId(), (ConnectDetails) details); - } else if (details instanceof MoveDetails) { - createMoveDetails(action.getId(), (MoveDetails) details); - } else if (details instanceof ConfigureDetails) { - createConfigureDetails(action.getId(), (ConfigureDetails) details); - } else if (details instanceof PurgeDetails) { - createPurgeDetails(action.getId(), (PurgeDetails) details); - } - - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - } - - /** - * Persists the processor details. - * - * @param actionId - * @param processorDetails - * @throws DataAccessException - */ - private void createProcessorDetails(int actionId, ProcessorDetails processorDetails) throws DataAccessException { - PreparedStatement statement = null; - try { - // obtain a statement to insert to the processor action table - statement = connection.prepareStatement(INSERT_PROCESSOR_DETAILS); - statement.setInt(1, actionId); - statement.setString(2, StringUtils.left(processorDetails.getType(), 1000)); - - // insert the action - int updateCount = statement.executeUpdate(); - - // ensure the operation completed successfully - if (updateCount != 1) { - throw new DataAccessException("Unable to insert processor details."); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - /** - * Persists the remote process group details. - * - * @param actionId - * @param remoteProcessGroupDetails - * @throws DataAccessException - */ - private void createRemoteProcessGroupDetails(int actionId, RemoteProcessGroupDetails remoteProcessGroupDetails) throws DataAccessException { - PreparedStatement statement = null; - try { - // obtain a statement to insert to the processor action table - statement = connection.prepareStatement(INSERT_REMOTE_PROCESS_GROUP_DETAILS); - statement.setInt(1, actionId); - statement.setString(2, StringUtils.left(remoteProcessGroupDetails.getUri(), 2500)); - - // insert the action - int updateCount = statement.executeUpdate(); - - // ensure the operation completed successfully - if (updateCount != 1) { - throw new DataAccessException("Unable to insert remote prcoess group details."); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - /** - * Persists the connection details. - * - * @param actionId - * @param connectionDetails - * @throws DataAccessException - */ - private void createConnectDetails(int actionId, ConnectDetails connectionDetails) throws DataAccessException { - PreparedStatement statement = null; - try { - // obtain a statement to insert to the processor action table - statement = connection.prepareStatement(INSERT_CONNECT_DETAILS); - statement.setInt(1, actionId); - statement.setString(2, connectionDetails.getSourceId()); - statement.setString(3, StringUtils.left(connectionDetails.getSourceName(), 1000)); - statement.setString(4, StringUtils.left(connectionDetails.getSourceType().toString(), 1000)); - statement.setString(5, StringUtils.left(connectionDetails.getRelationship(), 1000)); - statement.setString(6, connectionDetails.getDestinationId()); - statement.setString(7, StringUtils.left(connectionDetails.getDestinationName(), 1000)); - statement.setString(8, StringUtils.left(connectionDetails.getDestinationType().toString(), 1000)); - - // insert the action - int updateCount = statement.executeUpdate(); - - // ensure the operation completed successfully - if (updateCount != 1) { - throw new DataAccessException("Unable to insert connection details."); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - /** - * Persists the move details. - * - * @param actionId - * @param moveDetails - * @throws DataAccessException - */ - private void createMoveDetails(int actionId, MoveDetails moveDetails) throws DataAccessException { - PreparedStatement statement = null; - try { - // obtain a statement to insert to the processor action table - statement = connection.prepareStatement(INSERT_MOVE_DETAILS); - statement.setInt(1, actionId); - statement.setString(2, moveDetails.getGroupId()); - statement.setString(3, StringUtils.left(moveDetails.getGroup(), 1000)); - statement.setString(4, moveDetails.getPreviousGroupId()); - statement.setString(5, StringUtils.left(moveDetails.getPreviousGroup(), 1000)); - - // insert the action - int updateCount = statement.executeUpdate(); - - // ensure the operation completed successfully - if (updateCount != 1) { - throw new DataAccessException("Unable to insert move details."); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - /** - * Persists the configuration details. - * - * @param actionId - * @param configurationDetails - * @throws DataAccessException - */ - private void createConfigureDetails(int actionId, ConfigureDetails configurationDetails) throws DataAccessException { - PreparedStatement statement = null; - try { - // obtain a statement to insert to the processor action table - statement = connection.prepareStatement(INSERT_CONFIGURE_DETAILS); - statement.setInt(1, actionId); - statement.setString(2, StringUtils.left(configurationDetails.getName(), 1000)); - statement.setString(3, StringUtils.left(configurationDetails.getValue(), 5000)); - statement.setString(4, StringUtils.left(configurationDetails.getPreviousValue(), 5000)); - - // insert the action - int updateCount = statement.executeUpdate(); - - // ensure the operation completed successfully - if (updateCount != 1) { - throw new DataAccessException("Unable to insert configure details."); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - /** - * Persists the purge details. - * - * @param actionId - * @param purgeDetails - * @throws DataAccessException - */ - private void createPurgeDetails(int actionId, PurgeDetails purgeDetails) throws DataAccessException { - PreparedStatement statement = null; - try { - // obtain a statement to insert to the processor action table - statement = connection.prepareStatement(INSERT_PURGE_DETAILS); - statement.setInt(1, actionId); - statement.setTimestamp(2, new java.sql.Timestamp(purgeDetails.getEndDate().getTime())); - - // insert the action - int updateCount = statement.executeUpdate(); - - // ensure the operation completed successfully - if (updateCount != 1) { - throw new DataAccessException("Unable to insert connection details."); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - /** - * Finds actions that meet the criteria in the specified query. - * - * @param historyQuery - * @return - * @throws DataAccessException - */ - @Override - public History findActions(HistoryQuery historyQuery) throws DataAccessException { - - // get the sort column - String sortColumn = "ACTION_TIMESTAMP"; - if (StringUtils.isNotBlank(historyQuery.getSortColumn())) { - String rawColumnName = historyQuery.getSortColumn(); - if (!columnMap.containsKey(rawColumnName)) { - throw new IllegalArgumentException(String.format("Unrecognized column name '%s'.", rawColumnName)); - } - sortColumn = columnMap.get(rawColumnName); - } - - // get the sort order - String sortOrder = "desc"; - if (StringUtils.isNotBlank(historyQuery.getSortOrder())) { - sortOrder = historyQuery.getSortOrder(); - } - - History actionResult = new History(); - Collection<Action> actions = new ArrayList<>(); - PreparedStatement statement = null; - ResultSet rs = null; - try { - List<String> where = new ArrayList<>(); - - // append the start time - if (historyQuery.getStartDate() != null) { - where.add("ACTION_TIMESTAMP >= ?"); - } - - // append the end time - if (historyQuery.getEndDate() != null) { - where.add("ACTION_TIMESTAMP <= ?"); - } - - // append the user id as necessary - if (historyQuery.getUserName() != null) { - where.add("UPPER(USER_NAME) LIKE ?"); - } - - // append the source id as necessary - if (historyQuery.getSourceId() != null) { - where.add("SOURCE_ID = ?"); - } - - String sql = SELECT_ACTION_COUNT; - if (!where.isEmpty()) { - sql += " WHERE " + StringUtils.join(where, " AND "); - } - - // get the total number of actions - statement = connection.prepareStatement(sql); - int paramIndex = 1; - - // set the start date as necessary - if (historyQuery.getStartDate() != null) { - statement.setTimestamp(paramIndex++, new java.sql.Timestamp(historyQuery.getStartDate().getTime())); - } - - // set the end date as necessary - if (historyQuery.getEndDate() != null) { - statement.setTimestamp(paramIndex++, new java.sql.Timestamp(historyQuery.getEndDate().getTime())); - } - - // set the user id as necessary - if (historyQuery.getUserName() != null) { - statement.setString(paramIndex++, "%" + historyQuery.getUserName().toUpperCase() + "%"); - } - - // set the source id as necessary - if (historyQuery.getSourceId() != null) { - statement.setString(paramIndex, historyQuery.getSourceId()); - } - - // execute the statement - rs = statement.executeQuery(); - - // ensure there are results - if (rs.next()) { - actionResult.setTotal(rs.getInt("ACTION_COUNT")); - } else { - throw new DataAccessException("Unable to determine total action count."); - } - - sql = SELECT_ACTIONS; - if (!where.isEmpty()) { - sql += " WHERE " + StringUtils.join(where, " AND "); - } - - // append the sort criteria - sql += (" ORDER BY " + sortColumn + " " + sortOrder); - - // append the offset and limit - sql += " LIMIT ? OFFSET ?"; - - // close the previous statement - statement.close(); - - // create the statement - statement = connection.prepareStatement(sql); - paramIndex = 1; - - // set the start date as necessary - if (historyQuery.getStartDate() != null) { - statement.setTimestamp(paramIndex++, new java.sql.Timestamp(historyQuery.getStartDate().getTime())); - } - - // set the end date as necessary - if (historyQuery.getEndDate() != null) { - statement.setTimestamp(paramIndex++, new java.sql.Timestamp(historyQuery.getEndDate().getTime())); - } - - // set the user id as necessary - if (historyQuery.getUserName() != null) { - statement.setString(paramIndex++, "%" + historyQuery.getUserName().toUpperCase() + "%"); - } - - // set the source id as necessary - if (historyQuery.getSourceId() != null) { - statement.setString(paramIndex++, historyQuery.getSourceId()); - } - - // set the limit - statement.setInt(paramIndex++, historyQuery.getCount()); - - // set the offset according to the currented page calculated above - statement.setInt(paramIndex, historyQuery.getOffset()); - - // execute the query - rs = statement.executeQuery(); - - // create each corresponding action - while (rs.next()) { - final Integer actionId = rs.getInt("ID"); - final Operation operation = Operation.valueOf(rs.getString("OPERATION")); - final Component component = Component.valueOf(rs.getString("SOURCE_TYPE")); - - Action action = new Action(); - action.setId(actionId); - action.setUserDn(rs.getString("USER_DN")); - action.setUserName(rs.getString("USER_NAME")); - action.setOperation(Operation.valueOf(rs.getString("OPERATION"))); - action.setTimestamp(new Date(rs.getTimestamp("ACTION_TIMESTAMP").getTime())); - action.setSourceId(rs.getString("SOURCE_ID")); - action.setSourceName(rs.getString("SOURCE_NAME")); - action.setSourceType(Component.valueOf(rs.getString("SOURCE_TYPE"))); - - // get the component details if appropriate - ComponentDetails componentDetails = null; - if (Component.Processor.equals(component)) { - componentDetails = getProcessorDetails(actionId); - } else if (Component.RemoteProcessGroup.equals(component)) { - componentDetails = getRemoteProcessGroupDetails(actionId); - } - - if (componentDetails != null) { - action.setComponentDetails(componentDetails); - } - - // get the action details if appropriate - ActionDetails actionDetails = null; - if (Operation.Move.equals(operation)) { - actionDetails = getMoveDetails(actionId); - } else if (Operation.Configure.equals(operation)) { - actionDetails = getConfigureDetails(actionId); - } else if (Operation.Connect.equals(operation) || Operation.Disconnect.equals(operation)) { - actionDetails = getConnectDetails(actionId); - } else if (Operation.Purge.equals(operation)) { - actionDetails = getPurgeDetails(actionId); - } - - // set the action details - if (actionDetails != null) { - action.setActionDetails(actionDetails); - } - - // add the action - actions.add(action); - } - - // populate the action result - actionResult.setActions(actions); - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return actionResult; - } - - @Override - public Action getAction(Integer actionId) throws DataAccessException { - Action action = null; - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the statement - statement = connection.prepareStatement(SELECT_ACTION_BY_ID); - statement.setInt(1, actionId); - - // execute the query - rs = statement.executeQuery(); - - // ensure results - if (rs.next()) { - Operation operation = Operation.valueOf(rs.getString("OPERATION")); - Component component = Component.valueOf(rs.getString("SOURCE_TYPE")); - - // populate the action - action = new Action(); - action.setId(rs.getInt("ID")); - action.setUserDn(rs.getString("USER_DN")); - action.setUserName(rs.getString("USER_NAME")); - action.setOperation(operation); - action.setTimestamp(new Date(rs.getTimestamp("ACTION_TIMESTAMP").getTime())); - action.setSourceId(rs.getString("SOURCE_ID")); - action.setSourceName(rs.getString("SOURCE_NAME")); - action.setSourceType(component); - - // get the component details if appropriate - ComponentDetails componentDetails = null; - if (Component.Processor.equals(component)) { - componentDetails = getProcessorDetails(actionId); - } else if (Component.RemoteProcessGroup.equals(component)) { - componentDetails = getRemoteProcessGroupDetails(actionId); - } - - if (componentDetails != null) { - action.setComponentDetails(componentDetails); - } - - // get the action details if appropriate - ActionDetails actionDetails = null; - if (Operation.Move.equals(operation)) { - actionDetails = getMoveDetails(actionId); - } else if (Operation.Configure.equals(operation)) { - actionDetails = getConfigureDetails(actionId); - } else if (Operation.Connect.equals(operation) || Operation.Disconnect.equals(operation)) { - actionDetails = getConnectDetails(actionId); - } else if (Operation.Purge.equals(operation)) { - actionDetails = getPurgeDetails(actionId); - } - - // set the action details - if (actionDetails != null) { - action.setActionDetails(actionDetails); - } - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return action; - } - - /** - * Loads the specified processor details. - * - * @param actionId - * @return - * @throws DataAccessException - */ - private ProcessorDetails getProcessorDetails(Integer actionId) throws DataAccessException { - ProcessorDetails processorDetails = null; - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the statement - statement = connection.prepareStatement(SELECT_PROCESSOR_DETAILS_FOR_ACTION); - statement.setInt(1, actionId); - - // execute the query - rs = statement.executeQuery(); - - // ensure results - if (rs.next()) { - processorDetails = new ProcessorDetails(); - processorDetails.setType(rs.getString("TYPE")); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return processorDetails; - } - - /** - * Loads the specified remote process group details. - * - * @param actionId - * @return - * @throws DataAccessException - */ - private RemoteProcessGroupDetails getRemoteProcessGroupDetails(Integer actionId) throws DataAccessException { - RemoteProcessGroupDetails remoteProcessGroupDetails = null; - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the statement - statement = connection.prepareStatement(SELECT_REMOTE_PROCESS_GROUP_DETAILS_FOR_ACTION); - statement.setInt(1, actionId); - - // execute the query - rs = statement.executeQuery(); - - // ensure results - if (rs.next()) { - remoteProcessGroupDetails = new RemoteProcessGroupDetails(); - remoteProcessGroupDetails.setUri(rs.getString("URI")); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return remoteProcessGroupDetails; - } - - /** - * Loads the specified move details. - * - * @param actionId - * @return - * @throws DataAccessException - */ - private MoveDetails getMoveDetails(Integer actionId) throws DataAccessException { - MoveDetails 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 MoveDetails(); - 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; - } - - /** - * Loads the specified relationship details. - * - * @param actionId - * @return - * @throws DataAccessException - */ - private ConnectDetails getConnectDetails(Integer actionId) throws DataAccessException { - ConnectDetails connectionDetails = null; - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the statement - statement = connection.prepareStatement(SELECT_CONNECT_DETAILS_FOR_ACTION); - statement.setInt(1, actionId); - - // execute the query - rs = statement.executeQuery(); - - // ensure results - if (rs.next()) { - final Component sourceComponent = Component.valueOf(rs.getString("SOURCE_TYPE")); - final Component destinationComponent = Component.valueOf(rs.getString("DESTINATION_TYPE")); - - connectionDetails = new ConnectDetails(); - connectionDetails.setSourceId(rs.getString("SOURCE_ID")); - connectionDetails.setSourceName(rs.getString("SOURCE_NAME")); - connectionDetails.setSourceType(sourceComponent); - connectionDetails.setRelationship(rs.getString("RELATIONSHIP")); - connectionDetails.setDestinationId(rs.getString("DESTINATION_ID")); - connectionDetails.setDestinationName(rs.getString("DESTINATION_NAME")); - connectionDetails.setDestinationType(destinationComponent); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return connectionDetails; - } - - /** - * Loads the specified configuration details. - * - * @param actionId - * @return - * @throws DataAccessException - */ - private ConfigureDetails getConfigureDetails(Integer actionId) throws DataAccessException { - ConfigureDetails configurationDetails = null; - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the statement - statement = connection.prepareStatement(SELECT_CONFIGURE_DETAILS_FOR_ACTION); - statement.setInt(1, actionId); - - // execute the query - rs = statement.executeQuery(); - - // ensure results - if (rs.next()) { - configurationDetails = new ConfigureDetails(); - configurationDetails.setName(rs.getString("NAME")); - configurationDetails.setValue(rs.getString("VALUE")); - configurationDetails.setPreviousValue(rs.getString("PREVIOUS_VALUE")); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return configurationDetails; - } - - /** - * Loads the specified purge details. - * - * @param actionId - * @return - * @throws DataAccessException - */ - private PurgeDetails getPurgeDetails(Integer actionId) throws DataAccessException { - PurgeDetails purgeDetails = null; - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the statement - statement = connection.prepareStatement(SELECT_PURGE_DETAILS_FOR_ACTION); - statement.setInt(1, actionId); - - // execute the query - rs = statement.executeQuery(); - - // ensure results - if (rs.next()) { - purgeDetails = new PurgeDetails(); - purgeDetails.setEndDate(new Date(rs.getTimestamp("END_DATE").getTime())); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return purgeDetails; - } - - @Override - public Map<String, List<PreviousValue>> getPreviousValues(String processorId) { - Map<String, List<PreviousValue>> previousValues = new LinkedHashMap<>(); - - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the statement - statement = connection.prepareStatement(SELECT_PREVIOUSLY_CONFIGURED_FIELDS); - statement.setString(1, processorId); - - // execute the query - rs = statement.executeQuery(); - - // ensure results - while (rs.next()) { - final String property = rs.getString("NAME"); - previousValues.put(property, getPreviousValuesForProperty(processorId, property)); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return previousValues; - } - - private List<PreviousValue> getPreviousValuesForProperty(final String processorId, final String property) { - List<PreviousValue> previousValues = new ArrayList<>(); - - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the statement - statement = connection.prepareStatement(SELECT_PREVIOUS_VALUES); - statement.setString(1, processorId); - statement.setString(2, property); - - // execute the query - rs = statement.executeQuery(); - - // ensure results - while (rs.next()) { - // get the previous value - final PreviousValue previousValue = new PreviousValue(); - previousValue.setPreviousValue(rs.getString("VALUE")); - previousValue.setTimestamp(new Date(rs.getTimestamp("ACTION_TIMESTAMP").getTime())); - previousValue.setUserName(rs.getString("USER_NAME")); - previousValues.add(previousValue); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return previousValues; - } - - @Override - public void deleteActions(Date endDate) throws DataAccessException { - PreparedStatement statement = null; - try { - // ----------------- - // component details - // ----------------- - - // create the move delete statement - statement = connection.prepareStatement(String.format(DELETE_SPECIFIC_ACTIONS, "PROCESSOR_DETAILS", "ACTION_ID")); - statement.setTimestamp(1, new java.sql.Timestamp(endDate.getTime())); - statement.executeUpdate(); - statement.close(); - - // create the move delete statement - statement = connection.prepareStatement(String.format(DELETE_SPECIFIC_ACTIONS, "REMOTE_PROCESS_GROUP_DETAILS", "ACTION_ID")); - statement.setTimestamp(1, new java.sql.Timestamp(endDate.getTime())); - statement.executeUpdate(); - statement.close(); - - // -------------- - // action details - // -------------- - // create the move delete statement - statement = connection.prepareStatement(String.format(DELETE_SPECIFIC_ACTIONS, "MOVE_DETAILS", "ACTION_ID")); - statement.setTimestamp(1, new java.sql.Timestamp(endDate.getTime())); - statement.executeUpdate(); - statement.close(); - - // create the configure delete statement - statement = connection.prepareStatement(String.format(DELETE_SPECIFIC_ACTIONS, "CONFIGURE_DETAILS", "ACTION_ID")); - statement.setTimestamp(1, new java.sql.Timestamp(endDate.getTime())); - statement.executeUpdate(); - statement.close(); - - // create the connect delete statement - statement = connection.prepareStatement(String.format(DELETE_SPECIFIC_ACTIONS, "CONNECT_DETAILS", "ACTION_ID")); - statement.setTimestamp(1, new java.sql.Timestamp(endDate.getTime())); - statement.executeUpdate(); - statement.close(); - - // create the relationship delete statement - statement = connection.prepareStatement(String.format(DELETE_SPECIFIC_ACTIONS, "PURGE_DETAILS", "ACTION_ID")); - statement.setTimestamp(1, new java.sql.Timestamp(endDate.getTime())); - statement.executeUpdate(); - statement.close(); - - // ------- - // actions - // ------- - // create the action delete statement - statement = connection.prepareStatement(DELETE_ACTIONS); - statement.setTimestamp(1, new java.sql.Timestamp(endDate.getTime())); - statement.executeUpdate(); - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - -}
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/300952a9/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardAuthorityDAO.java ---------------------------------------------------------------------- diff --git a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardAuthorityDAO.java b/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardAuthorityDAO.java deleted file mode 100644 index 4e2cc26..0000000 --- a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardAuthorityDAO.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.nifi.admin.dao.impl; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.EnumSet; -import java.util.Set; -import org.apache.nifi.admin.RepositoryUtils; -import org.apache.nifi.admin.dao.AuthorityDAO; -import org.apache.nifi.admin.dao.DataAccessException; -import org.apache.nifi.authorization.Authority; - -/** - * - */ -public class StandardAuthorityDAO implements AuthorityDAO { - - private static final String SELECT_AUTHORITIES_FOR_USER = "SELECT ID, ROLE " - + "FROM AUTHORITY " - + "WHERE USER_ID = ?"; - - private static final String INSERT_AUTHORITY = "INSERT INTO AUTHORITY (" - + "USER_ID, ROLE" - + ") VALUES (" - + "?, ?" - + ")"; - - private static final String DELETE_AUTHORITY = "DELETE FROM AUTHORITY " - + "WHERE USER_ID = ? AND ROLE = ?"; - - private static final String DELETE_AUTHORITIES_FOR_USER = "DELETE FROM AUTHORITY " - + "WHERE USER_ID = ?"; - - private final Connection connection; - - public StandardAuthorityDAO(Connection connection) { - this.connection = connection; - } - - @Override - public void createAuthorities(Set<Authority> authorities, String userId) throws DataAccessException { - if (authorities == null) { - throw new IllegalArgumentException("Specified authorities cannot be null."); - } - - // ensure there are some authorities to create - if (!authorities.isEmpty()) { - PreparedStatement statement = null; - try { - // add each authority for the specified user - statement = connection.prepareStatement(INSERT_AUTHORITY); - statement.setString(1, userId); - for (Authority authority : authorities) { - statement.setString(2, authority.toString()); - statement.addBatch(); - } - - // insert the authorities - int[] updateCounts = statement.executeBatch(); - for (int updateCount : updateCounts) { - if (updateCount != 1) { - throw new DataAccessException("Unable to insert user authorities."); - } - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } catch (DataAccessException dae) { - throw dae; - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - } - - @Override - public void deleteAuthorities(String userId) throws DataAccessException { - // ensure there are some authorities to create - PreparedStatement statement = null; - try { - // add each authority for the specified user - statement = connection.prepareStatement(DELETE_AUTHORITIES_FOR_USER); - statement.setString(1, userId); - - // insert the authorities - statement.executeUpdate(); - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public void deleteAuthorities(Set<Authority> authorities, String userId) throws DataAccessException { - if (authorities == null) { - throw new IllegalArgumentException("Specified authorities cannot be null."); - } - - // ensure there are some authorities to create - if (!authorities.isEmpty()) { - PreparedStatement statement = null; - try { - // add each authority for the specified user - statement = connection.prepareStatement(DELETE_AUTHORITY); - statement.setString(1, userId); - for (Authority authority : authorities) { - statement.setString(2, authority.toString()); - statement.addBatch(); - } - - // insert the authorities - int[] updateCounts = statement.executeBatch(); - for (int updateCount : updateCounts) { - if (updateCount != 1) { - throw new DataAccessException("Unable to remove user authorities."); - } - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } catch (DataAccessException dae) { - throw dae; - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - } - - @Override - public Set<Authority> findAuthoritiesByUserId(String userId) throws DataAccessException { - Set<Authority> authorities = EnumSet.noneOf(Authority.class); - PreparedStatement statement = null; - ResultSet rs = null; - try { - // add each authority for the specified user - statement = connection.prepareStatement(SELECT_AUTHORITIES_FOR_USER); - statement.setString(1, userId); - - // execute the query - rs = statement.executeQuery(); - - // create each corresponding authority - while (rs.next()) { - authorities.add(Authority.valueOfAuthority(rs.getString("ROLE"))); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - - return authorities; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/300952a9/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardUserDAO.java ---------------------------------------------------------------------- diff --git a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardUserDAO.java b/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardUserDAO.java deleted file mode 100644 index ea7c1a1..0000000 --- a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/dao/impl/StandardUserDAO.java +++ /dev/null @@ -1,634 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.nifi.admin.dao.impl; - -import java.nio.charset.StandardCharsets; -import java.sql.Connection; -import org.apache.nifi.admin.dao.UserDAO; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.Types; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; -import org.apache.nifi.admin.RepositoryUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.nifi.admin.dao.DataAccessException; -import org.apache.nifi.authorization.Authority; -import org.apache.nifi.user.AccountStatus; -import org.apache.nifi.user.NiFiUser; - -/** - * Responsible for loading and persisting NiFiUsers. - */ -public class StandardUserDAO implements UserDAO { - - private static final String SELECT_PENDING_ACCOUNTS_COUNT = "SELECT " - + "COUNT(*) as PENDING_ACCOUNTS " - + "FROM USER U " - + "WHERE U.STATUS = 'PENDING'"; - - private static final String SELECT_USER_BY_DN = "SELECT " - + "U.ID, " - + "U.DN, " - + "U.USER_NAME, " - + "U.USER_GROUP, " - + "U.CREATION, " - + "U.LAST_ACCESSED, " - + "U.LAST_VERIFIED, " - + "U.JUSTIFICATION, " - + "U.STATUS, " - + "A.ROLE " - + "FROM USER U " - + "LEFT JOIN AUTHORITY A " // ensures that users without authorities are still matched - + "ON U.ID = A.USER_ID " - + "WHERE U.DN = ?"; - - private static final String SELECT_USER_BY_ID = "SELECT " - + "U.ID, " - + "U.DN, " - + "U.USER_NAME, " - + "U.USER_GROUP, " - + "U.CREATION, " - + "U.LAST_ACCESSED, " - + "U.LAST_VERIFIED, " - + "U.JUSTIFICATION, " - + "U.STATUS, " - + "A.ROLE " - + "FROM USER U " - + "LEFT JOIN AUTHORITY A " // ensures that users without authorities are still matched - + "ON U.ID = A.USER_ID " - + "WHERE U.ID = ?"; - - private static final String SELECT_USERS = "SELECT " - + "U.ID, " - + "U.DN, " - + "U.USER_NAME, " - + "U.USER_GROUP, " - + "U.CREATION, " - + "U.LAST_ACCESSED, " - + "U.LAST_VERIFIED, " - + "U.JUSTIFICATION, " - + "U.STATUS, " - + "A.ROLE " - + "FROM USER U " - + "LEFT JOIN AUTHORITY A " // ensures that users without authorities are still matched - + "ON U.ID = A.USER_ID " - + "WHERE U.DN <> ?"; - - private static final String SELECT_USER_GROUPS = "SELECT DISTINCT " - + "U.USER_GROUP " - + "FROM USER U"; - - private static final String SELECT_USER_GROUP = "SELECT " - + "U.ID, " - + "U.DN, " - + "U.USER_NAME, " - + "U.USER_GROUP, " - + "U.CREATION, " - + "U.LAST_ACCESSED, " - + "U.LAST_VERIFIED, " - + "U.JUSTIFICATION, " - + "U.STATUS, " - + "A.ROLE " - + "FROM USER U " - + "LEFT JOIN AUTHORITY A " // ensures that users without authorities are still matched - + "ON U.ID = A.USER_ID " - + "WHERE U.DN <> ? AND U.USER_GROUP = ?"; - - private static final String INSERT_USER = "INSERT INTO USER (" - + "ID, DN, USER_NAME, USER_GROUP, CREATION, LAST_VERIFIED, JUSTIFICATION, STATUS" - + ") VALUES (" - + "?, " - + "?, " - + "?, " - + "?, " - + "NOW(), " - + "?, " - + "?, " - + "?" - + ")"; - - private static final String UPDATE_USER = "UPDATE USER SET " - + "DN = ?, " - + "USER_NAME = ?, " - + "USER_GROUP = ?, " - + "LAST_ACCESSED = ?, " - + "LAST_VERIFIED = ?, " - + "JUSTIFICATION = ?, " - + "STATUS = ? " - + "WHERE ID = ?"; - - private static final String UPDATE_USER_GROUP_STATUS = "UPDATE USER SET " - + "STATUS = ?," - + "USER_GROUP = NULL " - + "WHERE USER_GROUP = ?"; - - private static final String UPDATE_USER_GROUP_VERIFICATION = "UPDATE USER SET " - + "LAST_VERIFIED = ? " - + "WHERE USER_GROUP = ?"; - - private static final String UNGROUP_GROUP = "UPDATE USER SET " - + "USER_GROUP = NULL " - + "WHERE USER_GROUP = ?"; - - private static final String DELETE_USER = "DELETE FROM USER " - + "WHERE ID = ?"; - - private final Connection connection; - - public StandardUserDAO(Connection connection) { - this.connection = connection; - } - - @Override - public Boolean hasPendingUserAccounts() throws DataAccessException { - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the connection and obtain a statement - statement = connection.prepareStatement(SELECT_PENDING_ACCOUNTS_COUNT); - - // execute the query - rs = statement.executeQuery(); - - // get the first row which will contain the number of pending accounts - if (rs.next()) { - int pendingAccounts = rs.getInt("PENDING_ACCOUNTS"); - return pendingAccounts > 0; - } - - // query returned no results? - return false; - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public Set<NiFiUser> findUsers() throws DataAccessException { - Set<NiFiUser> users = new HashSet<>(); - - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the connection and obtain a statement - statement = connection.prepareStatement(SELECT_USERS); - statement.setString(1, NiFiUser.ANONYMOUS_USER_DN); - - // execute the query - rs = statement.executeQuery(); - - // create the user - NiFiUser user = null; - - // go through the user and its roles - while (rs.next()) { - // get the user id for the current record - String userId = rs.getString("ID"); - - // create the user during the first iteration - if (user == null || !userId.equals(user.getId())) { - user = new NiFiUser(); - user.setId(userId); - user.setDn(rs.getString("DN")); - user.setUserName(rs.getString("USER_NAME")); - user.setUserGroup(rs.getString("USER_GROUP")); - user.setJustification(rs.getString("JUSTIFICATION")); - user.setStatus(AccountStatus.valueOfStatus(rs.getString("STATUS"))); - - // set the creation date - user.setCreation(new Date(rs.getTimestamp("CREATION").getTime())); - - // get the last accessed date - if (rs.getTimestamp("LAST_ACCESSED") != null) { - user.setLastAccessed(new Date(rs.getTimestamp("LAST_ACCESSED").getTime())); - } - - // get the last verified date - if (rs.getTimestamp("LAST_VERIFIED") != null) { - user.setLastVerified(new Date(rs.getTimestamp("LAST_VERIFIED").getTime())); - } - - // add the user - users.add(user); - } - - // the select statement performs a left join since the desired - // user may not have any authorities - String authority = rs.getString("ROLE"); - if (StringUtils.isNotBlank(authority)) { - user.getAuthorities().add(Authority.valueOfAuthority(authority)); - } - } - - return users; - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public Set<String> findUserGroups() throws DataAccessException { - Set<String> userGroups = new HashSet<>(); - - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the connection and obtain a statement - statement = connection.prepareStatement(SELECT_USER_GROUPS); - - // execute the query - rs = statement.executeQuery(); - - // get each user group - while (rs.next()) { - userGroups.add(rs.getString("USER_GROUP")); - } - - return userGroups; - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public Set<NiFiUser> findUsersForGroup(String group) throws DataAccessException { - Set<NiFiUser> users = new HashSet<>(); - - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the connection and obtain a statement - statement = connection.prepareStatement(SELECT_USER_GROUP); - statement.setString(1, NiFiUser.ANONYMOUS_USER_DN); - statement.setString(2, group); - - // execute the query - rs = statement.executeQuery(); - - // create the user - NiFiUser user = null; - - // go through the user and its roles - while (rs.next()) { - // get the user id for the current record - String userId = rs.getString("ID"); - - // create the user during the first iteration - if (user == null || !userId.equals(user.getId())) { - user = new NiFiUser(); - user.setId(userId); - user.setDn(rs.getString("DN")); - user.setUserName(rs.getString("USER_NAME")); - user.setUserGroup(rs.getString("USER_GROUP")); - user.setJustification(rs.getString("JUSTIFICATION")); - user.setStatus(AccountStatus.valueOfStatus(rs.getString("STATUS"))); - - // set the creation date - user.setCreation(new Date(rs.getTimestamp("CREATION").getTime())); - - // get the last accessed date - if (rs.getTimestamp("LAST_ACCESSED") != null) { - user.setLastAccessed(new Date(rs.getTimestamp("LAST_ACCESSED").getTime())); - } - - // get the last verified date - if (rs.getTimestamp("LAST_VERIFIED") != null) { - user.setLastVerified(new Date(rs.getTimestamp("LAST_VERIFIED").getTime())); - } - - // add the user - users.add(user); - } - - // the select statement performs a left join since the desired - // user may not have any authorities - String authority = rs.getString("ROLE"); - if (StringUtils.isNotBlank(authority)) { - user.getAuthorities().add(Authority.valueOfAuthority(authority)); - } - } - - return users; - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public NiFiUser findUserById(String id) throws DataAccessException { - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the connection and obtain a statement - statement = connection.prepareStatement(SELECT_USER_BY_ID); - statement.setString(1, id); - - // execute the query - rs = statement.executeQuery(); - - // create the user - NiFiUser user = null; - - // go through the user and its roles - while (rs.next()) { - // create the user during the first iteration - if (user == null) { - user = new NiFiUser(); - user.setId(rs.getString("ID")); - user.setDn(rs.getString("DN")); - user.setUserName(rs.getString("USER_NAME")); - user.setUserGroup(rs.getString("USER_GROUP")); - user.setJustification(rs.getString("JUSTIFICATION")); - user.setStatus(AccountStatus.valueOfStatus(rs.getString("STATUS"))); - - // set the creation date - user.setCreation(new Date(rs.getTimestamp("CREATION").getTime())); - - // get the last accessed date - if (rs.getTimestamp("LAST_ACCESSED") != null) { - user.setLastAccessed(new Date(rs.getTimestamp("LAST_ACCESSED").getTime())); - } - - // get the last verified date - if (rs.getTimestamp("LAST_VERIFIED") != null) { - user.setLastVerified(new Date(rs.getTimestamp("LAST_VERIFIED").getTime())); - } - } - - // the select statement performs a left join since the desired - // user may not have any authorities - String authority = rs.getString("ROLE"); - if (StringUtils.isNotBlank(authority)) { - user.getAuthorities().add(Authority.valueOfAuthority(authority)); - } - } - - return user; - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public NiFiUser findUserByDn(String dn) throws DataAccessException { - PreparedStatement statement = null; - ResultSet rs = null; - try { - // create the connection and obtain a statement - statement = connection.prepareStatement(SELECT_USER_BY_DN); - statement.setString(1, dn); - - // execute the query - rs = statement.executeQuery(); - - // create the user - NiFiUser user = null; - - // go through the user and its roles - while (rs.next()) { - // create the user during the first iteration - if (user == null) { - user = new NiFiUser(); - user.setId(rs.getString("ID")); - user.setDn(rs.getString("DN")); - user.setUserName(rs.getString("USER_NAME")); - user.setUserGroup(rs.getString("USER_GROUP")); - user.setJustification(rs.getString("JUSTIFICATION")); - user.setStatus(AccountStatus.valueOfStatus(rs.getString("STATUS"))); - - // set the creation date - user.setCreation(new Date(rs.getTimestamp("CREATION").getTime())); - - // get the last accessed date - if (rs.getTimestamp("LAST_ACCESSED") != null) { - user.setLastAccessed(new Date(rs.getTimestamp("LAST_ACCESSED").getTime())); - } - - // get the last verified date - if (rs.getTimestamp("LAST_VERIFIED") != null) { - user.setLastVerified(new Date(rs.getTimestamp("LAST_VERIFIED").getTime())); - } - } - - // the select statement performs a left join since the desired - // user may not have any authorities - String authority = rs.getString("ROLE"); - if (StringUtils.isNotBlank(authority)) { - user.getAuthorities().add(Authority.valueOfAuthority(authority)); - } - } - - return user; - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public void createUser(NiFiUser user) throws DataAccessException { - if (user.getDn() == null) { - throw new IllegalArgumentException("User dn must be specified."); - } - - PreparedStatement statement = null; - ResultSet rs = null; - try { - final String id = UUID.nameUUIDFromBytes(user.getDn().getBytes(StandardCharsets.UTF_8)).toString(); - - // create a statement - statement = connection.prepareStatement(INSERT_USER, Statement.RETURN_GENERATED_KEYS); - statement.setString(1, id); - statement.setString(2, StringUtils.left(user.getDn(), 255)); - statement.setString(3, StringUtils.left(user.getUserName(), 100)); - statement.setString(4, StringUtils.left(user.getUserGroup(), 100)); - if (user.getLastVerified() != null) { - statement.setTimestamp(5, new java.sql.Timestamp(user.getLastVerified().getTime())); - } else { - statement.setTimestamp(5, null); - } - statement.setString(6, StringUtils.left(user.getJustification(), 500)); - statement.setString(7, user.getStatus().toString()); - - // insert the user - int updateCount = statement.executeUpdate(); - if (updateCount == 1) { - user.setId(id); - } else { - throw new DataAccessException("Unable to insert user."); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } catch (DataAccessException dae) { - throw dae; - } finally { - RepositoryUtils.closeQuietly(rs); - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public void deleteUser(String id) throws DataAccessException { - // ensure there are some authorities to create - PreparedStatement statement = null; - try { - // add each authority for the specified user - statement = connection.prepareStatement(DELETE_USER); - statement.setString(1, id); - - // insert the authorities - statement.executeUpdate(); - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } catch (DataAccessException dae) { - throw dae; - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public void updateUser(NiFiUser user) throws DataAccessException { - PreparedStatement statement = null; - try { - // create a statement - statement = connection.prepareStatement(UPDATE_USER); - statement.setString(1, StringUtils.left(user.getDn(), 255)); - statement.setString(2, StringUtils.left(user.getUserName(), 100)); - statement.setString(3, StringUtils.left(user.getUserGroup(), 100)); - statement.setString(6, StringUtils.left(user.getJustification(), 500)); - statement.setString(7, user.getStatus().toString()); - statement.setString(8, user.getId()); - - // set the last accessed time accordingly - if (user.getLastAccessed() == null) { - statement.setNull(4, Types.TIMESTAMP); - } else { - statement.setTimestamp(4, new java.sql.Timestamp(user.getLastAccessed().getTime())); - } - - // set the last verified time accordingly - if (user.getLastVerified() == null) { - statement.setNull(5, Types.TIMESTAMP); - } else { - statement.setTimestamp(5, new java.sql.Timestamp(user.getLastVerified().getTime())); - } - - // perform the update - int updateCount = statement.executeUpdate(); - if (updateCount != 1) { - throw new DataAccessException("Unable to update user."); - } - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } catch (DataAccessException dae) { - throw dae; - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public void updateGroupStatus(String group, AccountStatus status) throws DataAccessException { - PreparedStatement statement = null; - try { - // create a statement - statement = connection.prepareStatement(UPDATE_USER_GROUP_STATUS); - statement.setString(1, status.toString()); - statement.setString(2, group); - - // perform the update - statement.executeUpdate(); - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } catch (DataAccessException dae) { - throw dae; - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public void updateGroupVerification(String group, Date lastVerified) throws DataAccessException { - PreparedStatement statement = null; - try { - // create a statement - statement = connection.prepareStatement(UPDATE_USER_GROUP_VERIFICATION); - - // set the last verified time accordingly - if (lastVerified == null) { - statement.setNull(1, Types.TIMESTAMP); - } else { - statement.setTimestamp(1, new java.sql.Timestamp(lastVerified.getTime())); - } - - // set the group - statement.setString(2, group); - - // perform the update - statement.executeUpdate(); - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } catch (DataAccessException dae) { - throw dae; - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - - @Override - public void ungroup(String group) throws DataAccessException { - PreparedStatement statement = null; - try { - // create a statement - statement = connection.prepareStatement(UNGROUP_GROUP); - statement.setString(1, group); - - // perform the update - statement.executeUpdate(); - } catch (SQLException sqle) { - throw new DataAccessException(sqle); - } catch (DataAccessException dae) { - throw dae; - } finally { - RepositoryUtils.closeQuietly(statement); - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/300952a9/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountDisabledException.java ---------------------------------------------------------------------- diff --git a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountDisabledException.java b/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountDisabledException.java deleted file mode 100644 index e8b3d10..0000000 --- a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountDisabledException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.nifi.admin.service; - -/** - * Exception to indicate that the user account is disabled. - */ -public class AccountDisabledException extends RuntimeException { - - public AccountDisabledException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } - - public AccountDisabledException(Throwable cause) { - super(cause); - } - - public AccountDisabledException(String message, Throwable cause) { - super(message, cause); - } - - public AccountDisabledException(String message) { - super(message); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/300952a9/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountNotFoundException.java ---------------------------------------------------------------------- diff --git a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountNotFoundException.java b/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountNotFoundException.java deleted file mode 100644 index 88287ce..0000000 --- a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountNotFoundException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.nifi.admin.service; - -/** - * Exception to indicate that the user account is disabled. - */ -public class AccountNotFoundException extends RuntimeException { - - public AccountNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } - - public AccountNotFoundException(Throwable cause) { - super(cause); - } - - public AccountNotFoundException(String message, Throwable cause) { - super(message, cause); - } - - public AccountNotFoundException(String message) { - super(message); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/300952a9/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountPendingException.java ---------------------------------------------------------------------- diff --git a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountPendingException.java b/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountPendingException.java deleted file mode 100644 index dacc483..0000000 --- a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AccountPendingException.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.nifi.admin.service; - -/** - * Exception to indicate that the user has already submitting an account request - * and that request is still pending. - */ -public class AccountPendingException extends RuntimeException { - - public AccountPendingException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } - - public AccountPendingException(Throwable cause) { - super(cause); - } - - public AccountPendingException(String message, Throwable cause) { - super(message, cause); - } - - public AccountPendingException(String message) { - super(message); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/300952a9/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AdministrationException.java ---------------------------------------------------------------------- diff --git a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AdministrationException.java b/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AdministrationException.java deleted file mode 100644 index c0e8ac1..0000000 --- a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AdministrationException.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.nifi.admin.service; - -/** - * - */ -public class AdministrationException extends RuntimeException { - - public AdministrationException(Throwable cause) { - super(cause); - } - - public AdministrationException(String message, Throwable cause) { - super(message, cause); - } - - public AdministrationException(String message) { - super(message); - } - - public AdministrationException() { - } - -} http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/300952a9/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AuditService.java ---------------------------------------------------------------------- diff --git a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AuditService.java b/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AuditService.java deleted file mode 100644 index 0843bd8..0000000 --- a/nar-bundles/framework-bundle/framework/administration/src/main/java/org/apache/nifi/admin/service/AuditService.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.nifi.admin.service; - -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; -import org.apache.nifi.action.Action; -import org.apache.nifi.history.HistoryQuery; -import org.apache.nifi.history.History; -import org.apache.nifi.history.PreviousValue; - -/** - * Allows NiFi actions to be audited. - */ -public interface AuditService { - - /** - * Adds the specified actions. - * - * @param actions - * @throws AdministrationException - */ - void addActions(Collection<Action> actions); - - /** - * Finds the previous values for the specified property in the specified - * processor. Returns null if there are none. - * - * @param processorId - * @return - */ - Map<String, List<PreviousValue>> getPreviousValues(String processorId); - - /** - * Get the actions within the given date range. - * - * @param actionQuery - * @return - * @throws AdministrationException - */ - History getActions(HistoryQuery actionQuery); - - /** - * Get the details for the specified action id. If the action cannot be - * found, null is returned. - * - * @param actionId - * @return - */ - Action getAction(Integer actionId); - - /** - * Purges all action's that occurred before the specified end date. - * - * @param end - * @param purgeAction - * @throws AdministrationException - */ - void purgeActions(Date end, Action purgeAction); -}