package tr.com.srdc.mdr.core.impl.composite; import java.util.Calendar; import java.util.List; import javax.xml.bind.DatatypeConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.EnumeratedValueDomainResource; import tr.com.srdc.mdr.core.model.iso11179.composite.PermissibleValueResource; import tr.com.srdc.mdr.core.model.iso11179.composite.ValueMeaningResource; import tr.com.srdc.mdr.core.model.iso11179.composite.ValueResource; 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 Permissible Value is an expression of a Value Meaning within an Enumerated * Value Domain. It is one of a set of such values that comprises an Enumerated * Value Domain. Each Permissible Value is associated with a Value Meaning. * * @author anil * */ public class PermissibleValueImpl extends AbstractMDRResource implements PermissibleValueResource { private static final Logger logger = LoggerFactory .getLogger(PermissibleValueImpl.class); /** * Instead of calling the constructor of this class, use * {@link MDRResourceFactory#createPermissibleValue(Calendar, Calendar, ValueResource, ValueMeaningResource)} * to avoid entering illegal states. * * @param n * Mostly created by <code>Node.createURI()</code>. * @param g * The graph which holds all triples. * @param permissibleValueBeginDate * @param permissibleValueEndDate * Optional. * @param hasPermittedValue * Value of the Enumeration * @param hasPermissibleValueMeaning * meaning of the Enumeration Value * @param mdrDatabase * */ public PermissibleValueImpl(Node n, EnhGraph g, Calendar permissibleValueBeginDate, Calendar permissibleValueEndDate, ValueResource hasPermittedValue, ValueMeaningResource hasPermissibleValueMeaning, MDRDatabase mdrDatabase) { super(n, g, mdrDatabase); setSuperClass(mdrDatabase.getVocabulary().PermissibleValue); setPermissibleValueBeginDate(permissibleValueBeginDate); setPermissibleValueEndDate(permissibleValueEndDate); setHasPermissibleValueMeaning(hasPermissibleValueMeaning); setHasPermittedValue(hasPermittedValue); } public PermissibleValueImpl(Resource resource, MDRDatabase mdrDatabase) { super(resource, mdrDatabase); } @Override public void setPermissibleValueBeginDate(Calendar permissibleValueBeginDate) { if (permissibleValueBeginDate == null) { throw new IllegalArgumentException( "Permissible Value Begin Date must be specified for PermissibleValue"); } setPropertyValue( mdrDatabase.getVocabulary().permissibleValueBeginDate, mdrDatabase.getOntModel().createTypedLiteral( DatatypeConverter .printDateTime(permissibleValueBeginDate))); } @Override public Calendar getPermissibleValueBeginDate() { RDFNode permissibleValueBeginDate = getPropertyValue(mdrDatabase .getVocabulary().permissibleValueBeginDate); return DatatypeConverter.parseDateTime(permissibleValueBeginDate .asLiteral().getLexicalForm()); } @Override public void setPermissibleValueEndDate(Calendar permissibleValueEndDate) { if (permissibleValueEndDate == null) { setPropertyValue( mdrDatabase.getVocabulary().permissibleValueEndDate, mdrDatabase.getUtil().createTypedLiteral(null)); } else { setPropertyValue( mdrDatabase.getVocabulary().permissibleValueEndDate, mdrDatabase.getOntModel().createTypedLiteral( DatatypeConverter .printDateTime(permissibleValueEndDate))); } } @Override public Calendar getPermissibleValueEndDate() { RDFNode permissibleValueEndDate = getPropertyValue(mdrDatabase .getVocabulary().permissibleValueEndDate); if (permissibleValueEndDate == null) { logger.debug("PermissibleValue does not have permissibleValueEndDate"); return null; } return DatatypeConverter.parseDateTime(permissibleValueEndDate .asLiteral().getLexicalForm()); } @Override public void setHasPermittedValue(ValueResource hasPermittedValue) { if (hasPermittedValue == null) { throw new IllegalArgumentException( "Value must be specified for PermissibleValue."); } setPropertyValue(mdrDatabase.getVocabulary().hasPermittedValue, hasPermittedValue); } @Override public ValueResource getHasPermittedValue() { Resource hasPermittedValue = getPropertyResourceValue(mdrDatabase .getVocabulary().hasPermittedValue); return new ValueImpl(hasPermittedValue, mdrDatabase); } @Override public void setHasPermissibleValueMeaning( ValueMeaningResource hasPermissibleValueMeaning) { if (hasPermissibleValueMeaning == null) { throw new IllegalArgumentException( "Value Meaning must be specified for PermissibleValue."); } setPropertyValue( mdrDatabase.getVocabulary().hasPermissibleValueMeaning, hasPermissibleValueMeaning); } @Override public ValueMeaningResource getHasPermissibleValueMeaning() { Resource hasPermissibleValueMeaning = getPropertyResourceValue(mdrDatabase .getVocabulary().hasPermissibleValueMeaning); return new ValueMeaningImpl(hasPermissibleValueMeaning, mdrDatabase); } @Override public void addContainedInPermissibleValueSet( EnumeratedValueDomainResource containedInPermissibleValueSet) { if (containedInPermissibleValueSet == null) { throw new IllegalArgumentException( "Null is not allowed as a value of the property to be added."); } addProperty(mdrDatabase.getVocabulary().containedInPermissibleValueSet, containedInPermissibleValueSet); } @Override public void removeContainedInPermissibleValueSet( EnumeratedValueDomainResource containedInPermissibleValueSet) { if (containedInPermissibleValueSet == null) { throw new IllegalArgumentException( "Null is not allowed as a value of the property to be removed."); } removeProperty( mdrDatabase.getVocabulary().containedInPermissibleValueSet, containedInPermissibleValueSet); } @Override public List<EnumeratedValueDomainResource> getContainedInPermissibleValueSets() throws MDRException { NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().containedInPermissibleValueSet); return mdrDatabase.getUtil().createList(it, EnumeratedValueDomainResource.class); } // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ///// High-Level Interface Methods//////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// @Override public void delete() { this.getHasPermittedValue().delete(); this.remove(); } @Override public PermissibleValueResource asMDRResource() { return this; } @Override public Calendar getBeginDate() { return this.getPermissibleValueBeginDate(); } @Override public Calendar getEndDate() { return this.getPermissibleValueEndDate(); } @Override public String getValueMeaningIdentifier() { return this.getHasPermissibleValueMeaning().getValueMeaningIdentifier(); } @Override public String getValueItem() { return this.getHasPermittedValue().getValueItem(); } @Override public String getValueMeaningDescription() { return this.getHasPermissibleValueMeaning() .getValueMeaningDescription(); } }