package tr.com.srdc.mdr.core.impl.ai; import java.util.List; import tr.com.srdc.mdr.core.impl.composite.AdministrationRecordImpl; 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.DerivationRuleResource; 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.DataElementDerivationResource; 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.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; /** * * A Data Element may have a Derivation Rule that is a specification of * derivation for the data element. The derivation rule may range from a simple * operation such as subtraction to a very complex set of derivations * (derivation being defined as a relationship between a derivation rule and an * input set upon which it acts). Derivation rules are not limited to arithmetic * and logical operations. * * @author anil */ public class DerivationRuleImpl extends AdministeredItemImpl implements DerivationRuleResource { /** * Instead of calling the constructor of this class, use * {@link MDRResourceFactory#createDerivationRule(String, AdministrationRecordResource, StewardshipRelationshipResource, SubmissionRelationshipResource, RegistrationAuthorityResource,AdministeredItemContextResource)} * to avoid entering illegal states. * * @param n * Mostly created by <code>Node.createURI()</code> * @param g * The graph which holds all triples. * @param derivationRuleSpecification * @param derivationRuleAdministrationRecord * @param administeredBy * @param submittedBy * @param registeredBy * @param having * @param mdrDatabase */ public DerivationRuleImpl(Node n, EnhGraph g, String derivationRuleSpecification, AdministrationRecordResource derivationRuleAdministrationRecord, StewardshipRelationshipResource administeredBy, SubmissionRelationshipResource submittedBy, RegistrationAuthorityResource registeredBy, AdministeredItemContextResource having, MDRDatabase mdrDatabase) { super(n, g, administeredBy, submittedBy, registeredBy, having, mdrDatabase); setSuperClass(mdrDatabase.getVocabulary().DerivationRule); setAdministrationRecord(derivationRuleAdministrationRecord); setDerivationRuleSpecification(derivationRuleSpecification); } public DerivationRuleImpl(Resource resource, MDRDatabase mdrDatabase) { super(resource, mdrDatabase); } @Override public void setAdministrationRecord( AdministrationRecordResource derivationRuleAdministrationRecord) { if (derivationRuleAdministrationRecord == null) { throw new IllegalArgumentException( "AdministrationRecord must be specified for DerivationRule."); } setPropertyValue( mdrDatabase.getVocabulary().derivationRuleAdministrationRecord, derivationRuleAdministrationRecord); } @Override public AdministrationRecordResource getAdministrationRecord() { Resource derivationRuleAdministrationRecord = getPropertyResourceValue(mdrDatabase .getVocabulary().derivationRuleAdministrationRecord); return new AdministrationRecordImpl(derivationRuleAdministrationRecord, mdrDatabase); } @Override public void setDerivationRuleSpecification( String derivationRuleSpecification) { if (Util.isNull(derivationRuleSpecification)) { throw new IllegalArgumentException( "Specification should be specified for DerivationRule"); } setPropertyValue( mdrDatabase.getVocabulary().derivationRuleSpecification, mdrDatabase.getUtil().createTypedLiteral( derivationRuleSpecification)); } @Override public String getDerivationRuleSpecification() { RDFNode derivationRuleSpecification = getPropertyValue(mdrDatabase .getVocabulary().derivationRuleSpecification); return derivationRuleSpecification.asLiteral().getString(); } @Override public void addAppliedToDerivationRuleApplication( DataElementDerivationResource appliedToDerivationRuleApplication) { if (appliedToDerivationRuleApplication == null) { throw new IllegalArgumentException( "Null is not allowed as the value of the property to be added."); } addProperty( mdrDatabase.getVocabulary().appliedToDerivationRuleApplication, appliedToDerivationRuleApplication); } @Override public void removeAppliedToDerivationRuleApplication( DataElementDerivationResource appliedToDerivationRuleApplication) { if (appliedToDerivationRuleApplication == null) { throw new IllegalArgumentException( "Null is not allowed as the value of the property to be removed."); } removeProperty( mdrDatabase.getVocabulary().appliedToDerivationRuleApplication, appliedToDerivationRuleApplication); } @Override public List<DataElementDerivationResource> getAppliedToDerivationRuleApplications() throws MDRException { NodeIterator it = listPropertyValues(mdrDatabase.getVocabulary().appliedToDerivationRuleApplication); return mdrDatabase.getUtil().createList(it, DataElementDerivationResource.class); } // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ///// High-Level Interface Methods//////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// @Override public DerivationRuleResource asMDRResource() { return this; } // @Override // public DataElementDerivation createDerivation(DataElement input, // DataElement output) { // DataElementDerivationResource dataElementDerivation = mdrDatabase // .getResourceFactory().createDataElementDerivation(this, // input.asMDRResource(), output.asMDRResource()); // logger.debug( // "DataElementDerivation created with {} and will be added to DerivationRule", // this); // this.addAppliedToDerivationRuleApplication(dataElementDerivation); // return dataElementDerivation; // } // // @Override // public List<DataElementDerivation> getDataElementDerivations() // throws MDRException { // List<DataElementDerivation> derList; // try { // derList = Collections.<DataElementDerivation> unmodifiableList(this // .getAppliedToDerivationRuleApplications()); // } catch (MDRException e) { // logger.error( // "Error at obtaining DataElementDerivations which {} is applieed", // this.getDerivationRuleSpecification()); // throw e; // } // return derList; // } // // @Override // public String getSpecification() { // return this.getDerivationRuleSpecification(); // } }