public List getProcessorEnactmentsByProcessorName()

in taverna-provenanceconnector/src/main/java/org/apache/taverna/provenance/lineageservice/ProvenanceQuery.java [1635:1701]


	public List<ProcessorEnactment> getProcessorEnactmentsByProcessorName(
			String workflowRunId, List<String> parentProcessorEnactmentIds,
			String processorName) {
		StringBuilder query = new StringBuilder();
		query.append("SELECT ")
				.append(ProcessorEnactmentTable.enactmentStarted).append(", ")
				.append(ProcessorEnactmentTable.enactmentEnded).append(", ")
				.append(ProcessorEnactmentTable.finalOutputsDataBindingId)
				.append(", ")
				.append(ProcessorEnactmentTable.initialInputsDataBindingId)
				.append(", ")
				.append(ProcessorEnactmentTable.ProcessorEnactment).append(".")
				.append(ProcessorEnactmentTable.processorId)
				.append(" AS procId, ")
				.append(ProcessorEnactmentTable.processIdentifier).append(", ")
				.append(ProcessorEnactmentTable.processEnactmentId)
				.append(", ")
				.append(ProcessorEnactmentTable.parentProcessorEnactmentId)
				.append(", ").append(ProcessorEnactmentTable.workflowRunId)
				.append(", ").append(ProcessorEnactmentTable.iteration)
				.append(", Processor.processorName FROM ")
				.append(ProcessorEnactmentTable.ProcessorEnactment)
				.append(" INNER JOIN Processor ON ")
				.append(ProcessorEnactmentTable.ProcessorEnactment).append(".")
				.append(ProcessorEnactmentTable.processorId)
				.append(" = Processor.processorId WHERE ")
				.append(ProcessorEnactmentTable.workflowRunId).append(" = ? ");

		if (processorName != null)
			// Specific processor
			query.append(" AND Processor.processorName = ? ");
		if ((parentProcessorEnactmentIds == null || parentProcessorEnactmentIds.isEmpty()) && processorName != null) {
			// null - ie. top level
			query.append(" AND " + ProcessorEnactmentTable.parentProcessorEnactmentId + " IS NULL");
		} else if (parentProcessorEnactmentIds != null) {
			// not null, ie. inside nested workflow
			query.append(" AND " + ProcessorEnactmentTable.parentProcessorEnactmentId + " IN (");
			for (int i=0; i<parentProcessorEnactmentIds.size(); i++) {
				query.append('?');
				if (i < (parentProcessorEnactmentIds.size()-1))
					query.append(',');
			}
			query.append(')');
		}

		ArrayList<ProcessorEnactment> procEnacts = new ArrayList<>();

		try (Connection connection = getConnection();
				PreparedStatement statement = connection.prepareStatement(query
						.toString())) {
			int pos = 1;
			statement.setString(pos++, workflowRunId);
			if (processorName != null)
				statement.setString(pos++, processorName);
			if (parentProcessorEnactmentIds != null)
				for (String parentId : parentProcessorEnactmentIds)
					statement.setString(pos++, parentId);
			ResultSet resultSet = statement.executeQuery();
			while (resultSet.next()) {
				ProcessorEnactment procEnact = readProcessorEnactment(resultSet);
				procEnacts.add(procEnact);
			}
		} catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e) {
			logger.warn("Could not execute query " + query, e);
		}
		return procEnacts;
	}