1 21 package com.jaspersoft.jasperserver.api.engine.jasperreports.util.repo; 22 23 import java.io.IOException ; 24 import java.io.InputStream ; 25 import java.net.URL ; 26 import java.net.URLConnection ; 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 44 public class RepositoryConnection extends URLConnection 45 { 46 private static final Log log = LogFactory.getLog(RepositoryConnection.class); 47 48 private final RepositoryContext repositoryContext; 49 50 public RepositoryConnection(RepositoryContext repository, URL url) 51 { 52 super(url); 53 54 this.repositoryContext = repository; 55 } 56 57 public void connect() throws IOException 58 { 59 connected = true; 60 } 61 62 public InputStream getInputStream() throws IOException 63 { 64 try { 65 InputStream data = null; 66 String 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 (e.getMessage()); 118 } 119 } 120 } 121 | Popular Tags |