KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > opencms > workplace > commons > CmsDisplayResource


1 /*
2  * File : $Source: /usr/local/cvs/opencms/src/org/opencms/workplace/commons/CmsDisplayResource.java,v $
3  * Date : $Date: 2006/03/27 14:52:18 $
4  * Version: $Revision: 1.21 $
5  *
6  * This library is part of OpenCms -
7  * the Open Source Content Mananagement System
8  *
9  * Copyright (c) 2005 Alkacon Software GmbH (http://www.alkacon.com)
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * For further information about Alkacon Software GmbH, please see the
22  * company website: http://www.alkacon.com
23  *
24  * For further information about OpenCms, please see the
25  * project website: http://www.opencms.org
26  *
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */

31
32 package org.opencms.workplace.commons;
33
34 import org.opencms.file.CmsBackupResource;
35 import org.opencms.file.CmsObject;
36 import org.opencms.file.CmsResourceFilter;
37 import org.opencms.file.CmsVfsResourceNotFoundException;
38 import org.opencms.flex.CmsFlexController;
39 import org.opencms.i18n.CmsEncoder;
40 import org.opencms.jsp.CmsJspActionElement;
41 import org.opencms.main.CmsException;
42 import org.opencms.main.CmsLog;
43 import org.opencms.main.OpenCms;
44 import org.opencms.site.CmsSiteManager;
45 import org.opencms.staticexport.CmsStaticExportManager;
46 import org.opencms.util.CmsRequestUtil;
47 import org.opencms.util.CmsStringUtil;
48 import org.opencms.workplace.CmsDialog;
49 import org.opencms.workplace.CmsWorkplaceSettings;
50
51 import java.io.IOException JavaDoc;
52 import java.net.HttpURLConnection JavaDoc;
53 import java.net.URL JavaDoc;
54
55 import javax.servlet.http.HttpServletRequest JavaDoc;
56 import javax.servlet.http.HttpServletResponse JavaDoc;
57 import javax.servlet.jsp.PageContext JavaDoc;
58
59 import org.apache.commons.logging.Log;
60
61 /**
62  * Shows a preview of the selected resource in the Explorer view.<p>
63  *
64  * This is required to get correct previews of statically exported pages
65  * in the Online project.<p>
66  *
67  * The following file uses this class:
68  * <ul>
69  * <li>/commons/displayresource.jsp
70  * </ul>
71  * <p>
72  *
73  * @author Andreas Zahner
74  *
75  * @version $Revision: 1.21 $
76  *
77  * @since 6.0.0
78  */

