package tr.com.srdc.mdr.core.impl.composite;
import java.util.List;
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.composite.PermissibleValueResource;
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;
/**
*
* This is the actual value associated with a Permissible Value in an Enumerated
* Value Domain.
*
* @author anil
*
*/
public class ValueImpl extends AbstractMDRResource implements ValueResource {
/**
* Instead of calling the constructor of this class, use
* {@link MDRResourceFactory#createValue(String)} to avoid entering illegal
* states.
*
* @param n
* Mostly created by <code>Node.createURI()</code>.
* @param g
* The graph which holds all triples.
* @param valueItem
* @param mdrDatabase
*/
public ValueImpl(Node n, EnhGraph g, String valueItem,
MDRDatabase mdrDatabase) {
super(n, g, mdrDatabase);
setSuperClass(mdrDatabase.getVocabulary().Value);
setValueItem(valueItem);
}
public ValueImpl(Resource resource, MDRDatabase mdrDatabase) {
super(resource, mdrDatabase);
}
@Override
public void setValueItem(String valueItem) {
if (Util.isNull(valueItem)) {
throw new IllegalArgumentException(
"Value Item must be specified for Value.");
}
setPropertyValue(mdrDatabase.getVocabulary().valueItem, mdrDatabase
.getUtil().createTypedLiteral(valueItem));
}
@Override
public String getValueItem() {
RDFNode valueItem = getPropertyValue(mdrDatabase.getVocabulary().valueItem);
return valueItem.asLiteral().getString();
}
@Override
public void addUsedInPermittedValue(
PermissibleValueResource usedInPermittedValue) {
if (usedInPermittedValue == null) {
throw new IllegalArgumentException(
"Null is not allowed as a value for the property to be added.");
}
addProperty(mdrDatabase.getVocabulary().usedInPermittedValue,
usedInPermittedValue);
}
@Override
public void removeUsedInPermittedValue(
PermissibleValueResource usedInPermittedValue) {
if (usedInPermittedValue == null) {
throw new IllegalArgumentException(
"Null is not allowed as a value for the property to be removed.");
}
removeProperty(mdrDatabase.getVocabulary().usedInPermittedValue,
usedInPermittedValue);
}
@Override
public List<PermissibleValueResource> getUsedInPermittedValues()
throws MDRException {
NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().usedInPermittedValue);
return mdrDatabase.getUtil().createList(it,
PermissibleValueResource.class);
}
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// ///// High-Level Interface Methods////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
@Override
public ValueResource asMDRResource() {
return this;
}
}