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.hayabusa.db; 017 018 import org.opengion.hayabusa.common.HybsSystem; 019 import org.opengion.fukurou.util.LogWriter; 020 import org.opengion.hayabusa.resource.CodeData; 021 022 /** 023 * ãƒ??ã‚¿ã®ã‚³ãƒ¼ãƒ‰æƒ…å ±ã‚’å–り扱ã?‚¯ãƒ©ã‚¹ã§ã™ã? 024 * 025 * コードã?ã‚ーã¨ãƒ©ãƒ™ãƒ«ã®æƒ??ã‹ã‚‰ã€HTMLã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚?ƒªã‚¹ãƒˆã‚’作æ?ã™ã‚‹ãŸã‚㮠オプション 026 * タグを作æ?ã—ãŸã‚Šã?与ãˆã‚‰ã‚ŒãŸã‚ーをもã¨ã«ã€ãƒã‚§ãƒ?‚¯æ¸ˆã¿ã®ã‚ªãƒ—ションタグを作æ?ã—ãŸã‚? 027 * ã—ã¾ã™ã? 028 * 029 * @og.group é¸æŠžãƒ‡ãƒ¼ã‚¿åˆ¶å¾¡ 030 * 031 * @version 4.0 032 * @author Kazuhiko Hasegawa 033 * @since JDK5.0, 034 */ 035 public class Selection_CODE implements Selection { 036 private final CodeData codeData ; 037 038 private final int[] ADRS ; 039 private final String CACHE ; 040 private final int LEN ; 041 042 private final int[] LADRS ; // 5.1.3.0 (2010/02/01) 043 private final String LCACHE ; // 5.1.3.0 (2010/02/01) 044 private final int LLEN ; // 5.1.3.0 (2010/02/01) 045 046 /** 047 * コンストラクター 048 * 049 * @og.rev 4.0.0.0 (2007/11/07) ã‚³ãƒ¼ãƒ‰ãƒªã‚½ãƒ¼ã‚¹ã®æœ‰ç„¡ã¯DBColumnã§ãƒã‚§ãƒ?‚¯ã™ã‚‹ã€? 050 * @og.rev 4.3.8.0 (2009/08/01) ãƒ??ルãƒãƒƒãƒ—表示機è?追åŠ? 051 * @og.rev 5.1.3.0 (2010/02/01) ä¸?¦§è¡¨ç¤ºä»¥å¤–ã?ã€ãƒ„ールãƒãƒƒãƒ—表示ã—ãªã? 052 * @og.rev 5.1.9.0 (2010/08/01) グループ機è?ã¨ãƒ‘ラメータ機è?ã®è¿½åŠ? 053 * @og.rev 5.6.8.2 (2013/09/20) ãƒ??ルãƒãƒƒãƒ—ã?未åŠ?·¥ã®longLabelを利用ã«ä¿®æ£ 054 * 055 * @param cdData コードデータオブジェクãƒ? 056 */ 057 public Selection_CODE( final CodeData cdData ) { 058 059 // 4.0.0.0 (2007/11/07) 060 // if( cdData == null ) { 061 // String errMsg = "コードリソースãŒå®šç¾©ã•れã¦ã?¾ã›ã‚“ã€? + HybsSystem.CR ; 062 // throw new HybsSystemException( errMsg ); 063 // } 064 codeData = cdData ; 065 int size = codeData.getSize(); 066 067 // 5.1.9.0 (2010/08/01) グループ機è?ã¨ãƒ‘ラメータã®åˆ¤å®? 068 boolean isLbl = codeData.useLebel(); 069 boolean isCls = codeData.useParam(); 070 boolean isLblSet = false; 071 072 ADRS = new int[size]; 073 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 074 boolean useTitle = false; // 4.3.8.0 (2009/08/01) title属æ?ä»˜åŠ ãƒ•ãƒ©ã‚° 075 for( int i=0; i<size; i++ ) { 076 if( ! codeData.isUse(i) ) { continue; } 077 078 String rslbl = codeData.getRawShortLabel(i); 079 // String lblb = codeData.getLongLabel(i); 080 String lblb = codeData.getRawLongLabel(i); // 5.6.8.2 (2013/09/20) ã“ã“ã§ã¯ç”Ÿã?åç§°é•·ã‚’å–ã‚? 081 082 // 5.1.9.0 (2010/08/01) コードレベルã®åˆ¤å®? 083 if( isLbl ) { 084 if( "0".equals( codeData.getCodeLebel(i) ) ) { 085 if( isLblSet ) { buf.append( "</optgroup>" ); } 086 087 buf.append( "<optgroup label=\"" + rslbl + "\">" ); 088 isLblSet = true; 089 continue; 090 } 091 } 092 093 buf.append( "<option value=\"" ).append( codeData.getCodeKey(i) ).append( "\"" ); 094 ADRS[i] = buf.length() ; 095 096 // 5.1.9.0 (2010/08/01) パラメータã®åˆ©ç”¨ 097 if( isCls ) { 098 String classKey = codeData.getCodeParam(i); 099 if( ! "".equals( classKey ) ) { 100 buf.append( " class=\"" ).append( classKey ).append( "\"" ); 101 } 102 } 103 104 // 4.3.8.0 (2009/08/01) LongLabelã¯RawShortLabelã¨ç•°ãªã‚‹ã¨ãã«ãƒ??ルãƒãƒƒãƒ—ã¨ã—ã¦è¡¨ç¤ºã•ã›ã‚? 105 if( ! rslbl.equals( lblb ) ){ 106 buf.append(" title=\"").append( lblb ).append("\""); 107 useTitle = true; 108 } 109 // ShortLabelã‚’BODYã«ã™ã‚‹ã€? 110 buf.append( ">" ).append( rslbl ).append( "</option>" ); 111 } 112 if( isLbl ) { 113 buf.append( "</optgroup>" ); 114 } 115 116 CACHE = buf.toString(); 117 LEN = CACHE.length() + 30; 118 119 // 5.1.3.0 (2010/02/01) ãƒ??ルãƒãƒƒãƒ—表示ãŒé©ç”¨ã•れã¦ã?‚‹å ´åˆã?ã¿ã€ãƒ„ールãƒãƒƒãƒ—ãªã—ã?状態ã?optionã‚’ã‚ャãƒ?‚·ãƒ¥ã™ã‚‹ã€? 120 if( useTitle ) { 121 isLblSet = false; 122 123 LADRS = new int[size]; 124 StringBuilder lbuf = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 125 for( int i=0; i<size; i++ ) { 126 String lblb = codeData.getLongLabel(i); 127 // 5.1.9.0 (2010/08/01) グループ機è?ã®åˆ¤å®? 128 if( isLbl ) { 129 if( "0".equals( codeData.getCodeLebel(i) ) ) { 130 if( isLblSet ) { lbuf.append( "</optgroup>" ); } 131 132 lbuf.append( "<optgroup label=\"" + lblb + "\">" ); 133 isLblSet = true; 134 continue; 135 } 136 } 137 138 lbuf.append( "<option value=\"" ).append( codeData.getCodeKey(i) ).append( "\"" ); 139 LADRS[i] = lbuf.length() ; 140 141 // 5.1.9.0 (2010/08/01) パラメータã®åˆ©ç”¨ 142 if( isCls ) { 143 String classKey = codeData.getCodeParam(i); 144 if( ! "".equals( classKey ) ) { 145 lbuf.append( " class=\"" ).append( classKey ).append( "\"" ); 146 } 147 } 148 149 lbuf.append( ">" ).append( lblb ).append( "</option>" ); 150 } 151 if( isLbl ) { 152 buf.append( "</optgroup>" ); 153 } 154 155 LCACHE = lbuf.toString(); 156 LLEN = LCACHE.length() + 30; 157 } 158 else { 159 LADRS = ADRS; 160 LCACHE = CACHE; 161 LLEN = LEN; 162 } 163 } 164 165 /** 166 * åˆæœŸå€¤ãŒé¸æŠžæ¸ˆã¿ã® é¸æŠžè‚¢(オプション)ã‚’è¿”ã—ã¾ã™ã? 167 * ã“ã?オプションã¯ã€å¼•æ•°ã®å€¤ã‚’å?期å?ã¨ã™ã‚‹ã‚ªãƒ—ションタグを返ã—ã¾ã™ã? 168 * ã“ã?メソãƒ?ƒ‰ã§ã¯ã€ãƒ©ãƒ™ãƒ«(çŸ)ãŒè¨å®šã•れã¦ã?‚‹å ´åˆã§ã‚‚ã?ã“れを使用ã›ãšã«å¿?šãƒ©ãƒ™ãƒ«(é•·)を使用ã—ã¾ã™ã? 169 * 170 * @og.rev 3.6.0.6 (2004/10/22) シーケンスアクセス機è?を指定ã™ã‚?seqFlag ã‚’å°Žå? 171 * @og.rev 4.0.0.0 (2005/01/31) selectValue ãŒã?null/ã‚¼ãƒæ–?—å?ã§ãªã??åˆã«ã€?¸æŠžè‚¢ã«ãªã??åˆã?ã€ã‚¨ãƒ©ãƒ¼ 172 * 173 * @param selectValue é¸æŠžã•れã¦ã?‚‹å€¤ 174 * @param seqFlag シーケンスアクセス機è? [true:ON/false:OFF] 175 * 176 * @return オプションタグ 177 * @see #getOption( String, boolean, boolean ) 178 */ 179 public String getOption( final String selectValue,final boolean seqFlag ) { 180 return getOption( selectValue, seqFlag, false ); 181 } 182 183 /** 184 * åˆæœŸå€¤ãŒé¸æŠžæ¸ˆã¿ã® é¸æŠžè‚¢(オプション)ã‚’è¿”ã—ã¾ã™ã? 185 * ã“ã?オプションã¯ã€å¼•æ•°ã®å€¤ã‚’å?期å?ã¨ã™ã‚‹ã‚ªãƒ—ションタグを返ã—ã¾ã™ã? 186 * ã“ã?メソãƒ?ƒ‰ã§ã¯ã€å¼•æ•°ã®useShortLabelãŒtrueã«æŒ?®šã•れãŸå ´åˆã«ã€ãƒ©ãƒ™ãƒ«(çŸ)ã‚’ã?ースã¨ã—㟠187 * ãƒ??ルãƒãƒƒãƒ—表示を行ã„ã¾ã™ã? 188 * 189 * @og.rev 5.1.3.0 (2010/02/01) 追åŠ? 190 * 191 * @param selectValue é¸æŠžã•れã¦ã?‚‹å€¤ 192 * @param seqFlag シーケンスアクセス機è? [true:ON/false:OFF] 193 * @param useShortLabel ラベル(çŸ)ã‚’ã?ースã¨ã—ãŸã‚ªãƒ—ション表示を行ã†ã‹ã©ã?‹ã€? 194 * 195 * @return オプションタグ 196 * @see #getOption( String, boolean ) 197 */ 198 public String getOption( final String selectValue,final boolean seqFlag, final boolean useShortLabel ) { 199 int[] adrs = null; 200 String cache = null; 201 int len = 0; 202 if( useShortLabel ) { 203 adrs = ADRS; 204 cache = CACHE; 205 len = LEN; 206 } 207 else { 208 adrs = LADRS; 209 cache = LCACHE; 210 len = LLEN; 211 } 212 213 // マッãƒã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™ã? 214 int selected = codeData.getAddress( selectValue ); 215 216 if( selected < 0 ) { 217 // 4.0.0 (2005/01/31) 218 if( selectValue != null && selectValue.length() > 0 ) { 219 String errMsg = "コードã«å˜åœ¨ã—ãªã??ãŒæŒ‡å®šã•れã¾ã—ãŸã€? 220 + " value=[" + selectValue + "]" 221 + HybsSystem.CR + codeData ; 222 LogWriter.log( errMsg ); 223 } 224 return cache; 225 } 226 else { 227 StringBuilder buf = new StringBuilder( len ); 228 // 3.6.0.6 (2004/10/22) シーケンスアクセス機è?を指定ã™ã‚?seqFlag ã‚’å°Žå? 229 if( seqFlag ) { 230 buf.append( "<option value=\"" ).append( codeData.getCodeKey(selected) ).append( "\"" ); 231 } 232 else { 233 buf.append( cache.substring( 0,adrs[selected] ) ); 234 } 235 buf.append( " selected=\"selected\"" ); 236 buf.append( cache.substring( adrs[selected] ) ); 237 return buf.toString() ; 238 } 239 } 240 241 /** 242 * åˆæœŸå€¤ãŒé¸æŠžæ¸ˆã¿ã® é¸æŠžè‚¢(オプション)ã‚’è¿”ã—ã¾ã™ã? 243 * ã“ã?オプションã¯ã€å¼•æ•°ã®å€¤ã‚’å?期å?ã¨ã™ã‚‹ã‚ªãƒ—ションタグを返ã—ã¾ã™ã? 244 * ※ ã“ã?クラスã§ã¯å®Ÿè£?•れã¦ã?¾ã›ã‚“ã€? 245 * 246 * @og.rev 2.1.0.1 (2002/10/17) é¸æŠžãƒªã‚¹ãƒˆã‚’ã€æ£æ–¹å‘ã«ã—ã‹é¸ã¹ãªã?‚ˆã?«ã™ã‚‹ sequenceFlag ã‚’å°Žå?ã™ã‚‹ 247 * @og.rev 3.8.6.0 (2006/09/29) useLabel 属æ? 追åŠ? 248 * 249 * @param name ラジオ㮠name 250 * @param selectValue é¸æŠžã•れã¦ã?‚‹å€¤ 251 * @param useLabel ãƒ©ãƒ™ãƒ«è¡¨ç¤ºã®æœ‰ç„¡ [true:æœ?false:ç„¡] 252 * 253 * @return オプションタグ 254 */ 255 public String getRadio( final String name,final String selectValue,final boolean useLabel ) { 256 String errMsg = "ã“ã?クラスã§ã¯å®Ÿè£?•れã¦ã?¾ã›ã‚“ã€?; 257 throw new UnsupportedOperationException( errMsg ); 258 } 259 260 /** 261 * åˆæœŸå€¤ãŒé¸æŠžæ¸ˆã¿ã® é¸æŠžè‚¢(オプション)ã‚’è¿”ã—ã¾ã™ã? 262 * ã“ã?オプションã¯ã€å¼•æ•°ã®å€¤ã‚’å?期å?ã¨ã™ã‚‹ã‚ªãƒ—ションタグを返ã—ã¾ã™ã? 263 * ※ ã“ã?クラスã§ã¯å®Ÿè£?•れã¦ã?¾ã›ã‚“ã€? 264 * 265 * @param selectValue é¸æŠžã•れã¦ã?‚‹å€¤ 266 * 267 * @return オプションタグ 268 */ 269 public String getRadioLabel( final String selectValue ) { 270 String errMsg = "ã“ã?クラスã§ã¯å®Ÿè£?•れã¦ã?¾ã›ã‚“ã€?; 271 throw new UnsupportedOperationException( errMsg ); 272 } 273 274 /** 275 * é¸æŠžè‚¢(value)ã«å¯¾ã™ã‚‹ãƒ©ãƒ™ãƒ«ã‚’è¿”ã—ã¾ã™ã? 276 * é¸æŠžè‚¢(value)ãŒã?å˜åœ¨ã—ãªã‹ã£ãŸå?åˆã?ã€?¸æŠžè‚¢ãã?ã‚‚ã?ã‚’è¿”ã—ã¾ã™ã? 277 * getValueLabel( XX ) ã¯ã€getValueLabel( XX,false ) ã¨åŒã˜ã§ã™ã? 278 * 279 * @param selectValue é¸æŠžè‚¢ã®å€¤ 280 * 281 * @return é¸æŠžè‚¢ã®ãƒ©ãƒ™ãƒ« 282 * @see #getValueLabel( String,boolean ) 283 */ 284 public String getValueLabel( final String selectValue ) { 285 return getValueLabel( selectValue,false ); 286 } 287 288 /** 289 * é¸æŠžè‚¢(value)ã«å¯¾ã™ã‚‹ãƒ©ãƒ™ãƒ«ã‚’è¿”ã—ã¾ã™ã? 290 * é¸æŠžè‚¢(value)ãŒã?å˜åœ¨ã—ãªã‹ã£ãŸå?åˆã?ã€?¸æŠžè‚¢ãã?ã‚‚ã?ã‚’è¿”ã—ã¾ã™ã? 291 * ã“ã?メソãƒ?ƒ‰ã§ã¯ã€çŸç¸®ãƒ©ãƒ™ãƒ«ã‚’è¿”ã™ã‹ã©ã?‹ã‚’指定ã™ã‚‹ãƒ•ラグを指定ã—ã¾ã™ã? 292 * getValueLabel( XX,false ) ã¯ã€getValueLabel( XX ) ã¨åŒã˜ã§ã™ã? 293 * 294 * @og.rev 4.0.0.0 (2005/11/30) を追åŠ? 295 * 296 * @param selectValue é¸æŠžè‚¢ã®å€¤ 297 * @param flag çŸç¸®ãƒ©ãƒ™ãƒ«ã‚?[true:使用ã™ã‚‹/false:ã—ãªã„] 298 * 299 * @return é¸æŠžè‚¢ã®ãƒ©ãƒ™ãƒ« 300 * @see #getValueLabel( String ) 301 */ 302 public String getValueLabel( final String selectValue,final boolean flag ) { 303 // マッãƒã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’探ã™ã? 304 int selected = codeData.getAddress( selectValue ); 305 306 if( selected < 0 ) { 307 // マッãƒã—ãªã‘れã°ã€?¸æŠžè‚¢ãã?ã‚‚ã?ã‚’è¿”ã™ã€? 308 return selectValue; 309 } 310 else { 311 if( flag ) { 312 return codeData.getShortLabel(selected); 313 } 314 else { 315 return codeData.getLongLabel(selected); 316 } 317 } 318 } 319 320 /** 321 * マルãƒã?ã‚ーセレクトを使用ã™ã‚‹ã‹ã©ã?‹ã‚’è¿”ã—ã¾ã™ã? 322 * true?šä½¿ç”¨ã™ã‚‹ã€‚false:使用ã—ãªã?ã§ã™ã? 323 * ãŸã ã—ã?実際ã«ä½¿ç”¨ã™ã‚‹ã‹ã©ã?‹ã¯ã€HTMLå‡ºåŠ›æ™‚ã«æ±ºã‚ã‚‹ã“ã¨ãŒå?æ¥ã¾ã™ã? 324 * ã“ã“ã§ã¯ã€USE_MULTI_KEY_SELECT ã?true ã§ã€USE_SIZE(=20)以上ã?å ´åˆã« 325 * true ã‚’è¿”ã—ã¾ã™ã? 326 * 327 * @og.rev 3.5.5.7 (2004/05/10) æ–°è¦ä½œæ? 328 * 329 * @return é¸æŠžãƒªã‚¹ãƒˆã§ã€ã?ルãƒã?ã‚ーセレクトを使用ã™ã‚‹ã‹ã©ã?‹(true:使用ã™ã‚‹) 330 */ 331 public boolean useMultiSelect() { 332 return codeData.useMultiSelect(); 333 } 334 335 /** 336 * オブジェクトã?ã‚ャãƒ?‚·ãƒ¥ãŒæ™‚é–“å?れã‹ã©ã?‹ã‚’è¿”ã—ã¾ã™ã? 337 * ã‚ャãƒ?‚·ãƒ¥ãŒæ™‚é–“å?ã‚?無効)ã§ã‚れã°ã€true ã‚’ã?有効ã§ã‚れã°ã€? 338 * false ã‚’è¿”ã—ã¾ã™ã? 339 * 340 * @og.rev 4.0.0.0 (2005/01/31) æ–°è¦ä½œæ? 341 * 342 * @return ã‚ャãƒ?‚·ãƒ¥ãŒæ™‚é–“å?れãªã‚?true 343 */ 344 public boolean isTimeOver() { 345 return false; 346 } 347 }