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 * また?BIKO,CODE,CODENAME,SEQ で?したカラ? DBTableModel に存在しな??合??
038 * 処?のも?を無視します?そ?場合?、警告も出力されませんので、ご注意く???
039 *
040 * パラメータは、tableFilterタグの keys, vals にそれぞれ記述するか?BODY 部にCSS形式で記述します?
041 * 【パラメータ?
042 * {
043 * BIKO : 入力カラ?; 備???を?納して?入力カラ??
044 * CODE : 出力カラ?; コードを格納する?力カラ??
045 * CODENAME : 出力カラ?; コード名称を?納する?力カラ??
046 * SEQ : 出力カラ?; 並び?格納する?力カラ?。備??記載されて??になります?
047 * }
048 *
049 * @og.formSample
050 * ●形式?
051 * select TABLE_NAME,CLM,NAME_JA,EDITOR,RENDERER,DBTYPE,BIKO,0 SEQ,'' CODE,'' CODENAME,UNIQ,SYSTEM_ID from GF05
052 * ?<og:tableFilter classId="BIKO2CODE" keys="BIKO,CODE," vals='"TABLE_NAME,CLM"' />
053 *
054 * ② <og:tableFilter classId="BIKO2CODE" >
055 * {
056 * BIKO : 入力カラ?; 備???を?納して?入力カラ??
057 * CODE : 出力カラ?; コードを格納する?力カラ??
058 * CODENAME : 出力カラ?; コード名称を?納する?力カラ??
059 * SEQ : 出力カラ?; 並び?格納する?力カラ?。備??記載されて??になります?
060 * }
061 * </og:tableFilter>
062 *
063 * @og.rev 4.1.0.0(2008/01/18) 新規作?
064 * @og.rev 5.6.6.0 (2013/07/05) keys の整合?チェ?を追?
065 *
066 * @version 0.9.0 2000/10/17
067 * @author Hiroki Nakamura
068 * @since JDK1.1,
069 */
070 public class TableFilter_BIKO2CODE extends AbstractTableFilter {
071 //* こ?プログラ??VERSION??を設定します? {@value} */
072 private static final String VERSION = "5.6.6.1 (2013/07/12)" ;
073
074 /**
075 * keys の整合?チェ?を行うための初期設定を行います?
076 *
077 * @og.rev 5.6.6.1 (2013/07/12) keys の整合?チェ?対?
078 *
079 * @param keysMap keys の整合?チェ?を行うための Map
080 */
081 @Override
082 protected void init( final Map<String,String> keysMap ) {
083 keysMap.put( "BIKO" , "備???を?納して?入力カラ?" );
084 keysMap.put( "CODE" , "コードを格納する?力カラ?" );
085 keysMap.put( "CODENAME" , "コード名称を?納する?力カラ?" );
086 keysMap.put( "SEQ" , "並び?格納する?力カラ?" );
087 }
088
089 /**
090 * DBTableModel処?実行します?
091 *
092 * @og.rev 5.5.2.6 (2012/05/25) protected変数を?private化したため?getterメソ?で取得するよ?変更
093 * @og.rev 5.5.8.5 (2012/11/27) スペ?スで?し?":" が存在する?のみ、コードリソース化します?
094 *
095 * @return 処?果のDBTableModel
096 */
097 public DBTableModel execute() {
098 DBTableModel table = getDBTableModel(); // 5.5.2.6 (2012/05/25) インターフェースにgetterメソ?追?
099
100 int bikoNo = table.getColumnNo( StringUtil.nval( getValue( "BIKO" ), "BIKO" ), false ); // 存在しな??合??1 を返す?
101 int codeNo = table.getColumnNo( StringUtil.nval( getValue( "CODE" ), "CODE" ), false );
102 int nameNo = table.getColumnNo( StringUtil.nval( getValue( "CODENAME" ),"CODENAME" ), false );
103 int seqNo = table.getColumnNo( StringUtil.nval( getValue( "SEQ" ), "SEQ" ), false );
104
105 char sep = ' ';
106
107 if( bikoNo >= 0 && codeNo >= 0 && nameNo >= 0 && seqNo >= 0 ) {
108 String[] data = null;
109 String[] nData = null;
110 String[] clmValArr = null;
111 int addRows = 0;
112 int rowCnt = table.getRowCount();
113 for( int row=0; row<rowCnt; row++ ) {
114 addRows = 0;
115 data = table.getValues( row );
116 // タグがあった?合?無?
117 if( data[bikoNo].indexOf( "/>" ) < 0 && data[bikoNo].indexOf( "</" ) < 0 ) {
118 clmValArr = StringUtil.csv2Array( data[bikoNo], sep );
119 // for ( int i = 0; i < clmValArr.length; i++ ) {
120 // addRows++;
121 // nData = new String[data.length];
122 // System.arraycopy( data, 0, nData, 0, data.length );
123 // int clnIdx = clmValArr[i].indexOf( ':' );
124 // if( clnIdx < 0 ) {
125 // nData[codeNo] = clmValArr[i];
126 // nData[nameNo] = "";
127 // }
128 // else {
129 // nData[codeNo] = clmValArr[i].substring( 0, clmValArr[i].indexOf( ':' ) );
130 // nData[nameNo] = clmValArr[i].substring( clmValArr[i].indexOf( ':' ) + 1 );
131 // }
132 // nData[seqNo] = String.valueOf( i );
133 // table.addValues( nData, row+addRows, false );
134 // }
135 // 5.5.8.5 (2012/11/27) スペ?スで?し?":" が存在する?のみ、コードリソース化します?
136 int seq = 0;
137 for ( int i = 0; i < clmValArr.length; i++ ) {
138 String clmVal = clmValArr[i];
139 int clnIdx = clmVal.indexOf( ':' );
140 if( clnIdx >= 0 ) {
141 nData = new String[data.length];
142 System.arraycopy( data, 0, nData, 0, data.length );
143
144 nData[codeNo] = clmVal.substring( 0, clnIdx );
145 nData[nameNo] = clmVal.substring( clnIdx + 1 );
146 nData[seqNo] = String.valueOf( seq++ );
147
148 addRows++;
149 table.addValues( nData, row+addRows, false );
150 }
151 }
152
153 if( addRows > 0 ) {
154 table.removeValue( row );
155 addRows--;
156 }
157
158 row += addRows;
159 rowCnt += addRows;
160 }
161 }
162 }
163
164 return table;
165 }
166 }