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.html;
017    
018    import java.util.Arrays;
019    import java.util.Iterator;
020    import java.util.List;
021    import java.util.Map;
022    import java.io.Writer;
023    import java.io.IOException;
024    
025    import org.opengion.fukurou.util.StringUtil;
026    import org.opengion.fukurou.util.Attributes;
027    
028    import org.opengion.hayabusa.common.HybsSystem;
029    import org.opengion.hayabusa.common.HybsSystemException;
030    import org.opengion.hayabusa.db.DBColumn;
031    import org.opengion.hayabusa.db.DBTableModel;
032    import org.opengion.hayabusa.resource.ResourceManager;
033    
034    /**
035     * ViewForm インターフェース の実è£?bstractクラスですã?
036     * これã‚?共通ã?スーパã?クラスとして å�?¨®表示フォーãƒ?例:HTML表示ç­?に使ã�?�¾すã?
037     *
038     * こã?クラス は、setter/getterメソãƒ?ƒ‰のãƒ?ƒ•ォルト実è£?‚’提供してã�?�¾すã?
039     * å�?¨®表示フォーãƒ?�«対応したサブクラス上で, create() をオーバã?ライドして下さã�??
040     *
041     * @og.group 画面表示
042     *
043     * @version  4.0
044     * @author       Kazuhiko Hasegawa
045     * @since    JDK5.0,
046     */
047    public abstract class AbstractViewForm implements ViewForm {
048            // 5.2.1.0 (2010/10/01)
049            private final int COLUMNS_MAXSIZE = HybsSystem.sysInt( "HTML_COLUMNS_MAXSIZE" ) ;       // 表示フィールドã?大きさ
050    
051            // 3.8.0.3 (2005/07/15) 新しいヘッãƒ??固定用のDIV要ç´?‚’åˆ?�‘るã?
052            private static final String LAYER_ST0 = "" ;
053            private static final String LAYER_END0 = "" ;
054            private static final String LAYER_END2 = "<a href=\"#top\" name=\"h_end\" id=\"h_end\" ></a></div></div></div></div>" ;
055    
056            // 5.1.8.0 (2010/07/01) groupClass のタイプを定義しますã?
057            private static enum CLM_GRP { KIGO , CHAR };
058    
059            private String                  name                    = "";           // メニューの名前
060            private DBTableModel    table                   = null;
061            private DBColumn[]              dbColumn                = null;
062            private boolean[]               clmWritable     = null;
063            private boolean[]               writeCtrl               = null;         // 3.8.0.9 (2005/10/17)
064            private boolean[]               clmDisplay              = null;
065            private boolean[]               clmGroup                = null;         // 3.8.5.0 (2006/03/20)
066            private String                  groupClass              = "";           // 5.1.8.0 (2010/07/01)
067            private CLM_GRP                 groupType               = null;         // 5.1.8.0 (2010/07/01)
068            private boolean[]               sortKeys                = null;         // 3.6.0.0 (2004/09/17)
069            private boolean[]               useEventCols    = null;         // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
070            private boolean                 useSorterKeys   = false;        // 3.6.0.0 (2004/09/17) å†?ƒ¨変数
071            private String                  sorterQuery             = "";           // 3.6.0.0 (2004/09/17) å†?ƒ¨変数
072            private String                  viewFormID              = null;
073            private int                     startNo                 = 0 ;
074            private int                     pageSize                = HybsSystem.sysInt( "HTML_PAGESIZE" ) ;
075            private boolean                 rowWritableFlag = false;        // ?‘カラãƒ?›®ã�?writable かï¼?
076            private ViewMarker              viewLink                = null;
077            private ViewMarker              viewMarker              = null;
078            private ViewMarker              editMarker              = null;         // 3.8.6.1 (2006/10/20)
079            private String                  selectedType    = "checkbox";
080            private String                  numberType              = "sequence" ;          // 3.5.1.0 (2003/10/03) 新規作æ?
081            private int                             numberTypeClm   = -1;                           // 3.5.1.0 (2003/10/03) 新規作æ?
082            private String[]                numberTypeData  = null;                         // 3.5.1.0 (2003/10/03) 新規作æ?
083            private String                  optTypeAttri    = null;
084            private boolean                 noMessage               = false;
085            private int                     backLinkCount   = 0 ;
086            private int                             headerSkipCount = 0;            // 0:通常ヘッãƒ??n:n回ごとに現れる
087            private boolean                 skip                    = ViewForm.DEFAULT_SKIP;        // 3.5.3.1 (2003/10/31)
088            private int                             useCheckControl = 0 ;           // 3.7.0.1 (2005/01/31)
089            private boolean                 useTableSorter  = HybsSystem.sysBool( "VIEW_USE_TABLE_SORTER" ) ;       // 3.5.4.7 (2004/02/06)
090            private boolean                 numberDisplay   = true ;        // 3.5.5.0 (2004/03/12)
091            private int                             scrollRowNo             = -1;           // 3.7.0.3 (2005/03/01)
092    
093            // 3.5.4.6 (2004/01/30) ヘッãƒ??æ–?­—å?を定義しておきますã?
094            private static final String NO_HEADER = "No" ;
095    
096            // 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを受け取りますã?
097            private Map<String,String> viewParam = null;              // 4.3.3.6 (2008/11/15) Generics警告対å¿?
098            
099            //5.5.8.3 (2012/11/17) Stringでなくã?Objectタイプをもてるよã�?�«する?ˆ積上げガント対応ï¼?
100            private List<String[]> viewArrayList = null; // 5.5.9.0 (2012/12/03) ObjectではなくArrayList
101    
102            private int columnCount = 0 ;   // 3.5.5.7 (2004/05/10)
103            private int rowCount    = 0 ;   // 4.0.0 (2006/01/06)
104    
105            // 3.5.6.2 (2004/07/05) ゼブラ模様ã?æŒ?®šを、ViewForm としてサポã?ãƒ?
106            // 0(ゼブラなã�?ã€?1(ワーニング)ã€?2以ä¸?エラー)ã€?(ゼブラ)ã€?以ä¸?行数まとã‚?
107            private int bgColorCycle   = 1 ;
108            // 行ごとに色を変更する時ã?、デフォルトクラス属æ?
109            private static final String BG_COLOR_ROW0 = " class=\"row_0\"";
110            // 行ごとに色を変更する時ã?、å?り替え後クラス属æ?
111            private static final String BG_COLOR_ROW1 = " class=\"row_1\"";
112    
113            // 行ごとに色を変更する時ã?、å?り替え後クラス属æ?
114            private static final String BG_COLOR_ROWSEL = " class=\"row_sel\"";             // 3.7.0.3 (2005/03/01)
115    
116            // 警告時の行ごとに色を変更する時ã?、デフォルトクラス属æ?
117            private static final String BG_WARNING_COLOR_ROW0 = " class=\"row_0 row_warning\"";
118            // 警告時の行ごとに色を変更する時ã?、å?り替え後クラス属æ?
119            private static final String BG_WARNING_COLOR_ROW1 = " class=\"row_1 row_warning\"";
120    
121            // エラー時ã?行ごとに色を変更する時ã?、デフォルトクラス属æ?
122            private static final String BG_ERROR_COLOR_ROW0 = " class=\"row_0 row_error\"";
123            // エラー時ã?行ごとに色を変更する時ã?、å?り替え後クラス属æ?
124            private static final String BG_ERROR_COLOR_ROW1 = " class=\"row_1 row_error\"";
125    
126            private String color_row0 = BG_COLOR_ROW0 ;
127            private String color_row1 = BG_COLOR_ROW1 ;
128    
129            // 5.1.8.0 (2010/07/01) 行に対して、動çš?�«クラス属æ?を付与するカラãƒ?��を指定しますã?
130            private int bgColorClsClmNo  = -1;
131    
132            // 3.5.6.4 (2004/07/16)
133            private boolean useScrollBar = HybsSystem.sysBool( "VIEW_USE_SCROLLBAR" ) ;
134    
135            // 3.6.0.0 (2004/09/17)
136            private boolean firstChecked = false ;
137    
138            // 3.7.1.1 (2005/05/31) SEL_ROW機è?使用時に、BG_COLOR_ROWSEL の使用 æœ?無を指定しますã?
139            private boolean useSelRowColor = false ;
140    
141            // 4.0.0 (2007/04/16) tableタグをå?力するときに付与しますã?
142            private String  clazz                   = "viewTable";
143    
144            // 4.0.0.0 (2007/11/27) ResourceManagerを設定しますã?(クロスé›?¨ˆで使用)
145            private ResourceManager resourceManager = null;
146    
147            // 4.2.0.0 (2008/03/03) ビューのå¹?�¨高さを指定できるようにしますã?
148            private String  height          = null;
149            private String  width           = null;
150    
151            // 4.3.1.0 (2008/09/08)
152            private boolean skipNoEdit      = false;
153    
154            // 4.3.3.0 (2008/10/01) 画面遷移なしモード時にå�?¡Œに出力する行番号及ã?改廃Cのキーを定義しますã?
155            private static final String hiddenRowKey =              "rid";
156            private static final String hiddenCdkhKey =             "kh";
157    
158            private boolean noTransition= false;
159    
160            // 5.1.7.0 (2010/06/01) ViewFormのキャãƒ?‚·ュ復å…?‚’画面ID単位に行う
161            private String gamenId          = null;
162    
163            // 5.2.1.0 (2010/10/01) ä¸?‹¬入力カラãƒ??アシスト機è?を利用するカラãƒ?‚’æŒ?®šしますã?
164            private boolean[]               clmBulkSet      = null;
165            
166            // 5.5.4.2 (2012/07/13) mustとmustAnyを保持する
167            private String[]        nullCheck       = null;
168            private String[]        mustAnyCheck= null;             // 3.8.0.9 (2005/10/17)
169    
170            /**
171             * 初期化しますã?
172             * ここでは、å?部で使用されてã�?‚‹キャãƒ?‚·ュをクリアしã?
173             * 新しいモãƒ?ƒ«(DBTableModel)とè¨?ª?lang) をå?にå†?ƒ¨ãƒ??タをå?構築しますã?
174             * なおã?ãƒ??ブルモãƒ?ƒ«に対してViewFormで変更を加える場合ã?、変更処ç�?‚’行った後に
175             * こã?メソãƒ?ƒ‰を実行するよã�?�«して下さã�??
176             *
177             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
178             * @og.rev 3.5.6.1 (2004/06/25) lang è¨?ªžコーãƒ?属æ?を削除しますã?
179             * @og.rev 3.5.6.3 (2004/07/12) 呼ばれたらã?å¿?�š初期化するよã�?�«修正(å…?�«戻ã�?
180             * @og.rev 3.6.0.0 (2004/09/17) sortKeys 追åŠ?
181             * @og.rev 3.8.0.9 (2005/10/17) writeCtrl 追åŠ?
182             * @og.rev 3.8.5.0 (2006/03/20) clmGroup 追åŠ?
183             * @og.rev 4.0.0.0 (2006/01/06) rowCount 追åŠ?
184             * @og.rev 4.0.1.0 (2007/12/13) コメントã?追åŠ?
185             * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
186             * @og.rev 5.2.0.0 (2010/09/01) 2回é?続登録時に選択行にスクロールしなã�?ƒ�グを修正ã€?
187             * @og.rev 5.2.1.0 (2010/10/01) ä¸?‹¬入力カラãƒ??アシスト機è?を利用するカラãƒ?clmBulkSet) 追åŠ?
188             * @og.rev 5.5.4.2 (2012/07/13) mustとmustany保持
189             *
190             * @param       table   DBTableModelオブジェクãƒ?
191             */
192            public void init( final DBTableModel table ) {
193                    this.table = table;
194                    if( table != null ) {
195                            rowCount        = table.getRowCount();                  // 4.0.0 (2006/01/06)
196                            columnCount = table.getColumnCount();
197                            clmWritable = new boolean[ columnCount ];
198                            writeCtrl       = new boolean[ columnCount ];   // 3.8.0.9 (2005/10/17)
199                            clmDisplay      = new boolean[ columnCount ];
200                            clmGroup        = new boolean[ columnCount ];   // 3.8.5.0 (2006/03/20)
201                            sortKeys        = new boolean[ columnCount ];   // 3.6.0.0 (2004/09/17)
202                            dbColumn        = new DBColumn[ columnCount ];
203                            useEventCols= new boolean[ columnCount ];       // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
204                            clmBulkSet  = new boolean[ columnCount ];       // 5.2.1.0 (2010/10/01)
205                            Arrays.fill( clmWritable,DEFAULT_CLM_WRITABLE );        // カラãƒ??書込み許可
206                            Arrays.fill( writeCtrl,false );                                         // 書き込み制御の許可
207                            Arrays.fill( clmDisplay ,true );                                        // カラãƒ??表示許可
208                            Arrays.fill( clmGroup ,false );                                         // 3.8.5.0 (2006/03/20) カラãƒ??グループ化
209                            Arrays.fill( sortKeys ,false );                                         // すべてリンクしなã�?�«設定するã?
210                            Arrays.fill( useEventCols, false );                                     // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
211                            Arrays.fill( clmBulkSet, false );                                       // 5.2.1.0 (2010/10/01)
212                            for( int i=0; i<columnCount; i++ ) {
213                                    dbColumn[i] = table.getDBColumn( i );
214                            }
215    
216                            // ?‘カラãƒ?›®(æœ??のカラãƒ?¼�é?列0番目)ã�?writable かï¼?
217                            rowWritableFlag = "WRITABLE".equalsIgnoreCase( getColumnName(0) );
218    
219                            // 5.2.0.0 (2010/09/01) 2回é?続登録時に選択行にスクロールしなã�?ƒ�グを修正ã€?
220                            scrollRowNo = -1;
221                            firstChecked = false;
222                            
223                            // 5.5.4.2 (2102/07/13)
224                            nullCheck         = table.getMustArray();
225                            mustAnyCheck = table.getMustAnyArray();
226                    }
227            }
228    
229            /**
230             * å†?ƒ¨の DBTableModel を返しますã?
231             *
232             * @return      DBTableModelオブジェクãƒ?
233             */
234            public DBTableModel getDBTableModel() {
235                    return table;
236            }
237    
238            /**
239             * ViewForm の識別IDをセãƒ?ƒˆしますã?
240             * これは、ViewFormFactory でプã?ルする場合ã?識別キーになりますã?
241             * プã?ルに戻すときに自åˆ??身に こã?識別IDを使用しますã?
242             *
243             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
244             * @og.rev 3.5.6.2 (2004/07/05) メソãƒ?ƒ‰名がまぎらわしã�?‚º、変更しますã?
245             *
246             * @param       viewFormID 識別ID
247             */
248            public void setId( final String viewFormID ) {
249                    this.viewFormID = viewFormID;
250            }
251    
252            /**
253             * ViewForm の識別IDを返しますã?
254             * これは、ViewFormFactory でプã?ルする場合ã?識別キーになりますã?
255             * プã?ルに戻すときに自åˆ??身に こã?識別IDを使用しますã?
256             *
257             * @og.rev 3.5.6.2 (2004/07/05) メソãƒ?ƒ‰名がまぎらわしã�?‚º、変更しますã?
258             *
259             * @return      識別ID
260             */
261            public String getId() {
262                    return viewFormID;
263            }
264    
265            /**
266             * DBTableModel から HTMLæ–?­—å?を作æ?して返しますã?
267             *
268             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
269             *
270             * @return      DBTableModelから作æ?されã�?HTMLæ–?­—å?
271             */
272            public String create() {
273                    return create( 0, rowCount );
274            }
275    
276            /**
277             * DBTableModel から Viewæ–?­—å?を作æ?して、Writer にセãƒ?ƒˆしますã?
278             * 処ç�??容は、create( int , int ) と同じですが、中間ã?æ–?­—å?(StringBuilder)
279             * を作æ?せずに、直接、Writer に書きå?しますã?
280             * よって、データ作æ?途中でエラーが発生してもã?すでにã�?��つかã?ãƒ??タは
281             * クライアントに返されてã�?�¾すã?
282             *
283             * @og.rev 5.0.0.1 (2009/08/15) 直接出力用の Writer 引数追åŠ?
284             *
285             * @param  startNo        表示開始位置
286             * @param  pageSize   表示件数
287             * @param  wrt            直接登録用の Writer
288             */
289            public void create( final int startNo, final int pageSize, final Writer wrt ) throws IOException {
290                    String errMsg = "こã?メソãƒ?ƒ‰は、直接登録用の Writer のビューでのみ使用できますã?";
291                    throw new UnsupportedOperationException( errMsg );
292            }
293    
294            /**
295             * å†?®¹をクリア(初期åŒ?しますã?
296             *
297             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
298             * @og.rev 3.5.1.0 (2003/10/03) displayNumber å»?­¢。numberType 新規追åŠ??
299             * @og.rev 3.5.2.0 (2003/10/20) headerSkipCount属æ?を追åŠ?
300             * @og.rev 3.5.3.1 (2003/10/31) skip属æ?を追åŠ?
301             * @og.rev 3.5.4.3 (2004/01/05) useCheckControl属æ?を追åŠ?
302             * @og.rev 3.5.4.3 (2004/01/05) viewFormID属æ?を削除(初期化しなã�?
303             * @og.rev 3.5.4.7 (2004/02/06) useTableSorter属æ?を追åŠ?
304             * @og.rev 3.5.4.7 (2004/02/06) columnMaxSize は使用されてã�?�ªã�??で削除しますã?
305             * @og.rev 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを追åŠ?�—ますã?
306             * @og.rev 3.5.5.0 (2004/03/12) numberType 属æ?の "delete" 値追åŠ?�«伴なã�??numberDisplay 変数の追åŠ??
307             * @og.rev 3.5.6.2 (2004/07/05) bgColorCycle 変数の追åŠ??
308             * @og.rev 3.5.6.4 (2004/07/16) useScrollBar 変数の追åŠ??
309             * @og.rev 3.6.0.0 (2004/09/17) sortKeys , firstChecked , useSorterKeys , sorterQuery 変数の追åŠ??
310             * @og.rev 3.7.0.1 (2005/01/31) 全件チェãƒ?‚¯コントロール変更( boolean â‡?int )
311             * @og.rev 3.7.1.1 (2005/05/31) useSelRowColor 変数の追åŠ??
312             * @og.rev 3.8.0.3 (2005/07/15) scrollBarType 変数の追åŠ?
313             * @og.rev 3.8.0.9 (2005/10/17) writeCtrl 変数の追åŠ?
314             * @og.rev 3.8.5.0 (2006/03/20) clmGroup 変数の追åŠ?
315             * @og.rev 3.8.6.1 (2006/10/20) editMarker 変数の追åŠ?
316             * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
317             * @og.rev 5.1.8.0 (2010/07/01) groupClass , groupType 変数の追åŠ?
318             * @og.rev 5.1.8.0 (2010/07/01) bgColorClsClmNo 属æ?を追åŠ?�—ますã?
319             * @og.rev 5.2.1.0 (2010/10/01) ä¸?‹¬入力カラãƒ??アシスト機è?を利用するカラãƒ?clmBulkSet) 追åŠ?
320             * @og.rev 5.5.4.2 (2012/07/13) mustとmustany追åŠ?
321             * @og.rev 5.5.9.0 (2012/12/03) viewArrayList追åŠ?viewObjectは削除)
322             */
323            public void clear() {
324                    name                    = "";                           // メニューの名前
325                    table                   = null;
326                    dbColumn                = null;
327                    clmWritable     = null;
328                    writeCtrl               = null;                 // 3.8.0.9 (2005/10/17)
329                    clmDisplay              = null;
330                    clmGroup                = null;                 // 3.8.5.0 (2006/03/20)
331                    groupClass              = "";                   // 5.1.8.0 (2010/07/01)
332                    groupType               = null;                 // 5.1.8.0 (2010/07/01)
333                    sortKeys                = null;                 // 3.6.0.0 (2004/09/17)
334                    useSorterKeys   = false;                // 3.6.0.0 (2004/09/17)
335                    sorterQuery             = "";                   // 3.6.0.0 (2004/09/17)
336                    startNo                 = 0 ;
337                    pageSize                = HybsSystem.sysInt( "HTML_PAGESIZE" ) ;
338                    rowWritableFlag = false;        // ?‘カラãƒ?›®ã�?writable かï¼?
339                    viewLink                = null;
340                    viewMarker              = null;
341                    editMarker              = null;         // 3.8.6.1 (2006/10/20)
342                    backLinkCount   = 0;
343                    selectedType    = "checkbox";
344                    numberType              = "sequence";
345                    numberTypeClm   = -1;
346                    numberTypeData  = null;
347                    headerSkipCount = 0;    // 0:通常ヘッãƒ??n:n回ごとに現れる
348                    skip                    = ViewForm.DEFAULT_SKIP;        // 3.5.3.1 (2003/10/31)
349                    useCheckControl = 0 ;           // 3.7.0.1 (2005/01/31)
350                    viewParam               = null;         // 3.5.4.8 (2004/02/23)
351                    viewArrayList   = null;         // 5.5.8.3 (2012/12/03) 
352                    numberDisplay   = true ;        // 3.5.5.0 (2004/03/12)
353                    columnCount             = 0;            // 3.5.5.7 (2004/05/10)
354                    bgColorCycle    = 1;            // 3.5.6.2 (2004/07/05)
355                    bgColorClsClmNo = -1;           // 5.1.8.0 (2010/07/01)
356                    color_row0              = BG_COLOR_ROW0 ;               // 3.5.6.2 (2004/07/05)
357                    color_row1              = BG_COLOR_ROW1 ;               // 3.5.6.2 (2004/07/05)
358                    useScrollBar    = HybsSystem.sysBool( "VIEW_USE_SCROLLBAR" ) ;  // 3.5.6.4 (2004/07/16)
359                    firstChecked    = false;
360                    useSelRowColor  = false;        // 3.7.1.1 (2005/05/31)
361                    height                  = null;         // 4.2.0.0 (2008/03/18)
362                    width                   = null;         // 4.2.0.0 (2008/03/18)
363                    skipNoEdit              = false;        // 4.3.2.0 (2008/09/10)
364                    useEventCols    = null;         // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
365                    clmBulkSet              = null;         // 5.2.1.0 (2010/10/01) ä¸?‹¬入力カラãƒ??アシスト機è?を利用するカラãƒ?clmBulkSet) 追åŠ?
366                    nullCheck               = null;         // 5.5.4.2 (2012/07/13)
367                    mustAnyCheck    = null;         // 5.5.4.2 (2012/07/13)
368            }
369    
370            /**
371             * ãƒ??ブルのヘッãƒ??の前に、そのãƒ??タの表示ç¯?›²を示す文字å?を作æ?しますã?
372             * [開始No - 終äº?o]/[件数] ですã?
373             *
374             * @og.rev 2.0.0.2 (2002/09/24) [1 - 4]/[4] 等ã?メãƒ?‚»ージ出力後ã? &lt;br&gt; 出力を中止ã€?
375             * @og.rev 4.3.6.0 (2008/04/01) [1 - 4]/[4]のメãƒ?‚»ージをJavaScriptで入れ替えるように変更
376             * @og.rev 4.3.8.0 (2009/08/01) 同メãƒ?‚»ージè¤?•°対応及びheadでコントロール可能にする
377             *
378             * @param  stNo    表示開始位置
379             * @param  pgSize  表示件数
380             *
381             * @return      ãƒ??ブルのヘッãƒ??タグæ–?­—å?
382             */
383            protected String getCountForm( final int stNo, final int pgSize ) {
384                    if( noMessage ) { return ""; }
385    
386                    StringBuilder out = new StringBuilder();
387    
388                    int lstNo = ( stNo+pgSize > rowCount ) ? rowCount : stNo+pgSize ;
389                    // 4.3.6.0 (2009/04/01) 件数表示の方法変更
390                    // out.append( "[" ).append( stNo+1 ).append( " - " ).append( lstNo ).append( "]" );
391                    // out.append( "/[" ).append( rowCount ).append( "]" );
392                    // out.append( "<div id=\"originalRowCountMessage\">" ); // 4.3.8.0 (2009/08/01) idからclassに変更
393                    out.append( "<div class=\"orgRowCntMsg\">" );
394                    out.append( "[" ).append( stNo+1 ).append( " - " ).append( lstNo ).append( "]" );
395                    out.append( "/[" ).append( rowCount ).append( "]" );
396                    out.append( "</div>" );
397                    // 4.3.8.0 (2009/08/01) scriptはhead読み込み方式に変更
398                    // out.append( "<script language=\"javascript\">" );
399                    // out.append( "$(function(){$('#rowCountMessage').replaceWith($('#originalRowCountMessage'));})");
400                    // out.append( "</script>" );
401    
402                    return out.toString() ;
403            }
404    
405            /**
406             * カラãƒ??ラベル名を返しますã?
407             * カラãƒ??é ?›®名に対して,見える形のæ–?­—å?を返しますã?
408             * ä¸?ˆ¬には,リソースバンドルとçµ?�ˆせて,å�?›½ロケール毎にラベルã‚?
409             * åˆ?›¿えますã?
410             *
411             * @param       column カラãƒ?•ª号
412             *
413             * @return      カラãƒ??ラベルå�?
414             */
415            protected String getColumnLabel( final int column ) {
416                    return dbColumn[column].getLabel();
417            }
418    
419            /**
420             * カラãƒ?��を返しますã?
421             * ãƒ??タベã?スで検索したときã?カラãƒ??é ?›®名を返しますã?
422             *
423             * @param       column カラãƒ?•ª号
424             *
425             * @return      カラãƒ?��
426             */
427            protected String getColumnName( final int column ) {
428                    return dbColumn[column].getName();
429            }
430    
431            /**
432             * row行,columåˆ?のãƒ??タの値を返しますã?
433             *
434             * @param       row     行番号
435             * @param       column カラãƒ?•ª号
436             *
437             * @return      row行,columåˆ?のãƒ??タの値
438             */
439            protected String getValue( final int row,final int column ) {
440                    return table.getValue( row,column ) ;
441            }
442    
443            /**
444             * row行,columåˆ?のãƒ??タの値を返しますã?
445             * これは、データの値そã?もã?ではなくã?そã?値のラベルæ–?­—を返しますã?
446             *
447             * @og.rev 3.8.0.9 (2005/10/17) 互換性確保ã?メソãƒ?ƒ‰
448             *
449             * @param       row     行番号
450             * @param       column カラãƒ?•ª号
451             *
452             * @return      row行,columåˆ?のãƒ??タの値
453             */
454            protected String getRendererValue( final int row,final int column) {
455                    return getRendererValue( row,column,getValue( row,column ) );
456            }
457    
458            /**
459             * row行,columåˆ?のãƒ??タの値を返しますã?
460             * これは、データの値そã?もã?ではなくã?そã?値のラベルæ–?­—を返しますã?
461             *
462             * @og.rev 3.8.0.9 (2005/10/17) writableControl 追åŠ?�«よる引数変更
463             * @og.rev 3.8.5.0 (2006/03/20) clmGroup 追åŠ?�«よるグループ化処ç�?
464             * @og.rev 4.0.0.0 (2005/11/30) 行番号に対応したå?を返すように変更しますã?
465             * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
466             * @og.rev 5.1.8.0 (2010/07/01) カラãƒ?‚°ループã? groupClass 対å¿?
467             *
468             * @param       row             行番号
469             * @param       column  カラãƒ?•ª号
470             * @param       inVal   ãƒ??タの値
471             *
472             * @return      row行,columåˆ?のãƒ??タの値
473             */
474            protected String getRendererValue( final int row,final int column , final String inVal ) {
475                    String val = dbColumn[column].getRendererValue( row,inVal );
476    
477                    // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
478                    if( useEventCols[column] && isWritable( row ) ) {
479                            val = dbColumn[column].getEventColumnTag( val, getValue( row,column ), row, false );
480                    }
481                    if( viewLink != null ) {
482                            val = viewLink.getMarkerString( row,column,val );
483                    }
484                    if( viewMarker != null ) {
485                            val = viewMarker.getMarkerString( row,column,val );
486                    }
487    
488                    // 5.1.8.0 (2010/07/01) groupClass 対応:空æ–?­—ã?場合をè€??しã?æœ?¾Œに処ç�?‚’行うã€?
489                    // 出力するå?がã?空æ–?­—å?ならã?前行と同じでもã?空æ–?­—にしておきますã?
490                    if( groupType != null &&
491                                    clmGroup[column] && row > 0 && row != startNo &&
492                                    inVal != null && inVal.equals( getValue( row-1,column ) ) &&
493                                    val != null && val.length() > 0 ) {
494                            if( groupType == CLM_GRP.KIGO ) {
495                                    val = groupClass;
496                            }
497                            else {  // groupType == CLM_GRP.CHAR
498                                    val = "<span class=\"" + groupClass + "\">" + val + "</span>";
499                            }
500                    }
501    
502                    return val;
503            }
504    
505            /**
506             * row行,columåˆ?のãƒ??タの値をHTMLæ–?­—å?に変換して返しますã?
507             * リソースバンドルが登録されてã�?‚‹場合ã?,リソースに応じã�?
508             * HTMLæ–?­—å?を作æ?しますã?
509             *
510             * @og.rev 3.8.0.9 (2005/10/17) writableControl 追åŠ?�«よる引数変更
511             * @og.rev 3.8.6.1 (2006/10/20) editMarker 追åŠ?
512             * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
513             *
514             * @param       row             行番号
515             * @param       column  カラãƒ?•ª号
516             * @param       inVal   ãƒ??タの値
517             *
518             * @return      row行,columåˆ?のãƒ??タの値
519             */
520            protected String getEditorValue( final int row, final int column, final String inVal ) {
521                    String val = dbColumn[column].getEditorValue( row,inVal );
522                    // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
523                    if( useEventCols[column] ) {
524                            val = dbColumn[column].getEventColumnTag( val, getValue( row,column ), row, true );
525                    }
526                    if( editMarker != null ) {
527                            val = editMarker.getMarkerString( row,column,val );
528                    }
529    
530                    return val;
531            }
532    
533            /**
534             * row行,columåˆ?のãƒ??タの値をHTMLæ–?­—å?に変換して返しますã?
535             * リソースバンドルが登録されてã�?‚‹場合ã?,リソースに応じã�?
536             * HTMLæ–?­—å?を作æ?しますã?
537             * リソースバンドルが登録されてã�?�ªã�??合ã?,getValue( int row,int column )ã‚?
538             * 返しますã?
539             * 新規機è?として、writableControl によるエãƒ?‚£ター・レンãƒ?ƒ©ーæŒ?®šが出来ますã?
540             * そã?場合ã?表示/編é›?�¨もに、å?頭のアンãƒ??バã?は削除されますã?
541             *
542             * @og.rev 3.8.0.9 (2005/10/17) writableControl によるエãƒ?‚£ター・レンãƒ?ƒ©ーæŒ?®?
543             *
544             * @param       row     行番号
545             * @param       column カラãƒ?•ª号
546             *
547             * @return      row行,columåˆ?のãƒ??タの値
548             */
549            protected String getValueLabel( final int row, final int column ) {
550                    String val = getValue( row,column ) ;
551                    boolean isEdit = isColumnWritable( column ) && isWritable( row ) ;
552                    if( writeCtrl[ column ] && val != null && val.length() > 0 && val.charAt(0) == '_' ) {
553                            isEdit = false;
554                            val = val.substring(1);         // 先é?の '_' を削除
555                    }
556    
557                    if( isEdit ) {
558                            return getEditorValue( row,column,val );                // 引数 val 追åŠ?
559                    }
560                    else {
561                            return getRendererValue( row,column,val );              // 引数 val 追åŠ?
562                    }
563            }
564    
565            /**
566             * カラãƒ??クラスを文字å?にした名称を返しますã?
567             * これは?ŒHTML上ã?å�?¨®タグに?Œデータベã?ス定義に応じたクラスã‚?
568             * セãƒ?ƒˆã�?CSS(Cascading Style Sheet)の class="xxxxx" とする事により
569             * å�?¨®スタイルを表現するのに使用しますã?
570             *
571             * ここでは, カラãƒ?ƒªソースの DBTYPE 属æ?でæŒ?®šã?æ–?­—å?(X,S9,KXなど)を返しますã?
572             *
573             * @og.rev 4.0.0.0 (2005/01/31) 新規作æ?(getColumnClassName â‡?getColumnDbType)
574             * @og.rev 5.2.2.0 (2010/11/01) className ã�?VARCHAR2,NUMBER以外ã?場合ã?、合わせて出力しますã?
575             *
576             * @param   column カラãƒ?•ª号
577             *
578             * @return  カラãƒ?? DBTYPE 属æ?
579             */
580            public String getColumnDbType( final int column ) {
581                    // 5.2.2.0 (2010/11/01) className ã�?BIT の場合ã?み、合わせて出åŠ?
582                    String clsName = dbColumn[column].getClassName();
583                    if( clsName != null && ! "VARCHAR2".equals( clsName ) && !"NUMBER".equals( clsName ) ) {
584                            return clsName + " " + dbColumn[column].getDbType();
585                    }
586    
587                    return dbColumn[column].getDbType();
588            }
589    
590            /**
591             * カラãƒ?�Œ書き込み可能かどã�?�‹を返しますã?
592             *
593             * @param       column カラãƒ?•ª号
594             *
595             * @return      書込み可能(true)?�不可能(false)
596             */
597            protected boolean isColumnWritable( final int column ) {
598                    return clmWritable[ column ];
599            }
600    
601            /**
602             * カラãƒ?�Œ書き込み可能かどã�?�‹をセãƒ?ƒˆしますã?
603             *
604             * @param       column カラãƒ?•ª号
605             * @param       rw 書込み可能(true)?�不可能(false)
606             */
607            public void setColumnWritable( final int column,final boolean rw ) {
608                    clmWritable[ column ] = rw;
609            }
610    
611            /**
612             * 書き込み可能カラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
613             * 例ï¼?OYA,KO,HJO,SU,DYSET,DYUPD"
614             * setColumnWritable( int column,boolean rw ) の簡易版ですã?
615             * null を与えたå?合ã?,なにもしませんã€?
616             * またã?全カラãƒ?�«つã�?�¦、有効にする場合ã?、columnName="*" を設定しますã?
617             *
618             * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
619             * @og.rev 5.1.8.0 (2010/07/01) å†?ƒ¨ロジãƒ?‚¯変更(setBooleanArray)
620             *
621             * @param       columnName      カラãƒ?��
622             */
623            public void setColumnWritable( final String columnName ) {
624                    if( columnName != null ) {
625                            setBooleanArray( columnName,true,clmWritable );
626    
627                            // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
628                            setUseEventCols();
629                    }
630            }
631    
632            /**
633             * 書き込み不可カラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
634             * 例ï¼?OYA,KO,HJO,SU,DYSET,DYUPD"
635             * null を与えたå?合ã?,なにもしませんã€?
636             * またã?全カラãƒ?�«つã�?�¦、有効にする場合ã?、columnName="*" を設定しますã?
637             *
638             * @og.rev 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
639             * @og.rev 5.1.8.0 (2010/07/01) å†?ƒ¨ロジãƒ?‚¯変更(setBooleanArray)
640             *
641             * @param       columnName      カラãƒ?��
642             */
643            public void setNoWritable( final String columnName ) {
644                    if( columnName != null ) {
645                            setBooleanArray( columnName,false,clmWritable );
646                            // 5.1.7.0 (2010/06/01) 動的プルãƒ?‚¦ン実è£?¦‹直ã�?
647                            setUseEventCols();
648                    }
649            }
650    
651            /**
652             * å�??目がイベントカラãƒ?‚’するかどã�?�‹をセãƒ?ƒˆしますã?
653             *
654             * @og.rev 5.1.7.0 (2010/06/01) 新規作æ?(動的プルãƒ?‚¦ン実è£?¦‹直ã�?
655             */
656            private void setUseEventCols() {
657                    for( int column=0; column<dbColumn.length; column++ ) {
658                            String evCols = dbColumn[column].getEventColumn();
659                            if( evCols != null && evCols.length() > 0 ) {
660                                    String[] evColsArr = StringUtil.csv2Array( evCols );
661                                    for( int i=0; i<evColsArr.length; i++ ) {
662                                            String evCol = evColsArr[i];
663                                            if( evCol.charAt(0) == '_' ) { evCol = evCol.substring( 1 ); }
664                                            if( isColumnWritable( table.getColumnNo( evCol ) ) ) {
665                                                    useEventCols[column] = true;
666                                                    break;
667                                            }
668                                    }
669                            }
670                    }
671            }
672    
673            /**
674             * 行指定ã?書込み許可を返しますã?
675             *
676             * @og.rev 3.5.4.2 (2003/12/15) writable カラãƒ?�Œ "2" のときも、書き込み許可とする
677             * @og.rev 3.5.5.7 (2004/05/10) 判定ロジãƒ?‚¯を若干見直しますã?
678             *
679             * @param       row     行番号
680             *
681             * @return      書込み可能(true)?�不可能(false)
682             */
683            protected boolean isWritable( final int row ) {
684                    boolean rtn = table.isRowWritable( row );
685                    if( rtn && rowWritableFlag ) {
686                            String val = table.getValue( row,0 );
687                            rtn = "TRUE".equalsIgnoreCase( val )
688                                                    || "1".equalsIgnoreCase( val )
689                                                    || "2".equalsIgnoreCase( val ) ;
690    
691                            if( ! rtn &&
692                                    ! "FALSE".equalsIgnoreCase( val ) &&
693                                    ! "0".equalsIgnoreCase( val ) &&
694                                    ! "".equalsIgnoreCase( val ) ) {
695                                            String errMsg = "writable は、TRUE,FALSE,0,1,2,null 以外指定できませんã€? +
696                                                                            "  row=[" + (row+1) + "]  val=[" + val + "]";
697                                            throw new HybsSystemException( errMsg );
698                            }
699                    }
700                    return rtn;
701            }
702    
703            /**
704             * 書き込み可能なè¡?rowWritable == true)のチェãƒ?‚¯ボックスに対して
705             * 初期値ã‚?選択済みにするかã?非選択済みにするかをæŒ?®šしますã?
706             *
707             * @og.rev 3.5.4.2 (2003/12/15) writable カラãƒ?�Œ "2" のときã?チェãƒ?‚¯を付けるã?
708             *
709             * @param       row 行ã?æŒ?®?
710             *
711             * @return      チェãƒ?‚¯ON(true)?�チェãƒ?‚¯OFF(false)
712             */
713            protected boolean isChecked( final int row ) {
714                    boolean rtn = table.isRowChecked( row );
715                    if( rowWritableFlag ) {
716                            String val = table.getValue( row,0 );
717                            rtn = rtn || "2".equalsIgnoreCase( val ) ;
718                    }
719                    return rtn;
720            }
721    
722            /**
723             * チェãƒ?‚¯済みの行ã?先é?に、フォーカスを当てるå?ç�?�§、チェãƒ?‚¯のä¸?�¤前ã?
724             * 行番号æ¬?�«ãƒ?ƒŸーのリンクを作æ?する為の判定を行いますã?
725             * つまりã?æŒ?®šã?行番号の次の値がã?チェãƒ?‚¯されてã�?‚‹かどã�?�‹を判断しますã?
726             * さらに、これã?、ä¸?•ª上位にチェãƒ?‚¯されてã�?‚‹番号の時ã?み
727             * 返しますã?(表示ãƒ??ブル中、最高ä¸?›žのみ、true が返るã€?
728             *
729             * @og.rev 3.6.0.0 (2004/09/17) 新規作æ?
730             * @og.rev 3.7.0.3 (2005/03/01) setScrollRowNo の対å¿?
731             * @og.rev 3.8.8.3 (2007/02/09) æœ??の選択è¡?よりæŒ?®š行番号へのフォーカスを優å…?
732             * @og.rev 4.2.3.1 (2008/06/11) 1件目がチェãƒ?‚¯されてã�?‚‹場合ã?、対象外とするã€?
733             * @og.rev 4.2.4.0 (2008/06/25) 1件目対象外ã?判定で、指定行番号へのフォーカスを優先するã?
734             * @og.rev 5.1.1.1 (2009/12/02) 選択行アンカーは、è?身の行に出ã�?default.js#focus2()も合わせて変更)
735             *
736             * @param       row     行ã?æŒ?®?
737             *
738             * @return      チェãƒ?‚¯ON(true)?�チェãƒ?‚¯OFF(false)
739             */
740            protected boolean isFirstChecked( final int row ) {
741    
742                    // æœ??の?‘回のみ、true を返す。よって、å?がtrue ならã?false を返すã€?
743                    if( firstChecked ) { return false; }
744    
745                    // æŒ?®šã?次の行を見るため、ç¯?›²オーバã?してã�?�ªã�?�‹確èª?
746                    if( row >= rowCount ) { return false; } // 5.1.1.1 (2009/12/02)
747    
748                    final boolean rtn;
749                    // 3.8.8.3 (2007/02/09) æœ??の選択è¡?よりæŒ?®š行番号へのフォーカスを優å…?
750                    if( scrollRowNo >= 0 ) {
751                            rtn = row == scrollRowNo ; // 5.1.1.1 (2009/12/02)
752                    }
753                    else {
754                            // 1件目がチェãƒ?‚¯されてã�?‚‹場合ã?、対象外とするã€?.2.3.1 (2008/06/11)
755                            if( row == 0 && table.isRowChecked( row ) ) {
756                                    firstChecked = true;
757                                    return false;
758                            }
759    
760                            rtn = table.isRowChecked( row ); // 5.1.1.1 (2009/12/02)
761                    }
762    
763                    // æœ??の?‘回のみ、true を返す。よって、å?がtrue ならã?false を返すã€?
764                    if( rtn ) { firstChecked = true; }
765                    return rtn;
766            }
767    
768            /**
769             * そã?行が、å?ç�?¯¾象かどã�?�‹をチェãƒ?‚¯しますã?
770             * 処ç�?¯¾象かどã�?�‹は、書き込み可能なè¡?rowWritable == true)
771             * で且つ チェãƒ?‚¯されたè¡?rowChecked == true) としますã?
772             * 例えば,NEXT/PREVでスキãƒ??等ã?処ç�?‚’行う場合ã??¤ 処ç�?¯¾象以外を
773             * スキãƒ??することで実現できますã?
774             *
775             * @param       row     行番号
776             *
777             * @return       処ç�?¯¾象(true)?�å?ç�?¯¾象でなã�?false)
778             */
779            public boolean isMarked( final int row ) {
780                    return isWritable( row ) && isChecked( row ) ;
781            }
782    
783            /**
784             * カラãƒ?�Œ表示可能かどã�?�‹を返しますã?
785             * もし?Œ表示不可の場合ã?,こã?カラãƒ??全ãƒ??タが,表示対象から外されますã?
786             *
787             * @param       column カラãƒ?•ª号
788             *
789             * @return      表示可能(true)?�不可能(false)
790             */
791            protected boolean isColumnDisplay( final int column ) {
792                    if( rowWritableFlag && column == 0 ) { return false; }
793                    return clmDisplay[ column ];
794            }
795    
796            /**
797             * 表示可能なカラãƒ??数を返しますã?
798             *
799             * @return      表示可能なカラãƒ?•°
800             */
801            protected int getColumnDisplayCount() {
802                    int rtn = 0;
803                    for( int i=0; i<columnCount; i++ ) {
804                            if( isColumnDisplay(i) ) { rtn++ ; }
805                    }
806    
807                    return rtn;
808            }
809    
810            /**
811             * カラãƒ?�Œ表示可能かどã�?�‹をセãƒ?ƒˆしますã?
812             * DBColumnのROLE属æ?による表示可否は、ViewFormTag で設定されますã?
813             *
814             * @param       column カラãƒ?•ª号
815             * @param       rw 表示可能(true)?�不可能(false)
816             */
817            public void setColumnDisplay( final int column,final boolean rw ) {
818                    clmDisplay[ column ] = rw;
819            }
820    
821            /**
822             * 表示可能カラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
823             * 例ï¼?OYA,KO,HJO,SU,DYSET,DYUPD"
824             * setColumnDisplay( int column,boolean rw ) の簡易版ですã?
825             * null を与えたå?合ã?,なにもしませんã€?
826             * またã?全カラãƒ?�«つã�?�¦、有効にする場合ã?、columnName="*" を設定しますã?
827             *
828             * @og.rev 5.1.8.0 (2010/07/01) å†?ƒ¨ロジãƒ?‚¯変更(setBooleanArray)
829             *
830             * @param       columnName      カラãƒ?��
831             */
832            public void setColumnDisplay( final String columnName ) {
833                    setBooleanArray( columnName,true,clmDisplay );
834            }
835    
836            /**
837             * 表示不可カラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
838             * 例ï¼?OYA,KO,HJO,SU,DYSET,DYUPD"
839             * null を与えたå?合ã?,なにもしませんã€?
840             * またã?全カラãƒ?�«つã�?�¦、有効にする場合ã?、columnName="*" を設定しますã?
841             *
842             * @og.rev 5.1.8.0 (2010/07/01) å†?ƒ¨ロジãƒ?‚¯変更(setBooleanArray)
843             *
844             * @param       columnName      カラãƒ?��
845             */
846            public void setNoDisplay( final String columnName ) {
847                    setBooleanArray( columnName,false,clmDisplay );
848            }
849    
850            /**
851             * 同ä¸?¡¨示ãƒ??タをまとめる(表示しなã�?カラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
852             *
853             * これは、カラãƒ??グループ化æŒ?®šを行いますã?
854             * 同じカラãƒ?•ª号でä¸?�¤上ã?行番号と同じå†?®¹の場合に、表示しなã�?�¨ã�?�†もã?ですã?
855             * 対応ã?、表示(Renderer)時ã?みとしますã?
856             * カラãƒ?�˜位なので、新しいゼブラによる色åˆ?�‘は行いませんã€?任意ã?カラãƒ?�«適用できる為)
857             * またã?ファイル出力などのãƒ??タ自身は変更されてã�?�¾せんので、そのままãƒ??タが落ちますã?
858             * またã?全カラãƒ?�«つã�?�¦、有効にする場合ã?、group="*" を設定しますã?
859             *
860             * @og.rev 3.8.5.0 (2006/03/20) 新規追åŠ?
861             * @og.rev 5.1.8.0 (2010/07/01) å†?ƒ¨ロジãƒ?‚¯変更(setBooleanArray)
862             *
863             * @param       group まとめるカラãƒ?��(CSV形å¼?
864             */
865            public void setColumnGroup( final String group ) {
866                    if( group != null ) {
867                            if( groupType == null ) { groupType = CLM_GRP.KIGO ; }
868                            setBooleanArray( group,true,clmGroup );
869                    }
870            }
871    
872            /**
873             * 同ä¸?¡¨示ãƒ??タをまとめなã�?‚«ラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
874             *
875             * これは、カラãƒ??グループ化æŒ?®šで、同ä¸?�§もまとめなã�?‚«ラãƒ?‚’æŒ?®šするほã�?�Œ簡単な場合に
876             * 使用しますã?例えば、キーæƒ??以外ã?、グループ化æŒ?®šしたい場合などに便利ですã?
877             * 動作ã?、columnGroup の動きと同じですã?(まとめなã�?‚«ラãƒ?‚’æŒ?®šするだけですã?)
878             *
879             * これは、同ä¸?¡¨示ãƒ??タをまとめるカラãƒ?��のæŒ?®?columnGroup)と同時にセãƒ?ƒˆする
880             * ことは出来ませんã€?
881             * またã?全カラãƒ?�«つã�?�¦、有効にする場合ã?、group="*" を設定しますã?
882             *
883             * @og.rev 5.1.8.0 (2010/07/01) 新規追åŠ?
884             *
885             * @param       group まとめるカラãƒ?��(CSV形å¼?
886             */
887            public void setNoGroup( final String group ) {
888                    if( group != null ) {
889                            if( groupType == null ) { groupType = CLM_GRP.KIGO ; }
890                            setBooleanArray( group,false,clmGroup );
891                    }
892            }
893    
894            /**
895             * 同ä¸?¡¨示ãƒ??タをまとめる場合ã?、表示方法をæŒ?®šしますã?
896             *
897             * これは、カラãƒ??グループ化æŒ?®?columnGroup)を行う場合ã?、まとめ表示の方法をæŒ?®šしますã?
898             * なにも指定しなã�??合ã?、まとめカラãƒ??、表示しなã�?ゼロæ–?­—å?)になりますã?
899             * そã?場合ã?先ã?行と同じ場合も、変更されたカラãƒ?�Œ、NULL(ゼロæ–?­—å?)であったå?合もã€?
900             * 同じ用に表示されるためã?区別が付きませんã€?
901             * そこで、前の行と同じãƒ??タの場合に、特殊な処ç�?‚’行うことで、区別できるようにしますã?
902             * æŒ?®š方法が特殊なので、注意がå¿?¦�ですã?
903             *   記号の場合ï¼?
904             *       記号(-- , â†?, â†?, * など)が指定された場合ã?、そのままのæ–?­—に置き換えられますã?
905             *   アルファベットã?場合ï¼?
906             *       アルファベッãƒ?a-z,A-Z)の場合ã?ã€?lt;span class="アルファベッãƒ?&gt;å…??æ–?­?lt;/span&gt;
907             * 例えば、バãƒ?‚¯カラーに色を付けるã?æ–?­—をè–?�„灰色にする、などできますã?
908             * ただしã?ãƒ??タ量が圧倒的に増えるためã?大量ã?ãƒ??タ等で使用するのは避けたほã�?�Œ良ã�?�¨思いますã?
909             *
910             * @og.rev 3.8.5.0 (2006/03/20) 新規追åŠ?
911             *
912             * @param       grpCls まとめ表示の方æ³?
913             */
914            public void setGroupClass( final String grpCls ) {
915                    if( grpCls != null ) {
916                            groupClass = grpCls ;
917                            if( groupClass.length() == 0 ) {        // ゼロæ–?­—å?の場å�?
918                                    groupType = CLM_GRP.KIGO ;
919                            }
920                            else {
921                                    char ch = groupClass.charAt(0);
922                                    if( ( ch >= 'a' && ch <= 'z' ) || ( ch >= 'a' && ch <= 'z' ) ) {
923                                            groupType = CLM_GRP.CHAR ;
924                                    }
925                                    else {
926                                            groupType = CLM_GRP.KIGO ;
927                                    }
928                            }
929                    }
930            }
931    
932            /**
933             * カラãƒ?��リンクソートを表示するカラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
934             *
935             * ヘッãƒ??にソート用リンクを作æ?する useTableSorter 属æ? に対してã€?
936             * カラãƒ??別に作æ?する場合ã?カラãƒ?��をカンマ区åˆ?‚Šæ–?­—でæŒ?®šしますã?
937             * こã? tableSorterKeys 属æ?は、useTableSorter 属æ? と無関係に、指定しã�?
938             * カラãƒ??み、リンクを表示しますã?
939             * またã?全カラãƒ?�«つã�?�¦、有効にする場合ã?、columnName="*" を設定しますã?
940             * 例ï¼?OYA,KO,HJO,SU,DYSET,DYUPD"
941             *
942             * @og.rev 3.6.0.0 (2004/09/17) 新規作æ?
943             * @og.rev 5.1.8.0 (2010/07/01) å†?ƒ¨ロジãƒ?‚¯変更(setBooleanArray)
944             *
945             * @param       columnName      カラãƒ?��
946             */
947            public void setTableSorterKeys( final String columnName ) {
948                    if( columnName != null ) {
949                            setBooleanArray( columnName,true,sortKeys );
950    
951                            useSorterKeys = true;                           // 使用したことを記æ?
952                    }
953            }
954    
955            /**
956             * å�?‚«ラãƒ??フィールドã?ãƒ??タ長を返しますã?
957             *
958             * @og.rev 3.5.5.5 (2004/04/23) DBColumn の size と maxlength の 意味を変更
959             *
960             * @param       column カラãƒ?•ª号
961             *
962             * @return      カラãƒ?•°
963             */
964            protected int getColumnSize( final int column ) {
965                    return dbColumn[column].getTotalSize(); // 4.0.0 (2005/01/31) メソãƒ?ƒ‰名変更
966            }
967    
968            /**
969             * カラãƒ?•°を返しますã?
970             *
971             * @return      カラãƒ?•°
972             */
973            protected int getColumnCount() {
974                    return columnCount ;
975            }
976    
977            /**
978             * 行数を返しますã?
979             *
980             * @return      行数
981             */
982            protected int getRowCount() {
983                    return rowCount;
984            }
985    
986            /**
987             * リストã?ãƒ?‚¯スを作æ?する場合ã? name をセãƒ?ƒˆしますã?
988             *
989             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
990             *
991             * @param  name 属æ?
992             */
993            protected void setName( final String name ) {
994                    this.name = name;
995            }
996    
997            /**
998             * リストã?ãƒ?‚¯スを作æ?する場合ã? name を返しますã?
999             *
1000             * @return      name属æ?
1001             */
1002            protected String getName() {
1003                    return name;
1004            }
1005    
1006            /**
1007             * カラãƒ?��をもとに、そのカラãƒ?•ª号を返しますã?
1008             * カラãƒ?��が存在しなã�??合ã??¤ HybsSystemException ã‚?throw しますã?
1009             *
1010             * @param       columnName       カラãƒ?��
1011             *
1012             * @return      カラãƒ?•ª号
1013             */
1014            protected int getColumnNo( final String columnName ) {
1015                    return table.getColumnNo( columnName );
1016            }
1017    
1018            /**
1019             * 表示開始位置を返しますã?
1020             *
1021             * @return      表示開始位置
1022             */
1023            public int getStartNo() {
1024                    return startNo;
1025            }
1026    
1027            /**
1028             * 表示開始位置をセãƒ?ƒˆしますã?
1029             *
1030             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
1031             *
1032             * @param  no    表示開始位置
1033             */
1034            public void setStartNo( final int no ) {
1035                    if( no >= 0 ) { startNo = no; }
1036            }
1037    
1038            /**
1039             * 先é?へ戻るリンク間隔を返しますã?
1040             *
1041             * @return      backLinkCount    リンク間隔
1042             */
1043            public int getBackLinkCount() {
1044                    return backLinkCount;
1045            }
1046    
1047            /**
1048             * 先é?へ戻るリンク間隔をセãƒ?ƒˆしますã?
1049             *
1050             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
1051             *
1052             * @param  no   リンク間隔
1053             */
1054            public void setBackLinkCount( final int no ) {
1055                    if( no >= 0 ) { backLinkCount = no; }
1056            }
1057    
1058            /**
1059             * ヘッãƒ??をå?力する間隔を取得しますã?
1060             *
1061             * @og.rev 3.5.2.0 (2003/10/20) 新規作æ?
1062             *
1063             * @return      ヘッãƒ??の表示間隔 ( 0:通常ヘッãƒ??n:n回ごとに現れる )
1064             */
1065            public int getHeaderSkipCount() {
1066                    return headerSkipCount;
1067            }
1068    
1069            /**
1070             * ヘッãƒ??をå?力する間隔をセãƒ?ƒˆしますã?
1071             *
1072             * 0を指定すると、繰り返しません(つまりã?ヘッãƒ??を最初に表示するã�?�‘ですã?)
1073             * 数字をæŒ?®šすると、その回数毎に、ã?ãƒ?ƒ€ーをデータの行に挿入しますã?
1074             *
1075             * @og.rev 3.5.2.0 (2003/10/20) 新規作æ?
1076             *
1077             * @param       hsc ヘッãƒ??の表示間隔 ( 0:通常ヘッãƒ??n:n回ごとに現れる )
1078             */
1079            public void setHeaderSkipCount( final int hsc ) {
1080                    headerSkipCount = hsc;
1081            }
1082    
1083            /**
1084             * 表示件数を取得しますã?
1085             *
1086             * @return      表示件数
1087             */
1088            public int getPageSize() {
1089                    return pageSize;
1090            }
1091    
1092            /**
1093             * 表示件数をセãƒ?ƒˆしますã?
1094             *
1095             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
1096             *
1097             * @param       psize 表示件数
1098             */
1099            public void setPageSize( final int psize ) {
1100                    if( psize > 0 ) { pageSize = psize; }
1101            }
1102    
1103            /**
1104             * フォーマットを設定しますã?
1105             * ※ こã?クラスでは実è£?�•れてã�?�¾せんã€?
1106             *
1107             * @og.rev 3.5.4.0 (2003/11/25) 新規作æ?
1108             * @param list TableFormatterのリスãƒ?
1109             */
1110            public void setFormatterList( final List<TableFormatter> list ) {         // 4.3.3.6 (2008/11/15) Generics警告対å¿?
1111                    String errMsg = "こã?メソãƒ?ƒ‰は、フォーマット関係ã?ビューでのみ使用できますã?";
1112                    throw new UnsupportedOperationException( errMsg );
1113            }
1114    
1115            /**
1116             * 表示時ã?選択用オブジェクトã?タイプをæŒ?®šしますã?
1117             * ・è¤?•°選択可能時ã? "checkbox" を指定しますã?
1118             * ・ä¸?�¤ã�?�‘選ばせる場合ã?, "radio" を指定しますã?
1119             * ・éš?�—フィールドで全件を選ぶ場合ã?ã€?hidden" を指定しますã?
1120             * ・Noカラãƒ?��のもã?を表示させなã�??合ã?ã€?none" を指定しますã?
1121             * 初期値はã€?checkbox" ですã?
1122             *
1123             * @og.rev 2.2.0.0 (2002/12/17) 選択用オブジェクトã?タイプとして"hidden" を追åŠ?
1124             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
1125             * @og.rev 3.5.1.0 (2003/10/03) displayNumber å»?­¢。numberType 新規追åŠ??
1126             *
1127             * @param       type 選択用オブジェクトã?タイãƒ? "checkbox"/"radio"/"hidden"/"null" )
1128             */
1129            public void setSelectedType( final String type ) {
1130                    if( type != null ) {
1131                            if( "checkbox".equalsIgnoreCase( type  ) ||
1132                                    "radio".equalsIgnoreCase( type  ) ||
1133                                    "hidden".equalsIgnoreCase( type ) ) {
1134                                            selectedType = type;
1135                            }
1136                            else {
1137                                    selectedType = null;
1138                            }
1139                    }
1140            }
1141    
1142            /**
1143             * 表示時ã?行番号の表示方法をæŒ?®šしますã?
1144             * ・sequenceはã€?¼‘から始まるé?番ですã?
1145             * ・none を指定すると、番号は表示されませんã€?
1146             * ・delete を指定すると、行番号表示そã?もã?のタグを取り除きますã?(3.5.5.0 追åŠ?
1147             * ・skip=カラãƒ?��を指定すると、そのカラãƒ??値ã�?NULL の場合ã?、番号をスキãƒ??しますã?
1148             * ・view=カラãƒ?��を指定すると、そのカラãƒ??値がã?使用されますã?(ラベルは付きません)
1149             * skip=XX と、view=XX はã€?の前後にスペã?スをå?れなã�?�§下さã�??
1150             * 初期値はã€?sequence" ですã?
1151             *
1152             * @og.rev 3.5.1.0 (2003/10/03) 新規作æ?
1153             * @og.rev 3.5.5.0 (2004/03/12) numberType 属æ?の "delete" 値追åŠ?�«伴なã�??numberDisplay 変数の追åŠ??
1154             * @og.rev 5.3.0.0 (2010/12/01) 左右åˆ?‰²スクロール(SplitViewTag)対応ã?numberType 再設定時のnumberDisplay初期åŒ?
1155             *
1156             * @param       type 行番号の表示方法ã?タイãƒ? /sequence/none/delete/skip=カラãƒ?��/view=カラãƒ?��/ )
1157             */
1158            public void setNumberType( final String type ) {
1159    
1160                    numberType = type ;
1161                    numberDisplay = true;   // 5.3.0.0 (2010/12/01) numberType 再設定時のnumberDisplay初期åŒ?
1162                    if( type != null && !type.startsWith( "seq" ) && !type.startsWith( "none" ) ) {
1163                            if( type.startsWith( "skip=" ) ) {
1164                                    numberTypeClm = table.getColumnNo( type.substring( 5 ) );
1165                                    numberTypeData = new String[rowCount];
1166                                    int cnt = 1;
1167                                    for( int i=0; i<rowCount; i++ ) {
1168                                            String tmp = table.getValue( i,numberTypeClm );
1169                                            if( tmp != null && tmp.length() > 0 ) {
1170                                                    numberTypeData[i] = String.valueOf( cnt );
1171                                                    cnt++ ;
1172                                            }
1173                                            else {
1174                                                    numberTypeData[i] = "" ;
1175                                            }
1176                                    }
1177                            }
1178                            else if( type.startsWith( "view=" ) ) {
1179                                    numberTypeClm = getColumnNo( type.substring( 5 ) );
1180                            }
1181                            // 3.5.5.0 (2004/03/12)
1182                            else if( type.startsWith( "delete" ) ) {
1183                                    numberDisplay = false;
1184                            }
1185                            else {
1186                                    // 3.5.5.0 (2004/03/12) 不正な値をエラーチェãƒ?‚¯
1187                                    String errMsg = "numberType属æ?の値が不正ですã?numberType=[" + numberType + "]" +
1188                                                    HybsSystem.CR +
1189                                                    "設定できるのは、sequence/none/delete/skip=カラãƒ?��/view=カラãƒ?��/ ですã?";
1190                                    throw new HybsSystemException( errMsg );
1191                            }
1192                    }
1193            }
1194    
1195            /**
1196             * 表示時ã?選択用オブジェクトã?タイプを返しますã?
1197             * è¤?•°選択可能時ã? "checkbox"     ä¸?�¤ã�?�‘選ばせる場合ã?, "radio" を指定しますã?
1198             * 初期値はã€?checkbox" ですã?
1199             * "checkbox"/"radio"/"hidden" 以外ã?æ–?­—å?の場合ã?, null を返しますã?
1200             *
1201             * @return       選択用オブジェクトã?タイãƒ? "checkbox"/"radio"/"hidden"/"null" )
1202             */
1203            protected String getSelectedType() {
1204                    return selectedType ;
1205            }
1206    
1207            /**
1208             * No カラãƒ??æ–?­—å?を取得しますã?
1209             * setNumberType でæŒ?®šしたã?(sequence / none / skip=カラãƒ?�� / view=カラãƒ?��)に
1210             * 応じたå?(レンãƒ?ƒ©ーの値)を返しますã?
1211             *
1212             * @og.rev 3.5.1.0 (2003/10/03) 新規作æ?
1213             *
1214             * @param   row 行番号
1215             *
1216             * @return      Noカラãƒ??æ–?­—å?
1217             */
1218            protected String getNumberData( final int row ) {
1219                    String rtn = null;
1220    
1221                    if( numberType == null || numberType.startsWith( "se" ) ) {     // sequence
1222                            rtn = String.valueOf( row + 1 );
1223                    }
1224                    else {
1225                            if( numberType.startsWith( "no" ) ) {                   // none
1226                                    rtn = "";
1227                            }
1228                            else if( numberType.startsWith( "vi" ) ) {              // view
1229                                    rtn = getRendererValue( row,numberTypeClm );
1230                            }
1231                            else if( numberType.startsWith( "sk" ) ) {              // skip
1232                                    rtn = numberTypeData[row];
1233                            }
1234                    }
1235    
1236                    return rtn ;
1237            }
1238    
1239            /**
1240             * No カラãƒ??ヘッãƒ??æ–?­—å?を取得しますã?
1241             * setNumberType でæŒ?®šしたã?(sequence / none / skip=カラãƒ?�� / view=カラãƒ?��)に
1242             * 応じたå?(ラベル)を返しますã?
1243             * 具体的には、none 以外ã?ã€?No" とã�?�†æ–?­—を、none の時ã?ã€?"(ゼロストリング)を返しますã?
1244             *
1245             * @og.rev 3.5.4.6 (2004/01/30) 新規作æ?
1246             *
1247             * @return       Noカラãƒ??ヘッãƒ??æ–?­—å?
1248             */
1249            protected String getNumberHeader() {
1250                    String rtn = NO_HEADER;
1251    
1252                    if( numberType.startsWith( "no" ) ) {                   // none
1253                            rtn = "";
1254                    }
1255    
1256                    return rtn ;
1257            }
1258    
1259            /**
1260             * ãƒ??ブル等ã?チェãƒ?‚¯ボックスに属æ?を付加しまã�?
1261             * JavaScript などの HTML基本タグ以外ã?属æ?をã?そã?まま
1262             * チェãƒ?‚¯ボックス/ラジオボタン等に使用しますã?
1263             *
1264             * @og.rev 3.1.1.0 (2003/03/28) 同期メソãƒ?ƒ‰(synchronized付き)を非同期に変更するã€?
1265             *
1266             * @param       option オプション属æ?æ–?­—å?
1267             */
1268            public void setOptionTypeAttributes( final String option ) {
1269                    optTypeAttri = option;
1270            }
1271    
1272            /**
1273             * ãƒ??ブル等ã?チェãƒ?‚¯ボックスに属æ?を付加しまã�?
1274             * JavaScript などの HTML基本タグ以外ã?属æ?をã?そã?まま
1275             * チェãƒ?‚¯ボックス/ラジオボタン等に使用しますã?
1276             *
1277             * @return      オプション属æ?
1278             */
1279            protected String getOptionTypeAttributes() {
1280                    return optTypeAttri ;
1281            }
1282    
1283            /**
1284             * æœ?µ‚表示番号を取得しますã?
1285             * æœ?µ‚表示番号は、表示開始位置 + 表示件数 で求まりますã?
1286             * lastNo = startNo +  pageSize;
1287             *
1288             * ただしã?æœ?µ‚表示番号 ??ãƒ??タ件数 の場合ã??¤ æœ?µ‚表示番号 = ãƒ??タ件数
1289             * としますã?
1290             * なおã?表示件数 ã�?-1 の場合ã??¤ãƒ?ƒ•ォルトã?表示件数を使用しますã?
1291             *
1292             * @param       startNo    表示開始位置
1293             * @param       pageSize   表示件数
1294             *
1295             * @return      æœ?µ‚表示番号
1296             */
1297            protected int getLastNo( final int startNo, final int pageSize ) {
1298                    int lastNo = startNo + ( ( pageSize < 0 ) ? getPageSize() : pageSize );
1299                    if( lastNo > rowCount ) {
1300                            lastNo = rowCount ;
1301                    }
1302    
1303                    if( rowCount < 0 || startNo < 0 || lastNo < 0 ) {
1304                            String errMsg = "startNo lastNo のç¯?›²が不正ですã?" + HybsSystem.CR
1305                                                    + " startNo=" + startNo + " , lastNo=" + lastNo + " , RowCount=" + rowCount;
1306                            throw new HybsSystemException( errMsg );
1307                    }
1308    
1309                    return lastNo ;
1310            }
1311    
1312            /**
1313             * ビューフォーãƒ??タイプを返しますã?
1314             * これは、ViewFormFactory で、org.opengion.hayabusa.html.ViewForm_ + 『typeã€?
1315             * で作æ?されるサブクラスの 『typeã€?部åˆ?‚’返しますã?
1316             *
1317             * @og.rev 3.5.4.3 (2004/01/05) viewFormID を使用するように変更しますã?
1318             *
1319             * @return      ビューフォーãƒ??タイãƒ?
1320             */
1321            public String getViewFormType() {
1322                    return viewFormID ;
1323            }
1324    
1325            /**
1326             * ビューリンクオブジェクトを設定しますã?
1327             * これは、ViewLink タグで作æ?されã�?キー(カラãƒ?��)とリンクæ–?­—å?ã‚?
1328             * 持ってã�?‚‹ Attributes オブジェクトを受け取り、å?部でリンク表示に
1329             * 使用しますã?
1330             *
1331             * @og.rev 3.5.6.4 (2004/07/16) table ã�?null の場合ã?、セãƒ?ƒˆしませんã€?
1332             *
1333             * @param       link    ビューリンクオブジェクãƒ?
1334             */
1335            public void setViewLink( final ViewMarker link ) {
1336                    viewLink = link;
1337                    if( viewLink != null && table != null ) {
1338                            viewLink.setDBTableModel( table ) ;
1339                    }
1340            }
1341    
1342            /**
1343             * ビューマã?カーオブジェクトを設定しますã?
1344             * これは、ViewMarker タグで作æ?されã�?キー(カラãƒ?��)とマã?カーæ–?­—å?ã‚?
1345             * 持ってã�?‚‹ Attributes オブジェクトを受け取り、å?部でマã?カー表示に
1346             * 使用しますã?
1347             *
1348             * @og.rev 3.5.6.4 (2004/07/16) table ã�?null の場合ã?、セãƒ?ƒˆしませんã€?
1349             *
1350             * @param       marker  ビューマã?カーオブジェクãƒ?
1351             */
1352            public void setViewMarker( final ViewMarker marker ) {
1353                    viewMarker = marker;
1354                    if( viewMarker != null && table != null ) {
1355                            viewMarker.setDBTableModel( table ) ;
1356                    }
1357            }
1358    
1359            /**
1360             * エãƒ?‚£ãƒ?ƒˆマã?カーオブジェクトを設定しますã?
1361             * これは、ViewMarker タグで、isRendere="false" で作æ?されã�?エãƒ?‚£ãƒ?ƒˆキー(カラãƒ?��)と
1362             * マã?カーæ–?­—å?を持ってã�?‚‹ Attributes オブジェクトを受け取り、å?部でマã?カー表示に
1363             * 使用しますã?
1364             *
1365             * @og.rev 3.8.6.1 (2006/10/20) 新規追åŠ?
1366             *
1367             * @param       marker  ビューマã?カーオブジェクãƒ?
1368             */
1369            public void setEditMarker( final ViewMarker marker ) {
1370                    editMarker = marker;
1371                    if( editMarker != null && table != null ) {
1372                            editMarker.setDBTableModel( table ) ;
1373                    }
1374            }
1375    
1376            /**
1377             * 検索結果メãƒ?‚»ージを表示する/しなã�?‚’設定しまã�?
1378             * 初期値は、表示する(false)ですã?
1379             *
1380             * @param       noMessage [true:表示しなã�?false:表示する]
1381             */
1382            public void setNoMessage( final boolean noMessage ) {
1383                    this.noMessage = noMessage;
1384            }
1385    
1386            /**
1387             * DBColumn オブジェクトを返しますã?
1388             *
1389             * @og.rev 3.1.8.0 (2003/05/16) DBColumn オブジェクト取得用のメソãƒ?ƒ‰追åŠ?
1390             *
1391             * @param       column カラãƒ?•ª号
1392             *
1393             * @return  DBColumnオブジェクãƒ?
1394             */
1395            protected DBColumn getDBColumn( final int column ) {
1396                    return dbColumn[column];
1397            }
1398    
1399    
1400            /**
1401             * カラãƒ?åˆ?にカラãƒ?‚ªブジェクトを割り当てますã?
1402             * カラãƒ?‚ªブジェクトã??Œラベルã‚?ƒ�ーãƒ?�ªど?Œそのカラãƒ?ƒ…報ã‚?
1403             * 保持したオブジェクトですã?
1404             *
1405             * @og.rev 5.6.2.3 (2013/03/22) 新規追åŠ?
1406             *
1407             * @param   column  カラãƒ?‚ªブジェクãƒ?
1408             * @param   clm       ヘッãƒ??を適応するカラãƒ?åˆ?
1409             */
1410            protected void setDBColumn( int column, DBColumn clm ) {
1411                    dbColumn[column] = clm;
1412            }
1413    
1414            /**
1415             * チェãƒ?‚¯の入った行ã?みを表示させるかどã�?�‹æŒ?®šしますã?
1416             *
1417             * "true" で、チェãƒ?‚¯の入った行ã?みを表示させますã?
1418             * 従来は、TextField系のViewに対して、NEXT,PREVでチェãƒ?‚¯の
1419             * 入った行ã?みを表示させる機è?でしたがã?Table系のViewに対してもã?
1420             * 同様に機è?するように、しましたã€?
1421             * 初期値は、ViewForm.DEFAULT_SKIP ですã?
1422             *
1423             * @og.rev 3.5.3.1 (2003/10/31) 新規追åŠ?
1424             *
1425             * @param       skp チェãƒ?‚¯の入った行ã?みを表示させるかどã�?�‹(true:のみ表示/false:前件表示)
1426             */
1427            public void setSkip( final boolean skp ) {
1428                    skip = skp;
1429            }
1430    
1431            /**
1432             * チェãƒ?‚¯の入った行ã?みを表示させるかどã�?�‹(スキãƒ??するかどã�?�‹)を返しますã?
1433             *
1434             * skip=true で、かつ、チェãƒ?‚¯の入ってã�?�ªã�?¡Œã?場合に、trueを返しますã?
1435             * つまりã?skip=trueの場合ã?、チェãƒ?‚¯の入ってã�?�ªã�?¡Œã?、スキãƒ??するとã�?�†
1436             * 判断を行いますã?
1437             * skip属æ?の初期値は、ViewForm.DEFAULT_SKIP ですã?
1438             *
1439             * @og.rev 3.5.3.1 (2003/10/31) 新規追åŠ?
1440             *
1441             * @param       row     行番号
1442             *
1443             * @return      スキãƒ??する(true)?�スキãƒ??しなã�?false)
1444             */
1445            protected boolean isSkip( final int row ) {
1446                    return skip && ! isChecked( row );
1447            }
1448    
1449            /**
1450             * チェãƒ?‚¯ボックスの全チェãƒ?‚¯を選択するJavaScript の機è?を使用するかどã�?�‹を指定しますã?
1451             *
1452             * 1 で、コントロール用のチェãƒ?‚¯ボックスが現れて、この機è?を使用することができるようになりますã?
1453             * 0 は、従来どおりですã?
1454             * 使用するにあたりã?jsp/commpn/default.js にJavaScriptを設定しておきますã?(設定済み)
1455             * 初期値は、シスãƒ?ƒ パラメータ の VIEW_USE_CHECK_CONTROL ですã?(0:使用しなã�?
1456             *
1457             * @og.rev 3.5.4.3 (2004/01/05) 新規追åŠ?
1458             * @og.rev 3.7.0.1 (2005/01/31) 全件チェãƒ?‚¯コントロール変更( boolean â‡?int )
1459             *
1460             * @param       chCtrl チェãƒ?‚¯ボックスの全チェãƒ?‚¯を選択する機è?を使用するかどã�?�‹
1461             *                      (1:使用する/0:使用しなã�?2:初期値チェãƒ?‚¯済み)
1462             */
1463            public void setUseCheckControl( final int chCtrl ) {
1464                    useCheckControl = chCtrl;
1465            }
1466    
1467            /**
1468             * チェãƒ?‚¯ボックスの全チェãƒ?‚¯を選択するJavaScript の機è?を使用するかどã�?�‹を返しますã?
1469             *
1470             * å†?ƒ¨çš?�«はã€?1:使用する/0:使用しなã�?2:初期値チェãƒ?‚¯済み)の値を保持してã�?�¾すがã€?
1471             * タグを作æ?する場合には、まずã?使用するかどã�?�‹を指定するå¿?¦�があるためã€?
1472             * 1:使用する/2:初期値チェãƒ?‚¯済み は、true:使用するã€? は、false:使用しなã�?
1473             * を返しますã?
1474             *
1475             * @og.rev 3.5.4.3 (2004/01/05) 新規追åŠ?
1476             *
1477             * @return      チェãƒ?‚¯ボックスの全チェãƒ?‚¯を選択する機è?を使用するかどã�?�‹(true:使用する/false:使用しなã�?
1478             */
1479            protected boolean isUseCheckControl() {
1480                    return useCheckControl > 0;
1481            }
1482    
1483            /**
1484             * チェãƒ?‚¯ボックスの全チェãƒ?‚¯を選択すã‚?タグæ–?­—å?を返しますã?
1485             *
1486             * å†?ƒ¨çš?�«はã€?1:使用する/0:使用しなã�?2:初期値チェãƒ?‚¯済み)の値ã‚?
1487             * 保持してã�?�¾すã?で、それに対応した文字å?を返しますã?
1488             *
1489             * @og.rev 3.7.0.1 (2005/01/31) 新規追åŠ?
1490             * @og.rev 5.1.8.0 (2010/07/01) 全チェãƒ?‚¯を押した状態で画面遷移した場合にチェãƒ?‚¯状態を保持するã€?
1491             *
1492             * @return      チェãƒ?‚¯ボックスの全チェãƒ?‚¯を選択する機è?を使用するかどã�?�‹
1493             *                      (1:使用する/0:使用しなã�?2:初期値チェãƒ?‚¯済み)
1494             */
1495            protected String getAllCheckControl() {
1496                    final String rtn;
1497                    switch( useCheckControl ) {
1498                            case 1: rtn = "<input type=\"checkbox\" name=\"ALL_CHECK\" value=\"2\" onClick=\"checkbox(this);\" />" ;
1499                                            break;
1500                            case 2: rtn = "<input type=\"checkbox\" name=\"ALL_CHECK\" value=\"2\" onClick=\"checkbox(this);\" checked=\"checked\" />" ;
1501                                            break;
1502                            default : rtn = "" ;
1503                    }
1504                    return rtn ;
1505            }
1506    
1507            /**
1508             * ヘッãƒ??にソート用リンクを作æ?するかどã�?�‹を指定しますã?
1509             *
1510             * "true" で、ã?ãƒ?ƒ€ーにソート用リンクを作æ?しますã?
1511             * false は、作æ?しませんã€?
1512             *
1513             * @og.rev 3.5.4.7 (2004/02/06) 新規追åŠ?
1514             *
1515             * @param       flag ヘッãƒ??にソート用リンクを作æ?するかどã�?�‹(true:作æ?する/false:作æ?しなã�?
1516             */
1517            public void setUseTableSorter( final boolean flag ) {
1518                    useTableSorter = flag;
1519            }
1520    
1521            /**
1522             * ヘッãƒ??にソート用リンクを作æ?する時ã?、リクエスト引数のMapを設定しますã?
1523             *
1524             * ソート用URLに、リクエスト時の引数を設定するå¿?¦�がありますã?
1525             * そã?ため、リクエスト時のキーと値のセãƒ?ƒˆをMapでæŒ?®šしますã?
1526             * こã?Map は、リクエストキャãƒ?‚·ュより取り出しますã?
1527             * 実è£?�§は、このMapをå?に、URLのQuery部æ–?­—å?を作æ?しますã?処ç�?�Ž程においてã€?
1528             * こã?Map を書き換えることは行いませんã€?
1529             *
1530             * @og.rev 3.6.0.0 (2004/09/17) 新規作æ?
1531             * @og.rev 3.6.0.0 (2004/09/22) 引数ã�?null の時ã?処ç�?¿½åŠ?
1532             * @og.rev 4.0.0.0 (2005/01/31) Map.keySet より Map.entrySet を使用するように変更
1533             *
1534             * @param       map ヘッãƒ??ソート時のリンクに追åŠ?�™るリクエスト変数のキャãƒ?‚·ュMap
1535             */
1536            public void makeTableSorterQuery( final Map<?,?> map ) {          // 4.3.3.6 (2008/11/15) Generics警告対å¿?
1537                    if( map == null ) { return; }                   // 3.6.0.0 (2004/09/22)
1538    
1539                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1540                    Iterator<?> ite = map.entrySet().iterator() ;     // 4.0.0 (2005/01/31)
1541                    while( ite.hasNext() ) {
1542                            Map.Entry<?,?> entry = (Map.Entry<?,?>)ite.next();  // 4.3.3.6 (2008/11/15) Generics警告対å¿?
1543                            String key = (String)entry.getKey();
1544                            if( key != null
1545                                             &&     ! key.equalsIgnoreCase( "command" )
1546                                             &&     ! key.equalsIgnoreCase( HybsSystem.SORT_COLUMNS ) ) {
1547                                    String[] vals = (String[])entry.getValue();     // 4.0.0 (2005/01/31)
1548                                    if( vals != null ) {
1549                                            for( int i=0; i<vals.length; i++ ) {
1550                                                    buf.append( "&" ).append( key ).append( "=" );
1551                                                    buf.append( StringUtil.urlEncode( vals[i] ) );
1552                                            }
1553                                    }
1554                            }
1555                    }
1556    
1557                    if( buf.length() > 0 ) {
1558                            sorterQuery = buf.toString();
1559                    }
1560            }
1561    
1562            /**
1563             * カラãƒ?‚½ート機è?(リンク)の付いたラベル名を返しますã?
1564             * カラãƒ??é ?›®名に対して,見える形のæ–?­—å?を返しますã?
1565             * ä¸?ˆ¬には,リソースバンドルとçµ?�ˆせて,å�?›½ロケール毎にラベルã‚?
1566             * åˆ?›¿えますã?
1567             *
1568             * @og.rev 3.5.4.7 (2004/02/06) 新規追åŠ?
1569             * @og.rev 3.6.0.0 (2004/09/17) sortKeys の使用によるカラãƒ??別のリンク有無追åŠ?
1570             * @og.rev 5.2.1.0 (2010/10/01) ä¸?‹¬入力カラãƒ??アシスト機è?を利用する場合ã?処ç�?‚’追åŠ?
1571             * @og.rev 5.2.3.0 (2010/12/01) チェãƒ?‚¯ボックスでは、onChange ではなくã?onClick でイベントを発生させますã?
1572             * @og.rev 5.6.9.1 (2013/10/11) カラãƒ?•·にカンマが入ったå?合ã?対å¿?
1573             * @og.rev 5.7.8.1 (2014/07/18) カラãƒ?•·ã�?1000 では、少なã�?‚º。ï¼?TML5ではエラーになる為??
1574             *
1575             * @param       column カラãƒ?•ª号
1576             *
1577             * @return      ソート機è?(リンク)の付いたラベルå�?
1578             */
1579            protected String getSortedColumnLabel( final int column ) {
1580                    String rtn = getColumnLabel( column ) ;
1581    
1582                    if( ( useSorterKeys && sortKeys[column] ) ||
1583                            ( ! useSorterKeys && useTableSorter ) ) {
1584                            rtn = "<a href=\"?command=VIEW&" +
1585                                            HybsSystem.SORT_COLUMNS + "=" + dbColumn[column].getName() +
1586                                            sorterQuery + "\">" +
1587                                            rtn + "</a>" ;
1588                    }
1589    
1590                    // 5.2.1.0 (2010/10/01) ä¸?‹¬入力カラãƒ??アシスト機è?対å¿?
1591                    if( isClmBulkSet( column ) ) {
1592                            org.opengion.hayabusa.db.DBColumnConfig config = dbColumn[column].getConfig();
1593                            config.setAddNoValue( true );
1594                            if( "TEXT".equals( config.getEditor() ) ) {
1595                                    String mlen = config.getMaxlength();
1596                                    int     idx = mlen.indexOf( "," ); // 5.6.9.1 (2013/10/11) カンマが入ってã�?‚‹場合ã?対å¿?
1597                                    if( idx < 0 ){ idx = mlen.length();}
1598                                    if( mlen != null && Integer.parseInt( mlen.substring( 0, idx ) ) < COLUMNS_MAXSIZE ) { // 5.6.9.1 (2013/10/11)
1599                                            config.setViewLength( mlen );
1600                                    }
1601            //                      config.setMaxlength( "1000" );
1602                                    config.setMaxlength( "1000000" );               // 5.7.8.1 (2014/07/18)
1603                            }
1604                            else if( "RADIO".equals( config.getEditor() ) ) {
1605                                    config.setEditor( "MENU" );
1606                            }
1607    
1608                            Attributes attri = new Attributes();
1609                            // 5.2.3.0 (2010/12/01) チェãƒ?‚¯ボックスでは、onChange ではなくã?onClick でイベントを発生させますã?
1610                            if( "CHBOX".equals( config.getEditor() ) ) {
1611                                    attri.add( "onClick",  "bulkSet(this);" );
1612                            }
1613                            else {
1614                                    attri.add( "onChange",  "bulkSet(this);" );
1615                                    attri.add( "ondblclick","bulkPaste(this);" );
1616                            }
1617                            attri.add( "onkeydown", "ctrlCV(this);" );
1618                            config.setEditorAttributes( attri );
1619    
1620                            String key = config.getName();
1621                            config.setName( "h_" + key );
1622                            DBColumn clm = new DBColumn( config );
1623    
1624                            rtn = rtn + "<br />" + clm.getEditorValue( null ) ;
1625                    }
1626    
1627                    return rtn ;
1628            }
1629            
1630            /**
1631             * æŒ?®šカラãƒ?oがmustæŒ?®šされてã�?‚‹かどã�?�‹
1632             *
1633             * @og.rev 5.5.4.2 (2012/07/13)
1634             *
1635             * @param       column カラãƒ?O
1636             * @return mustæŒ?®šされてã�?‚‹かどã�?�‹[true:されてã�?‚‹/false:されてã�?�ªい]
1637             */
1638            protected boolean isMustColumn( final int column){
1639                    if( nullCheck != null && nullCheck.length > 0 ){
1640                            for(int i=0; i < nullCheck.length; i++){
1641                                    if( nullCheck[i].equals( dbColumn[column].getName() ) ){
1642                                            return true;
1643                                    }
1644                            }
1645                    }
1646                    return false;
1647            }
1648            
1649            /**
1650             * æŒ?®šカラãƒ?oがmustAnyæŒ?®šされてã�?‚‹かどã�?�‹
1651             *
1652             * @og.rev 5.5.4.2 (2012/07/13)
1653             *
1654             * @param       column カラãƒ?O
1655             * @return mustAnyæŒ?®šされてã�?‚‹かどã�?�‹[true:されてã�?‚‹/false:されてã�?�ªい]
1656             */
1657            protected boolean isMustAnyColumn( final int column){
1658                    if( mustAnyCheck != null && mustAnyCheck.length > 0 ){
1659                            for(int i=0; i < mustAnyCheck.length; i++){
1660                                    if( mustAnyCheck[i].equals( dbColumn[column].getName() ) ){
1661                                            return true;
1662                                    }
1663                            }
1664                    }
1665                    return false;
1666            }
1667    
1668            /**
1669             * ViewForm のサブクラスに渡すパラメータマップを設定しますã?
1670             *
1671             * @og.rev 3.5.4.8 (2004/02/23) ViewParamTag のパラメータを追åŠ?�—ますã?
1672             *
1673             * @param       map パラメータマッãƒ?
1674             */
1675            public void setParam( final Map<String,String> map ) {
1676                    viewParam = map ;
1677            }
1678    
1679            /**
1680             * ViewForm のサブクラスに渡すパラメータマップã?値を返しますã?
1681             * パラメータã�?存在しなã�?null)かã?値ã�?存在しなã�?null)の場合ã?ã€?
1682             * 初期値を返しますã?
1683             *
1684             * @og.rev 3.5.5.9 (2004/06/07) 新規追åŠ?
1685             *
1686             * @param       key     パラメータの取り出すキー
1687             * @param       def     パラメータが存在しなã�??合ã?初期値
1688             *
1689             * @return      パラメータ値
1690             */
1691            protected String getParam( final String key, final String def ) {
1692                    if( viewParam == null ) { return def; }
1693                    String rtn = viewParam.get( key );              // 4.3.3.6 (2008/11/15) Generics警告対å¿?
1694    
1695                    return ( rtn != null ) ? rtn : def ;
1696            }
1697    
1698            /**
1699             * ViewForm のサブクラスに渡すパラメータマップã?値を返しますã?
1700             * パラメータは、å?期å?が設定されてã�?‚‹もã?としã?そã?まま、å?を返しますã?
1701             *
1702             * @og.rev 5.5.5.6 (2012/08/31) 新規追åŠ?
1703             *
1704             * @param       key     パラメータの取り出すキー
1705             *
1706             * @return      パラメータ値
1707             */
1708            protected String getParam( final String key ) {
1709                    return (viewParam == null) ? null : viewParam.get( key );
1710            }
1711    
1712            /**
1713             * ViewForm のサブクラスに渡すパラメータマップã?値ã‚?int で返しますã?
1714             * パラメータは、å?期å?が設定されてã�?‚‹もã?としã?null の場合ã?ã€?1 を返しますã?
1715             *
1716             * @og.rev 5.5.5.6 (2012/08/31) 新規追åŠ?
1717             *
1718             * @param       key     パラメータの取り出すキー
1719             *
1720             * @return      パラメータ値(未設定時はã€?1)
1721             */
1722            protected int getIntParam( final String key ) {
1723                    String rtn = (viewParam == null) ? null : viewParam.get( key );
1724                    return (rtn == null) ? -1 : Integer.parseInt( rtn );
1725            }
1726    
1727            /**
1728             * ViewForm のサブクラスに渡すパラメータマップã?値ã‚?boolean で返しますã?
1729             * パラメータは、å?期å?が設定されてã�?‚‹もã?としã?null の場合ã?、false を返しますã?
1730             *
1731             * @og.rev 5.5.5.6 (2012/08/31) 新規追åŠ?
1732             *
1733             * @param       key     パラメータの取り出すキー
1734             *
1735             * @return      パラメータ値(未設定時は、false)
1736             */
1737            protected boolean getBoolParam( final String key ) {
1738                    String rtn = (viewParam == null) ? null : viewParam.get( key );
1739                    return (rtn == null) ? false : Boolean.parseBoolean( rtn );
1740            }
1741            
1742            /**
1743             * ViewForm のサブクラスに渡すパラメータ(æ–?­—å?配å?のArrayList)を設定しますã?
1744             *
1745             * @og.rev 5.5.8.3 (2012/11/17) ViewParamTag のパラメータを追åŠ?�—ますã?
1746             * @og.rev 5.5.9.0 (2012/12/03) ArrayListに変更
1747             *
1748             * @param       list æ–?­—å?配å?のArrayList
1749             */
1750            public void setViewArrayList( final List<String[]> list ) {
1751                    viewArrayList = list ;
1752            }
1753            
1754            /**
1755             * ViewForm のサブクラスに渡すパラメータ(æ–?­—å?配å?のArrayList)の値を返しますã?
1756             * パラメータは、å?期å?が設定されてã�?‚‹もã?としã?そã?まま、å?を返しますã?
1757             *
1758             * @og.rev 5.5.8.3 (2012/11/17) 新規追åŠ?
1759             * @og.rev 5.5.9.0 (2012/12/03) ArrayListに変更
1760             *
1761             * @return      パラメータ値
1762             */
1763            protected List<String[]> getViewArrayList() {
1764                    return viewArrayList;
1765            }
1766    
1767            /**
1768             * No æ¬?��のもã?を作æ?するかどã�?�‹を返しますã?
1769             *
1770             * numberType 属æ?にã€?delete" とã�?�†値を設定したå?合ã?、No æ¬?��のもã?ã‚?
1771             * 作æ?しません。それ以外ã?、作æ?しますã?
1772             * 初期値は、作æ?する(true)ですã?
1773             *
1774             * @og.rev 3.5.5.0 (2004/03/12) 新規追åŠ?
1775             *
1776             * @return      Noæ¬?��のもã?を作æ?するかどã�?�‹(true:作æ?する/false:作æ?しなã�?
1777             */
1778            protected boolean isNumberDisplay() {
1779                    return numberDisplay;
1780            }
1781    
1782            /**
1783             * マã?カーオブジェクãƒ?リンク、ã?ーカー)を設定しますã?
1784             * ここでは、旧 ViewForm 属æ?ã‚?新ViewForm に直接セãƒ?ƒˆしますã?
1785             *
1786             * @og.rev 3.5.6.1 (2004/06/25) 新規追åŠ?
1787             * @og.rev 3.8.6.1 (2006/10/20) editMarker 追åŠ?
1788             *
1789             * @param       view ViewFormオブジェクãƒ?
1790             */
1791            public void markerSet( final ViewForm view ) {
1792                    if( view instanceof AbstractViewForm ) {
1793                            viewLink   = ((AbstractViewForm)view).viewLink ;
1794                            if( viewLink != null ) { viewLink.setDBTableModel( table ); }
1795                            viewMarker = ((AbstractViewForm)view).viewMarker;
1796                            if( viewMarker != null ) { viewMarker.setDBTableModel( table ); }
1797                            editMarker = ((AbstractViewForm)view).editMarker;
1798                            if( editMarker != null ) { editMarker.setDBTableModel( table ); }
1799                    }
1800                    else {
1801                            String errMsg = "AbstractViewForm 以外ã? view は、サポã?トしてã�?�¾せんã€?
1802                                            + " view=[" + view + "]" ;
1803                            throw new HybsSystemException( errMsg );
1804                    }
1805            }
1806    
1807            /**
1808             * ãƒ??ブルのバックグラウンドカラーの入れ替えã?サイクルをセãƒ?ƒˆしますã?
1809             * 0(ゼブラなã�?ã€?1(ワーニング)ã€?2以ä¸?エラー)ã€?(ゼブラ)ã€?以ä¸?行数まとã‚?
1810             * 初期値はã€?(ゼブラ)ですã?
1811             *
1812             * @og.rev 3.5.6.2 (2004/07/05) ViewForm_HTMLTable より移å‹?
1813             *
1814             * @param  sycle  0(ゼブラなã�?ã€?1(ワーニング)ã€?2以ä¸?エラー)ã€?(ゼブラ)ã€?以ä¸?行数まとã‚?
1815             */
1816            public void setBgColorCycle( final int sycle ) {
1817                    bgColorCycle    = 1;            // 強制çš?�«設å®?
1818    
1819                    if( sycle > 0 ) {                                            // 1(ゼブラ)ã€?以ä¸?行数まとã‚?
1820                            color_row0              = BG_COLOR_ROW0 ;
1821                            color_row1              = BG_COLOR_ROW1 ;
1822                            bgColorCycle    = sycle;                        // こã?ケースのみ引数を設å®?
1823                    }
1824                    else if( sycle == -1 ) {                                        // -1(ワーニング)
1825                            color_row0              = BG_WARNING_COLOR_ROW0 ;
1826                            color_row1              = BG_WARNING_COLOR_ROW1 ;
1827                    }
1828                    else if( sycle < -1 ) {                                      // -2以ä¸?エラー)
1829                            color_row0              = BG_ERROR_COLOR_ROW0 ;
1830                            color_row1              = BG_ERROR_COLOR_ROW1 ;
1831                    }
1832                    else {                                                                                  // 0(ゼブラなã�?
1833                            color_row0              = "" ;
1834                            color_row1              = "" ;
1835                    }
1836            }
1837    
1838            /**
1839             * ãƒ??ブルのバックグラウンドカラーのクラスにæŒ?®šするカラãƒ?��を指定しますã?
1840             *
1841             * 通常のゼブラ模様ã?、tr 属æ?のクラスæŒ?®šとして、row_0、row_1 が指定されますã?
1842             * そã?代わりに、ここでæŒ?®šされたカラãƒ??値がクラス属æ?として設定されますã?
1843             * (æŒ?®šするã?はカラãƒ?��ですã?行単位にクラス属æ?の値を変えることが可能ですã?)
1844             * 選択è¡?row_sel)は、優先して使用されますã?
1845             * 出力されるクラス名ã?ã€?row_" + 属æ?値 になりますã?
1846             *
1847             * @og.rev 5.1.8.0 (2010/07/01) 新規追åŠ?
1848             *
1849             * @param  clsClm ゼブラ模様ã?替わりにæŒ?®šするクラスをæ?納したカラãƒ?��
1850             */
1851            public void setBgColorClsClm( final String clsClm ) {
1852                    if( clsClm != null ) {
1853                            bgColorClsClmNo = table.getColumnNo( clsClm );
1854                    }
1855            }
1856    
1857            /**
1858             * ãƒ??ブルのバックグラウンドカラーの値をセãƒ?ƒˆしますã?
1859             * これは、DBTableModele が指定ã?行番号の時に、BG_COLOR_ROWSEL ã‚?
1860             * 返しますã?それ以外ã?ã€??常の getBgColorCycleClass( int )と
1861             * 同じ結果を返しますã?
1862             * BG_COLOR_ROWSEL の使用有無は、シスãƒ?ƒ パラメータの
1863             * VIEW_USE_SELROW_COLOR 属æ?でæŒ?®šできますã?
1864             *
1865             * @og.rev 3.7.0.3 (2005/03/01) 新規追åŠ?
1866             * @og.rev 3.7.1.1 (2005/05/31) SEL_ROW機è?使用時に、BG_COLOR_ROWSEL の使用 æœ?無を指å®?
1867             *
1868             * @param       indx 先é?からの連番( ?�から始めã‚?)
1869             * @param       row 行番号
1870             *
1871             * @return      行ã?色を指定すã‚?class 属æ?( cssファイルでæŒ?®?)
1872             * @see #getBgColorCycleClass( int )
1873             */
1874            protected String getBgColorCycleClass( final int indx,final int row ) {
1875                    return ( useSelRowColor && scrollRowNo == row ) ? BG_COLOR_ROWSEL : getBgColorCycleClass( indx ) ;
1876            }
1877    
1878            /**
1879             * ãƒ??ブルのバックグラウンドカラーの値をセãƒ?ƒˆしますã?
1880             * 行番号は, ?�から始まるã?で、å?数ã‚?HTML_BG_COLOR_ROW0 ã€?
1881             * å¥?•°行を HTML_BG_COLOR_ROW1 としますã?
1882             * setBgColorCycle で、設定å?変換してã�?�¾すã?
1883             * bgColorClsClm が指定されてã�?‚‹場合ã?、その値を利用したクラス属æ?を返しますã?
1884             * クラス名ã?ã€?row_" + æŒ?®šカラãƒ??値 ですã?
1885             * æŒ?®šカラãƒ??値 がã?null またã?、空æ–?­—å?の場合ã?、従来のゼブラ模様が優先されますã?
1886             * またã?行選択があれば、そちらがæœ?„ª先されますã?
1887             *
1888             * @og.rev 3.5.6.2 (2004/07/05) ViewForm_HTMLTable より移å‹?
1889             * @og.rev 5.1.8.0 (2010/07/01) bgColorClsClmNo 対å¿?
1890             *
1891             * @param       row 行番号( ?�から始めã‚?)
1892             *
1893             * @return      行ã?色を指定すã‚?class 属æ?( cssファイルでæŒ?®?)
1894             * @see         #setBgColorClsClm( String )
1895             */
1896            protected String getBgColorCycleClass( final int row ) {
1897                    String rtn = null ;
1898    
1899                    // 5.1.8.0 (2010/07/01) bgColorClsClmNo 対å¿?
1900                    if( bgColorClsClmNo >= 0 ) {
1901                            String val = table.getValue( row,bgColorClsClmNo );
1902                            if( val != null && val.length() > 0 ) {
1903                                    rtn = " class=\"row_" + val + "\"";
1904                            }
1905                    }
1906    
1907                    if( rtn == null ) {
1908                            if( (row/bgColorCycle) % 2 == 0 ) {
1909                                    rtn = color_row0;               // 偶数の場å�?
1910                            }
1911                            else {
1912                                    rtn = color_row1;               // å¥?•°の場å�?
1913                            }
1914                    }
1915    
1916                    return rtn ;
1917            }
1918    
1919            /**
1920             * スクロールバã?用のDIV要ç´?‚’出力するかどã�?�‹(初期値はシスãƒ?ƒ パラメータ)
1921             *
1922             * スクロールバã?対応する為、テーブルの先é?に、DIV要ç´?‚’出力しますã?
1923             * 初期値は、シスãƒ?ƒ パラメータ の VIEW_USE_SCROLLBAR ですã?
1924             * ※ 互換性の関係よりã?false になってã�?�¾すã?
1925             * ※ 互換性の関係よりã?新しいタイプã?ヘッãƒ??固定を、TYPE2 としますã?
1926             *
1927             * @og.rev 3.5.6.4 (2004/07/16) 新規追åŠ?
1928             * @og.rev 3.8.0.3 (2005/07/15) barType 変数の追åŠ?
1929             * @og.rev 4.0.0.0 (2007/04/10) ヘッãƒ??固定ã?スクロールタイプã?、TYPE2 のみにするã€?
1930             *
1931             * @param  useBar  スクロールバã?用のDIV要ç´??出åŠ?[true:出力すã‚?false:出力しない]
1932             */
1933            public void setUseScrollBar( final boolean useBar ) {
1934                    useScrollBar  = useBar;
1935            }
1936    
1937            /**
1938             * スクロールバã?用の開始DIV要ç´?¿”しますã?
1939             *
1940             * スクロールバã?対応する為、テーブルの先é?に、DIV要ç´?‚’出力しますã?
1941             * 初期値は、シスãƒ?ƒ パラメータ の VIEW_USE_SCROLLBAR でæŒ?®šされたDIV要ç´?�§すã?
1942             * DIV要ç´??開始タグになりますã?
1943             *
1944             * @og.rev 3.8.0.3 (2005/07/15) 新規追åŠ?
1945             * @og.rev 4.2.0.0 (2008/03/18) outerにwidthとheightをå?すよã�?�«修正
1946             *
1947             * @return  LAYER_ST スクロールバã?用の開始DIV要ç´?
1948             */
1949            protected String getScrollBarStartDiv() {
1950                    String layerStart = LAYER_ST0 ;
1951                    if( useScrollBar ) {
1952                            layerStart = "<div id=\"divPos\" style=\"";
1953                            if( height != null ){
1954                                    layerStart += "height:" + height + ";";
1955                            }
1956                            if( width != null ){
1957                                    layerStart += "width:" + width + ";";
1958                            }
1959                            layerStart += "\" >"
1960                                    +       "<div id=\"outer\">"
1961                                    +       "<div id=\"layer\" onscroll=\"SetScrollHeader(this);\">"
1962                                    +       "<div id=\"divHide\">" ;
1963                    }
1964                    return layerStart;
1965            }
1966    
1967            /**
1968             * スクロールバã?用の終äº?IV要ç´?¿”しますã?
1969             *
1970             * スクロールバã?対応する為、テーブルの終äº?�«、DIV要ç´?‚’出力しますã?
1971             * 初期値は、シスãƒ?ƒ パラメータ の VIEW_USE_SCROLLBAR でæŒ?®šされたDIV要ç´?�§すã?
1972             * DIV要ç´??終äº?‚¿グになりますã?
1973             *
1974             * @og.rev 3.8.0.3 (2005/07/15) 新規追åŠ?
1975             *
1976             * @return  スクロールバã?用の終äº?IV要ç´?
1977             */
1978            protected String getScrollBarEndDiv() {
1979                    String layerEnd = LAYER_END0 ;
1980                    if( useScrollBar ) {
1981                            layerEnd = LAYER_END2 ;
1982                    }
1983                    return layerEnd;
1984            }
1985    
1986            /**
1987             * æŒ?®šã?行番号まで画面をスクロールさせるå?合ã?行番号を設定しますã?
1988             *
1989             * 画面をスクロール後ã?リンク等で他画面を表示後ã?戻ってきた場合にã€?
1990             * 先ã?スクロール位置まで戻しますã?
1991             * ただしã?厳å¯?�«戻すことはできなã�?�Ÿめã?大体ã?あたりに戻しますã?
1992             * æŒ?®šしなã�??å�?クリアする場å�?はã€?1 をセãƒ?ƒˆしてくださいã€?
1993             * useSelRowColor はã€?�¸択行に色づけするかどã�?�‹を指定しますã?
1994             *
1995             * @og.rev 3.7.0.3 (2005/03/01) 新規追åŠ?
1996             * @og.rev 3.7.1.1 (2005/05/31) 選択行ã?ーカーの使用有無
1997             *
1998             * @param       rowNo   æŒ?®šã?行番号まで画面をスクロールさせるå?合ã?行番号
1999             * @param       useSelRowColor  選択行ã?ーカーの使用有無
2000             */
2001            public void setScrollRowNo( final int rowNo, final boolean useSelRowColor ) {
2002                    scrollRowNo = rowNo;
2003                    firstChecked = false;
2004                    this.useSelRowColor = useSelRowColor;
2005            }
2006    
2007            /**
2008             * 設定å?に "_" が含まれてã�?‚‹場合にレンãƒ?ƒ©ーを使用するカラãƒ?‚’CSV形式でæŒ?®šしますã?
2009             *
2010             * これは、従来の カラãƒ?®š義の WRITABLE エãƒ?‚£ターと同等ã?働きを行うように
2011             * カラãƒ?±žæ?を指定しますã?
2012             * WRITABLE エãƒ?‚£ターは、設定å?にアンãƒ??バã? "_" が含まれてã�?‚‹場合にã€?
2013             * そã?値を書込み禁止にする機è?ですã?これは、エãƒ?‚£ター自身がå?を判断して
2014             * 書き込み許可か禁止かを判断してã�?�¾すã?
2015             * こã?動きを汎用çš?�«するため、指定ã?カラãƒ?‚’カンマ区åˆ?‚Šæ–?­?CSV)でæŒ?®?
2016             * することにより、レンãƒ?ƒ©ーとエãƒ?‚£ターを設定å?によって動的にåˆ?‚Š替える
2017             * 機è?を実現しますã?
2018             * そã?場合ã?表示/編é›?�¨もに、å?頭のアンãƒ??バã?は削除されますã?
2019             * またã?全カラãƒ?�«つã�?�¦、有効にする場合ã?、writableControl="*" を設定しますã?
2020             *
2021             * @og.rev 3.8.0.9 (2005/10/17) 新規追åŠ?
2022             * @og.rev 5.1.8.0 (2010/07/01) å†?ƒ¨ロジãƒ?‚¯変更(setBooleanArray)
2023             *
2024             * @param  wrtCtrl 書き込み制御を行いたいカラãƒ?‚’CSV形式でæŒ?®?
2025             */
2026            public void setWritableControl( final String wrtCtrl ) {
2027                    setBooleanArray( wrtCtrl,true,writeCtrl );
2028            }
2029    
2030            /**
2031             * CSV形式でæŒ?®šされたカラãƒ?�«、true/false の初期設定を行いますã?
2032             *
2033             * 従来は、各クラスで実è£?�•れてã�?�Ÿ処ç�?‚’、ä¸?®?‰€にまとめますã?
2034             * これにより、各種機è?をあらかじめ実è£?�—ておきますã?
2035             * æŒ?®šã?カラãƒ?�Œ、null の場合ã?、何も処ç�?‚’行いませんã€?つまりã?初期値のまま)
2036             * æŒ?®šã?カラãƒ?�Œã€? の場合ã?、すべてのカラãƒ?�ŒæŒ?®šされたとみなしã?配å?に値を設定しますã?
2037             * æŒ?®šã?カラãƒ?�Œã€?"(ゼロæ–?­—å?)の場合ã?、なにもカラãƒ?�ŒæŒ?®šされてã�?�ªã�?‚‚のとみなされã€?
2038             * 初期値のé€?�§埋められますã?
2039             *
2040             * @og.rev 5.1.8.0 (2010/07/01) 新規追åŠ?
2041             *
2042             * @param  clsm    æŒ?®šã?カラãƒ?‚’CSV形式でæŒ?®?
2043             * @param  def     設定するå?
2044             * @param       arrays  設定すã‚?配å?
2045             */
2046            private void setBooleanArray( final String clsm , final boolean def , final boolean[] arrays ) {
2047                    if( clsm != null ) {
2048                            // 書き込み制御の許可 をカラãƒ?�˜位で設定ã?* の場合ã?、å?カラãƒ?¨±可
2049                            if( "*".equals( clsm ) ) {
2050                                    Arrays.fill( arrays,def );
2051                            }
2052                            else {
2053                                    Arrays.fill( arrays,!def );
2054                                    String[] clmNames = StringUtil.csv2Array( clsm );
2055                                    for( int i=0; i<clmNames.length; i++ ) {
2056                                            if( clmNames[i] != null && clmNames[i].length() > 0 ) {
2057                                                    int no = table.getColumnNo( clmNames[i] );
2058                                                    if( no >= 0 ) { arrays[ no ] = def; }
2059                                            }
2060                                    }
2061                            }
2062                    }
2063            }
2064    
2065            /**
2066             * ogPopup で検索結果の値を返すキーをã?CSV形式でæŒ?®šしますã?
2067             *
2068             * popup の検索結果を返す画面で、結果のラジオボタンにイベントセãƒ?ƒˆしますã?
2069             * こã?場合ã?オープンもとのwindow に値を返しますが、そのキーをCSV形式で
2070             * æŒ?®šしますã?
2071             * なおã?こã?メソãƒ?ƒ‰は、ä¸?¦§表示(HTMLTable)関係ã?ビューのみでサポã?トして
2072             * ã�?�¾すが、チェãƒ?‚¯メソãƒ?ƒ‰の関係で、それ以外ã?ビューに適用してもç´??ã‚?
2073             * するようにしますã?(エラーにしません)
2074             *
2075             * @og.rev 3.8.6.1 (2006/10/20) 新規追åŠ?
2076             *
2077             * @param  rtnKeys ogPopupで値を返すカラãƒ?–‡字å?(CSV形å¼?
2078             */
2079            public void setPopupReturnKeys( final String rtnKeys ) {
2080                    // こã?メソãƒ?ƒ‰は、ä¸?¦§表示(HTMLTable)関係ã?ビューのみでサポã?トして
2081                    // ã�?�¾すが、チェãƒ?‚¯メソãƒ?ƒ‰の関係で、それ以外ã?ビューに適用してもç´??ã‚?
2082                    // するようにしますã?(エラーにしません)
2083            }
2084    
2085            /**
2086             * table要ç´?�«対して class 属æ?を設定しますã?
2087             *
2088             * 従来の シスãƒ?ƒ リソースでのãƒ??ブルレイアウトã?設定をå»?­¢しã?
2089             * CSSファイルで、指定するよã�?�«変更してã�?�¾すã?
2090             * これに伴ã�??CSSファイルのキーとして、クラス属æ?をå?力しますã?
2091             * view(またã?、å?力されるtableタグ)のレイアウトã?、このクラス属æ?で
2092             * æŒ?®šすることが可能になりますã?
2093             * 初期値は、viewTable ですã?
2094             *
2095             * @og.rev 4.0.0.0 (2007/04/16) 新規追åŠ?
2096             *
2097             * @param       cls     class属æ?を表す文字å?
2098             */
2099            public void setTableClass( final String cls ) {
2100                    if( cls != null ) {
2101                            clazz = cls;
2102                    }
2103            }
2104    
2105            /**
2106             * table要ç´?�«対して class 属æ?を返しますã?
2107             *
2108             * @og.rev 4.0.0.0 (2007/04/16) 新規追åŠ?
2109             *
2110             * @return      class属æ?を表す文字å?
2111             */
2112            protected String getTableClass() {
2113                    return clazz;
2114            }
2115    
2116            /**
2117             * outerのIDを持つDIV要ç´?�«heightを指定しまã�?
2118             *
2119             * ビューの高さ、å¹?‚’æŒ?®šできるようにしますã?
2120             * これによって?‘画面に?’つのビューをå?力する事も可能となりますã?
2121             * 初期値はnullですã?
2122             *
2123             * @og.rev 4.2.0.0 (2008/03/18) 新規追åŠ?
2124             *
2125             * @param       high    ビューの高さ
2126             */
2127            public void setHeight( final String high ) {
2128                    height = high;
2129            }
2130    
2131            /**
2132             * outerのIDを持つDIV要ç´?�«widthを指定しまã�?
2133             *
2134             * ビューの高さ、å¹?‚’æŒ?®šできるようにしますã?
2135             * これによって?‘画面に?’つのビューをå?力する事も可能となりますã?
2136             * 初期値はnullですã?
2137             *
2138             * @og.rev 4.2.0.0 (2008/03/18) 新規追åŠ?
2139             *
2140             * @param       wide    ビューの高さ
2141             */
2142            public void setWidth( final String wide ) {
2143                    width = wide;
2144            }
2145    
2146            /**
2147             * リソースマネージャを設定しますã?
2148             * クロスé›?¨ˆ時に、useColumnHeader="true"とした場合ã?み設定されますã?
2149             *
2150             * @og.rev 4.0.0.0 新規作æ?
2151             *
2152             * @param       res リソースマネージャー
2153             */
2154            public void setResourceManager( final ResourceManager res ) {
2155                    resourceManager = res;
2156            }
2157    
2158            /**
2159             * リソースマネージャを取得しますã?
2160             *
2161             * @og.rev 4.0.0.0 新規作æ?
2162             *
2163             * @return      ResourceManagerリソースマネージャー
2164             */
2165            protected ResourceManager getResourceManager() {
2166                    return resourceManager;
2167            }
2168    
2169            /**
2170             * 改廃Cのつã�?�¦ã�?�ªã�?¡Œをスキãƒ??するかどã�?�‹æŒ?®šしますã?
2171             *
2172             * "true" で、改廃Cのつã�?�Ÿ行をスキãƒ??しますã?
2173             * 初期値はfalseですã?
2174             *
2175             * @og.rev 4.3.1.0 (2008/09/08) 新規追åŠ?
2176             *
2177             * @param       sne 改廃Cのつã�?�¦ã�?�ªã�?¡Œをスキãƒ??するかどã�?�‹(true:スキãƒ??する/false:スキãƒ??しなã�?
2178             */
2179            public void setSkipNoEdit( final boolean sne ) {
2180                    skipNoEdit = sne;
2181            }
2182    
2183            /**
2184             * 改廃Cのつã�?�¦ã�?�ªã�?¡Œをスキãƒ??するかどã�?�‹æŒ?®šしますã?
2185             *
2186             * skipNoEdit="true"でかつ、編é›?�•れてã�?�ªã�?改廃Cがつã�?�¦ã�?�ªã�?場合ã?み
2187             * trueを返しますã?
2188             *
2189             * @og.rev 4.3.1.0 (2008/09/08) 新規追åŠ?
2190             *
2191             * @param       row     行番号
2192             *
2193             * @return      スキãƒ??対象行か
2194             */
2195            protected boolean isSkipNoEdit( final int row ) {
2196                    return skipNoEdit && ( table.getModifyType( row ) == null || table.getModifyType( row ).length() == 0 );
2197            }
2198    
2199            /**
2200             * 画面遷移なしモードに対応した形で処ç�?‚’行うかをæŒ?®šしますã?
2201             *
2202             * "true" で、画面遷移なしモードに対応しますã?
2203             * 初期値はfalseですã?
2204             *
2205             * @og.rev 4.3.3.0 (2008/10/01) 新規追åŠ?
2206             *
2207             * @param       flag 画面遷移なしモードに対応するかどã�?�‹(true:対応すã‚?false:対応しなã�?
2208             */
2209            public void setNoTransition( final boolean flag ) {
2210                    noTransition = flag;
2211            }
2212    
2213            /**
2214             * 画面遷移なしモードに対応した形で処ç�?‚’行うかを返しますã?
2215             *
2216             * "true" で、画面遷移なしモードに対応しますã?
2217             * 初期値はfalseですã?
2218             *
2219             * @og.rev 4.3.3.0 (2008/10/01) 新規追åŠ?
2220             *
2221             * @return      画面遷移なしモードに対応するかどã�?�‹(true:対応すã‚?false:対応しなã�?
2222             */
2223            protected boolean isNoTransition() {
2224                    return noTransition;
2225            }
2226    
2227            /**
2228             * 該当行ã?行番号と改廃Cをå?力しますã?
2229             * 出力形式ã?ã€?rid="[行番号]" kh="[改廃C]" ですã?
2230             * 改廃Cが付加されてã�?�ªã�??合ã?、改廃Cがnullの場合ã?、kh属æ?は出力されませんã€?
2231             * (画面遷移なしモードで使用しまã�?
2232             *
2233             * @og.rev 4.3.3.0 (2008/10/01) 新規作æ?
2234             *
2235             * @param       row 行番号( ?�から始めã‚?)
2236             *
2237             * @return      該当行ã?行番号と改廃C
2238             */
2239            protected String getHiddenRowValue( final int row ) {
2240                    String kh = "";
2241                    if( table.getModifyType( row ) != null && table.getModifyType( row ).length() > 0 ) {
2242                            kh = " " + hiddenCdkhKey + "=\"" + table.getModifyType( row ) + "\"";
2243                    }
2244                    return " " + hiddenRowKey + "=\"" + row + "\"" + kh;
2245            }
2246    
2247            /**
2248             * ビューで表示したカラãƒ??ä¸?¦§をカンマ区åˆ?‚Šで返しますã?
2249             *
2250             * @og.rev 5.1.6.0 (2010/05/01) 新規追åŠ?
2251             *
2252             * @return      ビューで表示したカラãƒ??ä¸?¦§
2253             */
2254            public String getViewClms() {
2255                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
2256                    for( int i=0; i<clmDisplay.length; i++ ) {
2257                            if( clmDisplay[i] && !( rowWritableFlag && i==0 ) ) {
2258                                    if( buf.length() > 0 ) { buf.append( ',' ); }
2259                                    buf.append( dbColumn[i].getName() );
2260                            }
2261                    }
2262                    return buf.toString();
2263            }
2264    
2265            /**
2266             * 表示é ?›®の編é›?並び替ã�?が可能かどã�?�‹を返しまã�?
2267             *
2268             * @og.rev 5.1.6.0 (2010/05/01) 新規追åŠ?
2269             *
2270             * @return      表示é ?›®の編é›?並び替ã�?が可能かどã�?�‹(true:可能)
2271             */
2272            public boolean isEditable() {
2273                    return true;
2274            }
2275    
2276            /**
2277             * こã?ViewFormが作æ?された画面IDをセãƒ?ƒˆしますã?
2278             *
2279             * @og.rev 5.1.7.0 (2010/06/01) 新規追åŠ?
2280             *
2281             * @param gamenId 画面ID
2282             */
2283            public void setGamenId( final String gamenId ) {
2284                    this.gamenId = gamenId;
2285            }
2286    
2287            /**
2288             * こã?ViewFormが作æ?された画面IDを返しますã?
2289             *
2290             * @og.rev 5.1.7.0 (2010/06/01) 新規追åŠ?
2291             *
2292             * @return      画面ID
2293             */
2294            public String getGamenId() {
2295                    return gamenId;
2296            }
2297    
2298            /**
2299             * カラãƒ?�Œä¸?‹¬入力アシスト機è?を利用するかどã�?�‹を返しますã?
2300             *
2301             * 条件は、ä¸?‹¬入力アシストカラãƒ?�§、かつ、書き込み許可(isColumnWritable(clm)==true)の場合とするã€?
2302             *
2303             * @og.rev 5.2.1.0 (2010/10/01) 新規作æ?
2304             *
2305             * @param       column カラãƒ?•ª号
2306             *
2307             * @return      利用する(true)?�しなã�?false)
2308             */
2309            protected boolean isClmBulkSet( final int column ) {
2310                    return clmBulkSet[ column ] && clmWritable[ column ];
2311            }
2312    
2313            /**
2314             * ä¸?‹¬入力カラãƒ??アシスト機è?を利用するカラãƒ?��をã?カンマ区åˆ?‚Šで与えますã?
2315             *
2316             * これは、カラãƒ??書き込み時に、ä¸?‹¬入力可能なカラãƒ?‚’ヘッãƒ??に表示しã?
2317             * ä¸?‹¬登録できる機è?を提供しますã?
2318             * こã?機è?は、jsp/common/bulkSet.js JavaScript とともに提供されますã?
2319             * IE につã�?�¦は、クリãƒ??ボã?ドも利用できますã?Ctrl-C と Ctrl-V でそれぞれ
2320             * ä¸??のカラãƒ??値の取り出しと書き込みが可能になりますã?
2321             * "*" を指定すると、すべてのカラãƒ?‚’(columnBulkSet)æŒ?®šしたことになりますã?
2322             *
2323             * @og.rev 5.2.1.0 (2010/10/01) 新規作æ?
2324             *
2325             * @param       columnName      例ï¼?OYA,KO,HJO,SU,DYSET,DYUPD"
2326             */
2327            public void setColumnBulkSet( final String columnName ) {
2328                    setBooleanArray( columnName,true,clmBulkSet );
2329            }
2330    }