package tr.com.srdc.mdr.core.impl.ai;
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.ConceptualDomainResource;
import tr.com.srdc.mdr.core.model.iso11179.NonEnumeratedConceptualDomainResource;
import tr.com.srdc.mdr.core.model.iso11179.NonEnumeratedValueDomainResource;
import tr.com.srdc.mdr.core.model.iso11179.ValueDomainResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.AdministeredItemContextResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.AdministrationRecordResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.DatatypeResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.OrganizationResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.RegistrationAuthorityResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.StewardshipRelationshipResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.SubmissionRelationshipResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.UnitOfMeasureResource;
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.Resource;
/**
*
* A Value Domain that is specified by a description rather than a list of all
* Permissible Values.
*
* @author serike
*
*/
public class NonEnumeratedValueDomainImpl extends ValueDomainImpl implements
NonEnumeratedValueDomainResource {
/**
* Instead of calling the constructor of this class, use
* {@link MDRResourceFactory#createNonEnumeratedValueDomain(AdministrationRecordResource, DatatypeResource, UnitOfMeasureResource, Integer, String, StewardshipRelationshipResource, SubmissionRelationshipResource, RegistrationAuthorityResource, AdministeredItemContextResource, ConceptualDomainResource, String, NonEnumeratedConceptualDomainResource)
* to avoid entering illegal states.
*
* @param n
* Mostly created by <code>Node.createURI()</code>.
* @param g
* The grapwhich holds all triples.
* @param valueDomainAdministrationRecord
* The Administration Record for a {@link ValueDomainResource}.
* @param valueDomainDatatype
* The Datatype used in a Value Domain.
* @param valueDomainUnitOfMeasure
* The unit of measure used in a Value Domain.
* @param valueDomainMaximumCharacterQuantity
* The maximum number of characters to represent the Data Element value.
* @param valueDomainFormat
* A template for the structure of the presentation of the Value(s).
* EXAMPLE – YYYY-MM-DD for a date.
* @param administeredBy
* An Administered Item is administered by an
* {@link OrganizationResource} represented by the
* {@link StewardshipRelationshipResource}.
* @param submittedBy
* An Administered Item is submitted by an {@link OrganizationResource}
* represented by the {@link SubmissionRelationshipResource}.
* @param registeredBy
* An {@link AdministeredItemResource} is registered by a
* {@link RegistrationAuthorityResource}.
* @param having
* An {@link AdministeredItemResource} has to have at least one
* {@link AdministeredItemContextResource}.
* @param representingConceptualDomainRepresentation
* An {@link ValueDomainResource} has to have at least one
* {@link ConceptualDomainResource}.
* @param nonEnumeratedDomainDescription
* A description or specification of a rule, reference, or range for a
* set of all Permissible Values for the Value Domain.
* @param representingNonEnumeratedConceptualDomainRepresentation
* An {@link NonEnumeratedValueDomainResource} has to have at least one
* {@link NonEnumeratedConceptualDomainResource}.
* @param mdrDatabase
*/
public NonEnumeratedValueDomainImpl(
Node n,
EnhGraph g,
AdministrationRecordResource valueDomainAdministrationRecord,
DatatypeResource valueDomainDatatype,
UnitOfMeasureResource valueDomainUnitOfMeasure,
Integer valueDomainMaximumCharacterQuantity,
String valueDomainFormat,
StewardshipRelationshipResource administeredBy,
SubmissionRelationshipResource submittedBy,
RegistrationAuthorityResource registeredBy,
AdministeredItemContextResource having,
ConceptualDomainResource representingConceptualDomainRepresentation,
String nonEnumeratedDomainDescription,
NonEnumeratedConceptualDomainResource representingNonEnumeratedConceptualDomainRepresentation,
MDRDatabase mdrDatabase) {
super(n, g, valueDomainAdministrationRecord, valueDomainDatatype,
valueDomainUnitOfMeasure, valueDomainMaximumCharacterQuantity,
valueDomainFormat, administeredBy, submittedBy, registeredBy,
having, representingConceptualDomainRepresentation, mdrDatabase);
setSuperClass(mdrDatabase.getVocabulary().NonEnumeratedValueDomain);
setNonEnumeratedDomainDescription(nonEnumeratedDomainDescription);
setRepresentingNonEnumeratedConceptualDomainRepresentation(representingNonEnumeratedConceptualDomainRepresentation);
}
public NonEnumeratedValueDomainImpl(Resource resource,
MDRDatabase mdrDatabase) {
super(resource, mdrDatabase);
}
@Override
public void setNonEnumeratedDomainDescription(
String nonEnumeratedDomainDescription) {
if (Util.isNull(nonEnumeratedDomainDescription)) {
throw new IllegalArgumentException(
"Non Enumerated Domain Description must be specified for Non Enumerated Value Domain.");
}
setPropertyValue(
mdrDatabase.getVocabulary().nonEnumeratedDomainDescription,
mdrDatabase.getUtil().createTypedLiteral(
nonEnumeratedDomainDescription));
}
@Override
public String getNonEnumeratedDomainDescription() {
return getPropertyValue(
mdrDatabase.getVocabulary().nonEnumeratedDomainDescription)
.asLiteral().getString();
}
@Override
public void setRepresentingNonEnumeratedConceptualDomainRepresentation(
NonEnumeratedConceptualDomainResource representingNonEnumeratedConceptualDomainRepresentation) {
if (representingNonEnumeratedConceptualDomainRepresentation == null) {
throw new IllegalArgumentException(
"Representing Non Enumerated Value Domain Representation must be specified for Non Enumerated Value Domain.");
}
setPropertyValue(
mdrDatabase.getVocabulary().representingNonEnumeratedConceptualDomainRepresentation,
representingNonEnumeratedConceptualDomainRepresentation);
}
@Override
public NonEnumeratedConceptualDomainResource getRepresentingNonEnumeratedConceptualDomainRepresentation() {
return new NonEnumeratedConceptualDomainImpl(
getPropertyResourceValue(mdrDatabase.getVocabulary().representingNonEnumeratedConceptualDomainRepresentation),
mdrDatabase);
}
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// ///// High-Level Interface Methods////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
@Override
public NonEnumeratedValueDomainResource asMDRResource() {
return this;
}
@Override
public String getDomainDescription() {
return this.getNonEnumeratedDomainDescription();
}
// @Override
// public String getDomainDescription() {
// return this.getNonEnumeratedDomainDescription();
// }
}