1:
31:
32: package ;
33:
34: import ;
35: import ;
36: import ;
37: import ;
38: import ;
39: import ;
40: import ;
41: import ;
42:
43:
48: public abstract class AbstractReportProcessor implements ReportProcessor
49: {
50: protected AbstractReportProcessor()
51: {
52: }
53:
54: protected void processReportRun
55: (final ReportJob job,
56: final ReportTarget target)
57: throws ReportDataFactoryException,
58: DataSourceException, ReportProcessingException
59: {
60: synchronized (job)
61: {
62: final ReportContext context = createReportContext(job, target);
63: final LayoutControllerFactory layoutFactory =
64: context.getLayoutControllerFactory();
65:
66:
67: final FlowController flowController = createFlowControler(context, job);
68:
69: LayoutController layoutController =
70: layoutFactory.create(flowController, job.getReportStructureRoot(), null);
71:
72: while (layoutController.isAdvanceable())
73: {
74: layoutController = layoutController.advance(target);
75: while (layoutController.isAdvanceable() == false &&
76: layoutController.getParent() != null)
77: {
78: final LayoutController parent = layoutController.getParent();
79: target.commit();
80: layoutController = parent.join(layoutController.getFlowController());
81: }
82: }
83: target.commit();
84: }
85: }
86:
87: protected ReportContext createReportContext (final ReportJob job,
88: final ReportTarget target)
89: {
90: final ReportContextImpl context = new ReportContextImpl();
91: context.setExportDescriptor(target.getExportDescriptor());
92: final DefaultLayoutControllerFactory lcf = new DefaultLayoutControllerFactory();
93: lcf.initialize(job);
94: context.setLayoutControllerFactory(lcf);
95:
96: final DefaultFormulaContext formulaContext = new DefaultFormulaContext();
97: context.setFormulaContext(formulaContext);
98: context.setResourceBundleFactory(job.getResourceBundleFactory());
99: context.setReportStructureRoot(job.getReportStructureRoot());
100: return context;
101: }
102:
103: protected FlowController createFlowControler(final ReportContext context,
104: final ReportJob job)
105: throws DataSourceException
106: {
107: return new DefaultFlowController(context, job);
108: }
109:
110: }