package tr.com.srdc.mdr.core.impl.composite; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tr.com.srdc.mdr.core.model.AbstractMDRResource; import tr.com.srdc.mdr.core.model.MDRResourceFactory; import tr.com.srdc.mdr.core.model.Util; import tr.com.srdc.mdr.core.model.iso11179.composite.DatatypeResource; import tr.com.srdc.mdr.core.store.MDRDatabase; import com.hp.hpl.jena.enhanced.EnhGraph; import com.hp.hpl.jena.graph.Node; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; /** * * A Datatype is designated by a data type name, and described by a datatype * description. The datatype name is usually drawn from some external source, * which is designated by a datatype scheme reference. Additional information * may optionally be provided using the datatype annotation. * * @author anil * @author mert * */ public class DatatypeImpl extends AbstractMDRResource implements DatatypeResource { private static final Logger logger = LoggerFactory .getLogger(DatatypeImpl.class); /** * Instead of calling the constructor of this class, use * {@link MDRResourceFactory#createDatatype(String, String, String, String)} * to avoid entering illegal states. * * @param n * Mostly created by <code>Node.createURI()</code> * @param g * The graph which holds all triples. * @param datatypeName * @param datatypeDescription * Optional. * @param datatypeSchemeReference * @param datatypeAnnotation * Optional. * @param mdrDatabase */ public DatatypeImpl(Node n, EnhGraph g, String datatypeName, String datatypeDescription, String datatypeSchemeReference, String datatypeAnnotation, MDRDatabase mdrDatabase) { super(n, g, mdrDatabase); setSuperClass(mdrDatabase.getVocabulary().Datatype); setDatatypeName(datatypeName); setDatatypeDescription(datatypeDescription); setDatatypeSchemeReference(datatypeSchemeReference); setDatatypeAnnotation(datatypeAnnotation); } public DatatypeImpl(Resource resource, MDRDatabase mdrDatabase) { super(resource, mdrDatabase); } @Override public void setDatatypeName(String datatypeName) { if (Util.isNull(datatypeName)) { throw new IllegalArgumentException( "Datatype Name must be specified for Datatype"); } setPropertyValue(mdrDatabase.getVocabulary().datatypeName, mdrDatabase .getUtil().createTypedLiteral(datatypeName)); } @Override public String getDatatypeName() { RDFNode datatypeName = getPropertyValue(mdrDatabase.getVocabulary().datatypeName); return datatypeName.asLiteral().getString(); } @Override public void setDatatypeDescription(String datatypeDescription) { setPropertyValue(mdrDatabase.getVocabulary().datatypeDescription, mdrDatabase.getUtil().createTypedLiteral(datatypeDescription)); } @Override public String getDatatypeDescription() { RDFNode datatypeDescription = getPropertyValue(mdrDatabase .getVocabulary().datatypeDescription); if (datatypeDescription == null) { logger.debug("DataType does not have datatypeDescription"); return null; } return datatypeDescription.asLiteral().getString(); } @Override public void setDatatypeSchemeReference(String datatypeSchemeReference) { if (Util.isNull(datatypeSchemeReference)) { throw new IllegalArgumentException( "Datatype Scheme Reference must be specified for Datatype"); } setPropertyValue( mdrDatabase.getVocabulary().datatypeSchemeReference, mdrDatabase.getUtil().createTypedLiteral( datatypeSchemeReference)); } @Override public String getDatatypeSchemeReference() { RDFNode datatypeSchemeReference = getPropertyValue(mdrDatabase .getVocabulary().datatypeSchemeReference); return datatypeSchemeReference.asLiteral().getString(); } @Override public void setDatatypeAnnotation(String datatypeAnnotation) { setPropertyValue(mdrDatabase.getVocabulary().datatypeAnnotation, mdrDatabase.getUtil().createTypedLiteral(datatypeAnnotation)); } @Override public String getDatatypeAnnotation() { RDFNode datatypeAnnotation = getPropertyValue(mdrDatabase .getVocabulary().datatypeAnnotation); if (datatypeAnnotation == null) { logger.debug("DataType does not have datatypeAnnotation"); return null; } return datatypeAnnotation.asLiteral().getString(); } // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ///// High-Level Interface Methods//////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// @Override public DatatypeResource asMDRResource() { return this; } @Override public String getName() { return this.getDatatypeName(); } @Override public String getSchemeReference() { return this.getDatatypeSchemeReference(); } }