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.util.Argument; 019 import org.opengion.fukurou.util.StringUtil; 020 import org.opengion.fukurou.util.LogWriter; 021 022 import java.util.Map ; 023 import java.util.LinkedHashMap ; 024 025 /** 026 * ã€å»?¢ã€‘Process_UnicodeEscape ã¯ã€ä¸Šæµã‹ã‚‰å—ã‘å–ã£ãŸãƒ‡ãƒ¼ã‚¿ã‚’エスケープ変æ›ã™ã‚‹ 027 * ChainProcess インターフェースã®å®Ÿè£?‚¯ãƒ©ã‚¹ã§ã™ã? 028 * 029 * ※ 5.0.0.2 (2009/09/15) ã“ã?クラスã¯ã€å»?¢ã«ãªã‚Šã¾ã—ãŸã€? 030 * 類似機è?ã«ã€Process_StringUtil を利用ã—ã¦ãã ã•ã„ã€? 031 * -action 引数ã«ã€getUnicodeEscape ã‹ã?getReplaceEscape を指定ã™ã‚‹ã“ã¨ã§ã€? 032 * ESCAPE(変æ›)/REVERSE(戻ã? ã®æŒ?®šã¨åŒä¸??処ç?‚’行ã„ã¾ã™ã? 033 * 034 * 上æµ?プãƒã‚»ã‚¹ãƒã‚§ã‚¤ãƒ³ã®ãƒ??ã‚¿ã¯ä¸Šæµã‹ã‚‰ä¸‹æµã¸ã¨æ¸¡ã•れã¾ã™ã?)ã‹ã‚‰å—ã‘å–ã£ã? 035 * LineModel ã‚’å?ã«ã€æŒ‡å®šã?カラãƒ??UTF-8 æ–?—コードã¨ã€HTML ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—è¨˜å· 036 * (&#xZZZZ;)æ–?—ã¨ã®ç›¸äº’変æ›ã‚’行ã„ã¾ã™ã? 037 * 入力文å—ã‚’ã€ã‚ャラクタ(char)åž‹ã«åˆ?§£ã—ã?(&#xZZZZ;)ã«å¤‰æ›ã—ã¦ã?ã¾ã™ã? 038 * よã£ã¦ã€??常ã«?‘æ–‡å?Shift-JISã§?’Byte,UTF-8ã§?“Byte)ãŒã??˜Byteã«ãªã‚Šã¾ã™ã? 039 * ã“ã?変æ›ã•ã‚ŒãŸæ–‡å—å?ã‚’ã?HTML上ã§ãã?ã¾ã¾å–り出ã™ã¨ã€å?ã®Unicodeæ–?—ã«æˆ»ã‚‹ç‚ºã€? 040 * 通常ã®Shift-JISã§ã¯ã€æ‰±ãˆãªã?–‡å?ä¸å›½èªžãªã©)ã§ã‚‚表示å¯èƒ½ã«ãªã‚Šã¾ã™ã? 041 * 042 * 引数æ–?—å?ä¸ã«ã‚¹ãƒšã?スをå«ã‚??åˆã?ã€ãƒ€ãƒ–ルコーãƒ??ション("") ã§æ‹¬ã£ã¦ä¸‹ã•ã?? 043 * 引数æ–?—å?ã® ã€?ã€ã?å‰å¾Œã«ã¯ã€ã‚¹ãƒšã?ã‚¹ã¯æŒŸã‚ã¾ã›ã‚“。å¿?šã€?key=value ã®æ§˜ã« 044 * 繋ã’ã¦ãã ã•ã„ã€? 045 * 046 * @og.formSample 047 * Process_UnicodeEscape -action=ESC|REV [-keys=AA,BB,CC] [-all=false|true] 048 * 049 * -action=ESC|REV ?šESCAPE(変æ›)/REVERSE(戻ã? を指定ã—ã¾ã™ã?å…ˆé?æ–?—ã§åˆ¤å®šã—ã¾ã?å¿??)ã€? 050 * [ -keys=AA,BB,CC ] ?šå¤‰æ›ã™ã‚‹ã‚«ãƒ©ãƒ?‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã§ãã¾ã™ã? 051 * [ -all=false|true ] ?šå?カラãƒ?‚’変æ›ã™ã‚‹å ´åˆã?ã€trueã‚’è¨å®šã—ã¾ã?åˆæœŸå€¤:false[部åˆ?Œ‡å®š]) 052 * [ -display=false|true ] ?šçµæžœã‚’標準å?力ã«è¡¨ç¤ºã™ã‚‹(true)ã‹ã—ãªã?false)ã?åˆæœŸå€¤:false[表示ã—ãªã„]) 053 * 054 * @og.rev 5.0.0.2 (2009/09/15) å»?¢ã‚¯ãƒ©ã‚¹ã§ã™ã? 055 * @deprecated 5.0.0.2 (2009/09/15) å»?¢ã‚¯ãƒ©ã‚¹ã§ã™ã?類似機è?ã«ã€Process_StringUtil を利用ã—ã¦ãã ã•ã„ã€? 056 * @version 0.9.0 2004/02/27 057 * @author Kazuhiko Hasegawa 058 * @since JDK5.0, 059 */ 060 @Deprecated public class Process_UnicodeEscape extends AbstractProcess implements ChainProcess { 061 062 private boolean isEscape = true; // å¤‰æ›æ–¹æ³?true:Escape/false:Reverse) 063 private String keys = null; // 変æ›ã™ã‚‹ã‚«ãƒ©ãƒ?é…å?ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ 064 private int[] clmNos = null; // 変æ›ã™ã‚‹ã‚«ãƒ©ãƒ?é…å?ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ 065 private boolean all = false; // 部åˆ?Œ‡å®? 066 private boolean display = false; // 表示ã—ãªã? 067 068 private boolean firstRow = true; // æœ??ã®ä¸?¡Œç›® 069 private int count = 0; 070 071 private static final Map<String,String> mustProparty ; // ?»ãƒ—ãƒãƒ‘ティ?½å¿??ãƒã‚§ãƒ?‚¯ç”¨ Map 072 private static final Map<String,String> usableProparty ; // ?»ãƒ—ãƒãƒ‘ティ?½æ•´åˆæ?ãƒã‚§ãƒ?‚¯ Map 073 074 static { 075 mustProparty = new LinkedHashMap<String,String>(); 076 mustProparty.put( "action", "ESCAPE(変æ›)/REVERSE(戻ã? を指定ã—ã¾ã?å¿??)" ); 077 078 usableProparty = new LinkedHashMap<String,String>(); 079 usableProparty.put( "keys", "変æ›ã™ã‚‹ã‚«ãƒ©ãƒ?‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã§ãã¾ã™ã?" ); 080 usableProparty.put( "all", "全カラãƒ?‚’変æ›ã™ã‚‹å ´åˆã?ã€trueã‚’è¨å®šã—ã¾ã™ã?" 081 + CR + " (åˆæœŸå€¤:false:部åˆ?Œ‡å®?" ); 082 usableProparty.put( "display", "çµæžœã‚’標準å?力ã«è¡¨ç¤ºã™ã‚‹(true)ã‹ã—ãªã?false)ã? 083 + CR + " (åˆæœŸå€¤:false:表示ã—ãªã?" ); 084 } 085 086 /** 087 * ãƒ?ƒ•ォルトコンストラクターã€? 088 * ã“ã?クラスã¯ã€å‹•çš?½œæ?ã•れã¾ã™ã?ãƒ?ƒ•ォルトコンストラクターã§ã€? 089 * super クラスã«å¯¾ã—ã¦ã€å¿?¦ãªåˆæœŸåŒ–を行ã£ã¦ãŠãã¾ã™ã? 090 * 091 */ 092 public Process_UnicodeEscape() { 093 super( "org.opengion.fukurou.process.Process_UnicodeEscape",mustProparty,usableProparty ); 094 } 095 096 /** 097 * プãƒã‚»ã‚¹ã®åˆæœŸåŒ–を行ã„ã¾ã™ã?åˆã‚ã«ä¸?º¦ã?‘ã€å‘¼ã³å‡ºã•れã¾ã™ã? 098 * åˆæœŸå‡¦ç?ファイルオープンã€?¼¤?¢ã‚ªãƒ¼ãƒ—ンç?ã«ä½¿ç”¨ã—ã¾ã™ã? 099 * 100 * @param paramProcess ãƒ??タベã?ã‚¹ã®æŽ¥ç¶šå?æƒ??ãªã©ã‚’æŒã£ã¦ã?‚‹ã‚ªãƒ–ジェクãƒ? 101 */ 102 public void init( final ParamProcess paramProcess ) { 103 Argument arg = getArgument(); 104 105 keys = arg.getProparty( "keys",keys ); 106 all = arg.getProparty( "all",all ); 107 display = arg.getProparty( "display",display ); 108 109 String act = arg.getProparty( "action" ); 110 111 if( act.charAt( 0 ) == 'E' ) { isEscape = true; } 112 else if( act.charAt( 0 ) == 'R' ) { isEscape = false; } 113 else { 114 String errMsg = "action=[" + act + "] ã¯ã€E(SCAPE) ã‹ã?R(EVERSE) ã‚’è¨å®šã—ã¦ä¸‹ã•ã??" 115 + "å…ˆé??‘æ–‡å—ç›®(大æ–??ã§åˆ¤å®šã—ã¦ã?¾ã™ã?"; 116 throw new RuntimeException( errMsg ); 117 } 118 119 if( ( keys == null || keys.length() == 0 ) && !all ) { 120 String errMsg = "keys ã‹ã?all ã¯è¨å®šã—ã¦ä¸‹ã•ã??" 121 + "keys=[" + keys + "], all=[" + all + "]"; 122 throw new RuntimeException( errMsg ); 123 } 124 } 125 126 /** 127 * 引数㮠LineModel ã‚’å?ç?™ã‚‹ãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã? 128 * 変æ›å‡¦ç?¾Œã? LineModel ã‚’è¿”ã—ã¾ã™ã? 129 * 後続å?ç?‚’行ã‚ãªã??å?ãƒ??ã‚¿ã®ãƒ•ィルタリングを行ã†å ´å?ã¯ã€? 130 * null ãƒ??ã‚¿ã‚’è¿”ã—ã¾ã™ã?ã¤ã¾ã‚Šã?null ãƒ??ã‚¿ã¯ã€å¾Œç¶šå?ç?‚’行ã‚ãªã? 131 * フラグã®ä»£ã‚りã«ã‚‚使用ã—ã¦ã?¾ã™ã? 132 * ãªãŠã?変æ›å‡¦ç?¾Œã? LineModel ã¨ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã® LineModel ãŒã? 133 * åŒä¸?‹ã€ã‚³ãƒ”ã?(クãƒãƒ¼ãƒ³)ã‹ã?ã€å„処ç?ƒ¡ã‚½ãƒ?ƒ‰å†?§æ±ºã‚ã¦ã?¾ã™ã? 134 * ドã‚ãƒ¥ãƒ¡ãƒ³ãƒˆã«æ˜Žè¨˜ã•れã¦ã?ªã??åˆã?ã€å‰¯ä½œç”¨ãŒå•題ã«ãªã‚‹å?åˆã?ã€? 135 * å??ç?”ã¨ã«è‡ªåˆ?§ã‚³ãƒ”ã?(クãƒãƒ¼ãƒ³)ã—ã¦ä¸‹ã•ã?? 136 * 137 * @param data オリジナルã®LineModel 138 * 139 * @return 処ç?¤‰æ›å¾Œã?LineModel 140 */ 141 public LineModel action( final LineModel data ) { 142 count++ ; 143 try { 144 if( firstRow ) { 145 makeColumnNos( data ); 146 firstRow = false; 147 } 148 149 for( int i=0; i<clmNos.length; i++ ) { 150 String val = (String)data.getValue( clmNos[i] ) ; 151 152 if( isEscape ) { 153 val = StringUtil.getUnicodeEscape( val ) ; 154 } 155 else { 156 val = StringUtil.getReplaceEscape( val ) ; 157 } 158 data.setValue( clmNos[i],val ); 159 } 160 161 if( display ) { printKey( count,data ); } 162 } 163 catch( Throwable ex ) { 164 String errMsg = "row=[" + count + "]" + CR + 165 " data=[" + data + "]" + CR ; 166 throw new RuntimeException( errMsg,ex ); 167 } 168 return data; 169 } 170 171 /** 172 * プãƒã‚»ã‚¹ã®çµ‚äº?‚’行ã„ã¾ã™ã?æœ?¾Œã«ä¸?º¦ã?‘ã€å‘¼ã³å‡ºã•れã¾ã™ã? 173 * 終äº??ç?ファイルクãƒãƒ¼ã‚ºã€?¼¤?¢ã‚¯ãƒãƒ¼ã‚ºç?ã«ä½¿ç”¨ã—ã¾ã™ã? 174 * 175 * @param isOK トã?タルã§ã€OKã?£ãŸã‹ã©ã?‹[true:æˆåŠŸ/false:失敗] 176 */ 177 public void end( final boolean isOK ) { 178 keys = null; // 変æ›ã™ã‚‹ã‚«ãƒ©ãƒ?é…å?ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ 179 clmNos = null; // 変æ›ã™ã‚‹ã‚«ãƒ©ãƒ?é…å?ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ 180 } 181 182 /** 183 * プãƒã‚»ã‚¹ã®å‡¦ç?µæžœã®ãƒ¬ãƒã?ト表ç¾ã‚’è¿”ã—ã¾ã™ã? 184 * 処ç??ãƒã‚°ãƒ©ãƒ?ã€å?力件数ã€å?力件数ãªã©ã®æƒ??ã§ã™ã? 185 * ã“ã?æ–?—å?ã‚’ãã®ã¾ã¾ã€æ¨™æº–å?力ã«å‡ºã™ã“ã¨ã§ã€çµæžœãƒ¬ãƒã?トã¨å‡ºæ¥ã‚‹ã‚ˆã?ª 186 * å½¢å¼ã§å‡ºã—ã¦ãã ã•ã„ã€? 187 * 188 * @return 処ç?µæžœã®ãƒ¬ãƒã?ãƒ? 189 */ 190 public String report() { 191 String report = "[" + getClass().getName() + "]" + CR 192 + TAB + "Output Count : " + count ; 193 194 return report ; 195 } 196 197 /** 198 * カラãƒ?•ªå·é…å?ã‚’å–å¾—ã—ã¾ã™ã? 199 * ç¹°è¿”ã—処ç?‚’行ã†å ´åˆã«ã€äº‹å‰ã«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«å‡¦ç?™ã‚‹ã‚«ãƒ©ãƒ?•ªå·ã‚? 200 * ã‚ャãƒ?‚·ãƒ¥ã—ã¦ãŠãã¾ã™ã? 201 * 202 * @param data ラインモãƒ?ƒ« 203 */ 204 private void makeColumnNos( final LineModel data ) { 205 if( all ) { 206 String[] names = data.getNames(); 207 int size = names.length; 208 clmNos = new int[size]; 209 for( int i=0; i<size; i++ ) { 210 clmNos[i] = i; 211 } 212 } 213 else { 214 String[] clms = StringUtil.csv2Array( keys ); 215 int size = clms.length; 216 clmNos = new int[size]; 217 for( int i=0; i<size; i++ ) { 218 clmNos[i] = data.getColumnNo( clms[i] ); 219 } 220 } 221 } 222 223 /** 224 * ç”»é¢å‡ºåŠ›ç”¨ã®ãƒ•ォーマットを作æ?ã—ã¾ã™ã? 225 * 226 * @param rowNo ãƒ??ã‚¿èªã¿å–り件数 227 * @param data ラインモãƒ?ƒ« 228 */ 229 private void printKey( final int rowNo , final LineModel data ) { 230 StringBuilder buf = new StringBuilder(); 231 232 buf.append( "row=[" ).append( rowNo ).append( "] : " ); 233 for( int i=0; i < clmNos.length; i++ ) { 234 buf.append( data.getName( clmNos[i] ) ); 235 buf.append( " â‡?" ); 236 buf.append( data.getValue( clmNos[i] ) ); 237 buf.append( " , " ); 238 } 239 240 println( buf.toString() ); 241 } 242 243 /** 244 * ã“ã?クラスã®ä½¿ç”¨æ–¹æ³•ã‚’è¿”ã—ã¾ã™ã? 245 * 246 * @return ã“ã?クラスã®ä½¿ç”¨æ–¹æ³? 247 */ 248 public String usage() { 249 StringBuilder buf = new StringBuilder(); 250 251 buf.append( "Process_UnicodeEscape ã¯ã€ä¸Šæµã‹ã‚‰å—ã‘å–ã£ãŸãƒ‡ãƒ¼ã‚¿ã‚’エスケープ変æ›ã™ã‚‹" ).append( CR ); 252 buf.append( "CainProcess インターフェースã®å®Ÿè£?‚¯ãƒ©ã‚¹ã§ã™ã?" ).append( CR ); 253 buf.append( CR ); 254 buf.append( "上æµ?プãƒã‚»ã‚¹ãƒã‚§ã‚¤ãƒ³ã®ãƒ??ã‚¿ã¯ä¸Šæµã‹ã‚‰ä¸‹æµã¸ã¨æ¸¡ã•れã¾ã™ã?)ã‹ã‚‰" ).append( CR ); 255 buf.append( " LineModel ã‚’å?ã«ã€æŒ‡å®šã?カラãƒ??UTF-8 æ–?—コードã¨ã€HTML ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ? ).append( CR ); 256 buf.append( "記å·(&#xZZZZ;)æ–?—ã¨ã®ç›¸äº’変æ›ã‚’行ã„ã¾ã™ã?" ).append( CR ); 257 buf.append( "入力文å—ã‚’ã€ã‚ャラクタ(char)åž‹ã«åˆ?§£ã—ã?(&#xZZZZ;)ã«å¤‰æ›ã—ã¦ã?ã¾ã™ã?" ).append( CR ); 258 buf.append( "よã£ã¦ã€??常ã«?‘æ–‡å?Shift-JISã§?’Byte,UTF-8ã§?“Byte)ãŒã??˜Byteã«ãªã‚Šã¾ã™ã?" ).append( CR ); 259 buf.append( "ã“ã?変æ›ã•ã‚ŒãŸæ–‡å—å?ã‚’ã?HTML上ã§ãã?ã¾ã¾å–り出ã™ã¨ã€å?ã®Unicodeæ–?—ã«æˆ»ã‚‹ç‚º" ).append( CR ); 260 buf.append( "通常ã®Shift-JISã§ã¯ã€æ‰±ãˆãªã?–‡å?ä¸å›½èªžãªã©)ã§ã‚‚表示å¯èƒ½ã«ãªã‚Šã¾ã™ã?" ).append( CR ); 261 buf.append( CR ); 262 buf.append( "引数æ–?—å?ä¸ã«ç©ºç™½ã‚’å«ã‚??åˆã?ã€ãƒ€ãƒ–ルコーãƒ??ション(\"\") ã§æ‹¬ã£ã¦ä¸‹ã•ã??" ).append( CR ); 263 buf.append( "引数æ–?—å?ã® ã€?ã€ã?å‰å¾Œã«ã¯ã€ç©ºç™½ã¯æŒŸã‚ã¾ã›ã‚“。å¿?šã€?key=value ã®æ§˜ã«" ).append( CR ); 264 buf.append( "繋ã’ã¦ãã ã•ã„ã€? ).append( CR ); 265 buf.append( CR ).append( CR ); 266 buf.append( getArgument().usage() ).append( CR ); 267 268 return buf.toString(); 269 } 270 271 /** 272 * ã“ã?クラスã¯ã€main メソãƒ?ƒ‰ã‹ã‚‰å®Ÿè¡Œã§ãã¾ã›ã‚“ã€? 273 * 274 * @param args コマンド引数é…å? 275 */ 276 public static void main( final String[] args ) { 277 LogWriter.log( new Process_UnicodeEscape().usage() ); 278 } 279 }