All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.jsp.decorator.CmsDecorationMap Maven / Gradle / Ivy

/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (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 GmbH & Co. KG, 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.decorator;

import org.opencms.file.CmsFile;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsResource;
import org.opencms.i18n.CmsLocaleManager;
import org.opencms.main.CmsException;
import org.opencms.main.CmsLog;
import org.opencms.util.CmsStringUtil;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import org.apache.commons.logging.Log;

/**
 * The CmsDecorationMap is the object representation of a single decoartion file.

* * The semicolon seperated elements of the decoartion file are stored in a map.

* The map uses the decoration as keys and CmsDecorationObjects as values.

* Multiple CmsDecorationMaps form a CmsDecorationBundle. * * @since 6.1.3 */ public class CmsDecorationMap implements Comparable { /** The seperator for the CSV file. */ public static final String CSV_SEPERATOR = "|"; /** The log object for this class. */ private static final Log LOG = CmsLog.getLog(CmsDecorationMap.class); /** The map to store all elements in. */ private Map m_decorationMap; /** The decorator defintion to be used for this decoration map. */ private CmsDecorationDefintion m_decoratorDefinition; /** The locale of this decoration map. */ private Locale m_locale; /** The name of the decoration map. */ private String m_name; /** * Constructor, creates a new, empty CmsDecorationMap.

* * @param decDef the CmsDecorationDefintion to be used in this decoration map * @param name The name of the decoration map * @param locale the locale for this decoration map */ public CmsDecorationMap(CmsDecorationDefintion decDef, String name, Locale locale) { m_decoratorDefinition = decDef; m_name = name; m_locale = locale; m_decorationMap = new HashMap(); } /** * Constructor, creates a new CmsDecorationMap.

* * @param cms the CmsObject * @param res the resource to extrace the decorations from * @param decDef the CmsDecorationDefintion to be used in this decoration map * @throws CmsException if something goes wrong */ public CmsDecorationMap(CmsObject cms, CmsResource res, CmsDecorationDefintion decDef) throws CmsException { m_decoratorDefinition = decDef; m_name = res.getName(); m_locale = extractLocale(); m_decorationMap = fillMap(cms, res); } /** * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(CmsDecorationMap o) { return m_name.compareTo(o.getName()); } /** * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof CmsDecorationMap) { return ((CmsDecorationMap)obj).m_name.equals(m_name); } return false; } /** * Returns the decorationMap.

* * @return the decorationMap */ public Map getDecorationMap() { return m_decorationMap; } /** * Returns the locale.

* * @return the locale */ public Locale getLocale() { return m_locale; } /** * Returns the name.

* * @return the name */ public String getName() { return m_name; } /** * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return m_name.hashCode(); } /** * Sets the decorationMap.

* * @param decorationMap the decorationMap to set */ public void setDecorationMap(Map decorationMap) { m_decorationMap = decorationMap; } /** * @see java.lang.Object#toString() */ @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append(this.getClass().getName()); buf.append(" [name = '"); buf.append(m_name); buf.append("' locale="); buf.append(m_locale); buf.append("' mapsize="); buf.append(m_decorationMap.size()); buf.append("]"); return buf.toString(); } /** * Extracts the locale from the decoration filename.

* *@return locale extraced form filename or null */ private Locale extractLocale() { Locale loc = null; int underscore = m_name.lastIndexOf("_"); if (underscore > -1) { String localeName = m_name.substring(underscore + 1); if (localeName.lastIndexOf(".") > -1) { localeName = localeName.substring(0, localeName.lastIndexOf(".")); } loc = CmsLocaleManager.getLocale(localeName); } return loc; } /** * Fills the decoration map with values from the decoation file.

* * @param cms the CmsObject * @param res the decoration file * @return decoration map, using decoration as key and decoration description as value * @throws CmsException if something goes wrong */ private Map fillMap(CmsObject cms, CmsResource res) throws CmsException { if (LOG.isDebugEnabled()) { LOG.debug( Messages.get().getBundle().key(Messages.LOG_DECORATION_MAP_FILL_MAP_2, m_name, m_decoratorDefinition)); } Map decMap = new HashMap(); // upgrade the resource to get the file content CmsFile file = cms.readFile(res); // get all the entries String unparsedContent = new String(file.getContents()); String delimiter = "\r\n"; if (unparsedContent.indexOf(delimiter) == -1) { // there was no \r\n delimiter in the csv file, so check if the lines are seperated by // \n only if (unparsedContent.indexOf("\n") > -1) { delimiter = "\n"; } } if (LOG.isDebugEnabled()) { LOG.debug( Messages.get().getBundle().key( Messages.LOG_DECORATION_MAP_FILL_MAP_DELIMITER_2, res.getName(), CmsStringUtil.escapeJavaScript(delimiter))); } List entries = CmsStringUtil.splitAsList(unparsedContent, delimiter); if (LOG.isDebugEnabled()) { LOG.debug( Messages.get().getBundle().key( Messages.LOG_DECORATION_MAP_FILL_MAP_SPLIT_LIST_2, res.getName(), entries)); } Iterator i = entries.iterator(); while (i.hasNext()) { try { String entry = i.next(); // extract key and value if (CmsStringUtil.isNotEmpty(entry)) { int speratator = entry.indexOf(CSV_SEPERATOR); if (speratator > -1) { String key = entry.substring(0, speratator).trim(); String value = entry.substring(speratator + 1).trim(); if (CmsStringUtil.isNotEmpty(key) && CmsStringUtil.isNotEmpty(value)) { CmsDecorationObject decObj = new CmsDecorationObject( key, value, m_decoratorDefinition, m_locale); decMap.put(key, decObj); if (LOG.isDebugEnabled()) { LOG.debug( Messages.get().getBundle().key( Messages.LOG_DECORATION_MAP_ADD_DECORATION_OBJECT_2, decObj, key)); } } } } } catch (Exception e) { if (LOG.isErrorEnabled()) { LOG.error(Messages.get().getBundle().key(Messages.LOG_DECORATION_MAP_FILL_2, m_name, e)); } } } return decMap; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy