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