in api/kogito-api-incubation-rules/src/main/java/org/kie/kogito/incubation/rules/RuleUnitIdParser.java [35:74]
public static <T extends LocalId> T parse(String id, Class<T> expected) {
StringTokenizer tok = new StringTokenizer(id, "/");
String prefix = tok.nextToken();
if (!prefix.equals(RuleUnitId.PREFIX))
throw newError(id, RuleUnitId.PREFIX);
String ruleUnit = tok.nextToken();
RuleUnitId ruleUnitId = new RuleUnitId(ruleUnit);
if (expected == RuleUnitId.class)
return (T) ruleUnitId;
if (!tok.hasMoreTokens() && expected == LocalId.class)
return (T) ruleUnitId;
String instanceOrQuery = tok.nextToken();
if (instanceOrQuery.equals(QueryId.PREFIX)) {
String query = tok.nextToken();
QueryId queryId = ruleUnitId.queries().get(query);
if (expected == QueryId.class)
return (T) queryId;
if (!tok.hasMoreTokens() && expected == LocalId.class)
return (T) queryId;
}
if (instanceOrQuery.equals(RuleUnitInstanceId.PREFIX)) {
String instanceId = tok.nextToken();
RuleUnitInstanceId ruleUnitInstanceId = ruleUnitId.instances().get(instanceId);
if (expected == RuleUnitInstanceId.class)
return (T) ruleUnitInstanceId;
if (!tok.hasMoreTokens() && expected == LocalId.class)
return (T) ruleUnitInstanceId;
if (!tok.nextToken().equals(QueryId.PREFIX))
throw newError(id, QueryId.PREFIX);
String query = tok.nextToken();
InstanceQueryId queryId = ruleUnitInstanceId.queries().get(query);
if (expected == InstanceQueryId.class)
return (T) queryId;
if (!tok.hasMoreTokens() && expected == LocalId.class)
return (T) queryId;
}
throw newError(id, "instances or queries");
}