package tr.com.srdc.mdr.core.impl.composite;
import java.util.List;
import tr.com.srdc.mdr.core.api.composite.LanguageSection;
import tr.com.srdc.mdr.core.impl.ai.AdministeredItemImpl;
import tr.com.srdc.mdr.core.impl.ai.ContextImpl;
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.AdministeredItemResource;
import tr.com.srdc.mdr.core.model.iso11179.ContextResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.AdministeredItemContextResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.TerminologicalEntryResource;
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;
/**
*
* This class is additionally created to handle the n-ary relation between
* {@link AdministeredItemImpl}, {@link TerminologicalEntryImpl} and
* {@link ContextImpl}. Each {@link AdministeredItemContextImpl} must have one
* {@link ContextImpl} and one {@link TerminologicalEntryImpl}. Each
* {@link AdministeredItemImpl} must have at least one
* {@link AdministeredItemContextImpl}.
*
* @author anil
*
*/
public class AdministeredItemContextImpl extends AbstractMDRResource implements
AdministeredItemContextResource {
/**
* Instead of calling the constructor of this class, use
* {@link MDRResourceFactory#createTerminologicalEntry(LanguageSection)} to
* avoid entering illegal states.
*
* @param n
* Mostly created by <code>Node.createURI()</code>
* @param g
* The graph which holds all triples.
* @param context
* @param terminologicalEntry
* @param mdrDatabase
*/
public AdministeredItemContextImpl(Node n, EnhGraph g,
ContextResource context,
TerminologicalEntryResource terminologicalEntry,
MDRDatabase mdrDatabase) {
super(n, g, mdrDatabase);
setSuperClass(mdrDatabase.getVocabulary().AdministeredItemContext);
setContext(context);
setTerminologicalEntry(terminologicalEntry);
}
public AdministeredItemContextImpl(Resource resource,
MDRDatabase mdrDatabase) {
super(resource, mdrDatabase);
}
@Override
public void setContext(ContextResource context) {
if (context == null) {
throw new IllegalArgumentException(
"Context cannot be null for AdministeredItemContext");
}
setPropertyValue(
mdrDatabase.getVocabulary().administeredItemContextContext,
context);
}
@Override
public ContextResource getContext() {
return new ContextImpl(
getPropertyResourceValue(mdrDatabase.getVocabulary().administeredItemContextContext),
mdrDatabase);
}
@Override
public void setTerminologicalEntry(
TerminologicalEntryResource terminologicalEntry) {
if (terminologicalEntry == null) {
throw new IllegalArgumentException(
"TerminologicalEntry cannot be null for AdministeredItemContext");
}
setPropertyValue(
mdrDatabase.getVocabulary().administeredItemContextTerminologicalEntry,
terminologicalEntry);
}
@Override
public TerminologicalEntryResource getTerminologicalEntry() {
return new TerminologicalEntryImpl(
getPropertyResourceValue(mdrDatabase.getVocabulary().administeredItemContextTerminologicalEntry),
mdrDatabase);
}
@Override
public void addGrouping(AdministeredItemResource administeredItem) {
addProperty(mdrDatabase.getVocabulary().grouping, administeredItem);
}
@Override
public void removeGrouping(AdministeredItemResource administeredItem) {
if (administeredItem == null) {
throw new IllegalArgumentException(
"Null is not allowed as the value of the property to be removed.");
}
removeProperty(mdrDatabase.getVocabulary().grouping, administeredItem);
}
@Override
public List<AdministeredItemResource> getGroupings() throws MDRException {
NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().grouping);
return mdrDatabase.getUtil().createList(it,
AdministeredItemResource.class);
}
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// ///// High-Level Interface Methods////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
@Override
public AdministeredItemContextResource asMDRResource() {
return this;
}
}