1
24 package net.sf.jasperreports.governors;
25
26 import java.lang.reflect.InvocationTargetException;
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import net.sf.jasperreports.engine.JRAbstractScriptlet;
31 import net.sf.jasperreports.engine.JRException;
32 import net.sf.jasperreports.engine.JRPropertiesUtil;
33 import net.sf.jasperreports.engine.scriptlets.DefaultScriptletFactory;
34 import net.sf.jasperreports.engine.scriptlets.ScriptletFactory;
35 import net.sf.jasperreports.engine.scriptlets.ScriptletFactoryContext;
36 import net.sf.jasperreports.engine.util.JRClassLoader;
37
38
41 public final class GovernorFactory implements ScriptletFactory
42 {
43
44 private static final GovernorFactory INSTANCE = new GovernorFactory();
45
46 private GovernorFactory()
47 {
48 }
49
50
53 public static GovernorFactory getInstance()
54 {
55 return INSTANCE;
56 }
57
58 @Override
59 public List<JRAbstractScriptlet> getScriplets(ScriptletFactoryContext context) throws JRException
60 {
61 List<JRAbstractScriptlet> scriptlets = new ArrayList<JRAbstractScriptlet>();
62
63 boolean maxPagesEnabled = JRPropertiesUtil.getInstance(context.getJasperReportsContext()).getBooleanProperty(context.getDataset(), MaxPagesGovernor.PROPERTY_MAX_PAGES_ENABLED, true);
64 if (maxPagesEnabled)
65 {
66 int maxPages = JRPropertiesUtil.getInstance(context.getJasperReportsContext()).getIntegerProperty(context.getDataset(), MaxPagesGovernor.PROPERTY_MAX_PAGES, 0);
67 if (maxPages > 0)
68 {
69 scriptlets.add(new MaxPagesGovernor(maxPages));
70 }
71 }
72
73 boolean timeoutEnabled = JRPropertiesUtil.getInstance(context.getJasperReportsContext()).getBooleanProperty(context.getDataset(), TimeoutGovernor.PROPERTY_TIMEOUT_ENABLED, true);
74 if (timeoutEnabled)
75 {
76 long timeout = JRPropertiesUtil.getInstance(context.getJasperReportsContext()).getLongProperty(context.getDataset(), TimeoutGovernor.PROPERTY_TIMEOUT, 0l);
77 if (timeout > 0)
78 {
79 scriptlets.add(new TimeoutGovernor(timeout));
80 }
81 }
82
83 return scriptlets;
84 }
85
86
89 protected JRAbstractScriptlet getScriptlet(String scriptletClassName) throws JRException
90 {
91 JRAbstractScriptlet scriptlet = null;
92
93 try
94 {
95 Class<?> scriptletClass = JRClassLoader.loadClassForName(scriptletClassName);
96 scriptlet = (JRAbstractScriptlet) scriptletClass.getDeclaredConstructor().newInstance();
97 }
98 catch (ClassNotFoundException e)
99 {
100 throw
101 new JRException(
102 DefaultScriptletFactory.EXCEPTION_MESSAGE_KEY_CLASS_LOADING_ERROR,
103 new Object[]{scriptletClassName},
104 e);
105 }
106 catch (NoSuchMethodException | InvocationTargetException
107 | IllegalAccessException | InstantiationException e)
108 {
109 throw
110 new JRException(
111 DefaultScriptletFactory.EXCEPTION_MESSAGE_KEY_INSTANCE_LOADING_ERROR,
112 new Object[]{scriptletClassName},
113 e);
114 }
115
116 return scriptlet;
117 }
118
119 }
120