001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.fukurou.process;
017
018 import org.opengion.fukurou.security.HybsCryptography;
019 import org.opengion.fukurou.util.Argument;
020 import org.opengion.fukurou.util.StringUtil;
021 import org.opengion.fukurou.util.LogWriter;
022
023 import java.util.Map ;
024 import java.util.LinkedHashMap ;
025
026 /**
027 * Process_StringUtil は、上流から受け取ったデータをStringUtilクラスの特定?
028 * メソ?で??タ変換する、CainProcess インターフェースの実?ラスです?
029 *
030 * 上?プロセスチェインの??タは上流から下流へと渡されます?)から
031 * LineModel を?に、指定?カラ???を、変換します?
032 *
033 * 現時点で利用できるStringUtil のメソ?は、下記?通りです?
034 * urlEncode : UTF-8 で、URLエンコードを行う?
035 * rTrim : ??の後ろのスペ?スを削除
036 * htmlFilter : HTML上?エスケープ文字を変換
037 * code39 : CODE39 の ??を作?(チェ???付き)
038 * getUnicodeEscape : HTML のエスケープ記号(&#xZZZZ;)に変換
039 * getReplaceEscape : HTML のエスケープ記号(&#xZZZZ;)を戻?
040 * spanCut : 引数からspanタグを取り除?
041 *
042 * HybsCryptography のメソ?も呼び出せます?
043 * getMD5 : MessageDigestにより、MD5 でハッシュした?に変換
044 * encrypt : Hybs独自の暗号化を行いま?Hybs?設定?秘?)
045 * decrypt : Hybs独自の復号化を行いま?Hybs?設定?秘?)
046 *
047 * 引数??中にスペ?スを含??合?、ダブルコー??ション("") で括って下さ??
048 * 引数??の ?』?前後には、スペ?スは挟めません。??key=value の様に
049 * 繋げてください?
050 *
051 * @og.formSample
052 * Process_StringUtil -action=getMD5|encrypt|decrypt|code39|getUnicodeEscape|getReplaceEscape|??? -keys=AA,BB,CC
053 *
054 * -action=ESC|REV ?StringUtilクラスの特定?メソ?名を?しま???)?
055 * urlEncode|rTrim|htmlFilter|getMD5|code39|getUnicodeEscape|getReplaceEscape|spanCut
056 * -keys=AA,BB,CC ?変換するカラ?CSV形式で??できま???)?
057 * [ -display=false|true ] ?結果を標準?力に表示する(true)かしな?false)?初期値:false[表示しない])
058 *
059 * @og.rev 5.0.0.2 (2009/09/15) 新規クラス作?
060 *
061 * @version 0.9.0 2004/02/27
062 * @author Kazuhiko Hasegawa
063 * @since JDK5.0,
064 */
065 public class Process_StringUtil extends AbstractProcess implements ChainProcess {
066
067 private static final String STR_ACTION_BASE = "org.opengion.fukurou.process.Process_StringUtil$SU_" ;
068
069 private String keys = null; // 変換するカラ?配?のアドレス
070 private int[] clmNos = null; // 変換するカラ?配?のアドレス
071 private boolean display = false; // 表示しな?
072
073 private boolean firstRow = true; // ??の?目
074 private int count = 0;
075 private StrAction stAction = null; // Ver 5.0.0.2 (2009/09/15)
076
077 private static final Map<String,String> mustProparty ; // ?プロパティ???チェ?用 Map
078 private static final Map<String,String> usableProparty ; // ?プロパティ?整合?チェ? Map
079
080 static {
081 mustProparty = new LinkedHashMap<String,String>();
082 mustProparty.put( "action", "StringUtilの特定?メソ?を指定しま???)"
083 + CR + "urlEncode , rTrim , htmlFilter , getMD5 , encrypt , decrypt , code39 , getUnicodeEscape , getReplaceEscape , spanCut" );
084
085 mustProparty.put( "keys", "変換するカラ?CSV形式で??できま???)? );
086
087 usableProparty = new LinkedHashMap<String,String>();
088 usableProparty.put( "display", "結果を標準?力に表示する(true)かしな?false)?
089 + CR + " (初期値:false[表示しない])" );
090 }
091
092 /**
093 * ?ォルトコンストラクター?
094 * こ?クラスは、動??されます??ォルトコンストラクターで?
095 * super クラスに対して、?な初期化を行っておきます?
096 *
097 */
098 public Process_StringUtil() {
099 super( "org.opengion.fukurou.process.Process_StringUtil",mustProparty,usableProparty );
100 }
101
102 /**
103 * プロセスの初期化を行います?初めに??、呼び出されます?
104 * 初期処?ファイルオープン??オープン?に使用します?
105 *
106 * @param paramProcess ??タベ?スの接続???などを持って?オブジェク?
107 */
108 public void init( final ParamProcess paramProcess ) {
109 Argument arg = getArgument();
110
111 keys = arg.getProparty( "keys",keys );
112 display = arg.getProparty( "display",display );
113
114 String act = arg.getProparty( "action" );
115
116 stAction = (StrAction)StringUtil.newInstance( STR_ACTION_BASE + act );
117 }
118
119 /**
120 * 引数の LineModel を??るメソ?です?
121 * 変換処?? LineModel を返します?
122 * 後続??行わな?????タのフィルタリングを行う場?は?
123 * null ??タを返します?つまり?null ??タは、後続??行わな?
124 * フラグの代わりにも使用して?す?
125 * なお?変換処?? LineModel と、オリジナルの LineModel が?
126 * 同?、コピ?(クローン)か?、各処?ソ??決めて?す?
127 * ドキュメントに明記されて???合?、副作用が問題になる?合??
128 * ???とに自?コピ?(クローン)して下さ??
129 *
130 * @param data オリジナルのLineModel
131 *
132 * @return 処?換後?LineModel
133 */
134 public LineModel action( final LineModel data ) {
135 count++ ;
136 try {
137 if( firstRow ) {
138 makeColumnNos( data );
139 firstRow = false;
140 }
141
142 for( int i=0; i<clmNos.length; i++ ) {
143 String val = (String)data.getValue( clmNos[i] ) ;
144 data.setValue( clmNos[i],stAction.change( val ) );
145 }
146
147 if( display ) { printKey( count,data ); }
148 }
149 catch( Throwable ex ) {
150 String errMsg = "row=[" + count + "]" + CR +
151 " data=[" + data + "]" + CR ;
152 throw new RuntimeException( errMsg,ex );
153 }
154 return data;
155 }
156
157 /**
158 * プロセスの終?行います??に??、呼び出されます?
159 * 終???ファイルクローズ??クローズ?に使用します?
160 *
161 * @param isOK ト?タルで、OK?たかど?[true:成功/false:失敗]
162 */
163 public void end( final boolean isOK ) {
164 keys = null; // 変換するカラ?配?のアドレス
165 clmNos = null; // 変換するカラ?配?のアドレス
166 }
167
168 /**
169 * プロセスの処?果のレポ?ト表現を返します?
170 * 処??ログラ?、?力件数、?力件数などの??です?
171 * こ???をそのまま、標準?力に出すことで、結果レポ?トと出来るよ?
172 * 形式で出してください?
173 *
174 * @return 処?果のレポ??
175 */
176 public String report() {
177 String report = "[" + getClass().getName() + "]" + CR
178 + TAB + "Output Count : " + count ;
179
180 return report ;
181 }
182
183 /**
184 * カラ?号配?を取得します?
185 * 繰返し処?行う場合に、事前にアドレスでアクセスできるように処?るカラ?号?
186 * キャ?ュしておきます?
187 *
188 * @param data LineModelオブジェク?
189 */
190 private void makeColumnNos( final LineModel data ) {
191 String[] clms = StringUtil.csv2Array( keys );
192 int size = clms.length;
193 clmNos = new int[size];
194 for( int i=0; i<size; i++ ) {
195 clmNos[i] = data.getColumnNo( clms[i] );
196 }
197 }
198
199 /**
200 * 画面出力用のフォーマットを作?します?
201 *
202 * @param rowNo ??タ読み取り件数
203 * @param data LineModelオブジェク?
204 */
205 private void printKey( final int rowNo , final LineModel data ) {
206 StringBuilder buf = new StringBuilder();
207
208 buf.append( "row=[" ).append( rowNo ).append( "] : " );
209 for( int i=0; i < clmNos.length; i++ ) {
210 buf.append( data.getName( clmNos[i] ) );
211 buf.append( " ?" );
212 buf.append( data.getValue( clmNos[i] ) );
213 buf.append( " , " );
214 }
215
216 println( buf.toString() );
217 }
218
219 /**
220 * こ?クラスの使用方法を返します?
221 *
222 * @return こ?クラスの使用方?
223 */
224 public String usage() {
225 StringBuilder buf = new StringBuilder();
226
227 buf.append( "Process_StringUtil は、上流から受け取ったデータをStringUtilクラスの特定?" ).append( CR );
228 buf.append( "メソ?で??タ変換する、CainProcess インターフェースの実?ラスです?" ).append( CR );
229 buf.append( CR );
230 buf.append( "上?プロセスチェインの??タは上流から下流へと渡されます?)から" ).append( CR );
231 buf.append( " LineModel を?に、指定?カラ???を、変換します?" ).append( CR );
232 buf.append( CR );
233 buf.append( "現時点で利用できるStringUtil のメソ?は、下記?通りです?" ).append( CR );
234 buf.append( " urlEncode : UTF-8 で、URLエンコードを行う? ).append( CR );
235 buf.append( " rTrim : ??の後ろのスペ?スを削除" ).append( CR );
236 buf.append( " htmlFilter : HTML上?エスケープ文字を変換" ).append( CR );
237 buf.append( " code39 : CODE39 の ??を作?(チェ???付き)" ).append( CR );
238 buf.append( " getUnicodeEscape : HTML のエスケープ記号(&#xZZZZ;)に変換" ).append( CR );
239 buf.append( " getReplaceEscape : HTML のエスケープ記号(&#xZZZZ;)を戻? ).append( CR );
240 buf.append( " spanCut : 引数からspanタグを取り除? ).append( CR );
241 buf.append( CR );
242 buf.append( "HybsCryptography のメソ?も呼び出せます?" ).append( CR );
243 buf.append( " getMD5 : MessageDigestにより、MD5 でハッシュした?に変換" ).append( CR );
244 buf.append( " encrypt : Hybs独自の暗号化を行いま?Hybs?設定?秘?)" ).append( CR );
245 buf.append( " decrypt : Hybs独自の復号化を行いま?Hybs?設定?秘?)" ).append( CR );
246 buf.append( CR );
247 buf.append( "引数??中に空白を含??合?、ダブルコー??ション(\"\") で括って下さ??" ).append( CR );
248 buf.append( "引数??の ?』?前後には、空白は挟めません。??key=value の様に" ).append( CR );
249 buf.append( "繋げてください? ).append( CR );
250 buf.append( CR ).append( CR );
251 buf.append( getArgument().usage() ).append( CR );
252
253 return buf.toString();
254 }
255
256 /**
257 * こ?クラスは、main メソ?から実行できません?
258 *
259 * @param args コマンド引数配?
260 */
261 public static void main( final String[] args ) {
262 LogWriter.log( new Process_StringUtil().usage() );
263 }
264
265 /**
266 * インナ?クラスとして、?通メソ?を定義しま?I/Fの代わり)?
267 */
268 public static class StrAction {
269 /**
270 * 引数を変換します?
271 *
272 * @param val 引数
273 * @return 変換された文字?
274 */
275 public String change( final String val ) {
276 return val;
277 }
278 }
279
280 /**
281 * UTF-8 で、URLエンコードを行います?
282 */
283 public static class SU_urlEncode extends StrAction {
284 /**
285 * 引数を変換します?
286 *
287 * @param val 引数
288 * @return 変換された文字?
289 */
290 @Override
291 public String change( final String val ) {
292 return StringUtil.urlEncode( val );
293 }
294 }
295
296 /**
297 * ??の後ろのスペ?スを削除します?
298 * 注意?\u0020' (スペ?ス?? より小さ?字を?取ります?
299 */
300 public static class SU_rTrim extends StrAction {
301 /**
302 * 引数を変換します?
303 *
304 * @param val 引数
305 * @return 変換された文字?
306 */
307 @Override
308 public String change( final String val ) {
309 return StringUtil.rTrim( val );
310 }
311 }
312
313 /**
314 * HTML上?エスケープ文字を変換します?
315 */
316 public static class SU_htmlFilter extends StrAction {
317 /**
318 * 引数を変換します?
319 *
320 * @param val 引数
321 * @return 変換された文字?
322 */
323 @Override
324 public String change( final String val ) {
325 return StringUtil.htmlFilter( val );
326 }
327 }
328
329 /**
330 * CODE39 の ??を作?します?(チェ???付き)
331 */
332 public static class SU_code39 extends StrAction {
333 /**
334 * 引数を変換します?
335 *
336 * @param val 引数
337 * @return 変換された文字?
338 */
339 @Override
340 public String change( final String val ) {
341 return StringUtil.code39( val,true );
342 }
343 }
344
345 /**
346 * Unicode??の値?HTML のエスケープ記号(&#xZZZZ;)に変換します?
347 */
348 public static class SU_getUnicodeEscape extends StrAction {
349 /**
350 * 引数を変換します?
351 *
352 * @param val 引数
353 * @return 変換された文字?
354 */
355 @Override
356 public String change( final String val ) {
357 return StringUtil.getUnicodeEscape( val );
358 }
359 }
360
361 /**
362 * HTML のエスケープ記号(&#xZZZZ;)をUnicode??に戻します?
363 */
364 public static class SU_getReplaceEscape extends StrAction {
365 /**
366 * 引数を変換します?
367 *
368 * @param val 引数
369 * @return 変換された文字?
370 */
371 @Override
372 public String change( final String val ) {
373 return StringUtil.getReplaceEscape( val );
374 }
375 }
376
377 /**
378 * 引数からspanタグを取り除?返します?
379 */
380 public static class SU_spanCut extends StrAction {
381 /**
382 * 引数を変換します?
383 *
384 * @param val 引数
385 * @return 変換された文字?
386 */
387 @Override
388 public String change( final String val ) {
389 return StringUtil.spanCut( val );
390 }
391 }
392
393 /**
394 * MessageDigestにより、MD5 でハッシュした?に変換します?
395 *
396 * @og.rev 5.2.2.0 (2010/11/01) util.StringUtil から security.HybsCryptography へ移?
397 *
398 */
399 public static class SU_getMD5 extends StrAction {
400 /**
401 * 引数を変換します?
402 *
403 * @param val 引数
404 * @return 変換された文字?
405 */
406 @Override
407 public String change( final String val ) {
408 return HybsCryptography.getMD5( val );
409 }
410 }
411
412 /**
413 * Hybs独自の暗号化を行いま?Hybs?設定?秘?)
414 *
415 * @og.rev 5.2.2.0 (2010/11/01) 新規追?
416 */
417 public static class SU_encrypt extends StrAction {
418 private HybsCryptography crpt = null;
419
420 /**
421 * 引数を変換します?
422 *
423 * @param val 引数
424 * @return 変換された文字?
425 */
426 @Override
427 public String change( final String val ) {
428 if( crpt == null ) {
429 crpt = new HybsCryptography();
430 }
431 return crpt.encrypt( val );
432 }
433 }
434
435 /**
436 * Hybs独自の復号化を行いま?Hybs?設定?秘?)
437 *
438 * @og.rev 5.2.2.0 (2010/11/01) 新規追?
439 */
440 public static class SU_decrypt extends StrAction {
441 private HybsCryptography crpt = null;
442
443 /**
444 * 引数を変換します?
445 *
446 * @param val 引数
447 * @return 変換された文字?
448 */
449 @Override
450 public String change( final String val ) {
451 if( crpt == null ) {
452 crpt = new HybsCryptography();
453 }
454 return crpt.decrypt( val );
455 }
456 }
457 }