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 * ※ 引数ã®è¨å®šæ–¹æ³•ãŒé–“é•ã£ã¦ã?‚‹å ´åˆã?RuntimeException ã?throw ã•れã¾ã™ã? 228 * 229 * @og.rev 5.3.4.0 (2011/04/01) 空æ–?—å?ãªã©ç„¡é–¢ä¿‚ãªãƒ‘ラメータã¯å‡¦ç?—ãªã?‚ˆã?«å¤‰æ›´ 230 * 231 * @param arg 引数 232 * 233 * @return 引数タイãƒ?CMNT,ARGS,PROP) 234 * @see Argument#CMNT ?»ã‚³ãƒ¡ãƒ³ãƒˆï¼½ 235 * @see Argument#ARGS ?»å¼•æ•°?½ 236 * @see Argument#PROP ?»ãƒ—ãƒãƒ‘ティ?½ 237 */ 238 public int getArgumentType( final String arg ) { 239 // if( arg == null || arg.length() == 0 || arg.startsWith( "#" ) ) { 240 if( arg == null || arg.trim().length() == 0 || arg.startsWith( "#" ) ) { // 5.3.4.0 (2011/04/01) 241 return CMNT; 242 } 243 else if( arg.startsWith( "=" ) || arg.endsWith( "=" ) ) { // 䏿£å¼•æ•° 244 String errMsg = "引数㮠= ã®å‰å¾Œã«ã¯ã€ã‚¹ãƒšã?スをå?れãªã?§ä¸‹ã•ã??" 245 + " BAD Argument=[" + arg + "]" ; 246 throw new RuntimeException( errMsg ); 247 } 248 else if( arg.startsWith( "-" ) ) { 249 int sep = arg.indexOf( '=' ); 250 if( sep > 0 && sep < arg.length()-1 ) { 251 return PROP; 252 } 253 else { 254 String errMsg = "-KEY を指定ã™ã‚‹å?åˆã?ã€? ã‚’ç¶šã‘ã¦ã€VALUEを指定ã—ã¦ä¸‹ã•ã??" 255 + " -KEY=VALUE å½¢å¼?BAD Argument=[" + arg + "]" ; 256 throw new RuntimeException( errMsg ); 257 } 258 } 259 else { 260 return ARGS ; 261 } 262 } 263 264 /** 265 * æŒ?®šã?番å·ã«å¯¾ã™ã‚‹?»å¼•æ•°?½ã‚’è¿”ã—ã¾ã™ã? 266 * ?»å¼•æ•°?½ã¯ã€?,-,= 以外ã§å§‹ã¾ã‚‹é?å¸¸ã®æ–?—å?ã¨ã—ã¦ç™»éŒ²ã•れã¦ã?¾ã™ã? 267 * 登録ã•れãŸé?番ã§å–å¾—ã—ã¾ã™ã? 268 * 269 * ※ 引数ã®è¨å®šæ–¹æ³•ãŒé–“é•ã£ã¦ã?‚‹å ´åˆã?RuntimeException ã?throw ã•れã¾ã™ã? 270 * 271 * @param adrs ç•ªå· 272 * 273 * @return ?»å¼•æ•°?½ 274 */ 275 public String getArgument( final int adrs ) { 276 // 以下ã?ãƒã‚§ãƒ?‚¯ã¯ã€getArgument ãŒå‘¼ã°ã‚Œã¦ä¸?º¦ã®ã¿ã®å®Ÿè¡Œã§ã‚ˆã„ã€? 277 if( ! argOkFlag ) { 278 if( argRangeMin < argments.size() || argments.size() < argRangeMax ) { 279 String errMsg = "?»å¼•æ•°?½å€‹æ•°ãŒæœ€å°?æœ?¤§å€‹æ•°ã‚’æº?Ÿã—ã¦ã?¾ã›ã‚“ã€? 280 + " Min:" + argRangeMin + " <= " + argments.size() + " < Max:" + argRangeMax ; 281 throw new RuntimeException( errMsg ); 282 } 283 argOkFlag = true; 284 } 285 286 if( argments.size() <= adrs ) { 287 String errMsg = "æŒ?®šã?アドレスã¯ã€?¼»å¼•æ•°?½è¨å®šå?数外ã§ã™ã?" 288 + " Size:" + argments.size() + " <= " + adrs ; 289 throw new RuntimeException( errMsg ); 290 } 291 292 return argments.get( adrs ); 293 } 294 295 /** 296 * æŒ?®šã?番å·ã«å¯¾ã™ã‚‹?»å¼•æ•°?½ã‚’è¿”ã—ã¾ã™ã? 297 * def ã«ã¯ã€æ–‡å—å?ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?adrs ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã? 298 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã? 299 * 300 * 処ç??ã€getArgument( int ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã? 301 * 302 * @param adrs ç•ªå· 303 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤ 304 * 305 * @return ?»å¼•æ•°?½ 306 * @see #getArgument( int ) 307 */ 308 public String getArgument( final int adrs, final String def ) { 309 String value = getArgument( adrs ); 310 return ( value != null ) ? value : def ; 311 } 312 313 /** 314 * æŒ?®šã?番å·ã«å¯¾ã™ã‚‹?»å¼•æ•°?½ã‚’è¿”ã—ã¾ã™ã? 315 * def ã«ã¯ã€æ•°å—ã?åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?adrs ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã? 316 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã? 317 * 318 * 処ç??ã€getArgument( int ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã? 319 * 320 * @param adrs ç•ªå· 321 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤ 322 * 323 * @return ?»å¼•æ•°?½ 324 * @see #getArgument( int ) 325 */ 326 public int getArgument( final int adrs, final int def ) { 327 String value = getArgument( adrs ); 328 return ( value != null ) ? Integer.parseInt( value ) : def ; 329 } 330 331 /** 332 * æŒ?®šã?番å·ã«å¯¾ã™ã‚‹?»å¼•æ•°?½ã‚’è¿”ã—ã¾ã™ã? 333 * def ã«ã¯ã€boolean ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?adrs ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã? 334 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã? 335 * 336 * 処ç??ã€getArgument( int ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã? 337 * 338 * @param adrs ç•ªå· 339 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤ 340 * 341 * @return ?»å¼•æ•°?½ 342 * @see #getArgument( int ) 343 */ 344 public boolean getArgument( final int adrs, final boolean def ) { 345 String value = getArgument( adrs ); 346 return ( value != null ) ? Boolean.valueOf( value ).booleanValue() : def ; 347 } 348 349 /** 350 * ?»ãƒ—ãƒãƒ‘ティ?½æ•´åˆæ?ãƒã‚§ãƒ?‚¯ 実è¡? 351 * è¨å®šã•ã‚ŒãŸæ•´åˆæ?ãƒã‚§ãƒ?‚¯ã‚’実行ã—ã¾ã™ã? 352 * è¤?•°ã‚ーã«å¯¾å¿œã™ã‚‹ç‚ºã«ã€å?é ã‹ã‚‰ã®åˆ¤å®šã‚‚行ã„ã¾ã™ã? 353 * ãƒã‚§ãƒ?‚¯ã™ã‚‹ã‚ーã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã? 354 * 355 * ※ 引数ã®è¨å®šæ–¹æ³•ãŒé–“é•ã£ã¦ã?‚‹å ´åˆã?RuntimeException ã?throw ã•れã¾ã™ã? 356 * 357 * @og.rev 5.1.5.0 (2010/04/01) 判定ã?æ¡ä»¶ãŒã?é‡è¤?—ã¦ã?Ÿã®ã§ä¿®æ£ã€? 358 * 359 * @param key ãƒã‚§ãƒ?‚¯ã™ã‚‹å…¥åŠ›ã‚ー 360 */ 361 private void checkProparty( final String key ) { 362 363 // 第?‘ã?判定ã? proparty ã«ã™ã§ã«å˜åœ¨ã—ã¦ã?‚Œã°ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã? 364 if( proparty.get( key ) != null ) { 365 StringBuilder errMsg = new StringBuilder(); 366 367 errMsg.append( "ã‚ー[" ).append( key ).append( "]ã¯ã€ã™ã§ã«æŒ?®šæ¸ˆã¿ã§ã™ã?" ).append( CR ); 368 errMsg.append( " 登録済ã¿??" ).append( key ).append( "=" ).append( proparty.get( key ) ); 369 errMsg.append( CR ); 370 throw new RuntimeException( errMsg.toString() ); 371 } 372 373 if( mustProparty != null ) { 374 // 第?’ã?判定ã? mustProparty ã«å˜åœ¨ã™ã‚Œã°ã€å³æŠœã‘ã™ã‚‹ã€? 375 if( mustProparty.containsKey( key ) ) { return; } 376 377 // 第?“ã?判定ã?è¤?•°ã‚ー(å…ˆé?ä¸??ã‚ー)ã®å ´åˆã‚‚ã‚りã?‚‹ãŸã‚ã€å?é ã‹ã‚‰ã®æ¯”è¼?‚’行ã†ã€? 378 Iterator<Map.Entry<String,String>> ite = mustProparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 379 while( ite.hasNext() ) { 380 Map.Entry<String,String> entry = ite.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 381 String propKey = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 382 if( key.startsWith( propKey ) ) { return ; } // マッãƒã™ã‚Œã?ã€å³æŠœã‘ã‚‹ã? 383 } 384 } 385 386 // 5.1.5.0 (2010/04/01) 判定ã?æ¡ä»¶ãŒã?é‡è¤?—ã¦ã?Ÿã®ã§ä¿®æ£ã€? 387 // if( usableProparty != null && !usableProparty.containsKey( key ) ) { 388 if( usableProparty != null ) { 389 // 第?”ã?判定ã? usableProparty ã«å˜åœ¨ã™ã‚Œã°ã€å³æŠœã‘ã™ã‚‹ã€? 390 if( usableProparty.containsKey( key ) ) { return ; } 391 392 // 第?•ã?判定ã?è¤?•°ã‚ー(å…ˆé?ä¸??ã‚ー)ã®å ´åˆã‚‚ã‚りã?‚‹ãŸã‚ã€å?é ã‹ã‚‰ã®æ¯”è¼?‚’行ã†ã€? 393 Iterator<Map.Entry<String,String>> ite = usableProparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 394 while( ite.hasNext() ) { 395 Map.Entry<String,String> entry = ite.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 396 String propKey = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 397 if( key.startsWith( propKey ) ) { return ; } // マッãƒã™ã‚Œã?ã€å³æŠœã‘ã‚‹ã? 398 } 399 400 // ãã“ã¾ã§æŽ¢ã—ã¦è¦‹ã¤ã‹ã‚‰ãªã??åˆã?ã€å®šç¾©å¤–引数エラー 401 StringBuilder errMsg = new StringBuilder(); 402 403 errMsg.append( "-KEY ãŒã?æŒ?®šã?æ•´åˆæ?リストã«å«ã¾ã‚Œã¦ã?¾ã›ã‚“ã€? ); 404 errMsg.append( CR ) ; 405 errMsg.append( " -KEY=VALUE å½¢å¼?BAD Key=[" ).append( key ).append( "]" ); 406 errMsg.append( CR ) ; 407 errMsg.append( toString() ) ; 408 throw new RuntimeException( errMsg.toString() ); 409 } 410 } 411 412 /** 413 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã? 414 * 値ãŒè¨å®šã•れã¦ã?ªã??åˆã?ã€?null ã‚’è¿”ã—ã¾ã™ã? 415 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã? 416 * 417 * ※ 引数ã®è¨å®šæ–¹æ³•ãŒé–“é•ã£ã¦ã?‚‹å ´åˆã?RuntimeException ã?throw ã•れã¾ã™ã? 418 * 419 * @param key 引数ã®ã‚ー 420 * 421 * @return 引数ã«å¯¾ã™ã‚‹å€¤ 422 */ 423 public String getProparty( final String key ) { 424 425 String value = proparty.get( key ); 426 427 // 値ã?null ã§ must è¨å®šãŒã‚りã€ã‹ã¤ãƒžã‚¹ãƒˆã‚ãƒ¼ãŒæŒ‡å®šã—ã¦ã?‚‹å ´åˆã? 428 if( value == null && 429 mustProparty != null && 430 mustProparty.containsKey( key ) ) { 431 String errMsg = "æŒ?®šã??»ãƒ—ãƒãƒ‘ティ?½ã¯ã€å¿??ã‚ーã§ã™ãŒã€å?ã?null ã§ã™ã?" 432 + " Key:" + key + " 説æ˜?" + mustProparty.get( key ) 433 + CR + toString() ; 434 throw new RuntimeException( errMsg ); 435 } 436 437 return value ; 438 } 439 440 /** 441 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã? 442 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã? 443 * def ã«ã¯ã€æ–‡å—å?ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?key ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã? 444 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã? 445 * 446 * 処ç??ã€getProparty( String ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã? 447 * 448 * @param key ã‚ー 449 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤ 450 * 451 * @return ?»ãƒ—ãƒãƒ‘ティ?½ 452 * @see #getProparty( String ) 453 */ 454 public String getProparty( final String key, final String def ) { 455 String value = getProparty( key ); 456 return ( value != null ) ? value : def ; 457 } 458 459 /** 460 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã? 461 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã? 462 * def ã«ã¯ã€æ–‡å—å?ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?key ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã? 463 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã? 464 * list é…å?ã«ã¯ã€ç™»éŒ²ã§ãã‚‹æ–?—å?é…å?を指定ã—ã¾ã™ã?ã“ã?æ–?—å?ã«å«ã¾ã‚Œãªã? 465 * 値ãŒè¨å®šã•れã¦ã?Ÿå ´åˆã?ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã? 466 * 467 * 処ç??ã€getProparty( String ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã? 468 * 469 * ※ 引数ã®è¨å®šæ–¹æ³•ãŒé–“é•ã£ã¦ã?‚‹å ´åˆã?RuntimeException ã?throw ã•れã¾ã™ã? 470 * 471 * @param key ã‚ー 472 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤ 473 * @param list 値ã¨ã—ã¦å˜åœ¨ã§ãã‚‹æ–?—å?リスãƒ? 474 * 475 * @return ?»ãƒ—ãƒãƒ‘ティ?½ 476 * @see #getProparty( String ) 477 */ 478 public String getProparty( final String key, final String def, final String[] list ) { 479 String value = getProparty( key,def ); 480 if( value != null ) { 481 boolean isOK = false; 482 for( int i=0; i<list.length; i++ ) { 483 if( value.equalsIgnoreCase( list[i] ) ) { 484 isOK = true; break; 485 } 486 } 487 if( !isOK ) { 488 String errMsg = key + " ã¯ã€? + Arrays.toString( list ) 489 + " ã‹ã‚‰æŒ?®šã—ã¦ãã ã•ã„ã€? + CR 490 + "-" + key + "=[" + value + "]" ; 491 throw new RuntimeException( errMsg ); 492 } 493 } 494 495 return value ; 496 } 497 498 /** 499 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã? 500 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã? 501 * def ã«ã¯ã€æ•°å—ã?åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?key ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã? 502 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã? 503 * 504 * 処ç??ã€getProparty( String ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã? 505 * 506 * @param key ã‚ー 507 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤ 508 * 509 * @return ?»ãƒ—ãƒãƒ‘ティ?½ 510 * @see #getProparty( String ) 511 */ 512 public int getProparty( final String key, final int def ) { 513 String value = getProparty( key ); 514 return ( value != null ) ? Integer.parseInt( value ) : def ; 515 } 516 517 /** 518 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã? 519 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã? 520 * def ã«ã¯ã€boolean ã®åˆæœŸå€¤ã‚’指定ã—ã¦ãŠãã¾ã™ã?key ã«å¯¾å¿œã™ã‚‹å?ãŒã?null ã®å ´åˆã? 521 * ã“ã? def ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã? 522 * 523 * 処ç??ã€getProparty( String ) ã®çµæžœã‚’ã?使用ã—ã¦ã?¾ã™ã? 524 * 525 * @param key ã‚ー 526 * @param def 値ã?null ã®å ´åˆã?åˆæœŸå€¤ 527 * 528 * @return ?»ãƒ—ãƒãƒ‘ティ?½ 529 * @see #getProparty( String ) 530 */ 531 public boolean getProparty( final String key, final boolean def ) { 532 String value = getProparty( key ); 533 return ( value != null ) ? Boolean.valueOf( value ).booleanValue() : def ; 534 } 535 536 /** 537 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã? 538 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã? 539 * key プãƒãƒ‘ティã¯ã€??常ã®å¼•æ•°ã¨ã—ã¦æŒ?®šã§ãる簡易的ãªå€¤ã‚’è¨å®šã—ã¾ã™ã? 540 * keyFile プãƒãƒ‘ティ ã¯ã€ãƒ•ァイルåã‚’æŒ?®šã—ã€ãã®ãƒ•ァイルã®ä¸èº«ã‚? 541 * å–å¾—ã—ã¦è¿”ã—ã¾ã™ã?通常ã¯?‘行ã§ã‚ã‚‹ãŒã?時ã«ã¯è¤?•°è¡Œã?ãƒ??タを指å®? 542 * ã—ãŸã??åˆã«ã€?¼’ã¤ã®ãƒ‘ラメータを使ã?¾ã™ãŒã€è¨å®šå?ã¯ã€åŒã˜å¼•æ•°ã¨ã—㦠543 * 使用ã—ãŸã?‚±ãƒ¼ã‚¹ã«ä¾¿åˆ©ã§ã™ã? 544 * key プãƒãƒ‘ティã¨ã€keyFile プãƒãƒ‘ティ ã¯ã€åŒæ™‚指定ã§ãã¾ã›ã‚“ã€? 545 * ã“れã¯ã€æŒ‡å®šæ–¹æ³•ã?é–“é•ã?‰ã‚’é¿ã‘る為ã§ã™ã? 546 * ã©ã¡ã‚‰ã‚‚ã€null ã§ã‚ã‚‹å¯èƒ½æ€§ã¯ã‚りã¾ã™ã? 547 * 548 * ※ åŒæ™‚æŒ?®šæ™‚ã€ã¾ãŸã?ã€must å¿??時㫠null ã®å ´åˆã?RuntimeException ã?throw ã•れã¾ã™ã? 549 * 550 * @param key ã‚ー 551 * @param keyFile è¨å®šãƒ•ァイルå? 552 * @param must å¿??æ¡ä»¶[true/false] 553 * 554 * @return ?»ãƒ—ãƒãƒ‘ティ?½ 555 * @see #getProparty( String ) 556 */ 557 public String getFileProparty( final String key, final String keyFile, final boolean must ) { 558 return getFileProparty( key,keyFile,null,must ); 559 } 560 561 /** 562 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーを指定ã—ã¦å–å¾—ã—ã¾ã™ã? 563 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã? 564 * key プãƒãƒ‘ティã¯ã€??常ã®å¼•æ•°ã¨ã—ã¦æŒ?®šã§ãる簡易的ãªå€¤ã‚’è¨å®šã—ã¾ã™ã? 565 * keyFile プãƒãƒ‘ティ ã¯ã€ãƒ•ァイルåã‚’æŒ?®šã—ã€ãã®ãƒ•ァイルã®ä¸èº«ã‚? 566 * å–å¾—ã—ã¦è¿”ã—ã¾ã™ã?通常ã¯?‘行ã§ã‚ã‚‹ãŒã?時ã«ã¯è¤?•°è¡Œã?ãƒ??タを指å®? 567 * ã—ãŸã??åˆã«ã€?¼’ã¤ã®ãƒ‘ラメータを使ã?¾ã™ãŒã€è¨å®šå?ã¯ã€åŒã˜å¼•æ•°ã¨ã—㦠568 * 使用ã—ãŸã?‚±ãƒ¼ã‚¹ã«ä¾¿åˆ©ã§ã™ã? 569 * key プãƒãƒ‘ティã¨ã€keyFile プãƒãƒ‘ティ ã¯ã€åŒæ™‚指定ã§ãã¾ã›ã‚“ã€? 570 * ã“れã¯ã€æŒ‡å®šæ–¹æ³•ã?é–“é•ã?‰ã‚’é¿ã‘る為ã§ã™ã? 571 * ã©ã¡ã‚‰ã‚‚ã€null ã§ã‚ã‚‹å¯èƒ½æ€§ã¯ã‚りã¾ã™ã? 572 * 573 * ※ åŒæ™‚æŒ?®šæ™‚ã€ã¾ãŸã?ã€must å¿??時㫠null ã®å ´åˆã?RuntimeException ã?throw ã•れã¾ã™ã? 574 * 575 * @param key ã‚ー 576 * @param keyFile è¨å®šãƒ•ァイルå? 577 * @param encode keyFileèªå–エンコーãƒ?null ã¯ãƒ?ƒ•ォルトエンコーãƒ? 578 * @param must å¿??æ¡ä»¶[true/false] 579 * 580 * @return ?»ãƒ—ãƒãƒ‘ティ?½ 581 * @see #getProparty( String ) 582 */ 583 public String getFileProparty( final String key, final String keyFile, 584 final String encode,final boolean must ) { 585 String val = getProparty( key ); 586 String valFile = getProparty( keyFile ); 587 588 if( val != null && valFile != null ) { 589 String errMsg = key + "ã‹ã?" + keyFile + " ã¯ã€ä¸¡æ–¹åŒæ™‚ã«æŒ?®šã§ãã¾ã›ã‚“ã€?" + val + "],[" + valFile + "]"; 590 throw new RuntimeException( errMsg ); 591 } 592 593 if( valFile != null ) { 594 FileString fs = new FileString(); 595 fs.setFilename( valFile ); 596 fs.setEncode( encode ); 597 val = fs.getValue(); 598 } 599 600 if( must && val == null ) { 601 String errMsg = key + "ã‹ã?" + keyFile + " ã¯ã€ç‰‡æ–¹å¿??ã§ã™ã?"; 602 throw new RuntimeException( errMsg ); 603 } 604 605 return val; 606 } 607 608 /** 609 * å†?ƒ¨ã§ä½¿ç”¨ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã‚’ã?ã‚ーをå?é ã«å«ã‚??ã‚’å–å¾—ã—ã¾ã™ã? 610 * ?»ãƒ—ãƒãƒ‘ティ?½ã®ã‚ー部ã®å¤§æ–?—ï½¥å°æ–‡å—ã?ã€åŽ³æ ¼ã«åˆ¤å®šã—ã¦ã?¾ã™ã? 611 * 値ãŒè¨å®šã•れã¦ã?ªã??åˆã?ã€String[0] ã‚’è¿”ã—ã¾ã™ã? 612 * HybsEntry ã®ã‚ーã«è¨å®šã•れる値ã¯ã€å¼•æ•°ã®å…ˆé?ã‚ーを除ã?Ÿæ–?—å?ã§ã™ã? 613 * 例ãˆã°ã€?const_" ã®ã‚ˆã†ãªå€¤ã‚’与ãˆã¦ã€const_AA, const_BB, const_CC ã® 614 * ?“ã¤ã®ã‚ーãŒé¸å®šã•れãŸå ´åˆã?ã‚ーã¯ã€AA, BB, CC ã®ã¿è¿”ã—ã¾ã™ã? 615 * 616 * @param startsKey 引数ã®å…ˆé?ã®ã‚ー 617 * 618 * @return 引数ã«å¯¾ã™ã‚‹?»ãƒ—ãƒãƒ‘ティ?½ã®HybsEntry 619 */ 620 public HybsEntry[] getEntrys( final String startsKey ) { 621 622 ArrayList<HybsEntry> list = new ArrayList<HybsEntry>(); 623 int len = startsKey.length(); 624 625 Iterator<Map.Entry<String,String>> ite = proparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 626 while( ite.hasNext() ) { 627 Map.Entry<String,String> entry = ite.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 628 String key = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 629 if( key.startsWith( startsKey ) ) { 630 list.add( new HybsEntry( key.substring( len ), entry.getValue() ) ); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 631 } 632 } 633 634 return list.toArray( new HybsEntry[list.size()] ) ; 635 } 636 637 /** 638 * 入力文å—å?ã«ã€{@XXXX}関係ã?æ–?—å?変æ›ã‚’行ã„ã¾ã™ã? 639 * 引数ã«å«ã¾ã‚Œã‚‹ {@XXXX}=YYYY ã¨ã?†å…¥åŠ›ã«å¯¾ã—ã¦ã€inMsg ã« 640 * å«ã¾ã‚Œã‚‹{@XXXX} æ–?—å?ã‚’ã?YYYY ã¨ã?†æ–?—å?ã«å¤‰æ›ã—ã¾ã™ã? 641 * ãれ以外ã«ã€äºˆç´?–‡å—変æ›ã¨ã—ã¦ã€? 642 * {@ARG.XXX} 引数ã«ä½¿ç”¨ã•れãŸå?ã‚’å?利用(割り当ã¦)ã—ã¾ã™ã? 643 * {@DATE.XXX} SimpleDateFormat å½¢å¼ã?æ–?—を変æ›ã—ã¾ã™ã?(日付ã?時刻ç? 644 * {@ENV.XXX} シスãƒ?ƒ プãƒãƒ‘ãƒ†ã‚£ãƒ¼ã®æ–?—を変æ›ã—ã¾ã™ã?(java -Dkey=value オプション) 645 * 646 * @param inMsg 入力文å—å? 647 * 648 * @return 変æ›å¾Œæ–‡å—å? 649 */ 650 public String changeParam( final String inMsg ) { 651 if( inMsg == null ) { return inMsg; } 652 653 String message = inMsg; 654 655 // {@ARG.XXXX} 変数ã®ç½®æ›å?ç? 656 int adrs = message.indexOf( "{@ARG." ) ; 657 while( adrs >= 0 ) { 658 int end = message.indexOf( '}',adrs ) ; 659 String key = message.substring( adrs+6,end ); 660 String oldData = "{@ARG." + key + "}" ; 661 // 注æ„:{@XXX}ã¨ç•°ãªã‚Šã?{@ARG.XXX} ã§ã¯ã€XXX ã§ proparty を検索ã™ã‚‹ã€? 662 String newData = StringUtil.nval( getProparty( key ),"" ); 663 message = StringUtil.replace( message,oldData,newData ); 664 adrs = message.indexOf( "{@ARG.",adrs ) ; 665 } 666 // {@DATE.XXXX} 変数ã®ç½®æ›å?ç? 667 adrs = message.indexOf( "{@DATE." ) ; 668 if( adrs >= 0 ) { 669 Date dt = new Date(); 670 while( adrs >= 0 ) { 671 int end = message.indexOf( '}',adrs ) ; 672 String key = message.substring( adrs+7,end ); 673 String oldData = "{@DATE." + key + "}" ; 674 DateFormat formatter = new SimpleDateFormat( key, Locale.JAPANESE ); 675 String newData = StringUtil.nval( formatter.format(dt),"" ); 676 message = StringUtil.replace( message,oldData,newData ); 677 adrs = message.indexOf( "{@DATE.",adrs ) ; 678 } 679 } 680 // {@ENV.XXXX} 変数ã®ç½®æ›å?ç? 681 adrs = message.indexOf( "{@ENV." ) ; 682 while( adrs >= 0 ) { 683 int end = message.indexOf( '}',adrs ) ; 684 String key = message.substring( adrs+6,end ); 685 String oldData = "{@ENV." + key + "}" ; 686 String newData = System.getProperty( key,"" ); 687 message = StringUtil.replace( message,oldData,newData ); 688 adrs = message.indexOf( "{@ARG.",adrs ) ; 689 } 690 691 // 残りã®ãƒ¡ãƒ?‚»ãƒ¼ã‚¸æœ¬æ–?¸ã®ç½®æ›æ–‡å—å?ã‚’å?ç?—ã¾ã™ã? 692 adrs = message.indexOf( "{@" ) ; 693 while( adrs >= 0 ) { 694 int end = message.indexOf( '}',adrs ) ; 695 String key = message.substring( adrs,end+1 ); // +1 注æ„? 696 String oldData = key ; 697 // 注æ„:{@ARG.XXX} ã¨ç•°ãªã‚Šã?{@XXX} ãã?ã‚‚ã?ã§ proparty を検索ã™ã‚‹ã€? 698 String newData = StringUtil.nval( getProparty( key ),"" ); 699 message = StringUtil.replace( message,oldData,newData ); 700 adrs = message.indexOf( "{@",adrs ) ; 701 } 702 703 return message; 704 } 705 706 /** 707 * ã“ã?オブジェクトã?å†?ƒ¨è¡¨ç¾ã‚’ã?æ–?—å?ã«ã—ã¦è¿”ã—ã¾ã™ã? 708 * クラスå???起動時ã®å¼•数リストを表示ã—ã¾ã™ã? 709 * 710 * @return 引数ã«å¯¾ã™ã‚‹å€¤ 711 */ 712 @Override 713 public String toString() { 714 StringBuilder buf = new StringBuilder(); 715 716 buf.append( "java " ).append( programID ).append( CR ); 717 718 if( ! argments.isEmpty() ) { 719 for( int i=0; i<argments.size(); i++ ) { 720 buf.append( " " ).append( argments.get(i) ); 721 } 722 buf.append( CR ); 723 } 724 725 Iterator<Map.Entry<String,String>> propIte = proparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 726 while( propIte.hasNext() ) { 727 Map.Entry<String,String> entry = propIte.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 728 String key = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 729 Object val = entry.getValue(); 730 if( key.startsWith( "passwd" ) ) { 731 val = "*****" ; 732 } 733 734 buf.append( " -" ).append( key ).append( "=" ).append( val ); 735 buf.append( CR ); 736 } 737 738 return buf.toString(); 739 } 740 741 /** 742 * ã“ã?クラスã®ä½¿ç”¨æ–¹æ³•ã‚’è¿”ã—ã¾ã™ã? 743 * 744 * @return ã“ã?クラスã®ä½¿ç”¨æ–¹æ³? 745 */ 746 public String usage() { 747 StringBuilder buf = new StringBuilder(); 748 749 buf.append( toString() ); 750 buf.append( CR ); 751 752 buf.append( propartyToString( "[ Must Proparty List ]",mustProparty ) ); 753 754 buf.append( propartyToString( "[ Usable Proparty List ]",usableProparty ) ); 755 756 return buf.toString(); 757 } 758 759 /** 760 * プãƒãƒ‘ティーを文å—å?ã«å¤‰æ›ã—ã¾ã™ã? 761 * 762 * proparty ã® ã‚ãƒ¼ã®æœ?¤§é•·ã•を求ã‚ã€ä½ç½®ã‚ã‚ã›ã?ãŸã‚ã®ã‚¹ãƒšã?スを追åŠ?—ã¾ã™ã? 763 * 764 * @param title タイトル 765 * @param proparty プãƒãƒ‘ティー(Mapオブジェクãƒ? 766 * 767 * @return プãƒãƒ‘ティーæ–?—å? 768 */ 769 private String propartyToString( final String title,final Map<String,String> proparty ) { 770 StringBuilder buf = new StringBuilder(); 771 772 if( proparty != null ) { 773 buf.append( title ).append( CR ); 774 775 // ã‚ーã®é•·ã•ã‚’ãã‚ãˆã‚‹ãŸã‚ã®å‡¦ç? 776 int maxLen = 0; 777 Iterator<String> keyIte = proparty.keySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 778 while( keyIte.hasNext() ) { 779 int len = keyIte.next().length(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 780 if( len > maxLen ) { maxLen = len; } 781 } 782 783 char[] ch = new char[maxLen]; 784 Arrays.fill( ch,' ' ); // スペã?スã§åŸ‹ã‚ã¾ã™ã? 785 String SPACE = new String( ch ); 786 String VAL_SPACE = CR + SPACE + " " ; 787 788 Iterator<Map.Entry<String,String>> propIte = proparty.entrySet().iterator(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 789 while( propIte.hasNext() ) { 790 Map.Entry<String,String> entry = propIte.next(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 791 String key = entry.getKey(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 792 String val = entry.getValue(); // 4.3.3.6 (2008/11/15) Genericsè¦å‘Šå¯¾å¿? 793 if( val != null ) { val = val.replaceAll( CR,VAL_SPACE ); } 794 buf.append( " -" ).append( key ); 795 buf.append( SPACE.substring( key.length() ) ); // 使用ã•れるã‚ー 796 buf.append( " : " ).append( val ) ; // ãã?説æ˜? 797 buf.append( CR ); 798 } 799 } 800 801 return buf.toString(); 802 } 803 }