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 }