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 }