package org.mindswap.swoop.refactoring; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.mindswap.swoop.utils.owlapi.OWLDescriptionFinder; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataProperty; import org.semanticweb.owl.model.OWLEntity; import org.semanticweb.owl.model.OWLException; import org.semanticweb.owl.model.OWLIndividual; import org.semanticweb.owl.model.OWLObjectProperty; import org.semanticweb.owl.model.OWLObjectQuantifiedRestriction; import org.semanticweb.owl.model.OWLObjectValueRestriction; import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLProperty; import org.semanticweb.owl.model.OWLRestriction; import org.semanticweb.owl.model.helper.OntologyHelper; /** * @author bernardo * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class OWLPropertyFinder { public static Set getPropertiesWithRange(OWLOntology onto, OWLClass clazz) throws OWLException{ Set references = OntologyHelper.entityUsage(onto, clazz); Set propSet = new HashSet(); Set result = new HashSet(); for (Iterator iter = references.iterator(); iter.hasNext(); ) { Object obj = iter.next(); if (obj instanceof OWLObjectProperty) propSet.add(obj); } for(Iterator it = propSet.iterator(); it.hasNext(); ){ OWLObjectProperty prop = (OWLObjectProperty)it.next(); //Set dom = reasoner.rangesOf(prop); Set dom = prop.getRanges(onto); if (dom.contains(clazz)){ result.add(prop); } } return result; } public static Set getPropertiesWithRangeValues(OWLOntology onto, OWLIndividual ind, Set indSet) throws OWLException{ Set result = new HashSet(); Iterator i = indSet.iterator(); while(i.hasNext()){ OWLIndividual indiv = (OWLIndividual)i.next(); Map values = indiv.getObjectPropertyValues(onto); Set keys = values.keySet(); Iterator j = keys.iterator(); while(j.hasNext()){ OWLObjectProperty prop = (OWLObjectProperty)j.next(); Iterator z = ((Set)values.get(prop)).iterator(); while(z.hasNext()){ OWLIndividual x = (OWLIndividual)z.next(); if(x.equals(ind)) result.add(prop); } } } return result; } }