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    }