package tr.com.srdc.mdr.core.impl.ai;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tr.com.srdc.mdr.core.api.composite.PermissibleValue;
import tr.com.srdc.mdr.core.model.MDRException;
import tr.com.srdc.mdr.core.model.iso11179.ConceptualDomainResource;
import tr.com.srdc.mdr.core.model.iso11179.EnumeratedValueDomainResource;
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.PermissibleValueResource;
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.NodeIterator;
import com.hp.hpl.jena.rdf.model.Resource;
/**
*
* An Enumerated Value Domain is one where the Value Domain is expressed as an
* explicit set of two or more Permissible Values. As a sub-type of Value
* Domain, an Enumerated Value Domain inherits the attributes and relationships
* of the former.
*
* @author anil
*
*/
public class EnumeratedValueDomainImpl extends ValueDomainImpl implements
EnumeratedValueDomainResource {
Logger logger = LoggerFactory.getLogger(EnumeratedValueDomainImpl.class);
/**
* Instead of calling the constructor of this class, use {@link
* IndividualFactory#createValueDomain(AdministrationRecord, Datatype,
* UnitOfMeasure, Integer, String, StewardshipRelationship,
* SubmissionRelationship, RegistrationAuthority, AdministeredItemContext,
* ConceptualDomain,List<PermissibleValue>)} to avoid entering illegal
* states.
*
* @param n
* Mostly created by <code>Node.createURI()</code>.
* @param g
* The graph which holds all triples.
* @param valueDomainAdministrationRecord
* @param valueDomainDatatype
* @param valueDomainUnitOfMeasure
* @param valueDomainMaximumCharacterQuantity
* @param valueDomainFormat
* @param administeredBy
* @param submittedBy
* @param registeredBy
* @param having
* @param representingConceptualDomainRepresentation
* @param containingPermissibleValueSet
* @param mdrDatabase
*/
public EnumeratedValueDomainImpl(
Node n,
EnhGraph g,
AdministrationRecordResource valueDomainAdministrationRecord,
DatatypeResource valueDomainDatatype,
UnitOfMeasureResource valueDomainUnitOfMeasure,
Integer valueDomainMaximumCharacterQuantity,
String valueDomainFormat,
StewardshipRelationshipResource administeredBy,
SubmissionRelationshipResource submittedBy,
RegistrationAuthorityResource registeredBy,
AdministeredItemContextResource having,
ConceptualDomainResource representingConceptualDomainRepresentation,
List<PermissibleValueResource> containingPermissibleValueSet,
MDRDatabase mdrDatabase) {
super(n, g, valueDomainAdministrationRecord, valueDomainDatatype,
valueDomainUnitOfMeasure, valueDomainMaximumCharacterQuantity,
valueDomainFormat, administeredBy, submittedBy, registeredBy,
having, representingConceptualDomainRepresentation, mdrDatabase);
setSuperClass(mdrDatabase.getVocabulary().EnumeratedValueDomain);
for (PermissibleValueResource i : containingPermissibleValueSet) {
addContainingPermissibleValueSet(i);
}
}
public EnumeratedValueDomainImpl(Resource resource, MDRDatabase mdrDatabase) {
super(resource, mdrDatabase);
}
@Override
public void addContainingPermissibleValueSet(
PermissibleValueResource containingPermissibleValueSet) {
if (containingPermissibleValueSet == null) {
throw new IllegalArgumentException(
"Null is not allowed as a value for the property to be added.");
}
addProperty(mdrDatabase.getVocabulary().containingPermissibleValueSet,
containingPermissibleValueSet);
}
@Override
public void removeContaningPermissibleValueSet(
PermissibleValueResource containingPermissibleValueSet) {
if (containingPermissibleValueSet == null) {
throw new IllegalArgumentException(
"Null is not allowed as a value of the property to be removed.");
}
removeProperty(
mdrDatabase.getVocabulary().containingPermissibleValueSet,
containingPermissibleValueSet);
}
@Override
public List<PermissibleValueResource> getContainingPermissibleValueSets()
throws MDRException {
NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().containingPermissibleValueSet);
return mdrDatabase.getUtil().createList(it,
PermissibleValueResource.class);
}
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// ///// High-Level Interface Methods////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
@Override
public EnumeratedValueDomainResource asMDRResource() {
return this;
}
@Override
public List<PermissibleValue> getPermissibleValues() {
List<PermissibleValue> permissibleValues = new ArrayList<PermissibleValue>();
try {
permissibleValues = Collections
.<PermissibleValue> unmodifiableList(this
.getContainingPermissibleValueSets());
} catch (MDRException e) {
logger.error("PermissibleValue list could not be obtained");
}
return permissibleValues;
}
@Override
public void addPermissibleValue(PermissibleValue... pv) {
for (PermissibleValue p : pv) {
this.addContainingPermissibleValueSet(p.asMDRResource());
}
}
}