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.rev 5.7.7.1 (2014/06/13) Selection_NULL ã‚?基本実è£?�¨しますã?
030 * @og.group 選択データ制御
031 *
032 * @version 4.0
033 * @author Kazuhiko Hasegawa
034 * @since JDK5.0,
035 */
036 // public class Selection_CODE implements Selection {
037 public class Selection_CODE extends Selection_NULL {
038 private final CodeData codeData ;
039
040 private final int[] ADRS ;
041 private final String CACHE ;
042 private final int LEN ;
043
044 private final int[] LADRS ; // 5.1.3.0 (2010/02/01)
045 private final String LCACHE ; // 5.1.3.0 (2010/02/01)
046 private final int LLEN ; // 5.1.3.0 (2010/02/01)
047
048 /**
049 * コンストラクター
050 *
051 * @og.rev 4.0.0.0 (2007/11/07) コードリソースの有無はDBColumnでチェãƒ?‚¯するã€?
052 * @og.rev 4.3.8.0 (2009/08/01) ãƒ??ルチップ表示機è?追åŠ?
053 * @og.rev 5.1.3.0 (2010/02/01) ä¸?¦§表示以外ã?、ツールチップ表示しなã�?
054 * @og.rev 5.1.9.0 (2010/08/01) グループ機è?とパラメータ機è?の追åŠ?
055 * @og.rev 5.6.8.2 (2013/09/20) ãƒ??ルチップã?未åŠ?·¥のlongLabelを利用に修正
056 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL ã‚?継承するため、super( null ); を追åŠ?�—ますã?
057 *
058 * @param cdData コードデータオブジェクãƒ?
059 */
060 public Selection_CODE( final CodeData cdData ) {
061 codeData = cdData ;
062 int size = codeData.getSize();
063
064 // 5.1.9.0 (2010/08/01) グループ機è?とパラメータの判å®?
065 boolean isLbl = codeData.useLebel();
066 boolean isCls = codeData.useParam();
067 boolean isLblSet = false;
068
069 ADRS = new int[size];
070 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
071 boolean useTitle = false; // 4.3.8.0 (2009/08/01) title属æ?付加フラグ
072 for( int i=0; i<size; i++ ) {
073 if( ! codeData.isUse(i) ) { continue; }
074
075 String rslbl = codeData.getRawShortLabel(i);
076 // String lblb = codeData.getLongLabel(i);
077 String lblb = codeData.getRawLongLabel(i); // 5.6.8.2 (2013/09/20) ここでは生ã?名称長を取ã‚?
078
079 // 5.1.9.0 (2010/08/01) コードレベルの判å®?
080 if( isLbl && "0".equals( codeData.getCodeLebel(i) ) ) {
081 if( isLblSet ) { buf.append( "</optgroup>" ); }
082
083 buf.append( "<optgroup label=\"" + rslbl + "\">" );
084 isLblSet = true;
085 continue;
086 }
087
088 buf.append( "<option value=\"" ).append( codeData.getCodeKey(i) ).append( "\"" );
089 ADRS[i] = buf.length() ;
090
091 // 5.1.9.0 (2010/08/01) パラメータの利用
092 if( isCls ) {
093 String classKey = codeData.getCodeParam(i);
094 if( ! "".equals( classKey ) ) {
095 buf.append( " class=\"" ).append( classKey ).append( "\"" );
096 }
097 }
098
099 // 4.3.8.0 (2009/08/01) LongLabelはRawShortLabelと異なるときにãƒ??ルチップとして表示させã‚?
100 if( ! rslbl.equals( lblb ) ){
101 buf.append(" title=\"").append( lblb ).append("\"");
102 useTitle = true;
103 }
104 // ShortLabelをBODYにするã€?
105 buf.append( ">" ).append( rslbl ).append( "</option>" );
106 }
107 if( isLbl ) {
108 buf.append( "</optgroup>" );
109 }
110
111 CACHE = buf.toString();
112 LEN = CACHE.length() + 30;
113
114 // 5.1.3.0 (2010/02/01) ãƒ??ルチップ表示が適用されてã�?‚‹場合ã?み、ツールチップなしã?状態ã?optionをキャãƒ?‚·ュするã€?
115 if( useTitle ) {
116 isLblSet = false;
117
118 LADRS = new int[size];
119 StringBuilder lbuf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
120 for( int i=0; i<size; i++ ) {
121 String lblb = codeData.getLongLabel(i);
122 // 5.1.9.0 (2010/08/01) グループ機è?の判å®?
123 if( isLbl && "0".equals( codeData.getCodeLebel(i) ) ) {
124 if( isLblSet ) { lbuf.append( "</optgroup>" ); }
125
126 lbuf.append( "<optgroup label=\"" + lblb + "\">" );
127 isLblSet = true;
128 continue;
129 }
130
131 lbuf.append( "<option value=\"" ).append( codeData.getCodeKey(i) ).append( "\"" );
132 LADRS[i] = lbuf.length() ;
133
134 // 5.1.9.0 (2010/08/01) パラメータの利用
135 if( isCls ) {
136 String classKey = codeData.getCodeParam(i);
137 if( ! "".equals( classKey ) ) {
138 lbuf.append( " class=\"" ).append( classKey ).append( "\"" );
139 }
140 }
141
142 lbuf.append( ">" ).append( lblb ).append( "</option>" );
143 }
144 if( isLbl ) {
145 buf.append( "</optgroup>" );
146 }
147
148 LCACHE = lbuf.toString();
149 LLEN = LCACHE.length() + 30;
150 }
151 else {
152 LADRS = ADRS;
153 LCACHE = CACHE;
154 LLEN = LEN;
155 }
156 }
157
158 /**
159 * 初期値が選択済みの 選択肢(オプション)を返しますã?
160 * こã?オプションは、引数の値をå?期å?とするオプションタグを返しますã?
161 * こã?メソãƒ?ƒ‰では、ラベル(短)が設定されてã�?‚‹場合でもã?これを使用せずにå¿?�šラベル(長)を使用しますã?
162 *
163 * @og.rev 3.6.0.6 (2004/10/22) シーケンスアクセス機è?を指定すã‚?seqFlag を導å?
164 * @og.rev 4.0.0.0 (2005/01/31) selectValue がã?null/ゼロæ–?—å?でなã�??合にã€?�¸択肢になã�??合ã?、エラー
165 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL ã‚?継承するため、削除
166 *
167 * @param selectValue 選択されてã�?‚‹値
168 * @param seqFlag シーケンスアクセス機è? [true:ON/false:OFF]
169 *
170 * @return オプションタグ
171 * @see #getOption( String, boolean, boolean )
172 */
173 // public String getOption( final String selectValue,final boolean seqFlag ) {
174 // return getOption( selectValue, seqFlag, false );
175 // }
176
177 /**
178 * 初期値が選択済みの 選択肢(オプション)を返しますã?
179 * こã?オプションは、引数の値をå?期å?とするオプションタグを返しますã?
180 * こã?メソãƒ?ƒ‰では、引数のuseShortLabelがtrueにæŒ?®šされた場合に、ラベル(短)をã?ースとした
181 * ãƒ??ルチップ表示を行いますã?
182 *
183 * @og.rev 5.1.3.0 (2010/02/01) 追åŠ?
184 *
185 * @param selectValue 選択されてã�?‚‹値
186 * @param seqFlag シーケンスアクセス機è? [true:ON/false:OFF]
187 * @param useShortLabel ラベル(短)をã?ースとしたオプション表示を行うかどã�?�‹ã€?
188 *
189 * @return オプションタグ
190 * @see #getOption( String, boolean )
191 */
192 @Override
193 public String getOption( final String selectValue,final boolean seqFlag, final boolean useShortLabel ) {
194 int[] adrs = null;
195 String cache = null;
196 int len = 0;
197 if( useShortLabel ) {
198 adrs = ADRS;
199 cache = CACHE;
200 len = LEN;
201 }
202 else {
203 adrs = LADRS;
204 cache = LCACHE;
205 len = LLEN;
206 }
207
208 // マッチするアドレスを探すã?
209 int selected = codeData.getAddress( selectValue );
210
211 if( selected < 0 ) {
212 // 4.0.0 (2005/01/31)
213 if( selectValue != null && selectValue.length() > 0 ) {
214 String errMsg = "コードに存在しなã�??が指定されましたã€?
215 + " value=[" + selectValue + "]"
216 + HybsSystem.CR + codeData ;
217 LogWriter.log( errMsg );
218 }
219 return cache;
220 }
221 else {
222 StringBuilder buf = new StringBuilder( len );
223 // 3.6.0.6 (2004/10/22) シーケンスアクセス機è?を指定すã‚?seqFlag を導å?
224 if( seqFlag ) {
225 buf.append( "<option value=\"" ).append( codeData.getCodeKey(selected) ).append( "\"" );
226 }
227 else {
228 buf.append( cache.substring( 0,adrs[selected] ) );
229 }
230 buf.append( " selected=\"selected\"" );
231 buf.append( cache.substring( adrs[selected] ) );
232 return buf.toString() ;
233 }
234 }
235
236 /**
237 * 初期値が選択済みの 選択肢(オプション)を返しますã?
238 * こã?オプションは、引数の値をå?期å?とするオプションタグを返しますã?
239 * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
240 *
241 * @og.rev 2.1.0.1 (2002/10/17) 選択リストを、正方向にしか選べなã�?‚ˆã�?�«する sequenceFlag を導å?する
242 * @og.rev 3.8.6.0 (2006/09/29) useLabel 属æ? 追åŠ?
243 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL ã‚?継承するため、削除
244 *
245 * @param name ラジオの name
246 * @param selectValue 選択されてã�?‚‹値
247 * @param useLabel ラベル表示の有無 [true:æœ?false:無]
248 *
249 * @return オプションタグ
250 */
251 // public String getRadio( final String name,final String selectValue,final boolean useLabel ) {
252 // String errMsg = "こã?クラスでは実è£?�•れてã�?�¾せんã€?;
253 // throw new UnsupportedOperationException( errMsg );
254 // }
255
256 /**
257 * 初期値が選択済みの 選択肢(オプション)を返しますã?
258 * こã?オプションは、引数の値をå?期å?とするオプションタグを返しますã?
259 * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
260 *
261 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL ã‚?継承するため、削除
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 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL ã‚?継承するため、削除
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 @Override
303 public String getValueLabel( final String selectValue,final boolean flag ) {
304 // マッチするアドレスを探すã?
305 int selected = codeData.getAddress( selectValue );
306
307 if( selected < 0 ) {
308 // マッチしなければã€?�¸択肢そã?もã?を返すã€?
309 return selectValue;
310 }
311 else {
312 if( flag ) {
313 return codeData.getShortLabel(selected);
314 }
315 else {
316 return codeData.getLongLabel(selected);
317 }
318 }
319 }
320
321 /**
322 * マルチã?キーセレクトを使用するかどã�?�‹を返しますã?
323 * true?š使用する。false:使用しなã�?ですã?
324 * ただしã?実際に使用するかどã�?�‹は、HTML出力時に決めることがå?来ますã?
325 * ここでは、USE_MULTI_KEY_SELECT ã�?true で、USE_SIZE(=20)以上ã?場合に
326 * true を返しますã?
327 *
328 * @og.rev 3.5.5.7 (2004/05/10) 新規作æ?
329 *
330 * @return 選択リストで、ã?ルチã?キーセレクトを使用するかどã�?�‹(true:使用する)
331 */
332 @Override
333 public boolean useMultiSelect() {
334 return codeData.useMultiSelect();
335 }
336
337 /**
338 * オブジェクトã?キャãƒ?‚·ュが時間å?れかどã�?�‹を返しますã?
339 * キャãƒ?‚·ュが時間å?ã‚?無効)であれば、true をã?有効であればã€?
340 * false を返しますã?
341 *
342 * @og.rev 4.0.0.0 (2005/01/31) 新規作æ?
343 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL ã‚?継承するため、削除
344 *
345 * @return キャãƒ?‚·ュが時間å?れなã‚?true
346 */
347 // public boolean isTimeOver() {
348 // return false;
349 // }
350 }