in api/kogito-api-incubation-processes/src/main/java/org/kie/kogito/incubation/processes/ProcessIdParser.java [33:137]
public static <T extends LocalId> T parse(String id, Class<T> expected) {
StringTokenizer tok = new StringTokenizer(id, "/");
if (!tok.hasMoreTokens())
throwInvalid(id, "/");
String processes = tok.nextToken();
if (!processes.equals(LocalProcessId.PREFIX))
throwInvalid(id, LocalProcessId.PREFIX);
if (!tok.hasMoreTokens())
throwInvalid(id, "a process id");
String processId = tok.nextToken();
LocalProcessId localProcessId = new LocalProcessId(processId);
if (expected == localProcessId.getClass())
return (T) localProcessId;
if (!tok.hasMoreTokens())
throwInvalid(id, expected.getName());
String instances = tok.nextToken();
if (!instances.equals(ProcessInstanceId.PREFIX))
throwInvalid(id, ProcessInstanceId.PREFIX);
if (!tok.hasMoreTokens())
throwInvalid(id, "a process instance id");
String processInstanceId = tok.nextToken();
ProcessInstanceId instanceId = localProcessId.instances().get(processInstanceId);
if (expected == instanceId.getClass())
return (T) instanceId;
if (!tok.hasMoreTokens())
throwInvalid(id, expected.getName());
String nextToken = tok.nextToken();
if (nextToken.equals(TaskId.PREFIX)) {
TaskIds taskIds = instanceId.tasks();
if (expected == taskIds.getClass())
return (T) taskIds;
if (!tok.hasMoreTokens())
throwInvalid(id, expected.getName());
String task = tok.nextToken();
TaskId taskId = instanceId.tasks().get(task);
if (expected == taskId.getClass())
return (T) taskId;
if (!tok.hasMoreTokens() && expected.isInstance(taskId))
return (T) taskId;
String taskInstances = tok.nextToken();
if (!taskInstances.equals(TaskInstanceId.PREFIX))
throwInvalid(id, TaskInstanceId.PREFIX);
if (!tok.hasMoreTokens())
throwInvalid(id, "a task instance id");
String taskInstance = tok.nextToken();
TaskInstanceId taskInstanceId = taskId.instances().get(taskInstance);
if (expected == taskInstanceId.getClass())
return (T) taskInstanceId;
if (!tok.hasMoreTokens())
throwInvalid(id, expected.getName());
String attachmentsOrComments = tok.nextToken();
if (attachmentsOrComments.equals(AttachmentId.PREFIX)) {
String attachment = tok.nextToken();
AttachmentId attachmentId = taskInstanceId.attachments().get(attachment);
if (expected == attachmentId.getClass())
return (T) attachmentId;
if (expected.isInstance(attachmentId))
return (T) attachmentId;
if (tok.hasMoreTokens())
throwInvalid(id, "End of URI");
}
if (attachmentsOrComments.equals(CommentId.PREFIX)) {
String comment = tok.nextToken();
CommentId commentId = taskInstanceId.comments().get(comment);
if (expected == commentId.getClass())
return (T) commentId;
if (expected.isInstance(commentId))
return (T) commentId;
if (tok.hasMoreTokens())
throwInvalid(id, "End of URI");
}
throw new IllegalArgumentException("Invalid id " + id + "expected: " + expected.getName());
}
if (nextToken.equals(SignalId.PREFIX)) {
if (!tok.hasMoreTokens())
throwInvalid(id, expected.getName());
String signal = tok.nextToken();
SignalId signalId = instanceId.signals().get(signal);
if (expected == signalId.getClass())
return (T) signalId;
if (tok.hasMoreTokens())
throwInvalid(id, "End of URI");
if (expected.isInstance(signalId))
return (T) signalId;
}
throw new IllegalArgumentException("Invalid id " + id + "expected: " + expected.getName());
}