package tr.com.srdc.mdr.core.impl.composite; 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.UnitOfMeasureResource; 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; /** * * If meaningful, a Value Domain may be associated with a Unit of Measure — the * unit in which any associated Data Element values are specified. The unit is * designated by a unit of measure name. When specified, the unit must be * consistent with the dimensionality specified in the corresponding Conceptual * Domain. Optionally, a unit of measure precision may be specified, as the * number of decimal places to be supported in the associated Data Element * values. This precision shall be considered a default that may be overridden * for any particular Data Element. * * @author anil * */ public class UnitOfMeasureImpl extends AbstractMDRResource implements UnitOfMeasureResource { /** * Instead of calling the constructor of this class, use * {@link MDRResourceFactory#createDatatype(String, Integer)} to avoid * entering illegal states. * * @param n * Mostly created by <code>Node.createURI()</code> * @param g * The graph which holds all triples. * @param unitOfMeasureName * @param unitOfMeasurePrecision * @param mdrDatabase */ public UnitOfMeasureImpl(Node n, EnhGraph g, String unitOfMeasureName, Integer unitOfMeasurePrecision, MDRDatabase mdrDatabase) { super(n, g, mdrDatabase); setSuperClass(mdrDatabase.getVocabulary().UnitOfMeasure); setUnitOfMeasureName(unitOfMeasureName); setUnitOfMeasurePrecision(unitOfMeasurePrecision); } public UnitOfMeasureImpl(Resource resource, MDRDatabase mdrDatabase) { super(resource, mdrDatabase); } @Override public void setUnitOfMeasureName(String unitOfMeasureName) { if (Util.isNull(unitOfMeasureName)) { throw new IllegalArgumentException( "Name must be speicifed for UnitOfMeasure"); } setPropertyValue(mdrDatabase.getVocabulary().unitOfMeasureName, mdrDatabase.getUtil().createTypedLiteral(unitOfMeasureName)); } @Override public String getUnitOfMeasureName() { RDFNode unitOfMeasureName = getPropertyValue(mdrDatabase .getVocabulary().unitOfMeasureName); return unitOfMeasureName.asLiteral().getString(); } @Override public void setUnitOfMeasurePrecision(Integer unitOfMeasurePrecision) { if (unitOfMeasurePrecision == null) { throw new IllegalArgumentException( "Precision must be specified for UnitOfMeasure"); } setPropertyValue(mdrDatabase.getVocabulary().unitOfMeasurePrecision, mdrDatabase.getUtil() .createTypedLiteral(unitOfMeasurePrecision)); } @Override public Integer getUnitOfMeasurePrecision() { RDFNode unitOfMeasurePrecision = getPropertyValue(mdrDatabase .getVocabulary().unitOfMeasurePrecision); return unitOfMeasurePrecision.asLiteral().getInt(); } // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ///// High-Level Interface Methods//////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// // ////////////////////////////////////////////// @Override public UnitOfMeasureResource asMDRResource() { return this; } @Override public String getName() { return this.getUnitOfMeasureName(); } @Override public int getPrecision() { return this.getUnitOfMeasurePrecision(); } }