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.plugin.column;
017
018 import org.opengion.fukurou.util.Attributes;
019 import org.opengion.fukurou.util.XHTMLTag;
020
021 import org.opengion.hayabusa.common.HybsSystem;
022 import org.opengion.hayabusa.common.HybsSystemException;
023
024 import org.opengion.hayabusa.db.AbstractEditor;
025 import org.opengion.hayabusa.db.CellEditor;
026 import org.opengion.hayabusa.db.DBColumn;
027 import org.opengion.hayabusa.db.DBColumnConfig;
028 import org.opengion.hayabusa.resource.ResourceFactory;
029 import org.opengion.hayabusa.resource.ResourceManager;
030 import org.opengion.hayabusa.resource.LabelData;
031
032 import java.util.Locale ;
033
034 /**
035 * 動的カラãƒ??Entryカラãƒ?‚’編é›?�™るå?合に使用するエãƒ?‚£タークラスですã?
036 *
037 * Editor_ENTCLM は、Editor_EntryColumn の略で、Editor_COLUMN.java ã‚?
038 * 強化した形で作æ?しますã?
039 * これは、引数の値をキーに、DBColumn を動çš?�«作æ?する機è?になりますã?
040 *
041 * Editor_COLUMN との違いは、こちらã?、行ではなくã?Entry形式ã?カラãƒ?‚’
042 * 作æ?するところですã?つまりã?行番号はã€?–¢係ありませんã€?
043 * 通常は、カラãƒ?��__行番号 をキーとするãƒ?‚ストフィールドなどã‚?
044 * 出力しますが、Editor_ENTCLM は、名前そのもã?をキーとする
045 * ãƒ?‚ストフィールドなどをå?力しますã?
046 * あと、カラãƒ?¼•数(:で区åˆ?‚‰れた値)が使えますã?
047 * 通常は、å?(Value)に、カラãƒ?��のみをセãƒ?ƒˆしますが、コロン(:)でã€?
048 * 区åˆ?�£てパラメータを渡せますã?
049 *
050 * カラãƒ?��:値:must:Length:Label:Editor:DBType:EditParam のé ?•ªですã?
051 *
052 * コロンの数ã�?�‘åˆ?›¢しますが、数は少なくても良ã�?�Œ並びé ??、å¿??ですã?
053 *
054 * 通常、このままでは、リソースに存在することが前提ですがã€?
055 * 編é›?ƒ‘ラメータに、SAVE=TRUE とã�?�†キーワードをセãƒ?ƒˆするとã€?
056 * 個ã?に作æ?した値をå?に、ResourceManager に、動çš?�«作æ?した
057 * LabelData を追åŠ?�™る機è?を持たせますã?
058 * こã?、LabelData はã€??常のLabelDataLoaderのプã?ルではなくã?
059 * ResourceManagerで、å?別に管ç�?�•れるため、特殊な方法を使わなã�?�¨
060 * 値を取りå?すことはできませんã€?
061 * こã?キャãƒ?‚·ュされたラベルを用ã�?‚‹ことで、columnCheckのエラーメãƒ?‚»ージ
062 * のラベルを動çš?�«書き換えたラベルで表示することができますã?
063 *
064 * さらに、編é›?ƒ‘ラメータに、QUERY=・・・・ とã�?�†キーワードを
065 * セãƒ?ƒˆすると、そのSQLåˆ?‚’実行して、コードリソースを作æ?しますã?
066 * こちらã?、SAVE=TRUE の場合ã?み実行されã?コードリソースのキャãƒ?‚·ュに
067 * セãƒ?ƒˆされますã?
068 *
069 * こã?エãƒ?‚£タはeventColumnに対応してã�?�¾せんã€?
070 *
071 * カラãƒ??表示にå¿?¦�な属æ?は, DBColumn オブジェクãƒ?より取り出しますã?
072 * こã?クラスは、DBColumn オブジェクト毎に?‘つ作æ?されますã?
073 * @og.group ãƒ??タ編é›?
074 *
075 * @og.rev 5.4.2.2 (2011/12/14) 新規追åŠ??
076 *
077 * @version 4.0
078 * @author Kazuhiko Hasegawa
079 * @since JDK5.0,
080 */
081 public class Editor_ENTCLM extends AbstractEditor {
082 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
083 private static final String VERSION = "5.4.3.4 (2012/01/12)" ;
084
085 private final String lang ;
086 private final boolean isSave ;
087 private final String codeQuery ;
088 private final boolean addNoValue ; // 5.4.2.3 (2011/12/22)
089
090 /**
091 * ãƒ?ƒ•ォルトコンストラクターã€?
092 * こã?コンストラクターで、基本オブジェクトを作æ?しますã?
093 *
094 * @og.rev 5.4.2.3 (2011/12/22) addNoValue 属æ?を追åŠ?�—ますã?
095 */
096 public Editor_ENTCLM() {
097 // super();
098 lang = null;
099 isSave = false;
100 codeQuery = null;
101 addNoValue = false; // 5.4.2.3 (2011/12/22)
102 }
103
104 /**
105 * ãƒ?ƒ•ォルトコンストラクターã€?
106 *
107 * @og.rev 5.4.2.3 (2011/12/22) addNoValue 属æ?を追åŠ?�—ますã?
108 *
109 * @param clm DBColumnオブジェクãƒ?
110 */
111 private Editor_ENTCLM( final DBColumn clm ) {
112 // super( clm );
113 name = clm.getName(); // ここでã�?�†名前は、オリジナルなので、動çš?�«作æ?するときには使用しなã�??
114 lang = clm.getLang();
115 addNoValue = clm.isAddNoValue() ; // 5.4.2.3 (2011/12/22)
116
117 String orgParam = clm.getEditorParam();
118 if( orgParam != null ) {
119 String upParam = orgParam.toUpperCase(Locale.JAPAN);
120 // 編é›?ƒ‘ラメータに、SAVE=TRUE とã�?�†キーワードがあるかどã�?�‹のチェãƒ?‚¯
121 isSave = ( upParam.indexOf( "SAVE=TRUE" ) >= 0 );
122
123 // QUERY= のキーワードがあれば、コードリソースの検索用SQLとなるã?(パラメータの残りすべて)
124 int adrs = upParam.indexOf( "QUERY=" );
125 codeQuery = ( adrs >= 0 ) ? orgParam.substring( adrs+6,orgParam.length() ) : null;
126 }
127 else {
128 isSave = false;
129 codeQuery = null;
130 }
131 }
132
133 /**
134 * å�?‚ªブジェクトからè?åˆ??インスタンスを返しますã?
135 * 自åˆ??身をキャãƒ?‚·ュするのかã?新たに作æ?するのかã?、各サブクラスの実è£?�«
136 * まかされますã?
137 *
138 * @param clm DBColumnオブジェクãƒ?
139 *
140 * @return CellEditorオブジェクãƒ?
141 */
142 public CellEditor newInstance( final DBColumn clm ) {
143 return new Editor_ENTCLM( clm );
144 }
145
146 /**
147 * ãƒ??タの編é›?”¨æ–?—å?を返しますã?
148 *
149 * 通常は、å?(Value)に、カラãƒ?��のみをセãƒ?ƒˆしますが、コロン(:)でã€?
150 * 区åˆ?�£てパラメータを渡せますã?
151 *
152 * カラãƒ?��:値:must:Length:Label:Editor:DBType:EditParam のé ?•ªですã?
153 *
154 * コロンの数ã�?�‘åˆ?›¢しますが、数は少なくても良ã�?�Œ並びé ??、å¿??ですã?
155 *
156 * @og.rev 5.4.2.3 (2011/12/22) addNoValue 属æ?を追åŠ?�—ますã?
157 * @og.rev 5.4.3.4 (2012/01/12) official フラグをセãƒ?ƒˆしますã?パラメータにラベル追åŠ?
158 *
159 * @param value 入力å?
160 *
161 * @return ãƒ??タの表示用æ–?—å?
162 */
163 @Override
164 public String getValue( final String value ) {
165 // 先é?æ–?—が コロン(:)の場合ã?、カラãƒ?��が省略されてã�?‚‹ので、エラー
166 if( value == null || value.isEmpty() || value.charAt(0) == ':' ) {
167 String errMsg = "æŒ?®šã?カラãƒ??値が設定されてã�?�¾せんã€?
168 + HybsSystem.CR
169 + " name=[" + name + "]"
170 + " value=[" + value + "]";
171 throw new HybsSystemException( errMsg );
172 }
173
174 ResourceManager resource = ResourceFactory.newInstance( lang ) ;
175 String[] vals = value.split( ":" , 8 ); // ?˜å?割しますã?
176
177 String key = vals[0]; // 配å??�ã?、カラãƒ?��
178 String val = (vals.length >= 2) ? vals[1] : null; // 配å??‘ã?、å?
179 String must = (vals.length >= 3) ? vals[2] : null; // 配å??’ã?、must
180 String len = (vals.length >= 4) ? vals[3] : null; // 配å??“ã?、Length
181 String lbl = (vals.length >= 5) ? vals[4] : null; // 配å??”ã?、Label
182 String edit = (vals.length >= 6) ? vals[5] : null; // 配å??•ã?、Editor
183 String dbtype = (vals.length >= 7) ? vals[6] : null; // 配å??–ã?、DBType
184 String edPrm = (vals.length >= 8) ? vals[7] : null; // 配å??—ã?、EditParam
185
186 boolean isMust = "1".equalsIgnoreCase( must ) || "true".equalsIgnoreCase( must ) ; // mustが設定されてã�?‚‹かどã�?�‹
187 // キーに対応するDBColumnがなければ、null が返されるã€?
188 DBColumn dbColumn = resource.getDBColumn( key );
189
190 // DBColumnConfig で値のセãƒ?ƒˆ
191 DBColumnConfig config = (dbColumn != null) ? dbColumn.getConfig() : new DBColumnConfig( key );
192
193 // 5.4.3.4 (2012/01/12) official フラグをセãƒ?ƒˆしますã?
194 config.setOfficial( true );
195
196 // 5.4.2.3 (2011/12/22) addNoValue 属æ?を追åŠ?
197 config.setAddNoValue( addNoValue );
198
199 String mstChStr = "";
200 if( isMust ) { // 配å??’ã?、must
201 Attributes editAttri = config.getEditorAttributes();
202 if( editAttri == null ) { editAttri = new Attributes(); }
203 editAttri.add( "class","must" );
204 config.setEditorAttributes( editAttri );
205
206 // must æŒ?®šã?場合に、チェãƒ?‚¯用のhidden を作æ?しますã?
207 mstChStr = XHTMLTag.hidden( HybsSystem.MUST_KEY + "must", key );
208 }
209 if( len != null && !len.isEmpty() ) { // 配å??“ã?、Length
210 config.setMaxlength( len );
211 }
212 // 5.4.3.4 (2012/01/12) パラメータにラベル追åŠ?
213 if( lbl != null && !lbl.isEmpty() ) { // 配å??”ã?、Label
214 LabelData labelData = resource.getLabelData( lbl ) ;
215 config.setLabelData( labelData );
216 // if( isSave ) { // isSave ã�?true で、セーブするã?
217 //// resource.setLabelData( key,labelData );
218 // resource.setLabel( key,lbl );
219 // }
220 }
221 if( edit != null && !edit.isEmpty() ) { // 配å??•ã?、Editor
222 config.setEditor( edit );
223 }
224 if( dbtype != null && !dbtype.isEmpty() ) { // 配å??–ã?、DBType
225 config.setDbType( dbtype );
226 }
227 if( edPrm != null && !edPrm.isEmpty() ) { // 配å??—ã?、EditParam
228 config.setEditorParam( edPrm );
229 }
230
231 // 動的なコードリソースの作æ?
232 if( codeQuery != null && isSave ) {
233 config.setCodeData( resource.getCodeData( key,codeQuery ) );
234 }
235
236 dbColumn = new DBColumn( config );
237 if( isSave ) { // isSave ã�?true で、セーブするã?
238 resource.setDBColumn( key,dbColumn );
239 }
240
241 // val と must は、キャãƒ?‚·ュされã�?DBColumn と別に、毎回異なるケースを想定しますã?
242 return dbColumn.getEditorValue( val ) + mstChStr;
243 }
244
245 /**
246 * こã?クラスでは、Entry形式ã?編é›?”¨のæ–?—å?を作æ?しますã?
247 * よって、行番号を付加しませんã€?
248 *
249 * @param row 行番号
250 * @param value 入力å?
251 *
252 * @return ãƒ??タ表示/編é›?”¨のæ–?—å?
253 */
254 @Override
255 public String getValue( final int row,final String value ) {
256 return getValue( value );
257 }
258 }