KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > api > engine > jasperreports > util > repo > RepositoryConnection


1 /*
2  * Copyright (C) 2006 JasperSoft http://www.jaspersoft.com
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed WITHOUT ANY WARRANTY; and without the
10  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * See the GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
15  * or write to:
16  *
17  * Free Software Foundation, Inc.,
18  * 59 Temple Place - Suite 330,
19  * Boston, MA USA 02111-1307
20  */

21 package com.jaspersoft.jasperserver.api.engine.jasperreports.util.repo;
22
23 import java.io.IOException JavaDoc;
24 import java.io.InputStream JavaDoc;
25 import java.net.URL JavaDoc;
26 import java.net.URLConnection JavaDoc;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30
31 import com.jaspersoft.jasperserver.api.engine.jasperreports.util.RepositoryContext;
32 import com.jaspersoft.jasperserver.api.metadata.common.domain.FileResource;
33 import com.jaspersoft.jasperserver.api.metadata.common.domain.FileResourceData;
34 import com.jaspersoft.jasperserver.api.metadata.common.domain.Folder;
35 import com.jaspersoft.jasperserver.api.metadata.common.service.JSResourceNotFoundException;
36 import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService;
37 import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportUnit;
38
39
40 /**
41  * @author Lucian Chirita (lucianc@users.sourceforge.net)
42  * @version $Id: RepositoryConnection.java 3139 2006-04-18 16:03:38Z lucian $
43  */

44 public class RepositoryConnection extends URLConnection JavaDoc
45 {
46     private static final Log log = LogFactory.getLog(RepositoryConnection.class);
47     
48     private final RepositoryContext repositoryContext;
49     
50     public RepositoryConnection(RepositoryContext repository, URL JavaDoc url)
51     {
52         super(url);
53
54         this.repositoryContext = repository;
55     }
56
57     public void connect() throws IOException JavaDoc
58     {
59         connected = true;
60     }
61
62     public InputStream JavaDoc getInputStream() throws IOException JavaDoc
63     {
64         try {
65             InputStream JavaDoc data = null;
66             String JavaDoc path = url.getPath();
67             if (!path.startsWith(Folder.SEPARATOR)) {
68                 ReportUnit reportUnit = repositoryContext.getReportUnit();
69                 FileResource resource = null;
70                 if (reportUnit != null) {
71                     resource = reportUnit.getResourceLocal(path);
72                 }
73
74                 if (resource == null) {
75                     path = repositoryContext.getContextURI() + Folder.SEPARATOR + path;
76                 } else {
77                     if (resource.isReference()) {
78                         path = resource.getReferenceURI();
79                     }
80                     else if (resource.hasData()) {
81                         if (log.isDebugEnabled()) {
82                             log.debug("Loading resource \"" + resource.getName() + "\" from in-memory report unit");
83                         }
84                         data = resource.getDataStream();
85                         if (resource.getFileType().equals(FileResource.TYPE_JRXML)) {
86                             data = repositoryContext.getCompiledReportProvider().getCompiledReport(
87                                     repositoryContext.getExecutionContext(),
88                                     data);
89                         }
90                     } else {
91                         path = resource.getURIString();
92                     }
93                 }
94             }
95
96             if (data == null) {
97                 if (log.isDebugEnabled()) {
98                     log.debug("Loading resource \"" + path + "\" from repository");
99                 }
100                 RepositoryService repository = repositoryContext.getRepository();
101                 FileResource resource = (FileResource) repository.getResource(repositoryContext.getExecutionContext(), path);
102                 while (resource.isReference()) {
103                     resource = (FileResource) repository.getResource(repositoryContext.getExecutionContext(), resource.getReferenceURI());
104                 }
105                 if (resource.getFileType().equals(FileResource.TYPE_JRXML)) {
106                     data = repositoryContext.getCompiledReportProvider().getCompiledReport(
107                             repositoryContext.getExecutionContext(),
108                             path);
109                 } else {
110                     FileResourceData resourceData = repository.getResourceData(repositoryContext.getExecutionContext(), path);
111                     data = resourceData.getDataStream();
112                 }
113             }
114
115             return data;
116         } catch (JSResourceNotFoundException e) {
117             throw new IOException JavaDoc(e.getMessage());
118         }
119     }
120 }
121
Popular Tags