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.report2;
017
018 import java.util.Random;
019
020 import org.opengion.hayabusa.common.HybsSystem;
021 import org.opengion.hayabusa.common.HybsSystemException;
022 import org.opengion.hayabusa.db.DBTableModel;
023
024 /**
025 * 画面から直接キューを作?するためのクラスです?
026 * ?設定?を直接?することでDBのマスタ設定を行うことなく帳票出力を行います?
027 * 現時点では、?力系の処?か対応して?せん?
028 *
029 * ここで登録されたキューは、別スレ?で処?れるため?create()メソ?を呼び出した後??
030 * #waitExec()メソ?を呼び出し?処??終?同期させる?があります?
031 * エラーが発生した?合?、HybsSystemExceptionを発生します?
032 *
033 * また?処??タイ?ウト?、シス?リソースのREPORT_DAEMON_TIMEOUTで設定します?
034 *
035 * @og.group 帳票シス?
036 *
037 * @version 4.0
038 * @author Hiroki.Nakamura
039 * @since JDK1.6
040 */
041 public class QueueManager_DIRECT implements QueueManager {
042
043 private final int timeout = HybsSystem.sysInt( "REPORT_DAEMON_TIMEOUT" );
044
045 private static final String SYSTEM_ID = HybsSystem.sys( "SYSTEM_ID" );
046 private static final Random RANDOM = new Random();
047
048 private String listId;
049 private String outputName;
050 private String lang;
051 private String outputType;
052 private String templateName;
053 private String printerName;
054 private boolean fglocal;
055 private boolean fgcut;
056
057 private DBTableModel body;
058 private DBTableModel header;
059 private DBTableModel footer;
060
061 private boolean isEnd = false;
062 private String errMsg = null;
063
064 /**
065 * 帳票処?ューを作?します?
066 *
067 * @og.rev 5.1.6.0 (2010/05/01) 要求単位にスレ?を生成するよ?します?
068 */
069 public void create() {
070 ExecQueue queue = new ExecQueue();
071 queue.setSystemId( SYSTEM_ID );
072 queue.setYkno( "DIRECT_" + Long.toString( RANDOM.nextLong() & 0x7fffffffffffffffL ) );
073 queue.setListId( listId );
074 queue.setLang( lang );
075 queue.setOutputName( outputName );
076 queue.setOutputType( outputType );
077 // 5.1.6.0 (2010/05/01)
078 // queue.setThreadId( "_DIRECT_" );
079 queue.setThreadId( "DIRECT_" + Long.toString( RANDOM.nextLong() & 0x7fffffffffffffffL ) );
080 queue.setTemplateName( templateName );
081 queue.setPrinterName( printerName );
082 queue.setFglocal( fglocal );
083 queue.setFgcut( fgcut );
084
085 queue.setBody( body );
086 queue.setHeader( header );
087 queue.setFooter( footer );
088
089 queue.setManager( this );
090
091 // 5.1.6.0 (2010/05/01)
092 // ExecThreadManager.insertQueue( queue );
093 ExecThreadManager.insertQueueOnNewThread( queue );
094 }
095
096 /**
097 * 帳票処?ータをキューにセ?します?
098 * 画面から発行する?合?、テーブルモ?を直接セ?するので?
099 * ここでは何もしません?
100 *
101 * @param queue ExecQueueオブジェク?
102 */
103 public void set( final ExecQueue queue ) {
104 // 何もありません?PMD エラー回避)
105 }
106
107 /**
108 * キューを実行中の状態に更新します?
109 * 画面から発行する?合?、実行中であることを知る?がな?め?
110 * ここでは何もしません?
111 *
112 * @param queue ExecQueueオブジェク?
113 */
114 public void execute( final ExecQueue queue ) {
115 // 何もありません?PMD エラー回避)
116 }
117
118 /**
119 * キューを完??状態に更新します?
120 *
121 * @param queue ExecQueueオブジェク?
122 */
123 public void complete( final ExecQueue queue ) {
124 isEnd = true;
125 }
126
127 /**
128 * キューをエラーの状態に更新します?
129 *
130 * @param queue ExecQueueオブジェク?
131 */
132 public void error( final ExecQueue queue ) {
133 isEnd = true;
134 errMsg = queue.getMsg();
135 }
136
137 /**
138 * 処?完?てするまでスレ?を?状態にします?
139 * エラーが発生した?合?、例外が発生します?
140 * また?REPORT_DAEMON_TIMEOUTで?された期間処?終?な??合??
141 * タイ?ウトエラーとなります?
142 *
143 */
144 public void waitExec() {
145 long start = System.currentTimeMillis();
146 while( true ) {
147 if( isEnd ) {
148 if( errMsg == null ) {
149 break;
150 }
151 else {
152 throw new HybsSystemException( errMsg );
153 }
154 }
155
156 if( (int)(System.currentTimeMillis() - start) > timeout * 1000 ) {
157 throw new HybsSystemException( "帳票処?タイ?ウトになりました" );
158 }
159 try {
160 Thread.sleep( 100 );
161 }
162 catch( InterruptedException ex ) { }
163 }
164 }
165
166 /**
167 * 帳票IDを設定します?
168 *
169 * @param listId 帳票ID
170 */
171 public final void setListId( final String listId ) {
172 this.listId = listId;
173 }
174
175 /**
176 * ?を設定します?
177 *
178 * @param lang ??
179 */
180 public void setLang( final String lang ) {
181 this.lang = lang;
182 }
183
184 /**
185 * 出力ファイル名を設定します?
186 *
187 * @param outputName 出力ファイル?
188 */
189 public final void setOutputName( final String outputName ) {
190 this.outputName = outputName;
191 }
192
193 /**
194 * 実行方法を設定します?
195 *
196 * @param outputType 実行方?
197 */
198 public final void setOutputType( final String outputType ) {
199 this.outputType = outputType;
200 }
201
202 /**
203 * 雛形ファイル名を設定します?
204 *
205 * @param templateName 雛形ファイル?
206 */
207 public final void setTemplateName( final String templateName ) {
208 this.templateName = templateName;
209 }
210
211 /**
212 * 出力?のプリンタ名を設定します?
213 *
214 * @param printerName 出力?のプリンタ?
215 */
216 public final void setPrinterName( final String printerName ) {
217 this.printerName = printerName;
218 }
219
220 /**
221 * ローカルリソースの使用可否を設定します?
222 *
223 * @param fglocal 使用可否[true/false]
224 */
225 public void setFglocal( final boolean fglocal ) {
226 this.fglocal = fglocal;
227 }
228
229 /**
230 * ペ?ジエンドカ?を行うかを設定します?
231 *
232 * @param fgcut ペ?ジエンドカ?の使用可否[true:使用/false:通常]
233 */
234 public void setFgcut( final boolean fgcut ) {
235 this.fgcut = fgcut;
236 }
237
238 /**
239 * ボディーの??ブルモ?を設定します?
240 *
241 * @param body DBTableModelオブジェク?
242 */
243 public void setBody( final DBTableModel body ) {
244 this.body = body;
245 }
246
247 /**
248 * ヘッ??の??ブルモ?を設定します?
249 *
250 * @param header DBTableModelオブジェク?
251 */
252 public void setHeader( final DBTableModel header ) {
253 this.header = header;
254 }
255
256 /**
257 * フッターの??ブルモ?を設定します?
258 *
259 * @param footer DBTableModelオブジェク?
260 */
261 public void setFooter( final DBTableModel footer ) {
262 this.footer = footer;
263 }
264 }