/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.foundation.ontology.owl;
import java.util.List;
import java.util.Vector;
import java.util.logging.Logger;
import org.openflexo.foundation.Inspectors;
import org.openflexo.foundation.ontology.FlexoOntology;
import org.openflexo.foundation.ontology.OntologyObject;
import org.openflexo.foundation.ontology.OntologyObjectProperty;
import com.hp.hpl.jena.ontology.OntProperty;
public class OWLObjectProperty extends OWLProperty implements OntologyObjectProperty, Comparable<OntologyObjectProperty> {
static final Logger logger = Logger.getLogger(OntologyObjectProperty.class.getPackage().getName());
protected OWLObjectProperty(OntProperty anObjectProperty, OWLOntology ontology) {
super(anObjectProperty, ontology);
}
@Override
public void delete() {
getFlexoOntology().removeObjectProperty(this);
getOntResource().remove();
getFlexoOntology().updateConceptsAndProperties();
super.delete();
deleteObservers();
}
@Override
public String getClassNameKey() {
return "ontology_object_property";
}
@Override
public String getFullyQualifiedName() {
return "OntologyObjectProperty:" + getURI();
}
@Override
public String getInspectorName() {
if (getIsReadOnly()) {
return Inspectors.VE.ONTOLOGY_OBJECT_PROPERTY_READ_ONLY_INSPECTOR; // read-only
} else {
return Inspectors.VE.ONTOLOGY_OBJECT_PROPERTY_INSPECTOR;
}
}
@Override
public OntProperty getOntProperty() {
return super.getOntProperty();
}
@Override
public int compareTo(OntologyObjectProperty o) {
return COMPARATOR.compare(this, o);
}
@Override
public boolean isSuperConceptOf(OntologyObject concept) {
if (concept instanceof OWLObjectProperty) {
OWLObjectProperty ontologyObjectProperty = (OWLObjectProperty) concept;
return ontologyObjectProperty.getOntProperty().hasSuperProperty(getOntProperty(), false);
}
return false;
}
/**
* Return a vector of Ontology property, as a subset of getSubProperties(), which correspond to all properties necessary to see all
* properties belonging to supplied context, which is an ontology
*
* @param context
* @return
*/
@Override
public List<OWLObjectProperty> getSubProperties(FlexoOntology context) {
if (context instanceof OWLOntology) {
List<OWLObjectProperty> returned = new Vector<OWLObjectProperty>();
for (OWLObjectProperty p : ((OWLOntology) context).getAccessibleObjectProperties()) {
if (p.isSubConceptOf(this)) {
if (!returned.contains(p)) {
returned.add(p);
}
}
}
return returned;
}
return null;
}
@Override
public String getDisplayableDescription() {
return "<html>Object property <b>" + getName() + "</b><br>" + "<i>" + getURI() + "</i><br>" + "Domain: "
+ (getDomain() != null ? getDomain().getURI() : "?") + "<br>" + "Range: "
+ (getRange() != null ? getRange().getURI() : "?") + "<br>" + "</html>";
}
@Override
public boolean isOntologyObjectProperty() {
return true;
}
@Override
public boolean isLiteralRange() {
return getRange() == getOntology().getOntologyObject(RDFSURIDefinitions.RDFS_LITERAL_URI);
}
@Override
public String getHTMLDescription() {
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("Object property <b>" + getName() + "</b><br>");
sb.append("<i>" + getURI() + "</i><br>");
sb.append("<b>Asserted in:</b> " + getOntology().getURI() + "<br>");
sb.append("<b>Domain:</b> " + (getDomain() != null ? getDomain().getURI() : "?") + "<br>");
sb.append("<b>Range:</b> " + (getRange() != null ? getRange().getURI() : "?") + "<br>");
if (redefinesOriginalDefinition()) {
sb.append("<b>Redefines:</b> " + getOriginalDefinition() + "<br>");
}
sb.append("</html>");
return sb.toString();
}
@Override
protected void recursivelySearchRangeAndDomains() {
super.recursivelySearchRangeAndDomains();
for (OWLProperty aProperty : getSuperProperties()) {
propertiesTakingMySelfAsRange.addAll(aProperty.getPropertiesTakingMySelfAsRange());
propertiesTakingMySelfAsDomain.addAll(aProperty.getPropertiesTakingMySelfAsDomain());
}
OWLClass OBJECT_PROPERTY_CONCEPT = getOntology().getClass(OWL_OBJECT_PROPERTY_URI);
// OBJECT_PROPERTY_CONCEPT is generally non null but can be null when reading RDFS for example
if (OBJECT_PROPERTY_CONCEPT != null) {
propertiesTakingMySelfAsRange.addAll(OBJECT_PROPERTY_CONCEPT.getPropertiesTakingMySelfAsRange());
propertiesTakingMySelfAsDomain.addAll(OBJECT_PROPERTY_CONCEPT.getPropertiesTakingMySelfAsDomain());
}
}
}