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.db;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.fukurou.util.Attributes;
020    import org.opengion.fukurou.util.TagBuffer;
021    
022    /**
023     * CellEditor の具象クラスで、カラ????タを編?る?合に使用するクラスです?
024     *
025     *  カラ??表示に?な属?は, DBColumn オブジェク?より取り出します?
026     * こ?クラスは、DBColumn オブジェクト毎に?つ作?されます?
027     *
028     * @og.group ??タ編?
029     *
030     * @version  4.0
031     * @author       Kazuhiko Hasegawa
032     * @since    JDK5.0,
033     */
034    public abstract class AbstractEditor implements CellEditor {
035            private final int COLUMNS_MAXSIZE = HybsSystem.sysInt( "HTML_COLUMNS_MAXSIZE" ) ;       // 表示フィールド?大きさ
036            // 3.5.4.7 (2004/02/06) viewタグで表示する場合?カラ??大きさ
037            private final int VIEW_COLUMNS_MAXSIZE = HybsSystem.sysInt( "HTML_VIEW_COLUMNS_MAXSIZE" ) ;
038    
039            // 3.3.1.1 (2003/07/03) name , attributes 属??final にする?
040            protected  Attributes     attributes ;          // SubClass で誤って new することを防止
041            protected  String                 name           ;
042            protected  String                 size1          ;
043            protected  String                 size2          ;
044            protected  String                 optAttr        ;
045            protected  TagBuffer      tagBuffer = new TagBuffer() ;
046    //      protected  String                 eventColumn; // 4.3.6.0 (2009/04/01)
047    //      protected  String                 eventURL;        // 4.3.6.0 (2009/04/01)
048    //      protected  String                 editor;          // 4.3.6.0 (2009/04/01)
049    
050            /**
051             * ?ォルトコンストラクター?
052             * こ?コンストラクターで、基本オブジェクトを作?します?
053             *
054             * @og.rev 3.1.1.1 (2003/04/03) ?ブジェクトから???インスタンスを返すファクトリメソ?を追??
055             *
056             */
057            public AbstractEditor() {
058                    // ここでは処?行いません?
059            }
060    
061            /**
062             * コンストラクター?
063             *
064             * @og.rev 3.1.1.1 (2003/04/03) ?ブジェクトから???インスタンスを返すファクトリメソ?を追??
065             * @og.rev 3.5.4.2 (2003/12/15) 漢字??IMEモー?をONにするのを?"K" のみとします?
066             * @og.rev 3.5.4.2 (2003/12/15) size ?1 の場合?CSSファイルでサイズ?を行うクラスを?力します?
067             * @og.rev 3.5.4.6 (2004/01/30) 漢字??IMEモー?をONにするのを?"K" と?KX" のみとします?
068             * @og.rev 3.5.5.5 (2004/04/23) maxlength の導?
069             * @og.rev 4.0.0.0 (2005/01/31) getFieldSize メソ??XHTMLTag から DBColumn へ移?
070             * @og.rev 5.1.7.0 (2010/06/01) 動的プル?ン実?直?
071             *
072             * @param       clm     DBColumnオブジェク?
073             */
074            protected AbstractEditor( final DBColumn clm ) {
075                    name                     = clm.getName();
076                    String  disabled = clm.isWritable() ? null : "disabled" ;
077    //              eventColumn = clm.getEventColumn(); // 4.3.6.0 (2009/04/01)
078    //              eventURL        = clm.getEventURL();    // 4.3.6.0 (2009/04/01)
079    //              editor          = clm.getEditor();              // 4.3.6.0 (2009/04/01)
080    
081                    int maxlength = clm.getTotalSize();             // 4.0.0 (2005/01/31) メソ?名変更
082    
083                    attributes = new Attributes();
084                    attributes.set( "type"            ,"text" );
085                    attributes.set( "maxlength"   ,String.valueOf( maxlength ) );
086                    attributes.set( "disabled"        ,disabled );
087    
088                    attributes.addAttributes( clm.getEditorAttributes() );
089    
090                    String clazz = clm.getDbType();
091                    attributes.add( "class" ,clazz );
092                    if( maxlength <= 5 ) {
093                            attributes.add( "class" ,"S0" + maxlength );
094                    }
095    
096                    optAttr = attributes.get( "optionAttributes" );
097    
098                    // 3.5.5.5 (2004/04/23) size の導?、?期?は、?表のサイズにします?
099                    String size = clm.getViewLength();              // 4.0.0 (2005/01/31)
100                    if( size != null ) {
101                            if( size.indexOf(',') >= 0 ) {
102                                    size = size.substring( 0,size.indexOf(',') ) ;
103                            }
104                            size1 = size ;
105                            size2 = size ;
106                    }
107                    else {
108                            // 4.0.0 (2005/01/31) getFieldSize メソ??XHTMLTag から DBColumn へ移?
109                            size1 = String.valueOf(clm.getFieldSize( maxlength,COLUMNS_MAXSIZE )) ;
110                            size2 = String.valueOf(clm.getFieldSize( maxlength,VIEW_COLUMNS_MAXSIZE )) ;
111                    }
112            }
113    
114            /**
115             * ??タの編???を返します?
116             *
117             * @og.rev 3.5.5.5 (2004/04/23) viewSize の導?
118             * @og.rev 4.3.7.2 (2009/06/15) 属?でidが?力される場合?、idを?力しな?
119             * @og.rev 5.1.7.0 (2010/06/01) 動的プル?ン実?直?
120             *
121             * @param       value 値
122             *
123             * @return      ??タの編???
124             */
125            public String getValue( final String value ) {
126    
127                    TagBuffer tag = new TagBuffer( "input" );
128                    tag.add( "name"    , name );
129                    if( attributes.get( "id" ) == null || attributes.get( "id" ).length() == 0 ) { // 4.3.7.2 (2009/06/15)
130                            tag.add( "id"      , name ); // 4.3.6.0 (2009/04/01)
131                    }
132                    tag.add( "value"   , value );
133                    tag.add( "size"    , size1 );
134                    tag.add( tagBuffer.makeTag() );
135                    tag.add( optAttr );             // 3.5.5.8 (2004/05/20)
136    
137                    return tag.makeTag();
138    //              return tag.makeTag() + createEventColumnJS( name, editor, -1, eventURL ); // 4.3.6.0 (2009/04/01)
139            }
140    
141            /**
142             * name属?を変えた???タ表示/編?のHTML??を作?します?
143             * ??ブル上? name に 行番号を付加して、名前_行番号 で登録するキーを作??
144             * リクエスト情報を1つ毎?フィールドで処?きます?
145             *
146             * @og.rev 2.0.0.3 (2002/09/26) optionAttributes 属?に "$i" を使?そ?行数に置き換る機?を追??
147             * @og.rev 3.1.0.0 (2003/03/20) 名前と行番号の区?記号?"^" から "__" に変更?
148             * @og.rev 3.5.4.2 (2003/12/15) getFieldSize を?XHTMLTag.getFieldSize に変更?
149             * @og.rev 3.5.4.7 (2004/02/06) viewタグで表示する場合?カラ??大きさ VIEW_COLUMNS_MAXSIZE 追?
150             * @og.rev 3.5.5.0 (2004/03/12) 名前と行番号の区?記号("__")を?HybsSystem.JOINT_STRING  に変更?
151             * @og.rev 3.5.5.5 (2004/04/23) viewSize の導?、?期?は、?表にあわせました?
152             * @og.rev 3.5.5.5 (2004/04/23) 新規に Attributes オブジェクトを作?する方式を止めます?
153             * @og.rev 4.3.7.2 (2009/06/15) 属?でidが?力される場合?、idを?力しな?
154             * @og.rev 5.1.7.0 (2010/06/01) 動的プル?ン実?直?
155             *
156             * @param       row   行番号
157             * @param       value 値
158             *
159             * @return      ??タ表示/編?の??
160             */
161            public String getValue( final int row,final String value ) {
162                    TagBuffer tag = new TagBuffer( "input" );
163                    String newName = name + HybsSystem.JOINT_STRING + row;
164                    // tag.add( "name"    , name + HybsSystem.JOINT_STRING + row );
165                    tag.add( "name"  , newName ); // 4.3.6.0 (2009/04/01)
166                    if( attributes.get( "id" ) == null || attributes.get( "id" ).length() == 0 ) { // 4.3.7.2 (2009/06/15)
167                            tag.add( "id"    , newName ); // 4.3.6.0 (2009/04/01)
168                    }
169                    tag.add( "value"   , value );
170                    tag.add( "size"    , size2 );
171                    tag.add( tagBuffer.makeTag() );
172                    tag.add( optAttr );             // 3.5.5.8 (2004/05/20)
173    
174                    return tag.makeTag( row,value );
175    //              return tag.makeTag( row,value ) + createEventColumnJS( name, editor, row, eventURL );
176            }
177    
178    //      /**
179    //       * EventColumnをセ?した場合に出力するJavaScriptを作ります?
180    //       * 吐かれるJavaScriptは
181    //       * eventColumnに対してchangeイベント発生時にmakeColumnを呼びます?
182    //       * なおかつ?度changeイベントを発生させます?
183    //       * 以下?ようなJavaScriptとなります?
184    //       * $(function(){$('#EMPNO').change(function(){makeColumn(...);}).change();});
185    //       *
186    //       * rowに??値を?れると__iを?力しません?
187    //       *
188    //       * @og.rev 4.3.6.0 (2009/04/01)
189    //       *
190    //       * @param clmName
191    //       * @param clmEditor
192    //       * @param row
193    //       * @param URL
194    //       */
195    //      protected String createEventColumnJS( final String clmName, final String clmEditor, final int row, final String URL ){
196    //              if( eventColumn != null && eventColumn.length() > 0 ){
197    //                      StringBuilder rtn = new StringBuilder();
198    //                      String[] evntCols = StringUtil.csv2Array( eventColumn );
199    //                      for( int i=0; i<evntCols.length; i++ ){
200    //                              rtn.append( "<script type=\"text/javascript\">" )
201    //                                      .append( "$(function(){$('#" )
202    //                                      .append( evntCols[i] );
203    //                              if( row >= 0 ){
204    //                                      rtn.append( HybsSystem.JOINT_STRING ).append( row );
205    //                              }
206    //
207    //                              rtn.append( "').change(function(){" )
208    //                                      .append( "makeColumn('" )
209    //                                      .append( clmName );
210    //                              if( row >= 0 ){
211    //                                      rtn.append( HybsSystem.JOINT_STRING ).append( row );
212    //                              }
213    //                              rtn.append( "','" )
214    //                                      .append( clmName ).append( "',EC_" )
215    //                                      .append( clmName )
216    //                                      .append( ",'" )
217    //                                      .append( clmEditor ).append( "','" )
218    //                                      .append( URL ).append( "');}).change();});" )
219    //                                      .append( "</script>" );
220    //                      }
221    //                      return rtn.toString();
222    //              }
223    //              return "";
224    //      }
225    }