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    }