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