/*
* (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.logging.Logger;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
public class ObjectPropertyStatement extends PropertyStatement {
private static final Logger logger = Logger.getLogger(ObjectPropertyStatement.class.getPackage().getName());
private OWLObjectProperty property;
private OWLObject<?> statementObject;
private Literal literal;
public ObjectPropertyStatement(OWLObject<?> subject, Statement s) {
super(subject, s);
property = getOntology().getObjectProperty(s.getPredicate().getURI());
if (s.getObject() instanceof Resource) {
statementObject = getOntology().retrieveOntologyObject((Resource) s.getObject());
/*if (statementObject instanceof FlexoOntology) {
System.out.println("OK, i have my ontology with resource "+s.getObject().getClass().getName());
System.out.println("resource: "+s.getObject());
System.out.println("uri: "+((Resource)s.getObject()).getURI());
}*/
if (statementObject == null) {
logger.warning("Ontology: " + getOntology() + " cannot retrieve " + s.getObject() + " for statement " + s);
}
} else if (s.getObject() instanceof Literal) {
literal = (Literal) s.getObject();
} else {
logger.warning("ObjectPropertyStatement: object is not a Resource nor a Litteral !");
}
}
@Override
public OWLObjectProperty getPredicate() {
return (OWLObjectProperty) super.getPredicate();
}
@Override
public Literal getLiteral() {
return literal;
}
@Override
public String getClassNameKey() {
return "object_property_statement";
}
@Override
public String getFullyQualifiedName() {
return "ObjectPropertyStatement: " + getStatement();
}
@Override
public OWLObjectProperty getProperty() {
return property;
}
public OWLObject<?> getStatementObject() {
return statementObject;
}
/**
* Creates a new Statement equals to this one with a new Object value
*
* @param anObject
*/
public final void setStatementObject(OWLObject<?> anObject) {
// Take care to this point: this object will disappear and be replaced by a new one
// during updateOntologyStatements() !!!!!
// logger.info("Change object from="+getStatementObject().getURI()+" to="+anObject.getURI());
getSubject().removePropertyStatement(this);
getSubject().getOntResource().addProperty(getProperty().getOntProperty(), anObject.getResource());
getSubject().updateOntologyStatements();
statementObject = anObject;
}
@Override
public String toString() {
if (hasLitteralValue()) {
return (isAnnotationProperty() ? "(A) " : "") + getSubject().getName() + " " + getProperty().getName() + "=\"" + getLiteral()
+ "\" language=" + getLanguage();
} else {
return (isAnnotationProperty() ? "(A) " : "") + getSubject().getName() + " " + getProperty().getName() + " "
+ (getStatementObject() != null ? getStatementObject().getName() : getStatementObject());
}
}
@Override
public boolean isAnnotationProperty() {
return getProperty().isAnnotationProperty();
}
}