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.plugin.table;
017    
018    import org.opengion.hayabusa.db.AbstractTableFilter;
019    import org.opengion.hayabusa.db.DBTableModel;
020    
021    import org.opengion.fukurou.util.ErrorMessage;
022    import org.opengion.fukurou.util.StringUtil;
023    
024    import java.util.Map;
025    
026    /**
027     * TableFilter_KBCLM は、TableFilter インターフェースを継承した、DBTableModel 処ç�?”¨の
028     * 実è£?‚¯ラスですã?
029     *
030     * ここでは、キーは、GF80(DB定義書マスタ)のカラãƒ?‚’å…?�«ã€?½¶?—ム区åˆ?KBCLM)を設定しますã?
031     * SELECTするãƒ??ブルもカラãƒ?‚‚固定ですã?設定するカラãƒ??、KBCLM 固定ですã?
032     * æœ?½Ž限å¿?¦�なのは、CLM,UK,LUK,IXA,IXB,IXC,IXD,IXE,IXF,IXG,IXH,IXI,IXJ,IXK,NOT_NULL と KBCLM ですã?
033     * 唯ä¸??引数は、å?通カラãƒ?�¨してæŒ?®šするCSV形式ã?カラãƒ?��ですã?keys="COM_CLMS" に、設定しますã?
034     *
035     * 具体的には、KBCLM に設定するå?は、下記ã?とおりですã?
036     *
037     * KBCLM
038     * 0:初期(未)  区åˆ?œª設定ã?初期状態でã�?
039     * 1:UK  (â—?  物ç�?ƒ¦ニã?クカラãƒ?�§ã�?
040     * 2:LUK (ã€?  論理ユニã?クカラãƒ?�§ã�?
041     * 3:IDX (+)   インãƒ?ƒƒクスカラãƒ?�§ã�?
042     * 4:NN  (*)   Not Nullカラãƒ?�§ã�?
043     * 5:ä¸?ˆ¬(_)   ?¤?¢関連図では省略可能でã�?
044     * 6:除å¤?-)   リソース反映除外カラãƒ?�§ã�?
045     * 7:共é€?C)   全ãƒ??ブル共通属æ?でã�?
046     * 8:有閑(Y)   存在しますが未使用カラãƒ?�§ã�?
047     * 9:削除(X)   実æ?は削除済みでã�?
048     * 
049     * 設定するå?の優先é?位ã?ã€?:共é€?1:UK,2:LUK,3:IDX,4:NN になりますã?
050     *
051     * パラメータは、tableFilterタグの keys, vals にそれぞれ記述するかã?BODY 部にCSS形式で記述しますã?
052     * 【パラメータã€?
053     *  {
054     *       COM_CLMS   : {@COM_CLMS}  ; 共通カラãƒ?�¨してæŒ?®šするCSV形式ã?カラãƒ?��
055     *  }
056     *
057     * @og.formSample
058     * ●形式ï¼?
059     *      â‘?<og:tableFilter classId="KBCLM" keys="COM_CLMS" vals="{@COM_CLMS}" />
060     *
061     *      ② <og:tableFilter classId="KBCLM" >
062     *               {
063     *                   COM_CLMS   : {@COM_CLMS}   ;
064     *               }
065     *         </og:tableFilter>
066     *
067     * @og.rev 5.7.6.2 (2014/05/16) 新規追åŠ?
068     *
069     * @version  6.0  2014/05/02
070     * @author   Kazuhiko Hasegawa
071     * @since    JDK1.7,
072     */
073    public class TableFilter_KBCLM extends AbstractTableFilter {
074            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
075            private static final String VERSION = "5.7.6.2 (2014/05/16)" ;
076    
077            /**
078             * keys の整合æ?チェãƒ?‚¯を行うための初期設定を行いますã?
079             *
080             * @param       keysMap keys の整合æ?チェãƒ?‚¯を行うための Map
081             */
082            @Override
083            protected void init( final Map<String,String> keysMap ) {
084                    keysMap.put( "COM_CLMS"         , "共通カラãƒ?�¨してæŒ?®šするCSV形式ã?カラãƒ?��"                                          );
085            }
086    
087            /**
088             * DBTableModel処ç�?‚’実行しますã?
089             *
090             * @return 処ç�?µ�果のDBTableModel
091             */
092            public DBTableModel execute() {
093                    DBTableModel table = getDBTableModel();         // 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
094    
095                    String comClms = StringUtil.nval( getValue( "COM_CLMS" ) ,null );
096    
097                    int clmNo  = table.getColumnNo( "CLM",false );          // 存在しなã�??合ã?ã€?1 を返すã€?
098                    int ukNo   = table.getColumnNo( "UK" ,false );
099                    int lukNo  = table.getColumnNo( "LUK",false );
100                    int ixaNo  = table.getColumnNo( "IXA",false );
101                    int ixbNo  = table.getColumnNo( "IXB",false );
102                    int ixcNo  = table.getColumnNo( "IXC",false );
103                    int ixdNo  = table.getColumnNo( "IXD",false );
104                    int ixeNo  = table.getColumnNo( "IXE",false );
105                    int ixfNo  = table.getColumnNo( "IXF",false );
106                    int ixgNo  = table.getColumnNo( "IXG",false );
107                    int ixhNo  = table.getColumnNo( "IXH",false );
108                    int ixiNo  = table.getColumnNo( "IXI",false );
109                    int ixjNo  = table.getColumnNo( "IXJ",false );
110                    int ixkNo  = table.getColumnNo( "IXK",false );
111                    int nnNo   = table.getColumnNo( "NOT_NULL",false );
112    
113                    int kbclmNo = table.getColumnNo( "KBCLM",false );       // 計算結果の値を書きå?すカラãƒ?
114    
115                    if( kbclmNo >= 0 ) {
116                            String[] data  = null;
117                            int rowCnt = table.getRowCount();
118                            boolean isUK  = false;
119                            boolean isLUK = false;
120                            boolean isIDX = false;
121                            boolean isNN  = false;
122                            boolean isCOM = false;
123    
124                            // KBCLMに変更がなければ、レコードを削除しますã?よってã€??é ?�«チェãƒ?‚¯しますã?
125                            for( int row=rowCnt-1; row>=0; row-- ) {
126                                    try {
127                                            data   = table.getValues( row );
128                                            isUK   = ukNo  >= 0 && data[ukNo]  != null && data[ukNo].trim().length() > 0 ;
129                                            isLUK  = lukNo >= 0 && data[lukNo] != null && data[lukNo].trim().length() > 0 ;
130                                            isNN   = nnNo  >= 0 && data[nnNo]  != null && data[nnNo].trim().length() > 0 ;
131                                            isCOM  = clmNo >= 0 && data[clmNo] != null && comClms != null
132                                                                    && comClms.indexOf( "'" + data[clmNo].trim() + "'" ) >= 0 ;
133                                            isIDX  = ixaNo >= 0 && data[ixaNo] != null && data[ixaNo].trim().length() > 0
134                                                      || ixbNo >= 0 && data[ixbNo] != null && data[ixbNo].trim().length() > 0
135                                                      || ixcNo >= 0 && data[ixcNo] != null && data[ixcNo].trim().length() > 0
136                                                      || ixdNo >= 0 && data[ixdNo] != null && data[ixdNo].trim().length() > 0
137                                                      || ixeNo >= 0 && data[ixeNo] != null && data[ixeNo].trim().length() > 0
138                                                      || ixfNo >= 0 && data[ixfNo] != null && data[ixfNo].trim().length() > 0
139                                                      || ixgNo >= 0 && data[ixgNo] != null && data[ixgNo].trim().length() > 0
140                                                      || ixhNo >= 0 && data[ixhNo] != null && data[ixhNo].trim().length() > 0
141                                                      || ixiNo >= 0 && data[ixiNo] != null && data[ixiNo].trim().length() > 0
142                                                      || ixjNo >= 0 && data[ixjNo] != null && data[ixjNo].trim().length() > 0
143                                                      || ixkNo >= 0 && data[ixkNo] != null && data[ixkNo].trim().length() > 0 ;
144    
145                                            // KBCLM の値をチェãƒ?‚¯しますã?
146                                            String kbclm =makeKBCLM( isUK , isLUK , isIDX , isNN , isCOM , data[kbclmNo] ) ;
147                                            if( kbclm != null ) {
148                                                    data[kbclmNo] = kbclm ;                 // 値の書き戻ã�?
149                                            }
150                                            else {
151                                                    table.removeValue( row );               // kbclm に変更がなければ、null なので、レコード削除
152                                            }
153                                    }
154                                    catch( RuntimeException ex ) {
155                                            ErrorMessage errMessage = makeErrorMessage( "TableFilter_KBCLM Error",ErrorMessage.NG );
156                                            errMessage.addMessage( row+1,ErrorMessage.NG,ex.getMessage() );
157                                            errMessage.addMessage( row+1,ErrorMessage.NG,StringUtil.array2csv( data ) );
158                                    }
159                            }
160                    }
161                    return table;
162            }
163    
164            /**
165             * UK,LUK,?²?�ï¾?¾žッ?¸?½,NotNull,共通カラãƒ?からã€?½¶?—ム区åˆ?KBCLM) を作æ?しますã?
166             * KBCLM に変更がなければ、null を返しますã?
167             *
168             * 0:初期(未)  区åˆ?œª設定ã?初期状態でã�?              (ここでは設定されませんã€?
169             * 1:UK  (â—?  物ç�?ƒ¦ニã?クカラãƒ?�§ã�?               isUK=true の場合ã?第2優å…?
170             * 2:LUK (ã€?  論理ユニã?クカラãƒ?�§ã�?               isLUK=true の場合ã?第3優å…?
171             * 3:IDX (+)   インãƒ?ƒƒクスカラãƒ?�§ã�?             isIDX=true の場合ã?第4優å…?
172             * 4:NN  (*)   Not Nullカラãƒ?�§ã�?                        isNN=true の場合ã?第5優å…?
173             * 5:ä¸?ˆ¬(_)   ?¤?¢関連図では省略可能でã�? 既存が 0,1,2,3,4,7 で該当しなã�??合ã?5:ä¸?ˆ¬ に設定しますã?
174             * 6:除å¤?-)   リソース反映除外カラãƒ?�§ã�?   (ここでは設定されませんã€?
175             * 7:共é€?C)   全ãƒ??ブル共通属æ?でã�?               isCOM=true の場合ã?第1優å…?
176             * 8:有閑(Y)   存在しますが未使用カラãƒ?�§ã�?  (ここでは設定されませんã€?
177             * 9:削除(X)   実æ?は削除済みでã�?                   (ここでは設定されませんã€?
178             *
179             * @og.rev 5.7.6.2 (2014/05/16) 新規追åŠ?
180             *
181             * @param  isUK 物ç�?ƒ¦ニã?クキーかどã�?�‹(true/false)
182             * @param  isLUK 論理ユニã?クキーかどã�?�‹(true/false)
183             * @param  isIDX インãƒ?ƒƒクスカラãƒ?�‹どã�?�‹(true/false)
184             * @param  isNN  NOT NULL制ç´?�Œ設定されてã�?‚‹かどã�?�‹(true/false)
185             * @param  isCOM 共通カラãƒ?��とä¸??してã�?‚‹かどã�?�‹(true/false)
186             * @param  kbclm 現在の?¶?—ム区åˆ?KBCLM)の値
187             * @return 対応すã‚??¶?—ム区åˆ?KBCLM)の値(変更がなければ、nullを返す)
188             */
189            private String makeKBCLM( final boolean isUK , final boolean isLUK , final boolean isIDX
190                                                             , final boolean isNN , final boolean isCOM , final String kbclm ) {
191    
192                    String rtn = null;
193    
194                    if(     isCOM )  { rtn = "7"; }
195                    else if( isUK )  { rtn = "1"; }
196                    else if( isLUK ) { rtn = "2"; }
197                    else if( isIDX ) { rtn = "3"; }
198                    else if( isNN  ) { rtn = "4"; }
199    
200                    // rtn == null は、該当なしã?
201                    if( rtn == null && "0,1,2,3,4,7".indexOf( kbclm ) >= 0 ) { rtn = "5"; }      // 5:ä¸?ˆ¬ に設å®?
202    
203                    if( rtn != null && rtn.equals( kbclm ) ) { rtn = null; }                                // 同じ値の場合ã?、null に戻すã?
204    
205                    return rtn;
206            }
207    }