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    }