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