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 }