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 "AbstractType.java".  Description:
010 * 
011 * "An abstract Type that provides a default implementation of getName()" 
012 *
013 * The Initial Developer of the Original Code is University Health Network. Copyright (C)
014 * 2001.  All Rights Reserved.
015 *
016 * Contributor(s): ______________________________________.
017 *
018 * Alternatively, the contents of this file may be used under the terms of the
019 * GNU General Public License (the  �GPL�), in which case the provisions of the GPL are
020 * applicable instead of those above.  If you wish to allow use of your version of this
021 * file only under the terms of the GPL and not to allow others to use your version
022 * of this file under the MPL, indicate your decision by deleting  the provisions above
023 * and replace  them with the notice and other provisions required by the GPL License.
024 * If you do not delete the provisions above, a recipient may use your version of
025 * this file under either the MPL or the GPL.
026 *
027 */
028
029package ca.uhn.hl7v2.model;
030
031import ca.uhn.hl7v2.HL7Exception;
032import ca.uhn.hl7v2.parser.EncodingCharacters;
033
034/**
035 * An abstract Type that provides a default implementation of getName(). 
036 * 
037 * @author Bryan Tripp
038 */
039public abstract class AbstractType implements Type {
040
041        private static final long serialVersionUID = -6976260024197429201L;
042        
043        private final ExtraComponents extra;
044    private final Message message;
045    
046    /** 
047     * Creates a new instance of AbstractType
048     * @param message message to which this type belongs 
049     */
050    public AbstractType(Message message) {
051        extra = new ExtraComponents(message);
052        this.message = message;
053    }
054    
055    /** Returns the name of the type (used in XML encoding and profile checking)  */
056    public String getName() {
057        String longClassName = this.getClass().getName();
058        return longClassName.substring(longClassName.lastIndexOf('.') + 1);
059    }
060    
061    /** @see Type#getExtraComponents */
062    public ExtraComponents getExtraComponents() {
063        return this.extra;
064    }
065    
066    
067    /**
068     * @return the message to which this Type belongs
069     */
070    public Message getMessage() {
071        return message;
072    }
073
074
075    /**
076     * {@inheritDoc }
077     */
078    public void parse(String string) throws HL7Exception {
079        clear();
080                getMessage().getParser().parse(this, string, EncodingCharacters.getInstance(getMessage()));
081    }
082
083
084    /**
085     * {@inheritDoc }
086     */
087    public String encode() throws HL7Exception {
088        return getMessage().getParser().doEncode(this, EncodingCharacters.getInstance(getMessage()));
089    }
090
091
092        /**
093         * {@inheritDoc }
094         */
095        public void clear() {
096                extra.clear();
097        }
098
099        
100        /**
101         * Returns the datatype and attempts to pipe-encode it. For example, a string implementation
102         * might return "ST[Value^Value2]". This is only intended for logging/debugging purposes.
103         */
104        @Override
105        public String toString() {
106                return toString(this);
107        }
108
109        
110        /**
111         * Returns the datatype and attempts to pipe-encode it. For example, a string implementation
112         * might return "ST[Value^Value2]". This is only intended for logging/debugging purposes.
113         */
114        static String toString(Type theType) {
115                StringBuilder b = new StringBuilder();
116                b.append(theType.getClass().getSimpleName());
117                b.append("[");
118                try {
119                        b.append(theType.encode());
120                } catch (HL7Exception e) {
121                        b.append("Unable to encode");
122                }
123                b.append("]");
124                return b.toString();
125        }
126
127
128        
129
130}