cmsjspvfsaccessbean.java
来自「找了很久才找到到源代码」· Java 代码 · 共 633 行 · 第 1/2 页
JAVA
633 行
/*
* File : $Source: /usr/local/cvs/opencms/src/org/opencms/jsp/util/CmsJspVfsAccessBean.java,v $
* Date : $Date: 2007-09-05 11:19:35 $
* Version: $Revision: 1.4 $
*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) 2002 - 2007 Alkacon Software GmbH (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.jsp.util;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsRequestContext;
import org.opencms.file.CmsResource;
import org.opencms.file.types.CmsResourceTypeXmlContent;
import org.opencms.file.types.CmsResourceTypeXmlPage;
import org.opencms.main.CmsException;
import org.opencms.main.OpenCms;
import org.opencms.staticexport.CmsLinkManager;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.map.LazyMap;
/**
* Provides utility methods that allow convenient access to the OpenCms VFS,
* indented to be used from a JSP with the JSTL or EL.<p>
*
* @author Alexander Kandzior
*
* @version $Revision: 1.4 $
*
* @since 7.0.2
*
* @see CmsJspContentAccessBean
*/
public final class CmsJspVfsAccessBean {
/**
* Provides Booleans that indicate if a specified resource exists in the OpenCms VFS,
* the input is used as String for the resource name to read.<p>
*/
public class CmsExistsResourceTransformer implements Transformer {
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
return Boolean.valueOf(getReadResource().get(input) != null);
}
}
/**
* Provides Booleans that indicate if a specified resource exists in the OpenCms VFS
* and is of type XML content or XML page,
* the input is used as String for the resource name to read.<p>
*/
public class CmsExistsXmlTransformer implements Transformer {
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
// first read the resource using the lazy map
CmsResource resource = (CmsResource)getReadResource().get(input);
return Boolean.valueOf((resource != null)
&& (CmsResourceTypeXmlPage.isXmlPage(resource) || CmsResourceTypeXmlContent.isXmlContent(resource)));
}
}
/**
* Transformer that a properties of a resource from the OpenCms VFS,
* the input is used as String for the property name to read.<p>
*/
public class CmsPropertyLoaderSingleTransformer implements Transformer {
/** The resource where the properties are read from. */
private CmsResource m_resource;
/** Indicates if properties should be searched when loaded. */
private boolean m_search;
/**
* Creates a new property loading Transformer.<p>
*
* @param resource the resource where the properties are read from
* @param search indicates if properties should be searched when loaded
*/
public CmsPropertyLoaderSingleTransformer(CmsResource resource, boolean search) {
m_resource = resource;
m_search = search;
}
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
String result;
try {
// read the properties of the requested resource
result = getCmsObject().readPropertyObject(m_resource, String.valueOf(input), m_search).getValue();
} catch (CmsException e) {
// in case of any error we assume the property does not exist
result = null;
}
return result;
}
}
/**
* Transformer that loads properties of a resource from the OpenCms VFS with another lazy map,
* the input is used as String for the resource name to read.<p>
*/
public class CmsPropertyLoaderTransformer implements Transformer {
/** Indicates if properties should be searched when loaded. */
private boolean m_search;
/**
* Creates a new property loading Transformer.<p>
*
* @param search indicates if properties should be searched when loaded
*/
public CmsPropertyLoaderTransformer(boolean search) {
m_search = search;
}
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
Map result = null;
// first read the resource using the lazy map
CmsResource resource = (CmsResource)getReadResource().get(input);
if (resource != null) {
result = LazyMap.decorate(new HashMap(), new CmsPropertyLoaderSingleTransformer(resource, m_search));
}
// result may still be null
return (result == null) ? Collections.EMPTY_MAP : result;
}
}
/**
* Transformer that loads a resource from the OpenCms VFS,
* the input is used as String for the resource name to read.<p>
*/
public class CmsResourceLoaderTransformer implements Transformer {
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
CmsResource result;
try {
// read the requested resource
result = CmsJspElFunctions.convertResource(getCmsObject(), input);
} catch (CmsException e) {
// unable to read resource, return null
result = null;
}
return result;
}
}
/**
* Transformer that calculates links to resources in the OpenCms VFS,
* the input is used as String for the resource name to use as link target.<p>
*
* This is using the same logic as
* {@link org.opencms.jsp.CmsJspTagLink#linkTagAction(String, javax.servlet.ServletRequest)}.<p>
*/
public class CmsVfsLinkTransformer implements Transformer {
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
return OpenCms.getLinkManager().substituteLink(
getCmsObject(),
CmsLinkManager.getAbsoluteUri(String.valueOf(input), getCmsObject().getRequestContext().getUri()));
}
}
/**
* Provides XML content access beans for VFS resources.<p>
*/
public class CmsXmlContentAccessTransformer implements Transformer {
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
CmsJspContentAccessBean result = null;
// first read the resource using the lazy map
CmsResource resource = (CmsResource)getReadResource().get(input);
if ((resource != null)
&& (CmsResourceTypeXmlPage.isXmlPage(resource) || CmsResourceTypeXmlContent.isXmlContent(resource))) {
// make sure we have a resource that really is an XML content
result = new CmsJspContentAccessBean(getCmsObject(), resource);
}
return result;
}
}
/** Request context attribute for indicating the model file for a create resource operation. */
public static final String ATTRIBUTE_VFS_ACCESS_BEAN = CmsJspVfsAccessBean.class.getName() + ".VFS_ACCESS_BEAN";
/** The OpenCms context of the current user. */
private CmsObject m_cms;
/** Contains booleans that indicate if a resource exists in the VFS. */
private Map m_existsResource;
/** Contains booleans that indicate if a resource exists and is an XML content. */
private Map m_existsXml;
/** Links calculated for the OpenCms VFS. */
private Map m_links;
/** Properties loaded from the OpenCms VFS. */
private Map m_properties;
/** Properties loaded from the OpenCms VFS with search. */
private Map m_propertiesSearch;
/** Resources loaded from the OpenCms VFS. */
private Map m_resources;
/** XML contents read from the VFS. */
private Map m_xmlContent;
/**
* Creates a new context bean using the OpenCms context of the current user.<p>
*
* @param cms the OpenCms context of the current user
*/
private CmsJspVfsAccessBean(CmsObject cms) {
m_cms = cms;
}
/**
* Creates a new instance of the JSP VFS access utility bean.<p>
*
* To prevent multiple creations of the bean during a request, the OpenCms request context
* attributes are used to cache the created VFS access utility bean.<p>
*
* @param cms the current OpenCms user context
*
* @return a new instance of the JSP VFS access utility bean
*/
public static CmsJspVfsAccessBean create(CmsObject cms) {
CmsJspVfsAccessBean result;
Object attribute = cms.getRequestContext().getAttribute(ATTRIBUTE_VFS_ACCESS_BEAN);
if (attribute != null) {
result = (CmsJspVfsAccessBean)attribute;
} else {
result = new CmsJspVfsAccessBean(cms);
cms.getRequestContext().setAttribute(ATTRIBUTE_VFS_ACCESS_BEAN, result);
}
return result;
}
/**
* Returns the OpenCms user context this bean was initialized with.<p>
*
* @return the OpenCms user context this bean was initialized with
*/
public CmsObject getCmsObject() {
return m_cms;
}
/**
* Short form for {@link #getRequestContext()}.<p>
*
* Usage example on a JSP with the EL:<pre>
* The current URI is: ${cms:vfs(pageContext).context.uri}
* </pre>
*
* @return the OpenCms request context the current user this bean was initialized with
*
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?