package tr.com.srdc.mdr.core.impl.composite; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tr.com.srdc.mdr.core.api.ai.ClassificationScheme; import tr.com.srdc.mdr.core.impl.ai.ClassificationSchemeImpl; import tr.com.srdc.mdr.core.model.AbstractMDRResource; import tr.com.srdc.mdr.core.model.MDRException; import tr.com.srdc.mdr.core.model.MDRResourceFactory; import tr.com.srdc.mdr.core.model.iso11179.AdministeredItemResource; import tr.com.srdc.mdr.core.model.iso11179.ClassificationSchemeResource; import tr.com.srdc.mdr.core.model.iso11179.composite.ClassificationSchemeItemAssociationResource; import tr.com.srdc.mdr.core.model.iso11179.composite.ClassificationSchemeItemResource; 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.NodeIterator; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; /** * * A Classification Scheme Item represents an individual item within a * Classification Scheme.<br> * * @author anil * @author mert */ public class ClassificationSchemeItemImpl extends AbstractMDRResource implements ClassificationSchemeItemResource { private static final Logger logger = LoggerFactory .getLogger(ClassificationSchemeItemImpl.class); /** * Instead of calling the constructor of this class, use * {@link MDRResourceFactory#createClassificationSchemeItem(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 classificationScheme * Classification Scheme which contains the Item * @param classificationSchemeItemTypeName * Optional. The name of the type of the Classification Scheme * Item. * @param classificationSchemeItemValue * Optional. An instance of a Classification Scheme Item. * @param mdrDatabase */ public ClassificationSchemeItemImpl(Node n, EnhGraph g, ClassificationSchemeResource classificationScheme, String classificationSchemeItemTypeName, String classificationSchemeItemValue, MDRDatabase mdrDatabase) { super(n, g, mdrDatabase); setSuperClass(mdrDatabase.getVocabulary().ClassificationSchemeItem); setClassificationSchemeItemTypeName(classificationSchemeItemTypeName); setClassificationSchemeItemValue(classificationSchemeItemValue); setContainedIn(classificationScheme); } public ClassificationSchemeItemImpl(Resource resource, MDRDatabase mdrDatabase) { super(resource, mdrDatabase); } @Override public void setClassificationSchemeItemTypeName( String classificationSchemeItemTypeName) { setPropertyValue( mdrDatabase.getVocabulary().classificationSchemeItemTypeName, mdrDatabase.getUtil().createTypedLiteral( classificationSchemeItemTypeName)); } @Override public String getClassificationSchemeItemTypeName() { RDFNode classificationSchemeItemTypeName = getPropertyValue(mdrDatabase .getVocabulary().classificationSchemeItemTypeName); if (classificationSchemeItemTypeName == null) { logger.debug("ClassificationSchemeItem does not have classificationSchemeItemTypeName"); return null; } return classificationSchemeItemTypeName.asLiteral().getString(); } @Override public void setClassificationSchemeItemValue( String classificationSchemeItemValue) { setPropertyValue( mdrDatabase.getVocabulary().classificationSchemeItemValue, mdrDatabase.getUtil().createTypedLiteral( classificationSchemeItemValue)); } @Override public String getClassificationSchemeItemValue() { RDFNode classificationSchemeItemValue = getPropertyValue(mdrDatabase .getVocabulary().classificationSchemeItemValue); if (classificationSchemeItemValue == null) { logger.debug("ClassificationSchemeItem does not have classificationSchemeItemValue"); return null; } return classificationSchemeItemValue.asLiteral().getString(); } @Override public void addClassifying(AdministeredItemResource administeredItem) { if (administeredItem == null) { throw new IllegalArgumentException( "Null is not a valid value for adding classifying Administered Item to Classification Scheme Item."); } addProperty(mdrDatabase.getVocabulary().classifying, administeredItem); } @Override public void removeClassifying(AdministeredItemResource administeredItem) { if (administeredItem == null) { throw new IllegalArgumentException( "Null is not allowed as the value of the Administered Item to be removed."); } removeProperty(mdrDatabase.getVocabulary().classifying, administeredItem); } @Override public List<AdministeredItemResource> getClassifyings() throws MDRException { NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().classifying); return mdrDatabase.getUtil().createList(it, AdministeredItemResource.class); } @Override public void setContainedIn(ClassificationSchemeResource classificationScheme) { if (classificationScheme == null) { throw new IllegalArgumentException( "Classification Scheme must be specified for ClassificationSchemeItem."); } setPropertyValue(mdrDatabase.getVocabulary().containedIn, classificationScheme); } @Override public ClassificationSchemeResource getContainedIn() { return new ClassificationSchemeImpl( getPropertyResourceValue(mdrDatabase.getVocabulary().containedIn), mdrDatabase); } @Override public void addCSIAssociatedIn( ClassificationSchemeItemAssociationResource csiRelationshipAssociation) { if (csiRelationshipAssociation == null) { throw new IllegalArgumentException( "Null is not a valid value for adding Classification Scheme Item Association to Classification Scheme Item."); } addProperty(mdrDatabase.getVocabulary().csiAssociatedIn, csiRelationshipAssociation); } @Override public void removeCSIAssociatedIn( ClassificationSchemeItemAssociationResource csiRelationshipAssociation) { if (csiRelationshipAssociation == null) { throw new IllegalArgumentException( "Null is not allowed as the value of the property to be removed."); } removeProperty(mdrDatabase.getVocabulary().csiAssociatedIn, csiRelationshipAssociation); } @Override public List<ClassificationSchemeItemAssociationResource> getCSIAssociatedIns() throws MDRException { NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().csiAssociatedIn); return mdrDatabase.getUtil().createList(it, ClassificationSchemeItemAssociationResource.class); } // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ///// High-Level Interface Methods//////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// @Override public ClassificationSchemeItemResource asMDRResource() { return this; } @Override public ClassificationScheme getClassificationScheme() { return this.getContainedIn(); } @Override public String getTypeName() { return this.getClassificationSchemeItemTypeName(); } @Override public String getItemValue() { return this.getClassificationSchemeItemValue(); } }