1 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 ; 52 import java.net.HttpURLConnection ; 53 import java.net.URL ; 54 55 import javax.servlet.http.HttpServletRequest ; 56 import javax.servlet.http.HttpServletResponse ; 57 import javax.servlet.jsp.PageContext ; 58 59 import org.apache.commons.logging.Log; 60 61 79 public class CmsDisplayResource extends CmsDialog { 80 81 82 public static final String PARAM_VERSIONID = "versionid"; 83 84 85 private static final Log LOG = CmsLog.getLog(CmsDisplayResource.class); 86 87 88 private String m_paramVersionid; 89 90 95 public CmsDisplayResource(CmsJspActionElement jsp) { 96 97 super(jsp); 98 } 99 100 107 public CmsDisplayResource(PageContext context, HttpServletRequest req, HttpServletResponse res) { 108 109 this(new CmsJspActionElement(context, req, res)); 110 } 111 112 120 protected static byte[] getBackupResourceContent(CmsObject cms, String resource, String versionId) { 121 122 if (CmsStringUtil.isNotEmpty(resource) && CmsStringUtil.isNotEmpty(versionId)) { 123 124 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 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 155 public void actionShow() throws Exception { 156 157 if (CmsStringUtil.isNotEmpty(getParamVersionid())) { 159 byte[] result = getBackupResourceContent(getCms(), getParamResource(), getParamVersionid()); 160 if (result != null) { 161 String contentType = OpenCms.getResourceManager().getMimeType( 163 getParamResource(), 164 getCms().getRequestContext().getEncoding()); 165 166 HttpServletResponse res = getJsp().getResponse(); 167 HttpServletRequest req = getJsp().getRequest(); 168 169 res.setHeader( 170 CmsRequestUtil.HEADER_CONTENT_DISPOSITION, 171 new StringBuffer ("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 e) { 182 if (LOG.isInfoEnabled()) { 184 LOG.info(e.getLocalizedMessage()); 185 } 186 return; 187 } 188 } 189 } else { 190 if (getCms().existsResource(getParamResource(), CmsResourceFilter.DEFAULT)) { 191 String url = getJsp().link(getParamResource()); 192 if (url.indexOf("//:") < 0 && getCms().getRequestContext().currentProject().isOnlineProject()) { 194 String 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 URL exportUrl = new URL (manager.getExportUrl() 212 + manager.getRfsName(getCms(), getParamResource())); 213 HttpURLConnection urlcon = (HttpURLConnection )exportUrl.openConnection(); 214 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 urlcon.connect(); 237 urlcon.getResponseCode(); 238 urlcon.disconnect(); 239 240 } catch (Exception e) { 241 } 243 } 244 getJsp().getResponse().sendRedirect(url); 245 } else { 246 if (getCms().existsResource(getParamResource(), CmsResourceFilter.ALL)) { 247 if (getCms().existsResource(getParamResource(), CmsResourceFilter.IGNORE_EXPIRATION)) { 248 throw new CmsVfsResourceNotFoundException(Messages.get().container( 250 Messages.ERR_RESOURCE_OUTSIDE_TIMEWINDOW_1, 251 getParamResource())); 252 } else { 253 throw new CmsVfsResourceNotFoundException(Messages.get().container( 255 Messages.ERR_RESOURCE_DELETED_2, 256 getParamResource(), 257 getCms().getRequestContext().currentProject().getName())); 258 } 259 } 260 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 275 public String getParamVersionid() { 276 277 return m_paramVersionid; 278 } 279 280 285 public void setParamVersionid(String paramVersionid) { 286 287 m_paramVersionid = paramVersionid; 288 } 289 290 293 protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) { 294 295 fillParamValues(settings, request); 296 } 297 } | Popular Tags |