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    }