KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > api > metadata > common > service > impl > hibernate > persistent > RepoFileResource


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.metadata.common.service.impl.hibernate.persistent;
22
23 import java.sql.Blob JavaDoc;
24 import java.sql.SQLException JavaDoc;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.hibernate.Hibernate;
29
30 import com.jaspersoft.jasperserver.api.JSException;
31 import com.jaspersoft.jasperserver.api.JSExceptionWrapper;
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.Resource;
35 import com.jaspersoft.jasperserver.api.metadata.common.service.ResourceFactory;
36 import com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.ReferenceResolver;
37
38 /**
39  * @author Lucian Chirita (lucianc@users.sourceforge.net)
40  * @version $Id: RepoFileResource.java 4003 2006-07-18 07:55:12Z lucian $
41  *
42  * @hibernate.joined-subclass table="file_resource"
43  * @hibernate.joined-subclass-key column="id"
44  */

45 public class RepoFileResource extends RepoResource {
46     private static final Log log = LogFactory.getLog(RepoFileResource.class);
47     
48     private String JavaDoc fileType;
49     private Blob JavaDoc data;
50     private RepoFileResource reference;
51
52     public RepoFileResource() {
53         super();
54     }
55
56     /**
57      * @hibernate.property column="data" type="blob"
58      */

59     public Blob JavaDoc getData() {
60         return data;
61     }
62
63     public void setData(Blob JavaDoc data) {
64         this.data = data;
65     }
66
67     /**
68      * @hibernate.property column="file_type" type="string" length="20"
69      */

70     public String JavaDoc getFileType() {
71         return fileType;
72     }
73
74     public void setFileType(String JavaDoc type) {
75         this.fileType = type;
76     }
77     
78     public String JavaDoc getFinalFileType() {
79         RepoFileResource res = this;
80         while (res.isFileReference()) {
81             res = res.getReference();
82         }
83         return res.getFileType();
84     }
85
86     public boolean isFileReference() {
87         return getReference() != null;
88     }
89     
90     /**
91      * @hibernate.many-to-one column="reference"
92      */

93     public RepoFileResource getReference() {
94         return reference;
95     }
96
97     public void setReference(RepoFileResource reference) {
98         this.reference = reference;
99     }
100
101     protected Class JavaDoc getClientItf() {
102         return FileResource.class;
103     }
104
105     protected void copyTo(Resource clientRes, ResourceFactory resourceFactory) {
106         super.copyTo(clientRes, resourceFactory);
107
108         FileResource fileRes = (FileResource) clientRes;
109
110         if (isFileReference()) {
111             RepoFileResource ref = getReference();
112             fileRes.setFileType(null);
113             fileRes.setData(null);
114             fileRes.setReferenceURI(ref.getResourceURI());
115         } else {
116             fileRes.setFileType(getFileType());
117             //copyDataTo(fileRes);//don't send the data by default
118
fileRes.setReferenceURI(null);
119         }
120     }
121
122     public FileResourceData copyData() {
123         try {
124             if (isFileReference()) {
125                 throw new JSException("File resource \"" + getResourceURI() + "\" is a reference and has no data");
126             }
127             
128             FileResourceData resData;
129
130             Blob JavaDoc blob = getData();
131             if (blob == null) {
132                 resData = new FileResourceData((byte[]) null);
133             } else {
134                 resData = new FileResourceData(blob.getBinaryStream());
135             }
136
137             return resData;
138         } catch (SQLException JavaDoc e) {
139             log.error("Error while reading data blob of \"" + getResourceURI() + "\"", e);
140             throw new JSExceptionWrapper(e);
141         }
142     }
143
144     protected void copyFrom(Resource clientRes,
145             ReferenceResolver referenceResolver) {
146         super.copyFrom(clientRes, referenceResolver);
147
148         FileResource dataRes = (FileResource) clientRes;
149         if (dataRes.isReference()) {
150             setFileType(null);
151             setData(null);
152
153             RepoFileResource externalReference = (RepoFileResource) referenceResolver
154                     .getExternalReference(dataRes.getReferenceURI(), RepoFileResource.class);
155             
156             if (dataRes.getFileType() != null
157                     && !dataRes.getFileType().equals(externalReference.getFinalFileType())) {
158                 throw new JSException("The declared type of the resource ("
159                         + dataRes.getFileType()
160                         + ") does not match the actual type of the reference ("
161                         + externalReference.getFileType() + ").");
162             }
163
164             setReference(externalReference);
165         } else {
166             setFileType(dataRes.getFileType());
167             copyDataFrom(dataRes);
168             setReference(null);
169         }
170     }
171
172     protected void copyDataFrom(FileResource dataRes) {
173         if (dataRes.isReference()) {
174             setData(null);
175         } else {
176             //only update when the client has set some data
177
if (dataRes.hasData()) {
178                 byte[] clientData = dataRes.getData();
179                 Blob JavaDoc blob = Hibernate.createBlob(clientData);
180                 setData(blob);
181             }
182         }
183     }
184 }
185
Popular Tags