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 static org.opengion.fukurou.util.StringUtil.nval2;
019    
020    /**
021     * systemId に対応したカラãƒ?ƒ‡ータを作æ?しますã?
022     *
023     * カラãƒ?ƒ‡ータはã€??目(CLM)に対して、各種カラãƒ?ƒ…報を持ってã�?�¾すã?
024     * エンジンå†?ƒ¨で使用してã�?‚‹ DBColumn オブジェクトã?、RENDERER ã‚?EDITOR など
025     * 実際にはオブジェクトで管ç�?�—てã�?�¾すが、この ColumnData では、それらのキーとなã‚?
026     * æ–?­—å?を持ってã�?�¾すã?実際に DBColumn オブジェクトã?構築時に、各属æ?オブジェクトを
027     * 生æ?(またã?、キャãƒ?‚·ュから取り出ã�?ますã?
028     *
029     * カラãƒ?ƒ‡ータを作æ?する場合ã?、同ä¸?‚«ラãƒ?�§、作æ?区åˆ?KBSAKU)違いの場合ã?ã€?
030     * æœ?‚‚大きな作æ?区åˆ?‚’持つコードを使用しますã?
031     * 作æ?区åˆ?KBSAKU)はã€?:シスãƒ?ƒ 予ç´??1:アプリ設定ã?2:ユーザー設å®?とã�?�†具合に
032     * カスタマイズの度合いに応じて大きな数字を割り当てることで、キーæƒ??を上書き修正
033     * することが可能になりますã?(削除することは出来ませんã€?
034     *
035     * @og.rev 4.0.0.0 (2004/12/31) 新規作æ?
036     * @og.group リソース管ç�?
037     *
038     * @version  4.0
039     * @author   Kazuhiko Hasegawa
040     * @since    JDK5.0,
041     */
042    public final class ColumnData {
043    
044            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
045            public static final int CLM                             = 0 ;
046            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
047            public static final int CLS_NAME                = 1 ;
048            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
049            public static final int USE_LENGTH              = 2 ;
050            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
051            public static final int VIEW_LENGTH             = 3 ;
052            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
053            public static final int RENDERER                = 4 ;
054            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
055            public static final int EDITOR                  = 5 ;
056            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
057            public static final int DBTYPE                  = 6 ;
058            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
059            public static final int DATA_DEFAULT    = 7 ;
060            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
061            public static final int LABEL_CLM               = 8 ;
062            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
063            public static final int CODE_CLM                = 9 ;
064            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
065            public static final int CLM_PARAM               = 10 ;
066            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
067            public static final int RENDERER_PARAM  = 11 ;
068            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
069            public static final int EDITOR_PARAM    = 12 ;
070            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
071            public static final int TYPE_PARAM              = 13 ;
072            /** å†?ƒ¨ãƒ??タのカラãƒ?•ª号 {@value}        */
073            public static final int ROLES                   = 14 ;
074            /** å†?ƒ¨ãƒ??タのカラãƒ?•° {@value}  */
075            public static final int DATA_SIZE               = 15 ;
076            /** リソース読み込みのためにä¸?™‚利用 4.3.5.7 (2009/03/22) */
077            public static final int FG_LOAD                 = 15 ;
078    
079            private final String    name                    ;               // カラãƒ?��
080            private final String    className               ;               // ãƒ??タの属æ?
081            private final String    maxlength               ;               // 使用桁数
082            private final String    viewLength              ;               // 表示桁数
083            private final String    renderer                ;               // 表示種別
084            private final String    editor                  ;               // 編é›?¨®別
085            private final String    dbType                  ;               // æ–?­—種別
086            private final String    dataDef                 ;               // ãƒ??タのãƒ?ƒ•ォルトå?
087            private final String    labelClm                ;               // ラベルカラãƒ?
088            private final String    codeClm                 ;               // コードカラãƒ?
089            private final String    columnPrm               ;               // カラãƒ?ƒ‘ラメータ
090            private final String    rendererPrm             ;               // 表示パラメータ
091            private final String    editorPrm               ;               // 編é›?ƒ‘ラメータ
092            private final String    dbTypePrm               ;               // æ–?­—パラメータ
093            private final String    roles                   ;               // カラãƒ?ƒ­ール
094            private final RoleMode  roleMode                ;               // 4.3.0.0 (2008/07/04) ロールズとモードを管ç�?�™るオブジェクãƒ?
095    
096            private final int               totalSize               ;               // 総桁数(小数点も含ã‚?
097            private final int               sizeX                   ;               // カラãƒ??æ–?­—桁数(整数部)
098            private final int               sizeY                   ;               // カラãƒ??æ–?­—桁数(少数部)
099            private final boolean   official                ;               // リソース?¤?¢から作æ?されたかどã�?�‹
100    
101            /**
102             * 配å?æ–?­—å?のãƒ??タをå?に、ColumnDataオブジェクトを構築しますã?
103             * こã?コンストラクタは、他ã?パッケージから呼び出せなã�?‚ˆã�?�«ã€?
104             * パッケージプライベã?トにしておきますã?
105             * こã?コンストラクタはã€?¼¤?¢リソースファイルを想定してã�?�¾すã?
106             *
107             * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
108             * @og.rev 5.1.6.0 (2010/05/01) DBTypeの初期値ã‚?"XK" としますã?
109             * @og.rev 5.2.2.0 (2010/11/01) パラメーターもVer3互換のためNVAL2で処ç�?�—ますã?
110             * @og.rev 5.5.8.5 (2012/11/27) 編é›?ƒ‘ラメータでã€?=" と記述されてã�?‚‹場合ã?、表示パラメータを利用するã€?
111             *
112             * @param       data    CLM,CLS_NAME,USE_LENGTH,VIEW_LENGTH,
113             *                      RENDERER,EDITOR,DBTYPE,DATA_DEFAULT,LABEL_CLM,CODE_CLM,
114             *                      CLM_PARAM,RENDERER_PARAM,EDITOR_PARAM,TYPE_PARAM,ROLES
115             *
116             */
117            public ColumnData( final String[] data ) {
118                    name            = data[CLM].intern() ;                                  // カラãƒ?��
119                    className       = data[CLS_NAME].intern() ;                             // ãƒ??タの属æ?
120    //              maxlength       = StringUtil.toNumber( data[USE_LENGTH] ).intern() ;    // 使用桁数
121                    maxlength       = data[USE_LENGTH].replace( '.',',' ).intern();                 // 使用桁数
122                    viewLength      = nval2( data[VIEW_LENGTH], null ) ;    // 表示桁数
123                    renderer        = nval2( data[RENDERER], null ) ;               // 表示種別
124                    editor          = nval2( data[EDITOR], null ) ;                 // 編é›?¨®別
125    //              dbType          = nval2( data[DBTYPE], null ) ;                 // æ–?­—種別
126                    dbType          = nval2( data[DBTYPE], "XK" ) ;                 // æ–?­—種別  5.1.6.0 (2010/05/01)
127                    dataDef         = nval2( data[DATA_DEFAULT] , ""   ) ;  // ãƒ??タのãƒ?ƒ•ォルトå?
128                    labelClm        = nval2( data[LABEL_CLM]    , name ) ;  // ラベルカラãƒ?
129                    codeClm         = nval2( data[CODE_CLM]     , name ) ;  // コードカラãƒ?
130    //              columnPrm       = data[CLM_PARAM] ;                                             // カラãƒ?ƒ‘ラメータ
131    //              rendererPrm     = data[RENDERER_PARAM] ;                                // 表示パラメータ
132    //              editorPrm       = data[EDITOR_PARAM] ;                                  // 編é›?ƒ‘ラメータ
133    //              dbTypePrm       = data[TYPE_PARAM] ;                                    // æ–?­—パラメータ
134                    columnPrm       = nval2( data[CLM_PARAM], null );               // カラãƒ?ƒ‘ラメータ
135                    rendererPrm     = nval2( data[RENDERER_PARAM], null ) ; // 表示パラメータ
136    //              editorPrm       = nval2( data[EDITOR_PARAM], null ) ;   // 編é›?ƒ‘ラメータ                        5.5.8.5 (2012/11/27)
137                    dbTypePrm       = nval2( data[TYPE_PARAM], null ) ;             // æ–?­—パラメータ
138                    roles           = nval2( data[ROLES] , null ) ;                 // カラãƒ?ƒ­ール
139                    official        = true;                                                                 // リソース?¤?¢から作æ?されたかどã�?�‹
140    
141                    // 5.5.8.5 (2012/11/27) 編é›?ƒ‘ラメータでã€?=" と記述されてã�?‚‹場合ã?、表示パラメータを利用するã€?
142                    String tempEditPrm = nval2( data[EDITOR_PARAM], null ) ;
143                    if( "=".equals( tempEditPrm ) ) {
144                            editorPrm = rendererPrm ;
145                    }
146                    else {
147                            editorPrm = tempEditPrm ;
148                    }
149    
150                    roleMode        = RoleMode.newInstance( roles );        // ロールモーãƒ?
151    
152                    // x,y 形式ã?場合ã?x + 2 桁で表されますã?(マイナス記号と小数点記号)
153                    // 7,3 はã€?xxxx,yyy のフォーマットで、データ長はã€? になりますã?
154                    int ch = maxlength.indexOf( ',' ) ;
155                    if( ch > 0 ) {
156                            sizeY = Integer.parseInt( maxlength.substring( ch+1 ) );
157                            sizeX = Integer.parseInt( maxlength.substring( 0,ch ) ) - sizeY;
158                            totalSize = sizeX + sizeY+ 2;
159                    }
160                    else {
161                            sizeY = 0;
162                            sizeX = Integer.parseInt( maxlength );
163                            if( "S9".equals( dbType ) ) {
164                                    totalSize = sizeX + 1;  // 数字型の場合ã?、ã?イナス記号åˆ?‚’åŠ?�ˆるã?
165                            }
166                            else {
167                                    totalSize = sizeX ;
168                            }
169                    }
170            }
171    
172            /**
173             * カラãƒ?��を返しますã?
174             *
175             * @return  カラãƒ?��
176             */
177            public String getName() { return name; }
178    
179            /**
180             * カラãƒ??ãƒ??タの属æ?を返しますã?
181             *
182             * @return  カラãƒ??ãƒ??タの属æ?
183             */
184            public String getClassName() { return className; }
185    
186            /**
187             * フィールドã?使用桁数を返しますã?
188             * 少数æŒ?®šã?場合ã?ã€?7,3" のようなカンマで整数部、小数部を区åˆ?�£た書式になりますã?
189             * 7,3 はã€?xxxx,yyy のフォーマットで、整数部?”桁ã?小数部?“桁を意味しますã?
190             *
191             * @return  使用桁数
192             */
193            public String getMaxlength() { return maxlength; }
194    
195            /**
196             * フィールドã?ãƒ??タ長を返しますã?
197             * 通常は、整数型ã?æ–?­—å?とãƒ??タ長は同じですが,小数点を表すデータ長は
198             * x.y 形式ã?場合ã?x + 1 桁で表されますã?
199             * 6.2 はã€?xxxx.yy のフォーマットですã?
200             *
201             * @return  ãƒ??タ長定義æ–?­—å?
202             */
203            public int getTotalSize() { return totalSize; }
204    
205            /**
206             * フィールドã?整数部のãƒ??タ長を返しますã?
207             *
208             * @return  ãƒ??タ長定義æ–?­—å?
209             */
210            public int getSizeX() { return sizeX ; }
211    
212            /**
213             * フィールドã?小数部のãƒ??タ長を返しますã?
214             *
215             * @return  ãƒ??タ長定義æ–?­—å?
216             */
217            public int getSizeY() { return sizeY ; }
218    
219            /**
220             * フィールドã?表示桁数を返しますã?
221             *
222             * @return  表示桁数
223             */
224            public String getViewLength() { return viewLength; }
225    
226            /**
227             * 表示種別を返しますã?
228             *
229             * @return  表示種別のæ–?­—å?
230             */
231            public String getRenderer() { return renderer; }
232    
233            /**
234             * 編é›?¨®別を返しますã?
235             *
236             * @return  編é›?¨®別
237             */
238            public String getEditor() { return editor; }
239    
240            /**
241             * æ–?­—種別を返しますã?
242             *
243             * @return  æ–?­—種別
244             */
245            public String getDbType() { return dbType; }
246    
247            /**
248             * ラベルカラãƒ?‚’返しますã?
249             *
250             * @return  ラベルカラãƒ?
251             */
252            public String getLabelColumn() { return labelClm; }
253    
254            /**
255             * コードカラãƒ?‚’返しますã?
256             *
257             * @return  コードカラãƒ?
258             */
259            public String getCodeColumn() { return codeClm; }
260    
261            /**
262             * ãƒ??タのãƒ?ƒ•ォルトå?を返しますã?
263             *
264             * @return  ãƒ??タのãƒ?ƒ•ォルトå?
265             */
266            public String getDefault() { return dataDef; }
267    
268            /**
269             * カラãƒ??パラメータを取得しますã?
270             *
271             * @return      カラãƒ?ƒ‘ラメータ
272             */
273            public String getColumnParam() { return columnPrm; }
274    
275            /**
276             * 表示用レンãƒ?ƒ©ーのパラメータを取得しますã?
277             *
278             * @return      表示パラメータ
279             */
280            public String getRendererParam() { return rendererPrm; }
281    
282            /**
283             * 編é›?”¨エãƒ?‚£ターのパラメータを取得しますã?
284             *
285             * @return      編é›?ƒ‘ラメータ
286             */
287            public String getEditorParam() { return editorPrm; }
288    
289            /**
290             * ãƒ??タタイプã?パラメータを取得しますã?
291             *
292             * @return      ãƒ??タタイプã?パラメータ
293             */
294            public String getDbTypeParam() { return dbTypePrm; }
295    
296            /**
297             * カラãƒ?ƒ­ールを取得しますã?
298             *
299             * @return      カラãƒ?ƒ­ール
300             */
301            public String getRoles() { return roles; }
302    
303            /**
304             * カラãƒ?‚ªブジェクトã?ロールモードを返しますã?
305             *
306             * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
307             *
308             * @return カラãƒ?‚ªブジェクトã?ロールモーãƒ?
309             */
310            public RoleMode getRoleMode() { return roleMode; }
311    
312            /**
313             * リソース?¤?¢から作æ?されたかどã�?�‹を返しますã?
314             * 正式な場合ã?、true / リソースになくã?独自に作æ?されたå?合ã?、false になりますã?
315             *
316             * @return      リソース?¤?¢から作æ?されたかどã�?�‹
317             *
318             */
319            public boolean isOfficial() { return official; }
320    
321            /**
322             * å†?ƒ¨ãƒ??タのæ–?­—å?配å?を返しますã?
323             *
324             * @return      å†?ƒ¨ãƒ??タのæ–?­—å?配å?
325             */
326            public String[] getColumnData() {
327                    String[] data = new String[DATA_SIZE];
328    
329                    data[CLM                        ] = name                ;
330                    data[CLS_NAME           ] = className   ;
331                    data[USE_LENGTH         ] = maxlength   ;
332                    data[VIEW_LENGTH        ] = viewLength  ;
333                    data[RENDERER           ] = renderer    ;
334                    data[EDITOR             ] = editor              ;
335                    data[DBTYPE             ] = dbType              ;
336                    data[DATA_DEFAULT       ] = dataDef             ;
337                    data[LABEL_CLM          ] = labelClm    ;
338                    data[CODE_CLM           ] = codeClm             ;
339                    data[CLM_PARAM          ] = columnPrm   ;
340                    data[RENDERER_PARAM     ] = rendererPrm ;
341                    data[EDITOR_PARAM       ] = editorPrm   ;
342                    data[TYPE_PARAM         ] = dbTypePrm   ;
343                    data[ROLES                      ] = roles               ;
344    
345                    return data ;
346            }
347    }