KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > frontend > QueryGenerator


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.outerj.daisy.frontend;
17
18 import org.apache.cocoon.generation.Generator;
19 import org.apache.cocoon.ProcessingException;
20 import org.apache.cocoon.environment.SourceResolver;
21 import org.apache.cocoon.environment.ObjectModelHelper;
22 import org.apache.cocoon.environment.Request;
23 import org.apache.cocoon.xml.XMLConsumer;
24 import org.apache.avalon.framework.parameters.Parameters;
25 import org.apache.avalon.framework.parameters.ParameterException;
26 import org.apache.avalon.framework.service.Serviceable;
27 import org.apache.avalon.framework.service.ServiceManager;
28 import org.apache.avalon.framework.service.ServiceException;
29 import org.apache.xmlbeans.XmlObject;
30 import org.xml.sax.SAXException JavaDoc;
31 import org.xml.sax.helpers.AttributesImpl JavaDoc;
32 import org.outerj.daisy.repository.Repository;
33 import org.outerj.daisy.repository.clientimpl.infrastructure.DaisyPropagatedException;
34 import org.outerj.daisy.repository.query.QueryManager;
35
36 import java.io.IOException JavaDoc;
37 import java.util.Map JavaDoc;
38 import java.util.Locale JavaDoc;
39
40 public class QueryGenerator implements Generator, Serviceable {
41     private XMLConsumer consumer;
42     private String JavaDoc query;
43     private ServiceManager serviceManager;
44     private Map JavaDoc objectModel;
45
46     public void setup(SourceResolver sourceResolver, Map JavaDoc objectModel, String JavaDoc source, Parameters parameters) throws ProcessingException, SAXException JavaDoc, IOException JavaDoc {
47         try {
48             query = parameters.getParameter("query");
49         } catch (ParameterException e) {
50             throw new ProcessingException(e);
51         }
52         this.objectModel = objectModel;
53     }
54
55     public void setConsumer(XMLConsumer xmlConsumer) {
56         this.consumer = xmlConsumer;
57     }
58
59     public void service(ServiceManager serviceManager) throws ServiceException {
60         this.serviceManager = serviceManager;
61     }
62
63     public void generate() throws IOException JavaDoc, SAXException JavaDoc, ProcessingException {
64         XmlObject result = null;
65         try {
66             Request request = ObjectModelHelper.getRequest(objectModel);
67             Repository repository = WikiHelper.getRepository(request, serviceManager);
68             QueryManager queryManager = repository.getQueryManager();
69             Locale JavaDoc locale = (Locale JavaDoc)request.getLocale();
70             result = queryManager.performQuery(query, locale);
71         } catch (Exception JavaDoc e) {
72             handleException(e);
73             return;
74         }
75
76         result.save(consumer, consumer);
77     }
78
79     private void handleException(Exception JavaDoc e) throws SAXException JavaDoc {
80         consumer.startDocument();
81         AttributesImpl JavaDoc attrs = new AttributesImpl JavaDoc();
82         attrs.addAttribute("", "class", "class", "CDATA", "daisy-error");
83         consumer.startElement("", "p", "p", attrs);
84         insertString("Could not perform the following query:");
85         insertBr();
86         insertString(query);
87         insertBr();
88         insertString("Encountered the following errors:");
89         insertBr();
90         insertString(getExceptionMessage(e));
91         Throwable JavaDoc cause = e.getCause();
92         while (cause != null) {
93             insertBr();
94             insertString(getExceptionMessage(cause));
95             cause = cause.getCause();
96         }
97         consumer.endElement("", "p", "p");
98         consumer.endDocument();
99     }
100
101     private String JavaDoc getExceptionMessage(Throwable JavaDoc e) {
102         if (e instanceof DaisyPropagatedException)
103             return ((DaisyPropagatedException)e).getUserMessage();
104         else
105             return e.getMessage();
106     }
107
108     private void insertBr() throws SAXException JavaDoc {
109         consumer.startElement("", "br", "br", new AttributesImpl JavaDoc());
110         consumer.endElement("", "br", "br");
111     }
112
113     private void insertString(String JavaDoc message) throws SAXException JavaDoc {
114         if (message == null)
115             message = "null";
116         consumer.characters(message.toCharArray(), 0, message.length());
117     }
118 }
119
Popular Tags