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    }