/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) 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 GmbH, 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 java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
/**
* CmsDecorationBundle, contains a map of merged CmsDEcorationMaps.<p>
*
* The map inside the decoration bundle uses the decoration as keys and CmsDecorationObjects as values.<p>
*
* A decoration bundle contains either all decoarions for one locale (similar to a resource bundle), or
* is locale independend. If its a locale independend bundle, the included locale is set to null.
*
*
* @since 6.1.3
*/
public class CmsDecorationBundle {
/** The bundle map. */
private Map m_bundle;
/** The locale of this bundle. */
private Locale m_locale;
/**
* Constructor, creates a new, empty CmsDecorationBundle.<p>
*/
public CmsDecorationBundle() {
m_bundle = new HashMap();
m_locale = null;
}
/**
* Constructor, creates a new CmsDecorationBundle for a given locale.<p>
*
* @param locale the locale of this bundle or null
*/
public CmsDecorationBundle(Locale locale) {
m_bundle = new HashMap();
m_locale = locale;
}
/**
* Gets an object from the decoration bundle.<p>
* @param key the key of the object ot get
* @return the value matching the key or null.
*/
public Object get(Object key) {
return m_bundle.get(adjustKey(key.toString()));
}
/**
* Gets the map of all decoarion bundle entries.<p>
* @return map of all decoarion bundle entries
*/
public Map getAll() {
return m_bundle;
}
/**
* Gets the locale of this decoration bundle.<p>
* @return locale of the decoration bundle
*/
public Locale getLocale() {
return m_locale;
}
/**
* Gets the keyset of the decoration bundle map.<p>
* @return keyset of the decoration bundle map
*/
public Set keySet() {
return m_bundle.keySet();
}
/**
* Stores an obiect in the decoration bundle.<p>
* @param key the key of the object to store
* @param value the value of the object to store
*/
public void put(Object key, Object value) {
m_bundle.put(key, value);
}
/**
* Puts a complete map of objects into bundle.<p>
* @param map the map to put into the bundle
*/
public void putAll(Map map) {
m_bundle.putAll(map);
}
/**
* Sets the locale of the decoration bundle.<p>
* @param locale the locale to set
*/
public void setLocale(Locale locale) {
m_locale = locale;
}
/**
* Adjusts the key for the decoration.<p>
* The following adjustments are made:
* <ul>
* <li> is replaced with space</li>
* <li>multiple spaces are replaced with a single space</li>
* </ul>
* @param key the key to adjust
* @return the adjusted key
*/
private String adjustKey(String key) {
// replace the with spaces
key = key.replaceAll(" ", " ");
// now eleiminate all double spaces
int keyLen;
do {
keyLen = key.length();
key = key.replaceAll(" ", " ");
} while (key.length() != keyLen);
return key;
}
}