1:
31: package ;
32:
33: import ;
34: import ;
35: import ;
36: import ;
37:
38: import ;
39: import ;
40: import ;
41: import ;
42: import ;
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48:
49:
54: public class ReportReadHandler extends SectionReadHandler
55: {
56: private StringReadHandler queryReadHandler;
57: private PropertiesReadHandler propertiesReadHandler;
58: private DataFactoryReadHandler datasourceFactoryReadHandler;
59: private ArrayList styleSheetReadHandlers;
60: private JFreeReport report;
61:
62:
67: public ReportReadHandler()
68: {
69: report = new JFreeReport();
70: styleSheetReadHandlers = new ArrayList();
71: }
72:
73:
81: protected XmlReadHandler getHandlerForChild(final String uri,
82: final String tagName,
83: final Attributes atts)
84: throws SAXException
85: {
86: final XmlReadHandler base = super.getHandlerForChild(uri, tagName, atts);
87: if (base != null)
88: {
89: return base;
90: }
91:
92: final DataFactoryReadHandlerFactory factory = DataFactoryReadHandlerFactory.getInstance();
93: final DataFactoryReadHandler handler = (DataFactoryReadHandler) factory.getHandler(uri, tagName);
94: if (handler != null)
95: {
96: datasourceFactoryReadHandler = handler;
97: return handler;
98: }
99:
100:
101: if (FlowReportFactoryModule.NAMESPACE.equals(uri))
102: {
103: if ("query".equals(tagName))
104: {
105: queryReadHandler = new StringReadHandler();
106: return queryReadHandler;
107: }
108: if ("configuration".equals(tagName))
109: {
110: propertiesReadHandler = new PropertiesReadHandler();
111: return propertiesReadHandler;
112: }
113: if ("stylesheet".equals(tagName))
114: {
115: final StyleSheetReadHandler srh = new StyleSheetReadHandler();
116: styleSheetReadHandlers.add(srh);
117: return srh;
118: }
119: if ("inline-stylesheet".equals(tagName))
120: {
121: final StyleSheetReadHandler srh = new StyleSheetReadHandler();
122: styleSheetReadHandlers.add(srh);
123: return srh;
124: }
125: }
126: return null;
127: }
128:
129:
134: protected void doneParsing() throws SAXException
135: {
136: if (queryReadHandler == null)
137: {
138: throw new ParseException
139: ("Required element 'query' is missing.", getLocator());
140: }
141: super.doneParsing();
142: final JFreeReport report = (JFreeReport) getElement();
143: report.setQuery(queryReadHandler.getResult());
144: if (propertiesReadHandler != null)
145: {
146: final Properties p = propertiesReadHandler.getResult();
147: final Iterator entries = p.entrySet().iterator();
148: while (entries.hasNext())
149: {
150: final Map.Entry entry = (Map.Entry) entries.next();
151: report.getEditableConfiguration().setConfigProperty
152: ((String) entry.getKey(), (String) entry.getValue());
153: }
154: }
155: if (datasourceFactoryReadHandler != null)
156: {
157: report.setDataFactory(datasourceFactoryReadHandler.getDataFactory());
158: }
159: for (int i = 0; i < styleSheetReadHandlers.size(); i++)
160: {
161: final StyleSheetReadHandler handler = (StyleSheetReadHandler)
162: styleSheetReadHandlers.get(i);
163: report.addStyleSheet(handler.getStyleSheet());
164: }
165: }
166:
167: protected Element getElement()
168: {
169: return report;
170: }
171: }