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.fukurou.util.StringUtil;
019 import org.opengion.hayabusa.db.AbstractTableFilter;
020 import org.opengion.hayabusa.db.DBTableModel;
021
022 import java.util.Map;
023
024 /**
025 * TableFilter_BIKO2CODE は、TableFilter インターフェースを継承した、DBTableModel 処ç�?”¨の
026 * 実è£?‚¯ラスですã?
027 *
028 * ここでは、DB定義書æƒ??の備è?æ¬?‚’åˆ?§£しã?コードリソースとして登録可能な形に再構築しますã?
029 * 入力カラãƒ?�¨してBIKOがã?出力カラãƒ?�¨して、CODE,CODENAME,SEQがå¿?¦�ですã?
030 * それぞれのカラãƒ?��は、keys,valsの引数としても指定可能ですã?
031 *
032 * åˆ?§£方法としては、まず備è€?¬?‚’' '(スペã?ス)区åˆ?‚Šにåˆ?§£しã?<del>取り出したコード情報ã‚?
033 * DBTableModelの行として追åŠ?�—ますã?</del>
034 * そã?上で、さらに取り出した値ã‚?:'でåˆ?§£してコードとコード名称にåˆ?›¢しますã?
035 * é ?•ª(SEQ)につã�?�¦は、備è€?¬?�«記載されてã�?‚‹é ?•ªになりますã?
036 * 「キー:ラベル キー:ラベル」で、ラベル にスペã?スを含ませる場合ã?、ダブルクォーãƒ??ションで
037 * 囲ってくださいã€?
038 *
039 * またã?BIKO,CODE,CODENAME,SEQ でæŒ?®šしたカラãƒ?�Œ DBTableModel に存在しなã�??合ã?ã€?
040 * 処ç�?��のもã?を無視しますã?そã?場合ã?、警告も出力されませんので、ご注意くã�?�•ã�??
041 *
042 * パラメータは、tableFilterタグの keys, vals にそれぞれ記述するかã?BODY 部にCSS形式で記述しますã?
043 * 【パラメータã€?
044 * {
045 * BIKO : 入力カラãƒ?; 備è?æƒ??をæ?納してã�?‚‹入力カラãƒ?��ã€?
046 * CODE : 出力カラãƒ?; コードを格納するå?力カラãƒ?��ã€?
047 * CODENAME : 出力カラãƒ?; コード名称をæ?納するå?力カラãƒ?��ã€?
048 * SEQ : 出力カラãƒ?; 並びé ?‚’格納するå?力カラãƒ?��。備è€?¬?�«記載されてã�?‚‹é ?•ªになりますã?
049 * }
050 *
051 * @og.formSample
052 * ●形式ï¼?
053 * select TABLE_NAME,CLM,NAME_JA,EDITOR,RENDERER,DBTYPE,BIKO,0 SEQ,'' CODE,'' CODENAME,UNIQ,SYSTEM_ID from GF05
054 * â‘?<og:tableFilter classId="BIKO2CODE" keys="BIKO,CODE," vals='"TABLE_NAME,CLM"' />
055 *
056 * ② <og:tableFilter classId="BIKO2CODE" >
057 * {
058 * BIKO : 入力カラãƒ?; 備è?æƒ??をæ?納してã�?‚‹入力カラãƒ?��ã€?
059 * CODE : 出力カラãƒ?; コードを格納するå?力カラãƒ?��ã€?
060 * CODENAME : 出力カラãƒ?; コード名称をæ?納するå?力カラãƒ?��ã€?
061 * SEQ : 出力カラãƒ?; 並びé ?‚’格納するå?力カラãƒ?��。備è€?¬?�«記載されてã�?‚‹é ?•ªになりますã?
062 * }
063 * </og:tableFilter>
064 *
065 * @og.rev 4.1.0.0(2008/01/18) 新規作æ?
066 * @og.rev 5.6.6.0 (2013/07/05) keys の整合æ?チェãƒ?‚¯を追åŠ?
067 *
068 * @version 0.9.0 2000/10/17
069 * @author Hiroki Nakamura
070 * @since JDK1.1,
071 */
072 public class TableFilter_BIKO2CODE extends AbstractTableFilter {
073 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
074 private static final String VERSION = "5.6.6.1 (2013/07/12)" ;
075
076 /**
077 * keys の整合æ?チェãƒ?‚¯を行うための初期設定を行いますã?
078 *
079 * @og.rev 5.6.6.1 (2013/07/12) keys の整合æ?チェãƒ?‚¯対å¿?
080 *
081 * @param keysMap keys の整合æ?チェãƒ?‚¯を行うための Map
082 */
083 @Override
084 protected void init( final Map<String,String> keysMap ) {
085 keysMap.put( "BIKO" , "備è?æƒ??をæ?納してã�?‚‹入力カラãƒ?��" );
086 keysMap.put( "CODE" , "コードを格納するå?力カラãƒ?��" );
087 keysMap.put( "CODENAME" , "コード名称をæ?納するå?力カラãƒ?��" );
088 keysMap.put( "SEQ" , "並びé ?‚’格納するå?力カラãƒ?��" );
089 }
090
091 /**
092 * DBTableModel処ç�?‚’実行しますã?
093 *
094 * @og.rev 5.5.2.6 (2012/05/25) protected変数をã?private化したためã?getterメソãƒ?ƒ‰で取得するよã�?�«変更
095 * @og.rev 5.5.8.5 (2012/11/27) スペã?スでåˆ?‰²しã?":" が存在するç®?‰€のみ、コードリソース化しますã?
096 *
097 * @return 処ç�?µ�果のDBTableModel
098 */
099 public DBTableModel execute() {
100 DBTableModel table = getDBTableModel(); // 5.5.2.6 (2012/05/25) インターフェースにgetterメソãƒ?ƒ‰追åŠ?
101
102 int bikoNo = table.getColumnNo( StringUtil.nval( getValue( "BIKO" ), "BIKO" ), false ); // 存在しなã�??合ã?ã€?1 を返すã€?
103 int codeNo = table.getColumnNo( StringUtil.nval( getValue( "CODE" ), "CODE" ), false );
104 int nameNo = table.getColumnNo( StringUtil.nval( getValue( "CODENAME" ),"CODENAME" ), false );
105 int seqNo = table.getColumnNo( StringUtil.nval( getValue( "SEQ" ), "SEQ" ), false );
106
107 char sep = ' ';
108
109 if( bikoNo >= 0 && codeNo >= 0 && nameNo >= 0 && seqNo >= 0 ) {
110 String[] data = null;
111 String[] nData = null;
112 String[] clmValArr = null;
113 int addRows = 0;
114 int rowCnt = table.getRowCount();
115 for( int row=0; row<rowCnt; row++ ) {
116 addRows = 0;
117 data = table.getValues( row );
118 // タグがあったå?合ã?無è¦?
119 if( data[bikoNo].indexOf( "/>" ) < 0 && data[bikoNo].indexOf( "</" ) < 0 ) {
120 clmValArr = StringUtil.csv2Array( data[bikoNo], sep );
121 // for ( int i = 0; i < clmValArr.length; i++ ) {
122 // addRows++;
123 // nData = new String[data.length];
124 // System.arraycopy( data, 0, nData, 0, data.length );
125 // int clnIdx = clmValArr[i].indexOf( ':' );
126 // if( clnIdx < 0 ) {
127 // nData[codeNo] = clmValArr[i];
128 // nData[nameNo] = "";
129 // }
130 // else {
131 // nData[codeNo] = clmValArr[i].substring( 0, clmValArr[i].indexOf( ':' ) );
132 // nData[nameNo] = clmValArr[i].substring( clmValArr[i].indexOf( ':' ) + 1 );
133 // }
134 // nData[seqNo] = String.valueOf( i );
135 // table.addValues( nData, row+addRows, false );
136 // }
137 // 5.5.8.5 (2012/11/27) スペã?スでåˆ?‰²しã?":" が存在するç®?‰€のみ、コードリソース化しますã?
138 int seq = 0;
139 for ( int i = 0; i < clmValArr.length; i++ ) {
140 String clmVal = clmValArr[i];
141 int clnIdx = clmVal.indexOf( ':' );
142 if( clnIdx >= 0 ) {
143 nData = new String[data.length];
144 System.arraycopy( data, 0, nData, 0, data.length );
145
146 nData[codeNo] = clmVal.substring( 0, clnIdx );
147 nData[nameNo] = clmVal.substring( clnIdx + 1 );
148 nData[seqNo] = String.valueOf( seq++ );
149
150 addRows++;
151 table.addValues( nData, row+addRows, false );
152 }
153 }
154
155 if( addRows > 0 ) {
156 table.removeValue( row );
157 addRows--;
158 }
159
160 row += addRows;
161 rowCnt += addRows;
162 }
163 }
164 }
165
166 return table;
167 }
168 }