📄 cmsdisplayresource.java
字号:
new StringBuffer("attachment; filename=\"").append(resourceStr).append("\"").toString());
res.setContentLength(result.length);
CmsFlexController controller = CmsFlexController.getController(req);
res = controller.getTopResponse();
res.setContentType(contentType);
try {
res.getOutputStream().write(result);
res.getOutputStream().flush();
} catch (IOException e) {
// can usually be ignored
if (LOG.isInfoEnabled()) {
LOG.info(e.getLocalizedMessage());
}
return;
}
}
} else {
// manual existsResource, need it for timewarp checking and saves three calls for existsResource
CmsResource resource = null;
try {
resource = getCms().readResource(resourceStr, CmsResourceFilter.ALL);
} catch (CmsVfsResourceNotFoundException e) {
// ignore, resource will be null
}
if (resource != null) {
if (resource.getState().isDeleted()) {
// resource has been deleted in offline project
throw new CmsVfsResourceNotFoundException(Messages.get().container(
Messages.ERR_RESOURCE_DELETED_2,
resourceStr,
getCms().getRequestContext().currentProject().getName()));
}
// check for release / expiration time window
autoTimeWarp(resource);
// code for display resource after all tests for displayability (exists, not deleted)
String url = getJsp().link(resourceStr);
// if in online project
if ((url.indexOf("://") < 0) && getCms().getRequestContext().currentProject().isOnlineProject()) {
String site = getCms().getRequestContext().getSiteRoot();
if (CmsStringUtil.isEmptyOrWhitespaceOnly(site)) {
site = OpenCms.getSiteManager().getDefaultUri();
if (CmsStringUtil.isEmptyOrWhitespaceOnly(site)) {
url = OpenCms.getSiteManager().getWorkplaceServer() + url;
} else if (OpenCms.getSiteManager().getSiteForSiteRoot(site) == null) {
url = OpenCms.getSiteManager().getWorkplaceServer() + url;
} else {
url = OpenCms.getSiteManager().getSiteForSiteRoot(site).getUrl() + url;
}
} else {
url = OpenCms.getSiteManager().getSiteForSiteRoot(site).getUrl() + url;
}
try {
CmsStaticExportManager manager = OpenCms.getStaticExportManager();
HttpURLConnection.setFollowRedirects(false);
// try to export it
URL exportUrl = new URL(manager.getExportUrl() + manager.getRfsName(getCms(), resourceStr));
HttpURLConnection urlcon = (HttpURLConnection)exportUrl.openConnection();
// setup the connection and request the resource
urlcon.setRequestMethod("GET");
urlcon.setRequestProperty(CmsRequestUtil.HEADER_OPENCMS_EXPORT, Boolean.TRUE.toString());
if (manager.getAcceptLanguageHeader() != null) {
urlcon.setRequestProperty(
CmsRequestUtil.HEADER_ACCEPT_LANGUAGE,
manager.getAcceptLanguageHeader());
} else {
urlcon.setRequestProperty(
CmsRequestUtil.HEADER_ACCEPT_LANGUAGE,
manager.getDefaultAcceptLanguageHeader());
}
if (manager.getAcceptCharsetHeader() != null) {
urlcon.setRequestProperty(
CmsRequestUtil.HEADER_ACCEPT_CHARSET,
manager.getAcceptCharsetHeader());
} else {
urlcon.setRequestProperty(
CmsRequestUtil.HEADER_ACCEPT_CHARSET,
manager.getDefaultAcceptCharsetHeader());
}
// now perform the request to export
urlcon.connect();
urlcon.getResponseCode();
urlcon.disconnect();
} catch (Exception e) {
// ignore
if (LOG.isDebugEnabled()) {
LOG.debug(e.getLocalizedMessage(), e);
}
}
}
getJsp().getResponse().sendRedirect(url);
} else {
// resource does not exist, show error message
throw new CmsVfsResourceNotFoundException(Messages.get().container(
Messages.ERR_RESOURCE_DOES_NOT_EXIST_3,
resourceStr,
getCms().getRequestContext().currentProject().getName(),
getCms().getRequestContext().getSiteRoot()));
}
}
}
/**
* Returns the version number parameter value.<p>
*
* @return the version number parameter value
*/
public String getParamVersion() {
return m_paramVersion;
}
/**
* Sets the version number parameter value.<p>
*
* @param paramVersion the version number parameter value to set
*/
public void setParamVersionid(String paramVersion) {
m_paramVersion = paramVersion;
}
/**
* Performs a timewarp for resources that are expired or not released yet to always allow a
* preview of a page out of the workplace.<p>
*
* If the user has a configured timewarp (preferences dialog) a mandatory timewarp will lead to
* an exception. One cannot auto timewarp with configured timewarp time.<p>
*
* @param resource the resource to show
*
* @throws CmsVfsResourceNotFoundException if a warp would be needed to show the resource but the user has a configured
* timewarp which disallows auto warping
*/
protected void autoTimeWarp(CmsResource resource) throws CmsVfsResourceNotFoundException {
long surfTime = getCms().getRequestContext().getRequestTime();
if (resource.isReleasedAndNotExpired(surfTime)) {
// resource is valid, no modification of time required
return;
}
if (getSettings().getUserSettings().getTimeWarp() == CmsContextInfo.CURRENT_TIME) {
// no time warp has been set, enable auto time warp
long timeWarp;
// will also work if ATTRIBUTE_REQUEST_TIME was CmsResource.DATE_RELEASED_EXPIRED_IGNORE
if (resource.isExpired(surfTime)) {
// do a time warp into the past
timeWarp = resource.getDateExpired() - 1;
} else if (!resource.isReleased(surfTime)) {
// do a time warp into the future
timeWarp = resource.getDateReleased() + 1;
} else {
// do no time warp
timeWarp = CmsContextInfo.CURRENT_TIME;
}
if (timeWarp != CmsContextInfo.CURRENT_TIME) {
// let's do the time warp again...
getSession().setAttribute(CmsContextInfo.ATTRIBUTE_REQUEST_TIME, new Long(timeWarp));
}
} else {
// resource is not vaild in the time window set by the user,
// report an error message
throw new CmsVfsResourceNotFoundException(Messages.get().container(
Messages.ERR_RESOURCE_OUTSIDE_TIMEWINDOW_1,
getParamResource()));
}
}
/**
* @see org.opencms.workplace.CmsDialog#initWorkplaceRequestValues(org.opencms.workplace.CmsWorkplaceSettings, javax.servlet.http.HttpServletRequest)
*/
protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) {
fillParamValues(settings, request);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -