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