package tr.com.srdc.mdr.core.impl.composite;
import java.util.List;
import tr.com.srdc.mdr.core.impl.ai.AdministeredItemImpl;
import tr.com.srdc.mdr.core.model.Abbreviation;
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.composite.OrganizationResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.SubmissionRelationshipResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.SubmissionResource;
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;
/**
*
* {@link SubmissionRelationshipImpl} is used to represent the relation between
* <ul>
* <li>Submission</li>
* <li>submitting - submittedBy Relation between {@link OrganizationImpl} and
* {@link AdministeredItemImpl}</li>
* </ul>
* <br>
* Since {@link Abbreviation} is backed by Jena - Triple Store, such an holder class
* is required to represent n-ary relations
*
* @author anil
*
*/
public class SubmissionRelationshipImpl extends AbstractMDRResource implements
SubmissionRelationshipResource {
/**
* Instead of calling the constructor of this class, use
* {@link MDRResourceFactory#createSubmissionRelationship(OrganizationResource,SubmissionResource)}
* to avoid entering illegal states.
*
* @param n
* Mostly created by <code>Node.createURI()</code>
* @param g
* The graph which holds all triples.
* @param submissionOrganization
* @param submitter
* @param mdrDatabase
*/
public SubmissionRelationshipImpl(Node n, EnhGraph g,
OrganizationResource submissionOrganization,
SubmissionResource submitter, MDRDatabase mdrDatabase) {
super(n, g, mdrDatabase);
setSuperClass(mdrDatabase.getVocabulary().SubmissionRelationship);
setSubmissionOrganization(submissionOrganization);
setSubmitter(submitter);
}
public SubmissionRelationshipImpl(Resource resource,
MDRDatabase mdrDatabase) {
super(resource, mdrDatabase);
}
@Override
public void setSubmissionOrganization(
OrganizationResource submissionOrganization) {
if (submissionOrganization == null) {
throw new IllegalArgumentException(
"An Organization must be specified for Submission Relationship");
}
setPropertyValue(mdrDatabase.getVocabulary().submissionOrganization,
submissionOrganization);
}
@Override
public OrganizationResource getSubmissionOrganization() {
return new OrganizationImpl(
getPropertyResourceValue(mdrDatabase.getVocabulary().submissionOrganization),
mdrDatabase);
}
@Override
public void setSubmitter(SubmissionResource submitter) {
if (submitter == null) {
throw new IllegalArgumentException(
"Submitter must be specified for the Submission Relationship");
}
setPropertyValue(mdrDatabase.getVocabulary().submitter, submitter);
}
@Override
public SubmissionResource getSubmitter() {
return new SubmissionImpl(
getPropertyResourceValue(mdrDatabase.getVocabulary().submitter),
mdrDatabase);
}
@Override
public void addSubmittedItems(AdministeredItemResource submittedItems) {
if (submittedItems == null) {
throw new IllegalArgumentException(
"Null is not allowed as the value of the property to be added.");
}
addProperty(mdrDatabase.getVocabulary().submittedItems, submittedItems);
}
@Override
public List<AdministeredItemResource> getSubmittedItems()
throws MDRException {
NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().submittedItems);
return mdrDatabase.getUtil().createList(it,
AdministeredItemResource.class);
}
@Override
public void removeSumittedItem(AdministeredItemResource submittedItems) {
if (submittedItems == null) {
throw new IllegalArgumentException(
"Null is not allowed as the value of the property to be removed.");
}
removeProperty(mdrDatabase.getVocabulary().submittedItems,
submittedItems);
}
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// ///// High-Level Interface Methods////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
@Override
public SubmissionRelationshipResource asMDRResource() {
return this;
}
}