Search in sources :

Example 1 with AnnotationValue

use of org.drools.model.AnnotationValue in project drools by kiegroup.

the class TypeDeclarationUtil method createTypeDeclaration.

public static TypeDeclaration createTypeDeclaration(KnowledgePackageImpl pkg, TypeMetaData metaType) {
    try {
        Class<?> typeClass = pkg.getTypeResolver().resolveType(metaType.getPackage() + "." + metaType.getName());
        TypeDeclaration typeDeclaration = createTypeDeclarationForBean(typeClass);
        for (Map.Entry<String, AnnotationValue[]> ann : metaType.getAnnotations().entrySet()) {
            switch(ann.getKey()) {
                case "role":
                    for (AnnotationValue annVal : ann.getValue()) {
                        if (annVal.getKey().equals("value") && annVal.getValue().equals("event")) {
                            typeDeclaration.setRole(Role.Type.EVENT);
                        }
                    }
                    break;
                case "duration":
                    for (AnnotationValue annVal : ann.getValue()) {
                        if (annVal.getKey().equals("value")) {
                            wireDurationAccessor(annVal.getValue().toString(), typeDeclaration);
                        }
                    }
                    break;
                case "timestamp":
                    for (AnnotationValue annVal : ann.getValue()) {
                        if (annVal.getKey().equals("value")) {
                            wireTimestampAccessor(annVal.getValue().toString(), typeDeclaration);
                        }
                    }
                    break;
                case "expires":
                    for (AnnotationValue annVal : ann.getValue()) {
                        if (annVal.getKey().equals("value")) {
                            long offset = TimeIntervalParser.parseSingle(annVal.getValue().toString());
                            typeDeclaration.setExpirationOffset(offset == -1L ? Long.MAX_VALUE : offset);
                        } else if (annVal.getKey().equals("policy")) {
                            typeDeclaration.setExpirationType(Enum.valueOf(Expires.Policy.class, annVal.getValue().toString()));
                        }
                    }
                    break;
                case "propertyReactive":
                    typeDeclaration.setPropertyReactive(true);
                    break;
                case "classReactive":
                    typeDeclaration.setPropertyReactive(false);
                    break;
                default:
                    throw new UnsupportedOperationException("Unknown annotation: " + ann.getKey());
            }
        }
        return typeDeclaration;
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    }
}
Also used : AnnotationValue(org.drools.model.AnnotationValue) Expires(org.kie.api.definition.type.Expires) TypeDeclaration(org.drools.core.rule.TypeDeclaration) Map(java.util.Map)

Aggregations

Map (java.util.Map)1 TypeDeclaration (org.drools.core.rule.TypeDeclaration)1 AnnotationValue (org.drools.model.AnnotationValue)1 Expires (org.kie.api.definition.type.Expires)1