KickJava   Java API By Example, From Geeks To Geeks.

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


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.reading.Reader;
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.Response;
23 import org.apache.cocoon.environment.Request;
24 import org.apache.avalon.framework.parameters.Parameters;
25 import org.apache.avalon.framework.service.Serviceable;
26 import org.apache.avalon.framework.service.ServiceManager;
27 import org.apache.avalon.framework.service.ServiceException;
28 import org.apache.avalon.framework.logger.LogEnabled;
29 import org.apache.avalon.framework.logger.Logger;
30 import org.apache.avalon.framework.activity.Disposable;
31 import org.xml.sax.SAXException JavaDoc;
32 import org.outerj.daisy.repository.VariantKey;
33 import org.outerj.daisy.repository.RepositoryException;
34 import org.outerj.daisy.repository.Repository;
35 import org.outerj.daisy.publisher.Publisher;
36 import org.outerj.daisy.publisher.BlobInfo;
37
38 import java.io.IOException JavaDoc;
39 import java.io.OutputStream JavaDoc;
40 import java.io.InputStream JavaDoc;
41 import java.util.Map JavaDoc;
42
43 public class PartReader implements LogEnabled, Reader, Serviceable, Disposable {
44     private ServiceManager serviceManager;
45     private OutputStream JavaDoc outputStream;
46     private Response response;
47     private BlobInfo blobInfo;
48     private Logger logger;
49     private static final int BUFFER_SIZE = 32768;
50
51     public void service(ServiceManager serviceManager) throws ServiceException {
52         this.serviceManager = serviceManager;
53     }
54
55     public void enableLogging(Logger logger) {
56         this.logger = logger;
57     }
58
59     public void dispose() {
60         if (this.blobInfo != null)
61             blobInfo.dispose();
62     }
63
64     public void generate() throws IOException JavaDoc, SAXException JavaDoc, ProcessingException {
65         response.setIntHeader("Content-Length", (int)blobInfo.getSize());
66
67         InputStream JavaDoc is = null;
68         try {
69             is = blobInfo.getInputStream();
70             byte[] data = new byte[BUFFER_SIZE];
71             int read;
72             do {
73                 read = is.read(data);
74                 if (read != -1) {
75                     outputStream.write(data, 0, read);
76                 }
77             } while (read != -1);
78         } catch (RepositoryException e) {
79             throw new ProcessingException(e);
80         } finally {
81             if (is != null) {
82                 try {
83                     is.close();
84                 } catch (Throwable JavaDoc e) {
85                     logger.error("Error closing input stream in PartReader.", e);
86                 }
87             }
88         }
89     }
90
91     public long getLastModified() {
92         return blobInfo.getLastModified().getTime();
93     }
94
95     public void setup(SourceResolver sourceResolver, Map JavaDoc objectModel, String JavaDoc s, Parameters parameters) throws ProcessingException, SAXException JavaDoc, IOException JavaDoc {
96         try {
97             long documentId = Long.parseLong(parameters.getParameter("documentId"));
98             String JavaDoc version = parameters.getParameter("version");
99             if (version.equalsIgnoreCase("default")) {
100                 Request request = ObjectModelHelper.getRequest(objectModel);
101                 version = WikiHelper.getVersionMode(request).toString();
102             }
103             String JavaDoc partType = parameters.getParameter("partType");
104             String JavaDoc branch = parameters.getParameter("branch");
105             String JavaDoc language = parameters.getParameter("language");
106             long defaultBranchId = parameters.getParameterAsLong("defaultBranchId");
107             long defaultLanguageId = parameters.getParameterAsLong("defaultLanguageId");
108
109             Repository repository = WikiHelper.getRepository(ObjectModelHelper.getRequest(objectModel), serviceManager);
110             long branchId = RequestUtil.getBranchId(branch, defaultBranchId, repository);
111             long languageId = RequestUtil.getLanguageId(language, defaultLanguageId, repository);
112
113             Publisher publisher = (Publisher)repository.getExtension("Publisher");
114             this.blobInfo = publisher.getBlobInfo(new VariantKey(documentId, branchId, languageId), version, partType);
115
116             this.response = ObjectModelHelper.getResponse(objectModel);
117         } catch (Exception JavaDoc e) {
118             throw new ProcessingException(e);
119         }
120     }
121
122     public void setOutputStream(OutputStream JavaDoc outputStream) throws IOException JavaDoc {
123         this.outputStream = outputStream;
124     }
125
126     public String JavaDoc getMimeType() {
127         return blobInfo.getMimeType();
128     }
129
130     public boolean shouldSetContentLength() {
131         return false;
132     }
133 }
134
Popular Tags