1 /**
2 * The contents of this file are subject to the Mozilla Public License Version 1.1
3 * (the "License"); you may not use this file except in compliance with the License.
4 * You may obtain a copy of the License at http://www.mozilla.org/MPL/
5 * Software distributed under the License is distributed on an "AS IS" basis,
6 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
7 * specific language governing rights and limitations under the License.
8 *
9 * The Original Code is "AbstractType.java". Description:
10 *
11 * "An abstract Type that provides a default implementation of getName()"
12 *
13 * The Initial Developer of the Original Code is University Health Network. Copyright (C)
14 * 2001. All Rights Reserved.
15 *
16 * Contributor(s): ______________________________________.
17 *
18 * Alternatively, the contents of this file may be used under the terms of the
19 * GNU General Public License (the �GPL�), in which case the provisions of the GPL are
20 * applicable instead of those above. If you wish to allow use of your version of this
21 * file only under the terms of the GPL and not to allow others to use your version
22 * of this file under the MPL, indicate your decision by deleting the provisions above
23 * and replace them with the notice and other provisions required by the GPL License.
24 * If you do not delete the provisions above, a recipient may use your version of
25 * this file under either the MPL or the GPL.
26 *
27 */
28
29 package ca.uhn.hl7v2.model;
30
31 import ca.uhn.hl7v2.HL7Exception;
32 import ca.uhn.hl7v2.Location;
33 import ca.uhn.hl7v2.parser.EncodingCharacters;
34 import ca.uhn.hl7v2.parser.PipeParser;
35
36 /**
37 * An abstract Type that provides a default implementation of getName().
38 *
39 * @author Bryan Tripp
40 */
41 public abstract class AbstractType implements Type {
42
43 private static final long serialVersionUID = -6976260024197429201L;
44
45 private final ExtraComponents extra;
46 private final Message message;
47
48 /**
49 * Creates a new instance of AbstractType
50 * @param message message to which this type belongs
51 */
52 public AbstractType(Message message) {
53 extra = new ExtraComponents(message);
54 this.message = message;
55 }
56
57 /** Returns the name of the type (used in XML encoding and profile checking) */
58 public String getName() {
59 String longClassName = this.getClass().getName();
60 return longClassName.substring(longClassName.lastIndexOf('.') + 1);
61 }
62
63 /** @see Type#getExtraComponents */
64 public ExtraComponents getExtraComponents() {
65 return this.extra;
66 }
67
68
69 /**
70 * @return the message to which this Type belongs
71 */
72 public Message getMessage() {
73 return message;
74 }
75
76
77 /**
78 * {@inheritDoc }
79 */
80 public void parse(String string) throws HL7Exception {
81 clear();
82 getMessage().getParser().parse(this, string, EncodingCharacters.getInstance(getMessage()));
83 }
84
85
86 /**
87 * {@inheritDoc }
88 */
89 public String encode() throws HL7Exception {
90 return getMessage().getParser().doEncode(this, EncodingCharacters.getInstance(getMessage()));
91 }
92
93 /**
94 * {@inheritDoc }
95 */
96 public void clear() {
97 extra.clear();
98 }
99
100 /**
101 * {@inheritDoc }
102 */
103 public boolean isEmpty() throws HL7Exception {
104 return extra.isEmpty();
105 }
106
107 /**
108 * Returns the datatype and attempts to pipe-encode it. For example, a string implementation
109 * might return "ST[Value^Value2]". This is only intended for logging/debugging purposes.
110 */
111 @Override
112 public String toString() {
113 return toString(this);
114 }
115
116
117 /**
118 * Returns the datatype and attempts to pipe-encode it. For example, a string implementation
119 * might return "ST[Value^Value2]". This is only intended for logging/debugging purposes.
120 */
121 static String toString(Type theType) {
122 return theType.getClass().getSimpleName() +
123 "[" +
124 PipeParser.encode(theType, EncodingCharacters.defaultInstance()) +
125 "]";
126 }
127
128 public Location/../ca/uhn/hl7v2/Location.html#Location">Location provideLocation(Location location, int index, int repetition) {
129 if (location.getField() < 0)
130 return new Location(location)
131 .withField(index)
132 .withFieldRepetition(repetition);
133 if (location.getComponent() < 0)
134 return new Location(location)
135 .withComponent(index);
136 return new Location(location)
137 .withSubcomponent(index);
138 }
139
140
141 }