package br.ufes.inf.lprm.situation;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.drools.definition.KnowledgePackage;
import org.drools.definitions.rule.impl.RuleImpl;
import org.drools.rule.Rule;
public class SituationUtils {
public static List<Field> getSituationRoleFields(Class<?> sit) {
List<Field> situationRoleFields = new LinkedList<Field>();
//recursively gets fields on superclass tree
if (sit.getSuperclass() != null) {
situationRoleFields.addAll(getSituationRoleFields(sit.getSuperclass()));
}
Field[] fields = sit.getDeclaredFields();
for(Field field: fields) {
Role role = field.getAnnotation(Role.class);
if (role != null) situationRoleFields.add(field);
}
return situationRoleFields;
}
public static String getSituationMetaDataValue(Rule rule, String key) {
return (String) rule.getMetaData().get(key);
}
public static Collection<Rule> getRulesFromPackage(KnowledgePackage pkg) {
LinkedList<Rule> collection = new LinkedList<Rule>();
for (Object obj: pkg.getRules()) {
RuleImpl ruleImpl = (RuleImpl) obj;
Field ruleField;
try {
ruleField = ruleImpl.getClass().getDeclaredField("rule");
ruleField.setAccessible(true);
Rule rule = (Rule) ruleField.get(ruleImpl);
ruleField.setAccessible(false);
collection.add(rule);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return collection;
}
//public static
}