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.StewardshipRelationshipResource;
import tr.com.srdc.mdr.core.model.iso11179.composite.StewardshipResource;
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 StewardshipRelationshipImpl} is used to represent the relation between
* <ul>
* <li>Stewardship</li>
* <li>administering - administratedBy 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 StewardshipRelationshipImpl extends AbstractMDRResource implements
StewardshipRelationshipResource {
/**
* Instead of calling the constructor of this class, use
* {@link MDRResourceFactory#createStewardshipRelationship(OrganizationResource,StewardshipResource)}
* to avoid entering illegal states.
*
* @param n
* Mostly created by <code>Node.createURI()</code>
* @param g
* The graph which holds all triples.
* @param stewardshipOrganization
* {@link OrganizationResource} which administrates the
* AdministratedItem instance
* @param mdrDatabase
* @param administrator
* Stewardship including Contact Details of Administrator
*/
public StewardshipRelationshipImpl(Node n, EnhGraph g,
OrganizationResource stewardshipOrganization,
StewardshipResource administer, MDRDatabase mdrDatabase) {
super(n, g, mdrDatabase);
setSuperClass(mdrDatabase.getVocabulary().StewardshipRelationship);
setStewardshipOrganization(stewardshipOrganization);
setAdminister(administer);
}
public StewardshipRelationshipImpl(Resource resource,
MDRDatabase mdrDatabase) {
super(resource, mdrDatabase);
}
@Override
public void setStewardshipOrganization(
OrganizationResource stewardshipOrganization) {
if (stewardshipOrganization == null) {
throw new IllegalArgumentException(
"An Organization must be specified for Stewardship Relationship");
}
setPropertyValue(mdrDatabase.getVocabulary().stewardshipOrganization,
stewardshipOrganization);
}
@Override
public OrganizationResource getStewardshipOrganization() {
return new OrganizationImpl(
getPropertyResourceValue(mdrDatabase.getVocabulary().stewardshipOrganization),
mdrDatabase);
}
@Override
public void setAdminister(StewardshipResource administer) {
if (administer == null) {
throw new IllegalArgumentException(
"Admininstrator must be specified for the StewardshipRelationship");
}
setPropertyValue(mdrDatabase.getVocabulary().administer, administer);
}
@Override
public StewardshipResource getAdminister() {
return new StewardshipImpl(
getPropertyResourceValue(mdrDatabase.getVocabulary().administer),
mdrDatabase);
}
@Override
public void addAdministratedItems(AdministeredItemResource administeredItem) {
if (administeredItem == null) {
throw new IllegalArgumentException(
"Null is not allowed as the value of the property to be added.");
}
addProperty(mdrDatabase.getVocabulary().administeredItems,
administeredItem);
}
@Override
public List<AdministeredItemResource> getAdministratedItems()
throws MDRException {
NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().administeredItems);
return mdrDatabase.getUtil().createList(it,
AdministeredItemResource.class);
}
@Override
public void removeAdministratedItem(
AdministeredItemResource administratedItems) {
if (administratedItems == null) {
throw new IllegalArgumentException(
"Null is not allowed as the value of the property to be removed.");
}
removeProperty(mdrDatabase.getVocabulary().administeredItems,
administratedItems);
}
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// ///// High-Level Interface Methods////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
@Override
public StewardshipRelationshipResource asMDRResource() {
return this;
}
}