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    }