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