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