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 }