001 /**
002 * The contents of this file are subject to the Mozilla Public License Version 1.1
003 * (the "License"); you may not use this file except in compliance with the License.
004 * You may obtain a copy of the License at http://www.mozilla.org/MPL/
005 * Software distributed under the License is distributed on an "AS IS" basis,
006 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
007 * specific language governing rights and limitations under the License.
008 *
009 * The Original Code is "AbstractConformanceDataType.java". Description:
010 * "This class contains the functionality for a Data Type in the Conformance class set"
011 *
012 * The Initial Developer of the Original Code is University Health Network. Copyright (C)
013 * 2001. All Rights Reserved.
014 *
015 * Contributor(s): James Agnew
016 * Paul Brohman
017 * Mitch Delachevrotiere
018 * Shawn Dyck
019 * Cory Metcalf
020 *
021 * Alternatively, the contents of this file may be used under the terms of the
022 * GNU General Public License (the "GPL"), in which case the provisions of the GPL are
023 * applicable instead of those above. If you wish to allow use of your version of this
024 * file only under the terms of the GPL and not to allow others to use your version
025 * of this file under the MPL, indicate your decision by deleting the provisions above
026 * and replace them with the notice and other provisions required by the GPL License.
027 * If you do not delete the provisions above, a recipient may use your version of
028 * this file under either the MPL or the GPL.
029 *
030 */
031
032 package ca.uhn.hl7v2.conf.classes.abs;
033
034 import org.slf4j.Logger;
035 import org.slf4j.LoggerFactory;
036
037 import ca.uhn.hl7v2.conf.classes.exceptions.ConfDataException;
038 import ca.uhn.hl7v2.model.DataTypeException;
039 import ca.uhn.hl7v2.model.Primitive;
040
041 /** This class contains the functionality for a Data Type in the Conformance class set
042 * @author <table><tr>James Agnew</tr>
043 * <tr>Paul Brohman</tr>
044 * <tr>Mitch Delachevrotiere</tr>
045 * <tr>Shawn Dyck</tr>
046 * <tr>Cory Metcalf</tr></table>
047 */
048 public abstract class AbstractConformanceDataType {
049
050 private static final Logger log = LoggerFactory.getLogger(AbstractConformanceDataType.class);
051
052 private Primitive hapiPrimitive;
053
054 /** Constructor for AbstractConformanceDataType
055 * @param hapiPrimitive the underlying primitive that the extending class represents
056 */
057 public AbstractConformanceDataType(Primitive hapiPrimitive) {
058 this.hapiPrimitive = hapiPrimitive;
059
060 try {
061 if ( getConstantValue() != null )
062 setValue( getConstantValue() );
063 } catch ( ConfDataException e ) {
064 log.error( "Could not enforce constant value.", e );
065 }
066 }
067
068 /** This method returns the constant value for the extending class.
069 * @return the constant value
070 */
071 public abstract String getConstantValue();
072
073 /** This method returns the Maximum length of the extending object.
074 * @return the maximum length
075 */
076 public abstract long getMaxLength();
077
078 /** This method validates the <code>String</code> value passed in to be no greater then the
079 * maximum allowable length for the extending class. If the <code>String</code> value is valid, this
080 * method will set the underlying HAPI class's value. If the data passed in is invalid for the given
081 * data type, a ConfDataException is thrown.
082 * @throws ConformaceException
083 * @param value the value of the Data Type
084 */
085 protected void setValue(java.lang.String value) throws ConfDataException {
086 if ((this.getMaxLength() > 0)
087 && (value.length() > this.getMaxLength())) {
088 throw new ConfDataException("DataType length exceeds the Maximum allowable length");
089 }
090
091 try {
092 this.hapiPrimitive.setValue(value);
093 } catch (DataTypeException e) {
094 throw new ConfDataException("Invalid Data Populated");
095 }
096 }
097
098 }