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 }