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 }