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