cmsjspcontentaccessbean.java
来自「找了很久才找到到源代码」· Java 代码 · 共 619 行 · 第 1/2 页
JAVA
619 行
/*
* File : $Source: /usr/local/cvs/opencms/src/org/opencms/jsp/util/CmsJspContentAccessBean.java,v $
* Date : $Date: 2007-09-05 11:19:35 $
* Version: $Revision: 1.6 $
*
* 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.CmsFile;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsResource;
import org.opencms.file.types.CmsResourceTypeXmlPage;
import org.opencms.i18n.CmsLocaleManager;
import org.opencms.main.CmsException;
import org.opencms.main.CmsRuntimeException;
import org.opencms.util.CmsConstantMap;
import org.opencms.xml.I_CmsXmlDocument;
import org.opencms.xml.content.CmsXmlContentFactory;
import org.opencms.xml.page.CmsXmlPageFactory;
import org.opencms.xml.types.I_CmsXmlContentValue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.map.LazyMap;
/**
* Allows access to the individual elements of an XML content, usually used inside a loop of a
* <code><cms:contentload></code> tag.<p>
*
* The implementation is optimized for performance and uses lazy initializing of the
* requested values as much as possible.<p>
*
* @author Alexander Kandzior
*
* @version $Revision: 1.6 $
*
* @since 7.0.2
*
* @see org.opencms.jsp.CmsJspTagContentAccess
*/
public class CmsJspContentAccessBean {
/**
* Provides Booleans that indicate if a specified locale is available in the XML content,
* the input is assumed to be a String that represents a Locale.<p>
*/
public class CmsHasLocaleTransformer implements Transformer {
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
return Boolean.valueOf(getRawContent().hasLocale(CmsJspElFunctions.convertLocale(input)));
}
}
/**
* Provides Booleans that indicate if a specified path exists in the XML content,
* the input is assumed to be a String that represents an xpath in the XML content.<p>
*/
public class CmsHasLocaleValueTransformer implements Transformer {
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
Locale locale = CmsJspElFunctions.convertLocale(input);
Map result;
if (getRawContent().hasLocale(locale)) {
result = LazyMap.decorate(new HashMap(), new CmsHasValueTransformer(locale));
} else {
result = CmsConstantMap.CONSTANT_BOOLEAN_FALSE_MAP;
}
return result;
}
}
/**
* Provides a Map with Booleans that indicate if a specified path exists in the XML content in the selected Locale,
* the input is assumed to be a String that represents an xpath in the XML content.<p>
*/
public class CmsHasValueTransformer implements Transformer {
/** The selected locale. */
private Locale m_selectedLocale;
/**
* Constructor with a locale.<p>
*
* @param locale the locale to use
*/
public CmsHasValueTransformer(Locale locale) {
m_selectedLocale = locale;
}
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
return Boolean.valueOf(getRawContent().hasValue(String.valueOf(input), m_selectedLocale));
}
}
/**
* Provides a Map which lets the user access value Lists from the selected locale in an XML content,
* the input is assumed to be a String that represents a Locale.<p>
*/
public class CmsLocaleValueListTransformer implements Transformer {
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
Locale locale = CmsJspElFunctions.convertLocale(input);
Map result;
if (getRawContent().hasLocale(locale)) {
result = LazyMap.decorate(new HashMap(), new CmsValueListTransformer(locale));
} else {
result = CmsConstantMap.CONSTANT_EMPTY_LIST_MAP;
}
return result;
}
}
/**
* Provides a Map which lets the user access a value from the selected locale in an XML content,
* the input is assumed to be a String that represents a Locale.<p>
*/
public class CmsLocaleValueTransformer implements Transformer {
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
Locale locale = CmsLocaleManager.getLocale(String.valueOf(input));
Map result;
if (getRawContent().hasLocale(locale)) {
result = LazyMap.decorate(new HashMap(), new CmsValueTransformer(locale));
} else {
result = CONSTANT_NULL_VALUE_WRAPPER_MAP;
}
return result;
}
}
/**
* Provides a Map which lets the user access value Lists in an XML content,
* the input is assumed to be a String that represents an xpath in the XML content.<p>
*/
public class CmsValueListTransformer implements Transformer {
/** The selected locale. */
private Locale m_selectedLocale;
/**
* Constructor with a locale.<p>
*
* @param locale the locale to use
*/
public CmsValueListTransformer(Locale locale) {
m_selectedLocale = locale;
}
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
List values = getRawContent().getValues(String.valueOf(input), m_selectedLocale);
List result = new ArrayList();
Iterator i = values.iterator();
while (i.hasNext()) {
// XML content API offers List of values only as Objects, must iterate them and create Strings
I_CmsXmlContentValue value = (I_CmsXmlContentValue)i.next();
result.add(CmsJspContentAccessValueWrapper.createWrapper(getCmsObject(), value));
}
return result;
}
}
/**
* Provides a Map which lets the user access a value in an XML content,
* the input is assumed to be a String that represents an xpath in the XML content.<p>
*/
public class CmsValueTransformer implements Transformer {
/** The selected locale. */
private Locale m_selectedLocale;
/**
* Constructor with a locale.<p>
*
* @param locale the locale to use
*/
public CmsValueTransformer(Locale locale) {
m_selectedLocale = locale;
}
/**
* @see org.apache.commons.collections.Transformer#transform(java.lang.Object)
*/
public Object transform(Object input) {
I_CmsXmlContentValue value = getRawContent().getValue(String.valueOf(input), m_selectedLocale);
return CmsJspContentAccessValueWrapper.createWrapper(getCmsObject(), value);
}
}
/** Constant Map that always returns the {@link CmsJspContentAccessValueWrapper#NULL_VALUE_WRAPPER}.*/
protected static final Map CONSTANT_NULL_VALUE_WRAPPER_MAP = new CmsConstantMap(
CmsJspContentAccessValueWrapper.NULL_VALUE_WRAPPER);
/** The OpenCms context of the current user. */
private CmsObject m_cms;
/** The XMl content to access. */
private I_CmsXmlDocument m_content;
/** The lazy initialized map for the "has locale" check. */
private Map m_hasLocale;
/** The lazy initialized map for the "has locale value" check. */
private Map m_hasLocaleValue;
/** The selected locale for accessing entries from the XML content. */
private Locale m_locale;
/** The lazy initialized with the locale value. */
private Map m_localeValue;
/** The lazy initialized with the locale value lists. */
private Map m_localeValueList;
/** Resource the XML content is created from. */
private CmsResource m_resource;
/**
* No argument constructor, required for a JavaBean.<p>
*
* You must call {@link #init(CmsObject, Locale, I_CmsXmlDocument, CmsResource)} and provide the
* required values when you use this constructor.<p>
*
* @see #init(CmsObject, Locale, I_CmsXmlDocument, CmsResource)
*/
public CmsJspContentAccessBean() {
// must call init() manually later
}
/**
* Creates a content access bean based on a Resource, using the current request context locale.<p>
*
* @param cms the OpenCms context of the current user
* @param resource the resource to create the content from
*/
public CmsJspContentAccessBean(CmsObject cms, CmsResource resource) {
this(cms, cms.getRequestContext().getLocale(), resource);
}
/**
* Creates a content access bean based on a Resource.<p>
*
* @param cms the OpenCms context of the current user
* @param locale the Locale to use when accessing the content
* @param resource the resource to create the content from
*/
public CmsJspContentAccessBean(CmsObject cms, Locale locale, CmsResource resource) {
init(cms, locale, null, resource);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?