package tr.com.srdc.mdr.core.impl.ai; import java.util.List; import tr.com.srdc.mdr.core.api.ai.ConceptualDomain; import tr.com.srdc.mdr.core.api.ai.DataElementConcept; import tr.com.srdc.mdr.core.api.ai.Property; import tr.com.srdc.mdr.core.impl.composite.AdministrationRecordImpl; 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.ObjectClassResource; 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.OrganizationResource; 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.Resource; /** * An Object Class is a set of ideas, abstractions, or things in the real world * that can be identified with explicit boundaries and meaning and whose * properties and behavior follow the same rules. It may be either a single or a * group of associated concepts, abstractions, or things. An Object Class may be * a single unit of thought (i.e., Concept) or a set of Concepts in a * relationship with each other to form a more complex concept (i.e., Concept * Relationship). A Concept and a Concept Relationship are subtypes of an Object * Class. Each Concept Relationship carries a concept relationship type * description that describes the nature of the relationship. * * @author anil * */ public abstract class ObjectClassImpl extends AdministeredItemImpl implements ObjectClassResource { /** * Instead of calling the constructor of this class, use * {@link MDRResourceFactory#createObjectClass(AdministrationRecordResource)} * to avoid entering illegal states. * * @param n * Mostly created by <code>Node.createURI()</code>. * @param g * The graph which holds all triples. * @param objectClassAdministrationRecord * The Administration Record for an {@link ObjectClassResource}. * @param administeredBy * An Administered Item is administered by an * {@link OrganizationResource} represented by the * {@link StewardshipRelationshipResource}. * @param submittedBy * An Administered Item is submitted by an * {@link OrganizationResource} represented by the * {@link SubmissionRelationshipResource}. * @param registeredBy * An {@link AdministeredItemResource} is registered by a * {@link RegistrationAuthorityResource}. * @param having * An {@link AdministeredItemResource} has to have at least one * {@link AdministeredItemContextResource}. * @param mdrDatabase */ public ObjectClassImpl(Node n, EnhGraph g, AdministrationRecordResource objectClassAdministrationRecord, StewardshipRelationshipResource administeredBy, SubmissionRelationshipResource submittedBy, RegistrationAuthorityResource registeredBy, AdministeredItemContextResource having, MDRDatabase mdrDatabase) { super(n, g, administeredBy, submittedBy, registeredBy, having, mdrDatabase); setSuperClass(mdrDatabase.getVocabulary().ObjectClass); setAdministrationRecord(objectClassAdministrationRecord); } public ObjectClassImpl(Resource resource, MDRDatabase mdrDatabase) { super(resource, mdrDatabase); } @Override public void setAdministrationRecord( AdministrationRecordResource objectClassAdministrationRecord) { if (objectClassAdministrationRecord == null) { throw new IllegalArgumentException( "Administration Record must be specified for Object Class."); } setPropertyValue( mdrDatabase.getVocabulary().objectClassAdministrationRecord, objectClassAdministrationRecord); } @Override public AdministrationRecordResource getAdministrationRecord() { return new AdministrationRecordImpl( getPropertyResourceValue(mdrDatabase.getVocabulary().objectClassAdministrationRecord), mdrDatabase); } // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ///// High-Level Interface Methods//////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// @Override public ObjectClassResource asMDRResource() { return this; } @Override public DataElementConcept createDataElementConcept(Property property, ConceptualDomain conceptualDomain, String definition) { return getContext().createDataElementConcept(this, property, conceptualDomain); } @Override public DataElementConcept createDataElementConcept(String propertyName, String propertyDefinition, ConceptualDomain conceptualDomain, String definition) { return getContext().createDataElementConcept(this, propertyName, propertyDefinition, conceptualDomain); } @SuppressWarnings("unchecked") @Override public List<DataElementConcept> getDataElementConcepts() { return (List<DataElementConcept>) mdrDatabase.getQueryFactory() .getDECSofOC(this.getURI(), null, null); } @SuppressWarnings("unchecked") @Override public List<DataElementConcept> getDataElementConcepts(Integer limit, Integer offset) { return (List<DataElementConcept>) mdrDatabase.getQueryFactory() .getDECSofOC(this.getURI(), limit, offset); } @Override public int getNumberOfDataElementConcepts() { return mdrDatabase.getQueryFactory().getNumberOfDEC(this.getURI()); } @Override public DataElementConcept getDataElementConcept(String id) { return new DataElementConceptImpl(mdrDatabase.getQueryFactory() .getAdministeredItem(id), mdrDatabase); } }