79 public class CmsDisplayResource extends CmsDialog {
80
81     /** Request parameter name for versionid. */
82     public static final String JavaDoc PARAM_VERSIONID = "versionid";
83
84     /** The log object for this class. */
85     private static final Log LOG = CmsLog.getLog(CmsDisplayResource.class);
86
87     /** The version id parameter. */
88     private String JavaDoc m_paramVersionid;
89     
90     /**
91      * Public constructor with JSP action element.<p>
92      *
93      * @param jsp an initialized JSP action element
94      */

95     public CmsDisplayResource(CmsJspActionElement jsp) {
96
97         super(jsp);
98     }
99
100     /**
101      * Public constructor with JSP variables.<p>
102      *
103      * @param context the JSP page context
104      * @param req the JSP request
105      * @param res the JSP response
106      */

107     public CmsDisplayResource(PageContext JavaDoc context, HttpServletRequest JavaDoc req, HttpServletResponse JavaDoc res) {
108
109         this(new CmsJspActionElement(context, req, res));
110     }
111
112     /**
113      * Returns the content of a backup resource.<p>
114      *
115      * @param cms a CmsObject
116      * @param resource the name of the backup resource
117      * @param versionId the version id of the backup resource
118      * @return the content of a backup resource
119      */

120     protected static byte[] getBackupResourceContent(CmsObject cms, String JavaDoc resource, String JavaDoc versionId) {
121
122         if (CmsStringUtil.isNotEmpty(resource) && CmsStringUtil.isNotEmpty(versionId)) {
123
124             // try to load the backup resource
125
CmsBackupResource res = null;
126             try {
127                 cms.getRequestContext().saveSiteRoot();
128                 cms.getRequestContext().setSiteRoot("/");
129                 res = cms.readBackupFile(resource, Integer.parseInt(versionId));
130             } catch (CmsException e) {
131                 // can usually be ignored
132
if (LOG.isInfoEnabled()) {
133                     LOG.info(e.getLocalizedMessage());
134                 }
135                 return "".getBytes();
136             } finally {
137                 cms.getRequestContext().restoreSiteRoot();
138             }
139             byte[] backupResourceContent = res.getContents();
140             backupResourceContent = CmsEncoder.changeEncoding(
141                 backupResourceContent,
142                 OpenCms.getSystemInfo().getDefaultEncoding(),
143                 cms.getRequestContext().getEncoding());
144             return backupResourceContent;
145         }
146
147         return "".getBytes();
148     }
149
150     /**
151      * Redirects to the specified file or shows backup resource.<p>
152      *
153      * @throws Exception if redirection fails
154      */

155     public void actionShow() throws Exception JavaDoc {
156
157         // try to load the backup resource
158
if (CmsStringUtil.isNotEmpty(getParamVersionid())) {
159             byte[] result = getBackupResourceContent(getCms(), getParamResource(), getParamVersionid());
160             if (result != null) {
161                 // get the top level response to change the content type
162
String JavaDoc contentType = OpenCms.getResourceManager().getMimeType(
163                     getParamResource(),
164                     getCms().getRequestContext().getEncoding());
165
166                 HttpServletResponse JavaDoc res = getJsp().getResponse();
167                 HttpServletRequest JavaDoc req = getJsp().getRequest();
168
169                 res.setHeader(
170                     CmsRequestUtil.HEADER_CONTENT_DISPOSITION,
171                     new StringBuffer JavaDoc("attachment; filename=\"").append(getParamResource()).append("\"").toString());
172                 res.setContentLength(result.length);
173
174                 CmsFlexController controller = CmsFlexController.getController(req);
175                 res = controller.getTopResponse();
176                 res.setContentType(contentType);
177
178                 try {
179                     res.getOutputStream().write(result);
180                     res.getOutputStream().flush();
181                 } catch (IOException JavaDoc e) {
182                     // can usually be ignored
183
if (LOG.isInfoEnabled()) {
184                         LOG.info(e.getLocalizedMessage());
185                     }
186                     return;
187                 }
188             }
189         } else {
190             if (getCms().existsResource(getParamResource(), CmsResourceFilter.DEFAULT)) {
191                 String JavaDoc url = getJsp().link(getParamResource());
192                 // if in online project
193
if (url.indexOf("//:") < 0 && getCms().getRequestContext().currentProject().isOnlineProject()) {
194                     String JavaDoc site = getCms().getRequestContext().getSiteRoot();
195                     if (CmsStringUtil.isEmptyOrWhitespaceOnly(site)) {
196                         site = OpenCms.getSiteManager().getDefaultUri();
197                         if (CmsStringUtil.isEmptyOrWhitespaceOnly(site)) {
198                             url = OpenCms.getSiteManager().getWorkplaceServer() + url;
199                         } else if (CmsSiteManager.getSite(site) == null) {
200                             url = OpenCms.getSiteManager().getWorkplaceServer() + url;
201                         } else {
202                             url = CmsSiteManager.getSite(site).getUrl() + url;
203                         }
204                     } else {
205                         url = CmsSiteManager.getSite(site).getUrl() + url;
206                     }
207                     try {
208                         CmsStaticExportManager manager = OpenCms.getStaticExportManager();
209                         HttpURLConnection.setFollowRedirects(false);
210                         // try to export it
211
URL JavaDoc exportUrl = new URL JavaDoc(manager.getExportUrl()
212                             + manager.getRfsName(getCms(), getParamResource()));
213                         HttpURLConnection JavaDoc urlcon = (HttpURLConnection JavaDoc)exportUrl.openConnection();
214                         // setup the connection and request the resource
215
urlcon.setRequestMethod("GET");
216                         urlcon.setRequestProperty(CmsRequestUtil.HEADER_OPENCMS_EXPORT, Boolean.TRUE.toString());
217                         if (manager.getAcceptLanguageHeader() != null) {
218                             urlcon.setRequestProperty(
219                                 CmsRequestUtil.HEADER_ACCEPT_LANGUAGE,
220                                 manager.getAcceptLanguageHeader());
221                         } else {
222                             urlcon.setRequestProperty(
223                                 CmsRequestUtil.HEADER_ACCEPT_LANGUAGE,
224                                 manager.getDefaultAcceptLanguageHeader());
225                         }
226                         if (manager.getAcceptCharsetHeader() != null) {
227                             urlcon.setRequestProperty(
228                                 CmsRequestUtil.HEADER_ACCEPT_CHARSET,
229                                 manager.getAcceptCharsetHeader());
230                         } else {
231                             urlcon.setRequestProperty(
232                                 CmsRequestUtil.HEADER_ACCEPT_CHARSET,
233                                 manager.getDefaultAcceptCharsetHeader());
234                         }
235                         // now perform the request to export
236
urlcon.connect();
237                         urlcon.getResponseCode();
238                         urlcon.disconnect();
239
240                     } catch (Exception JavaDoc e) {
241                         // ignore
242
}
243                 }
244                 getJsp().getResponse().sendRedirect(url);
245             } else {
246                 if (getCms().existsResource(getParamResource(), CmsResourceFilter.ALL)) {
247                     if (getCms().existsResource(getParamResource(), CmsResourceFilter.IGNORE_EXPIRATION)) {
248                         // resource is outside time window, show error message
249
throw new CmsVfsResourceNotFoundException(Messages.get().container(
250                             Messages.ERR_RESOURCE_OUTSIDE_TIMEWINDOW_1,
251                             getParamResource()));
252                     } else {
253                         // resource is deleted, show error message
254
throw new CmsVfsResourceNotFoundException(Messages.get().container(
255                             Messages.ERR_RESOURCE_DELETED_2,
256                             getParamResource(),
257                             getCms().getRequestContext().currentProject().getName()));
258                     }
259                 }
260                 // resource is outside time window, show error message
261
throw new CmsVfsResourceNotFoundException(Messages.get().container(
262                     Messages.ERR_RESOURCE_DOES_NOT_EXIST_3,
263                     getParamResource(),
264                     getCms().getRequestContext().currentProject().getName(),
265                     getCms().getRequestContext().getSiteRoot()));
266             }
267         }
268     }
269     
270     /**
271      * Returns the paramVersionid.<p>
272      *
273      * @return the paramVersionid
274      */

275     public String JavaDoc getParamVersionid() {
276
277         return m_paramVersionid;
278     }
279
280     /**
281      * Sets the paramVersionid.<p>
282      *
283      * @param paramVersionid the paramVersionid to set
284      */

285     public void setParamVersionid(String JavaDoc paramVersionid) {
286
287         m_paramVersionid = paramVersionid;
288     }
289
290     /**
291      * @see org.opencms.workplace.CmsDialog#initWorkplaceRequestValues(org.opencms.workplace.CmsWorkplaceSettings, javax.servlet.http.HttpServletRequest)
292      */

293     protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest JavaDoc request) {
294
295         fillParamValues(settings, request);
296     }
297 }
Popular Tags