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.util;
017
018 import java.util.Map;
019 import java.util.LinkedHashMap;
020 import java.util.List;
021 import java.util.ArrayList;
022 import java.util.Iterator;
023 import java.util.Arrays;
024 import java.util.Date;
025 import java.util.Locale;
026
027 import java.text.DateFormat;
028 import java.text.SimpleDateFormat;
029
030 /**
031 * Argument ã¯ã€ãƒãƒ?ƒå‡¦ç?? main メソãƒ?ƒ‰ã®å¼•æ•°ã‚’è§£æžã™ã‚‹ã‚¯ãƒ©ã‚¹ã§ã™ã?
032 * Argument ã¯ã€?¼“ã¤ã®ã‚¿ã‚¤ãƒ—ã«åˆ?‹ã‚Œã¾ã™ã?
033 *
034 * ?»ã‚³ãƒ¡ãƒ³ãƒˆï¼½ ??# ã§å§‹ã¾ã‚‹å¼•æ•°ã§ã€ä½¿ç”¨ã•れã¾ã›ã‚“ã€?登録もã•れã¾ã›ã‚“ã€?
035 * ?»å¼•æ•°?½ ??#,-,= 以外ã§å§‹ã¾ã‚‹é?å¸¸ã®æ–?—å?。登録ã®é ?•ªãŒæŒ‡å®šã•れã¾ã™ã?
036 * ?»ãƒ—ãƒãƒ‘ティ?½??- ã§å§‹ã¾ã‚Šã?ã‚ーã¨å€¤ã‚?ã§åŒºåˆ?£ã¦ã?‚‹ãƒ‘ラメータã§ã™ã?é ?ºã?無関係ã?
037 *
038 * ã“れらã?タイプを混在ã•ã›ã¦ã‚‚æ§‹ã„ã¾ã›ã‚“ã€?引数]ã¯ã€[コメンãƒ? ã‚„[プãƒãƒ‘ティ]ã‚?
039 * 無視ã—ãŸã?入力ã?é ?•ªãŒé‡è¦è¦–ã•れã¾ã™ã?å–り出ã™å?åˆã‚‚ã€ç•ªå·ã§å–り出ã—ã¾ã™ã?
040 * æœ??ã®?»å¼•æ•°?½ãŒã?0 ã§ã€ä»¥é™?引数個数-1 ã¾ã§ã®ç•ªå·ã§å–り出ã—ã¾ã™ã?
041 * ?»ãƒ—ãƒãƒ‘ティ?½ã¯ã€??番ã¯ç„¡è¦–ã—ã€ã‚ー部を指定ã™ã‚‹ã“ã¨ã§å–り出ã›ã¾ã™ã?
042 * ãŸã ã—ã?ã‚ー部をé‡è¤?—ã¦ç™»éŒ²ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“。ãªãŠã?ã‚ー部ã®é ã®æ–?—å?ã®ã¿ã§
043 * å–り出ã™ãƒ¡ã‚½ãƒ?ƒ‰ãŒã‚ã‚‹ãŸã‚ã?key1,key2,key3 ãªã©ã¨æŒ?®šã—ã¦ã€key ã§å–り出ã›ã?ã€?
044 * è¤?•°ãƒ—ãƒãƒ‘ティをåŒä¸?‚ーã§å–り出ã™ã“ã¨ãŒå¯èƒ½ã§ã™ã?
045 * ?»ãƒ—ãƒãƒ‘ティ?½ã®æŒ?®šã§ã¯ã€ã‚ーã¨å€¤ã‚?ã§åŒºåˆ?‚Šã¾ã™ãŒã€ãã®å‰å¾Œã«ã‚¹ãƒšã?スã‚?
046 * 入れãªã?§ä¸‹ã•ã??引数ã®å‰å¾Œã« = ãŒä»˜ãæ–?—å?ã¯æŒ?®šã§ãã¾ã›ã‚“ã€?
047 *
048 * java Program AAA BBB #CCC -DD=XX -EE=YY -FF=ZZ GGG
049 * ~~~ ~~~ ~~~~ ~~~~~~ ~~~~~~ ~~~~~~ ~~~
050 * ?»ã‚³ãƒ¡ãƒ³ãƒˆï¼½ ??#CCC
051 * ?»å¼•æ•°?½ ??[0]=AAA , [1]=BBB , [2]=GGG
052 * ?»ãƒ—ãƒãƒ‘ティ?½??key=DD,val=XX key=EE,val=YY key=FF,val=ZZ
053 *
054 * Argument ã®æ•´åˆæ?ãƒã‚§ãƒ?‚¯ã¯ã€?¼“ã¤ã®ãƒ‘ターンãŒã‚りã¾ã™ã?
055 *
056 * ?»å¼•æ•°?½å€‹æ•°æŒ?®??šå¼•æ•°è‡ªèº«ã®æœ?°å?æ•°ã€æœ€å¤§å€‹æ•°ã‚’登録ã—ã¦ãŠãã“ã¨ã§ã€ã?ãƒãƒ‘ティã®ãƒã‚¤ãƒ•ン忘れç‰ã‚’防æ¢ã—ã¾ã™ã?
057 * ?»ãƒ—ãƒãƒ‘ティ?½å¿??ãƒã‚§ãƒ?‚¯ ?šå¿??ã‚ーãŒç™»éŒ²ã•れãŸã‹ã©ã?‹ã®ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
058 * ?»ãƒ—ãƒãƒ‘ティ?½æ•´åˆæ?ãƒã‚§ãƒ?‚¯ ??æŒ?®šã•れã¦ã?‚‹ã‚ーã®ã¿ç™»éŒ²å¯èƒ½ã§ã™ã?
059 *
060 * ã“れらã?ãƒã‚§ãƒ?‚¯ã§ã€æ•´åˆæ?ãƒã‚§ãƒ?‚¯ã®ã¿ã€Argument ã®ç™»éŒ²æ™‚ã«è¡Œã„ã¾ã™ã?
061 * ãれ以外ã?ã€å–りå?ã—æ™‚ã¾ã§ã€åˆ¤æ–ã§ãã¾ã›ã‚“ã€?
062 * (å–り出ã—ã?ã€ç™»éŒ²ãŒã™ã¹ã¦çµ‚äº?—ãŸã?ã¡ã«è¡Œã‚れるã¨ä»®å®šã—ã¦ã?¾ã?
063 *
064 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
065 * ?»ãƒ—ãƒãƒ‘ティ?½è¨å®šå¯èƒ½ãªãƒ—ãƒãƒ‘ティã®å€¤ã‚’指定ã™ã‚‹ã“ã¨ã§ã€èª¤è¨˜å?を防æ¢ã—ã¾ã™ã?
066 *
067 * @version 4.0
068 * @author Kazuhiko Hasegawa
069 * @since JDK5.0,
070 */
071 public final class Argument {
072 /** Argument引数ã®ã‚¿ã‚¤ãƒ??»ã‚³ãƒ¡ãƒ³ãƒˆï¼½ã¯ã€ç„¡è¦–ã•れã¾ã™ã? {@value} */
073 public static final int CMNT = 0; // ?»ã‚³ãƒ¡ãƒ³ãƒˆï¼½
074
075 /** Argument引数ã®ã‚¿ã‚¤ãƒ??»å¼•æ•°?½ã¯ã€å?力é?ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã? {@value} */
076 public static final int ARGS = 1; // ?»å¼•æ•°?½
077
078 /** Argument引数ã®ã‚¿ã‚¤ãƒ??»ãƒ—ãƒãƒ‘ティ?½ã¯ã€?KEY=VALUE å½¢å¼ã§ã‚ーã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã? {@value} */
079 public static final int PROP = 2; // ?»ãƒ—ãƒãƒ‘ティ?½
080
081 private static final String CR = System.getProperty("line.separator");
082
083 private boolean argOkFlag = false;
084 private final List<String> argments = new ArrayList<String>();
085 private final Map<String,String> proparty = new LinkedHashMap<String,String>();
086
087 private int argRangeMin = 0;
088 private int argRangeMax = 200 ; // 本当ã?ã€Windows ã®å¼•æ•°ã®ä¸Šé™å€¤ã‚’è¨å®?
089
090 private Map<String,String> mustProparty = null;
091 private Map<String,String> usableProparty = null;
092
093 private final String programID ;
094
095 /**
096 * ã“ã? Argument を使用ã—ã¦ã?‚‹ プãƒã‚°ãƒ©ãƒ?D(Javaクラスå?を指定ã—ã¦
097 * インスタンスを作æ?ã—ã¾ã™ã?
098 * toString() ã™ã‚‹éš›ã«ã€è¡¨ç¤ºã—ã¾ã™ã?
099 *
100 * @param pgid プãƒã‚°ãƒ©ãƒ?D
101 */
102 public Argument( final String pgid ) {
103 programID = pgid;
104 }
105
106 /**
107 * Argument ã®é…å?æ–?—å?ã‹ã‚‰ã€å¼•æ•°ã‚??ãƒãƒ‘ティをセãƒ?ƒˆã—ã¾ã™ã?
108 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
109 * ã“れã¯ã€main メソãƒ?ƒ‰ç‰ã§å˜ç‹¬èµ·å‹•ã™ã‚‹å?åˆã«ã€å¼•æ•°ãã?ã¾ã¾ã‚?
110 * ã‚»ãƒ?ƒˆã™ã‚‹å ´åˆã«ä½¿ç”¨ã—ã¾ã™ã?
111 *
112 * @param args 引数é…å?æ–?—å?
113 * @see #putArgument( String )
114 */
115 public void setArgument( final String[] args ) {
116 for( int i=0; i<args.length; i++ ) {
117 putArgument( args[i] );
118 }
119 }
120
121 /**
122 * Argument ã®æ–?—å?ã‹ã‚‰ã€å¼•æ•°ã‹ã?ãƒãƒ‘ティをセãƒ?ƒˆã—ã¾ã™ã?
123 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
124 * Argument ã‚’è¨å®šã™ã‚‹æ™‚ã«ã€ã‚¿ã‚¤ãƒ—判æ–ã¨ã—ã¦ã€getArgumentType( String ) ã‚?
125 * 使用ã—ã¾ã™ã?よã£ã¦ã€ä¸æ£ãª Argument ã‚’è¨å®šã—ãŸå?åˆã?ã€å¼·åˆ¶çµ‚äº?•れã¾ã™ã?
126 *
127 * @param arg 引数
128 * @see #putArgument( String,String )
129 */
130 public void putArgument( final String arg ) {
131 int type = getArgumentType( arg );
132
133 switch( type ) {
134 case CMNT : break;
135 case ARGS : argments.add( arg ); break;
136 case PROP :
137 int sep = arg.indexOf( '=' ); // sep ã¯ã€?0 以上ä¿è¨¼æ¸ˆã¿
138 String key = arg.substring(1,sep);
139 String val = arg.substring(sep+1);
140 checkProparty( key ); // 3.8.0.1 (2005/06/17)
141 proparty.put( key,val );
142 break;
143 default: break;
144 }
145 }
146
147 /**
148 * Argument ã®æ–?—å?ã‹ã‚‰ã€ã?ãƒãƒ‘ティをセãƒ?ƒˆã—ã¾ã™ã?
149 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
150 * ã“ã?メソãƒ?ƒ‰ã¯ã€å¼•æ•° ã‚?コメントã?判æ–を行ã„ã¾ã›ã‚“。ã?ãƒãƒ‘ティ ã®ã¿
151 * è¨å®šã•れるもã?ã¨ã—ã¦ã€å?ç?—ã¾ã™ã?
152 * プãƒãƒ‘ティ㮠key=val ãŒå?ã‚ã‹ã‚‰å?割ã•れã¦ã?‚‹å ´åˆã?簡易メソãƒ?ƒ‰ã§ã™ã?
153 *
154 * @param key プãƒãƒ‘ティã®ã‚ー
155 * @param val プãƒãƒ‘ティã®å€¤
156 * @see #putArgument( String )
157 */
158 public void putArgument( final String key,final String val ) {
159 checkProparty( key ); // 3.8.0.1 (2005/06/17)
160 proparty.put( key,val );
161 }
162
163 /**
164 * ?»å¼•æ•°?½å€‹æ•°æŒ?®šã‚’è¨å®šã—ã¾ã™ã?
165 * æœ?¤§å€¤ã€æœ€å°å?を登録ã—ã¦ãŠãã“ã¨ã§ã€å?æ•°ãŒã?è¦å®šã‹ã‚‰å¤–れã¦ã?ªã?‹
166 * ã©ã?‹ã‚’確èªã—ã¾ã™ã?
167 * エラー判定ã?ã€å®Ÿéš›ã«ã€?¼»å¼•æ•°?½ã‚’å–りå?ã™ã¨ãã«è¡Œã‚れã¾ã™ã?
168 * ã“ã?ãƒã‚§ãƒ?‚¯ã®ç™»éŒ²ã¯ã€putArgument( String ) ã®å‰ã§ã‚‚後ã§ã‚‚よãã?
169 * getArgument ã®å®Ÿè¡Œå‰ã§ã‚れã°ã€ã„ã¤ã§ã‚‚æ§‹ã„ã¾ã›ã‚“ã€?
170 * è¨å®šã—ãªã??åˆã?åˆæœŸå€¤ã¯ã€???00 ã§ã™ã?
171 *
172 * @param min ?»å¼•æ•°?½ã®æœ?°å?æ•°(åˆæœŸå€¤:0)
173 * @param max ?»å¼•æ•°?½ã®æœ?¤§å€‹æ•°(åˆæœŸå€¤:200)
174 */
175 public void setArgRange( final int min, final int max ) {
176 argRangeMin = min ;
177 argRangeMax = max ;
178 }
179
180 /**
181 * ?»ãƒ—ãƒãƒ‘ティ?½å¿??ãƒã‚§ãƒ?‚¯ Map 登録
182 * å¿??ã‚ーãŒç™»éŒ²ã•れãŸã‹ã©ã?‹ã®ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
183 * マスト判定ã?ã€å®Ÿéš›ã«ã€?¼»ãƒ—ãƒãƒ‘ティ?½ã‚’å–りå?ã™ã¨ãã«è¡Œã‚れã¾ã™ã?
184 * ã™ã¹ã¦ã®ãƒ—ãƒãƒ‘ティーãŒã‚»ãƒ?ƒˆã—終ã‚ã£ãŸã‹ã©ã?‹ã®åˆ¤æ–ãŒå?æ¥ãªã?Ÿã‚ã§ã™ã?
185 * ãれ以外ã?ãƒã‚§ãƒ?‚¯ã¯ã€putArgument( String ) 時ã«è¡Œã‚れるã®ã§ã€ãれã¾ã§ã«
186 * mustProparty ã®Mapを登録ã—ã¦ãŠãå¿?¦ãŒã‚りã¾ã™ã?
187 * ãŸã ã—ã?引数æ–?—å?ã®è¨˜è¿°ãƒã‚§ãƒ?‚¯(使用ã—ã¦ã‚‚よã??ã®é…å?ãƒã‚§ãƒ?‚¯)ã¯ã€?
188 * #getProparty( String , String , String[] ) ã§è¡Œã‚れるã®ã§ã€å–得時ã«ãªã‚Šã¾ã™ã?
189 *
190 * è¨å®šã—ãªã??åˆã?åˆæœŸå€¤ã¯ã€åˆ¶é™ãªã—ã§ã™ã?
191 * æŒ?®šã?Mapã®Value値ã«ã¯ã€ã‚¨ãƒ©ãƒ¼æ™‚ã?コメントを記述ã—ã¦ãŠãã¾ã™ã?
192 *
193 * @param mustProp å¿??ã‚ーã®Map
194 * @see #getProparty( String , String , String[] )
195 */
196 public void setMustProparty( final Map<String,String> mustProp ) {
197 mustProparty = new LinkedHashMap<String,String>( mustProp ) ;
198 }
199
200 /**
201 * ?»ãƒ—ãƒãƒ‘ティ?½æ•´åˆæ?ãƒã‚§ãƒ?‚¯ Map 登録
202 * æŒ?®šã•れã¦ã?‚‹ã‚ーã®ã¿ç™»éŒ²å¯èƒ½ã§ã™ã?
203 * エラー判定ã?ã€å®Ÿéš›ã«ã€?¼»ãƒ—ãƒãƒ‘ティ?½ã‚’å–りå?ã™ã¨ãã«è¡Œã‚れã¾ã™ã?
204 * ã“ã?ãƒã‚§ãƒ?‚¯ã®ç™»éŒ²ã¯ã€putArgument( String ) 時ã«è¡Œã‚れるã®ã§ã€ãれã¾ã§ã«
205 * usableProparty ã®Mapを登録ã—ã¦ãŠãå¿?¦ãŒã‚りã¾ã™ã?
206 * ãŸã ã—ã?引数æ–?—å?ã®è¨˜è¿°ãƒã‚§ãƒ?‚¯(使用ã—ã¦ã‚‚よã??ã®é…å?ãƒã‚§ãƒ?‚¯)ã¯ã€?
207 * #getProparty( String , String , String[] ) ã§è¡Œã‚れるã®ã§ã€å–得時ã«ãªã‚Šã¾ã™ã?
208 *
209 * è¨å®šã—ãªã??åˆã?åˆæœŸå€¤ã¯ã€åˆ¶é™ãªã—ã§ã™ã?
210 * æŒ?®šã?Mapã®Value値ã«ã¯ã€ã“ã®ã‚ーã«å¯¾ã™ã‚‹è§£èª¬ã‚’登録ã—ã¦ãŠãã¾ã™ã?
211 *
212 * @param useProp 使用å¯èƒ½ã‚ーã®Map
213 */
214 public void setUsableProparty( final Map<String,String> useProp ) {
215 usableProparty = new LinkedHashMap<String,String>( useProp ) ;
216 }
217
218 /**
219 * Argument ã®æ–?—å?ã‹ã‚‰ã€ãã®ã‚¿ã‚¤ãƒ—を判æ–ã—ã¾ã™ã?
220 * 引数ã®å½¢å¼ãŒä¸æ£ãªå ´å?例ãˆã°ã€ã‚ーã¨å€¤ã®åˆ?›¢ã® = ã®å‰å¾Œã«ã‚¹ãƒšã?スãŒå?ã£ãŸå?å?
221 * RuntimeException ã§å¼·åˆ¶çµ‚äº?—ã¾ã™ã?
222 *
223 * ?»ã‚³ãƒ¡ãƒ³ãƒˆï¼½ ??# ã§å§‹ã¾ã‚‹å¼•æ•°ã§ã€ä½¿ç”¨ã•れã¾ã›ã‚“ã€?登録もã•れã¾ã›ã‚“ã€?
224 * ?»å¼•æ•°?½ ??#,-,= 以外ã§å§‹ã¾ã‚‹é?å¸¸ã®æ–?—å?。登録ã®é ?•ªãŒæŒ‡å®šã•れã¾ã™ã?
225 * ?»ãƒ—ãƒãƒ‘ティ?½??- ã§å§‹ã¾ã‚Šã?ã‚ーã¨å€¤ã‚?ã§åŒºåˆ?£ã¦ã?‚‹ãƒ‘ラメータã§ã™ã?é ?ºã?無関係ã?
226 *
227 * @og.rev 5.3.4.0 (2011/04/01) 空æ–?—å?ãªã©ç„¡é–¢ä¿‚ãªãƒ‘ラメータã¯å‡¦ç?—ãªã?‚ˆã?«å¤‰æ›´
228 *
229 * @param arg 引数
230 *
231 * @return 引数タイ�CMNT,ARGS,PROP)
232 * @see Argument#CMNT ?»ã‚³ãƒ¡ãƒ³ãƒˆï¼½
233 * @see Argument#ARGS ?»å¼•æ•°?½
234 * @see Argument#PROP ?»ãƒ—ãƒãƒ‘ティ?½
235 * @throws RuntimeException
236 */
237 public int getArgumentType( final String arg ) {
238 // if( arg == null || arg.length() == 0 || arg.startsWith( "#" ) ) {
239 if( arg == null || arg.trim().length() == 0 || arg.startsWith( "#" ) ) { // 5.3.4.0 (2011/04/01)
240 return CMNT;
241 }
242 else if( arg.startsWith( "=" ) || arg.endsWith( "=" ) ) { // 䏿£å¼•æ•°
243 String errMsg = "引数㮠= ã®å‰å¾Œã«ã¯ã€ã‚¹ãƒšã?スをå?れãªã?§ä¸‹ã•ã??"
244 + " BAD Argument=[" + arg + "]" ;
245 throw new RuntimeException( errMsg );
246 }
247 else if( arg.startsWith( "-" ) ) {
248 int sep = arg.indexOf( '=' );
249 if( sep > 0 && sep < arg.length()-1 ) {
250 return PROP;
251 }
252 else {
253 String errMsg = "-KEY を指定ã™ã‚‹å?åˆã?ã€? ã‚’ç¶šã‘ã¦ã€VALUEを指定ã—ã¦ä¸‹ã•ã??"
254 + " -KEY=VALUE 形�BAD Argument=[" + arg + "]" ;
255 throw new RuntimeException( errMsg );
256 }
257 }
258 else {
259 return ARGS ;
260 }
261 }
262
263 /**
264 * æŒ?®šã?番å·ã«å¯¾ã™ã‚‹?»å¼•æ•°?½ã‚’è¿”ã—ã¾ã™ã?
265 * ?»å¼•æ•°?½ã¯ã€?,-,= 以外ã§å§‹ã¾ã‚‹é?å¸¸ã®æ–?—å?ã¨ã—ã¦ç™»éŒ²ã•れã¦ã?¾ã™ã?
266 * 登録ã•れãŸé?番ã§å–å¾—ã—ã¾ã™ã?
267 *
268 * @param adrs 番å·
269 *
270 * @return ?»å¼•æ•°?½
271 * @throws RuntimeException
272 */
273 public String getArgument( final int adrs ) {
274 // 以下ã?ãƒã‚§ãƒ?‚¯ã¯ã€getArgument ãŒå‘¼ã°ã‚Œã¦ä¸?º¦ã®ã¿ã®å®Ÿè¡Œã§ã‚ˆã„ã€?
275 if( ! argOkFlag ) {
276 if( argRangeMin < argments.size() || argments.size() < argRangeMax ) {
277 String errMsg = "?»å¼•æ•°?½å€‹æ•°ãŒæœ€å°?æœ?¤§å€‹æ•°ã‚’æº?Ÿã—ã¦ã?¾ã›ã‚“ã€?
278 + " Min:" + argRangeMin + " <= " + argments.size() + " < Max:" + argRangeMax ;
279 throw new RuntimeException( errMsg );
280 }
281 argOkFlag = true;
282 }
283
284 if( argments.size() <= adrs ) {
285 String errMsg = "æŒ?®šã?アドレスã¯ã€?¼»å¼•æ•°?½è¨å®šå?数外ã§ã™ã?"
286 + " Size:" + argments.size() + " <= " + adrs ;
287 throw new RuntimeException( errMsg );
288 }
289
290 return argments.get( adrs );
291 }
292
293 /**
294 * æŒ?®šã?番å·ã«å¯¾ã™ã‚‹?»å¼•æ•°?½ã‚’è¿”ã—ã¾ã™ã?
295 * def ã«ã¯ã€æ–‡å—å?ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?adrs ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã?
296 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã?
297 *
298 * 処ç??ã€getArgument( int ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã?
299 *
300 * @param adrs 番å·
301 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤
302 *
303 * @return ?»å¼•æ•°?½
304 * @see #getArgument( int )
305 */
306 public String getArgument( final int adrs, final String def ) {
307 String value = getArgument( adrs );
308 return ( value != null ) ? value : def ;
309 }
310
311 /**
312 * æŒ?®šã?番å·ã«å¯¾ã™ã‚‹?»å¼•æ•°?½ã‚’è¿”ã—ã¾ã™ã?
313 * def ã«ã¯ã€æ•°å—ã?åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?adrs ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã?
314 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã?
315 *
316 * 処ç??ã€getArgument( int ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã?
317 *
318 * @param adrs 番å·
319 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤
320 *
321 * @return ?»å¼•æ•°?½
322 * @see #getArgument( int )
323 */
324 public int getArgument( final int adrs, final int def ) {
325 String value = getArgument( adrs );
326 return ( value != null ) ? Integer.parseInt( value ) : def ;
327 }
328
329 /**
330 * æŒ?®šã?番å·ã«å¯¾ã™ã‚‹?»å¼•æ•°?½ã‚’è¿”ã—ã¾ã™ã?
331 * def ã«ã¯ã€boolean ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?adrs ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã?
332 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã?
333 *
334 * 処ç??ã€getArgument( int ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã?
335 *
336 * @param adrs 番å·
337 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤
338 *
339 * @return ?»å¼•æ•°?½
340 * @see #getArgument( int )
341 */
342 public boolean getArgument( final int adrs, final boolean def ) {
343 String value = getArgument( adrs );
344 return ( value != null ) ? Boolean.valueOf( value ).booleanValue() : def ;
345 }
346
347 /**
348 * ?»ãƒ—ãƒãƒ‘ティ?½æ•´åˆæ?ãƒã‚§ãƒ?‚¯ 実è¡?
349 * è¨å®šã•ã‚ŒãŸæ•´åˆæ?ãƒã‚§ãƒ?‚¯ã‚’実行ã—ã¾ã™ã?
350 * è¤?•°ã‚ーã«å¯¾å¿œã™ã‚‹ç‚ºã«ã€å?é ã‹ã‚‰ã®åˆ¤å®šã‚‚行ã„ã¾ã™ã?
351 * ãƒã‚§ãƒ?‚¯ã™ã‚‹ã‚ーã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
352 *
353 * @og.rev 5.1.5.0 (2010/04/01) 判定ã?æ¡ä»¶ãŒã?é‡è¤?—ã¦ã?Ÿã®ã§ä¿®æ£ã€?
354 *
355 * @param key ãƒã‚§ãƒ?‚¯ã™ã‚‹å…¥åŠ›ã‚ー
356 * @throws RuntimeException
357 */
358 private void checkProparty( final String key ) {
359
360 // 第?‘ã?判定ã? proparty ã«ã™ã§ã«å˜åœ¨ã—ã¦ã?‚Œã°ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã?
361 if( proparty.get( key ) != null ) {
362 StringBuilder errMsg = new StringBuilder();
363
364 errMsg.append( "ã‚ー[" ).append( key ).append( "]ã¯ã€ã™ã§ã«æŒ?®šæ¸ˆã¿ã§ã™ã?" ).append( CR );
365 errMsg.append( " 登録済�?" ).append( key ).append( "=" ).append( proparty.get( key ) );
366 errMsg.append( CR );
367 throw new RuntimeException( errMsg.toString() );
368 }
369
370 if( mustProparty != null ) {
371 // 第?’ã?判定ã? mustProparty ã«å˜åœ¨ã™ã‚Œã°ã€å³æŠœã‘ã™ã‚‹ã€?
372 if( mustProparty.containsKey( key ) ) { return; }
373
374 // 第?“ã?判定ã?è¤?•°ã‚ー(å…ˆé?ä¸??ã‚ー)ã®å ´åˆã‚‚ã‚りã?‚‹ãŸã‚ã€å?é ã‹ã‚‰ã®æ¯”è¼?‚’行ã†ã€?
375 Iterator<Map.Entry<String,String>> ite = mustProparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
376 while( ite.hasNext() ) {
377 Map.Entry<String,String> entry = ite.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
378 String propKey = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
379 if( key.startsWith( propKey ) ) { return ; } // マッãƒã™ã‚Œã?ã€å³æŠœã‘ã‚‹ã?
380 }
381 }
382
383 // 5.1.5.0 (2010/04/01) 判定ã?æ¡ä»¶ãŒã?é‡è¤?—ã¦ã?Ÿã®ã§ä¿®æ£ã€?
384 // if( usableProparty != null && !usableProparty.containsKey( key ) ) {
385 if( usableProparty != null ) {
386 // 第?”ã?判定ã? usableProparty ã«å˜åœ¨ã™ã‚Œã°ã€å³æŠœã‘ã™ã‚‹ã€?
387 if( usableProparty.containsKey( key ) ) { return ; }
388
389 // 第?•ã?判定ã?è¤?•°ã‚ー(å…ˆé?ä¸??ã‚ー)ã®å ´åˆã‚‚ã‚りã?‚‹ãŸã‚ã€å?é ã‹ã‚‰ã®æ¯”è¼?‚’行ã†ã€?
390 Iterator<Map.Entry<String,String>> ite = usableProparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
391 while( ite.hasNext() ) {
392 Map.Entry<String,String> entry = ite.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
393 String propKey = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
394 if( key.startsWith( propKey ) ) { return ; } // マッãƒã™ã‚Œã?ã€å³æŠœã‘ã‚‹ã?
395 }
396
397 // ãã“ã¾ã§æŽ¢ã—ã¦è¦‹ã¤ã‹ã‚‰ãªã??åˆã?ã€å®šç¾©å¤–引数エラー
398 StringBuilder errMsg = new StringBuilder();
399
400 errMsg.append( "-KEY ãŒã?æŒ?®šã?æ•´åˆæ?リストã«å«ã¾ã‚Œã¦ã?¾ã›ã‚“ã€? );
401 errMsg.append( CR ) ;
402 errMsg.append( " -KEY=VALUE 形�BAD Key=[" ).append( key ).append( "]" );
403 errMsg.append( CR ) ;
404 errMsg.append( toString() ) ;
405 throw new RuntimeException( errMsg.toString() );
406 }
407 }
408
409 /**
410 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã?
411 * 値ãŒè¨å®šã•れã¦ã?ªã??åˆã?ã€?null ã‚’è¿”ã—ã¾ã™ã?
412 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
413 *
414 * @param key 引数ã®ã‚ー
415 *
416 * @return 引数ã«å¯¾ã™ã‚‹å€¤
417 * @throws RuntimeException
418 */
419 public String getProparty( final String key ) {
420
421 String value = proparty.get( key );
422
423 // 値ã?null ã§ must è¨å®šãŒã‚りã€ã‹ã¤ãƒžã‚¹ãƒˆã‚ãƒ¼ãŒæŒ‡å®šã—ã¦ã?‚‹å ´åˆã?
424 if( value == null &&
425 mustProparty != null &&
426 mustProparty.containsKey( key ) ) {
427 String errMsg = "æŒ?®šã??»ãƒ—ãƒãƒ‘ティ?½ã¯ã€å¿??ã‚ーã§ã™ãŒã€å?ã?null ã§ã™ã?"
428 + " Key:" + key + " 説�" + mustProparty.get( key )
429 + CR + toString() ;
430 throw new RuntimeException( errMsg );
431 }
432
433 return value ;
434 }
435
436 /**
437 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã?
438 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
439 * def ã«ã¯ã€æ–‡å—å?ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?key ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã?
440 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã?
441 *
442 * 処ç??ã€getProparty( String ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã?
443 *
444 * @param key ã‚ー
445 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤
446 *
447 * @return ?»ãƒ—ãƒãƒ‘ティ?½
448 * @see #getProparty( String )
449 */
450 public String getProparty( final String key, final String def ) {
451 String value = getProparty( key );
452 return ( value != null ) ? value : def ;
453 }
454
455 /**
456 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã?
457 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
458 * def ã«ã¯ã€æ–‡å—å?ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?key ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã?
459 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã?
460 * list é…å?ã«ã¯ã€ç™»éŒ²ã§ãã‚‹æ–?—å?é…å?を指定ã—ã¾ã™ã?ã“ã?æ–?—å?ã«å«ã¾ã‚Œãªã?
461 * 値ãŒè¨å®šã•れã¦ã?Ÿå ´åˆã?ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã?
462 *
463 * 処ç??ã€getProparty( String ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã?
464 *
465 * @param key ã‚ー
466 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤
467 * @param list 値ã¨ã—ã¦å˜åœ¨ã§ãã‚‹æ–?—å?リスãƒ?
468 *
469 * @return ?»ãƒ—ãƒãƒ‘ティ?½
470 * @see #getProparty( String )
471 * @throws RuntimeException
472 */
473 public String getProparty( final String key, final String def, final String[] list ) {
474 String value = getProparty( key,def );
475 if( value != null ) {
476 boolean isOK = false;
477 for( int i=0; i<list.length; i++ ) {
478 if( value.equalsIgnoreCase( list[i] ) ) {
479 isOK = true; break;
480 }
481 }
482 if( !isOK ) {
483 String errMsg = key + " ã¯ã€? + Arrays.toString( list )
484 + " ã‹ã‚‰æŒ?®šã—ã¦ãã ã•ã„ã€? + CR
485 + "-" + key + "=[" + value + "]" ;
486 throw new RuntimeException( errMsg );
487 }
488 }
489
490 return value ;
491 }
492
493 /**
494 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã?
495 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
496 * def ã«ã¯ã€æ•°å—ã?åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?key ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã?
497 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã?
498 *
499 * 処ç??ã€getProparty( String ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã?
500 *
501 * @param key ã‚ー
502 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤
503 *
504 * @return ?»ãƒ—ãƒãƒ‘ティ?½
505 * @see #getProparty( String )
506 */
507 public int getProparty( final String key, final int def ) {
508 String value = getProparty( key );
509 return ( value != null ) ? Integer.parseInt( value ) : def ;
510 }
511
512 /**
513 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã?
514 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
515 * def ã«ã¯ã€boolean ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?key ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã?
516 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã?
517 *
518 * 処ç??ã€getProparty( String ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã?
519 *
520 * @param key ã‚ー
521 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤
522 *
523 * @return ?»ãƒ—ãƒãƒ‘ティ?½
524 * @see #getProparty( String )
525 */
526 public boolean getProparty( final String key, final boolean def ) {
527 String value = getProparty( key );
528 return ( value != null ) ? Boolean.valueOf( value ).booleanValue() : def ;
529 }
530
531 /**
532 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã?
533 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
534 * key プãƒãƒ‘ティã¯ã€??常ã®å¼•æ•°ã¨ã—ã¦æŒ?®šã§ãる簡易的ãªå€¤ã‚’è¨å®šã—ã¾ã™ã?
535 * keyFile プãƒãƒ‘ティ ã¯ã€ãƒ•ァイルåã‚’æŒ?®šã—ã€ãã®ãƒ•ァイルã®ä¸èº«ã‚?
536 * å–å¾—ã—ã¦è¿”ã—ã¾ã™ã?通常ã¯?‘行ã§ã‚ã‚‹ãŒã?時ã«ã¯è¤?•°è¡Œã?ãƒ??タを指å®?
537 * ã—ãŸã??åˆã«ã€?¼’ã¤ã®ãƒ‘ラメータを使ã?¾ã™ãŒã€è¨å®šå?ã¯ã€åŒã˜å¼•æ•°ã¨ã—ã¦
538 * 使用ã—ãŸã?‚±ãƒ¼ã‚¹ã«ä¾¿åˆ©ã§ã™ã?
539 * key プãƒãƒ‘ティã¨ã€keyFile プãƒãƒ‘ティ ã¯ã€åŒæ™‚指定ã§ãã¾ã›ã‚“ã€?
540 * ã“れã¯ã€æŒ‡å®šæ–¹æ³•ã?é–“é•ã?‰ã‚’é¿ã‘る為ã§ã™ã?
541 * ã©ã¡ã‚‰ã‚‚ã€null ã§ã‚ã‚‹å¯èƒ½æ€§ã¯ã‚りã¾ã™ã?
542 *
543 * @param key ã‚ー
544 * @param keyFile è¨å®šãƒ•ァイルå?
545 * @param must å¿??æ¡ä»¶[true/false]
546 *
547 * @return ?»ãƒ—ãƒãƒ‘ティ?½
548 * @see #getProparty( String )
549 * @throws RuntimeException åŒæ™‚æŒ?®šæ™‚ã€ã¾ãŸã?ã€must å¿??時㫠null ã®å ´åˆã?
550 */
551 public String getFileProparty( final String key, final String keyFile, final boolean must ) {
552 return getFileProparty( key,keyFile,null,must );
553 }
554
555 /**
556 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã?
557 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
558 * key プãƒãƒ‘ティã¯ã€??常ã®å¼•æ•°ã¨ã—ã¦æŒ?®šã§ãる簡易的ãªå€¤ã‚’è¨å®šã—ã¾ã™ã?
559 * keyFile プãƒãƒ‘ティ ã¯ã€ãƒ•ァイルåã‚’æŒ?®šã—ã€ãã®ãƒ•ァイルã®ä¸èº«ã‚?
560 * å–å¾—ã—ã¦è¿”ã—ã¾ã™ã?通常ã¯?‘行ã§ã‚ã‚‹ãŒã?時ã«ã¯è¤?•°è¡Œã?ãƒ??タを指å®?
561 * ã—ãŸã??åˆã«ã€?¼’ã¤ã®ãƒ‘ラメータを使ã?¾ã™ãŒã€è¨å®šå?ã¯ã€åŒã˜å¼•æ•°ã¨ã—ã¦
562 * 使用ã—ãŸã?‚±ãƒ¼ã‚¹ã«ä¾¿åˆ©ã§ã™ã?
563 * key プãƒãƒ‘ティã¨ã€keyFile プãƒãƒ‘ティ ã¯ã€åŒæ™‚指定ã§ãã¾ã›ã‚“ã€?
564 * ã“れã¯ã€æŒ‡å®šæ–¹æ³•ã?é–“é•ã?‰ã‚’é¿ã‘る為ã§ã™ã?
565 * ã©ã¡ã‚‰ã‚‚ã€null ã§ã‚ã‚‹å¯èƒ½æ€§ã¯ã‚りã¾ã™ã?
566 *
567 * @param key ã‚ー
568 * @param keyFile è¨å®šãƒ•ァイルå?
569 * @param encode keyFileèªå–エンコーãƒ?null ã¯ãƒ?ƒ•ォルトエンコーãƒ?
570 * @param must å¿??æ¡ä»¶[true/false]
571 *
572 * @return ?»ãƒ—ãƒãƒ‘ティ?½
573 * @see #getProparty( String )
574 * @throws RuntimeException åŒæ™‚æŒ?®šæ™‚ã€ã¾ãŸã?ã€must å¿??時㫠null ã®å ´åˆã?
575 */
576 public String getFileProparty( final String key, final String keyFile,
577 final String encode,final boolean must ) {
578 String val = getProparty( key );
579 String valFile = getProparty( keyFile );
580
581 if( val != null && valFile != null ) {
582 String errMsg = key + "ã‹ã?" + keyFile + " ã¯ã€ä¸¡æ–¹åŒæ™‚ã«æŒ?®šã§ãã¾ã›ã‚“ã€?" + val + "],[" + valFile + "]";
583 throw new RuntimeException( errMsg );
584 }
585
586 if( valFile != null ) {
587 FileString fs = new FileString();
588 fs.setFilename( valFile );
589 fs.setEncode( encode );
590 val = fs.getValue();
591 }
592
593 if( must && val == null ) {
594 String errMsg = key + "ã‹ã?" + keyFile + " ã¯ã€ç‰‡æ–¹å¿??ã§ã™ã?";
595 throw new RuntimeException( errMsg );
596 }
597
598 return val;
599 }
600
601 /**
602 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーをå?é ã«å«ã‚??ã‚’å–å¾—ã—ã¾ã™ã?
603 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã?
604 * 値ãŒè¨å®šã•れã¦ã?ªã??åˆã?ã€String[0] ã‚’è¿”ã—ã¾ã™ã?
605 * HybsEntry ã®ã‚ーã«è¨å®šã•れる値ã¯ã€å¼•æ•°ã®å…ˆé?ã‚ーを除ã?Ÿæ–?—å?ã§ã™ã?
606 * 例ãˆã°ã€?const_" ã®ã‚ˆã†ãªå€¤ã‚’与ãˆã¦ã€const_AA, const_BB, const_CC ã®
607 * ?“ã¤ã®ã‚ーãŒé¸å®šã•れãŸå ´åˆã?ã‚ーã¯ã€AA, BB, CC ã®ã¿è¿”ã—ã¾ã™ã?
608 *
609 * @param startsKey 引数ã®å…ˆé?ã®ã‚ー
610 *
611 * @return 引数ã«å¯¾ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã®HybsEntry
612 */
613 public HybsEntry[] getEntrys( final String startsKey ) {
614
615 ArrayList<HybsEntry> list = new ArrayList<HybsEntry>();
616 int len = startsKey.length();
617
618 Iterator<Map.Entry<String,String>> ite = proparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
619 while( ite.hasNext() ) {
620 Map.Entry<String,String> entry = ite.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
621 String key = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
622 if( key.startsWith( startsKey ) ) {
623 list.add( new HybsEntry( key.substring( len ), entry.getValue() ) ); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
624 }
625 }
626
627 return list.toArray( new HybsEntry[list.size()] ) ;
628 }
629
630 /**
631 * 入力文å—å?ã«ã€{@XXXX}関係ã?æ–?—å?変æ›ã‚’行ã„ã¾ã™ã?
632 * 引数ã«å«ã¾ã‚Œã‚‹ {@XXXX}=YYYY ã¨ã?†å…¥åŠ›ã«å¯¾ã—ã¦ã€inMsg ã«
633 * å«ã¾ã‚Œã‚‹{@XXXX} æ–?—å?ã‚’ã?YYYY ã¨ã?†æ–?—å?ã«å¤‰æ›ã—ã¾ã™ã?
634 * ãれ以外ã«ã€äºˆç´?–‡å—変æ›ã¨ã—ã¦ã€?
635 * {@ARG.XXX} 引数ã«ä½¿ç”¨ã•れãŸå?ã‚’å?利用(割り当ã¦)ã—ã¾ã™ã?
636 * {@DATE.XXX} SimpleDateFormat å½¢å¼ã?æ–?—を変æ›ã—ã¾ã™ã?(日付ã?時刻ç?
637 * {@ENV.XXX} シスãƒ?ƒ プãƒãƒ‘ãƒ†ã‚£ãƒ¼ã®æ–?—を変æ›ã—ã¾ã™ã?(java -Dkey=value オプション)
638 *
639 * @param inMsg 入力文å—å?
640 *
641 * @return 変æ›å¾Œæ–‡å—å?
642 */
643 public String changeParam( final String inMsg ) {
644 if( inMsg == null ) { return inMsg; }
645
646 String message = inMsg;
647
648 // {@ARG.XXXX} 変数ã®ç½®æ›å?ç?
649 int adrs = message.indexOf( "{@ARG." ) ;
650 while( adrs >= 0 ) {
651 int end = message.indexOf( '}',adrs ) ;
652 String key = message.substring( adrs+6,end );
653 String oldData = "{@ARG." + key + "}" ;
654 // 注æ„:{@XXX}ã¨ç•°ãªã‚Šã?{@ARG.XXX} ã§ã¯ã€XXX ã§ proparty を検索ã™ã‚‹ã€?
655 String newData = StringUtil.nval( getProparty( key ),"" );
656 message = StringUtil.replace( message,oldData,newData );
657 adrs = message.indexOf( "{@ARG.",adrs ) ;
658 }
659 // {@DATE.XXXX} 変数ã®ç½®æ›å?ç?
660 adrs = message.indexOf( "{@DATE." ) ;
661 if( adrs >= 0 ) {
662 Date dt = new Date();
663 while( adrs >= 0 ) {
664 int end = message.indexOf( '}',adrs ) ;
665 String key = message.substring( adrs+7,end );
666 String oldData = "{@DATE." + key + "}" ;
667 DateFormat formatter = new SimpleDateFormat( key, Locale.JAPANESE );
668 String newData = StringUtil.nval( formatter.format(dt),"" );
669 message = StringUtil.replace( message,oldData,newData );
670 adrs = message.indexOf( "{@DATE.",adrs ) ;
671 }
672 }
673 // {@ENV.XXXX} 変数ã®ç½®æ›å?ç?
674 adrs = message.indexOf( "{@ENV." ) ;
675 while( adrs >= 0 ) {
676 int end = message.indexOf( '}',adrs ) ;
677 String key = message.substring( adrs+6,end );
678 String oldData = "{@ENV." + key + "}" ;
679 String newData = System.getProperty( key,"" );
680 message = StringUtil.replace( message,oldData,newData );
681 adrs = message.indexOf( "{@ARG.",adrs ) ;
682 }
683
684 // 残りã®ãƒ¡ãƒ?‚»ãƒ¼ã‚¸æœ¬æ–?¸ã®ç½®æ›æ–‡å—å?ã‚’å?ç?—ã¾ã™ã?
685 adrs = message.indexOf( "{@" ) ;
686 while( adrs >= 0 ) {
687 int end = message.indexOf( '}',adrs ) ;
688 String key = message.substring( adrs,end+1 ); // +1 注�
689 String oldData = key ;
690 // 注æ„:{@ARG.XXX} ã¨ç•°ãªã‚Šã?{@XXX} ãã?ã‚‚ã?ã§ proparty を検索ã™ã‚‹ã€?
691 String newData = StringUtil.nval( getProparty( key ),"" );
692 message = StringUtil.replace( message,oldData,newData );
693 adrs = message.indexOf( "{@",adrs ) ;
694 }
695
696 return message;
697 }
698
699 /**
700 * ã“ã?オブジェクトã?å†?ƒ¨è¡¨ç¾ã‚’ã?æ–?—å?ã«ã—ã¦è¿”ã—ã¾ã™ã?
701 * クラスå???起動時ã®å¼•数リストを表示ã—ã¾ã™ã?
702 *
703 * @return 引数ã«å¯¾ã™ã‚‹å€¤
704 */
705 @Override
706 public String toString() {
707 StringBuilder buf = new StringBuilder();
708
709 buf.append( "java " ).append( programID ).append( CR );
710
711 if( ! argments.isEmpty() ) {
712 for( int i=0; i<argments.size(); i++ ) {
713 buf.append( " " ).append( argments.get(i) );
714 }
715 buf.append( CR );
716 }
717
718 Iterator<Map.Entry<String,String>> propIte = proparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
719 while( propIte.hasNext() ) {
720 Map.Entry<String,String> entry = propIte.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
721 String key = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
722 Object val = entry.getValue();
723 if( key.startsWith( "passwd" ) ) {
724 val = "*****" ;
725 }
726
727 buf.append( " -" ).append( key ).append( "=" ).append( val );
728 buf.append( CR );
729 }
730
731 return buf.toString();
732 }
733
734 /**
735 * ã“ã?クラスã®ä½¿ç”¨æ–¹æ³•ã‚’è¿”ã—ã¾ã™ã?
736 *
737 * @return ã“ã?クラスã®ä½¿ç”¨æ–¹æ³?
738 */
739 public String usage() {
740 StringBuilder buf = new StringBuilder();
741
742 buf.append( toString() );
743 buf.append( CR );
744
745 buf.append( propartyToString( "[ Must Proparty List ]",mustProparty ) );
746
747 buf.append( propartyToString( "[ Usable Proparty List ]",usableProparty ) );
748
749 return buf.toString();
750 }
751
752 /**
753 * プãƒãƒ‘ティーを文å—å?ã«å¤‰æ›ã—ã¾ã™ã?
754 *
755 * proparty ã® ã‚ãƒ¼ã®æœ?¤§é•·ã•を求ã‚ã€ä½ç½®ã‚ã‚ã›ã?ãŸã‚ã®ã‚¹ãƒšã?スを追åŠ?—ã¾ã™ã?
756 *
757 * @param title タイトル
758 * @param proparty プãƒãƒ‘ティー(Mapオブジェクãƒ?
759 *
760 * @return プãƒãƒ‘ティーæ–?—å?
761 */
762 private String propartyToString( final String title,final Map<String,String> proparty ) {
763 StringBuilder buf = new StringBuilder();
764
765 if( proparty != null ) {
766 buf.append( title ).append( CR );
767
768 // ã‚ーã®é•·ã•ã‚’ãã‚ãˆã‚‹ãŸã‚ã®å‡¦ç?
769 int maxLen = 0;
770 Iterator<String> keyIte = proparty.keySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
771 while( keyIte.hasNext() ) {
772 int len = keyIte.next().length(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
773 if( len > maxLen ) { maxLen = len; }
774 }
775
776 char[] ch = new char[maxLen];
777 Arrays.fill( ch,' ' ); // スペã?スã§åŸ‹ã‚ã¾ã™ã?
778 String SPACE = new String( ch );
779 String VAL_SPACE = CR + SPACE + " " ;
780
781 Iterator<Map.Entry<String,String>> propIte = proparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
782 while( propIte.hasNext() ) {
783 Map.Entry<String,String> entry = propIte.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
784 String key = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
785 String val = entry.getValue(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿?
786 if( val != null ) { val = val.replaceAll( CR,VAL_SPACE ); }
787 buf.append( " -" ).append( key );
788 buf.append( SPACE.substring( key.length() ) ); // 使用ã•れるã‚ー
789 buf.append( " : " ).append( val ) ; // ãã?説æ˜?
790 buf.append( CR );
791 }
792 }
793
794 return buf.toString();
795 }
796 }