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.common.HybsSystemException;
020    import org.opengion.hayabusa.db.DBColumn;
021    import org.opengion.hayabusa.db.DBTableModel;
022    import org.opengion.hayabusa.db.DBTableModelUtil;
023    
024    import org.opengion.fukurou.util.StringUtil;
025    import static org.opengion.fukurou.util.StringUtil.nval ;
026    
027    import java.util.Map;
028    import java.util.LinkedHashMap;
029    import java.util.Locale ;
030    
031    /**
032     * ?’ã¤ã® DBTableModel ã® é›?ˆå‡¦ç?‚’行ã†ã‚¿ã‚°ã§ã™ã?
033     *
034     * マスタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã?ãれãžã‚Œã® DBTableModel ã‚’å–å¾—ã—ã€ã?ージã€å·®åˆ??排他ãªã©ã®
035     * ãƒ??タ処ç?‚’行ã„ã¾ã™ã?çµæžœã‚’ã?æŒ?®šã? tableId 㨠scope ã«æ›¸ãå?ã—ã¾ã™ã?
036     * マスタãƒ??ブルã¯ã€masterTableId 㨠masterScope よりå–り出ã—ã¾ã™ã?スレーブテーブルã¯ã€?
037     * slaveTableId 㨠slaveScope よりå–り出ã—ã¾ã™ã?
038     * å–り出ã•れã?DBTableModel ã¯ã€ã?スタãƒ??ブルã«å¯¾ã—ã¦ã€ã‚¹ãƒ¬ãƒ¼ãƒ–テーブルæƒ??ã‚’å‚ç…§ã™ã‚‹å½¢ã§è¡Œã‚れã?
039     * çµæžœã¯ãƒžã‚¹ã‚¿ãƒ??ブルã«ä¸Šæ›¸ãã•れる形ã§è¡Œã‚れã¾ã™ã?
040     * æŒ?®šã§ãるアクションã¯ã€å?体集å?UNION_ALL)ã€å’Œé›?ˆ(UNION)ã€ç©é›†å?INTERSECT)ã€?
041     * å·®é›?ˆ(MINUS)ã€å·®åˆ?›†å?DIFFERENCE)ã€å?åˆæ?(UNION_CLM)ã€?列追åŠ?ADD_CLM)ã€?グルーãƒ?GROUP)ã§ã™ã?
042     * åˆ—åˆæˆã¨åˆ—追åŠ??グループ以外ã?処ç?§ã¯ã€ã‚«ãƒ©ãƒ??ã¨ã‚«ãƒ©ãƒ?•°ã¯åŒæ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€?
043     * primaryKeys ã‚?unionClms ãªã©ã®æŒ?®šã?キーåã?ã€ã?スタãƒ??ブルã«å­˜åœ¨ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?
044     * マスタãƒ??ブルã¨åŒã˜ã‚«ãƒ©ãƒ?•ªå·ã§ã‚¹ãƒ¬ãƒ¼ãƒ–テーブルよりãƒ??タを読ã¿å‡ºã—ã¾ã™ã?
045     * (カラãƒ?ã‚?±žæ?ã¯ã€ç•°ãªã£ã¦ã‚‚ã‹ã¾ã?¾ã›ã‚“ãŒã?マスタãƒ??ãƒ–ãƒ«ã«æº–æ‹ ã—ã¾ã™ã?)
046     * ã¾ãŸã?å˜ç‹¬(マスタãƒ??ブルã®ã¿)ã§ã€å’Œé›?ˆã¨åŒç­‰ã?ã€ã‚°ãƒ«ãƒ¼ãƒ?GROUP)を使用ã™ã‚‹ã¨ã€æŒ‡å®šã?
047     * カラãƒ?§ã®ãƒ¦ãƒ‹ã?ク化を行ã†ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã?グループå?ç?§ã¯ã€å?行優先ã¨ã—ã?
048     * ?’回目ã«ç¾ã‚ŒãŸæƒ??を削除ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã?グルーãƒ?ãŒæŒ‡å®šã•れãŸå ´åˆã?ã€?
049     * スレーブテーブルã¯ç„¡è¦–ã•れã¾ã™ã?ã?šã‚Œã?処ç?«ãŠã„ã¦ã‚‚ã?é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼ã§
050     * ä¸?—¦ã‚°ãƒ«ãƒ¼ãƒ—化ã•れã¾ã™ã?全体集å?UNION_ALL)ã§å‡¦ç?™ã‚‹å?åˆã§ã‚‚ã?主キーãŒãƒ¦ãƒ‹ã?クã§
051     * ãªã??åˆã?ã€ã?スターã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã?å?ƒ†ãƒ¼ãƒ–ルã§ä¸?—¦ã‚°ãƒ«ãƒ¼ãƒ—化ã•れãŸå¾Œã§ã€ã?ージã•れã¾ã™ã?
052     * (マã?ジ後ã«ã¯ã€åŒä¸?¸»ã‚­ãƒ¼ã‚’æŒã¤è¡Œã?存在ã—ã¾ã™ã?)
053     * 全体集å?UNION_ALL)ã®å ´åˆã?ã¿ã€mergeKeys を指定ã™ã‚‹å¿?¦ã?ã‚りã¾ã›ã‚“。ãã®å ´åˆã?ã€?
054     * キーãªã—ã?ãŸã‚ã€ã?スターã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã?ãƒ??ブルをå˜ã«åˆæ?ã™ã‚‹ã?‘ã«ãªã‚Šã¾ã™ã?
055     *
056     * 処ç?‰å¾Œã§ã®DBTableModelã®ä»¶æ•°ã¯ã€ä»¥ä¸‹ã?変数ã§å–å¾—ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã?
057     *  処ç?‰ã®ãƒžã‚¹ã‚¿ãƒ¼ãƒ??ブル : {@DB.MASTER_COUNT}
058     *  処ç?‰ã®ã‚¹ãƒ¬ãƒ¼ãƒ–テーブル : {@DB.SLAVE_COUNT}
059     *  処�?                  : {@DB.COUNT}
060     *
061     * @og.formSample
062     * â—å½¢å¼ï¼?
063     *       ・<og:tableMerge
064     *             action        = "UNION_ALL|UNION|INTERSECT|MINUS|DIFFERENCE|UNION_CLM|ADD_CLM|GROUP|UNION_SELROW"
065     *             tableId       = "DEFAULT"        出力テーブル㮠tableId
066     *             scope         = "session"        出力テーブル㮠scope
067     *             masterTableId = "DEFAULT"        マスタ�?ブル㮠tableId
068     *             masterScope   = "session"        マスタ�?ブル㮠scope
069     *             slaveTableId  = "DEFAULT"        スレーブテーブル㮠tableId
070     *             slaveScope    = "request"        スレーブテーブル㮠scope
071     *             masterKeys    = "AA,BB,CC"       マスタãƒ??ブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼
072     *             slaveKeys     = "AA,BB,CC"       スレーブテーブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼(nullæ™?masterKeys)
073     *             diffKeys      = "DD,EE"          マスタãƒ??ブルã®DIFFERENCE時ã?å·®åˆ?‚«ãƒ©ãƒ?
074     *             unionClms     = "DD,EE"          UNION_CLM,ADD_CLM時ã«ã‚¹ãƒ¬ãƒ¼ãƒ–ã‹ã‚‰ã?スタã¸è¿½åŠ?™ã‚‹ã‚«ãƒ©ãƒ?
075     *             modifyClms    = "FF,GG"          DIFFERENCE時ã«ã‚¹ãƒ¬ãƒ¼ãƒ–ã‹ã‚‰ã?スタã¸å€¤ã‚’æ›´æ–°ã™ã‚‹ã‚«ãƒ©ãƒ?
076     *             noSideEffect  = "false"          ãƒ??ブルモãƒ?ƒ«ã«å¯¾ã™ã‚‹å‰¯ä½œç”¨(true:ãªã?false:ã‚ã‚‹)
077     *             useDiffData   = "true"           DIFFERENCE時ã«å·®åˆ??スレーブデータを追åŠ?™ã‚‹ã‹ã©ã?‹
078     *             useCheckOnly  = "false"          マスタãƒ??ブルã®é¸æŠžè¡Œã?ãƒ??ã‚¿ã®ã¿ã‚’対象ã«å‡¦ç?‚’行ã†ã‹ã©ã?‹
079     *             groupAddClms  = "FF,GG"          masterKeysã§é›?ˆå‡¦ç?™ã‚‹ã¨ãã«ã€ç›¸é•データをCSV連çµã—ã¦æ®‹ã™ã‚«ãƒ©ãƒ?
080     *             display       = "true"           処ç?¦‚è¦ã‚’表示ã™ã‚‹ã‹ã©ã?‹
081     *         />
082     * â—body?šãªã?
083     *
084     * â—Tag定義??
085     *   <og:tableMerge
086     *       command            ã€TAG】コマンãƒ?NEW,RENEW)ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:NEW)
087     *       action             ã€TAG】アクションを指定ã—ã¾ã?UNION_ALL|UNION|INTERSECT|MINUS|DIFFERENCE|UNION_CLM|ADD_CLM|GROUP|UNION_SELROW)
088     *       tableId            ã€TAG】å?力å?ã®tableIdを指定ã—ã¾ã?(åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[=h_tblmdl])
089     *       scope              ã€TAG】å?力å?ã®scopeを指定ã—ã¾ã?åˆæœŸå€¤:session)
090     *       masterTableId      ã€TAG】ã?スタãƒ??ブルã®tableIdを指定ã—ã¾ã?(åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[=h_tblmdl])
091     *       masterScope        ã€TAG】ã?スタãƒ??ブルã®scopeを指定ã—ã¾ã?åˆæœŸå€¤:session)
092     *       slaveTableId       ã€TAG】スレーブテーブルã®tableIdを指定ã—ã¾ã?(åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[=h_tblmdl])
093     *       slaveScope         ã€TAG】スレーブテーブルã®scopeを指定ã—ã¾ã?åˆæœŸå€¤:session)
094     *       masterKeys         ã€TAG】ã?スタãƒ??ブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼ã‚’指定ã—ã¾ã?
095     *       slaveKeys          ã€TAG】スレーブテーブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼ã‚’指定ã—ã¾ã?
096     *       diffKeys           ã€TAG】ã?スタãƒ??ブルã®DIFFERENCE時ã?å·®åˆ?‚«ãƒ©ãƒ?ã‚?CSVå½¢å¼?æŒ?®šã—ã¾ã?
097     *       unionClms          ã€TAG】スレーブã‹ã‚‰ã?スタã¸è¿½åŠ?™ã‚‹ã‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®šã—ã¾ã?
098     *       modifyClms         ã€TAG】スレーブã‹ã‚‰ã?スタã¸å€¤ã‚’æ›´æ–°ã™ã‚‹ã‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®šã—ã¾ã?
099     *       groupAddClms       ã€TAG】集åˆå?ç?™ã‚‹ã¨ãã«ã€ç›¸é•データをCSV連çµã—ã¦æ®‹ã™ã‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®šã—ã¾ã?
100     *       noSideEffect       ã€TAG】テーブルモãƒ?ƒ«ã«å¯¾ã™ã‚‹å‰¯ä½œç”¨ã®æœ‰ç„¡[true:ãªã?false:ã‚ã‚‹]を指定ã—ã¾ã?åˆæœŸå€¤:false:ã‚ã‚‹)
101     *       useDiffData        ã€TAG】差åˆ??ã‚¹ãƒ¬ãƒ¼ãƒ–ãƒ‡ãƒ¼ã‚¿ã‚’çµæžœãƒ??ブルã«è¿½åŠ?™ã‚‹ã‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:true)
102     *       useCheckOnly       ã€TAG】ã?スタãƒ??ブルã®é¸æŠžè¡Œã?ãƒ??ã‚¿ã®ã¿ã‚’対象ã«å‡¦ç?‚’行ã†ã‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:false)
103     *       display            ã€TAG】ã?ージã®çµæžœã‚’表示ã™ã‚‹ã‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:true)
104     *       mainTrans          ã€TAGã€?通常使ã?¾ã›ã‚“)ã‚¿ã‚°ã§å‡¦ç?•れる処ç?Œãƒ¡ã‚¤ãƒ³ã¨ãªã‚‹ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å‡¦ç?‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:false)
105     *       caseKey            ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶ã‚­ãƒ¼ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)
106     *       caseVal            ã€TAG】ã“ã®ã‚¿ã‚°è‡ªä½“を利用ã™ã‚‹ã‹ã©ã?‹ã®æ¡ä»¶å€¤ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)
107     *       caseNN             ã€TAG】指定ã?値ãŒã?null/ゼロæ–?­—å? ã§ãªã??å?Not Null=NN)ã¯ã€ã“ã®ã‚¿ã‚°ã¯ä½¿ç”¨ã•れã¾ã?åˆæœŸå€¤:true)
108     *       caseNull           ã€TAG】指定ã?値ãŒã?null/ゼロæ–?­—å? ã®å ´åˆã?ã€ã“ã®ã‚¿ã‚°ã¯ä½¿ç”¨ã•れã¾ã?åˆæœŸå€¤:true)
109     *       separator          ã€TAG】groupAddClmsã§æ–?­—å?ã‚’é?çµã™ã‚‹é?目区åˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:",")
110     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
111     *   />
112     *
113     * â—使用ä¾?
114     *     例ï¼?ãƒ?ƒ•ォルト以外ã«å¿?¦ãªå±žæ?ã®ã¿æŒ?®šã™ã‚‹ã‚µãƒ³ãƒ—ル
115     *     <og:tableMerge action="UNION"
116     *           slaveScope = "request" masterKeys = "AA,BB,CC"
117     *     />
118     *
119     *         ・出力å?ã€ã?スターã¨ã‚‚ã«åˆæœŸå€¤ã¯ã€tableId="DEFAULT" scope="session" ã§ã™ã?
120     *           スレーブã?ã€tableId ã?scope ã‚’ã‘ã‚‹å¿?¦ãŒã‚る為ã€scope="request" を指定ã—ã¦ã?¾ã™ã?
121     *           比è¼?™ã‚‹ã‚«ãƒ©ãƒ?ã¯ã€ã?スタã€ã‚¹ãƒ¬ãƒ¼ãƒ–åŒã˜ã§ã‚れã°ã€ã?スタã®ã¿æŒ?®šã§ã‹ã¾ã?¾ã›ã‚“ã€?
122     *
123     *     例ï¼?マスタã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã¨ã‚‚ãƒ¡ãƒ¢ãƒªã«æ®‹ã‚‰ãªã?‚ˆã?« request ã§ä½œæ?ã—ã¾ã™ã?
124     *     <og:tableMerge action="INTERSECT"
125     *           masterScope  = "request"
126     *           slaveScope   = "request"
127     *           slaveTableId = "SLAVE"
128     *           masterKeys   = "AA,BB,CC"
129     *     />
130     *
131     *         ・マスタã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã¨ã‚‚ãƒ¡ãƒ¢ãƒªã«æ®‹ã‚‰ãªã?‚ˆã?« request ã§ä½œæ?ã—ãŸå ´åˆã?ã€?
132     *           ã©ã¡ã‚‰ã‹ã® TableId を変ãˆã‚‹å¿?¦ãŒã‚りã¾ã™ã?
133     *           出力å?ã¯åˆæœŸå€¤ã®ã€tableId="DEFAULT" scope="session" ã§ã™ã?
134     *
135     * @og.rev 3.8.0.9 (2005/10/17) æ–°è¦è¿½åŠ?
136     * @og.group ?¤?¢ç™»éŒ²
137     *
138     * @version  0.9.0      2000/10/17
139     * @author       Kazuhiko Hasegawa
140     * @since    JDK5.0,
141     */
142    public class TableMergeTag extends CommonTagSupport {
143            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
144            private static final String VERSION = "5.5.8.5 (2012/11/27)" ;
145    
146            private static final long serialVersionUID = 558520121127L ;
147    
148            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? 全体集å?{@value} */
149            public static final String ACT_UNION_ALL        = "UNION_ALL" ;
150            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? 和集å?{@value} */
151            public static final String ACT_UNION            = "UNION" ;
152            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? ç©é›†å?{@value} */
153            public static final String ACT_INTERSECT        = "INTERSECT" ;
154            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? å·®é›?ˆ{@value} */
155            public static final String ACT_MINUS            = "MINUS" ;
156            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? å·®åˆ?›†å?@value} */
157            public static final String ACT_DIFFERENCE       = "DIFFERENCE" ;
158            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? åˆ—åˆæˆ{@value} */
159            public static final String ACT_UNION_CLM        = "UNION_CLM" ;
160            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? åˆ—åˆæˆ{@value} */
161            public static final String ACT_ADD_CLM          = "ADD_CLM" ;
162            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? グルーãƒ?{@value} */
163            public static final String ACT_GROUP            = "GROUP" ;
164            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? グルーãƒ?{@value} */
165            public static final String ACT_UNION_SELROW     = "UNION_SELROW" ;// 4.3.2.0 (2008/09/11)
166    
167            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ?リスãƒ? */
168            private static final String[] ACTION_LIST = new String[] {
169                    ACT_UNION_ALL , ACT_UNION , ACT_INTERSECT , ACT_MINUS , ACT_DIFFERENCE , ACT_UNION_CLM , ACT_ADD_CLM , ACT_GROUP, ACT_UNION_SELROW };
170    
171            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? æ–°è¦?{@value} */
172            public static final String CMD_NEW       = "NEW" ;
173            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? 冿¤œç´¢ {@value} */
174            public static final String CMD_RENEW = "RENEW" ;
175            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ?リスãƒ? */
176            private static final String[] COMMAND_LIST = new String[] { CMD_NEW , CMD_RENEW };
177    
178            private String  command         = CMD_NEW;
179    
180            private String  action          = null;
181            private String  tableId         = HybsSystem.TBL_MDL_KEY;               // 出力å?ã® tableId
182            private String  scope           = "session";                                            // 出力å?ã® scope
183    
184            private String  masterTableId   = HybsSystem.TBL_MDL_KEY;       // マスタ�?ブル㮠tableId
185            private String  masterScope             = "session";                                    // マスタ�?ブル㮠scope
186            private String  slaveTableId    = HybsSystem.TBL_MDL_KEY;       // スレーブテーブル㮠tableId
187            private String  slaveScope              = "request";                                    // スレーブテーブル㮠scope
188            private String  masterKeys              = null;                                                 // マスタãƒ??ブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼
189            private String  slaveKeys               = null;                                                 // スレーブテーブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼(nullæ™?masterKeys)
190            private String  diffKeys                = null;                                                 // マスタãƒ??ブルã®DIFFERENCE時ã?å·®åˆ?‚«ãƒ©ãƒ?
191            private String  unionClms               = null;                                                 // UNION_CLM時ã«ã‚¹ãƒ¬ãƒ¼ãƒ–ã‹ã‚‰ã?スタã¸è¿½åŠ?™ã‚‹ã‚«ãƒ©ãƒ?
192            private String  modifyClms              = null;                                                 // DIFFERENCE時ã«ã‚¹ãƒ¬ãƒ¼ãƒ–ã‹ã‚‰ã?スタã¸å€¤ã‚’æ›´æ–°ã™ã‚‹ã‚«ãƒ©ãƒ?
193            private String  groupAddClms    = null;                                                 // 5.1.4.0 (2010/03/01) masterKeysã§é›?ˆå‡¦ç?™ã‚‹ã¨ãã«ã€ç›¸é•データをCSV連çµã—ã¦æ®‹ã™ã‚«ãƒ©ãƒ?
194            private boolean noSideEffect    = false;                                                // ãƒ??ブルモãƒ?ƒ«ã«å¯¾ã™ã‚‹å‰¯ä½œç”¨(true:ãªã?false:ã‚ã‚‹)
195            private boolean useDiffData             = true;                                                 // DIFFERENCE時ã«å·®åˆ??スレーブデータを追åŠ?™ã‚‹ã‹ã©ã?‹
196            private boolean useCheckOnly    = false;                                                // マスタãƒ??ブルã®é¸æŠžè¡Œã?ãƒ??ã‚¿ã®ã¿ã‚’対象ã«å‡¦ç?‚’行ã†ã‹ã©ã?‹
197            private boolean display                 = true;
198            private boolean isMainTrans             = true;                                                 // 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??見直ã?
199            private String  separator               = ",";                                                  // 5.3.1.0 (2011/01/01) groupAddClmnsã§çµåˆã™ã‚‹éš›ã?区åˆ?‚Šæ–?­?
200    
201            /**
202             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
203             *
204             * @og.rev 4.3.2.0 (2008/09/11) UNION_SELROWアクション対�
205             * @og.rev 4.3.3.0 (2008/10/01) 処ç?‰å¾Œã?ãƒ??ブル件数をå–å¾—ã§ãるよã†ã«ã™ã‚‹
206             * @og.rev 4.3.3.1 (2008/10/08) スレーブã?nullãƒã‚§ãƒ?‚¯è¿½åŠ?
207             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??ã€DBTableModelãŒæ–°è¦ä½œæ?ã•れãŸå?ç?§ã®ã¿è¡Œã†ã€?
208             * @og.rev 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
209             *
210             * @return      後続å?ç??æŒ?¤º
211             */
212            @Override
213            public int doEndTag() {
214                    debugPrint();           // 4.0.0 (2005/02/28)
215                    // 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
216    //              if( ! check( command, COMMAND_LIST ) ) { return(EVAL_PAGE); }
217                    if( !useTag() || ! check( command, COMMAND_LIST ) ) { return(EVAL_PAGE); }
218    
219                    // æ•´åˆæ?ãƒã‚§ãƒ?‚¯?šã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒªã‚¹ãƒˆã¨ã®å­˜åœ¨ãƒã‚§ãƒ?‚¯
220                    if( !check( action, ACTION_LIST ) ) {
221                            String errMsg = "æŒ?®šã?アクションã¯å®Ÿè¡Œã§ãã¾ã›ã‚“。アクションエラー"
222                                                            + HybsSystem.CR
223                                                            + "action=[" + action + "] "
224                                                            + HybsSystem.CR
225                                                            + "æŒ?®šå¯èƒ½ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³:"
226                                                            + StringUtil.array2csv( ACTION_LIST ) ;
227                            throw new HybsSystemException( errMsg );
228                    }
229    
230                    // スレーブテーブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼(nullæ™?masterKeys)
231                    if( slaveKeys == null ) { slaveKeys = masterKeys; }
232    
233                    super.setScope( masterScope );
234                    DBTableModel masterTable = (DBTableModel)getObject( masterTableId );
235    
236                    // æ•´åˆæ?ãƒã‚§ãƒ?‚¯?šã?スタãƒ??ブルã¯å¿??
237                    if( masterTable == null ) {
238                            String errMsg = "マスタãƒ??ブルã¯å¿??ã§ã™ã?"
239                                                    + HybsSystem.CR
240                                                    + "action=[" + action + "] "
241                                                    + "masterTableId=[" + masterTableId + "] "
242                                                    + "masterScope=[" + masterScope + "] " ;
243                            throw new HybsSystemException( errMsg );
244                    }
245                    if( noSideEffect ) { masterTable = cloneTable( masterTable ); }
246                    Map<String,Integer> masterMap = makeKeyMap( masterTable,masterKeys,useCheckOnly );
247    
248                    DBTableModel slaveTable = null;
249                    Map<String,Integer> slaveMap = null;
250    
251                    // æ•´åˆæ?ãƒã‚§ãƒ?‚¯?šaction="GROUP" 㨠"ADD_CLM" 以外ã§ã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–テーブルã¯å¿??
252                    if( ! ACT_GROUP.equalsIgnoreCase( action ) && !ACT_ADD_CLM.equalsIgnoreCase( action ) ) {
253                            super.setScope( slaveScope );
254                            slaveTable = (DBTableModel)getObject( slaveTableId );
255    
256                            if( slaveTable == null ) {
257                                    String errMsg = "action=\"" + action + "\" 時ã«ã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–テーブルãŒå¿?¦ã§ã™ã?"
258                                                            + HybsSystem.CR
259                                                            + "slaveTableId=[" + slaveTableId + "] "
260                                                            + "slaveScope=[" + slaveScope + "] " ;
261                                    throw new HybsSystemException( errMsg );
262                            }
263                            if( noSideEffect ) { slaveTable = cloneTable( slaveTable ); }
264                            slaveMap = makeKeyMap( slaveTable,slaveKeys,false );    // スレーブã?useCheckOnlyç„¡é–¢ä¿?
265    
266                            // ãã?å ´åˆã?マスタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ãŒåŒä¸?ƒ¡ãƒ¢ãƒªä¸Šã?ãƒ??ブル(物ç?š„ã«åŒã˜)ã§ãªã?º‹ã?
267                            if( slaveTable == masterTable ) {
268                                    String errMsg = "マスタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ãŒåŒä¸?ƒ¡ãƒ¢ãƒªã«ãªã£ã¦ã?¾ã™ã?"
269                                                            + "é€šå¸¸ã€æ¤œç´¢çµæžœã¯ TableId 㨠Scope を別ã€?«æŒ?®šã—ã¾ã™ã?"
270                                                            + HybsSystem.CR
271                                                            + "action=[" + action + "] "
272                                                            + "masterTableId=[" + masterTableId + "] "
273                                                            + "slaveTableId=[" + slaveTableId + "] "
274                                                            + "masterScope=[" + masterScope + "] "
275                                                            + "slaveScope=[" + slaveScope + "] " ;
276                                    throw new HybsSystemException( errMsg );
277                            }
278                    }
279    
280                    super.setScope( scope );
281                    useMainTrans( isMainTrans );                    // 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??見直ã?
282                    startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
283    
284                    // 設定å?ã®æ•´åˆæ?ãƒã‚§ãƒ?‚¯
285                    // æ•´åˆæ?ãƒã‚§ãƒ?‚¯?šaction="UNION_ALL" 㨠"GROUP"㨠"ADD_CLM"㨠"UNION_CLM" 以外ã§ã¯ã€masterKeys ãŒå¿??
286                    if( ! ACT_UNION_ALL.equalsIgnoreCase( action )
287                            && !ACT_UNION_SELROW.equalsIgnoreCase( action ) // 4.3.2.0 (2008/09/11)
288                            && !ACT_GROUP.equalsIgnoreCase( action )
289                            && !ACT_ADD_CLM.equalsIgnoreCase( action )
290                            && !ACT_UNION_CLM.equalsIgnoreCase( action )
291                            && masterKeys == null ) {
292                                    String errMsg = "action=\"" + action + "\" 時ã«ã¯ã€masterKeys ãŒå¿??ã§ã™ã?"
293                                                            + HybsSystem.CR
294                                                            + "masterKeys=[" + masterKeys + "] ";
295                                    throw new HybsSystemException( errMsg );
296                    }
297    
298                    // 設定å?ã®æ•´åˆæ?ãƒã‚§ãƒ?‚¯
299                    // æ•´åˆæ?ãƒã‚§ãƒ?‚¯?šaction="DIFFERENCE" ã§ã¯ã€diffKeys ãŒå¿??
300                    if( ACT_DIFFERENCE.equalsIgnoreCase( action ) && diffKeys == null ) {
301                            String errMsg = "action=\"" + action + "\" 時ã«ã¯ã€diffKeys ãŒå¿??ã§ã™ã?"
302                                                    + HybsSystem.CR
303                                                    + "diffKeys=[" + diffKeys + "] ";
304                            throw new HybsSystemException( errMsg );
305                    }
306    
307                    // 設定å?ã®æ•´åˆæ?ãƒã‚§ãƒ?‚¯
308                    // æ•´åˆæ?ãƒã‚§ãƒ?‚¯?šå?åˆæ?(UNION_CLM) 㨠グルーãƒ?GROUP) 㨠列追åŠ?ADD_CLM) 以外ã§ã¯ã€ãƒ†ãƒ¼ãƒ–ルカラãƒ?•°ãŒåŒã˜ã§ã‚ã‚‹å¿?¦ãŒã‚ã‚‹ã€?
309                    if( ! ACT_UNION_CLM.equalsIgnoreCase( action )
310                             && !ACT_GROUP.equalsIgnoreCase( action )
311                             && !ACT_ADD_CLM.equalsIgnoreCase( action ) ) {
312                            int mClmSize = masterTable.getColumnCount();
313                            int sClmSize = slaveTable.getColumnCount();
314    
315                            if( mClmSize != sClmSize ) {
316                                    String errMsg = "action=\"" + action + "\" 時ã«ã¯ã€ãƒ†ãƒ¼ãƒ–ルカラãƒ?•°ãŒç•°ãªã£ã¦ã¯ã?‘ã¾ã›ã‚“ã€?
317                                                            + HybsSystem.CR
318                                                            + "Master=" + mClmSize + " ,["
319                                                            + StringUtil.array2csv( masterTable.getNames() ) + "]"
320                                                            + HybsSystem.CR
321                                                            + "Slave =" + sClmSize + " ,["
322                                                            + StringUtil.array2csv( slaveTable.getNames() ) + "]";
323                                    throw new HybsSystemException( errMsg );
324                            }
325                    }
326    
327                    StringBuilder buf = null;
328                    if( display ) {
329                            buf = new StringBuilder();
330                            buf.append( action ).append( "(" );
331                            buf.append( " M[" ).append( masterTable.getRowCount() ).append( "]" );
332                            if( slaveTable != null ) {
333                                    buf.append( ",S[" ).append( slaveTable.getRowCount() ).append( "]" );
334                            }
335                    }
336    
337                    // 4.3.3.0 (2008/10/01)
338                    setRequestAttribute( "DB.MASTER_COUNT"   , String.valueOf( masterTable.getRowCount() ) );
339                    // 4.3.3.1 (2008/10/08) nullãƒã‚§ãƒ?‚¯
340                    if( slaveTable != null ) {
341                            setRequestAttribute( "DB.SLAVE_COUNT", String.valueOf( slaveTable.getRowCount() ) );
342                    }
343    
344                    DBTableModel table = null;
345                    if( ACT_UNION_ALL.equalsIgnoreCase( action ) ) {                        // 全体集å?
346                            table = makeUnionAll( masterTable,slaveTable );
347                    }
348                    else if( ACT_UNION_SELROW.equalsIgnoreCase( action ) ) {        // 4.3.2.0 (2008/09/11) 全体集å?slave表をmaster表ã®ãƒã‚§ãƒ?‚¯è¡Œã‹ã‚‰è¿½åŠ?
349                            table = makeUnionSelrow( masterTable,slaveTable );
350                    }
351                    else if( ACT_UNION.equalsIgnoreCase( action ) ) {                       // 和集å?
352                            table = makeUnion( masterTable,masterMap,slaveTable,slaveMap );
353                    }
354                    else if( ACT_INTERSECT.equalsIgnoreCase( action ) ) {           // ç©é›†å?
355                            table = makeIntersect( masterTable,masterMap,slaveMap );
356                    }
357                    else if( ACT_MINUS.equalsIgnoreCase( action ) ) {                       // å·®é›?ˆ
358                            table = makeMinus( masterTable,masterMap,slaveMap );
359                    }
360                    else if( ACT_DIFFERENCE.equalsIgnoreCase( action ) ) {          // å·®åˆ?›†å?
361                            table = makeDifference( masterTable,masterMap,slaveTable,slaveMap );
362                    }
363                    else if( ACT_UNION_CLM.equalsIgnoreCase( action ) ) {           // åˆ—åˆæˆ?
364                            if( unionClms == null ) {
365                                    String errMsg = "action=\"UNION_CLM\" 時ã«ã¯ã€unionClms ãŒå¿??ã§ã™ã?" ;
366                                    throw new HybsSystemException( errMsg );
367                            }
368    
369                            table = makeUnionClm( masterTable,slaveKeys,slaveTable,slaveMap );
370                    }
371                    else if( ACT_ADD_CLM.equalsIgnoreCase( action ) ) {             // 列追�
372                            if( unionClms == null ) {
373                                    String errMsg = "action=\"ADD_CLM\" 時ã«ã¯ã€unionClms ãŒå¿??ã§ã™ã?" ;
374                                    throw new HybsSystemException( errMsg );
375                            }
376    
377                            table = makeAddClm( masterTable );
378                    }
379                    else if( ACT_GROUP.equalsIgnoreCase( action ) ) {                       // グルー�
380                            table = makeGroup( masterTable );
381                    }
382    
383                    if( table != null ) {
384                            // 3.6.0.8 (2004/11/19) トランザクションãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
385                            super.setScope( scope );
386                            if( ! commitTableObject( tableId, table ) ) {
387                                    return (SKIP_PAGE);
388                            }
389                    }
390    
391                    if( display ) {
392                            buf.append( " ) = [" ).append( table.getRowCount() ).append( "]" );
393                            jspPrint( buf.toString() );
394                    }
395    
396                    // 4.3.3.0 (2008/10/01)
397                    // 4.3.4.4 (2009/01/01)
398                    setRequestAttribute( "DB.COUNT"   , ( table == null ? 0 :String.valueOf( table.getRowCount() ) ) );
399    
400                    return(EVAL_PAGE);              // ペã?ã‚¸ã®æ®‹ã‚Šã‚’評価ã™ã‚‹ã€?
401            }
402    
403            /**
404             * タグリブオブジェクトをリリースã—ã¾ã™ã?
405             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
406             *
407             * @og.rev 5.1.4.0 (2010/03/01) groupAddClms 追�
408             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??ã€DBTableModelãŒæ–°è¦ä½œæ?ã•れãŸå?ç?§ã®ã¿è¡Œã†ã€?
409             * @og.rev 5.3.1.0 (2011/01/01) separator追�
410             */
411            @Override
412            protected void release2() {
413                    super.release2();
414                    command                 = CMD_NEW;
415                    action                  = null;
416                    tableId                 = HybsSystem.TBL_MDL_KEY;               // 出力å?ã® tableId
417                    scope                   = "session";                                            // 出力å?ã® scope
418                    masterTableId   = HybsSystem.TBL_MDL_KEY;               // マスタ�?ブル㮠tableId
419                    masterScope             = "session";                                            // マスタ�?ブル㮠scope
420                    slaveTableId    = HybsSystem.TBL_MDL_KEY;               // スレーブテーブル㮠tableId
421                    slaveScope              = "request";                                            // スレーブテーブル㮠scope
422                    masterKeys              = null;                                                         // マスタãƒ??ブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼
423                    slaveKeys               = null;                                                         // スレーブテーブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼(nullæ™?masterKeys)
424                    diffKeys                = null;                                                         // マスタãƒ??ブルã®DIFFERENCE時ã?å·®åˆ?‚«ãƒ©ãƒ?
425                    unionClms               = null;                                                         // スレーブã‹ã‚‰ã?スタã¸è¿½åŠ?™ã‚‹ã‚«ãƒ©ãƒ?
426                    modifyClms              = null;                                                         // スレーブã‹ã‚‰ã?スタã¸å€¤ã‚’æ›´æ–°ã™ã‚‹ã‚«ãƒ©ãƒ?
427                    groupAddClms    = null;                                                         // 5.1.4.0 (2010/03/01) masterKeysã§é›?ˆå‡¦ç?™ã‚‹ã¨ãã«ã€ç›¸é•データをCSV連çµã—ã¦æ®‹ã™ã‚«ãƒ©ãƒ?
428                    noSideEffect    = false;                                                        // ãƒ??ブルモãƒ?ƒ«ã«å¯¾ã™ã‚‹å‰¯ä½œç”¨(true:ãªã?false:ã‚ã‚‹)
429                    useDiffData             = true;                                                         // DIFFERENCE時ã«å·®åˆ??スレーブデータを追åŠ?™ã‚‹ã‹ã©ã?‹
430                    useCheckOnly    = false;                                                        // マスタãƒ??ブルã®é¸æŠžè¡Œã?ãƒ??ã‚¿ã®ã¿ã‚’対象ã«å‡¦ç?‚’行ã†ã‹ã©ã?‹
431                    display                 = true;
432                    isMainTrans             = true;                 // 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??見直ã?
433                    separator               = ",";
434            }
435    
436            /**
437             * æŒ?®šã?ãƒ??ãƒ–ãƒ«ã®æŒ?®šã?カラãƒ?CSV)よりã€è¡Œç•ªå·ã‚’ã?ãƒ??化ã—ã¾ã™ã?
438             * ãªãŠã?引数ã®ãƒ??ブルã«ã¤ã?¦ã¯ã€ä¸»ã‚­ãƒ¼ã«ã‚ˆã‚‹ã‚°ãƒ«ãƒ¼ãƒ—å?ç?Œè¡Œã‚れã¾ã™ã?(副作用ã‚り)
439             *
440             * @og.rev 4.3.2.0 (2008/09/11) マスタキー未æŒ?®šæ™‚ã¯ä½•ã‚‚ã—ãªã?
441             * @og.rev 5.1.4.0 (2010/03/01) groupAddClms 追�
442             * @og.rev 5.3.1.0 (2011/01/01) groupAddClms ã® separatoræŒ?®šå¯¾å¿?
443             * @og.rev 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
444             *
445             * @param       table   マップ作æ?å…??ãƒ??ã‚¿ãƒ??ブル(副作用ã‚り)
446             * @param       keys    マップ作æ?ã®ä¸»ã‚­ãƒ¼(CSVå½¢å¼?
447             * @param       useCheckOnly    ãƒã‚§ãƒ?‚¯è¡Œã?ã¿ã‚’対象ã«ã™ã‚‹ã‹ã©ã?‹
448             *
449             * @return マップ化ã•れãŸä¸»ã‚­ãƒ¼ã¨è¡Œç•ªå·
450             */
451            private Map<String,Integer> makeKeyMap( final DBTableModel table, final String keys, final boolean useCheckOnly ) {
452    
453                    // カラãƒ?をカラãƒ?•ªå·ã«å¤‰æ›ã—ã¾ã™ã?
454                    int[] clmNo = makeColumnNo( table,keys );
455                    int   clmSize = clmNo.length;
456                    if( clmSize == 0 ) {    // マスタキー未æŒ?®šæ™‚ã«ã¯å…¨ã‚«ãƒ©ãƒ?‚’使用ã—ã¾ã™ã?
457    //                      clmSize = table.getColumnCount();
458    //                      clmNo = new int[clmSize];
459    //                      for( int i=0; i<clmSize; i++ ) {
460    //                              clmNo[i] = i;
461    //                      }
462                            return null; // 4.3.2.0 (2008/09/11)
463                    }
464    
465                    // groupAddClms をカラãƒ?•ªå·ã«å¤‰æ›ã—ã¾ã™ã?
466                    int[] grpClmNo = makeColumnNo( table,groupAddClms );
467                    int   grpClmSize = grpClmNo.length;
468    
469                    Map<String,Integer> tempMap = new LinkedHashMap<String,Integer>();
470    
471                    // 注æ„:GROUP化ã?éŽç¨‹ã§ ãƒ??ブル件数ãŒå‹•çš?«å¤‰åŒ–ã—ã¾ã™ã?
472                    StringBuilder buf ;
473                    for( int row=0; row<table.getRowCount(); row++ ) {
474                            if( useCheckOnly && table.getModifyType( row ).length() == 0 ) {
475                                    continue;
476                            }
477    
478                            buf = new StringBuilder();
479                            for( int i=0; i<clmSize; i++ ) {
480                                    buf.append( table.getValue( row,clmNo[i] ) ).append( "|" );
481                            }
482                            // ä¸»ã‚­ãƒ¼é€£çµæ–‡å­—å?
483    //                      String key = buf.toString();    // ä¸»ã‚­ãƒ¼é€£çµæ–‡å­—å?
484                            String key = buf.toString().toUpperCase(Locale.JAPAN);          // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
485                            if( tempMap.containsKey( key ) ) {
486                                    // 5.1.4.0 (2010/03/01) groupAddClms 追�
487                                    int orgRow = tempMap.get( key ).intValue() ;                            // 追åŠ?¸ˆã¿ã®è¡Œç•ªå·ã‚’å–å¾?
488                                    for( int i=0; i<grpClmSize; i++ ) {
489                                            int clm    = grpClmNo[i];
490                                            String val1 = table.getValue( orgRow,clm ) ;                    // 既存ã?行ã?カラãƒ??ãƒ??ã‚¿
491                                            String val2 = table.getValue( row,clm ) ;                               // 削除ã™ã‚‹è¡Œã?カラãƒ??ãƒ??ã‚¿
492                                            // 5.3.1.0 (2011/01/01)
493    //                                      table.setValueAt( val1 + "," + val2,orgRow,clm );               // CSV 連çµã?ãƒ??タを戻ã™ã?
494                                            table.setValueAt( val1 + separator + val2,orgRow,clm );         // CSV 連çµã?ãƒ??タを戻ã™ã?
495                                    }
496                                    table.removeValue( row );
497                                    row-- ;
498                            }
499                            else {                                                  // ã¾ã??未登録ã®å ´å?
500                                    tempMap.put( key,Integer.valueOf( row ) );
501                            }
502                    }
503    
504                    return tempMap;
505            }
506    
507            /**
508             * æŒ?®šã?マスタ,スレーブテーブルを使用ã—㦠全体集å?処ç?‚’実行ã—ã¾ã™ã?
509             *
510             * @param       masterTbl       マスターãƒ??ブルモãƒ?ƒ«
511             * @param       slaveTbl        スレーブテーブルモãƒ?ƒ«
512             *
513             * @return      処ç?µæžœã®ãƒ??ブルモãƒ?ƒ«
514             */
515            private DBTableModel makeUnionAll( final DBTableModel masterTbl,final DBTableModel slaveTbl ) {
516                    DBTableModel table = masterTbl;
517    
518                    for( int row=0; row<slaveTbl.getRowCount(); row++ ) {
519                            String[] vals = slaveTbl.getValues( row );
520                            table.addColumnValues( vals );
521                    }
522    
523                    return table;
524            }
525    
526            /**
527             * æŒ?®šã?マスタ,スレーブテーブルを使用ã—㦠全体集å?処ç?‚’実行ã—ã¾ã™ã?
528             * スレーブ表ã¯ã€ã?スタ表ã®ãƒã‚§ãƒ?‚¯ã•れãŸè¡Œã‚’起点ã¨ã—ã¦ç™»éŒ²ã•れã¾ã™ã?
529             * ãƒã‚§ãƒ?‚¯ã•れã¦ã?ªã??åˆã?ã€ã‚¹ãƒ¬ãƒ¼ãƒ–表ã¯å…ˆé?ã‹ã‚‰è¿½åŠ?•れã¾ã™ã?
530             *
531             * @og.rev 4.3.2.0 (2008/09/11) æ–°è¦ä½œæ?
532             *
533             * @param       masterTbl       マスターãƒ??ブルモãƒ?ƒ«
534             * @param       slaveTbl        スレーブテーブルモãƒ?ƒ«
535             *
536             * @return      処ç?µæžœã®ãƒ??ブルモãƒ?ƒ«
537             */
538            private DBTableModel makeUnionSelrow( final DBTableModel masterTbl,final DBTableModel slaveTbl ) {
539                    DBTableModel table = masterTbl;
540    
541                    int insRowNo = ( getParameterRows().length > 0 ) ? getParameterRows()[0] + 1 : 0 ;
542                    for( int row=0; row<slaveTbl.getRowCount(); row++ ) {
543                            String[] vals = slaveTbl.getValues( row );
544                            table.addValues( vals, insRowNo + row, false );
545                    }
546    
547                    return table;
548            }
549    
550            /**
551             * æŒ?®šã?マスタ,スレーブテーブルを使用ã—㦠和集å?処ç?‚’実行ã—ã¾ã™ã?
552             *
553             * @og.rev 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
554             *
555             * @param       masterTbl       マスターãƒ??ブルモãƒ?ƒ«
556             * @param       masterMap       マスターãƒ??ブルã®ä¸»ã‚­ãƒ¼ãƒžãƒƒãƒ?
557             * @param       slaveTbl        スレーブテーブルモãƒ?ƒ«
558             * @param       slaveMap        スレーブテーブルã®ä¸»ã‚­ãƒ¼ãƒžãƒƒãƒ?
559             *
560             * @return      処ç?µæžœã®ãƒ??ブルモãƒ?ƒ«
561             */
562            private DBTableModel makeUnion( final DBTableModel masterTbl,final Map<String,Integer> masterMap,
563                                                                            final DBTableModel slaveTbl,final Map<String,Integer> slaveMap ) {
564                    DBTableModel table = masterTbl;
565    
566                    @SuppressWarnings("rawtypes")
567                    Map.Entry[] entry = slaveMap.entrySet().toArray( new Map.Entry[slaveMap.size()] );
568    
569                    int size = entry.length;
570                    for( int i=0; i<size; i++ ) {
571                            String key  = (String)entry[i].getKey();
572                            if( key != null ) { key = key.toUpperCase(Locale.JAPAN); }              // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
573                            if( ! masterMap.containsKey( key ) ) {          // マスタã«ã‚¹ãƒ¬ãƒ¼ãƒ–データãŒå­˜åœ¨ã—ãªã?
574                                    int row =  ((Integer)entry[i].getValue()).intValue();
575                                    String[] vals = slaveTbl.getValues( row );
576                                    table.addColumnValues( vals );
577                            }
578                    }
579                    return table;
580            }
581    
582            /**
583             * æŒ?®šã?マスタ,スレーブテーブルを使用ã—㦠ç©é›†å?処ç?‚’実行ã—ã¾ã™ã?
584             *
585             * @og.rev 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
586             *
587             * @param       masterTbl       マスターãƒ??ブルモãƒ?ƒ«
588             * @param       masterMap       マスターãƒ??ブルã®ä¸»ã‚­ãƒ¼ãƒžãƒƒãƒ?
589             * @param       slaveMap        スレーブテーブルã®ä¸»ã‚­ãƒ¼ãƒžãƒƒãƒ?
590             *
591             * @return      処ç?µæžœã®ãƒ??ブルモãƒ?ƒ«
592             */
593            private DBTableModel makeIntersect( final DBTableModel masterTbl,final Map<String,Integer> masterMap, final Map<String,Integer> slaveMap ) {
594                    DBTableModel table = masterTbl;
595    
596                    @SuppressWarnings("rawtypes")
597                    Map.Entry[] entry = masterMap.entrySet().toArray( new Map.Entry[masterMap.size()] );
598    
599                    int size = entry.length;
600                    for( int i=0; i<size; i++ ) {
601                            String key  = (String)entry[i].getKey();
602                            if( key != null ) { key = key.toUpperCase(Locale.JAPAN); }              // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
603                            if( ! slaveMap.containsKey( key ) ) {           // スレーブã«ãƒžã‚¹ã‚¿ãŒå­˜åœ¨ã—ãªã?
604                                    int row =  ((Integer)entry[i].getValue()).intValue();
605                                    table.rowDelete( row );                         // è«–ç†å‰Šé™¤
606                            }
607                    }
608    
609                    // 行番å·ãŒå¤‰ã‚らãªã?‚ˆã?«é€??削除ã—ã¾ã™ã?
610                    for( int row=table.getRowCount()-1; row>=0; row-- ) {
611    //                      if( DBTableModel.DELETE_TYPE.equals( table.getModifyType( row ) ) ) {
612                            if( DBTableModel.DELETE_TYPE.equalsIgnoreCase( table.getModifyType( row ) ) ) {         // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
613                                    table.removeValue( row );
614                            }
615                    }
616    
617                    return table;
618            }
619    
620            /**
621             * æŒ?®šã?マスタ,スレーブテーブルを使用ã—㦠差é›?ˆ 処ç?‚’実行ã—ã¾ã™ã?
622             *
623             * @og.rev 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
624             *
625             * @param       masterTbl       マスターãƒ??ブルモãƒ?ƒ«
626             * @param       masterMap       マスターãƒ??ブルã®ä¸»ã‚­ãƒ¼ãƒžãƒƒãƒ?
627             * @param       slaveMap        スレーブテーブルã®ä¸»ã‚­ãƒ¼ãƒžãƒƒãƒ?
628             *
629             * @return      処ç?µæžœã®ãƒ??ブルモãƒ?ƒ«
630             */
631            private DBTableModel makeMinus( final DBTableModel masterTbl,final Map<String,Integer> masterMap,
632                                                                            final Map<String,Integer> slaveMap ) {
633                    DBTableModel table = masterTbl;
634    
635                    @SuppressWarnings("rawtypes")
636                    Map.Entry[] entry = masterMap.entrySet().toArray( new Map.Entry[masterMap.size()] );
637    
638                    int size = entry.length;
639                    for( int i=0; i<size; i++ ) {
640                            String key  = (String)entry[i].getKey();
641                            if( key != null ) { key = key.toUpperCase(Locale.JAPAN); }              // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
642                            if( slaveMap.containsKey( key ) ) {             // スレーブã«ãƒžã‚¹ã‚¿ãŒå­˜åœ¨ã™ã‚‹
643                                    int row =  ((Integer)entry[i].getValue()).intValue();
644                                    table.rowDelete( row );                         // è«–ç†å‰Šé™¤
645                            }
646                    }
647    
648                    // 行番å·ãŒå¤‰ã‚らãªã?‚ˆã?«é€??削除ã—ã¾ã™ã?
649                    for( int row=table.getRowCount()-1; row>=0; row-- ) {
650    //                      if( DBTableModel.DELETE_TYPE.equals( table.getModifyType( row ) ) ) {
651                            if( DBTableModel.DELETE_TYPE.equalsIgnoreCase( table.getModifyType( row ) ) ) {         // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
652                                    table.removeValue( row );
653                            }
654                    }
655    
656                    return table;
657            }
658    
659            /**
660             * æŒ?®šã?マスタ,スレーブテーブルを使用ã—㦠差åˆ?›†å?処ç?‚’実行ã—ã¾ã™ã?
661             *
662             * @og.rev 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
663             *
664             * @param       masterTbl       マスターãƒ??ブルモãƒ?ƒ«
665             * @param       masterMap       マスターãƒ??ブルã®ä¸»ã‚­ãƒ¼ãƒžãƒƒãƒ?
666             * @param       slaveTbl        スレーブテーブルモãƒ?ƒ«
667             * @param       slaveMap        スレーブテーブルã®ä¸»ã‚­ãƒ¼ãƒžãƒƒãƒ?
668             *
669             * @return      処ç?µæžœã®ãƒ??ブルモãƒ?ƒ«
670             */
671            private DBTableModel makeDifference( final DBTableModel masterTbl,final Map<String,Integer> masterMap,
672                                                                                     final DBTableModel slaveTbl ,final Map<String,Integer> slaveMap ) {
673                    DBTableModel table = masterTbl;
674    
675                    // ãƒ??ブルã®å·®åˆ?±žæ?ã®ã‚«ãƒ©ãƒ?•ªå·ã‚’求ã‚ã¾ã™ã?(マスタã€ã‚¹ãƒ¬ãƒ¼ãƒ–å?é€?
676                    int[] diffClmNo = makeColumnNo( table,diffKeys );
677                    int diffClmSize = diffClmNo.length;
678    
679                    // スレーブã‹ã‚‰ã?スタã¸å€¤ã®å†ã‚»ãƒ?ƒˆã‚’行ã†ã‚«ãƒ©ãƒ?•ªå·ã‚’求ã‚ã¾ã™ã?(マスタã€ã‚¹ãƒ¬ãƒ¼ãƒ–å?é€?
680                    int[] modClmNo = makeColumnNo( table,modifyClms );
681                    int modClmSize = modClmNo.length;
682    
683                    int clmSize = table.getColumnCount();
684                    DBTableModel newTable = DBTableModelUtil.newDBTable();
685                    newTable.init( clmSize );
686    
687                    // ãƒ??ブルã®å…¨ã‚«ãƒ©ãƒ?‚’æ–°ãŸã«ä½œæ?ã™ã‚‹ãƒ??ブルã«ã‚³ãƒ”ã?ã—ã¾ã™ã?
688                    for( int i=0; i<clmSize; i++ ) {
689                            newTable.setDBColumn( i,table.getDBColumn( i ) );
690                    }
691    
692                    // スレーブã?å…ˆé?カラãƒ?Œã€WRITABLE ã‹ã©ã?‹
693                    boolean writeFlag = "WRITABLE".equalsIgnoreCase( slaveTbl.getColumnName(0) );
694    
695                    @SuppressWarnings("rawtypes")
696                    Map.Entry[] entry = masterMap.entrySet().toArray( new Map.Entry[masterMap.size()] );
697    
698                    int size = entry.length;
699                    for( int i=0; i<size; i++ ) {
700                            String key  = (String)entry[i].getKey();
701                            if( key != null ) { key = key.toUpperCase(Locale.JAPAN); }              // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
702                            if( slaveMap.containsKey( key ) ) {             // スレーブã«ãƒžã‚¹ã‚¿ãŒå­˜åœ¨ã™ã‚‹
703                                    int mrow =  ((Integer)entry[i].getValue()).intValue();
704                                    int srow =  (slaveMap.get( key )).intValue();
705                                    boolean unmatched = false;
706                                    for( int j=0; j<diffClmSize; j++ ) {
707                                            String mval = table.getValue( mrow,diffClmNo[j] );
708                                            String sval = slaveTbl.getValue( srow,diffClmNo[j] );
709    //                                      if( mval != null && !mval.equals( sval ) ) { unmatched = true; break; }
710                                            if( mval != null && !mval.equalsIgnoreCase( sval ) ) { unmatched = true; break; }               // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
711                                    }
712    
713                                    if( unmatched ) {               // 属æ?æƒ??ãŒç•°ãªã‚‹å?åˆã?ã¿å‡¦ç?
714                                            // ãƒ??ã‚¿ã®ã‚³ãƒ”ã?
715                                            String[] mvals = new String[clmSize];
716                                            System.arraycopy( table.getValues( mrow ),0,mvals,0 ,clmSize );
717    
718                                            // スレーブã?値をã?スタã®å€¤ã«ã‚»ãƒ?ƒˆã™ã‚‹ã€?
719                                            for( int j=0; j<modClmSize; j++ ) {
720                                                    String val = slaveTbl.getValue( srow,modClmNo[j] );
721                                                    mvals[modClmNo[j]] = val;
722                                            }
723                                            newTable.addColumnValues( mvals );
724    
725                                            if( useDiffData ) {
726                                                    // ãƒ??ã‚¿ã®ã‚³ãƒ”ã?
727                                                    String[] svals = new String[clmSize];
728                                                    System.arraycopy( slaveTbl.getValues( srow ),0,svals,0 ,clmSize );
729                                                    if( writeFlag ) { svals[0] = "0"; }     // 書ãè¾¼ã¿ä¸è¨±å¯
730                                                    for( int j=0; j<diffClmSize; j++ ) {
731                                                            int dclmNo = diffClmNo[j];
732                                                            String mval = mvals[dclmNo];
733                                                            String sval = svals[dclmNo];
734    //                                                      if( mval != null && !mval.equals( sval ) ) {
735                                                            if( mval != null && !mval.equalsIgnoreCase( sval ) ) {          // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
736                                                                    svals[dclmNo] = "<span class=\"unmatched\">" + sval + "</span>" ;
737                                                            }
738                                                    }
739                                                    newTable.addColumnValues( svals );
740            //                                      newTable.setRowWritable( newTable.getRowCount()-1,false );      // 書ãè¾¼ã¿ä¸è¨±å¯
741                                            }
742                                    }
743                            }
744                    }
745                    return newTable;
746            }
747    
748            /**
749             * æŒ?®šã?マスタ,スレーブテーブルを使用ã—ã¦ åˆ—åˆæˆ?処ç?‚’実行ã—ã¾ã™ã?
750             *
751             * ã™ã§ã«ã€ã?スタ ã«ã‚«ãƒ©ãƒ?Œå­˜åœ¨ã—ã¦ã?‚‹å ´åˆã?ã€å?ã®æ›¸ãæ›ãˆã‚’ã€?
752             * カラãƒ?Œå­˜åœ¨ã—ãªã‘れã°ã€ã‚«ãƒ©ãƒ?‚’追åŠ?—ã¾ã™ã?
753             * マスタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã?ãƒ??ã‚¿çªåˆã›æ™‚ã®ã‚­ãƒ¼ã¯ã€slaveKeys ã«ãªã‚Šã¾ã™ã?
754             * ã“れã¯ã€masterMap を使用ã—ãªã?“ã¨ã‚’æ„味ã—ã¾ã™ã?(masterKeys æŒ?®šã«ã‚ˆã‚‹GROUP化ã?
755             * 行ã„ã¾ã™ã?masterKeys を指定ã—ãªã??åˆã?ã€ã‚µãƒžãƒ©ã‚¤ã‚ºãªã—ã§å‡¦ç?—ã¾ã™ã?)
756             * 具体的ã«ã¯ã€ã?スタãƒ??ブルã®è¤?•°ã®è¡Œã«å¯¾ã—ã¦ã€ã‚¹ãƒ¬ãƒ¼ãƒ–データã®å€¤ãŒè¨­å®?
757             * ã•れるå¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã?
758             *
759             * @og.rev 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
760             *
761             * @param       masterTbl       マスターãƒ??ブルモãƒ?ƒ«
762             * @param       slaveKeys       スレーブキー
763             * @param       slaveTbl        スレーブテーブルモãƒ?ƒ«
764             * @param       slaveMap        スレーブテーブルã®ä¸»ã‚­ãƒ¼ãƒžãƒƒãƒ?
765             *
766             * @return      処ç?µæžœã®ãƒ??ブルモãƒ?ƒ«
767             */
768            private DBTableModel makeUnionClm( final DBTableModel masterTbl ,final String slaveKeys ,
769                                                                                    final DBTableModel slaveTbl ,final Map<String,Integer> slaveMap ) {
770    
771                    DBTableModel table = makeAddClm( masterTbl );
772    
773                    // カラãƒ?をカラãƒ?•ªå·ã«å¤‰æ›ã—ã¾ã™ã?
774                    int[] keyClmNo = makeColumnNo( table,slaveKeys );
775    
776                    int[] mClmNo = makeColumnNo( table   ,unionClms );
777                    int[] sClmNo = makeColumnNo( slaveTbl,unionClms );
778                    int   addSize = mClmNo.length;          // unionClms ã®å€‹æ•°ãªã®ã§ã€ã?スタã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã?åŒä¸?
779    
780                    // çªåˆã›ã‚’行ã„ã€ã?ãƒ?ƒã™ã‚‹ã‚«ãƒ©ãƒ?«ã¤ã?¦ã€å?ã‚’ã‚»ãƒ?ƒˆã—ç›´ã—ã¾ã™ã?
781    //              Map.Entry[] entry = slaveMap.entrySet().toArray( new Map.Entry[slaveMap.size()] );
782    
783                    for( int row=0; row<table.getRowCount(); row++ ) {
784                            String[] mvals = table.getValues( row );
785                            StringBuilder buf = new StringBuilder();
786                            for( int i=0; i<keyClmNo.length; i++ ) {
787                                    buf.append( mvals[keyClmNo[i]] ).append( "|" );
788                            }
789                            // ä¸»ã‚­ãƒ¼é€£çµæ–‡å­—å?
790    //                      String key = buf.toString();    // ä¸»ã‚­ãƒ¼é€£çµæ–‡å­—å?
791                            String key = buf.toString().toUpperCase(Locale.JAPAN);          // 5.5.8.5 (2012/11/27) 大æ–?­—ã?å°æ–‡å­—を区別ã—ãªã??
792                            if( slaveMap.containsKey( key ) ) {             // スレーブã«ãƒžã‚¹ã‚¿ã«å¯¾å¿œã™ã‚‹ãƒ‡ãƒ¼ã‚¿ãŒå­˜åœ¨ã™ã‚‹
793                                    int slvRow =  (slaveMap.get( key )).intValue();
794                                    String[] svals = slaveTbl.getValues( slvRow );          // スレーブã?行番å·
795                                    for( int j=0; j<addSize; j++ ) {
796                                            mvals[mClmNo[j]] = svals[sClmNo[j]];
797                                    }
798                                    table.setValues( mvals,row );
799                            }
800                    }
801                    table.resetModify();
802    
803                    return table;
804            }
805    
806            /**
807             * æŒ?®šã?マスタãƒ??ブル㫠列追åŠ?処ç?‚’実行ã—ã¾ã™ã?
808             *
809             * ã™ã§ã«ã€ã?スタ ã«ã‚«ãƒ©ãƒ?Œå­˜åœ¨ã—ã¦ã?‚‹å ´åˆã?ã€å?ã®æ›¸ãæ›ãˆã‚’ã€?
810             * カラãƒ?Œå­˜åœ¨ã—ãªã‘れã°ã€ã‚«ãƒ©ãƒ?‚’追åŠ?—ã¾ã™ã?
811             *
812             * @param       masterTbl       マスターãƒ??ブルモãƒ?ƒ«
813             *
814             * @return      処ç?µæžœã®ãƒ??ブルモãƒ?ƒ«
815             */
816            private DBTableModel makeAddClm( final DBTableModel masterTbl ) {
817                    String[]  addClms        = StringUtil.csv2Array( unionClms );
818                    int       addClmSize = addClms.length;
819                    boolean[] useAdd         = new boolean[addClmSize];
820                    int addSize = 0;
821                    for( int i=0; i<addClmSize; i++ ) {
822                            if( masterTbl.getColumnNo( addClms[i],false ) < 0 ) {        // 存在ã—ãªã‘れ㰠-1
823                                    useAdd[i] = true;
824                                    addSize++ ;
825                            }
826                            else {
827                                    useAdd[i] = false;              // マスタã«å­˜åœ¨ã™ã‚Œã°ã€è¿½åŠ?¸è¦?
828                            }
829                    }
830    
831                    int mstrClmSize = masterTbl.getColumnCount();
832                    int clmSize = mstrClmSize + addSize;
833    
834                    DBTableModel table = DBTableModelUtil.newDBTable();
835                    table.init( clmSize );
836                    int clmNo = 0;
837                    // マスタãƒ??ブルã®å…¨ã‚«ãƒ©ãƒ?‚’æ–°ãŸã«ä½œæ?ã™ã‚‹ãƒ??ブルã«ã‚³ãƒ”ã?ã—ã¾ã™ã?
838                    for( int i=0; i<mstrClmSize; i++ ) {
839                            table.setDBColumn( clmNo++,masterTbl.getDBColumn( i ) );
840                    }
841                    // 追åŠ?™ã‚‹ã‚«ãƒ©ãƒ?‚’æ–°ãŸã«ä½œæ?ã™ã‚‹ãƒ??ブルã«è¿½åŠ?—ã¾ã™ã?
842                    String[] addClmVal = new String[addSize];       // 追åŠ??ã®ã¿
843                    int addCnt = 0;
844                    for( int i=0; i<addClmSize; i++ ) {
845                            if( useAdd[i] ) {
846                                    DBColumn column = getDBColumn( addClms[i] );
847                                    addClmVal[addCnt++] = nval( column.getDefault(),"" );
848                                    table.setDBColumn( clmNo++,column );
849                            }
850                    }
851                    // ä¸?—¦ã€ã™ã¹ã¦ã®ãƒžã‚¹ã‚¿ãƒ??ã‚¿ã‚’æ–°ãƒ??ブルã«ã‚³ãƒ”ã?ã—ã¾ã™ã?
852                    for( int row=0; row<masterTbl.getRowCount(); row++ ) {
853                            String[] vals = new String[clmSize];
854                            System.arraycopy( masterTbl.getValues( row ),0,vals,0 ,mstrClmSize );   // マスタãƒ??ã‚¿ã®ã‚³ãƒ”ã?
855                            System.arraycopy( addClmVal,0,vals,mstrClmSize ,addSize );                              // 追åŠ??æƒ??ã®åˆæœŸå€¤
856                            table.addColumnValues( vals );
857                    }
858    
859                    return table;
860            }
861    
862            /**
863             * æŒ?®šã?マスタãƒ??ブルを使用ã—㦠グルーãƒ?処ç?‚’実行ã—ã¾ã™ã?
864             *
865             * @param       masterTbl       マスターãƒ??ブルモãƒ?ƒ«
866             *
867             * @return      処ç?µæžœã®ãƒ??ブルモãƒ?ƒ«
868             */
869            private DBTableModel makeGroup( final DBTableModel masterTbl ) {
870                    DBTableModel table = masterTbl;
871    
872                    return table;
873            }
874    
875            /**
876             * æŒ?®šã?ãƒ??ブルã¨åŒã˜ãƒ??ブルを別オブジェクトã¨ã—ã¦ä½œæ?ã—ã¾ã™ã?
877             *
878             * @param       tbl     コピã?å…?ƒ†ãƒ¼ãƒ–ルモãƒ?ƒ«
879             *
880             * @return      コピã?ã•ã‚ŒãŸæ–°ãƒ??ブルモãƒ?ƒ«
881             */
882            private DBTableModel cloneTable( final DBTableModel tbl ) {
883                    int clmSize = tbl.getColumnCount();
884    
885                    DBTableModel table = DBTableModelUtil.newDBTable();
886                    table.init( clmSize );
887    
888                    // ãƒ??ブルã®å…¨ã‚«ãƒ©ãƒ?‚’æ–°ãŸã«ä½œæ?ã™ã‚‹ãƒ??ブルã«ã‚³ãƒ”ã?ã—ã¾ã™ã?
889                    for( int i=0; i<clmSize; i++ ) {
890                            table.setDBColumn( i,tbl.getDBColumn( i ) );
891                    }
892                    // ã™ã¹ã¦ã®ãƒ??ã‚¿ã‚’æ–°ãƒ??ブルã«ã‚³ãƒ”ã?ã—ã¾ã™ã?
893                    for( int row=0; row<tbl.getRowCount(); row++ ) {
894                            String[] vals = new String[clmSize];
895                            System.arraycopy( tbl.getValues( row ),0,vals,0 ,clmSize );     // ãƒ??ã‚¿ã®ã‚³ãƒ”ã?
896                            table.addColumnValues( vals );
897                    }
898                    return table;
899            }
900    
901            /**
902             * æŒ?®šã?ãƒ??ブルよりã€ã‚«ãƒ©ãƒ??åã«å¯¾å¿œã™ã‚‹ã‚«ãƒ©ãƒ?•ªå·é…å?を作æ?ã—ã¾ã™ã?
903             *
904             * カラãƒ?ã®CSVãƒ??ã‚¿ã?æŒ?®šã•れãªã??å?clmcsv == null)ã¯ã€?•·ã•ï¼ã?é…å?ã‚’è¿”ã—ã¾ã™ã?
905             *
906             * @param       table   ãƒ??ブルモãƒ?ƒ«
907             * @param       clmcsv  カラãƒ?ã®CSVãƒ??ã‚¿
908             *
909             * @return      カラãƒ?ã«å¯¾å¿œã™ã‚‹ã?列番å·é…å?(ãªã‘れã°ã€?•·ã•ï¼é?åˆ?
910             */
911            private int[] makeColumnNo( final DBTableModel table,final String clmcsv ) {
912    
913                    // マスタãƒ??ブルã®å·®åˆ?±žæ?ã®ã‚«ãƒ©ãƒ?•ªå·ã‚’求ã‚ã¾ã™ã?
914                    String[] clms = StringUtil.csv2Array( clmcsv );
915                    int[] clmNo = new int[clms.length];
916    
917                    // カラãƒ?をカラãƒ?•ªå·ã«å¤‰æ›ã—ã¾ã™ã?
918                    for( int i=0; i<clms.length; i++ ) {
919                            clmNo[i] = table.getColumnNo( clms[i] );
920                    }
921    
922                    return clmNo;
923            }
924    
925            /**
926             * ã€TAG】コマンãƒ?NEW,RENEW)ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:NEW)ã€?
927             *
928             * @og.tag
929             * コマンドã?,HTMLã‹ã‚‰(get/post)æŒ?®šã•れã¾ã™ã?ã§,CMD_xxx ã§è¨­å®šã•れる
930             * フィールド定数値ã®ã?¥ã‚Œã‹ã‚’ã?æŒ?®šã§ãã¾ã™ã?
931             * åˆæœŸå€¤ã¯ NEW ã§ã™ã?
932             *
933             * @param       cmd     コマンãƒ?public static final 宣è¨?•れã¦ã?‚‹æ–?­—å?)
934             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.TableMergeTag.CMD_NEW">コマンド定数</a>
935             */
936            public void setCommand( final String cmd ) {
937                    String cmd2 = getRequestParameter( cmd );
938                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
939            }
940    
941            /**
942             * ã€TAG】アクションを指定ã—ã¾ã?UNION_ALL|UNION|INTERSECT|MINUS|DIFFERENCE|UNION_CLM|ADD_CLM|GROUP|UNION_SELROW)ã€?
943             *
944             * @og.tag
945             * æŒ?®šã§ãるアクションã¯ã€å?体集å?UNION_ALL)ã€å?体集å?挿入ä½ç½®æŒ?®?(UNION_SELROW)ã€å’Œé›?ˆ(UNION)
946             * ã€ç©é›†å?INTERSECT)ã€å·®é›?ˆ(MINUS)ã€å·®åˆ?›†å?DIFFERENCE)ã€å?åˆæ?(UNION_CLM)ã€å?追åŠ?ADD_CLM)ã€?グルーãƒ?GROUP)ã§ã™ã?
947             * åˆ—åˆæˆã¨ã‚°ãƒ«ãƒ¼ãƒ—以外ã?処ç?§ã¯ã€ã‚«ãƒ©ãƒ??ã¨ã‚«ãƒ©ãƒ?•°ã¯åŒæ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã€?
948             * primaryKeys ã‚?unionClms ãªã©ã®æŒ?®šã?キーåã?ã€ã?スタãƒ??ブルã«å­˜åœ¨ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?
949             * マスタãƒ??ブルã¨åŒã˜ã‚«ãƒ©ãƒ?•ªå·ã§ã‚¹ãƒ¬ãƒ¼ãƒ–テーブルよりãƒ??タを読ã¿å‡ºã—ã¾ã™ã?
950             * (カラãƒ?ã‚?±žæ?ã¯ã€ç•°ãªã£ã¦ã‚‚ã‹ã¾ã?¾ã›ã‚“ãŒã?マスタãƒ??ãƒ–ãƒ«ã«æº–æ‹ ã—ã¾ã™ã?)
951             * ã¾ãŸã?å˜ç‹¬(マスタãƒ??ブルã®ã¿)ã§ã€å’Œé›?ˆã¨åŒç­‰ã?ã€ã‚°ãƒ«ãƒ¼ãƒ?GROUP)を使用ã™ã‚‹ã¨ã€æŒ‡å®šã?
952             * カラãƒ?§ã®ãƒ¦ãƒ‹ã?ク化を行ã†ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã?グループå?ç?§ã¯ã€å?行優先ã¨ã—ã?
953             * ?’回目ã«ç¾ã‚ŒãŸæƒ??を削除ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã?グルーãƒ?ãŒæŒ‡å®šã•れãŸå ´åˆã?ã€?
954             * スレーブテーブルã¯ç„¡è¦–ã•れã¾ã™ã?ã?šã‚Œã?処ç?«ãŠã„ã¦ã‚‚ã?é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼ã§
955             * ä¸?—¦ã‚°ãƒ«ãƒ¼ãƒ—化ã•れã¾ã™ã?全体集å?UNION_ALL)ã§å‡¦ç?™ã‚‹å?åˆã§ã‚‚ã?主キーãŒãƒ¦ãƒ‹ã?クã§
956             * ãªã??åˆã?ã€ã?スターã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã?å?ƒ†ãƒ¼ãƒ–ルã§ä¸?—¦ã‚°ãƒ«ãƒ¼ãƒ—化ã•れãŸå¾Œã§ã€ã?ージã•れã¾ã™ã?
957             * (マã?ジ後ã«ã¯ã€åŒä¸?¸»ã‚­ãƒ¼ã‚’æŒã¤è¡Œã?存在ã—ã¾ã™ã?)
958             * 全体集å?UNION_ALL)ã®å ´åˆã?ã¿ã€mergeKeys を指定ã™ã‚‹å¿?¦ã?ã‚りã¾ã›ã‚“。ãã®å ´åˆã?ã€?
959             * キーãªã—ã?ãŸã‚ã€ã?スターã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã?ãƒ??ブルをå˜ã«åˆæ?ã™ã‚‹ã?‘ã«ãªã‚Šã¾ã™ã?
960             *
961             * <table border="1" frame="box" rules="all" >
962             *   <caption>アクションã®èª¬æ˜?/caption>
963             *   <tr><th>action      </th><th>åç§°    </th><th>処ç?¦‚è¦?                                                                                 </th><th>??/th><th>??/th><th>??/th><th>??/th><tr>
964             *   <tr><td>UNION_ALL   </td><td>全体集å?/td><td>マスタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã‚’åˆæ?
965             *   <tr><td>UNION_SELROW</td><td>全体集å?/td><td>マスタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã‚’åˆæ?(マスタ表ã®ãƒã‚§ãƒ?‚¯è¡Œã‚’起点ã«è¿½åŠ?/td><td>â—?/td><td>ã€?/td><td>ã€?/td><td>ã€?/td><tr>
966             *   <tr><td>UNION       </td><td>和集å? </td><td>マスタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã?ユニã?ク部ã®ã¿åˆæ?                                   </td><td>â—?/td><td>â—?/td><td>ã€?/td><td>ã€?/td><tr>
967             *   <tr><td>INTERSECT   </td><td>ç©é›†å? </td><td>マスタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã?ユニã?ク部ãŒä¸??ã™ã‚‹ãƒžã‚¹ã‚¿ã®ã¿é¸æŠ?</td><td>â—?/td><td>â—?/td><td>ã€?/td><td>ã€?/td><tr>
968             *   <tr><td>MINUS       </td><td>å·®é›?ˆ  </td><td>マスタã‹ã‚‰ã‚¹ãƒ¬ãƒ¼ãƒ–ã«å­˜åœ¨ã™ã‚‹ãƒ¦ãƒ‹ã?ク部を削除ã—ãŸæ®‹ã‚Š       </td><td>â—?/td><td>â—?/td><td>ã€?/td><td>ã€?/td><tr>
969             *   <tr><td>DIFFERENCE  </td><td>å·®åˆ?›†å?/td><td>ユニã?ク部ãŒä¸??ã—ã?å·®åˆ?‚«ãƒ©ãƒ?Œç•°ãªã‚‹ã?スタã®ã¿é¸æŠ?</td><td>â—?/td><td>â—?/td><td>ã€?/td><td>â—?/td><tr>
970             *   <tr><td>UNION_CLM   </td><td>åˆ—åˆæˆ? </td><td>マスタã¨ã‚­ãƒ¼ä¸??ã™ã‚‹ã‚¹ãƒ¬ãƒ¼ãƒ–ã?カラãƒ?ƒ…報を追åŠ?  </td><td>â—?/td><td>â—?/td><td>â—?/td><td>ã€?/td><tr>
971             *   <tr><td>ADD_CLM     </td><td>列追åŠ? </td><td>UNION_CLMã¨ã®é•ã„ã¯ã€ã‚«ãƒ©ãƒ??ã¿è¿½åŠ?™ã‚‹ã“ã¨ã§ã™ã?       </td><td>ã€?/td><td>ã€?/td><td>â—?/td><td>ã€?/td><tr>
972             *   <tr><td>GROUP       </td><td>グルーãƒ?/td><td>マスタã®ãƒ¦ãƒ‹ã?ク部åŒ?                                                           </td><td>ã€?/td><td>ã€?/td><td>ã€?/td><td>ã€?/td><tr>
973             * </table>
974             *
975             * ※?šã?スタãƒ??ブルオブジェクトã?ã€å¸¸ã«å¿??
976             * ?‘:スレーブテーブルオブジェクトå¿??
977             * ?’:masterKeys 属æ?å¿??
978             * ?“:unionClms 属æ?å¿??(スレーブテーブルã®ã‚«ãƒ©ãƒ?ã¾ãŸã?追åŠ?™ã‚‹ã‚«ãƒ©ãƒ?)
979             * ?”:diffKeys 属æ?å¿??(DIFFERENCE時ã?å·®åˆ?‚«ãƒ©ãƒ?)ã€modifyClms 属æ?使用å¯èƒ½
980             *
981             * @param       action アクション(UNION_ALL|UNION|INTERSECT|MINUS|DIFFERENCE|UNION_CLM|ADD_CLM|GROUP|UNION_SELROW)
982             */
983            public void setAction( final String action ) {
984                    this.action = nval( getRequestParameter( action ),this.action );
985            }
986    
987            /**
988             * ã€TAG】å?力å?ã®tableIdを指定ã—ã¾ã?
989             *              (åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])ã€?
990             *
991             * @og.tag
992             * é›?ˆå‡¦ç?µæžœã® DBTableModel をメモリã«ã‚»ãƒ?ƒˆã™ã‚‹å ´åˆã?キー(tableId)を指定ã—ã¾ã™ã?
993             * (åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])ã€?
994             *
995             * @param       tableId 出力å?ã®tableId
996             * @see         org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY
997             */
998            public void setTableId( final String tableId ) {
999                    this.tableId = nval( getRequestParameter( tableId ),this.tableId );
1000            }
1001    
1002            /**
1003             * ã€TAG】å?力å?ã®scopeを指定ã—ã¾ã?åˆæœŸå€¤:session)ã€?
1004             *
1005             * @og.tag
1006             * é›?ˆå‡¦ç?µæžœã® DBTableModel をメモリã«ã‚»ãƒ?ƒˆã™ã‚‹å ´åˆã?スコープをæŒ?®šã—ã¾ã™ã?
1007             * ã“ã“ã§ã¯ã€ã?スタã‚?‚¹ãƒ¬ãƒ¼ãƒ–ã?スコープ設定ãŒå¿?¦ãªç‚ºã€superクラスã®ãƒ¡ã‚½ãƒ?ƒ‰ã‚?
1008             * オーãƒã?ライドã—ã¦ã“ã?オブジェクトå?ã§ã‚­ãƒ¼ãƒ—ã—ã¦ã?¾ã™ã?
1009             * åˆæœŸå€¤ã¯ã€session ã§ã™ã?
1010             *
1011             * @param       scope   出力å?ã®scope
1012             */
1013            @Override
1014            public void setScope( final String scope ) {
1015                    this.scope = nval( getRequestParameter( scope ),this.scope );
1016            }
1017    
1018            /**
1019             * ã€TAG】ã?スタãƒ??ブルã®tableIdを指定ã—ã¾ã?
1020             *              (åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])ã€?
1021             *
1022             * @og.tag
1023             * é›?ˆå‡¦ç??マスタã¨ãªã‚?DBTableModel をメモリã‹ã‚‰å–り出ã™å?åˆã?キー(tableId)を指定ã—ã¾ã™ã?
1024             * (åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])ã€?
1025             *
1026             * @param       masterTableId   マスタãƒ??ブルã®tableId
1027             * @see         org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY
1028             */
1029            public void setMasterTableId( final String masterTableId ) {
1030                    this.masterTableId = nval( getRequestParameter( masterTableId ),this.masterTableId );
1031            }
1032    
1033            /**
1034             * ã€TAG】ã?スタãƒ??ブルã®scopeを指定ã—ã¾ã?åˆæœŸå€¤:session)ã€?
1035             *
1036             * @og.tag
1037             * é›?ˆå‡¦ç??マスタã¨ãªã‚?DBTableModel をメモリã‹ã‚‰å–り出ã™å?åˆã?スコープをæŒ?®šã—ã¾ã™ã?
1038             * åˆæœŸå€¤ã¯ã€session ã§ã™ã?
1039             *
1040             * @param       masterScope     マスタãƒ??ブルã®scope
1041             */
1042            public void setMasterScope( final String masterScope ) {
1043                    this.masterScope = nval( getRequestParameter( masterScope ),this.masterScope );
1044            }
1045    
1046            /**
1047             * ã€TAG】ã?スタãƒ??ブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼ã‚’指定ã—ã¾ã™ã?
1048             *
1049             * @og.tag
1050             * é›?ˆå‡¦ç?‚’行ã†å ´åˆã?ã€ã‚«ãƒ©ãƒ?ã‚’ã?カンマ区åˆ?‚Šæ–?­?CSVå½¢å¼?ã§æŒ?®šã—ã¾ã™ã?
1051             * ã“ã?キーã®çµ?¿åˆã‚ã›ã‚’å…?«ã€?›†åˆå?ç??çªåˆã›ã‚’行ã„ã¾ã™ã?
1052             * ãªãŠã?アクションãŒã‚°ãƒ«ãƒ¼ãƒ?GROUP)以外ã?処ç?§ã¯ã€ã?スタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã?カラãƒ?•°ã¨
1053             * 並ã³é ??ã€åŒã˜ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。カラãƒ?ã¯ã€å„ã€?ˆ¥ã€?§ã‚‚ã‹ã¾ã?¾ã›ã‚“ã€?
1054             * アクションãŒå?体集å?UNION_ALL)以外ã?å ´åˆã?ã€å¿??属æ?ã«ãªã‚Šã¾ã™ã?
1055             *
1056             * @param       masterKeys      マスタãƒ??ブルã®ä¸»ã‚­ãƒ¼ã‚’CSVå½¢å¼ã§æŒ?®?
1057             */
1058            public void setMasterKeys( final String masterKeys ) {
1059                    this.masterKeys = nval( getRequestParameter( masterKeys ),this.masterKeys );
1060            }
1061    
1062            /**
1063             * ã€TAG】スレーブテーブルã®é›?ˆå‡¦ç?‚’行ã†ä¸»ã‚­ãƒ¼ã‚’指定ã—ã¾ã™ã?
1064             *
1065             * @og.tag
1066             * é›?ˆå‡¦ç?‚’行ã†å ´åˆã?ã€ã‚«ãƒ©ãƒ?ã‚’ã?カンマ区åˆ?‚Šæ–?­?CSVå½¢å¼?ã§æŒ?®šã—ã¾ã™ã?
1067             * ã“ã?キーã®çµ?¿åˆã‚ã›ã‚’å…?«ã€?›†åˆå?ç??çªåˆã›ã‚’行ã„ã¾ã™ã?
1068             * ãªãŠã?アクションãŒã‚°ãƒ«ãƒ¼ãƒ?GROUP)以外ã?処ç?§ã¯ã€ã?スタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã?カラãƒ?•°ã¨
1069             * 並ã³é ??ã€åŒã˜ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。カラãƒ?ã¯ã€å„ã€?ˆ¥ã€?§ã‚‚ã‹ã¾ã?¾ã›ã‚“ã€?
1070             * null ã®å ´åˆã?ã€masterKeys ã¨åŒã˜ã¨ã—ã¾ã™ã?
1071             *
1072             * @param       slaveKeys       スレーブテーブルã®ä¸»ã‚­ãƒ¼ã‚’CSVå½¢å¼ã§æŒ?®?
1073             */
1074            public void setSlaveKeys( final String slaveKeys ) {
1075                    this.slaveKeys = nval( getRequestParameter( slaveKeys ),this.slaveKeys );
1076            }
1077    
1078            /**
1079             * ã€TAG】ã?スタãƒ??ブルã®DIFFERENCE時ã?å·®åˆ?‚«ãƒ©ãƒ?ã‚?CSVå½¢å¼?æŒ?®šã—ã¾ã™ã?
1080             *
1081             * @og.tag
1082             * アクションãŒå·®åˆ??ç?DIFFERENCE)ã®å ´åˆã«ã€å·®åˆ?ƒã‚§ãƒ?‚¯ã‚’行ã†ã‚«ãƒ©ãƒ?ã‚’ã?
1083             * カンマ区åˆ?‚Šæ–?­?CSVå½¢å¼?ã§æŒ?®šã—ã¾ã™ã?
1084             * å·®åˆ??ç?¨ã¯ã€masterKeys ã§æŒ?®šã•れãŸã‚­ãƒ¼ã§ã¯ã€ã?スタã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã¨ã‚‚ã«å­˜åœ¨ã?
1085             * ã‹ã¤ã€ã“ã®ã‚­ãƒ¼(diffKeys)ã§æŒ?®šã•れãŸã‚­ãƒ¼ã®å€¤ãŒç•°ãªã‚‹ã?スタレコードを
1086             * 抜ã出ã—ã¾ã™ã?
1087             * ã¤ã¾ã‚Šã?主キーã¯å­˜åœ¨ã—ã?属æ?ãŒç•°ãªã‚‹æƒ…å ±ã®ãƒ”ックアãƒ??ã«ãªã‚Šã¾ã™ã?ã§ã€?
1088             * ãƒ??ã‚¿æ›´æ–°(UPDATE)対象を見ã¤ã‘ã‚‹å ´åˆã«ä½¿ç”¨ã§ãã¾ã™ã?
1089             * アクションãŒå·®åˆ??ç?DIFFERENCE)ã®å ´åˆã?ã€å¿??属æ?ã«ãªã‚Šã¾ã™ã?
1090             *
1091             * @param       diffKeys        マスタãƒ??ブルã®å·®åˆ?‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®?
1092             * @see         #setMasterKeys( String )
1093             */
1094            public void setDiffKeys( final String diffKeys ) {
1095                    this.diffKeys = nval( getRequestParameter( diffKeys ),this.diffKeys );
1096            }
1097    
1098            /**
1099             * ã€TAG】スレーブテーブルã®tableIdを指定ã—ã¾ã?
1100             *              (åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])ã€?
1101             *
1102             * @og.tag
1103             * é›?ˆå‡¦ç??スレーブã¨ãªã‚?DBTableModel をメモリã‹ã‚‰å–り出ã™å?åˆã?キー(tableId)を指定ã—ã¾ã™ã?
1104             * ãªãŠã?アクションãŒã‚°ãƒ«ãƒ¼ãƒ?GROUP)ã®å ´åˆã?ã€ã‚¹ãƒ¬ãƒ¼ãƒ–テーブルã¯ä½¿ç”¨ã•れã¾ã›ã‚“ã€?
1105             * (åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])ã€?
1106             *
1107             * @param       slaveTableId    スレーブテーブルã®tableId
1108             * @see         org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY
1109             */
1110            public void setSlaveTableId( final String slaveTableId ) {
1111                    this.slaveTableId = nval( getRequestParameter( slaveTableId ),this.slaveTableId );
1112            }
1113    
1114            /**
1115             * ã€TAG】スレーブテーブルã®scopeを指定ã—ã¾ã?åˆæœŸå€¤:session)ã€?
1116             *
1117             * @og.tag
1118             * é›?ˆå‡¦ç??スレーブã¨ãªã‚?DBTableModel をメモリã‹ã‚‰å–り出ã™å?åˆã?スコープをæŒ?®šã—ã¾ã™ã?
1119             * ãªãŠã?アクションãŒã‚°ãƒ«ãƒ¼ãƒ?GROUP)ã®å ´åˆã?ã€ã‚¹ãƒ¬ãƒ¼ãƒ–テーブルã¯ä½¿ç”¨ã•れã¾ã›ã‚“ã€?
1120             * åˆæœŸå€¤ã¯ã€session ã§ã™ã?
1121             *
1122             * @param       slaveScope      スレーブテーブルã®scope
1123             */
1124            public void setSlaveScope( final String slaveScope ) {
1125                    this.slaveScope = nval( getRequestParameter( slaveScope ),this.slaveScope );
1126            }
1127    
1128            /**
1129             * ã€TAG】スレーブã‹ã‚‰ã?スタã¸è¿½åŠ?™ã‚‹ã‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®šã—ã¾ã™ã?
1130             *
1131             * @og.tag
1132             * アクションãŒå?åˆæ?(UNION_CLM)ã¾ãŸã?列追åŠ?ADD_CLM)ã®å ´åˆã«ä½¿ç”¨ã•れã¾ã™ã?
1133             * åˆ—åˆæˆ?UNION_CLM)ã¯ã€ã?スタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ã?主キーã«å¯¾ã—ã¦ã€ã“ã“ã§æŒ?®šã?スレーブã?
1134             * カラãƒ??åã‚’ã€ã?スタã®åˆ—ã«è¿½åŠ?—ã¾ã™ã?主キーãŒã?ãƒ?ƒã—ãªã?¡Œã«é–¢ã—ã¦ã¯ã€?
1135             * カラãƒ??åˆæœŸå€¤ãŒé©ç”¨ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’作æ?ã—ã¾ã™ã?
1136             * 列追åŠ?ADD_CLM)ã¯ã€ã?スタãƒ??ãƒ–ãƒ«ã«æŒ?®šã?カラãƒ?‚’追åŠ?™ã‚‹ã ã‘ã§ã™ã?スレーブテーブルã¯
1137             * å‚ç?ã—ã¾ã›ã‚“。よã£ã¦ã€ä¸»ã‚­ãƒ¼ã‚‚指定ä¸è¦ã§ã™ã?
1138             *
1139             * @param       unionClms       åˆ—åˆæˆã™ã‚‹ã‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®?
1140             */
1141            public void setUnionClms( final String unionClms ) {
1142                    this.unionClms = nval( getRequestParameter( unionClms ),this.unionClms );
1143            }
1144    
1145            /**
1146             * ã€TAG】スレーブã‹ã‚‰ã?スタã¸å€¤ã‚’æ›´æ–°ã™ã‚‹ã‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®šã—ã¾ã™ã?
1147             *
1148             * @og.tag
1149             * アクションãŒå·®åˆ??ç?DIFFERENCE)ã®å ´åˆã«ã€çµæžœã«ãƒžã‚¹ã‚¿ãƒ??ãƒ–ãƒ«ãŒæŠœãå?ã•れã¾ã™ãŒã€?
1150             * æ›´æ–°ã™ã‚‹å ´åˆã«ã€ã‚¹ãƒ¬ãƒ¼ãƒ–特有ã?ユニã?クキー(例:UNIQ)を用ã?¦æ›´æ–°ã™ã‚‹å ´åˆã?
1151             * æŒ?®šã?カラãƒ??ã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã?値ã«ã‚»ãƒ?ƒˆã—ã¦ãŠããŸã„å ´åˆãŒã‚りã¾ã™ã?
1152             * ã“ã“ã§ã¯ã€æŒ‡å®šã?カラãƒ?«ã¤ã?¦ã€å?ã?‘スレーブã‹ã‚‰ã?スタã¸ã‚»ãƒ?ƒˆã—ã¾ã™ã?
1153             * ãªãŠã?å€¤ã®æ›´æ–°ã«ã¤ã?¦ã¯ã€ã?スタã¨ã‚¹ãƒ¬ãƒ¼ãƒ–ãŒåŒä¸?‚­ãƒ¼ã¨ã?†åˆ¶ç´?Œã‚りã¾ã™ã?
1154             *
1155             * @param       modifyClms      値を更新ã™ã‚‹ã‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®?
1156             */
1157            public void setModifyClms( final String modifyClms ) {
1158                    this.modifyClms = nval( getRequestParameter( modifyClms ),this.modifyClms );
1159            }
1160    
1161            /**
1162             * ã€TAG】集åˆå?ç?™ã‚‹ã¨ãã«ã€ç›¸é•データをCSV連çµã—ã¦æ®‹ã™ã‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®šã—ã¾ã™ã?
1163             *
1164             * @og.tag
1165             * masterKeysã§é›?ˆå‡¦ç?™ã‚‹ã¨ãã«ã€??å¸¸ã€æœ€åˆã«è¦‹ã¤ã‹ã£ãŸè¡Œãƒ‡ãƒ¼ã‚¿ã®ã¿æ®‹ã‚Šã¾ã™ãŒã€?
1166             * ã“ã“ã«æŒ?®šã—ãŸã‚«ãƒ©ãƒ?«ã¤ã?¦ã¯ã€ç™ºç”Ÿé?度ã€è?åˆ??èº«ã®æƒ??ã«ã€CSVå½¢å¼ã§é€£çµã—ã¦
1167             * ã?ã¾ã™ã?
1168             * ã“ã?æ“作ã«ã‚ˆã‚Šã€æœ¬æ¥å‰Šé™¤ã•ã‚ŒãŸæƒ…å ±ãŒã??‘行ã?CSVå½¢å¼ã§å–å¾—ã§ãる効果ãŒå¾—られã¾ã™ã?
1169             * ã“れã¯ã€value ã‚¿ã‚°ã® action="APPEND" ã‚’ã?DBTableModel ã«å¯¾ã—ã¦å®Ÿæ–½ã™ã‚‹ã‚ˆã†ãªæ„Ÿã˜ã§ã™ã?
1170             *
1171             * @og.rev 5.1.4.0 (2010/03/01) æ–°è¦è¿½åŠ?
1172             *
1173             * @param       groupAddClms    相é•データをCSV連çµã—ã¦æ®‹ã™ã‚«ãƒ©ãƒ?ã‚’CSVå½¢å¼ã§æŒ?®?
1174             */
1175            public void setGroupAddClms( final String groupAddClms ) {
1176                    this.groupAddClms = nval( getRequestParameter( groupAddClms ),this.groupAddClms );
1177            }
1178    
1179            /**
1180             * ã€TAG】テーブルモãƒ?ƒ«ã«å¯¾ã™ã‚‹å‰¯ä½œç”¨ã®æœ‰ç„¡[true:ãªã?false:ã‚ã‚‹]を指定ã—ã¾ã?åˆæœŸå€¤:false:ã‚ã‚‹)ã€?
1181             *
1182             * @og.tag
1183             * ã™ã¹ã¦ã®å‡¦ç?§ã€DBTableModel ã«å¯¾ã—ã¦ã€ãƒ¦ãƒ‹ã?ク化やグループ化ãªã©ã®é›?ˆå‡¦ç?‚’
1184             * 行ã†éŽç¨‹ã§ã€ã?スタãƒ??ブルã«å¯¾ã—ã¦ç›´æŽ¥å‡¦ç?‚’行ã†ã¨ã€å‰¯ä½œç”¨ãŒç™ºç”Ÿã—ã¾ã™ã?
1185             * åŒæ§˜ã«ã€ã‚¹ãƒ¬ãƒ¼ãƒ–テーブルã«ãŠã„ã¦ã‚‚ã?ä¸?—¦ã‚­ãƒ¼åˆ—ã§ã‚°ãƒ«ãƒ¼ãƒ—化ã•れるãŸã‚ã?副作用ã?
1186             * 発生ã—ã¾ã™ã?ã“れã¯ã€ç„¡é§?ªãƒ¡ãƒ¢ãƒªé ˜åŸŸã®ç¢ºä¿ã¨ã€ãƒ†ãƒ¼ãƒ–ル(マスタã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã¨ã‚?ã®
1187             * コピã?処ç?™‚é–“ã?ç¯?´?«ãªã‚Šã¾ã™ã?åˆæœŸå€¤ã®è¨­å®šã‚‚副作用ãŒã‚る状態ã«ãªã£ã¦ã?¾ã™ã?
1188             * ã¨ã“ã‚ãŒã?都åˆã«ã‚ˆã£ã¦ã¯ã€è‰²ã€?ª action ã‚’é?ç¶šã—ã¦è¡Œã„ãŸã„å ´åˆãªã©ã€æ¯Žå›žã€?
1189             * ãƒ??タベã?スを検索ã™ã‚‹ã‚ˆã‚Šã‚‚メモリ上ã§ã‚³ãƒ”ã?ã—ãŸã»ã?Œéƒ½åˆãŒã‚ˆã„ケースã§ã¯ã€?
1190             * 副作用ãŒå?ãªã?‚ˆã?«ã€noSideEffect="true" ã«è¨­å®šã—ã¾ã™ã?
1191             * ãŸã ã—ã?マスタã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã¨ã‚‚テーブルをコピã?を行ã„ã€çµæžœã®ãƒ??ブルも派生ã™ã‚‹ç‚ºã€?
1192             * 通常ã€?¼’ã¤ã®é ˜åŸŸ(マスタã¨çµæžœã¯åŒã˜ãƒ??ãƒ–ãƒ«ã«æ›¸ã‹ã‚Œã‚?ã§è‰¯ã?‰€ã‚’ã??•ã¤ã®é ˜åŸŸã?
1193             * 作æ?ã•れã¾ã™ã?
1194             * åˆæœŸå€¤ã¯ã€å‰¯ä½œç”¨ãŒã‚ã‚?noSideEffect="false")ã§ã™ã?
1195             *
1196             * @param       noSideEffect    ãƒ??ブルモãƒ?ƒ«ã«å¯¾ã™ã‚‹å‰¯ä½œç”¨ [true:ãªã?false:ã‚ã‚‹]
1197             */
1198            public void setNoSideEffect( final String noSideEffect ) {
1199                    this.noSideEffect = nval( getRequestParameter( noSideEffect ),this.noSideEffect );
1200            }
1201    
1202            /**
1203             * ã€TAG】差åˆ??ã‚¹ãƒ¬ãƒ¼ãƒ–ãƒ‡ãƒ¼ã‚¿ã‚’çµæžœãƒ??ブルã«è¿½åŠ?™ã‚‹ã‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:true)ã€?
1204             *
1205             * @og.tag
1206             * アクションãŒå·®åˆ??ç?DIFFERENCE)ã®å ´åˆã«ã€çµæžœã«ãƒžã‚¹ã‚¿ãƒ??ãƒ–ãƒ«ãŒæŠœãå?ã•れã¾ã™ãŒã€?
1207             * å·®åˆ?¯¾è±¡ã®ã‚¹ãƒ¬ãƒ¼ãƒ–ãƒ‡ãƒ¼ã‚¿ã¨æ¯”è¼?—ãŸã„å ´åˆãŒã‚りã¾ã™ã?
1208             * ã“ã?フラグã‚?true ã«ã‚»ãƒ?ƒˆã™ã‚‹ã¨ã€æ›¸è¾¼ã¿ç¦æ­¢å±žæ?ãŒä»˜ã„ãŸçŠ¶æ…‹ã§ã€ã‚¹ãƒ¬ãƒ¼ãƒ–データã?
1209             * çµæžœãƒ??ブルã«è¿½åŠ?•れã¾ã™ã?
1210             * ãªãŠã?ã“ã?処ç?§ã¯ã€??常ã¨ç•°ãªã‚Šã?マスタãƒ??ブルã«ã¯ã‚°ãƒ«ãƒ¼ãƒ—化ã®å‰¯ä½œç”¨ã¯ç™ºç”Ÿã—ã¾ã™ãŒã€?
1211             * çµæžœãƒ??ãƒ–ãƒ«ã¯æ–°è¦ã«ä½œæ?ã•れã€å?頭行ã«å¿?š WRITABLE カラãƒ?Œä»˜åŠ ã•れã¾ã™ã?
1212             * åˆæœŸå€¤ã¯ã€true?šè¿½åŠ?™ã‚?ã§ã™ã?
1213             *
1214             * @param       flag    ã‚¹ãƒ¬ãƒ¼ãƒ–ãƒ‡ãƒ¼ã‚¿ã‚’çµæžœãƒ??ブルã«è¿½åŠ?™ã‚‹ã‹ã©ã?‹(åˆæœŸå€¤:true)
1215             */
1216            public void setUseDiffData( final String flag ) {
1217                    useDiffData = nval( getRequestParameter( flag ),useDiffData );
1218            }
1219    
1220            /**
1221             * ã€TAG】ã?スタãƒ??ブルã®é¸æŠžè¡Œã?ãƒ??ã‚¿ã®ã¿ã‚’対象ã«å‡¦ç?‚’行ã†ã‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
1222             *
1223             * @og.tag
1224             * 処ç?¯¾è±¡ã®ãƒžã‚¹ã‚¿ãƒ??ブルã«ã¤ã?¦ã€?¸æŠžè¡ŒãŒæŒ?®šã•れãŸå ´åˆã«ã€?¸æŠžè¡Œã?ã¿ã‚’å?ç?¯¾è±¡ã«
1225             * ã™ã‚‹ã‹ã?全件を対象ã«ã™ã‚‹ã‹ã‚’æŒ?®šã—ã¾ã™ã?
1226             * ç©é›†åˆã‚„å·®åˆ?›†åˆãªã©é€šå¸¸ã¯ã€å?件を対象ã«ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ãŒã€å?åˆæ?ã‚??追åŠ?ªã©ã€?
1227             * マスタãƒ??ブルã«å¯¾ã—ã¦ã®ã¿ä½œç”¨ã‚’åŠã¼ã™å?ç?§ã¯ã€?¸æŠžè¡Œã?ã¿ã‚’対象ã«å‡¦ç?‚’行ã†äº‹ãŒ
1228             * è€?ˆã‚‰ã‚Œã¾ã™ã?ãã?å ´åˆã?åˆæœŸã‚°ãƒ«ãƒ¼ãƒ—化ã¨åŒã˜ã§ã€å¯¾è±¡ã¨ã™ã‚‹è¡ŒãŒé¸æŠžè¡Œã?ã¿ã«ãªã‚Šã¾ã™ã?
1229             * åˆæœŸå€¤ã¯ã€false?šå?件対象 ã§ã™ã?
1230             *
1231             * @param       flag    マスタãƒ??ブルã®é¸æŠžè¡Œã?ãƒ??ã‚¿ã®ã¿ã‚’対象ã«å‡¦ç?‚’行ã†ã‹ã©ã?‹(åˆæœŸå€¤:false)
1232             */
1233            public void setUseCheckOnly( final String flag ) {
1234                    useCheckOnly = nval( getRequestParameter( flag ),useCheckOnly );
1235            }
1236    
1237            /**
1238             * ã€TAG】ã?ージã®çµæžœã‚’表示ã™ã‚‹ã‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:true)ã€?
1239             *
1240             * @og.tag
1241             * true ã§ã€ã?ãƒ¼ã‚¸çµæžœã‚’表示ã—ã¾ã™ã? false ã§ã¯ã€ä½•も表示ã—ã¾ã›ã‚“(åˆæœŸå€¤:true)
1242             * マスタãƒ??ブルã®ä»¶æ•°ã¯ã€??常ã€ã‚­ãƒ¼ã§ã‚°ãƒ«ãƒ¼ãƒ—化ã•れるãŸã‚ã?入力件数ã¨ç•°ãªã‚Šã¾ã™ã?
1243             * åŒæ§˜ã«ã€ã‚¹ãƒ¬ãƒ¼ãƒ–ä»¶æ•°ã‚‚ç•°ãªã‚Šã¾ã™ã?çµæžœã®ä»¶æ•°ã¯ã€å?ç?µæžœãŒç¾å®Ÿçš„ã‹ã©ã?‹ã®
1244             * 判断ã«ä½¿ç”¨ã•れã¾ã™ã?
1245             * åˆæœŸå€¤ã¯ã€true?šè¡¨ç¤ºã™ã‚‹ ã§ã™ã?
1246             *
1247             * @param       flag    接続ã?çµæžœã‚’表示ã™ã‚‹ã‹ã©ã?‹(åˆæœŸå€¤:false)
1248             */
1249            public void setDisplay( final String flag ) {
1250                    display = nval( getRequestParameter( flag ),display );
1251            }
1252    
1253            /**
1254             * ã€TAGã€?通常使ã?¾ã›ã‚“)ã‚¿ã‚°ã§å‡¦ç?•れる処ç?Œãƒ¡ã‚¤ãƒ³ã¨ãªã‚‹ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å‡¦ç?‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
1255             *
1256             * @og.tag
1257             * ã“ã?値ã¯ã€ãƒ•ァイルãƒ?‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰å?ç?«å½±éŸ¿ã—ã¾ã™ã?ã“ã?値ãŒtrueã«æŒ?®šã•ã‚ŒãŸæ™‚ã«commitã•れãŸDBTableModelã?
1258             * ファイルãƒ?‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã?対象ã®è¡¨ã«ãªã‚Šã¾ã™ã?
1259             *
1260             * ã“ã?パラメーターã¯ã€??常ã€å„ã‚¿ã‚°ã«ã‚ˆã‚Šå®Ÿè£?•れã?ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã™ã‚‹å¿?¦ã?ã‚りã¾ã›ã‚“ã€?
1261             * ä½?—ã€?ã¤ã®JSPå†?§DBTableModelãŒè¤?•°ç”Ÿæ?ã•れるå?åˆã«ã€å‰ã«å‡¦ç?—ãŸDBTableModelã«ã¤ã?¦ãƒ•ァイルãƒ?‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’ã•ã›ãŸã„
1262             * å ´åˆã?ã€å¾Œã‚ã§DBTableModelを生æˆã™ã‚‹ã‚¿ã‚°ã§ã€æ?示çš?«ã“ã?値をfalseã«æŒ?®šã™ã‚‹ã“ã¨ã§ã€ãƒ•ァイルãƒ?‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰å?ç??対象ã‹ã‚‰
1263             * 除外ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
1264             *
1265             * @og.rev 5.1.6.0 (2010/05/01) æ–°è¦ä½œæ?
1266             *
1267             * @param  flag メイントランザクションã‹ã©ã?‹
1268             */
1269            public void setMainTrans( final String flag ) {
1270                    isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
1271            }
1272    
1273            /**
1274             * ã€TAG】groupAddClmsã§æ–?­—å?ã‚’é?çµã™ã‚‹é?目区åˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:",")ã€?
1275             *
1276             * @og.tag
1277             * groupAddClmsã§æ–?­—å?ã‚’é?çµã™ã‚‹é?目区åˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:",")ã€?
1278             * åˆæœŸå€¤ã¯ã€?," ã«è¨­å®šã•れã¦ã?¾ã™ã?
1279             *
1280             * @og.rev 5.3.1.0 (2011/01/01)
1281             *
1282             * @param   sepa        é ?›®åŒºåˆ?‚Šæ–?­?åˆæœŸå€¤:",")
1283             */
1284            public void setSeparator( final String sepa ) {
1285                    separator = nval( getRequestParameter( sepa ),separator );
1286            }
1287    
1288            /**
1289             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
1290             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
1291             *
1292             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
1293             */
1294            @Override
1295            public String toString() {
1296                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
1297                                    .println( "VERSION"                     ,VERSION                )
1298                                    .println( "action"                      ,action                 )
1299                                    .println( "tableId"                     ,tableId                )
1300                                    .println( "scope"                       ,scope                  )
1301                                    .println( "masterTableId"       ,masterTableId  )
1302                                    .println( "masterScope"         ,masterScope    )
1303                                    .println( "slaveTableId"        ,slaveTableId   )
1304                                    .println( "slaveScope"          ,slaveScope             )
1305                                    .println( "masterKeys"          ,masterKeys             )
1306                                    .println( "diffKeys"            ,diffKeys               )
1307                                    .println( "unionClms"           ,unionClms              )
1308                                    .println( "modifyClms"          ,modifyClms             )
1309                                    .println( "noSideEffect"        ,noSideEffect   )
1310                                    .println( "useDiffData"         ,useDiffData    )
1311                                    .println( "useCheckOnly"        ,useCheckOnly   )
1312                                    .println( "display"                     ,display                )
1313                                    .println( "ACTION_LIST"         ,ACTION_LIST    )
1314                                    .println( "Other..."    ,getAttributes().getAttribute() )
1315                                    .fixForm().toString() ;
1316            }
1317    }