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_SEQRESET は、TableFilter インターフェースを継承した、DBTableModel 処?の
026     * 実?ラスです?
027     *
028     * ここでは、テーブルモ?のシーケンス?の値を?セ?して?す?
029     * シーケンスの値は??常10ずつ増加しますが、BREAK_CLMが指定されており?
030     * かつ、その?の値がブレイクした場合??00増加させます?
031     * また?CLEAR_CLMが指定されて?場合?そ?カラ??値がキーブレイクした場合??
032     * シーケンス値を?期化(10)にします?
033     *
034     * パラメータは、tableFilterタグの keys, vals にそれぞれ記述するか?BODY 部にCSS形式で記述します?
035     * 【パラメータ?
036     *  {
037     *       SEQ_CLM   : シーケンス?
038     *       BREAK_CLM : キーブレイク?      (任?
039     *       CLEAR_CLM : シーケンス初期化?目
040     *       INCREMENT : シーケンスの増?      (初期値??0)
041     *       START_NO  : シーケンスの初期値    (初期値??)
042     *  }
043     *
044     * @og.formSample
045     * ●形式?
046     *      ?<og:tableFilter classId="SEQRESET" keys="SEQ_CLM,BREAK_CLM" vals="SEQNO,DAIBNRUI" />
047     *
048     *      ② <og:tableFilter classId="SEQRESET" >
049     *               {
050     *                   SEQ_CLM   : SEQNO ;
051     *                   BREAK_CLM : DAIBNRUI ;
052     *               }
053     *         </og:tableFilter>
054     *
055     * @og.rev 5.6.6.0 (2013/07/05) keys の整合?チェ?を追?
056     *
057     * @version  0.9.0  2000/10/17
058     * @author   Hiroki Nakamura
059     * @since    JDK1.1,
060     */
061    public class TableFilter_SEQRESET extends AbstractTableFilter {
062            //* こ?プログラ??VERSION??を設定します?       {@value} */
063            private static final String VERSION = "5.6.6.1 (2013/07/12)" ;
064    
065            /**
066             * keys の整合?チェ?を行うための初期設定を行います?
067             *
068             * @og.rev 5.6.6.1 (2013/07/12) keys の整合?チェ?対?
069             *
070             * @param       keysMap keys の整合?チェ?を行うための Map
071             */
072            @Override
073            protected void init( final Map<String,String> keysMap ) {
074                    keysMap.put( "SEQ_CLM"          , "シーケンス?"                                       );
075                    keysMap.put( "BREAK_CLM"        , "キーブレイク?"                              );
076                    keysMap.put( "CLEAR_CLM"        , "シーケンス初期化?目"                  );
077                    keysMap.put( "INCREMENT"        , "シーケンスの増?(初期値:10)"           );
078                    keysMap.put( "START_NO"         , "シーケンスの初期値(初期値:0)"  );
079            }
080    
081            /**
082             * DBTableModel処?実行します?
083             *
084             * @og.rev 4.3.7.0 (2009/06/01) 新規追?
085             * @og.rev 5.5.2.6 (2012/05/25) protected変数を?private化したため?getterメソ?で取得するよ?変更
086             *
087             * @return      処????ブルモ?
088             */
089            public DBTableModel execute() {
090                    DBTableModel table = getDBTableModel();         // 5.5.2.6 (2012/05/25) インターフェースにgetterメソ?追?
091    
092                    int seqNo   =  table.getColumnNo( getValue( "SEQ_CLM"   ),false );
093                    int breakNo =  table.getColumnNo( getValue( "BREAK_CLM" ),false );
094                    int clearNo =  table.getColumnNo( getValue( "CLEAR_CLM" ),false );
095                    String increment =  getValue( "INCREMENT" );
096                    String start =  getValue( "START_NO" );
097    
098                    if( seqNo < 0 ){ return table; }
099    
100                    int seq = StringUtil.nval( start, 0 );
101                    int inc = StringUtil.nval( increment, 10 );
102                    String[] data = null;
103                    String preKey = "";
104                    String cleKey = "";
105                    int[] rowNo = getParameterRows();                                       // 5.5.2.6 (2012/05/25) インターフェースにgetterメソ?追?
106                    for( int row = 0; row < rowNo.length; row ++ ) {
107                            data = table.getValues( rowNo[row] );
108    
109                            if( clearNo >= 0 && cleKey != null && cleKey.length() > 0 && !cleKey.equals( data[clearNo] ) ) {
110                                    seq = StringUtil.nval( start, 0 );
111                            }
112    
113                            if( breakNo >= 0 && preKey != null && preKey.length() > 0 && !preKey.equals( data[breakNo] ) ) {
114                                    seq += inc * 10;
115                            }
116                            else {
117                                    seq += inc;
118                            }
119    
120                            data[seqNo] = String.valueOf( seq );
121    
122                            if( breakNo >= 0 ) {
123                                    preKey = data[breakNo];
124                            }
125    
126                            if( clearNo >= 0 ) {
127                                    cleKey = data[clearNo];
128                            }
129                    }
130                    return table;
131            }
132    }