1 /*
2 * JasperReports - Free Java Reporting Library.
3 * Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
4 * http://www.jaspersoft.com
5 *
6 * Unless you have purchased a commercial license agreement from Jaspersoft,
7 * the following license terms apply:
8 *
9 * This program is part of JasperReports.
10 *
11 * JasperReports is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * JasperReports is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General Public License
22 * along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
23 */
24 package net.sf.jasperreports.engine.fill;
25
26 import java.util.concurrent.Executor;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30
31
32 /**
33 * Thread-based {@link net.sf.jasperreports.engine.fill.JRSubreportRunner JRSubreportRunner}
34 * implementation.
35 * <p>
36 * The subreport fill is launched in a new thread which coordinates suspend/resume actions with
37 * the master thread.
38 *
39 * @author Lucian Chirita (lucianc@users.sourceforge.net)
40 */
41 public class ThreadExecutorSubreportRunner extends AbstractThreadSubreportRunner
42 {
43
44 private static final Log log = LogFactory.getLog(ThreadExecutorSubreportRunner.class);
45
46 private Executor threadExecutor;
47 private boolean filling;
48
49 public ThreadExecutorSubreportRunner(JRFillSubreport fillSubreport, JRBaseFiller subreportFiller,
50 Executor threadExecutor)
51 {
52 super(fillSubreport, subreportFiller);
53 this.threadExecutor = threadExecutor;
54 }
55
56 @Override
57 public boolean isFilling()
58 {
59 return filling;
60 }
61
62 @Override
63 protected void doStart()
64 {
65 filling = true;
66
67 if (log.isDebugEnabled())
68 {
69 log.debug("Fill " + subreportFiller.fillerId + ": starting");
70 }
71
72 threadExecutor.execute(this);
73 }
74
75 @Override
76 public void reset()
77 {
78 filling = false;
79 }
80 }
81