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 }