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.resource;
017
018 import org.opengion.hayabusa.common.HybsSystem ;
019 import java.util.Map;
020 import java.util.HashSet;
021 import java.util.HashMap;
022 import java.util.LinkedHashMap ;
023 import java.util.Arrays;
024 import static org.opengion.fukurou.util.StringUtil.nval2;
025
026 /**
027 * systemId と lang に対応したコードデータを作æ?しますã?
028 *
029 * コードデータはã€??目(CLM)に対して、è¤?•°のコーãƒ?CODE)を持ってã�?�¾すã?
030 * こã?è¤?•°のコードを表示é ?�«持つことで、ã?ルãƒ?‚¦ンメニュー等ã?表示é ?‚’æŒ?®šしますã?
031 *
032 * コードデータを作æ?する場合ã?、同ä¸??目・コードで、作æ?区åˆ?�•ã�??場合ã?ã€?
033 * æœ?‚‚大きな作æ?区åˆ?‚’持つコードを使用しますã?
034 * 作æ?区åˆ?KBSAKU)は、他ã?リソースと異なりã?基本çš?�«は使用しませんã€?
035 * これはã€??常はé ?›®単位に作æ?区åˆ?‚’持つべきところをã?コード単位でしか
036 * 持てなã�?ƒ‡ータベã?スの設計になってã�?‚‹為ですã?アプリケーション側で設定条件ã‚?
037 * きちんと管ç�?�™れã?、作æ?区åˆ?‚’使用できますが、ä¸?ˆ¬にはお奨めできませんã€?
038 *
039 * @og.rev 4.0.0.0 (2004/12/31) 新規作æ?
040 * @og.group リソース管ç�?
041 *
042 * @version 4.0
043 * @author Kazuhiko Hasegawa
044 * @since JDK5.0,
045 */
046 public final class CodeData {
047 private final boolean USE_MULTI_KEY_SELECT = HybsSystem.sysBool( "USE_MULTI_KEY_SELECT" ) ;
048
049 private static final String SPC = "";
050
051 /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value} */
052 public static final int CLM = 0 ;
053 public static final int CODE = 1 ;
054 public static final int LNAME = 2 ;
055 public static final int SNAME = 3 ;
056 public static final int CODELVL = 4 ;
057 public static final int CODEGRP = 5 ;
058 public static final int CODE_PARAM = 6 ;
059 public static final int ROLES = 7 ;
060 public static final int SYSTEM_ID = 8 ;
061 public static final int KBSAKU = 9 ;
062 public static final int RSNAME = 10; // 4.3.8.0 (2009/08/01) spanが付かなã�?��前短
063 public static final int RLNAME = 11; // 5.6.8.2 (2013/09/20) rawLongLabel対å¿?
064 // public static final int MAX_LENGTH = 11; // 5.1.9.0 (2010/08/01) 配å?の定義
065 public static final int MAX_LENGTH = 12; // 5.6.8.2 (2013/09/20) 変更
066
067 private final String column ; // é ?›®
068 private final String[] code ; // コーãƒ?
069 private final String[] longLabel ; // コード名称(長)
070 private final String[] shortLabel ; // コード名称(短)
071 private final String[] codelebel ; // コードレベル ("1":option要ç´??"0":optgroup要ç´?
072 private final String[] codeGroup ; // コードグルーãƒ?(æŒ?®šã?グループキーで選別する)
073 private final String[] codeParam ; // コードパラメータ
074 private final String[] roles ; // ロール
075 private final boolean[] isUseFlag ; // 5.1.9.0 (2010/08/01) サブセãƒ?ƒˆ化するときã?有効/無効を指å®?
076 private final int size ; // コードé?目数
077 private final boolean isMultiSelect ; // マルチセレクãƒ?
078 private final boolean isUseLebel ; // 5.1.9.0 (2010/08/01) コードレベル機è?を利用するかどã�?�‹
079 private final boolean isUseParam ; // 5.1.9.0 (2010/08/01) パラメータを利用するかどã�?�‹
080 private final boolean isUseGroup ; // 5.1.9.0 (2010/08/01) コードグループを利用するかどã�?�‹
081 private final boolean isUseRoleMode ; // 5.1.9.0 (2010/08/01) ロールモードを利用するかどã�?�‹
082
083 private final RoleMode[] roleModes ; // 4.3.0.0 (2008/07/04) ロールズとモードを管ç�?�™るオブジェクãƒ?
084 private final String[] rawShortLabel; // 4.3.8.0 (2009/08/01) spanが付かなã�?��前短
085 private final String[] rawLongLabel; // 5.6.8.2 (2013/09/20) 未åŠ?·¥名前長ã�?
086
087 /**
088 * 配å?æ–?—å?のãƒ??タをå?に、CodeDataオブジェクトを構築しますã?
089 * こã?コンストラクタは、他ã?パッケージから呼び出せなã�?‚ˆã�?�«ã€?
090 * パッケージプライベã?トにしておきますã?
091 * こã?コンストラクタは、ã?スタリソースファイルを想定してã�?�¾すã?
092 *
093 * @og.rev 5.1.9.0 (2010/08/01) 新規追åŠ?
094 *
095 * @param clm カラãƒ?��
096 * @param data CLM,CODE,LNAME,SNAME,CODELVL,CODEGRP,CODE_PARAM,ROLES,SYSTEM_ID,KBSAKU,RSNAMEのé ?•ªのæ–?—å?配å?をæ?ç´?
097 * @param useFlag 使用フラグ配å?(サブセãƒ?ƒˆ化するときã?有効/無効を指å®?
098 */
099 CodeData( final String clm, final Map<String,String[]> data , final boolean[] useFlag ) {
100 this( clm,data );
101
102 if( useFlag != null && size == useFlag.length ) {
103 for( int i=0; i<size; i++ ) {
104 isUseFlag[i] = useFlag[i];
105 }
106 }
107 }
108
109 /**
110 * 配å?æ–?—å?のãƒ??タをå?に、CodeDataオブジェクトを構築しますã?
111 * こã?コンストラクタは、他ã?パッケージから呼び出せなã�?‚ˆã�?�«ã€?
112 * パッケージプライベã?トにしておきますã?
113 * こã?コンストラクタは、ã?スタリソースファイルを想定してã�?�¾すã?
114 *
115 * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
116 * @og.rev 4.3.8.0 (2009/08/01) rawShortLabel追åŠ?
117 * @og.rev 4.3.8.0 (2009/08/01) グループ機è?とパラメータの判定ã?isUseFlag フラグの追åŠ?
118 * @og.rev 5.2.2.0 (2010/11/01) "_" の取り扱ã�??変更
119 * @og.rev 5.6.8.2 (2103/09/20) rawlongLabel追åŠ?
120 *
121 * @param clm カラãƒ?��
122 * @param data CLM,CODE,LNAME,SNAME,CODELVL,CODEGRP,CODE_PARAM,ROLES,SYSTEM_ID,KBSAKU,RSNAMEのé ?•ªのæ–?—å?配å?をæ?ç´?
123 */
124 CodeData( final String clm, final Map<String,String[]> data) {
125 column = clm;
126
127 size = data.size();
128 String[] cdKeys = data.keySet().toArray( new String[size] );
129
130 code = new String[size];
131 shortLabel = new String[size];
132 longLabel = new String[size];
133 codelebel = new String[size];
134 codeGroup = new String[size];
135 codeParam = new String[size];
136 roles = new String[size];
137 roleModes = new RoleMode[size];
138 isUseFlag = new boolean[size]; // 5.1.9.0 (2010/08/01) サブセãƒ?ƒˆフラグの追åŠ?
139 rawShortLabel = new String[size];
140 rawLongLabel = new String[size]; // 5.6.8.2 (2103/09/20)
141
142 // ?‘文字目の重è¤?ˆ¤定により、ã?ルチセレクトã?可否を判断しますã?
143 HashSet<String> set = new HashSet<String>();
144 boolean isSel = USE_MULTI_KEY_SELECT; // 判定å?ç�?‚’行う。false なら判定å?ç�?‚‚行わなã�??
145
146 // 5.1.9.0 (2010/08/01) コードレベル、コードグループã?パラメータ、ロールの使用可否のフラグ
147 boolean isLbl = false;
148 boolean isPrm = false;
149 boolean isRole = false;
150 boolean isGrp = false;
151
152 for( int i=0; i<size; i++ ) {
153 String[] vals = data.get( cdKeys[i] );
154
155 code[i] = nval2( vals[CODE],SPC );
156
157 String lname = nval2( vals[LNAME],SPC ) ;
158 longLabel[i] = lname;
159
160 // null ã�?ゼロæ–?—å? : LNAME をセãƒ?ƒˆ
161 // "_" : ゼロæ–?—å?
162 // それ以å¤? : そã?まま SNAME をセãƒ?ƒˆ
163 // shortLabel[i] = nval2( vals[SNAME] ,lname );
164 shortLabel[i] = nval2( vals[SNAME] ,lname , SPC ); // 5.2.2.0 (2010/11/01)
165
166 codelebel[i] = nval2( vals[CODELVL] , SPC ) ;
167 codeGroup[i] = nval2( vals[CODEGRP] , SPC ) ;
168 codeParam[i] = nval2( vals[CODE_PARAM], SPC ) ;
169 roles[i] = nval2( vals[ROLES] , SPC ) ;
170
171 // 5.1.9.0 (2010/08/01) コードレベル機è?と、パラメータの使用判å®?
172 if( !isLbl ) { isLbl = "0".equals( codelebel[i] ); }
173 if( !isPrm ) { isPrm = ! SPC.equals( codeParam[i] ); }
174 if( !isRole ) { isRole = ! SPC.equals( roles[i] ); }
175 if( !isGrp ) { isGrp = ! SPC.equals( codeGroup[i] ); }
176
177 roleModes[i] = RoleMode.newInstance( roles[i] ); // ロールモーãƒ?
178 // rawShortLabel[i] = nval2( vals[RSNAME] , lname ); // 4.3.8.0 (2009/08/01) spanが付かなã�?��前短
179 rawShortLabel[i] = nval2( vals[RSNAME] , lname , SPC ); // 5.2.2.0 (2010/11/01)
180 rawLongLabel[i] = nval2( vals[RLNAME] , lname , SPC ); // 5.6.8.2 (2013/09/20)
181
182 if( isSel && lname.length() > 0 ) {
183 isSel = set.add( lname.substring(0,1) ); // 重è¤?™‚は false
184 }
185 }
186
187 Arrays.fill( isUseFlag,true ); // 5.1.9.0 (2010/08/01) サブセãƒ?ƒˆフラグの追åŠ?
188
189 isMultiSelect = ( USE_MULTI_KEY_SELECT && ! isSel ) ; // flag の反転に注æ„?
190 isUseLebel = isLbl; // 5.1.9.0 (2010/08/01) コードレベル機è?を利用するかどã�?�‹
191 isUseParam = isPrm; // 5.1.9.0 (2010/08/01) パラメータを利用するかどã�?�‹
192 isUseRoleMode = isRole; // 5.1.9.0 (2010/08/01) ロールモードを利用するかどã�?�‹
193 isUseGroup = isGrp; // 5.1.9.0 (2010/08/01) コードグループを利用するかどã�?�‹
194 }
195
196 /**
197 * コードデータのキーを返しますã?
198 *
199 * @return コードデータのキー
200 */
201 public String getColumn() { return column; }
202
203 /**
204 * コードデータのキーを返しますã?
205 *
206 * @param seqNo 表示é ?
207 *
208 * @return コードデータのキー
209 */
210 public String getCodeKey( final int seqNo ) { return code[seqNo] ; }
211
212 /**
213 * コードデータの表示名を返しますã?
214 *
215 * @param seqNo 表示é ?
216 *
217 * @return コードデータの表示å�?
218 */
219 public String getLongLabel( final int seqNo ) { return longLabel[seqNo]; }
220
221 /**
222 * コードデータの短縮表示名を返しますã?
223 *
224 * @param seqNo 表示é ?
225 *
226 * @return コードデータの短縮表示å�?
227 */
228 public String getShortLabel( final int seqNo ) { return shortLabel[seqNo]; }
229
230 /**
231 * コード階層を返しますã?
232 *
233 * 通常のメニューはã€?šŽ層ã�?"1" になりますã?optgroup要ç´?�¨して使用する場合ã?ã€?
234 * 階層ã‚?"0" で登録しますã?
235 *
236 * @param seqNo 表示é ?
237 *
238 * @return コード階層( "1":option要ç´??"0":optgroup要ç´?)
239 */
240 public String getCodeLebel( final int seqNo ) { return codelebel[seqNo]; }
241
242 /**
243 * コードグループにæ‰?±žしてã�?‚‹かどã�?�‹の判定を返しますã?
244 *
245 * コードグループとは、コードリソースをè¤?•°用意する代わりにグルーピング
246 * しておくことで、è¤?•°のコードリソースの代用ができる機è?ですã?
247 * 例えば、管ç�??用とä¸?ˆ¬用のコードリソースがあるå?合ã?グルーピングしておけば
248 * ä¸?�¤のコードリソースで使用できますã?
249 * なおã?引数のgroup ã‚??ãƒ??タベã?ス側の設定å?ã�?ゼロæ–?—å?の場合ã?ã€?
250 * 常に選択されますã?
251 *
252 * @og.rev 5.1.9.0 (2010/08/01) å»?¢
253 *
254 * @param seqNo 表示é ?
255 * @param group グループ文å?
256 *
257 * @return æ‰?±žしてã�?‚‹場合ã?、true
258 */
259 // public boolean getCodeGroup( final int seqNo,final String group ) {
260 // if( group == null || group.length() == 0 || SPC.equals( codeGroup[seqNo] ) ) { return true; }
261 //
262 // return ( codeGroup[seqNo].indexOf( group ) >= 0 );
263 // }
264
265 /**
266 * こã?コードが、使用できるかどã�?�‹をã?返しますã?
267 *
268 * コードグループや、コードリストなどで、サブセãƒ?ƒˆを作æ?する場合ã?
269 * プルãƒ?‚¦ンなどの選択肢は、制限しますが、レンãƒ?ƒ©ーのラベルは、制限しませんã€?
270 * これは、既存データを表示させるå¿?¦�がある為ですã?
271 * こã?フラグはã€?�¸択肢を作æ?するときに利用しますã?
272 * 標準状態で作æ?した場合ã?、すべてのé ?›®がã?true になってã�?�¾すã?
273 *
274 * @og.rev 5.1.9.0 (2010/08/01) 新規追åŠ?
275 *
276 * @param seqNo 表示é ?
277 *
278 * @return 使用可能な場合ã?、true
279 */
280 public boolean isUse( final int seqNo ) { return isUseFlag[seqNo]; }
281
282 /**
283 * コードパラメータを返しますã?
284 *
285 * コードパラメータは、メニューのå�?¦�ç´?option要ç´?に設定するタグのå†?®¹を追記しますã?
286 * ここに記述したæ–?—å?をそのまま追記しますã?
287 *
288 * @param seqNo 表示é ?
289 *
290 * @return コードパラメータ
291 */
292 public String getCodeParam( final int seqNo ) { return codeParam[seqNo]; }
293
294 /**
295 * コードロールを取得しますã?
296 *
297 * @param seqNo 表示é ?
298 *
299 * @return コードロール
300 */
301 public String getRoles( final int seqNo ) { return roles[seqNo]; }
302
303 /**
304 * カラãƒ?‚ªブジェクトã?ロールモードを返しますã?
305 *
306 * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
307 *
308 * @param seqNo 表示é ?
309 *
310 * @return カラãƒ?‚ªブジェクトã?ロールモーãƒ?
311 */
312 public RoleMode getRoleMode( final int seqNo ) { return roleModes[seqNo]; }
313
314 /**
315 * ロールモードを、使用してã�?‚‹かどã�?�‹をã?返しますã?
316 *
317 * ロールモードを使用してã�?‚‹場合ã?、ロール制御の処ç�?�Œå¿?¦�ですã?
318 * 使用してã�?‚‹/ã�?�ªã�?‚’事前に判断することで、無é§?�ª処ç�?‚’削減できますã?
319 *
320 * @og.rev 5.1.9.0 (2010/08/01) 新規追åŠ?
321 *
322 * @return ロールモードを使用してã�?‚‹場合ã?、true
323 */
324 public boolean useRoleMode() { return isUseRoleMode; }
325
326 /**
327 * マッチするコードデータのアドレスを返しますã?
328 * ä¸??するãƒ??タが存在しなã�??合ã?ã€?1 を返しますã?
329 *
330 * @param key 検索するキーæ–?—å?
331 *
332 * @return コードデータのアドレス(なければã€?1)
333 */
334 public int getAddress( final String key ) {
335 int selected = -1;
336 for( int i=0; i<size; i++ ) {
337 if( code[i].equals( key ) ) {
338 selected = i;
339 break;
340 }
341 }
342 return selected;
343 }
344
345 /**
346 * コードデータの配å?数を返しますã?
347 *
348 * @return コードデータの配å?数
349 */
350 public int getSize() { return size; }
351
352 /**
353 * マルチã?キーセレクトを使用するかどã�?�‹を返しますã?
354 * true?š使用する。false:使用しなã�?ですã?
355 * 使用するにした場合でもã?ラベルの先é?æ–?—が重è¤?�—なã�??合ã?ã€?
356 * IEの自動選択機è?によりセレクト可能なため、JavaScript は出力しませんã€?
357 *
358 * @return 選択リストで、ã?ルチã?キーセレクトを使用するかどã�?�‹(true:使用する)
359 */
360 public boolean useMultiSelect() { return isMultiSelect; }
361
362 /**
363 * コードレベル機è?を利用するかどã�?�‹を返しますã?
364 * true?š使用する。false:使用しなã�?ですã?
365 * コードレベル機è?を利用する場合ã?、optgroup タグをå?力しますã?
366 * 設定としては、レベル 0 にæŒ?®šã?カラãƒ?‚’ optgroup として出力しますã?
367 *
368 * @og.rev 5.1.9.0 (2010/08/01) 新規追åŠ?
369 *
370 * @return コードレベル機è?を利用するかどã�?�‹(初期値:false:使用しなã�?
371 */
372 public boolean useLebel() { return isUseLebel; }
373
374 /**
375 * パラメータを利用するかどã�?�‹を返しますã?
376 * true?š使用する。false:使用しなã�?ですã?
377 * こã?パラメータは、class 属æ?として設定される値ですã?
378 * これを使用して、各種レイアウトなどのæŒ?®šが可能ですã?
379 *
380 * @og.rev 5.1.9.0 (2010/08/01) 新規追åŠ?
381 *
382 * @return パラメータを利用するかどã�?�‹(初期値:false:使用しなã�?
383 */
384 public boolean useParam() { return isUseParam; }
385
386 /**
387 * コードグループを利用するかどã�?�‹を返しますã?
388 * true?š使用する。false:使用しなã�?ですã?
389 * こã?コードグループã?、リソースの引数で設定しã�?カンマ区åˆ?‚Šæ–?—å?に
390 * 対して、å?が設定されてã�?�Ÿかどã�?�‹を返しますã?
391 * これにより、不要な処ç�?‚’行うå¿?¦�がなくなりますã?
392 *
393 * @og.rev 5.1.9.0 (2010/08/01) 新規追åŠ?
394 *
395 * @return パラメータを利用するかどã�?�‹(初期値:false:使用しなã�?
396 */
397 public boolean useGroup() { return isUseGroup; }
398
399 /**
400 * オブジェクトã?識別子として?Œ詳細なコード情報を返しますã?
401 * キー?šラベルã€??・の繰り返しæ–?—å?を返しますã?
402 *
403 * @og.rev 4.1.0.0 (2008/01/18) 新規追åŠ?
404 *
405 * @return 詳細なコード情報
406 */
407 public String toCodeString() {
408 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
409 for( int i=0; i<size; i++ ) {
410 String key = code[i] + ":" ;
411 if( ! longLabel[i].startsWith( key ) ) {
412 rtn.append( key );
413 }
414 rtn.append( longLabel[i] );
415 rtn.append( " " );
416 }
417 return rtn.toString().trim();
418 }
419
420 /**
421 * コードデータの短縮表示å�?spanタグ無ã�?を返しますã?
422 *
423 * @og.rev 4.3.8.0 (2009/08/01) 新規追åŠ?
424 *
425 * @param seqNo 表示é ?
426 *
427 * @return コードデータの短縮表示å�?spanタグ無ã�?
428 */
429 public String getRawShortLabel( final int seqNo ) { return rawShortLabel[seqNo]; }
430
431 /**
432 * 未åŠ?·¥の名前長を返しますã?
433 *
434 * @og.rev 5.6.8.2 (2013/09/13) 新規追åŠ?
435 *
436 * @param seqNo 表示é ?
437 *
438 * @return コードデータの短縮表示å�?spanタグ無ã�?
439 */
440 public String getRawLongLabel( final int seqNo ) { return rawLongLabel[seqNo]; }
441
442 /**
443 * æŒ?®šã?コードに限定された CodeData を構築して返しますã?
444 * こã?サブセãƒ?ƒˆは、コードã?CSVæ–?—å?に基づã�?�¦作æ?されますã?
445 *
446 * こã? CodeData は、本当ã?サブセãƒ?ƒˆではなくã?プルãƒ?‚¦ンメニューなどの選択肢のリストを
447 * 制限しますã?これは、ä¸?¦§表示(レンãƒ?ƒ©ー)では、すべての既存ã?設定å?を表示しておく
448 * å¿?¦�があるからですã?そして、変更æ™?エãƒ?‚£ター)にã€?�¸択肢を制限しますã?
449 *
450 * 引数の codeCsv がã?null,ゼロæ–?—å?の場合ã?、è?åˆ??身を返しますã?(同ä¸?�§ã�?
451 *
452 * @og.rev 5.1.9.0 (2010/08/01) 新規追åŠ?
453 * @og.rev 5.6.8.2 (2013/09/20) rawLongLabel対å¿?
454 *
455 * @param codeCsv æŒ?®šã?コードをカンマで連結されたもã?
456 *
457 * @return æŒ?®šã?コードに限定された CodeData
458 */
459 public CodeData subsetList( final String codeCsv ) {
460 if( codeCsv == null || codeCsv.length() == 0 ) {
461 return this;
462 }
463
464 String codes = "," + codeCsv + "," ;
465
466 boolean[] useFlag = new boolean[size] ;
467
468 Map<String,String[]> data = new LinkedHashMap<String,String[]>();
469 for( int adrs=0; adrs<size; adrs++ ) {
470 String key = code[adrs] ;
471 useFlag[adrs] = ( codes.indexOf( "," + key + "," ) >= 0 ) ; // 存在する場合ã?み、true
472
473 String[] vals = new String[MAX_LENGTH];
474 vals[CLM] = column ;
475 vals[CODE] = key ;
476 vals[LNAME] = longLabel[adrs] ;
477 vals[SNAME] = shortLabel[adrs] ;
478 vals[CODELVL] = codelebel[adrs] ;
479 vals[CODEGRP] = codeGroup[adrs] ;
480 vals[CODE_PARAM]= codeParam[adrs] ;
481 vals[ROLES] = roles[adrs] ;
482 vals[SYSTEM_ID] = null ;
483 vals[KBSAKU] = null ;
484 vals[RSNAME] = rawShortLabel[adrs] ;
485 vals[RLNAME] = rawLongLabel[adrs] ; // 5.6.8.2 (2013/09/20)
486
487 data.put( key,vals );
488 }
489
490 return new CodeData( column,data,useFlag );
491 }
492
493 /**
494 * æŒ?®šã?groupにæ‰?±žする限定された CodeData を構築して返しますã?
495 * こã?サブセãƒ?ƒˆは、コードグループã?CSVæ–?—å?にæŒ?®šに基づã�?�¦作æ?されますã?
496 *
497 * こã? CodeData は、本当ã?サブセãƒ?ƒˆではなくã?プルãƒ?‚¦ンメニューなどの選択肢のリストを
498 * 制限しますã?これは、ä¸?¦§表示(レンãƒ?ƒ©ー)では、すべての既存ã?設定å?を表示しておく
499 * å¿?¦�があるからですã?そして、変更æ™?エãƒ?‚£ター)にã€?�¸択肢を制限しますã?
500 *
501 * 引数の group がã?null,ゼロæ–?—å?、またã?、å?部でグループを使用してã�?�ªã�??合ã?ã€?
502 * 自åˆ??身を返しますã?(同ä¸?�§ã�?
503 * 引数の group もã?å†?ƒ¨設定ã?グループも、カンマ区åˆ?‚ŠCSV でè¤?•°のグループをæŒ?®šできますã?
504 * こã?場合ã?、各グループã?ã�?�¡、どれかä¸?�¤でも該当すれã?、使用(true)になりますã?
505 *
506 * @og.rev 5.1.9.0 (2010/08/01) 新規追åŠ?
507 * @og.rev 5.6.8.0 (2013/09/20) rawLongLabel対å¿?
508 *
509 * @param group æŒ?®šã?コードグループã?CSVæ–?—å?
510 *
511 * @return æŒ?®šã?groupにæ‰?±žする限定された CodeData
512 */
513 public CodeData subsetGroup( final String group ) {
514 if( group == null || group.length() == 0 || !isUseGroup ) {
515 return this;
516 }
517
518 String[] keys = group.split( "," ) ;
519
520 boolean[] useFlag = new boolean[size] ;
521
522 Map<String,String[]> data = new LinkedHashMap<String,String[]>();
523 for( int adrs=0; adrs<size; adrs++ ) {
524 String cdGrp = codeGroup[adrs];
525
526 boolean flag = SPC.equals( cdGrp );
527 if( !flag ) {
528 String grpCsv = "," + cdGrp + "," ;
529 for( int i=0; i<keys.length; i++ ) {
530 flag = ( grpCsv.indexOf( keys[i] ) >= 0 );
531 if( flag ) { break; }
532 }
533 }
534
535 useFlag[adrs] = flag;
536
537 String[] vals = new String[MAX_LENGTH];
538 vals[CLM] = column ;
539 vals[CODE] = code[adrs] ;
540 vals[LNAME] = longLabel[adrs] ;
541 vals[SNAME] = shortLabel[adrs] ;
542 vals[CODELVL] = codelebel[adrs] ;
543 vals[CODEGRP] = codeGroup[adrs] ;
544 vals[CODE_PARAM]= codeParam[adrs] ;
545 vals[ROLES] = roles[adrs] ;
546 vals[SYSTEM_ID] = null ;
547 vals[KBSAKU] = null ;
548 vals[RSNAME] = rawShortLabel[adrs] ;
549 vals[RLNAME] = rawLongLabel[adrs] ; // 5.6.8.0 (2013/09/20)
550
551 data.put( code[adrs],vals );
552 }
553
554 return new CodeData( column,data,useFlag );
555 }
556
557 /**
558 * æŒ?®šã?コードに限定された CodeData を構築して返しますã?
559 * こã?サブセãƒ?ƒˆは、ロールのæŒ?®šに基づã�?�¦作æ?されますã?
560 *
561 * こã? CodeData は、本当ã?サブセãƒ?ƒˆではなくã?プルãƒ?‚¦ンメニューなどの選択肢のリストを
562 * 制限しますã?これは、ä¸?¦§表示(レンãƒ?ƒ©ー)では、すべての既存ã?設定å?を表示しておく
563 * å¿?¦�があるからですã?そして、変更æ™?エãƒ?‚£ター)にã€?�¸択肢を制限しますã?
564 *
565 * 引数の role がã?null またã?、å?部でロールを使用してã�?�ªã�??合ã?、è?åˆ??身を返しますã?(同ä¸?�§ã�?
566 *
567 * @og.rev 5.1.9.0 (2010/08/01) 新規追åŠ?
568 * @og.rev 5.6.8.2 (2013/09/13) rawLongLabel対å¿?
569 *
570 * @param userRole æŒ?®šã?ロール(ユーザーロール)
571 *
572 * @return æŒ?®šã?コードに限定された CodeData
573 */
574 public CodeData subsetRole( final RoleMode userRole ) {
575 if( userRole == null || !isUseRoleMode ) {
576 return this;
577 }
578
579 boolean[] useFlag = new boolean[size] ;
580
581 Map<String,String[]> data = new LinkedHashMap<String,String[]>();
582 for( int adrs=0; adrs<size; adrs++ ) {
583 byte rw = userRole.getAccessBitMode( roleModes[adrs] );
584
585 useFlag[adrs] = RoleMode.isWrite( rw ) ; // 書き込み可能な場合ã?み、true
586
587 String[] vals = new String[MAX_LENGTH];
588 vals[CLM] = column ;
589 vals[CODE] = code[adrs] ;
590 vals[LNAME] = longLabel[adrs] ;
591 vals[SNAME] = shortLabel[adrs] ;
592 vals[CODELVL] = codelebel[adrs] ;
593 vals[CODEGRP] = codeGroup[adrs] ;
594 vals[CODE_PARAM]= codeParam[adrs] ;
595 vals[ROLES] = roles[adrs] ;
596 vals[SYSTEM_ID] = null ;
597 vals[KBSAKU] = null ;
598 vals[RSNAME] = rawShortLabel[adrs] ;
599 vals[RLNAME] = rawLongLabel[adrs] ;
600
601 data.put( code[adrs],vals );
602 }
603
604 return new CodeData( column,data,useFlag );
605 }
606
607 /**
608 * longLabel をキーとした、コードã?マップを構築して返しますã?
609 * これは、ラベルからコードå?を見つけるのに使用しますã?
610 *
611 * ラベルからコードå?のé€?¼•きは、同ä¸?ƒ©ベルが存在する場合がありã�?‚‹ので
612 * 参è?æƒ??としてしか、利用できませんã€?
613 * またã?ラベルもã?短ラベルにたいするコードã?マップを作æ?したã�??合もありますがã€?
614 * 現時点では、対応してã�?�¾せんã€?
615 * (マップに、短ラベルæƒ??も登録すれば、対応可能ですが、ラベルが重è¤?�™る割合が増えますã?)
616 * 主な想定用途ã?、Rendere で出力したファイルを取り込ã‚?�¨きに、ラベルからコードを
617 * 探すå?合ですã?
618 *
619 * @og.rev 5.2.1.0 (2010/10/01) 新規追åŠ?
620 *
621 * @return コードã?マッãƒ?
622 */
623 public Map<String,String> makeLabelMap() {
624 Map<String,String> map = new HashMap<String,String>();
625
626 for( int adrs=0; adrs<size; adrs++ ) {
627 map.put( longLabel[adrs] , code[adrs] );
628 }
629
630 return map;
631 }
632
633 /**
634 * オブジェクトã?識別子として?Œ詳細なコード情報を返しますã?
635 *
636 * @og.rev 4.1.0.0 (2008/01/18) メソãƒ?ƒ‰修正(改行コード削除)
637 *
638 * @return 詳細なコード情報
639 */
640 @Override
641 public String toString() {
642 return "column = " + toCodeString() ;
643
644 // StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
645 // rtn.append( "column :" ).append( column ).append( HybsSystem.CR );
646 // for( int i=0; i<size; i++ ) {
647 // rtn.append( code[i] );
648 // rtn.append( " " );
649 // rtn.append( longLabel[i] );
650 // rtn.append( " " );
651 // }
652 // rtn.append( HybsSystem.CR );
653 // return rtn.toString();
654 }
655 }