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.develop;
017
018 import java.util.Locale;
019 import java.util.regex.Pattern;
020 import java.util.regex.Matcher;
021
022 import static org.opengion.fukurou.util.StringUtil.isNull;
023
024 /**
025 * GF91.GF92ãƒ??ブルã¨JSPã®å¤‰æ›ã‚ªãƒ–ジェクãƒ?
026 *
027 *
028 * @author Takeshi.Takada
029 *
030 */
031 public final class JspConvertEntity {
032 // 5.5.2.6 (2012/05/25) findbugs対�
033 // public static final String[] DBKEY = {"SYSTEM_ID","PGID","NMSYORI","SEQ","CLM","KBACCS",
034 private static final String[] DBKEY = {"SYSTEM_ID","PGID","NMSYORI","SEQ","CLM","CLM_NAME","KBACCS",
035 "MUST","DEFAULT_VAL","TABLE_NAME","ZOKUSEI","SETU",
036 "NMSYS","NMPG","HPGID","USE_ORDER","AS_CLM","JOINTYPE","AS_TABLE","CLS_NAME"};
037
038 // 5.1.1.0 (2009/12/01) ãƒ??ã‚¿ã®ã‚¢ã‚¯ã‚»ã‚¹ç”¨ã®é…å?番å·ã®ID
039 // private static final int SYSTEM_ID = 0; // 未使用
040 private static final int PGID = 1; // COMMENTã®ã¿
041 private static final int NMSYORI = 2;
042 // private static final int SEQ = 3; // 未使用
043 private static final int CLM = 4;
044 private static final int CLM_NAME = 5; // 5.6.4.4 (2013/05/31) カラ� 追�
045 // private static final int KBACCS = 6; // 未使用
046 private static final int MUST = 7;
047 private static final int DEFAULT_VAL = 8;
048 private static final int TABLE_NAME = 9;
049 private static final int ZOKUSEI = 10;
050 // private static final int SETU = 11; // 未使用
051 private static final int NMSYS = 12; // COMMENTã®ã¿
052 private static final int NMPG = 13; // COMMENTã®ã¿
053 // private static final int HPGID = 14; // 未使用
054 private static final int USE_ORDER = 15;
055 private static final int AS_CLM = 16;
056 private static final int JOINTYPE = 17;
057 private static final int AS_TABLE = 18;
058 private static final int CLS_NAME = 19;
059
060 private final String _type; // GF92.NMSYORI
061 private final String _column_name; // GF92.CLM
062 private final String _clm_name_ja; // 5.6.4.4 (2013/05/31) カラãƒ? 追åŠ?GF92ã«ã¯ãªãã?リソースã‹ã‚‰å¤‰æ›ã—ãŸåç§°)
063 private final String _table_name; // GF92.TABLE_NAME GF91.TABLE_NAME
064 private final String _as_table_name; // GF91.AS_TABLE
065 private final String _as_column_name; // GF92.AS_CLM
066 private final String _default_value; // GF92.DEFAULT_VAL
067 private final String _remarks; // GF92.ZOKUSEI
068 private final String _must; // GF92.MUST
069
070 private final String _nmsys; // GF90.NMSYS
071 private final String _pgid; // GF92.PGID
072 private final String _nmpg ; // GF90.NMPG
073
074 private final String _use_order; // GF92.USE_ORDER
075 private final boolean _is_number; //
076 private final String _join_type; // GF92.JOIN_TYPE
077
078 private final JspConvertEntity _join_column;
079
080 /**
081 * ファクトリクラス
082 * QUERYã€JOINã€CONST ã¯ã€ZOKUSEIãƒ??ã‚¿ã?å˜åœ¨ã—ãªã?¨ãã?作æ?ã—ã¾ã›ã‚“ã€?
083 * ã“ã“ã§ã¯ã€null ã‚’è¿”ã—ã¾ã™ã?
084 *
085 * @param data (GF92.NMSYORI)
086 * @param clmNo カラãƒ?•ªå·é…å?
087 *
088 * @return æ–°ã—ã作æ?ã•れã?JspConvertEntity
089 */
090 public static JspConvertEntity newInstance( final String[] data, final int[] clmNo ) {
091 String nmSyori = data[clmNo[NMSYORI]];
092 String zokusei = data[clmNo[ZOKUSEI]];
093
094 // if( zokusei == null || zokusei.trim().length() == 0 ) {
095 if( isNull( zokusei ) ) {
096 if( "QUERY".equals(nmSyori) ||
097 "JOIN".equals(nmSyori) ||
098 "CONST".equals(nmSyori) ) { return null; }
099 }
100
101 return new JspConvertEntity( data, clmNo ) ;
102 }
103
104 /**
105 * コンストラクタ
106 *
107 * @og.rev 5.6.4.4 (2013/05/31) カラ� 追�
108 *
109 * @param data ãƒ??ã‚¿é…å?
110 * @param clmNo カラãƒ??é…å?番å·
111 */
112 private JspConvertEntity( final String[] data, final int[] clmNo ) {
113 _type = data[clmNo[NMSYORI]]; // GF92.NMSYORI
114 _table_name = data[clmNo[TABLE_NAME]]; // GF92.TABLE_NAME GF91.TABLE_NAME
115 _as_table_name = data[clmNo[AS_TABLE]]; // GF91.AS_TABLE
116 _column_name = data[clmNo[CLM]]; // GF92.CLM
117 _clm_name_ja = data[clmNo[CLM_NAME]]; // 5.6.4.4 (2013/05/31) カラ�
118 _as_column_name = data[clmNo[AS_CLM]]; // GF92.AS_CLM
119 _default_value = data[clmNo[DEFAULT_VAL]]; // GF92.DEFAULT_VAL
120 _remarks = data[clmNo[ZOKUSEI]]; // GF92.ZOKUSEI
121 _must = data[clmNo[MUST]]; // GF92.MUST
122 _use_order = data[clmNo[USE_ORDER]]; // GF92.USE_ORDER
123 _is_number = "NUMBER".equals( data[clmNo[CLS_NAME]]); //
124 _join_type = data[clmNo[JOINTYPE]]; // GF92.JOIN_TYPE
125
126 _nmsys = data[clmNo[NMSYS]]; // GF90.NMSYS
127 _pgid = data[clmNo[PGID]]; // GF92.PGID
128 _nmpg = data[clmNo[NMPG]]; // GF90.NMPG
129
130 if( "JOIN".equals(_type) ) {
131 _join_column = createLeftTable( _remarks );
132 }
133 else {
134 _join_column = null;
135 }
136 }
137
138 /**
139 * コンストラクタ(通常利用ã—ã¦ã?ªã?
140 * createLeftTable( String zokusei ) ã‹ã‚‰å‘¼ã³å‡ºã™ã?å†?ƒ¨ã?‘ã§åˆ©ç”¨ã—ã¦ã?‚‹ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿
141 *
142 * @og.rev 5.6.4.4 (2013/05/31) カラ� 追�
143 *
144 * @param type 処ç?(GF92.NMSYORI)
145 * @param table_name ãƒ??ブルå?GF92.TABLE_NAME,GF91.TABLE_NAME)
146 * @param as_table_name ãƒ??ブル別å?GF91.AS_TABLE)
147 * @param column_name カラ�(GF92.CLM)
148 */
149 private JspConvertEntity( final String type, final String table_name, final String as_table_name, final String column_name ) {
150 _type = type; // GF92.NMSYORI
151 _table_name = table_name; // GF92.TABLE_NAME GF91.TABLE_NAME
152 _as_table_name = as_table_name; // GF91.AS_TABLE
153 _column_name = column_name; // GF92.CLM
154 _clm_name_ja = null; // 5.6.4.4 (2013/05/31) カラ�
155 _as_column_name = null; // GF92.AS_CLM
156 _default_value = null; // GF92.DEFAULT_VAL
157 _remarks = null; // GF92.ZOKUSEI
158 _must = null; // GF92.MUST
159 _use_order = null; // GF92.USE_ORDER
160 _is_number = false; //
161 _join_type = null; // GF92.JOIN_TYPE
162 _join_column = null;
163 _nmsys = null; // GF90.NMSYS
164 _pgid = null; // GF92.PGID
165 _nmpg = null; // GF90.NMPG
166 }
167
168 /**
169 * ãƒ??ã‚¿ã®ã‚¢ã‚¯ã‚»ã‚¹ç”¨ã®ã‚«ãƒ©ãƒ?é…å?ã‚’è¿”ã—ã¾ã™ã?
170 * ã“れを利用ã—ã¦ã€ã‚«ãƒ©ãƒ?ã®ç•ªå·ã‚’å–å¾—ã—ã€JspConvertEntity#newInstance( String[],int[] ) ã®
171 * ?’番目ã®å¼•æ•°ã«æŒ?®šã—ã¾ã™ã?
172 *
173 * @og.rev 5.5.2.6 (2012/05/25) findbugs対応ã?JspConvertEntity.DBKEY ã‚’ã?JspConvertEntity.getDBKEY() ã«å¤‰æ›´ã€?
174 *
175 * @return DBKEYé…å?ã®ã‚¯ãƒãƒ¼ãƒ³
176 */
177 public static String[] getDBKEY() {
178 return DBKEY.clone();
179 }
180
181 /**
182 * ãƒ??ã‚¿ã®ã‚¿ã‚¤ãƒ—ã‚’å–å¾—ã?(GF92.NMSYORI)
183 *
184 * @return ãƒ??ã‚¿ã®ã‚¿ã‚¤ãƒ?
185 */
186 public String getType(){
187 return _type;
188 }
189
190 /**
191 * ãƒ??ブルåã‚’å–å¾—ã?(GF92.TABLE_NAME GF91.TABLE_NAME)
192 *
193 * @return ãƒ??ブルå?
194 */
195 public String getTableName(){
196 return _table_name;
197 }
198
199 /**
200 * カラãƒ?ã‚’å–å¾—ã?(GF92.CLM)
201 *
202 * @return カラ�
203 */
204 public String getColumnName(){
205 return _column_name;
206 }
207
208 /**
209 * カラãƒ?ç§°ã‚’å–å¾—ã?
210 *
211 * カラãƒ?ç§°ã¯ã€GF92.CLM ã‚’ã‚ーã«ãƒªã‚½ãƒ¼ã‚¹ã‚’検索ã—ãŸçµæžœã®æ—¥æœ¬èªžã«ãªã‚Šã¾ã™ã?SELECTæ–??コメントã«ä½¿ã?¾ã™ã?
212 *
213 * @og.rev 5.6.4.4 (2013/05/31) カラ� 追�
214 *
215 * @return カラ�称
216 */
217 public String getColumnCommentName(){
218 return _clm_name_ja;
219 }
220
221 /**
222 * ãƒ??ブルåãŒå…ˆé?ã«ä»˜ã„ãŸã‚«ãƒ©ãƒ?ã‚’å–å¾—ã?
223 *
224 * @return カラãƒ?(ãƒ??ブルå付ã)
225 */
226 public String getFullColumnName(){
227 String preffix = "";
228
229 // if ( _as_table_name != null && _as_table_name.trim().length() > 0 ) {
230 // preffix = _as_table_name;
231 // }else{
232 // preffix = _table_name;
233 // }
234 if ( isNull( _as_table_name ) ) {
235 preffix = _table_name;
236 }
237 else {
238 preffix = _as_table_name;
239 }
240 //é›?¨ˆé–¢æ•°ãŒåˆ©ç”¨ã•れã¦ã?‚‹å ´åˆã?ã€?–¢æ•°åˆ¥ã«ç‰¹åˆ¥ãªå‡¦ç?‚’実è£?™ã‚‹å¿?¦ãŒã‚ã‚‹ã€?
241 //ç¾åœ¨ã¯ã€ãƒ†ãƒ¼ãƒ–ルåã‚„ãƒ??ブル別åã‚’ä»˜åŠ ã›ãšã«ã‚¹ãƒ«ãƒ¼ã™ã‚‹æ§˜ã«å®Ÿè£?—ã¦ã‚りã¾ã™ã?
242 Matcher matcher = null;
243 for (JspEnumeration.TREATS_STRING_FUNCTIONS func : JspEnumeration.TREATS_STRING_FUNCTIONS.values()){
244 String k = func.toString();
245 matcher = Pattern.compile("(((\\s*?)|\\()" + k + "(\\s+?))|(((\\s*?)|\\()" + k.toLowerCase( Locale.JAPAN ) + "(\\s+?))").matcher( _column_name );
246 if (matcher.find()){
247 return func.update( _column_name , new String[]{ } );
248 }
249 }
250 return preffix + "." + _column_name;
251 }
252
253 /**
254 * çµåˆå…ˆã?カラãƒ?ƒ…å ±ã‚’å–å¾—ã?
255 *
256 * @return çµåˆå…ˆã?カラãƒ?
257 */
258 public JspConvertEntity getJoinColumn(){
259 return _join_column;
260 }
261
262 /**
263 * ãƒ??ブルã«ä»˜ã‘る別åã‚’å–å¾?GF91.AS_TABLE)
264 *
265 * @return ãƒ??ブルã«ä»˜ã‘る別å?
266 */
267 public String getAsTableName(){
268 return _as_table_name;
269 }
270
271 /**
272 * カラãƒ?«ä»˜ã‘る別åã‚’å–å¾?GF92.AS_CLM)
273 *
274 * @return カラãƒ?«ä»˜ã‘る別å?
275 */
276 public String getAsColumnName(){
277 return _as_column_name;
278 }
279
280 /**
281 * Selectå¥ã§ã™ãã«åˆ©ç”¨å¯èƒ½ãªã‚«ãƒ©ãƒ?ã‚’å–å¾—ã?
282 *
283 * @return カラ�
284 */
285 public String getSelectPartColumnName(){
286 if( isNull( _remarks ) || "DISP".equalsIgnoreCase( _remarks ) ) {
287 if( isNull( _as_column_name ) ) {
288 return getFullColumnName();
289 }
290 else {
291 return getFullColumnName() + " as " + _as_column_name;
292 }
293 }
294 else {
295 if( isNull( _as_column_name ) ) {
296 return _remarks + "(" + getFullColumnName() + ")";
297 }
298 else {
299 return _remarks + "(" + getFullColumnName() + ") as " + _as_column_name;
300 }
301 }
302
303 // if (_remarks !=null && _remarks.trim().length() > 0 && "DISP".equalsIgnoreCase( _remarks ) == false ){
304 // if (_as_column_name != null && _as_column_name.trim().length() > 0 ) {
305 // return _remarks + "(" + getFullColumnName() + ") as " + _as_column_name;
306 // }else{
307 // return _remarks + "(" + getFullColumnName() + ")";
308 // }
309 // }else if (_as_column_name != null && _as_column_name.trim().length() > 0 ) {
310 // return getFullColumnName() + " as " + _as_column_name;
311 // }else{
312 // return getFullColumnName();
313 // }
314 }
315
316 /**
317 * Fromå¥ã§ã™ãã«åˆ©ç”¨å¯èƒ½ãªã‚«ãƒ©ãƒ?ã‚’å–å¾—ã?
318 *
319 * @return 別åã?ã¤ã?Ÿãƒ??ブルå?
320 */
321 public String getFromPartTableName(){
322 if( isNull( _as_table_name ) ) {
323 return _table_name;
324 }else{
325 return _table_name + " " + _as_table_name;
326 }
327
328 // if (_as_table_name != null && _as_table_name.trim().length() > 0) {
329 // return _table_name + " " + _as_table_name;
330 // }else{
331 // return _table_name;
332 // }
333 }
334
335 /**
336 * åˆæœŸå€¤ã‚’å–å¾—ã?(GF92.DEFAULT_VAL)
337 *
338 * @return åˆæœŸå€¤
339 */
340 public String getDefaultValue(){
341 return _default_value;
342 }
343
344 /**
345 * 属æ?å†?®¹ã‚’å–å¾—ã?(GF92.ZOKUSEI)
346 *
347 * @return 属æ?å†?®¹
348 */
349 public String getRemarks(){
350 return _remarks;
351 }
352
353 /**
354 * å¿??ã‚’å–å¾—ã?(GF92.MUST)
355 *
356 * @return å¿??
357 */
358 public String getMust(){
359 return _must;
360 }
361
362 /**
363 * ä¸¦ã³æ›¿ãˆè¨å®šã‹å¦ã‹ã‚’判å®?GF92.USE_ORDER)
364 *
365 * @return åˆ¤å®šçµæžœ
366 */
367 public String getUseOrder(){
368 return _use_order;
369 }
370
371 /**
372 * 数値é ?›®ã‹å¦ã‹ã‚’判å®?
373 *
374 * @return åˆ¤å®šçµæžœ
375 */
376 public boolean isNumber(){
377 return _is_number;
378 }
379
380 /**
381 * シスãƒ?ƒ ã®åç§°ã‚’å–å¾—ã—ã¾ã™ã?(GF90.NMSYS)
382 *
383 * @return åç§°
384 */
385 public String getNmSys(){
386 return _nmsys;
387 }
388
389 /**
390 * プãƒã‚°ãƒ©ãƒ?Dã‚’å–å¾—ã—ã¾ã™ã?(GF92.PGID)
391 *
392 * @return プãƒã‚°ãƒ©ãƒ?D
393 */
394 public String getPgid(){
395 return _pgid;
396 }
397
398 /**
399 * プãƒã‚°ãƒ©ãƒ??åç§°ã‚’å–å¾—ã—ã¾ã™ã?(GF90.NMPG)
400 *
401 * @return åç§°
402 */
403 public String getNmpg(){
404 return _nmpg;
405 }
406
407 /**
408 * 外部çµåˆã‹ã‚’判å®?GF92.JOIN_TYPE)
409 *
410 * @return åˆ¤å®šçµæžœ
411 */
412 public String getJoinType(){
413 return _join_type;
414 }
415
416 /**
417 * 外部çµåˆã‹ã‚’判å®?GF92.JOIN_TYPE)
418 *
419 * @param zokusei 属æ?æƒ??
420 *
421 * @return 外部çµåˆã®JspConvertEntityオブジェクãƒ?
422 */
423 private JspConvertEntity createLeftTable( final String zokusei ){
424 JspConvertEntity rgt = null;
425
426 String[] rgt_data = zokusei.split( "__" );
427 if( rgt_data.length == 3 ){
428 String rgt_tbl = rgt_data[1];
429 String rgt_as_tbl = rgt_data[2].substring( 0 , rgt_data[2].indexOf('.') );
430 String rgt_clm = rgt_data[2].substring( rgt_data[2].indexOf('.') + 1 );
431
432 rgt = new JspConvertEntity( "JOIN",rgt_tbl,rgt_as_tbl,rgt_clm );
433 }
434
435 return rgt;
436 }
437
438 /**
439 * æƒ??ã‚’æ–‡å—å?åŒ?
440 * 引数ã®indexã¯ã‚¤ãƒ³ãƒ?ƒ³ãƒˆã?æ•°ã‚’æ„味ã—ã¾ã™ã?
441 * 通常ã¯0ã‚’ã‚»ãƒ?ƒˆã—ã¦ãŠãã¾ã™ã?
442 *
443 * @param index int
444 *
445 * @return å†?®¹ã®æ–?—å?
446 */
447 // public String toString( final int index ){
448 // String indent = "";
449 // for(int i = 0 ; i < index ; i++){
450 // indent = indent + "\t";
451 // }
452 // StringBuilder sb = new StringBuilder();
453 // if ( index == 0 ){
454 // sb.append( indent + "##### JspConvertEntity ############################################\r\n" );
455 // }
456 // sb.append( indent + "\ttype= " + _type + "\r\n" );
457 // sb.append( indent + "\ttable_name = " + _table_name + "\r\n" );
458 // sb.append( indent + "\tas_table_name = " + _as_table_name + "\r\n" );
459 // sb.append( indent + "\tcolumn_name = " + _column_name + "\r\n" );
460 // sb.append( indent + "\tas_column_name = " + _as_column_name + "\r\n" );
461 // sb.append( indent + "\tdefault_value = " + _default_value + "\r\n" );
462 // sb.append( indent + "\tremarks = " + _remarks + "\r\n" );
463 // sb.append( indent + "\tmust = " + _must + "\r\n" );
464 // sb.append( indent + "\tuse_order = " + _use_order + "\r\n" );
465 // sb.append( indent + "\tno_display = " + _is_number + "\r\n" );
466 // sb.append( indent + "\tjoin_type = " + _join_type + "\r\n" );
467 // if (_join_column != null ) {
468 // sb.append( indent + "\tjoin_column = {\r\n" + _join_column.toString(1) + "\r\n"+indent + "\t}" );
469 // }
470 // return sb.toString();
471 // }
472 }