package tr.com.srdc.mdr.core.impl.composite; import javax.xml.bind.DatatypeConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tr.com.srdc.mdr.core.model.AbstractMDRResource; import tr.com.srdc.mdr.core.model.MDRResourceFactory; import tr.com.srdc.mdr.core.model.Util; import tr.com.srdc.mdr.core.model.iso11179.composite.DefinitionResource; import tr.com.srdc.mdr.core.model.iso11179.composite.DesignationResource; import tr.com.srdc.mdr.core.model.iso11179.composite.LanguageSectionResource; 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.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; /** * The Designation class provides the naming entry of a Language Section in the * Terminological Entry for an Administered Item in a particular Context. In * other words, it is where the name for an Administered Item is specified in a * particular language for a particular Context. Where multiple Designations are * provided within the same Language Section, one of them may be specified as * the preferred designation. * * @author anil * */ public class DesignationImpl extends AbstractMDRResource implements DesignationResource { private static final Logger logger = LoggerFactory .getLogger(DesignationImpl.class); /** * Instead of calling the constructor of this class, use * {@link MDRResourceFactory#createDesignation(LanguageSectionResource,String,boolean)} * to avoid entering illegal states. * * @param n * Mostly created by <code>Node.createURI()</code> * @param g * The graph which holds all triples. * @param namingEntryOf * LanguageSection where Designation belongs to * @param name * Name of the Designation * @param preferredDesignation * Optional. If given <code>null</code>, default value is * <code>false</code> * @param mdrDatabase */ public DesignationImpl(Node n, EnhGraph g, LanguageSectionResource namingEntryOf, String name, boolean preferredDesignation, MDRDatabase mdrDatabase) { super(n, g, mdrDatabase); setSuperClass(mdrDatabase.getVocabulary().Designation); setNamingEntryOf(namingEntryOf); setName(name); setPreferredDesignation(preferredDesignation); } public DesignationImpl(Resource resource, MDRDatabase mdrDatabase) { super(resource, mdrDatabase); } @Override public void setNamingEntryOf(LanguageSectionResource namingEntryOf) { if (namingEntryOf == null) { throw new IllegalArgumentException( "Language Section must be specified for Designation"); } setPropertyValue(mdrDatabase.getVocabulary().namingEntryOf, namingEntryOf); } @Override public LanguageSectionResource getNamingEntryOf() { return new LanguageSectionImpl( getPropertyResourceValue(mdrDatabase.getVocabulary().namingEntryOf), mdrDatabase); } @Override public void setName(String name) { if (Util.isNull(name)) { throw new IllegalArgumentException( "Name must be specified for Designation."); } setPropertyValue(mdrDatabase.getVocabulary().name, mdrDatabase .getUtil().createTypedLiteral(name)); } @Override public String getName() { return getPropertyValue(mdrDatabase.getVocabulary().name).asLiteral() .getString(); } @Override public void setPreferredDesignation(boolean preferredDesignation) { setPropertyValue( mdrDatabase.getVocabulary().preferredDesignation, mdrDatabase.getOntModel().createLiteral( DatatypeConverter.printBoolean(preferredDesignation))); } @Override public boolean isPreferredDesignation() { RDFNode preferredDesignation = getPropertyValue(mdrDatabase .getVocabulary().preferredDesignation); if (preferredDesignation == null) { logger.debug("Designation does not have preferredDesignation"); return false; } return preferredDesignation.asLiteral().getBoolean(); } @Override public void setSpecificallyReferencing( DefinitionResource specificallyReferencing) { setPropertyValue(mdrDatabase.getVocabulary().specificallyReferencing, specificallyReferencing); } @Override public DefinitionResource getSpecificallyReferencing() { Resource specificallyReferencing = getPropertyResourceValue(mdrDatabase .getVocabulary().specificallyReferencing); if (specificallyReferencing == null) { logger.debug("Designation is not specifically referencing Definition"); return null; } return new DefinitionImpl(specificallyReferencing, mdrDatabase); } // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ///// High-Level Interface Methods//////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// @Override public DesignationResource asMDRResource() { return this; } }