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.taglib;
017
018 import static org.opengion.fukurou.util.StringUtil.nval;
019
020 import java.io.IOException;
021 import java.io.ObjectInputStream;
022 import java.io.ObjectOutputStream;
023
024 import org.opengion.fukurou.util.StringUtil;
025 import org.opengion.hayabusa.common.HybsSystem;
026 import org.opengion.hayabusa.db.DBTableModel;
027 import org.opengion.hayabusa.db.DBTableModelUtil;
028 import org.opengion.hayabusa.report2.QueueManager_DIRECT;
029
030 /**
031 * 検索結果の DBTableModelオブジェクトをレポã?ト形式に変換するタグですã?
032 *
033 * ãƒ??タ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えてã€?
034 * 外部からコントロールすることで、各種形式で ãƒ??タ(DBTableModel)を表示させることã�?
035 * 可能ですã?
036 * こã?タグを使用するには、OpenOffice.orgのモジュールがインストã?ルされててã�?‚‹å¿?¦�がありますã?
037 * またã?出力するために帳票シスãƒ?ƒ 関連のãƒ??タ設定やマスタ設定ã?ä¸??å¿?¦�ありませんã€?
038 *
039 * @og.formSample
040 * ●形式ï¼?lt;og:report fileURL="[?¥?¥?¥]" listId="[?¥?¥?¥]" ?¥?¥?¥ />
041 * ●body?šなã�?
042 *
043 * ●Tag定義??
044 * <og:report2
045 * fileURL 【TAG】雛型ã?HTMLファイルの保存してある ãƒ?‚£レクトリを指定しまã�?
046 * listId ○ã?TAG】帳票IDを指定しまã�?å¿??)ã€?
047 * outFileURL 【TAG】å?力HTMLファイルの保存してあるãƒ?‚£レクトリを指定しまã�?
048 * outFilename ○ã?TAG】ファイルを作æ?するときã?出力ファイル名をセãƒ?ƒˆしまã�?å¿??)ã€?
049 * headerKeys 【TAG】固定部の{@KEY} の KEY 部åˆ?‚’CSV形式でè¤?•°æŒ?®šしまã�?
050 * headerVals 【TAG】固定部のKEY に対応するå?をCSV形式でè¤?•°æŒ?®šしまã�?
051 * footerKeys 【TAG】繰り返し部の終äº?¾Œに表示する key 部åˆ?‚’CSV形式でè¤?•°æŒ?®šしまã�?
052 * footerVals 【TAG】固定部のKEY に対応するå?をCSV形式でè¤?•°æŒ?®šしまã�?
053 * pageEndCut 【TAG】ã?ãƒ?‚£ー部(繰り返し部)がなくなったときに、それ以降を表示するかどã�?�‹[true/false]を指定しまã�?初期値:true)
054 * useLocalResource 【TAG】各シスãƒ?ƒ のリソース(ローカルリソース)を使用するか[true/false]を指定しまã�?初期値:true)
055 * fgrun 【TAG】å?力方法をæŒ?®šしまã�?初期値:P(PDF出åŠ?)
056 * printerName 【TAG】ã?リンター名をæŒ?®šしまã�?
057 * language 【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
058 * scope 【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
059 * tableId 【TAGã€?通常使ã�?�¾せん)sessionからæ‰?¾—すã‚?DBTableModelオブジェクトã? ID
060 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
061 * />
062 *
063 * ●使用ä¾?
064 *
065 * @og.group そã?他å?åŠ?
066 *
067 * @version 4.0
068 * @author Hiroki Nakamura
069 * @since JDK5.0,
070 */
071 public class ReportTableTag2 extends CommonTagSupport {
072 private static final String VERSION = "4.3.3.4 (2008/11/01)" ;
073
074 private static final long serialVersionUID = 433420081101L ;
075
076 private final String BASE_URL = HybsSystem.sys( "FILE_URL" );
077
078 private String fileURL = BASE_URL; // 雛形ファイルURL
079 private String listId = null; // 帳票ID
080 private String outFileURL = BASE_URL; // 出力ファイルURL
081 private String outFilename = null; // 出力ファイルå�?
082 private String[] headerKeys = null; // 固定部の{@KEY} の KEY 部åˆ?‚’æŒ?®šするã?カンマでè¤?•°æŒ?®šできるã€?
083 private String[] headerVals = null; // 固定部のKEY に対応するå?を指定するã? {@KEY} に置き換わるã€?
084 private String[] footerKeys = null; // 繰り返し部の終äº?¾Œに表示する key 部åˆ?‚’æŒ?®šするã?カンマでè¤?•°æŒ?®šできるã€?
085 private String[] footerVals = null; // 繰り返し部の終äº?¾Œに表示する key に対する値を指定するã?
086 private boolean pageEndCut = true; // ペã?ジエンドカãƒ?ƒˆをするか
087
088 private boolean useLocalResource= true; // ローカルリソースを使用するã�?
089 private String fgrun = "P"; // PDF出åŠ?
090 private String printerName = null; // プリンタå�?
091
092 private String tableId = HybsSystem.TBL_MDL_KEY ;
093
094 private transient DBTableModel body = null;
095 private transient DBTableModel header = null;
096 private transient DBTableModel footer = null;
097
098 /**
099 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
100 *
101 * @return 後続å?ç�??æŒ?¤º
102 */
103 @Override
104 public int doEndTag() {
105 debugPrint();
106
107 final int rtnCode;
108
109 body = (DBTableModel)getObject( tableId );
110 if( body == null || body.getRowCount() == 0 ) {
111 rtnCode = SKIP_PAGE ; // ペã?ジの残りの処ç�?‚’行わなã�??
112 }
113 else {
114 exec();
115 rtnCode = EVAL_PAGE ;
116 }
117
118 return( rtnCode );
119 }
120
121 /**
122 * タグリブオブジェクトをリリースしますã?
123 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
124 */
125 @Override
126 protected void release2() {
127 super.release2();
128 fileURL = BASE_URL;
129 listId = null;
130 outFileURL = BASE_URL;
131 outFilename = null;
132 headerKeys = null;
133 headerVals = null;
134 footerKeys = null;
135 footerVals = null;
136 pageEndCut = true;
137 useLocalResource= true;
138 fgrun = "P";
139 printerName = null;
140 tableId = HybsSystem.TBL_MDL_KEY ;
141 body = null;
142 header = null;
143 footer = null;
144 }
145
146 /**
147 * 帳票処ç�?‚’行いますã?
148 *
149 * @og.rev 4.3.3.4 (2008/11/01) ヘッãƒ??、フãƒ?‚¿ー値が設定されてã�?�ªã�??合にNullPointerExceptionがå?るバグを修正
150 * @og.rev 4.3.3.4 (2008/11/01) 雛形のパス及ã?、å?力å?のパスを実ディレクトリのパスに変換
151 *
152 */
153 private void exec() {
154 QueueManager_DIRECT manager = new QueueManager_DIRECT();
155 manager.setListId( listId );
156 manager.setLang( getLanguage() );
157 manager.setOutputName( HybsSystem.url2dir( outFileURL ) + outFilename );
158 manager.setOutputType( fgrun );
159 manager.setTemplateName( HybsSystem.url2dir( fileURL ) + listId );
160 manager.setPrinterName( printerName );
161 manager.setFglocal( useLocalResource );
162 manager.setFgcut( pageEndCut );
163
164 manager.setBody( body );
165
166 // 4.3.3.4 (2008/11/01)
167 if( headerVals != null && headerVals.length > 0 ) {
168 String[][] hvals = new String[headerVals.length][1];
169 hvals[0] = headerVals;
170 header = DBTableModelUtil.makeDBTable( headerKeys, hvals, getResource() );
171 manager.setHeader( header );
172 }
173
174 // 4.3.3.4 (2008/11/01)
175 if( footerVals != null && footerVals.length > 0 ) {
176 String[][] fvals = new String[footerVals.length][1];
177 fvals[0] = footerVals;
178 footer = DBTableModelUtil.makeDBTable( footerKeys, fvals, getResource() );
179 manager.setFooter( footer );
180 }
181
182 manager.create();
183 manager.waitExec();
184 }
185
186 /**
187 * 【TAG】雛型ã?HTMLファイルの保存してある ãƒ?‚£レクトリを指定しますã?
188 *
189 * @og.tag
190 * こã?属æ?でæŒ?®šされるãƒ?‚£レクトリのファイルを読み取りますã?
191 * æŒ?®š方法ã?ã€??常の fileURL 属æ?と同様に、å?頭がã?'/' (UNIX) またã?ã€?¼’文字目がã?
192 * ":" (Windows)の場合ã?、指定ã?URLそã?ままのãƒ?‚£レクトリに、そã�?�§なã�??合ã?ã€?
193 * シスãƒ?ƒ パラメータ の FILE_URL 属æ?でæŒ?®šã?フォルãƒ??下に、作æ?されますã?
194 * fileURL = "{@USER.ID}" とæŒ?®šすると、FILE_URL 属æ?でæŒ?®šã?フォルãƒ??下にã€?
195 * さらに、各個人ID別のフォルãƒ?‚’作æ?して、そこを操作しますã?
196 *
197 * @param url 雛型のHTMLファイルのãƒ?‚£レクトリ
198 */
199 public void setFileURL( final String url ) {
200 String furl = nval( getRequestParameter( url ),null );
201 if( furl != null ) {
202 char ch = furl.charAt( furl.length()-1 );
203 if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
204 fileURL = StringUtil.urlAppend( fileURL,furl );
205 }
206 }
207
208 /**
209 * 【TAG】帳票IDを指定しますã?
210 *
211 * @og.tag
212 * 帳票IDを指定しますã?
213 *
214 * @param listId 帳票ID
215 */
216 public void setListId( final String listId ) {
217 this.listId = nval( getRequestParameter( listId ), this.listId );
218 }
219
220 /**
221 * 【TAG】å?力HTMLファイルの保存してあるãƒ?‚£レクトリを指定しますã?
222 *
223 * @og.tag
224 * こã?属æ?でæŒ?®šされるãƒ?‚£レクトリにファイルをå?力しますã?
225 * æŒ?®š方法ã?ã€??常の fileURL 属æ?と同様に、å?頭がã?'/' (UNIX) またã?ã€?¼’文字目がã?
226 * ":" (Windows)の場合ã?、指定ã?URLそã?ままのãƒ?‚£レクトリに、そã�?�§なã�??合ã?ã€?
227 * シスãƒ?ƒ パラメータ の FILE_URL 属æ?でæŒ?®šã?フォルãƒ??下に、作æ?されますã?
228 * fileURL = "{@USER.ID}" とæŒ?®šすると、FILE_URL 属æ?でæŒ?®šã?フォルãƒ??下にã€?
229 * さらに、各個人ID別のフォルãƒ?‚’作æ?して、そこに出力しますã?
230 *
231 * @param url 出力HTMLファイルのãƒ?‚£レクトリ
232 */
233 public void setOutFileURL( final String url ) {
234 String furl = nval( getRequestParameter( url ),null );
235 if( furl != null ) {
236 char ch = furl.charAt( furl.length()-1 );
237 if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
238 outFileURL = StringUtil.urlAppend( outFileURL,furl );
239 }
240 }
241
242 /**
243 * 【TAG】ファイルを作æ?するときã?出力ファイル名をセãƒ?ƒˆしますã?
244 *
245 * @og.tag
246 * ファイルを作æ?するときã?出力ファイル名をセãƒ?ƒˆしますã?
247 * 紙に印字するå?合などファイルに出力しなã�??合ã?不要ですã?
248 *
249 * @param filename 出力ファイルå�?
250 */
251 public void setOutFilename( final String filename ) {
252 this.outFilename = nval( getRequestParameter( filename ),this.outFilename );
253 }
254
255 /**
256 * 【TAG】固定部の{@KEY} の KEY 部åˆ?‚’CSV形式でè¤?•°æŒ?®šしますã?
257 *
258 * @og.tag
259 * カンマでè¤?•°æŒ?®šできますã?
260 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
261 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
262 *
263 * @param hKeys 固定部の key
264 */
265 public void setHeaderKeys( final String hKeys ) {
266 headerKeys = getCSVParameter( hKeys );
267 }
268
269 /**
270 * 【TAG】固定部のKEY に対応するå?をCSV形式でè¤?•°æŒ?®šしますã?
271 *
272 * @og.tag
273 * カンマでè¤?•°æŒ?®šで、リクエスト情報でも設定できますã?
274 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
275 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
276 *
277 * @param hVals 固定部の値
278 */
279 public void setHeaderVals( final String hVals ) {
280 headerVals = getCSVParameter( hVals );
281 }
282
283 /**
284 * 【TAG】繰り返し部の終äº?¾Œに表示する key 部åˆ?‚’CSV形式でè¤?•°æŒ?®šしますã?
285 *
286 * @og.tag
287 * カンマでè¤?•°æŒ?®šできますã?
288 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
289 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
290 *
291 * @param ftKeys 繰り返し部の終äº?¾Œに表示する key
292 */
293 public void setFooterKeys( final String ftKeys ) {
294 footerKeys = getCSVParameter( ftKeys );
295 }
296
297 /**
298 * 【TAG】固定部のKEY に対応するå?をCSV形式でè¤?•°æŒ?®šしますã?
299 *
300 * @og.tag
301 * カンマでè¤?•°æŒ?®šで、リクエスト情報でも設定できますã?
302 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
303 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
304 *
305 * @param ftVals 繰り返し部の終äº?¾Œに表示する値
306 */
307 public void setFooterVals( final String ftVals ) {
308 footerVals = getCSVParameter( ftVals );
309 }
310
311 /**
312 * 【TAG】ã?ãƒ?‚£ー部(繰り返し部)がなくなったときに、それ以降を表示するかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
313 *
314 * @og.tag
315 * true では、それ以降を出力しませんã€?
316 * 初期値は "true" (なくなった時点で、å?力しなã�??)ですã?
317 *
318 * @param peCut 繰り返し部の終äº?¾Œに継続å?ç�?�™るかどã�?�‹ (true:処ç�?�—なã�?false:処ç�?�™ã‚?
319 */
320 public void setPageEndCut( final String peCut ) {
321 pageEndCut = nval( getRequestParameter( peCut ),pageEndCut );
322 }
323
324 /**
325 * 【TAG】各シスãƒ?ƒ のリソース(ローカルリソース)を使用するか[true/false]を指定しまã�?初期値:true)ã€?
326 *
327 * @og.tag
328 * true の場合ã?å�?‚·スãƒ?ƒ に登録されたリソースæƒ??を使用して帳票ãƒ??タが変換されますã?
329 * false の場合ã?、帳票ãƒ??モンが起動してã�?‚‹シスãƒ?ƒ (通常は'GE')のリソースが適用されますã?
330 * 初期値は "true" (ローカルリソースを使用する)ですã?
331 *
332 * @param fgl ローカルリソースを使用するã�?true:処ç�?�—なã�?false:処ç�?�™ã‚?
333 */
334 public void setUseLocalResource( final String fgl ) {
335 useLocalResource = nval( getRequestParameter( fgl ),useLocalResource );
336 }
337
338 /**
339 * 【TAG】å?力方法をæŒ?®šしまã�?初期値:P(PDF出åŠ?)ã€?
340 *
341 * @og.tag
342 * 出力方法ã?コードã?、FGRUNのコードリソースと同じもã?が指定できますã?
343 * 初期値は "P" (PDF出åŠ?ですã?
344 *
345 * @param flg 出力方æ³?
346 */
347 public void setFgrun( final String flg ) {
348 fgrun= nval( getRequestParameter( flg ),fgrun );
349 }
350
351 /**
352 * 【TAG】ã?リンター名をæŒ?®šしますã?
353 *
354 * @og.tag
355 * プリンター名をæŒ?®šしますã?こã?プリンター名ã?帳票サーバã?上でのプリンタ名ですã?
356 * ファイル出力等ã?紙に印刷しなã�??合ã?不要ですã?
357 *
358 * @param ptnm プリンターå�?
359 */
360 public void setPrinterName( final String ptnm ) {
361 printerName = nval( getRequestParameter( ptnm ),printerName );
362 }
363
364 /**
365 * 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
366 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
367 *
368 * @og.tag
369 * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?下流ã?viewタグ等に
370 * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
371 * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
372 * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
373 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
374 *
375 * @param id sessionに登録する時ã? ID
376 */
377 public void setTableId( final String id ) {
378 tableId = nval( getRequestParameter( id ), tableId );
379 }
380
381 /**
382 * タグの名称をã?返しますã?
383 * 自åˆ??身のクラス名よりã?自動的に取り出せなã�?�Ÿめã?こã?メソãƒ?ƒ‰をオーバã?ライドしますã?
384 *
385 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
386 *
387 * @return タグの名称
388 */
389 @Override
390 protected String getTagName() {
391 return "report2" ;
392 }
393
394 /**
395 * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
396 *
397 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
398 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
399 *
400 * @param strm ObjectOutputStreamオブジェクãƒ?
401 * @throws IOException 入出力エラーが発生したå?å�?
402 */
403 private void writeObject( final ObjectOutputStream strm ) throws IOException {
404 strm.defaultWriteObject();
405 }
406
407 /**
408 * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
409 *
410 * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
411 *
412 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
413 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
414 *
415 * @param strm ObjectInputStreamオブジェクãƒ?
416 * @see #release2()
417 * @throws IOException シリアライズに関する入出力エラーが発生したå?å�?
418 * @throws ClassNotFoundException クラスを見つけることができなかったå?å�?
419 */
420 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
421 strm.defaultReadObject();
422 }
423
424 /**
425 * こã?オブジェクトã?æ–?—å?表現を返しますã?
426 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
427 *
428 * @return こã?クラスのæ–?—å?表現
429 */
430 @Override
431 public String toString() {
432 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
433 .println( "VERSION" ,VERSION )
434 .println( "fileURL" ,fileURL )
435 .println( "listId" ,listId )
436 .println( "outFileURL" ,outFileURL )
437 .println( "outFilename" ,outFilename )
438 .println( "headerKeys" ,headerKeys )
439 .println( "headerVals" ,headerVals )
440 .println( "footerKeys" ,footerKeys )
441 .println( "footerVals" ,footerVals )
442 .println( "pageEndCut" ,pageEndCut )
443 .println( "useLocalResource",useLocalResource )
444 .println( "fgrun" ,fgrun )
445 .println( "printerName" ,printerName )
446 .println( "tableId" ,tableId )
447 .println( "BASE_URL" ,BASE_URL )
448 .println( "Other..." ,getAttributes().getAttribute() )
449 .fixForm().toString() ;
450 }
451 }