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 }