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.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.db.DBColumn;
020    import org.opengion.hayabusa.db.DBTableModel;
021    import org.opengion.fukurou.util.Attributes;
022    import org.opengion.fukurou.util.ErrorMessage;
023    import org.opengion.fukurou.model.ArrayDataModel;
024    import org.opengion.fukurou.model.Formatter;
025    
026    import static org.opengion.fukurou.util.StringUtil.nval ;
027    
028    import java.util.List;
029    import java.util.ArrayList;
030    import java.util.Enumeration;
031    import java.util.Locale ;
032    
033    import java.io.ObjectOutputStream;
034    import java.io.ObjectInputStream;
035    import java.io.IOException;
036    
037    /**
038     * 検索結果の DBTableModelオブジェクトに値を設定するタグです?
039     *
040     * columnSet と共に使用する場合?、entryタグ の command属?と、columnSetタグ の command属??
041     * ??した場合?み、??れます?
042     * entryタグは、そのコマンドにより、DBTableModelオブジェクト?値を設定します?
043     * たとえ?、command="INSERT" なら??行?の??タを選択された行番号の次に挿入します?
044     * また?追??変更、削除された?DBTableModelオブジェク?でも??には????タ?
045     * 持って?ため、command="RESET" で??状態に戻すことが可能です?
046     *
047     * @og.formSample
048     * ●形式?
049     *       ・<og:entry command="…">
050     *             <og:columnSet command="…" />
051     *         </og:entry>
052     *       ・<og:entry command="…" />
053     *             ???columnSetを使わな??合でもresult.jspから次画面(insert,modify,copy.jsp?に
054     *                にDBTableModelをもって?場合には、??を書?ください?
055     *                (取消?とき?エンジン?DBTableModelを操作する?に使用する為)
056     * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま?
057     *
058     * ●Tag定義??
059     *   <og:entry
060     *       command          ○?TAG】コマン?INSERT/COPY/MODIFY/DELETE/ENTRY/CHANGE/RESET/ALLRESET/ALLACTION/RESETDATA/INSERTONE/REALDELETE/REQENTRY)を設定しま???)
061     *       scope              【TAG】キャ?ュする場合?スコープ[request/page/session/applicaton]を指定しま?初期値:session)
062     *       repeatCount        【TAG】指定?回数?け?繰り返し処?行う回数を指定しま?初期値:1)
063     *       tableId            【TAG?通常使?せん)sessionから?す?DBTableModelオブジェクト? ID
064     *       useConsistency     【TAG】Consistency キー による整合?チェ?を行うかど?を指定しま?初期値:true)
065     *       selectedAll        【TAG】データを?件選択済みとして処?るかど?[true/false]を指定しま?初期値:false)
066     *       strictCheck        【TAG】カラ??の存在チェ?を行うかど?[true/false]を指定しま?初期値:true)
067     *       noTransition       【TAG?通常は使?せん)画面遷移を行わな?式?登録方法を使用するかを?しま?
068     *       debug              【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
069     *   >   ... Body ...
070     *   </og:entry>
071     *
072     * ●使用?
073     *    <og:entry command="{@command}"  >
074     *        <og:columnSet command="{@command}" columnId="ECNO"   action="CLEAR" />
075     *        <og:columnSet command="{@command}" columnId="JYOKYO" action="SET" value="1" />
076     *    </og:entry>
077     *
078     *    <og:entry command="MODIFY" rows="1" >
079     *        <og:columnSet  command="MODIFY" columnId="key" action="TBLSET" value="[key][lang]"/>
080     *    </og:entry>
081     *
082     *    action="ADD" は、DBTypeに依存した方法で、既存?値を???します?
083     *    <og:entry command="{@command}" repeatCount="5" >
084     *        <og:columnSet  command="{@command}" columnId="YKNO" action="ADD" />
085     *    </og:entry>
086     *
087     *    action="ADD" は、DBTypeに依存した方法で、既存?値に、value の値を加算します?
088     *    <og:entry command="{@command}" repeatCount="5" >
089     *        <og:columnSet  command="{@command}" columnId="YKNO" action="ADD" value="5" />
090     *    </og:entry>
091     *
092     *    command属? は、columnSetタグのcommand属?と同??場合?み、??ます?
093     *    [command属?]
094     *      INSERT     新?
095     *      COPY       ??
096     *      MODIFY     変更
097     *      DELETE     削除
098     *      ENTRY      エントリー
099     *      CHANGE     チェンジ
100     *      RESET      リセ?
101     *      ALLRESET   全件リセ?
102     *      ALLACTION  オールアクション
103     *      RESETDATA  リセ???タ
104     *      INSERTONE  新?1行?み)
105     *      REALDELETE 物?除
106     *      REQENTRY   リクエスト変数設?
107     *
108     *    command属? は、columnSetタグで?します?
109     *    [action属?]
110     *      DEFAULT カラ?ソースで定義した初期値をセ?します?
111     *      CLEAR   値をクリア(ゼロストリング "" )します?
112     *      ADD     現在の値???します?  0 ?1 , A ?B , 9 ?10。value属?と併用すれば、指定?値を加算できます?
113     *      SET     value で設定した??新しい値として登録します?
114     *      NULLSET ??値?NULL の場合だけ?value で設定した新しい値を登録します?
115     *      LOWER   小文字に変換します?
116     *      UPPER   大?に変換します?
117     *      COPY    value にコピ???カラ?Dをセ?すれば、その値を代入します?
118     *      TBLSET  DBTableModel の?を取り込んで?? columnId カラ?設定します?[カラ?] で?できます?
119     *              また?これは??を解析して?value を作?します?で,??連結等に使用できます?
120     *      WRTCTRL writableControl を使用したカラ?ータの先?アン??バ?を削除します?
121     *      DBMENU  DBMENUでパラメータ設?コロン連結文?を使用したカラ?ータの先???タのみにします?
122     *      REQSET  valueで?したカラ??値をキーに、リクエスト変数から値を取出し?セ?します?
123     *      SEQSET  valueの初期値を利用して?レコードごとに?1した?をセ?します?
124     *      PREFIX  valueの値を後ろから検索し???カラ??の前半部?取得しま?記号は含みません)?
125     *      SUFIX   valueの値を後ろから検索し???カラ??の後半部?取得しま?記号は含みません)?
126     *      そ?? カラ??DBType の valueAction メソ?を呼び出します?自由に設定可能です?
127     *
128     *    [strictCheck属?]は、カラ??の存在チェ?を行うかど?を指定しま?初期値:true)
129     *      true    カラ??がDBTableModel に存在しな??合?、エラーになる?
130     *      false   カラ??がDBTableModel に存在しな??合?、無視する?
131     *
132     * @og.group 画面登録
133     *
134     * @version  4.0
135     * @author       Kazuhiko Hasegawa
136     * @since    JDK5.0,
137     */
138    public class EntryTag extends CommonTagSupport {
139            //* こ?プログラ??VERSION??を設定します?       {@value} */
140            private static final String VERSION = "5.6.6.1 (2013/07/12)" ;
141    
142            private static final long serialVersionUID = 566120130712L ;
143    
144            /** command 引数に渡す事?出来?コマン? 新?{@value} */
145            public static final String CMD_INSERT   = "INSERT" ;
146            /** command 引数に渡す事?出来?コマン? ?? {@value} */
147            public static final String CMD_COPY             = "COPY" ;
148            /** command 引数に渡す事?出来?コマン? 変更 {@value} */
149            public static final String CMD_MODIFY   = "MODIFY" ;
150            /** command 引数に渡す事?出来?コマン? 削除 {@value} */
151            public static final String CMD_DELETE   = "DELETE" ;
152            /** command 引数に渡す事?出来?コマン? エントリー {@value} */
153            public static final String CMD_ENTRY    = "ENTRY" ;
154            /** command 引数に渡す事?出来?コマン? チェンジ {@value} */
155            public static final String CMD_CHANGE   = "CHANGE" ;
156            /** command 引数に渡す事?出来?コマン? リセ? {@value} */
157            public static final String CMD_RESET    = "RESET" ;
158            /** command 引数に渡す事?出来?コマン? 全件リセ? {@value} */
159            public static final String CMD_ALLRESET         = "ALLRESET" ;  // 3.5.6.3 (2004/07/12)
160            /** command 引数に渡す事?出来?コマン? オールアクション{@value} */
161            public static final String CMD_ALLACTION        = "ALLACTION" ;
162            /** command 引数に渡す事?出来?コマン? リセ?(??タのみ){@value} */
163            public static final String CMD_RESETDATA        = "RESETDATA" ;         // 4.3.3.0 (2008/10/01)
164            /** command 引数に渡す事?出来?コマン? 追?1行?み){@value} */
165            public static final String CMD_INSERTONE        = "INSERTONE" ;         // 5.1.5.0 (2010/04/01)
166            /** command 引数に渡す事?出来?コマン? 物?除 {@value} */
167            public static final String CMD_REALDELETE       = "REALDELETE" ;                // 5.1.6.0 (2010/05/01)
168            /** command 引数に渡す事?出来?コマン? リクエスト変数設?{@value} */
169            public static final String CMD_REQENTRY         = "REQENTRY" ;                  // 5.6.1.2 (2013/02/22)
170    
171            // 3.5.6.3 (2004/07/12) CMD_ALLRESET    追?
172            // 4.3.3.0 (2008/10/01) CMD_RESETDATA   追?
173            // 5.1.5.0 (2010/04/01) CMD_INESRTONE   追?
174            // 5.1.6.0 (2010/05/01) CMD_REALDELETE  追?
175            private static final String[] COMMAND_LIST = new String[] {
176                    CMD_INSERT,CMD_COPY,CMD_MODIFY,CMD_DELETE,CMD_ENTRY,CMD_CHANGE,CMD_ALLACTION,CMD_RESET,CMD_ALLRESET,CMD_RESETDATA,CMD_INSERTONE,CMD_REALDELETE,CMD_REQENTRY };
177    
178            /** action 引数に渡す事?出来?アクションコマン? 初期値:{@value} */
179            public static final String ACT_DEFAULT  = "DEFAULT" ;
180            /** action 引数に渡す事?出来?アクションコマン? クリア {@value} */
181            public static final String ACT_CLEAR    = "CLEAR" ;
182            /** action 引数に渡す事?出来?アクションコマン? ??{@value} */
183            public static final String ACT_ADD      = "ADD" ;
184            /** action 引数に渡す事?出来?アクションコマン? 小文字化{@value} */
185            public static final String ACT_LOWER    = "LOWER" ;
186            /** action 引数に渡す事?出来?アクションコマン? 大?化{@value} */
187            public static final String ACT_UPPER    = "UPPER" ;
188            /** action 引数に渡す事?出来?アクションコマン? コピ? {@value} */
189            public static final String ACT_COPY     = "COPY" ;
190            /** action 引数に渡す事?出来?アクションコマン? セ? {@value} */
191            public static final String ACT_SET      = "SET" ;
192            // 3.4.0.3 (2003/09/10) NULLSET Action を追?ます?
193            /** action 引数に渡す事?出来?アクションコマン? NULLセ? {@value} */
194            public static final String ACT_NULLSET  = "NULLSET" ;
195            /** action 引数に渡す事?出来?アクションコマン? ??ブルセ? {@value} */
196            public static final String ACT_TBLSET   = "TBLSET" ;
197            /** action 引数に渡す事?出来?アクションコマン? ライトコントロール {@value} */
198            public static final String ACT_WRTCTRL  = "WRTCTRL" ;           // 3.8.1.5 (2006/03/30)
199            /** action 引数に渡す事?出来?アクションコマン? DBメニュー {@value} */
200            public static final String ACT_DBMENU  = "DBMENU" ;             // 3.8.5.3 (2006/08/07)
201            /** action 引数に渡す事?出来?アクションコマン? リクエスト?セ? {@value} */
202            public static final String ACT_REQSET  = "REQSET" ;             // 5.4.2.1 (2011/12/09)
203            /** action 引数に渡す事?出来?アクションコマン? 連番値セ? {@value} */
204            public static final String ACT_SEQSET  = "SEQSET" ;             // 5.6.5.2 (2013/06/21)
205            /** action 引数に渡す事?出来?アクションコマン? PREFIX値セ? {@value} */
206            public static final String ACT_PREFIX  = "PREFIX" ;             // 5.6.6.1 (2013/07/12)
207            /** action 引数に渡す事?出来?アクションコマン? SUFIX値セ? {@value} */
208            public static final String ACT_SUFIX   = "SUFIX" ;              // 5.6.6.1 (2013/07/12)
209    
210            // 3.5.6.0 (2004/06/18) すべて?protected から private に変更します?
211            private String                          tableId         = HybsSystem.TBL_MDL_KEY;
212            private transient DBTableModel  table   = null;
213            private String                          command         = null;
214            private int[]                           rowNo           = null;
215            private List<Attributes>  values          = null;
216    //      private transient Formatter     format          = null;
217    
218            // 3.5.4.2 (2003/12/15) ??回数繰り返す機?を追?ます?
219            private int                             repeatCount     = 1;
220    
221            // 3.5.5.7 (2004/05/10) Consistency キー による整合?チェ?を行うかど?を指定します?
222            private boolean                 useConsistency  = HybsSystem.sysBool( "USE_CONSISTENCY" );
223    
224            // 3.8.1.1 (2005/11/21) 全件選択されたこととして、??ます?
225            private boolean selectedAll = false;
226    
227            // 3.5.6.4 (2004/07/16) RESET コマンド??ォルト??に、ALLRESET ?
228            // 使用するかど?を指定しま?初期値:false(使用しな?)?
229            private final boolean RESET_ACTION_ALL_USE = HybsSystem.sysBool( "RESET_ACTION_ALL_USE" );
230    
231            // 4.0.0 (2006/09/31) カラ??の存在チェ?を行うかど?を指定します?
232            private boolean strictCheck = true;
233    
234            private boolean noTransition= false;    // 4.3.3.0 (2008/10/01) 追?
235    
236            // 5.6.5.2 (2013/06/21) SEQSET アクションのカウンター
237            private int seqsetCnt = 0;
238    
239            /**
240             * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
241             *
242             * @og.rev 5.1.9.0 (2010/08/01) 戻り?を?EVAL_BODY_INCLUDE ?EVAL_BODY_BUFFERED に変更
243             *
244             * @return      後続????
245             */
246            @Override
247            public int doStartTag() {
248    //              int rtn = EVAL_BODY_INCLUDE;
249                    int rtn = EVAL_BODY_BUFFERED;           // 5.1.9.0 (2010/08/01) 変更
250    
251                    if( ! check( command, COMMAND_LIST ) ) {
252                            rtn = SKIP_BODY;
253                    }
254    
255                    return rtn;
256            }
257    
258            /**
259             * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
260             *
261             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
262             * @og.rev 3.5.5.5 (2004/04/23) 登録時? 整合?パラメータチェ?を行います?
263             * @og.rev 3.5.5.6 (2004/04/27) JSP画面の作?不?合?ENTRY系で、command を投げた場合?、無視します?
264             * @og.rev 3.5.5.7 (2004/05/10) Consistency キー による整合?チェ?を行うかど?を指定します?
265             * @og.rev 3.5.5.8 (2004/05/20) Consistency キー による整合?チェ??checkConsistency() に??ます?
266             * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェ?を行います?
267             * @og.rev 4.3.3.0 (2008/10/01) noTransition 属?を追?ます?
268             * @og.rev 4.3.8.0 (2009/08/01) noTransition値取得?メソ?名変更
269             * @og.rev 5.1.3.0 (2010/02/01) noTransitionのコントロールは、requestで行う?
270             *
271             * @return      後続????
272             */
273            @Override
274            public int doEndTag() {
275                    debugPrint();           // 4.0.0 (2005/02/28)
276                    // noTransition = isNoTransitionRequest() || noTransition; // 4.3.3.0 (2008/10/01) 追?
277    //              noTransition = isNoTransitionSession() || noTransition; // 4.3.8.0 (2009/08/01) メソ?名変更
278                    noTransition = isNoTransitionRequest(); // 5.1.3.0 (2010/02/01)
279                    startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
280                    table = (DBTableModel)getObject( tableId );
281    
282                    if( table != null && check( command, COMMAND_LIST ) ) {
283                            if( ! checkConsistency() ) { return(SKIP_PAGE); }
284                            if( rowNo == null ) { rowNo = getParameterRows(); }             // 4.0.0 (2005/01/31)
285    
286                            commandExec( command );
287    
288                            // 3.6.0.8 (2004/11/19) トランザクションチェ?を行います?
289                            if( ! commitTableObject( tableId, table ) ) {
290                                    jspPrint( "EntryTag Query処?割り込まれました?BTableModel は登録しません? );
291                                    return (SKIP_PAGE);
292                            }
293                    }
294    
295                    return(EVAL_PAGE);
296            }
297    
298            /**
299             * タグリブオブジェクトをリリースします?
300             *
301             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
302             *
303             * @og.rev 2.0.0.4 (2002/09/27) カスタ?グの release() メソ?を?追?
304             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
305             * @og.rev 3.5.4.2 (2003/12/15) ??回数繰り返す機?を追?ます?
306             * @og.rev 3.5.5.7 (2004/05/10) Consistency キー による整合?チェ?を行うかど?を指定します?
307             * @og.rev 3.8.1.1 (2005/11/21) selectedAll 追??全件選択されたこととして、??ます?
308             * @og.rev 4.0.0.0 (2006/09/31) strictCheck 追??
309             * @og.rev 4.3.3.0 (2008/10/01) noTransition 属?を追?ます?
310             * @og.rev 5.6.5.2 (2013/06/21) seqsetCnt 属?を追?ます?
311             *
312             */
313            @Override
314            protected void release2() {
315                    super.release2();
316                    tableId         = HybsSystem.TBL_MDL_KEY;
317                    table           = null;
318                    command         = null;
319                    rowNo           = null;
320                    values          = null;
321    //              format          = null;
322                    repeatCount     = 1;                    // 3.5.4.2 (2003/12/15)
323                    useConsistency  = HybsSystem.sysBool( "USE_CONSISTENCY" );              // 3.5.5.7 (2004/05/10)
324                    selectedAll = false;            // 3.8.1.1 (2005/11/21)
325                    strictCheck = true;                     // 4.0.0 (2006/09/31)
326                    noTransition= false;            // 4.3.3.0 (2008/10/01) 追?
327                    seqsetCnt       = 0;                    // 5.6.5.2 (2013/06/21) SEQSET アクションのカウンター
328            }
329    
330            /**
331             * ?タグの ColumnSetTag より、???カラ??値を書き換える為の属?を指定します?
332             *
333             * ?の値を受け取って、後ほど、すべてのカラ?対して処?行います?
334             *
335             * @og.rev 3.1.0.0 (2003/03/20) Vector を使用して??で?同期でも構わな??を?ArrayList に置換え?
336             * @og.rev 3.1.2.0 (2003/04/07) taglib パッケージ?で使用して???protected 化する?
337             *
338             * @param   attri       属?リス?
339             */
340            protected void setAttributes( final Attributes attri ) {
341                    if( values == null ) { values = new ArrayList<Attributes>(); }
342                    if( command.equalsIgnoreCase( attri.get( "command" ) ) ) {
343                            values.add( attri );
344                    }
345            }
346    
347            /**
348             * 【TAG?通常使?せん)sessionから?す?DBTableModelオブジェクト? ID?
349             *
350             * @og.tag
351             * 表示処?に???ポインタを書き換えた)DBTableModelオブジェクトを
352             * 同じキーで、sessionに登録します?
353             * 初期値は、HybsSystem.TBL_MDL_KEY です?
354             *
355             * @param       id sessionに登録する時? ID
356             */
357            public void setTableId( final String id ) {
358                    tableId   = nval( getRequestParameter( id ),tableId );  // 3.8.0.9 (2005/10/17)
359            }
360    
361            /**
362             * 【TAG】コマン?INSERT,COPY,MODIFY,DELETE,ENTRY,CHANGE,ALLACTION,RESET)をセ?します?
363             *
364             * @og.tag
365             * コマンド?,HTMLから(get/post)?されます?で,CMD_xxx で設定される
366             * フィールド定数値の?れかを??できます?
367             *
368             * @param       cmd コマン?public static final 宣?れて???)
369             * @see         <a href="{&#064;docRoot}/constant-values.html#org.opengion.hayabusa.taglib.EntryTag.CMD_INSERT">コマンド定数</a>
370             */
371            public void setCommand( final String cmd ) {
372                    String cmd2 = getRequestParameter( cmd );
373                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
374            }
375    
376            /**
377             * コマンドを実行します?
378             *
379             * コマンド?,HTMLから(get/post)?されます?で,setCommand()メソ?で
380             * 登録します?
381             * コマンドを登録すると同時に,実行も行な?す?
382             *
383             * @og.rev 3.5.6.3 (2004/07/12) ALLRESET コマンドを追?る?
384             * @og.rev 4.3.3.0 (2008/10/01) RESETDATA コマンドを追?る?
385             * @og.rev 5.1.5.0 (2010/04/01) INSERTONE コマンドを追?る?
386             * @og.rev 5.1.6.0 (2010/05/01) REALDELETE コマンドを追?る?
387             * @og.rev 5.6.1.2 (2013/02/22) REQENTRY コマンドを追?る?
388             *
389             * @param   command コマン?public static final 宣?れて???)
390             */
391            private void commandExec( final String command ) {
392    
393                    table.setDefaultRowWritable( false );
394                    table.setDefaultRowChecked(  false );
395    
396                    if( CMD_INSERT.equals(      command ) ) { insert() ; }
397                    else if( CMD_COPY.equals(   command ) ) { copy()   ; }
398                    else if( CMD_MODIFY.equals( command ) ) { modify() ; }
399                    else if( CMD_CHANGE.equals( command ) ) { change() ; }
400                    else if( CMD_DELETE.equals( command ) ) { delete() ; }
401                    else if( CMD_ENTRY.equals(  command ) ) { entry()  ; }
402                    else if( CMD_RESET.equals(  command ) ) {
403                                    if( RESET_ACTION_ALL_USE )              { allReset() ; }        // 3.5.6.4 (2004/07/16)
404                                    else                                                    { reset()    ; }
405                    }
406                    else if( CMD_ALLRESET.equals(    command ) ) { allReset()  ; }  // 3.5.6.3 (2004/07/12)
407                    else if( CMD_ALLACTION.equals(   command ) ) { allAction() ; }
408                    else if( CMD_RESETDATA.equals(   command ) ) { resetData() ; }  // 4.3.3.0 (2008/10/01)
409                    else if( CMD_INSERTONE.equals(   command ) ) { insertOne() ; }  // 5.1.5.0 (2010/04/01)
410                    else if( CMD_REALDELETE.equals(  command ) ) { realDelete() ; } // 5.1.6.0 (2010/05/01)
411                    else if( CMD_REQENTRY.equals(    command ) ) { reqEntry()  ; }  // 5.6.1.2 (2013/02/22)
412            }
413    
414            /**
415             * DBTableModelに行を追?ます?
416             *
417             * 注意:writableカラ??暫定対応が入って?す?単純な空白??タ?
418             * インサートすると、カラ?ータ?null になる為? 制御がおかし?
419             * なります?
420             *
421             * @og.rev 3.5.4.2 (2003/12/15) repeatCount による繰り返し処?追?
422             * @og.rev 4.3.3.0 (2008/10/01) noTransition 属?対?
423             *
424             */
425            private void insert() {
426                    if( rowNo.length == 0 ) { rowNo = new int[] { -1 }; }
427    
428                    boolean rowWritableFlag = "WRITABLE".equalsIgnoreCase( table.getColumnName( 0 ) );      // writable 対?
429                    // src の作?は、各チェ?毎に行う??な????の??でよい?
430                    String[] src = new String[ table.getColumnCount() ];
431                    for( int j=0; j<src.length; j++ ) {
432                            DBColumn dbColumn = table.getDBColumn( j );
433                            src[j] = dbColumn.getDefault();
434                    }
435                    if( rowWritableFlag ) { src[0] = "true"; }      // writable 対?
436    
437                    int rowCount = table.getRowCount();
438    
439                    // ??にINSERTしな?、行番号がずれてしま??
440                    for( int i=rowNo.length-1; i>=0; i-- ) {
441                            int row = rowNo[i];
442                            for( int cnt=0; cnt<repeatCount; cnt++ ) {
443                                    if( cnt >= 1 ) {             // ?回目以?
444                                            src = table.getValues( row );
445                                    }
446    
447                                    String[] dst = new String[ table.getColumnCount() ];
448                                    System.arraycopy( src,0,dst,0,dst.length );
449                                    dst = setColumnValues( dst );
450    
451                                    // 4.3.3.0 (2008/10/01) noTransition属?対?
452                                    if( noTransition ) { row = rowCount; }
453                                    else { row ++; }                                        // ?行?下に追?る?
454                                    table.addValues( dst,row );
455                                    table.setRowWritable( row,true );
456                                    table.setRowChecked(  row,true );
457                            }
458                    }
459            }
460    
461            /**
462             * DBTableModelに行を追?、チェ?された行?値をセ?します?
463             *
464             * @og.rev 3.5.4.2 (2003/12/15) repeatCount による繰り返し処?追?
465             * @og.rev 4.3.3.0 (2008/10/01) noTransition 属?対?
466             *
467             */
468            private void copy() {
469                    if( rowNo.length == 0 ) { insert() ; return ;}
470    
471                    int rowCount = table.getRowCount();
472    
473                    // ??にCOPYしな?、行番号がずれてしま??
474                    for( int i=rowNo.length-1; i>=0; i-- ) {
475                            for( int cnt=0; cnt<repeatCount; cnt++ ) {
476                                    String[] src = table.getValues( rowNo[i]+cnt );
477                                    String[] dst = new String[ table.getColumnCount() ];
478                                    System.arraycopy( src,0,dst,0,dst.length );
479                                    dst = setColumnValues( dst );
480    
481                                    // 4.3.3.0 (2008/10/01) noTransition属?対?
482                                    int row = -1;
483                                    if( noTransition ) { row = rowCount; }
484                                    else { row = rowNo[i] + cnt + 1; }                      // ?行?下に追?る?
485    
486                                    table.addValues( dst,row );
487                                    table.setRowWritable( row,true );
488                                    table.setRowChecked(  row,true );
489                            }
490                    }
491            }
492    
493            /**
494             * DBTableModelの行を書込み可とます?
495             *
496             * @og.rev 4.3.4.6 (2009/01/15) 画面遷移なし登録で既に改廃Cがセ?されて?場合?、columnSetタグの処?行わな??
497             *
498             */
499            private void modify() {
500                    for( int i=0; i<rowNo.length; i++ ) {
501                            String[] src = table.getValues( rowNo[i] );
502                            String[] dst = new String[ table.getColumnCount() ];
503                            System.arraycopy( src,0,dst,0,dst.length );
504    
505                            // 4.3.4.6 (2009/01/15)
506                            // 画面遷移なし登録の場合?既に改廃Cが付いて?(編?れて?)場合??
507                            // columnSetによる値のセ?を行わな??
508                            // (同じコマンドで?のボタンを割り当てて?場合??回?変更・削除によって、?に登録され?
509                            // 値が削除されてしま?め?
510                            if( !( noTransition && table.getModifyType( rowNo[i] ) != null && table.getModifyType( rowNo[i] ).length() > 0 ) ){
511                                    dst = setColumnValues( dst );
512                            }
513    
514                            table.setValues( dst,rowNo[i] );
515                            table.setRowWritable( rowNo[i],true );
516                            table.setRowChecked(  rowNo[i],true );
517                    }
518            }
519    
520            /**
521             * DBTableModelの行を変更します?
522    
523             * @og.rev 4.3.4.6 (2009/01/15) 画面遷移なし登録で既に改廃Cがセ?されて?場合?、columnSetタグの処?行わな??
524             *
525             */
526            private void change() {
527                    for( int i=0; i<rowNo.length; i++ ) {
528                            String[] src = table.getValues( rowNo[i] );
529                            String[] dst = new String[ table.getColumnCount() ];
530                            System.arraycopy( src,0,dst,0,dst.length );
531    
532                            // 4.3.4.6 (2009/01/15)
533                            if( !( noTransition && table.getModifyType( rowNo[i] ) != null && table.getModifyType( rowNo[i] ).length() > 0 ) ){
534                                    dst = setColumnValues( dst );
535                            }
536    
537                            table.setValues( dst,rowNo[i] );
538                    }
539            }
540    
541            /**
542             * DBTableModelの行を削除します?
543             *
544             * @og.rev 3.5.4.2 (2003/12/15) DELETE時にも?の書き換えができるようにします?
545             * @og.rev 4.3.4.6 (2009/01/15) 画面遷移なし登録で既に改廃Cがセ?されて?場合?、columnSetタグの処?行わな??
546             *
547             */
548            private void delete() {
549                    for( int i=0; i<rowNo.length; i++ ) {
550                            // 3.5.4.2 (2003/12/15) 書き換え??追?
551                            String[] src = table.getValues( rowNo[i] );
552                            String[] dst = new String[ table.getColumnCount() ];
553                            System.arraycopy( src,0,dst,0,dst.length );
554    
555                            // 4.3.4.6 (2009/01/15)
556                            if( !( noTransition && table.getModifyType( rowNo[i] ) != null && table.getModifyType( rowNo[i] ).length() > 0 ) ){
557                                    dst = setColumnValues( dst );
558                            }
559    
560                            table.rowDelete( dst,rowNo[i] );
561                            table.setRowWritable( rowNo[i],true );
562                            table.setRowChecked( rowNo[i],true );
563                    }
564            }
565    
566            /**
567             * リクエスト情報から、セ?されたカラ?と値を取り?し?設定します?
568             *
569             * 設定?は、???キー??__" ??行番号 です?
570             * よって、?は,??設定されて?す?
571             *
572             * @og.rev 3.5.3.1 (2003/10/31) チェ?ボックスカラ??します?
573             * @og.rev 3.6.0.6 (2004/10/22) chboxNames 属?は?します?
574             * @og.rev 5.6.1.2 (2013/02/22) setRequestValuesメソ?の互換性の対応?
575             */
576            private void entry() {
577                    if( rowNo.length > 0 ) {
578    //                      setRequestValues();
579                            setRequestValues( false );              // 5.6.1.2 (2013/02/22) 互換性
580                            for( int i=0; i<rowNo.length; i++ ) {
581                                    String[] src = table.getValues( rowNo[i] );
582                                    String[] dst = new String[ table.getColumnCount() ];
583                                    System.arraycopy( src,0,dst,0,dst.length );
584                                    dst = setColumnValues( dst );
585    
586                                    table.setValues( dst,rowNo[i] );
587                                    table.setRowWritable( rowNo[i],true );
588                                    table.setRowChecked(  rowNo[i],true );
589                            }
590                    }
591            }
592    
593            /**
594             * リクエスト情報の??ブルモ???タを?リセ?します?
595             *
596             * @og.rev 5.6.5.2 (2013/06/21) 行ループを 0?最終行? 降?で廻します?
597             */
598            private void reset() {
599                    for( int i=rowNo.length-1; i>=0; i-- ) {
600    //              for( int i=0; i<rowNo.length; i++ ) {
601                            table.resetRow( rowNo[i] );
602                    }
603            }
604    
605            /**
606             * ??ブルモ???タを?全件リセ?します?
607             *
608             * @og.rev 3.5.6.3 (2004/07/12) 新規作?
609             * @og.rev 5.6.5.2 (2013/06/21) 行ループを 0?最終行? 降?で廻します?
610             */
611            private void allReset() {
612                    int rowCount = table.getRowCount();
613                    for( int row=0; row<rowCount; row++ ) {
614                            table.resetRow( row );
615                    }
616    
617    //              int rowMax = table.getRowCount()-1 ;
618    //              for( int i=rowMax; i>=0; i-- ) {
619    //                      table.resetRow( i );
620    //              }
621            }
622    
623            /**
624             * DBTableModelの全ての行に対して,値をセ?します?
625             *
626             * @og.rev 5.6.5.2 (2013/06/21) 行ループを 0?最終行? 降?で廻します?
627             */
628            private void allAction() {
629                    int rowCount = table.getRowCount();
630                    for( int row=0; row<rowCount; row++ ) {
631                            String[] src = table.getValues( row );
632                            String[] dst = new String[ table.getColumnCount() ];
633                            System.arraycopy( src,0,dst,0,dst.length );
634                            dst = setColumnValues( dst );
635    
636                            table.setValues( dst,row );
637                            table.setRowWritable( row,true );
638                            table.setRowChecked(  row,true );
639                    }
640    
641    //              int rowMax = table.getRowCount()-1 ;            // 3.5.6.3 (2004/07/12)
642    //              for( int i=rowMax; i>=0; i-- ) {
643    //                      String[] src = table.getValues( i );
644    //                      String[] dst = new String[ table.getColumnCount() ];
645    //                      System.arraycopy( src,0,dst,0,dst.length );
646    //                      dst = setColumnValues( dst );
647    //
648    //                      table.setValues( dst,i );
649    //                      table.setRowWritable( i,true );
650    //                      table.setRowChecked(  i,true );
651    //              }
652            }
653    
654            /**
655             * リクエスト情報の??ブルモ???タを?リセ?します?
656             * (?、リセ?された行?、チェ?された状態?ままになりま?
657             *
658             * @og.rev 4.3.3.0 (2008/10/01) 新規作?
659             * @og.rev 5.6.5.2 (2013/06/21) 行ループを 0?最終行? 降?で廻します?
660             */
661            private void resetData() {
662    //              for( int i=rowNo.length-1; i>=0; i-- ) {
663                    for( int i=0; i<rowNo.length; i++ ) {
664                            String cdkh = table.getModifyType( rowNo[i] );
665                            table.resetRow( rowNo[i] );
666                            // 更新又?、削除の時?み書き込み可能になる?
667                            if( DBTableModel.UPDATE_TYPE.equals( cdkh ) || DBTableModel.DELETE_TYPE.equals( cdkh ) ) {
668                                    table.setRowWritable( rowNo[i],true );
669                                    table.setRowChecked(  rowNo[i],true );
670                            }
671                    }
672            }
673    
674            /**
675             * DBTableModelに行を追?ます?(1行?み)
676             *
677             * 行が選択されて?かど?に関わらず?1行?みを追?ます?
678             * (動きとしては、行が選択されて??態でINSERTコマンドを発行した?合と同じで?
679             *
680             * @og.rev 5.1.5.0 (2010/04/01) 新規作?
681             *
682             */
683            private void insertOne() {
684                    rowNo = new int[0];
685                    insert();
686            }
687    
688            /**
689             * DBTableModelの行を物?除します?
690             *
691             * 通常の??タベ?ス等で削除する場合?、DELETE行も残しておかな?、どの行を削除する?
692             * 判らなくなります?また?アプリケーションによっては、削除ではなく?フラグ?を立て?
693             * ケースもあるため?現在の commend="DELETE" では、論理削除??の書き換えも可能になって?す?
694             * ここでの物?除は、WriteTable など、ファイル出力時には、その行そのも?をなくしておくほ?
695             * 良?ースがあるためです?
696             *
697             * @og.rev 5.1.6.0 (2010/05/01) REALDELETE コマンドを追?る?
698             */
699            private void realDelete() {
700                    // ??にしな?、行番号がずれてしま??
701                    for( int i=rowNo.length-1; i>=0; i-- ) {
702                            table.removeValue( rowNo[i] );
703                    }
704            }
705    
706            /**
707             * リクエスト情報から、セ?されたカラ?と値を取り?し?設定します?
708             *
709             * 設定?は、???キー??__" ??行番号 です?
710             * ENTRYコマンドとの違いは、h_rowSel と無関係に、リクエストされた変数すべて?
711             * 処?ます?
712             *
713             * @og.rev 5.6.1.2 (2013/02/22) 新規追?
714             */
715            private void reqEntry() {
716                    setRequestValues( true );       // リクエストされた変数すべてを??
717                    int rowCount = table.getRowCount();
718                    for( int row=0; row<rowCount; row++ ) {
719                            String[] src = table.getValues( row );
720                            String[] dst = new String[ table.getColumnCount() ];
721                            System.arraycopy( src,0,dst,0,dst.length );
722                            dst = setColumnValues( dst );
723    
724                            table.setValues( dst,row );
725                            table.setRowWritable( row,true );
726                            table.setRowChecked(  row,true );
727                    }
728            }
729    
730            /**
731             * リクエスト情報から、セ?されたカラ?と値を取り?し?設定します?
732             *
733             * 設定?は、???キー??__" ??行番号 です?
734             * よって、?は,??設定されて?す?
735             *
736             * @og.rev 3.1.0.0 (2003/03/20) 名前と行番号の区?記号?"^" から "__" に変更?
737             * @og.rev 3.5.5.0 (2004/03/12) 名前と行番号の区?記号("__")を?HybsSystem.JOINT_STRING  に変更?
738             * @og.rev 3.6.0.6 (2004/10/22) chboxNames 属?は?します?
739             * @og.rev 3.8.0.1 (2005/06/17) チェ?ボックス対応で、エラーチェ?をPL/SQLで行う場合?処??の追?
740             * @og.rev 3.8.0.2 (2005/07/11) チェ?ボックス対応で、判定を DBColumnのgetEditor()を使用しま?
741             * @og.rev 4.0.0.0 (2006/09/31) strictCheck 追??
742             * @og.rev 4.3.7.3 (2009/06/22) HSQLDB対応でリクエストが空??場合?null?に変換する
743             * @og.rev 5.0.0.2 (2009/09/15) XSS対?ALLはチェ?しな?
744             * @og.rev 5.6.1.2 (2013/02/22) isAllRow 引数追?
745             *
746             * @param isAllRows 選択行番号に関係なく?処?るかど?
747             */
748    //      private void setRequestValues() {
749            private void setRequestValues( final boolean isAllRows ) {
750                    Enumeration<?> enume = getParameterNames();               // 4.3.3.6 (2008/11/15) Generics警告対?
751    
752                    while( enume.hasMoreElements() ) {
753                            String key  = (String)(enume.nextElement());
754                            int    idx  = key.lastIndexOf(HybsSystem.JOINT_STRING);
755    
756                            if( idx > 0 ) {
757                                    String  column  = key.substring(0,idx);
758                                    int             clmNo   = table.getColumnNo( column,strictCheck );
759                                    if( clmNo < 0 ) { continue; }        // strictCheck 対?
760                                    DBColumn dbColumn = table.getDBColumn( clmNo );
761                                    int      row      = Integer.parseInt( key.substring(idx + 2) );
762                                    // 5.0.0.2 (2009/09/15) ?種別ALLはXSSチェ?しな?
763                                    // String   val      = dbColumn.valueSet( getRequestValue( key ) );
764                                    String   val = null;
765                                    if( "ALL".equals( dbColumn.getDbType() ) ){
766                                            val = dbColumn.valueSet( getRequestValue( key, false ) );
767                                    }
768                                    else{
769                                            val = dbColumn.valueSet( getRequestValue( key ) );
770                                    }
771    
772                                    // 3.6.0.6 (2004/10/22) チェ?ボックスはマルチで??タが来ます?
773                                    // 3.8.0.2 (2005/07/11) 判定を DBColumnのgetEditor()を使用
774                                    if( "0".equals(val) && "CHBOX".equals( dbColumn.getEditor() ) ) {
775                                            String[] vals = getRequestValues( key );
776                                            if( vals != null ) {
777                                                    for( int i=0; i<vals.length; i++ ) {
778                                                            if( "1".equals( vals[i] ) ) { val = "1"; break; }
779                                                    }
780                                            }
781                                    }
782    
783                                    // 5.6.1.2 (2013/02/22) リクエスト変数すべての??タを設?
784                                    if( isAllRows ) {
785                                            // 4.3.7.3 (2009/06/22) HSQLDB対?
786                                            if( val != null && val.length() == 0 ){
787                                                    val = null;
788                                            }
789                                            table.setValue(row, column, val );
790                                    }
791                                    // 従来のロジ?(チェ?を外してSUBMITするケースを想定して??
792                                    else {
793                                            // rowNo は、getParameterRows メソ?でソートされて?ので?
794                                            // java.util.Arrays#binarySearch(int[] a, int key) が使えるはず?
795                                            // 十?に?トして??め?今?変更しな??
796                                            for( int i=0; i<rowNo.length; i++ ) {
797                                                    if( rowNo[i] == row ) {
798                                                            // 4.3.7.3 (2009/06/22) HSQLDB対?
799                                                            if( val != null && val.length() == 0 ){
800                                                                    val = null;
801                                                            }
802                                                            table.setValue(row, column, val );
803                                                    }
804                                            }
805                                    }
806                            }
807                    }
808            }
809    
810            /**
811             * ColumnSetTag で?された条件を?に、その行?値を書き換えます?
812             *
813             * @og.rev 3.6.0.6 (2004/10/22) conditionKey と?conditionList 属?を追?
814             * @og.rev 3.8.1.5 (2006/03/30) writableControl を使用したカラ?ータの先?アン??バ?を削除します?
815             * @og.rev 4.0.0.0 (2006/09/31) strictCheck 追??
816             * @og.rev 4.3.7.3 (2009/06/22) HSQLDB対応で空??NULL
817             * @og.rev 5.6.5.2 (2013/06/21) valueの初期値を利用して?レコードごとに?1した?をセ?します?
818             *
819             * @param       val ?行データ配?
820             *
821             * @return      変更後??行データ配?
822             */
823            private String[] setColumnValues( final String[] val ) {
824                    if( values != null ) {
825                            int size = values.size();
826                            for( int i=0; i<size; i++ ) {
827                                    Attributes attri = values.get( i );
828                                    String columnId = attri.get( "columnId" );
829                                    int clmNo = table.getColumnNo( columnId,strictCheck );
830                                    if( clmNo < 0 ) { continue; }        // strictCheck 対?
831                                    String action = attri.get( "action" );
832                                    String newVal = attri.get( "value"  );
833                                    String oldVal = val[clmNo];
834    
835                                    // 3.6.0.6 (2004/10/22) 条件による処??実行可否判?
836                                    String conditionList = attri.get( "conditionList" );
837                                    if( conditionList != null ) {   // null の場合?、無条件実?
838                                            String conditionKey = attri.get( "conditionKey" );
839                                            int condClmNo = table.getColumnNo( conditionKey );
840                                            String condValue = "|" + val[condClmNo] + "|";
841                                            if( conditionList.indexOf( condValue ) < 0 ) {
842                                                    continue;
843                                            }
844                                    }
845    
846                                    if( ACT_COPY.equals( action ) ) {
847                                            int copyClmNo = table.getColumnNo( newVal );    // newVal はコピ??ラ?
848                                            val[clmNo] = val[copyClmNo];
849                                    }
850                                    else if( ACT_TBLSET.equals( action ) ) {
851    //                                      if( format == null ) {
852    //                                              format = new Formatter( model );
853    //                                      }
854                                            ArrayDataModel model = new ArrayDataModel( table.getNames() );
855                                            model.setValues( val,0 );
856                                            Formatter format = new Formatter( model );
857                                            format.setFormat( newVal );             // newValue はフォーマットされた??
858                                            val[clmNo] = format.getFormatString( 0 );
859                                    }
860                                    // 3.8.1.5 (2006/03/30) writableControl を使用したカラ?ータの先?アン??バ?を削除します?
861                                    else if( ACT_WRTCTRL.equals( action ) ) {
862                                            if( oldVal != null && oldVal.length() > 0 && oldVal.charAt(0) == '_' ) {
863                                                    val[clmNo] = oldVal.substring( 1 );
864                                            }
865                                    }
866                                    // 3.8.5.3 (2006/08/07) DBMENUでパラメータ設?コロン連結文?を使用したカラ?ータの先???タのみにします?
867                                    else if( ACT_DBMENU.equals( action ) ) {
868                                            if( oldVal != null && oldVal.length() > 0 ) {
869                                                    int adrs = oldVal.indexOf( ':' );
870                                                    if( adrs >= 0 ) {
871                                                            val[clmNo] = oldVal.substring( 0,adrs );
872                                                    }
873                                            }
874                                    }
875                                    // 5.4.2.1 (2011/12/09) valueで?したカラ??値をキーに、リクエスト変数から値を取出し?セ?します?
876                                    else if( ACT_REQSET.equals( action ) ) {
877                                            if( newVal != null && newVal.length() > 0 ) {
878                                                    int reqClmNo = table.getColumnNo( newVal );     // newVal はリクエスト取得?カラ?
879                                                    String reqClm = val[reqClmNo];                          // こ?時点では、コロン引数が付いて?可能性がある?
880    
881                                                    int adrs = reqClm.indexOf( ':' );                       // 先?がカラ?
882                                                    if( adrs >= 0 ) {
883                                                            reqClm = reqClm.substring( 0,adrs );    // コロンより前方の?け取り?す?
884                                                    }
885                                                    val[clmNo] = getRequestValue( reqClm );
886                                            }
887                                    }
888                                    // 5.6.5.2 (2013/06/21) valueの初期値を利用して?レコードごとに?1した?をセ?します?
889                                    else if( ACT_SEQSET.equals( action ) ) {
890                                            int intVal = seqsetCnt ;
891                                            if( newVal != null && newVal.length() > 0 ) {
892                                                    intVal += Integer.parseInt( newVal );           // value の設定?
893                                            }
894                                            val[clmNo] = String.valueOf( intVal );
895                                    }
896                                    else {
897                                            val[clmNo] = actionExec( action,columnId,oldVal,newVal );
898                                    }
899    
900                                    // 4.3.7.3 (2009/06/22) HSQLDB対?
901                                    if( val[clmNo] != null && val[clmNo].length() == 0){
902                                            val[clmNo] = null;
903                                    }
904                            }
905                    }
906                    seqsetCnt ++ ;          // // 5.6.5.2 (2013/06/21) SEQSET のカウンター?
907    
908                    return val;
909            }
910    
911            /**
912             * アクションを実行します?
913             *
914             * アクションは,??アクションコマンドに対応する??入力データに
915             * 対して行います?
916             *
917             * @og.rev 3.4.0.3 (2003/09/10) NULLSET Action を追?ます?
918             * @og.rev 5.6.0.3 (2012/01/24) ADD Action に、value引数の値を加算する機?を追?ます?
919             * @og.rev 5.6.6.1 (2013/07/12) action に、PREFIX,SUFIX を追?ます?
920             *
921             * @param   action アクションコマン?
922             * @param   clmId カラ??
923             * @param   oldValue 入力データ(旧??タ)
924             * @param   newValue 入力データ(新??タ)
925             *
926             * @return      実行後???タ
927             * @see         <a href="{&#064;docRoot}/constant-values.html#org.opengion.hayabusa.taglib.EntryTag.ACT_DEFAULT">アクション定数</a>
928             */
929            private String actionExec( final String action,final String clmId,
930                                                                    final String oldValue,final String newValue ) {
931                    String rtnVal = oldValue;
932    
933                    DBColumn dbColumn = getDBColumn( clmId );
934                    if( ACT_DEFAULT.equals(    action ) ) { rtnVal = dbColumn.getDefault(); }
935                    else if( ACT_CLEAR.equals( action ) ) { rtnVal = ""; }
936                    else if( ACT_SET.equals(   action ) ) { rtnVal = dbColumn.valueSet( newValue ); }
937    //              else if( ACT_ADD.equals(   action ) ) { rtnVal = dbColumn.valueAdd( oldValue ); }
938                    else if( ACT_ADD.equals(   action ) ) { rtnVal = dbColumn.valueAdd( oldValue,newValue ); }      // 5.6.0.3 (2012/01/24)
939                    else if( ACT_LOWER.equals( action ) ) {
940                            if( oldValue == null ) { rtnVal = dbColumn.getDefault();  }
941                            else                   { rtnVal = oldValue.toLowerCase(Locale.JAPAN); }
942                    }
943                    else if( ACT_UPPER.equals( action ) ) {
944                            if( oldValue == null ) { rtnVal = dbColumn.getDefault();  }
945                            else                   { rtnVal = oldValue.toUpperCase(Locale.JAPAN); }
946                    }
947                    // 3.4.0.3 (2003/09/10) NULLSET Action を追?ます?
948                    else if( ACT_NULLSET.equals( action ) ) {
949                            if( oldValue == null || oldValue.length() == 0 ) {
950                                    rtnVal = dbColumn.valueSet( newValue );
951                            }
952                    }
953                    // 5.6.6.1 (2013/07/12) PREFIX Action を追?ます?
954                    else if( ACT_PREFIX.equals( action ) ) {
955                            if( oldValue != null && oldValue.length() > 0 && newValue != null && newValue.length() > 0 ) {
956                                    int indx = oldValue.lastIndexOf( newValue );
957                                    if( indx >= 0 ) {
958                                            rtnVal = oldValue.substring( 0,indx );
959                                    }
960                            }
961                    }
962                    // 5.6.6.1 (2013/07/12) SUFIX Action を追?ます?
963                    else if( ACT_SUFIX.equals( action ) ) {
964                            if( oldValue != null && oldValue.length() > 0 && newValue != null && newValue.length() > 0 ) {
965                                    int indx = oldValue.lastIndexOf( newValue );
966                                    if( indx >= 0 ) {
967                                            rtnVal = oldValue.substring( indx+1 );          // ?記号は含まな??で?1する?
968                                    }
969                            }
970                    }
971                    else {
972                            rtnVal = dbColumn.valueAction( action,oldValue,newValue );
973                    }
974    
975                    if( rtnVal == null ) { rtnVal = dbColumn.getDefault(); }
976    
977                    return rtnVal;
978            }
979    
980            /**
981             * 【TAG】指定?回数?け?繰り返し処?行う回数を指定しま?初期値:1)?
982             *
983             * @og.tag
984             * 追???時に、指定?回数?け?処?繰り返して、新規に行を
985             * 作?します?
986             * 繰り返しは、指定?行に対して行われ?繰り返し毎に、直前に作?され?
987             * 行を?処?ます?これは、例えば、columnSet で、action="ADD"の場合に?
988             * 繰り返す毎に、ADD処?実行されることを意味します?
989             * 行が?されて???合?、?頭空行に追?ます?
990             * 初期値は?回です?
991             *
992             * @og.rev 3.5.4.2 (2003/12/15) 新規追?
993             *
994             * @param       rc      繰り返し処?行う回数を指?初期値:1)
995             */
996            public void setRepeatCount( final String rc ) {
997                    repeatCount = nval( getRequestParameter( rc ),repeatCount );
998            }
999    
1000            /**
1001             * 【TAG】Consistency キー による整合?チェ?を行うかど?を指定しま?初期値:true)?
1002             *
1003             * @og.tag
1004             * 検索結果?DBTableModel にセ?する時に、整合?キーの Consistency キー?
1005             * 作?します?これを?Viewタグでhidden出力しておき、Entryタグで??タ書き換え時に
1006             * 整合?チェ?を行います?これは、IEの戻る?タンで戻った?合に、画面の
1007             * キーと検索結果の DBTableModel の?が??しな??合?エラーチェ?に
1008             * なります?
1009             * こ?属?は、何らか?ケースで、このエラーチェ?を行いたくな??合に?
1010             * false に設定することで、整合?チェ?を行いません?
1011             * 初期値は、true(整合?チェ?を行う)です?
1012             *
1013             * @og.rev 3.5.5.7 (2004/05/10) 新規登録
1014             *
1015             * @param       ck      Consistency Key の使用するかど?(初期値:true)
1016             */
1017            public void setUseConsistency( final String ck ) {
1018                    useConsistency = nval( getRequestParameter( ck ),useConsistency );
1019            }
1020    
1021            /**
1022             * DBTableModel の 整合?パラメータとリクエスト情報を比?ェ?します?
1023             * リクエスト情報は、その DBTableModel が?力された view で hidden 属?で
1024             * 設定されます?
1025             * 設定されるキーは、tableId が変更されて?ければ、HybsSystem.CONSISTENCY_KEY です?
1026             * 変更されて?ば、HybsSystem.CONSISTENCY_KEY + tableId です?
1027             *
1028             * @og.rev 3.5.5.8 (2004/05/20) Consistency キー による整合?チェ??checkConsistency() に??ます?
1029             *
1030             * @return チェ?結果  true:正常/false:異常
1031             * @see org.opengion.hayabusa.common.HybsSystem#CONSISTENCY_KEY
1032             */
1033            private boolean checkConsistency() {
1034                    boolean rtn = true;
1035                    String key = HybsSystem.CONSISTENCY_KEY ;
1036    
1037                    String consisKey = getRequestValue( key );
1038                    if( consisKey != null && consisKey.length() > 0 ) {
1039                            if( useConsistency && ! consisKey.equals( table.getConsistencyKey() ) ) {
1040    
1041                                    ErrorMessage errMsgObj = new ErrorMessage( "Consistency Key Check Error!" );
1042                                    errMsgObj.addMessage( 0,ErrorMessage.NG,"ERR0033.1" );
1043                                    errMsgObj.addMessage( 0,ErrorMessage.NG,"ERR0033.2" );
1044                                    errMsgObj.addMessage( 0,ErrorMessage.NG,"ERR0033.3" );
1045                                    jspPrint( TaglibUtil.makeHTMLErrorTable( errMsgObj,getResource() ) );
1046                                    rtn = false;
1047                            }
1048                    }
1049                    else {
1050                            System.out.println( "EntryTag:Consistency Key is null" );
1051                    }
1052                    return rtn ;
1053            }
1054    
1055            /**
1056             * 表示??タの HybsSystem.ROW_SEL_KEY を?に?ばれた 行を処??対象とします?
1057             *
1058             * <del>rowNo[] ?null の場合?み、取込を行います?</del>
1059             *
1060             * @og.rev 3.8.1.1 (2005/11/21) selectedAll 追??全件選択されたこととして、??ます?
1061             * @og.rev 4.0.0.0 (2005/01/31) getParameterRows() を使用するように変更
1062             *
1063             * @return      選択行?配?
1064             */
1065            @Override
1066            protected int[] getParameterRows() {
1067                    final int[] rowNo ;
1068                    if( selectedAll ) {
1069                            int rowCnt = table.getRowCount();               // 3.5.5.7 (2004/05/10)
1070                            rowNo = new int[ rowCnt ];
1071                            for( int i=0; i<rowCnt; i++ ) {
1072                                    rowNo[i] = i;
1073                            }
1074                    } else {
1075                            rowNo = super.getParameterRows();               // 4.0.0 (2005/01/31)
1076                    }
1077                    return rowNo ;
1078            }
1079    
1080            /**
1081             * 【TAG】データを?件選択済みとして処?るかど?[true/false]を指定しま?初期値:false)?
1082             *
1083             * @og.tag
1084             * 全ての??タを選択済み??タとして扱って処?ます?
1085             * 全件処?る?合に?true/false)を指定します?
1086             * 初期値は false です?
1087             *
1088             * @param  all ??タを?件選択済み [true:全件選択済み/false:通常]
1089             */
1090            public void setSelectedAll( final String all ) {
1091                    selectedAll = nval( getRequestParameter( all ),selectedAll );
1092            }
1093    
1094            /**
1095             * 【TAG】カラ??の存在チェ?を行うかど?[true/false]を指定しま?初期値:true)?
1096             *
1097             * @og.tag
1098             * true の場合?カラ??がDBTableModel に存在しな??合?、エラーになります?
1099             * false の場合?カラ??がDBTableModel に存在しな??合?、無視します?
1100             * これは、検索条件によって、設定されるカラ?異なる?合でも?entryタグ?
1101             * 正常に動作させた??合に、使用します?
1102             * 初期値は true (チェ?を行う) です?
1103             *
1104             * @param  check 存在チェ?を行うかど? [true:行う/false:行わない]
1105             */
1106            public void setStrictCheck( final String check ) {
1107                    strictCheck = nval( getRequestParameter( check ),strictCheck );
1108            }
1109    
1110            /**
1111             * 【TAG?通常は使?せん)画面遷移を行わな?式?登録方法を使用するかを?します?
1112             *
1113             * @og.tag
1114             * 画面遷移なし?登録を行うかど?を指定します?
1115             * trueが指定された場合?entryタグでは、行?追????時にDBTableModel上??行に??タ?
1116             * 追?ます?
1117             * 画面遷移なしモード?場合?途中行に挿入された?合?既にクライアントに出力されて?
1118             * チェ?ボックスの行番号?入力フィールド?変数名との整合?を合わせるためには?
1119             * 編?以降??数値を?て再計算する?があります?
1120             * こ?処??、レスポンス悪化に繋がるため?DBTableModel上?、中間に行?挿入を行いません?
1121             * ?画面表示上???常通り選択行?直下に行が挿入されるため?DBTableModelの?と標準??
1122             * 異なります?(エンジン側では、各チェ?ボックスの値で行を識別して?ため、問題?発生しません)
1123             *
1124             * こ?値は、og:headタグで設定?、また?前画面からの値を継承するため??常、この属?ではセ?しません?
1125             *
1126             * @og.rev 4.3.3.0 (2008/10/01) 新規追?
1127             * @og.rev 5.1.3.0 (2010/02/01) noTransition、ajaxSubmitのコントロールは、requestで行う?
1128             *
1129             * @param   noTrnstn 画面遷移を行わな?式?登録方法を使用する?
1130             */
1131            public void setNoTransition( final String noTrnstn ) {
1132                    setNoTransitionRequest( nval( getRequestParameter( noTrnstn ), isNoTransitionRequest() ) );
1133    //              noTransition = nval( getRequestParameter( noTrnstn ), noTransition );
1134            }
1135    
1136            /**
1137             * シリアライズ用のカスタ?リアライズ書き込みメソ?
1138             *
1139             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
1140             * @serialData
1141             *
1142             * @param       strm    ObjectOutputStreamオブジェク?
1143             */
1144            private void writeObject( final ObjectOutputStream strm ) throws IOException {
1145                    strm.defaultWriteObject();
1146            }
1147    
1148            /**
1149             * シリアライズ用のカスタ?リアライズ読み込みメソ?
1150             *
1151             * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します?
1152             *
1153             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
1154             * @serialData
1155             *
1156             * @param       strm    ObjectInputStreamオブジェク?
1157             * @see #release2()
1158             */
1159            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
1160                    strm.defaultReadObject();
1161            }
1162    
1163            /**
1164             * こ?オブジェクト???表現を返します?
1165             * 基本???目?使用します?
1166             *
1167             * @return こ?クラスの??表現
1168             */
1169            @Override
1170            public String toString() {
1171                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
1172                                    .println( "VERSION"                                     ,VERSION                                )
1173                                    .println( "tableId"                                     ,tableId                                )
1174                                    .println( "command"                                     ,command                                )
1175                                    .println( "rowNo"                               ,rowNo                          )
1176                                    .println( "repeatCount"                         ,repeatCount                    )
1177                                    .println( "useConsistency"                      ,useConsistency                 )
1178                                    .println( "selectedAll"                         ,selectedAll                    )
1179                                    .println( "strictCheck"                         ,strictCheck                    )
1180                                    .println( "noTransition"                        ,noTransition                   )
1181                                    .println( "RESET_ACTION_ALL_USE"        ,RESET_ACTION_ALL_USE   )
1182                                    .println( "Other..."                            ,getAttributes().getAttribute() )
1183                                    .fixForm().toString() ;
1184            }
1185    }