1 /***
2 Copyright (C) 2002-2003 Together
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18 */
19
20 package org.webdocwf.util.i18njdbc;
21
22 import java.io.*;
23 import java.util.*;
24
25 /***
26 * Utility methods for i18n jdbc.
27 *
28 * @author Zoran Milakovic
29 * @author Zeljko Kovacevic
30 */
31
32 public class Utils {
33
34 //keywords escape
35 public static final String[] keywords = { "AND", "WHERE", "FROM", "SET", "IS", "CREATE TABLE", "INT0", "INSERT", "VALUES" };
36 public static final String keywordEscape = "~#~KEYWORD~#~";
37 /***
38 * Replace all occurence of forReplace with replaceWith in input string.
39 * @param input represents input string
40 * @param forReplace represents substring for replace
41 * @param replaceWith represents replaced string value
42 * @return new string with replaced values
43 */
44 public static String replaceAll(
45 String input,
46 String forReplace,
47 String replaceWith) {
48 if( input == null )
49 return null;
50 StringBuffer result = new StringBuffer();
51 boolean hasMore = true;
52 while (hasMore) {
53 int start = input.indexOf(forReplace);
54 int end = start + forReplace.length();
55 if (start != -1) {
56 result.append(input.substring(0, start) + replaceWith);
57 input = input.substring(end);
58 }
59 else {
60 hasMore = false;
61 result.append(input);
62 }
63 }
64 if (result.toString().equals(""))
65 return input; //nothing is changed
66 else
67 return result.toString();
68 }
69
70 /***
71 * This method transform binary object to string object
72 * @param b is array of bytes which represents binary object
73 * @return string representation of binary object
74 */
75 public static String bytesToHexString(byte[] b) {
76 String hexString = null;
77 try {
78 if (b != null) {
79 ByteArrayInputStream is = new ByteArrayInputStream(b);
80 hexString = streamToHexString(is);
81 return hexString;
82 }
83 else {
84 return null;
85 }
86 }
87 catch (Exception e) {
88 }
89 return hexString;
90 }
91
92 public static String handleBinaryString(String binaryString, List binaryStreamObjectList) {
93 if( binaryString == null )
94 return null;
95 String retVal = binaryString;
96 if (retVal.startsWith(I18nSqlParser.BINARY_STREAM_OBJECT)) {
97 int index = Integer.valueOf(retVal.substring(I18nSqlParser.
98 BINARY_STREAM_OBJECT.length())).intValue();
99 //check for null values
100 if( binaryStreamObjectList.get(index - 1 ) != null )
101 retVal = binaryStreamObjectList.get(index - 1).toString();
102 else retVal = null;
103 }
104 return retVal;
105 }
106
107 public static String handleQuotedString(String quotedString) {
108 if( quotedString == null )
109 return null;
110 String retVal = quotedString;
111 if ( (retVal.startsWith("'") && retVal.endsWith("'"))) {
112 if (!retVal.equals("''")) {
113 retVal = retVal.substring(retVal.indexOf("'") + 1,
114 retVal.lastIndexOf("'"));
115 }
116 else {
117 retVal = "";
118 }
119 } else {
120 if( retVal.equals("null") )
121 retVal = null;
122 }
123 return retVal;
124 }
125
126 public static String[] replaceLineBrakesAndCarrReturn(
127 String[] toReplace,
128 String lineBreakEscape,
129 String carriageReturnEscape) {
130 String[] retVal = new String[toReplace.length];
131 for (int i = 0; i < toReplace.length; i++) {
132 if (toReplace[i] != null) {
133 retVal[i] = replaceAll(toReplace[i], "\n", lineBreakEscape);
134 retVal[i] = replaceAll(retVal[i], "\r", carriageReturnEscape);
135 }
136 }
137 return retVal;
138 }
139
140 /***
141 * Compare two values.
142 * @param valA first value
143 * @param valB second value
144 * @return true if values are equal, false otherwise
145 */
146 public static boolean compareValues(String valA, String valB) {
147 boolean retVal = false;
148
149 if( valA == null && valB == null )
150 retVal = true;
151 else if( valA == null && valB != null )
152 retVal = false;
153 else if( valA != null && valB == null )
154 retVal = false;
155 else if( valA.equals(valB) )
156 retVal = true;
157
158 return retVal;
159 }
160
161 /***
162 * This method transform string object to binary object (array of bytes)
163 * @param val is string representation of binary object
164 * @return binary object
165 */
166 public static byte[] hexStringToBytes(String val) {
167 byte[] buf = new byte[val.length() / 2];
168 final char[] hexBytes = {
169 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
170 'E', 'F'
171 };
172 byte[] hexMap = new byte[256];
173 for (int i = 0; i < hexBytes.length; i++) {
174 hexMap[hexBytes[i]] = (byte) i;
175 }
176 int pos = 0;
177 for (int i = 0; i < buf.length; i++) {
178 buf[i] = (byte) (hexMap[val.charAt(pos++)] << 4);
179 buf[i] += hexMap[val.charAt(pos++)];
180 }
181 return buf;
182 }
183
184 /***
185 *
186 * @param is
187 * @return String that represent InputStream is.
188 * @throws IOException
189 */
190 public static String streamToHexString(InputStream is) throws IOException {
191 try {
192 char[] hexBytes = {
193 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
194 'E', 'F'};
195 int c;
196 StringBuffer hexString = new StringBuffer();
197 while ( (c = is.read()) >= 0) {
198 hexString.append(hexBytes[ (c >> 4) & 0xf]);
199 hexString.append(hexBytes[c & 0xf]);
200 }
201 return hexString.toString();
202 }
203 catch (Exception e) {
204 throw new IOException(e.getMessage());
205 }
206 }
207
208 /***
209 * Method replace all keywords in string passed as parameter.
210 * @param s String within replace should be done.
211 * @param oldValues HashMap with old values.
212 * @return String with special character array instead of keywords.
213 */
214 public static String replaceKeywords(String s, HashMap oldValues) {
215 String retVal = s;
216 int index = 1;
217 for (int i = 0; i < keywords.length; i++) {
218 StringBuffer result = new StringBuffer();
219 boolean hasMore = true;
220 while (hasMore) {
221 int start = retVal.toUpperCase().indexOf(keywords[i].toUpperCase());
222 int end = start + keywords[i].length();
223 if (start != -1) {
224 String newValue = keywordEscape + String.valueOf(index);
225 while( oldValues.containsKey(newValue) ) {
226 index++;
227 newValue = keywordEscape + String.valueOf(index);
228 }
229 result.append(retVal.substring(0, start) + newValue);
230 oldValues.put(newValue, retVal.substring(start, end));
231 retVal = retVal.substring(end);
232 }
233 else {
234 hasMore = false;
235 result.append(retVal);
236 }
237 }
238 if (!result.toString().equals(""))
239 retVal = result.toString();
240 }
241 return retVal;
242 }
243
244 /***
245 * Method replace all keywords in string passed as parameter.
246 * @param s String within replace should be done.
247 * @param oldValues HashMap with old values.
248 * @return String with special character array instead of keywords.
249 */
250 public static String replaceKeywordsBack(String s, HashMap oldValues) {
251 String retVal = s;
252 Set keys = oldValues.keySet();
253 Iterator it = keys.iterator();
254 Object key = "";
255 String value = "";
256 while( it.hasNext() ) {
257 key = it.next();
258 value = (String)oldValues.get(key.toString());
259 if( value != null )
260 retVal = replaceAll(retVal, key.toString(), value.toString());
261 }
262 return retVal;
263 }
264
265 }
This page was automatically generated by Maven