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}