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.hayabusa.db.AbstractTableFilter;
019    import org.opengion.hayabusa.db.DBTableModel;
020    
021    import org.opengion.hayabusa.resource.ResourceFactory;
022    import org.opengion.hayabusa.resource.ResourceManager;
023    
024    import org.opengion.fukurou.util.ErrorMessage;
025    import org.opengion.fukurou.util.StringUtil;
026    
027    import java.util.Map;
028    
029    /**
030     * TableFilter_LABEL は、TableFilter インターフェースを継承した、DBTableModel 処?の
031     * 実?ラスです?
032     *
033     * ここでは、キーのCLM,LBL と、LANG より、ラベルリソースに変換した値を設定します?
034     *
035     * パラメータは、tableFilterタグの keys, vals にそれぞれ記述するか?BODY 部にCSS形式で記述します?
036     * 【パラメータ?
037     *  {
038     *       SYSTEM_ID  : ラベルリソースの作?シス?IDを指定します?無?時は、ログイン時?リソースになります?
039     *       LANG       : ラベルリソースの?を?します?無?時は、日本語になります?
040     *       CLM        : ラベルリソースのキーとなる?が設定されて?カラ?を指定します?
041     *       LBL        : CLMで?されたカラ?から値を取り?し?ラベルリソースに変換した結果をセ?します?
042     *  }
043     *
044     * CLM と LBL に同じカラ??すると、このフィルターを?過するたびに、変換後?ラベル?
045     * 再?キーとして変換しよ?試みることになります?不測の事?に陥る可能性があるため?
046     * そ?様な設定?出来なくなって?す?
047     *
048     * また?CLM また? LBL で?したカラ? DBTableModel に存在しな??合?、??のも??
049     * 無視します?そ?場合?、警告も出力されませんので、ご注意く???
050     *
051     * @og.formSample
052     * ●形式?
053     *      ?<og:tableFilter classId="LABEL" keys="CLM,LBL" vals="COLUMN,LABEL_CLM" />
054     *
055     *      ② <og:tableFilter classId="LABEL" >
056     *               {
057     *                      SYSTEM_ID  : GF ;
058     *                      LANG       : ja ;
059     *                      CLM        : COLUMN ;
060     *                      LBL        : LABEL_CLM ;
061     *               }
062     *         </og:tableFilter>
063     *
064     * @og.rev 5.6.6.0 (2013/07/05) keys の整合?チェ?を追?
065     *
066     * @version  0.9.0  2000/10/17
067     * @author   Kazuhiko Hasegawa
068     * @since    JDK1.1,
069     */
070    public class TableFilter_LABEL 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( "SYSTEM_ID"        , "シス?IDを指定しま?初期値:ログイン時?リソース)"               );
084                    keysMap.put( "LANG"                     , "?を??初期値:日本?"                                                               );
085                    keysMap.put( "CLM"                      , "キーとなる?が設定されて?カラ?を指?                         );
086                    keysMap.put( "LBL"                      , "ラベルリソースに変換した結果をセ?するカラ?を指?        );
087            }
088    
089            /**
090             * DBTableModel処?実行します?
091             *
092             * @og.rev 5.5.2.2 (2012/05/09) SYSTEM_ID を受け取るよ?変更
093             * @og.rev 5.5.2.6 (2012/05/25) protected変数を?private化したため?getterメソ?で取得するよ?変更
094             *
095             * @return 処?果のDBTableModel
096             */
097            public DBTableModel execute() {
098                    DBTableModel table = getDBTableModel();         // 5.5.2.6 (2012/05/25) インターフェースにgetterメソ?追?
099    
100                    String systemId = getValue( "SYSTEM_ID" );              // 5.5.2.2 (2012/05/09)
101                    String lang             = getValue( "LANG" );
102    //              ResourceManager resource = ResourceFactory.newInstance( lang );
103                    ResourceManager resource = ResourceFactory.newInstance( systemId,lang,false );          // 5.5.2.2 (2012/05/09)
104    
105                    String clm = getValue( "CLM" );
106                    String lbl = getValue( "LBL" );
107    
108                    int clmNo  = table.getColumnNo( clm,false );    // 存在しな??合??1 を返す?
109                    int lblNo  = table.getColumnNo( lbl,false );
110    
111                    if( clmNo == lblNo && clmNo >= 0 ) {
112                            String errMsg = "CLM と LBL に同じカラ??することは出来ません? ;
113                            ErrorMessage errMessage = makeErrorMessage( "TableFilter_LABEL Error",ErrorMessage.NG );
114                            errMessage.addMessage( 0,ErrorMessage.NG,errMsg );
115                            errMessage.addMessage( 0,ErrorMessage.NG,"CLM=[" + clm + "],LBL=[" + lbl + "]" );
116                    }
117                    else if( clmNo >= 0 && lblNo >= 0 ) {
118                            String[] data  = null;
119                            int rowCnt = table.getRowCount();
120                            for( int row=0; row<rowCnt; row++ ) {
121                                    String clmVal = null;
122                                    try {
123                                            data   = table.getValues( row );
124                                            clmVal = data[clmNo];           // 変換する??カラ?
125                                            data[lblNo] = resource.getLabel( clmVal ) ;             // 副作用を及ぼして?す?注?
126                                    }
127                                    catch( RuntimeException ex ) {
128                                            ErrorMessage errMessage = makeErrorMessage( "TableFilter_LABEL Error",ErrorMessage.NG );
129                                            errMessage.addMessage( row+1,ErrorMessage.NG,ex.getMessage() );
130                                            errMessage.addMessage( row+1,ErrorMessage.NG,StringUtil.array2csv( data ) );
131                                            errMessage.addMessage( row+1,ErrorMessage.NG,"CLM=[" + clm + "],VAL=[" + clmVal + "]" );
132                                    }
133                            }
134                    }
135    
136                    return table;
137            }
138    }