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;
}