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 ca.uhn.hl7v2.conf.classes.exceptions.ConfDataException;
035    import ca.uhn.hl7v2.model.DataTypeException;
036    import ca.uhn.hl7v2.model.Primitive;
037    import ca.uhn.log.HapiLog;
038    import ca.uhn.log.HapiLogFactory;
039    
040    /** This class contains the functionality for a Data Type in the Conformance class set
041     * @author <table><tr>James Agnew</tr>
042     *                <tr>Paul Brohman</tr>
043     *                <tr>Mitch Delachevrotiere</tr>
044     *                <tr>Shawn Dyck</tr>
045     *                <tr>Cory Metcalf</tr></table>
046     */
047    public abstract class AbstractConformanceDataType {
048            
049            private static final HapiLog log = HapiLogFactory.getHapiLog(AbstractConformanceDataType.class);
050        
051        private Primitive hapiPrimitive;
052        
053        /** Default constructor */
054        private AbstractConformanceDataType() {
055        }
056        
057        /** Constructor for AbstractConformanceDataType
058         * @param hapiPrimitive the underlying primitive that the extending class represents
059         */
060        public AbstractConformanceDataType(Primitive hapiPrimitive) {
061            this.hapiPrimitive = hapiPrimitive;
062            
063            try {
064                if ( getConstantValue() != null )
065                    setValue( getConstantValue() );
066            } catch ( ConfDataException e ) {
067                            log.error( "Could not enforce constant value.", e );
068            }
069        }
070        
071        /** This method returns the constant value for the extending class.
072         *  @return the constant value
073         */
074        public abstract String getConstantValue();
075        
076        /** This method returns the Maximum length of the extending object.
077         *  @return the maximum length
078         */
079        public abstract long getMaxLength();
080        
081        /** This method validates the <code>String</code> value passed in to be no greater then the
082         * maximum allowable length for the extending class.  If the <code>String</code> value is valid, this
083         * method will set the underlying HAPI class's value. If the data passed in is invalid for the given
084         * data type, a ConfDataException is thrown.
085         * @throws ConformaceException
086         * @param value the value of the Data Type
087         */
088        protected void setValue(java.lang.String value) throws ConfDataException {
089            if ((this.getMaxLength() > 0)
090            && (value.length() > this.getMaxLength())) {
091                throw new ConfDataException("DataType length exceeds the Maximum allowable length");
092            }
093            
094            try {
095                this.hapiPrimitive.setValue(value);
096            } catch (DataTypeException e) {
097                throw new ConfDataException("Invalid Data Populated");
098            }
099        }
100        
101    }