package org.sharegov.cirmx.maintenance; import java.util.HashSet; import java.util.Set; import org.semanticweb.owlapi.model.OWLClassExpression; import org.semanticweb.owlapi.model.OWLNamedIndividual; import org.sharegov.cirm.OWL; import org.sharegov.cirm.legacy.ServiceCaseManager; public abstract class ScriptAddClassificationToIndividual { private String ontoDirectory; private ServiceCaseManager serviceCaseManager; public static final ScriptAddClassificationToIndividual TEST = new ScriptAddClassificationToIndividual() { @Override public void init() { /** * To use this class, just modify the startup * config directory. Static init has unexpected * behavior as core classes(Startup) have changed. */ // StartUp.getConfig().set("ontologyConfigSet", "http://www.miamidade.gov/ontology#TestConfigSet"); // setOntoDirectory("C:/Work/scripts/testdb"); // StartUp.getConfig().set("metaDatabaseLocation", getOntoDirectory()); } }; public static final ScriptAddClassificationToIndividual PROD = new ScriptAddClassificationToIndividual() { @Override public void init() { // StartUp.getConfig().set("ontologyConfigSet", "http://www.miamidade.gov/ontology#ProdConfigSet"); // setOntoDirectory("C:/Work/scripts/proddb"); // StartUp.getConfig().set("metaDatabaseLocation", getOntoDirectory()); } }; public abstract void init(); public void run() { serviceCaseManager = ServiceCaseManager.getInstance(); Set<OWLNamedIndividual> unclassifiedActivities = findAllUnclassifiedActivities(); serviceCaseManager.classifyAsActivity(unclassifiedActivities, "SABBAS", null); Set<OWLNamedIndividual> unclassifiedLegacyTriggers = findAllUnclassifiedQuestionTriggers(); serviceCaseManager.classifyAsQuestionTrigger(unclassifiedLegacyTriggers, "SABBAS", null); } public static void main(String[] args) { TEST.run(); //PROD.run(); } public Set<OWLNamedIndividual> findAllUnclassifiedActivities() { Set<OWLNamedIndividual> activityIndividualsMissingClassDeclarations = new HashSet<OWLNamedIndividual>(); for(OWLNamedIndividual activity: serviceCaseManager.getAllActivityIndividuals()) { Set<OWLClassExpression> classes = activity.getTypes(OWL.ontology().getImportsClosure()); if(!classes.contains(OWL.owlClass("legacy:Activity"))) { activityIndividualsMissingClassDeclarations.add(activity); }else { if(activityIndividualsMissingClassDeclarations.contains(activity)) activityIndividualsMissingClassDeclarations.remove(activity); } } return activityIndividualsMissingClassDeclarations; } public Set<OWLNamedIndividual> findAllUnclassifiedQuestionTriggers() { Set<OWLNamedIndividual> questionTriggerIndividualsMissingClassDeclarations = new HashSet<OWLNamedIndividual>(); for(OWLNamedIndividual serviceQuestion : OWL.reasoner().getInstances(OWL.parseDL("legacy:ServiceQuestion and legacy:hasActivityAssignment min 1", OWL.ontology()),true).getFlattened()) { for(OWLNamedIndividual legacyTrigger: OWL.objectProperties(serviceQuestion, "legacy:hasActivityAssignment")) { Set<OWLClassExpression> classes = legacyTrigger.getTypes(OWL.ontology().getImportsClosure()); if(classes.size() == 0) { questionTriggerIndividualsMissingClassDeclarations.add(legacyTrigger); } else { //empty class axiom declaration but proper type not known System.out.println(legacyTrigger.getIRI().toString()); } } } return questionTriggerIndividualsMissingClassDeclarations; } public String getOntoDirectory() { return ontoDirectory; } public void setOntoDirectory(String ontoDirectory) { this.ontoDirectory = ontoDirectory; } public ServiceCaseManager getServiceCaseManager() { return serviceCaseManager; } public void setServiceCaseManager(ServiceCaseManager serviceCaseManager) { this.serviceCaseManager = serviceCaseManager; } }