use of org.drools.core.base.ClassObjectType in project drools by kiegroup.
the class PatternBuilder method processClassObjectType.
private void processClassObjectType(RuleBuildContext context, ObjectType objectType, Pattern pattern) {
if (objectType instanceof ClassObjectType) {
// make sure the Pattern is wired up to correct ClassObjectType and set as a target for rewiring
context.getPkg().getClassFieldAccessorStore().wireObjectType(objectType, pattern);
Class<?> cls = ((ClassObjectType) objectType).getClassType();
if (cls.getPackage() != null && !cls.getPackage().getName().equals("java.lang")) {
// register the class in its own package unless it is primitive or belongs to java.lang
TypeDeclaration typeDeclr = context.getKnowledgeBuilder().getAndRegisterTypeDeclaration(cls, cls.getPackage().getName());
context.setTypesafe(typeDeclr == null || typeDeclr.isTypesafe());
} else {
context.setTypesafe(true);
}
}
}
use of org.drools.core.base.ClassObjectType in project drools by kiegroup.
the class QueryBuilder method build.
public Pattern build(final RuleBuildContext context, final QueryDescr queryDescr) {
ObjectType queryObjectType = ClassObjectType.DroolsQuery_ObjectType;
final Pattern pattern = new Pattern(context.getNextPatternId(), // offset is 0 by default
0, queryObjectType, null);
final InternalReadAccessor extractor = PatternBuilder.getFieldReadAccessor(context, queryDescr, pattern, "name", null, true);
final QueryNameConstraint constraint = new QueryNameConstraint(extractor, queryDescr.getName());
PatternBuilder.registerReadAccessor(context, queryObjectType, "name", constraint);
// adds appropriate constraint to the pattern
pattern.addConstraint(constraint);
ObjectType argsObjectType = ClassObjectType.DroolsQuery_ObjectType;
InternalReadAccessor arrayExtractor = PatternBuilder.getFieldReadAccessor(context, queryDescr, null, argsObjectType, "elements", null, true);
QueryImpl query = ((QueryImpl) context.getRule());
String[] params;
String[] types;
int numParams = queryDescr.getParameters().length;
if (query.isAbductive()) {
params = Arrays.copyOf(queryDescr.getParameters(), queryDescr.getParameters().length + 1);
types = Arrays.copyOf(queryDescr.getParameterTypes(), queryDescr.getParameterTypes().length + 1);
} else {
params = queryDescr.getParameters();
types = queryDescr.getParameterTypes();
}
Declaration[] declarations = new Declaration[params.length];
Class<?> abductionReturnKlass = null;
if (query.isAbductive()) {
Abductive abductive = queryDescr.getTypedAnnotation(Abductive.class);
abductionReturnKlass = abductive.target();
params[numParams] = "";
types[numParams] = abductionReturnKlass.getName();
}
int i = 0;
try {
for (i = 0; i < params.length; i++) {
Declaration declr = pattern.addDeclaration(params[i]);
// this bit is different, notice its the ArrayElementReader that we wire up to, not the declaration.
ArrayElementReader reader = new ArrayElementReader(arrayExtractor, i, context.getDialect().getTypeResolver().resolveType(types[i]));
PatternBuilder.registerReadAccessor(context, argsObjectType, "elements", reader);
declr.setReadAccessor(reader);
declarations[i] = declr;
}
query.setParameters(declarations);
} catch (ClassNotFoundException e) {
context.addError(new DescrBuildError(context.getParentDescr(), queryDescr, e, "Unable to resolve type '" + types[i] + " for parameter" + params[i]));
}
context.setPrefixPattern(pattern);
if (query.isAbductive()) {
String returnName = "";
try {
AnnotationDescr ann = queryDescr.getAnnotation(Abductive.class);
Object[] argsVal = ((Object[]) ann.getValue("args"));
String[] args = argsVal != null ? Arrays.copyOf(argsVal, argsVal.length, String[].class) : null;
returnName = types[numParams];
ObjectType objectType = new ClassObjectType(abductionReturnKlass, false);
objectType = context.getPkg().getClassFieldAccessorStore().wireObjectType(objectType, (AbductiveQuery) query);
((AbductiveQuery) query).setReturnType(objectType, params, args, declarations);
} catch (NoSuchMethodException e) {
context.addError(new DescrBuildError(context.getParentDescr(), queryDescr, e, "Unable to resolve abducible constructor for type : " + returnName + " with types " + Arrays.toString(types)));
} catch (IllegalArgumentException e) {
context.addError(new DescrBuildError(context.getParentDescr(), queryDescr, e, e.getMessage()));
}
}
return pattern;
}
use of org.drools.core.base.ClassObjectType in project drools by kiegroup.
the class CepEspTest method testEventExpiration2.
@Test(timeout = 10000)
public void testEventExpiration2() throws Exception {
// read in the source
KieBaseConfiguration kbc = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
kbc.setOption(EventProcessingOption.STREAM);
KieBase kbase = loadKnowledgeBase(kbc, "test_CEP_EventExpiration2.drl");
Map<ObjectType, ObjectTypeNode> objectTypeNodes = ((KnowledgeBaseImpl) kbase).getRete().getObjectTypeNodes(EntryPointId.DEFAULT);
ObjectTypeNode node = objectTypeNodes.get(new ClassObjectType(StockTick.class));
assertNotNull(node);
// the expiration policy @expires(10m) should override the temporal operator usage
assertEquals(TimeIntervalParser.parse("10m")[0] + 1, node.getExpirationOffset());
}
use of org.drools.core.base.ClassObjectType in project drools by kiegroup.
the class BaseMannersTest method getLiteralConstraint.
private AlphaNodeFieldConstraint getLiteralConstraint(final Pattern pattern, final String fieldName, final int fieldValue) {
final Class clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();
final InternalReadAccessor extractor = store.getReader(clazz, fieldName);
final FieldValue field = new LongFieldImpl(fieldValue);
return new MvelConstraintTestUtil(fieldName + " == " + fieldValue, new LongFieldImpl(fieldValue), extractor);
}
use of org.drools.core.base.ClassObjectType in project drools by kiegroup.
the class BaseMannersTest method getLiteralConstraint.
private AlphaNodeFieldConstraint getLiteralConstraint(final Pattern pattern, final String fieldName, final boolean fieldValue) {
final Class clazz = ((ClassObjectType) pattern.getObjectType()).getClassType();
final InternalReadAccessor extractor = store.getReader(clazz, fieldName);
final FieldValue field = new BooleanFieldImpl(fieldValue);
return new MvelConstraintTestUtil(fieldName + " == " + fieldValue, new BooleanFieldImpl(fieldValue), extractor);
}
Aggregations