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 }