package tr.com.srdc.mdr.core.impl.composite; import java.util.Collections; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tr.com.srdc.mdr.core.api.composite.LanguageIdentification; import tr.com.srdc.mdr.core.api.composite.Organization; 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.Util; import tr.com.srdc.mdr.core.model.iso11179.AdministeredItemResource; import tr.com.srdc.mdr.core.model.iso11179.composite.LanguageIdentificationResource; import tr.com.srdc.mdr.core.model.iso11179.composite.OrganizationResource; import tr.com.srdc.mdr.core.model.iso11179.composite.ReferenceDocumentResource; 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; /** * An Administered Item may be described by one or more Reference Documents. For * each Reference Document, the Organization that originated the Reference * Document must be identified. * * @author anil * */ public class ReferenceDocumentImpl extends AbstractMDRResource implements ReferenceDocumentResource { private static final Logger logger = LoggerFactory .getLogger(ReferenceDocumentImpl.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 referenceDocumentIdentifier * Identifier for Reference Document * @param providedBy * Organization which provides the Documents * @param referenceDocumentTypeDescription * Optional. Type Descriptor for Reference Document * @param referenceDocumentLanguageIdentifier * Optional. Language Identifier for the Type Reference Document * @param referenceDocumentTitle * Optional. Title of the Reference Document * @param mdrDatabase */ public ReferenceDocumentImpl(Node n, EnhGraph g, String referenceDocumentIdentifier, OrganizationResource providedBy, String referenceDocumentTypeDescription, LanguageIdentificationResource referenceDocumentLanguageIdentifier, String referenceDocumentTitle, MDRDatabase mdrDatabase) { super(n, g, mdrDatabase); setSuperClass(mdrDatabase.getVocabulary().ReferenceDocument); setReferenceDocumentIdentifier(referenceDocumentIdentifier); addProvidedBy(providedBy); setReferenceDocumentTypeDescription(referenceDocumentTypeDescription); if (referenceDocumentLanguageIdentifier != null) { addReferenceDocumentLanguageIdentifier(referenceDocumentLanguageIdentifier); } setReferenceDocumentTitle(referenceDocumentTitle); } public ReferenceDocumentImpl(Resource resource, MDRDatabase mdrDatabase) { super(resource, mdrDatabase); } @Override public void setReferenceDocumentIdentifier( String referenceDocumentIdentifier) { if (Util.isNull(referenceDocumentIdentifier)) { throw new IllegalArgumentException( "Reference Document Identifier must be specified for ReferenceDocument"); } setPropertyValue( mdrDatabase.getVocabulary().referenceDocumentIdentifier, mdrDatabase.getUtil().createTypedLiteral( referenceDocumentIdentifier)); } @Override public String getReferenceDocumentIdentifier() { return getPropertyValue( mdrDatabase.getVocabulary().referenceDocumentIdentifier) .asLiteral().getString(); } @Override public void setReferenceDocumentTypeDescription( String referenceDocumentTypeDescription) { setPropertyValue( mdrDatabase.getVocabulary().referenceDocumentTypeDescription, mdrDatabase.getUtil().createTypedLiteral( referenceDocumentTypeDescription)); } @Override public String getReferenceDocumentTypeDescription() { RDFNode referenceDocumentTypeDescription = getPropertyValue(mdrDatabase .getVocabulary().referenceDocumentTypeDescription); if (referenceDocumentTypeDescription == null) { logger.debug("ReferenceDocument does not have referenceDocumentTypeDescription"); return null; } return referenceDocumentTypeDescription.asLiteral().getString(); } @Override public void addReferenceDocumentLanguageIdentifier( LanguageIdentificationResource referenceDocumentLanguageIdentifier) { if (referenceDocumentLanguageIdentifier != null) { addProperty( mdrDatabase.getVocabulary().referenceDocumentLanguageIdentifier, referenceDocumentLanguageIdentifier); } else { throw new IllegalArgumentException( "Null is not allowed as the value of the property to be added."); } } @Override public void removeReferenceDocumentLanguageIdentifier( LanguageIdentificationResource referenceDocumentLanguageIdentifier) { if (referenceDocumentLanguageIdentifier == null) { throw new IllegalArgumentException( "Null is not allowed as the value of the property to be removed."); } removeProperty( mdrDatabase.getVocabulary().referenceDocumentLanguageIdentifier, referenceDocumentLanguageIdentifier); } @Override public List<LanguageIdentificationResource> getReferenceDocumentLanguageIdentifiers() throws MDRException { NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().referenceDocumentLanguageIdentifier); return mdrDatabase.getUtil().createList(it, LanguageIdentificationResource.class); } @Override public void setReferenceDocumentTitle(String referenceDocumentTitle) { setPropertyValue(mdrDatabase.getVocabulary().referenceDocumentTitle, mdrDatabase.getUtil() .createTypedLiteral(referenceDocumentTitle)); } @Override public String getReferenceDocumentTitle() { RDFNode referenceDocumentTitle = getPropertyValue(mdrDatabase .getVocabulary().referenceDocumentTitle); if (referenceDocumentTitle == null) { logger.debug("ReferenceDocument does not have referenceDocumentTitle"); return null; } return referenceDocumentTitle.asLiteral().getString(); } @Override public void addProvidedBy(OrganizationResource providedBy) { if (providedBy == null) { throw new IllegalArgumentException( "Null is not allowed as the value of the property to be added."); } addProperty(mdrDatabase.getVocabulary().providedBy, providedBy); } @Override public void removeProvidedBy(OrganizationResource providedBy) { if (providedBy == null) { throw new IllegalArgumentException( "Null is not allowed as the value of the property to be removed."); } if (listProperties(mdrDatabase.getVocabulary().providedBy).toSet() .size() <= 1) { throw new IllegalArgumentException( "At least 1 providedBy must be specified for Reference Document"); } removeProperty(mdrDatabase.getVocabulary().providedBy, providedBy); } @Override public List<OrganizationResource> getProvidedBy() throws MDRException { NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().providedBy); return mdrDatabase.getUtil().createList(it, OrganizationResource.class); } @Override public void addDescribing(AdministeredItemResource describing) { if (describing == null) { throw new IllegalArgumentException( "Null is not allowed as the value of the property to be added."); } addProperty(mdrDatabase.getVocabulary().describing, describing); } @Override public void removeDescribing(AdministeredItemResource describing) { if (describing == null) { throw new IllegalArgumentException( "Null is not allowed as the value of the property to be removed."); } removeProperty(mdrDatabase.getVocabulary().describing, describing); } @Override public List<AdministeredItemResource> getDescribing() throws MDRException { NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().describing); return mdrDatabase.getUtil().createList(it, AdministeredItemResource.class); } // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ///// High-Level Interface Methods//////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// @Override public ReferenceDocumentResource asMDRResource() { return this; } @Override public String getIdentifier() { return this.getReferenceDocumentIdentifier(); } @Override public String getTypeDescription() { return this.getReferenceDocumentTypeDescription(); } @Override public List<LanguageIdentification> getLanguageIdentifications() throws MDRException { return Collections.<LanguageIdentification> unmodifiableList(this .getReferenceDocumentLanguageIdentifiers()); } @Override public String getTitle() { return this.getReferenceDocumentTitle(); } @Override public List<Organization> getProviderOrganizations() throws MDRException { return Collections .<Organization> unmodifiableList(this.getProvidedBy()); } }