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 org.apache.commons.javaflow.api.continuable;
27
28 /**
29  * Abstract base for {@link java.lang.Runnable Runnable}-based
30  * {@link net.sf.jasperreports.engine.fill.JRSubreportRunner JRSubreportRunner}
31  * implementations.
32  * 
33  * @author Lucian Chirita (lucianc@users.sourceforge.net)
34  */

35 public abstract class JRSubreportRunnable implements Runnable
36 {
37     private final JRFillSubreport fillSubreport;
38     
39     private Throwable error;
40     private boolean running;
41     
42     protected JRSubreportRunnable(JRFillSubreport fillSubreport)
43     {
44         this.fillSubreport = fillSubreport;
45     }
46
47     protected JRSubreportRunResult runResult()
48     {
49         return new JRSubreportRunResult(!running, error);
50     }
51     
52     @Override
53     @continuable
54     public void run()
55     {
56         running = true;        
57         error = null;
58         
59         try
60         {
61             fillSubreport.fillSubreport();
62         }
63         catch (JRFillInterruptedException e)
64         {
65             //If the subreport filler was interrupted, we should remain silent
66         }
67         // we have to catch Throwable, because it is difficult to say what would happen with the master
68         // filler thread in case we don't
69         catch (Throwable t) //NOPMD
70         {
71             error = t;
72         }
73
74         running = false;
75     }
76     
77     protected boolean isRunning()
78     {
79         return running;
80     }
81 }
82