package org.semanticweb.HermiT;
import org.protege.editor.owl.model.inference.AbstractProtegeOWLReasonerInfo;
import org.protege.editor.owl.model.inference.ReasonerPreferences;
import org.semanticweb.HermiT.Configuration.PrepareReasonerInferences;
import org.semanticweb.owlapi.reasoner.BufferingMode;
import org.semanticweb.owlapi.reasoner.OWLReasonerConfiguration;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
import org.semanticweb.owlapi.reasoner.ReasonerProgressMonitor;
public class ProtegeReasonerFactory extends AbstractProtegeOWLReasonerInfo {
protected final Reasoner.ReasonerFactory factory=new Reasoner.ReasonerFactory();
public BufferingMode getRecommendedBuffering() {
return BufferingMode.BUFFERING;
}
public OWLReasonerFactory getReasonerFactory() {
return factory;
}
public OWLReasonerConfiguration getConfiguration(ReasonerProgressMonitor monitor) {
Configuration configuration=factory.getProtegeConfiguration(null);
configuration.reasonerProgressMonitor=monitor;
try {
// see whether the Protege version of the user already has the reasoner preferences tab
AbstractProtegeOWLReasonerInfo.class.getMethod("getOWLModelManager",(Class<?>[])null);
// if we are not thrown into the catch block, we can initialise the reasoner preferences
ReasonerPreferences preferences=this.getOWLModelManager().getReasonerPreferences();
PrepareReasonerInferences prepareReasonerInferences=new PrepareReasonerInferences();
// class classification
prepareReasonerInferences.classClassificationRequired=preferences.isEnabled(
ReasonerPreferences.OptionalInferenceTask.SHOW_CLASS_UNSATISFIABILITY) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_EQUIVALENT_CLASSES) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_DISJOINT_CLASSES) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_SUPER_CLASSES) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_OBJECT_PROPERTY_DOMAINS) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_OBJECT_PROPERTY_RANGES) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_DATATYPE_PROPERTY_DOMAINS
);
// object property classification
prepareReasonerInferences.objectPropertyClassificationRequired=preferences.isEnabled(
ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_EQUIVALENT_OBJECT_PROPERTIES) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_INVERSE_PROPERTIES) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_SUPER_OBJECT_PROPERTIES) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_OBJECT_PROPERTY_UNSATISFIABILITY
);
// data property classification
prepareReasonerInferences.dataPropertyClassificationRequired=preferences.isEnabled(
ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_EQUIVALENT_DATATYPE_PROPERTIES) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_SUPER_DATATYPE_PROPERTIES) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_DATA_PROPERTY_ASSERTIONS
);
// realisation
prepareReasonerInferences.realisationRequired=preferences.isEnabled(
ReasonerPreferences.OptionalInferenceTask.SHOW_INFERED_CLASS_MEMBERS) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_TYPES
);
// object property realisation
prepareReasonerInferences.objectPropertyRealisationRequired=preferences.isEnabled(
ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_OBJECT_PROPERTY_ASSERTIONS
);
// data property realisation
prepareReasonerInferences.dataPropertyRealisationRequired=preferences.isEnabled(
ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_DATA_PROPERTY_ASSERTIONS
); // cannot be switched off, but is usually fast since we only compute obvious assertions by syntactic analysis
// object property domain & range
prepareReasonerInferences.objectPropertyDomainsRequired=preferences.isEnabled(
ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_OBJECT_PROPERTY_DOMAINS
);
prepareReasonerInferences.objectPropertyRangesRequired=preferences.isEnabled(
ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_OBJECT_PROPERTY_RANGES
);
// sameAs
prepareReasonerInferences.sameAs=preferences.isEnabled(
ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_DATA_PROPERTY_ASSERTIONS) ||
preferences.isEnabled(ReasonerPreferences.OptionalInferenceTask.SHOW_INFERRED_SAMEAS_INDIVIDUAL_ASSERTIONS
); // we also substitute same individuals now
configuration.prepareReasonerInferences=prepareReasonerInferences;
}
catch (java.lang.NoSuchMethodException e) {
// do nothing, prepareReasoner() will just execute all methods because the user's Protege
// version does not yet have the reasoner preferences tab that we can use to customize
// prepareReasoner()
}
return configuration;
}
public void initialise() throws Exception {
}
public void dispose() throws Exception {
}
}