OSDN Git Service

Ver8.5.2.0
[opengion/opengionV8.git] / uap / webapps / gf / src / org / opengion / plugin / column / Editor_CHBOX.java
1 /*
2  * Copyright (c) 2009 The openGion Project.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13  * either express or implied. See the License for the specific language
14  * governing permissions and limitations under the License.
15  */
16 package org.opengion.plugin.column;
17
18 import org.opengion.hayabusa.db.AbstractEditor;
19 import org.opengion.hayabusa.db.CellEditor;
20 import org.opengion.hayabusa.db.DBColumn;
21 import org.opengion.hayabusa.common.HybsSystem;
22 import org.opengion.hayabusa.resource.CodeData;                                                 // 7.4.2.0 (2021/04/30)
23 // import org.opengion.fukurou.system.OgBuilder;                                                // 7.4.2.0 (2021/04/30) // 8.0.0.0 (2021/07/31) Delete
24 import org.opengion.fukurou.util.XHTMLTag;
25 import org.opengion.fukurou.util.TagBuffer;
26
27 import static org.opengion.fukurou.util.StringUtil.isNull;                              // 6.3.3.0 (2015/07/25)
28
29 /**
30  * カラムのデータをチェックボックスで編集する場合に使用するエディタークラスです。
31  *
32  * 値としては、"0" と、"1" のみ 有効です。("0" がOFF状態で、"1"がON状態です。)
33  * チェックボックスは、通常チェックが入らないと何も送信されません。"0"から"1"への
34  * 状態変化は、チェックされるためリクエスト値が送信されますが、"1"から"0"の場合は、
35  * 送信されない為、データのクリアを取得することが出来ません。
36  * このクラスでは、状態にかかわらず、hidden で、"0" を送信しています。受信側では、
37  * 常に"0"がくる為、何もチェックされない場合は、"0"が設定されたことになります。
38  * "1"が設定されると、"0"と"1"が両方(同じキーで)取得されます。その場合は、"1"を
39  * 見つけることで、"1"をセットされたことが判ります。
40  *
41  * 編集パラメータに"SEQ"と記述することで正方向にしか選べないシークチェックボックスを実現できます。
42  * これにより、シーケンスにステータスを順に挙げていくような、チェックボックス
43  * を作成することが出来ます。(逆に戻れないメニュー)
44  *
45  * このエディタはeventColumnに対応していません。
46  *
47  * カラムの表示に必要な属性は、DBColumn オブジェクト より取り出します。
48  * このクラスは、DBColumn オブジェクト毎に1つ作成されます。
49  *
50  * 7.4.2.0 (2021/04/30)
51  *   コードリソースの値を利用して、ラベルを付けることができるようにします。
52  *   (値は、0,1 のみで、ラベルが付くのは、1 のみです。)
53  *   ラベル表示が必要な場合は、編集パラメータに、"useLabel"と
54  *   記述しておくことで、ラベルを出力することが可能です。
55  *
56  * @og.rev 3.5.3.1 (2003/10/31) 新規作成
57  * @og.group データ編集
58  *
59  * @version  4.0
60  * @author   Kazuhiko Hasegawa
61  * @since    JDK5.0,
62  */
63 public class Editor_CHBOX extends AbstractEditor {
64         /** このプログラムのVERSION文字列を設定します。       {@value} */
65         private static final String VERSION = "7.4.2.0 (2021/04/30)" ;
66
67         private final boolean seqFlag ;                 // 3.6.0.6 (2004/10/22)
68         private final String  HIDDEN0 ;                 // 3.6.0.6 (2004/10/22) , 6.1.1.0 (2015/01/17) 大文字に変更
69         private final String  HIDDEN1 ;                 // 3.6.0.6 (2004/10/22) , 6.1.1.0 (2015/01/17) 大文字に変更
70         private final boolean useLabel;                 // 7.4.2.0 (2021/04/30)
71         private final String  labelTag;                 // 7.4.2.0 (2021/04/30)
72         private final String  shortlbl;                 // 7.4.2.0 (2021/04/30)
73
74         /**
75          * デフォルトコンストラクター。
76          * このコンストラクターで、基本オブジェクトを作成します。
77          *
78          * @og.rev 3.6.0.6 (2004/10/22) シーケンスアクセス機能(seqFlag)を追加します
79          * @og.rev 3.6.0.6 (2004/10/22) 値が"1"の場合は、hiddenで "0" を出すことでクリアに対応
80          * @og.rev 7.4.2.0 (2021/04/30) 編集パラメータに、"useLabel"と記述しておくことで、ラベルを出力することが可能
81          */
82         public Editor_CHBOX() {
83                 super();                // 6.4.1.1 (2016/01/16) PMD refactoring. It is a good practice to call super() in a constructor
84                 // 4.3.4.4 (2009/01/01)
85                 seqFlag         = false;        // 3.6.0.6 (2004/10/22)
86                 HIDDEN0         = "";
87                 HIDDEN1         = "";
88                 useLabel        = false;        // 7.4.2.0 (2021/04/30)
89                 labelTag        = "";           // 7.4.2.0 (2021/04/30)
90                 shortlbl        = "";           // 7.4.2.0 (2021/04/30)
91         }
92
93         /**
94          * DBColumnオブジェクトを指定したprivateコンストラクター。
95          *
96          * @og.rev 3.5.6.0 (2004/06/18) XHTMLTag の 内部配列 INPUT_KEY を隠蔽します。
97          * @og.rev 3.6.0.6 (2004/10/22) シーケンスアクセス機能(seqFlag)を追加します
98          * @og.rev 3.6.0.6 (2004/10/22) 値が"1"の場合は、hiddenで "0" を出すことでクリアに対応
99          * @og.rev 6.3.3.0 (2015/07/25) maxlength は不要なので削除
100          * @og.rev 7.4.2.0 (2021/04/30) 編集パラメータに、"useLabel"と記述しておくことで、ラベルを出力することが可能
101          *
102          * @param       clm     DBColumnオブジェクト
103          */
104         private Editor_CHBOX( final DBColumn clm ) {
105                 super( clm );
106                 seqFlag    = "SEQ".equals( clm.getEditorParam() );      // 3.6.0.6 (2004/10/22)
107                 final String  readonly = clm.isWritable() ? null : "readonly" ;
108
109                 attributes.set( "type"          , "checkbox"    );
110                 attributes.set( "readonly"      ,  readonly             );
111                 attributes.set( "NO_MAXLEN"     , "true"                );                      // 6.3.3.0 (2015/07/25) maxlength は不要なので削除
112
113                 tagBuffer.add( XHTMLTag.inputAttri( attributes ) );
114
115                 HIDDEN0 = "<input type=\"hidden\" value=\"0\" name=\"" + name ;         // 3.6.0.6 (2004/10/22)
116                 HIDDEN1 = "<input type=\"hidden\" value=\"1\" name=\"" + name ;         // 3.6.0.6 (2004/10/22)
117
118                 // 7.4.2.0 (2021/04/30) 編集パラメータに、"useLabel"と記述しておくことで、ラベルを出力することが可能
119                 // 本来は、CHBOX2では、Selection を使いますが、CHBOXは、1 の時のラベルのみ使うので、直接CodeDataから取り出します。
120                 useLabel = "useLabel".equalsIgnoreCase( clm.getEditorParam() );
121                 if( useLabel ) {
122                         final StringBuilder buf = new StringBuilder().append( "<label" );
123
124                         final String cls = attributes.get( "class" );
125                         if( cls != null && !cls.isEmpty() ) {
126                                 buf.append( " class=\"" ).append( cls ).append( '"' );
127                         }
128                         labelTag = buf.append( '>' ).toString();
129
130                         final CodeData cdData = clm.getCodeData();
131                         if( cdData != null ) {
132                                 shortlbl = cdData.getShortLabel(0);             // 無条件に最初のコードリソースのラベルを使用します。
133                         }
134                         else {
135                                 shortlbl = "";
136                         }
137                 }
138                 else {
139                         labelTag = "";
140                         shortlbl = "";
141                 }
142         }
143
144         /**
145          * 各オブジェクトから自分のインスタンスを返します。
146          * 自分自身をキャッシュするのか、新たに作成するのかは、各サブクラスの実装に
147          * まかされます。
148          *
149          * @param       clm     DBColumnオブジェクト
150          *
151          * @return      CellEditorオブジェクト
152          * @og.rtnNotNull
153          */
154         public CellEditor newInstance( final DBColumn clm ) {
155                 return new Editor_CHBOX( clm );
156         }
157
158         /**
159          * データの編集用文字列を返します。
160          *
161          * @og.rev 3.5.5.5 (2004/04/23) 新規に Attributes オブジェクトを作成する方式を止めます。
162          * @og.rev 3.6.0.6 (2004/10/22) シーケンスアクセス機能(seqFlag)を追加します
163          * @og.rev 3.6.0.6 (2004/10/22) 値が"1"の場合は、hiddenで "0" を出すことでクリアに対応
164          * @og.rev 3.8.0.1 (2005/06/17) 値にかかわらず、hiddenで "0" を出すことでクリアに対応
165          * @og.rev 6.3.3.0 (2015/07/25) CHBOX に、id属性を出力します。
166          * @og.rev 7.0.1.0 (2018/10/15) XHTML → HTML5 対応(空要素の、"/>" 止めを、">" に変更します)。
167          * @og.rev 7.4.2.0 (2021/04/30) 編集パラメータに、"useLabel"と記述しておくことで、ラベルを出力することが可能
168          *
169          * @param       value 入力値
170          *
171          * @return      データの編集用文字列
172          * @og.rtnNotNull
173          */
174         @Override
175         public String getValue( final String value ) {
176                 // 6.1.1.0 (2015/01/17) TagBufferの連結記述
177                 // 7.4.2.0 (2021/04/30)
178 //              return new TagBuffer( "input" )
179                 final String chbox = new TagBuffer( "input" )
180                                         .add( "name"            , name )
181                                         .add( "id"                      , name , isNull( attributes.get( "id" ) ) )             // 6.3.3.0 (2015/07/25)
182                                         .add( "value"           , "1" )
183                                         .add( tagBuffer.makeTag() )
184                                         .add( "checked"         , "checked"             , "1".equals( value ) )
185                                         .add( "disabled"        , "disabled"    , "1".equals( value ) && seqFlag )
186                                         .makeTag()
187                                 // 3.6.0.6 (2004/10/22) seqFlag=trueで、値が"1"の場合、
188                                 // disabled では値が飛ばないので、hidden で "1" を出力する。
189                                 + ( "1".equals( value ) && seqFlag ? HIDDEN1 : HIDDEN0 )
190 //                              + "\" />" ;
191                                 + "\" >" ;                      // 7.0.1.0 (2018/10/15)
192
193                 // 7.4.2.0 (2021/04/30)
194                 return useLabel ? new StringBuilder( BUFFER_MIDDLE )
195                                                                 .append( labelTag )
196                                                                 .append( chbox )
197                                                                 .append( shortlbl )
198                                                                 .append( "</label>" )
199                                                                 .toString()
200                                                 : chbox ;
201         }
202
203         /**
204          * name属性を変えた、データ表示/編集用のHTML文字列を作成します。
205          * テーブル上の name に 行番号を付加して、名前_行番号 で登録するキーを作成し、
206          * リクエスト情報を1つ毎のフィールドで処理できます。
207          *
208          * @og.rev 3.5.5.0 (2004/03/12) 名前と行番号の区切り記号("__")を、HybsSystem.JOINT_STRING  に変更。
209          * @og.rev 3.5.5.5 (2004/04/23) 新規に Attributes オブジェクトを作成する方式を止めます。
210          * @og.rev 3.6.0.6 (2004/10/22) シーケンスアクセス機能(seqFlag)を追加します
211          * @og.rev 3.6.0.6 (2004/10/22) 値が"1"の場合は、hiddenで "0" を出すことでクリアに対応
212          * @og.rev 3.8.0.1 (2005/06/17) 値にかかわらず、hiddenで "0" を出すことでクリアに対応
213          * @og.rev 6.3.3.0 (2015/07/25) CHBOX に、id属性を出力します。
214          * @og.rev 7.0.1.0 (2018/10/15) XHTML → HTML5 対応(空要素の、"/>" 止めを、">" に変更します)。
215          * @og.rev 7.4.2.0 (2021/04/30) 編集パラメータに、"useLabel"と記述しておくことで、ラベルを出力することが可能
216          *
217          * @param   row   行番号
218          * @param   value 値
219          *
220          * @return  データ表示/編集用の文字列
221          * @og.rtnNotNull
222          */
223         @Override
224         public String getValue( final int row,final String value ) {
225                 final String newName = name + HybsSystem.JOINT_STRING + row;                                            // 6.3.3.0 (2015/07/25)
226
227                 // 6.1.1.0 (2015/01/17) TagBufferの連結記述
228                 // 7.4.2.0 (2021/04/30)
229 //              return new TagBuffer( "input" )
230                 final String chbox = new TagBuffer( "input" )
231                                         .add( "name"            , newName )
232                                         .add( "id"                      , newName , isNull( attributes.get( "id" ) ) )          // 6.3.3.0 (2015/07/25)
233                                         .add( "value"           , "1" )
234                                         .add( tagBuffer.makeTag() )
235                                         .add( "checked"         , "checked"             , "1".equals( value ) )
236                                         .add( "disabled"        , "disabled"    , "1".equals( value ) && seqFlag )
237                                         .makeTag( row,value )
238                                 // 3.6.0.6 (2004/10/22) seqFlag=trueで、値が"1"の場合、
239                                 // disabled では値が飛ばないので、hidden で "1" を出力する。
240                                 + ( "1".equals( value ) && seqFlag ? HIDDEN1 : HIDDEN0 )
241 //                              + HybsSystem.JOINT_STRING + row + "\" />" ;
242                                 + HybsSystem.JOINT_STRING + row + "\" >" ;              // 7.0.1.0 (2018/10/15)
243
244                 // 7.4.2.0 (2021/04/30)
245                 return useLabel ? new StringBuilder( BUFFER_MIDDLE )
246                                                                 .append( labelTag )
247                                                                 .append( chbox )
248                                                                 .append( shortlbl )
249                                                                 .append( "</label>" )
250                                                                 .toString()
251                                                 : chbox ;
252         }
253 }