1 //$Id: TypeAbbreviator.java 256 2006-10-23 21:56:10Z jg_hamburg $
2 /********************************************************************************
3 * DDTUnit, a Datadriven Approach to Unit- and Moduletesting
4 * Copyright (c) 2004, Joerg and Kai Gellien
5 * All rights reserved.
6 *
7 * The Software is provided under the terms of the Common Public License 1.0
8 * as provided with the distribution of DDTUnit in the file cpl-v10.html.
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * + Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * + Redistributions in binary form must reproduce the above
17 * copyright notice, this list of conditions and the following
18 * disclaimer in the documentation and/or other materials provided
19 * with the distribution.
20 *
21 * + Neither the name of the authors or DDTUnit, nor the
22 * names of its contributors may be used to endorse or promote
23 * products derived from this software without specific prior
24 * written permission.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
30 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 ********************************************************************************/
38 package junitx.ddtunit.data.processing;
39
40 import java.io.IOException;
41 import java.util.Iterator;
42 import java.util.Map;
43 import java.util.Properties;
44 import java.util.Map.Entry;
45
46 /**
47 * @author jg
48 */
49 public class TypeAbbreviator {
50 /**
51 * Properties file containing shortcut to java type mappings
52 */
53 public static final String TYPEABBREVIATOR_PROPERTIES = "TypeAbbreviator.properties";
54
55 private static final String LF = "\n";
56
57 private static final String DELIM = " - ";
58
59 private static TypeAbbreviator singleton;
60
61 private static Properties dictionary = new Properties();
62
63 /**
64 * @throws IOException
65 *
66 */
67 private TypeAbbreviator() throws IOException {
68 dictionary.load(TypeAbbreviator.class
69 .getResourceAsStream(TYPEABBREVIATOR_PROPERTIES));
70 }
71
72 /**
73 * Provide singleton reference on a <code>TypeAbbreviator</code> class.
74 *
75 * @return instance of TypeAbbreviator
76 * @throws IOException
77 */
78 public final static TypeAbbreviator getInstance() throws IOException {
79 if (singleton == null) {
80 singleton = new TypeAbbreviator();
81 }
82 return singleton;
83 }
84
85 /**
86 * Check for java type shortcut in internal type dictionary. If nothing
87 * found, the original type is returned else the expanded type.
88 *
89 * @param shortcut to resolve
90 * @return resolved form if exists or shortcut input if no dictionary entry
91 */
92 public String resolve(String shortcut) {
93 String resolved;
94 String extended = (String) dictionary.get(shortcut);
95 if (extended != null) {
96 resolved = extended;
97 } else {
98 resolved = shortcut;
99 }
100 return resolved;
101 }
102
103 /**
104 * Print out Mapping definitions.
105 */
106 public String toString() {
107 StringBuffer sb = new StringBuffer("Dictionary of Type Abbreviations:")
108 .append(LF).append(" Key ").append(DELIM).append(" Values ")
109 .append(LF);
110 for (Iterator iter = dictionary.entrySet().iterator(); iter.hasNext();) {
111 Map.Entry dictEntry = (Entry) iter.next();
112 String key = (String) dictEntry.getKey();
113 sb.append(key).append(DELIM).append(dictEntry.getValue());
114 if (iter.hasNext()) {
115 sb.append(LF);
116 }
117 }
118 return sb.toString();
119 }
120
121 /**
122 * @return Number of abbreviation entries in dictionary
123 */
124 public int size() {
125 return dictionary.size();
126 }
127
128 public static void main(String[] argv) throws IOException {
129 TypeAbbreviator abbrev = new TypeAbbreviator();
130 System.out.println(abbrev.toString());
131 }
132 }