package tr.com.srdc.mdr.core.impl.ai;
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.PropertyResource;
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;
/**
*
* A Property is a characteristic common to all members of an Object Class. It
* may be any feature that humans naturally use to distinguish one individual
* object from another. It is the human perception of a single characteristic of
* an Object Class in the real world. It is conceptual and thus has no
* particular associated means of representation by which the Property can be
* communicated.
*
* @author mert
*
*/
public class PropertyImpl extends AdministeredItemImpl implements
PropertyResource {
/**
* Instead of calling the constructor of this class, use
* {@link MDRResourceFactory#createProperty(AdministrationRecordResource)}
* to avoid entering illegal states.
*
* @param n
* Mostly created by <code>Node.createURI()</code>.
* @param g
* The graph which holds all triples.
* @param propertyAdministrationRecord
* The {@link AdministrationRecordResource} for a
* {@link PropertyResource}.
* @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 PropertyImpl(Node n, EnhGraph g,
AdministrationRecordResource propertyAdministrationRecord,
StewardshipRelationshipResource administeredBy,
SubmissionRelationshipResource submittedBy,
RegistrationAuthorityResource registeredBy,
AdministeredItemContextResource having, MDRDatabase mdrDatabase) {
super(n, g, administeredBy, submittedBy, registeredBy, having,
mdrDatabase);
setSuperClass(mdrDatabase.getVocabulary().Property);
setAdministrationRecord(propertyAdministrationRecord);
}
public PropertyImpl(Resource resource, MDRDatabase mdrDatabase) {
super(resource, mdrDatabase);
}
@Override
public AdministrationRecordResource getAdministrationRecord() {
return new AdministrationRecordImpl(
getPropertyResourceValue(mdrDatabase.getVocabulary().propertyAdministrationRecord),
mdrDatabase);
}
@Override
public void setAdministrationRecord(
AdministrationRecordResource propertyAdministrationRecord) {
if (propertyAdministrationRecord == null) {
throw new IllegalArgumentException(
"Administration Record must be specified for Property.");
}
setPropertyValue(
mdrDatabase.getVocabulary().propertyAdministrationRecord,
propertyAdministrationRecord);
}
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// ///// High-Level Interface Methods////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
// //////////////////////////////////////////////
@Override
public PropertyResource asMDRResource() {
return this;
}
}