You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ma...@apache.org on 2010/07/08 17:20:02 UTC
svn commit: r961798 [2/2] -
/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuUtils.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuUtils.java?rev=961798&r1=961797&r2=961798&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuUtils.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuUtils.java Thu Jul 8 15:20:01 2010
@@ -1,455 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.myfaces.trinidadinternal.menu;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.Set;
-
-import javax.faces.context.FacesContext;
-
-import org.apache.myfaces.trinidad.logging.TrinidadLogger;
-import org.apache.myfaces.trinidad.util.ContainerUtils;
-import org.apache.myfaces.trinidad.util.ThreadLocalUtils;
-
-/**
- * Menu Utilities used by the Menu Model internal code.
- * All classes are package private.
- *
- */
-class MenuUtils
-{
- MenuUtils() {}
-
- //=======================================================================
- // String, Stringbuffer utilities
- //=======================================================================
- /**
- * Returns a String with the first occurrence of str1 replaced with str2
- * in fullstring
- *
- * @param fullstring - The full string
- * @param str1 - String to be found in fullstring
- * @param str2 - String to replace the first occurrence of str1
- * @return String
- */
- static String stringReplaceFirst(String fullstring, String str1, String str2)
- {
- if (fullstring == null)
- return null;
-
- StringBuffer returnStr =
- stringBufferReplaceFirst(new StringBuffer(fullstring), str1, str2);
- return returnStr.toString();
- }
-
- /**
- * Returns a StringBuffer with the first occurrence of str1 replaced with str2
- * in fullBuf
- *
- * @param fullBuf - The full stringbuffer
- * @param str1 - String to be found in fullBuf
- * @param str2 - String to replace the first occurrence of str1
- * @return StringBuffer
- */
- static StringBuffer stringBufferReplaceFirst(StringBuffer fullBuf, String str1,
- String str2)
- {
- if (fullBuf == null)
- return null;
-
- String fullstr = fullBuf.toString();
-
- // All Cases that just return fullBuf
- if (str1 == null || str2 == null)
- return fullBuf;
- if ("".equals(fullstr) && !"".equals(str1))
- return fullBuf;
-
- // if the string being replaced is not found, return
- int startIdx = fullBuf.indexOf(str1);
- if (startIdx == -1)
- return fullBuf;
-
- // We are ok, now go ahead
- int foundLen = str1.length();
- int endIdx = startIdx + foundLen;
-
- StringBuffer returnBuf = fullBuf.replace(startIdx, endIdx, str2);
- return returnBuf;
- }
-
- //=======================================================================
- // Bound Value/EL Expression utilities
- //=======================================================================
-
- /**
- * Gets the bound value of an EL expression
- *
- * @param elExpression - String representing an EL expression
- */
- static <T> T getBoundValue(String elExpression, Class<T> desiredClass)
- {
- try
- {
- if (desiredClass == null)
- throw new NullPointerException();
-
- FacesContext ctx = FacesContext.getCurrentInstance();
- return (T) ctx.getApplication().evaluateExpressionGet(ctx,
- elExpression,
- desiredClass);
- }
- catch (Exception ex)
- {
- _LOG.severe("EL Expression " + elExpression +
- " is invalid or returned a bad value.\n", ex);
- _LOG.severe(ex);
- return null;
- }
- }
-
- /**
- * Evaluate an attribute value string representing a boolean value
- * and return its boolean value. There are 3 possible valid values for
- * boolStr:
- * o EL Expression (that returns a boolean)
- * o the string "true"
- * o the string "false"
- *
- * In the case of another string being passed in, the default value
- * of the attribute is returned.
- *
- * @param boolStr - String to be evaluated into a boolean.
- * @param defaultVal - The default boolean value to be returned in the case
- * where and invalid boolstr is passed in.
- * @return boolean value equivalent of boolStr
- */
- static boolean evalBoolean (String boolStr, boolean defaultVal)
- {
- if ( boolStr != null
- && ContainerUtils.isValueReference(boolStr)
- )
- {
- Boolean bValue = getBoundValue(boolStr, Boolean.class);
- return bValue.booleanValue();
- }
- else
- {
- if ("true".equals(boolStr) || "false".equals(boolStr))
- return (Boolean.valueOf(boolStr)).booleanValue();
- else
- return defaultVal;
- }
- }
-
- /**
- * Evaluate a string representing an EL expression.
- *
- * @param propVal - string to be evaluated.
- * @return the string bound value of the EL Expression
- */
- static String evalString(String propVal)
- {
- if ( propVal != null
- && ContainerUtils.isValueReference(propVal)
- )
- {
- String elVal = getBoundValue(propVal, String.class);
- return elVal;
- }
- return propVal;
- }
-
- /**
- * Evaluate a string representing an EL expression.
- *
- * @param propVal - string to be evaluated.
- * @return the int bound value of the EL Expression
- */
- static int evalInt(String propVal)
- {
- if ( propVal != null
- && ContainerUtils.isValueReference(propVal)
- )
- {
- Integer elVal = getBoundValue(propVal, Integer.class);
- return elVal.intValue();
- }
- return Integer.parseInt(propVal);
- }
-
- /**
- * Create a ResourceBundle and put it on the Session map.
- *
- * @param resBundle - String containing name of class containing the resource
- * bundle.
- * @param key - ThreadLocal key for the resource bundle being put on the
- * requestMap
- */
- @SuppressWarnings("unchecked")
- static void loadBundle(String resBundle, ThreadLocal<String> key)
- {
- FacesContext facesContext = FacesContext.getCurrentInstance();
- Map<String, Object> applicationMap =
- facesContext.getExternalContext().getApplicationMap();
-
- // Get the view root locale
- Locale requestLocale = facesContext.getViewRoot().getLocale();
-
- // Make sure it is not null
- if (requestLocale == null)
- {
- requestLocale = facesContext.getApplication().getDefaultLocale();
- }
-
- // Is there a bundle with this key already on the session map?
- _BundleMap bundleMap = (_BundleMap) applicationMap.get(key.get());
-
- // if so, get its locale. If the locale has not
- // changed, just return, i.e. use the existing bundle
- if (bundleMap != null)
- {
- Locale bundleLocale = bundleMap.getLocale();
-
- if (bundleLocale == null)
- {
- ResourceBundle rb = bundleMap.getBundle();
- bundleLocale = rb.getLocale();
- }
-
- if (requestLocale == bundleLocale)
- {
- // the bundle on the applicationMap is ok so just return
- return;
- }
- }
-
- String bundleName = null;
-
- if (resBundle != null)
- {
- // if _bundleName is an EL, then get its value
- if (ContainerUtils.isValueReference(resBundle))
- {
- bundleName = MenuUtils.getBoundValue(resBundle, String.class);
- }
- else
- {
- bundleName = resBundle ;
- }
- }
-
- final ResourceBundle bundle;
-
- try
- {
- bundle = ResourceBundle.getBundle(bundleName, requestLocale);
- }
- catch (MissingResourceException e)
- {
- _LOG.severe("RESOURCE_BUNDLE_NOT_FOUND", bundleName);
- _LOG.severe(e);
- return;
- }
-
- // Put the bundle in the map. At this point the key is
- // unique because of the handler Id we inserted when loadBundle
- // was called.
- applicationMap.put(key.get(), new _BundleMap(bundle, requestLocale));
- }
-
- /**
- * Create a ResourceBundle and put it on the Session map.
- * The key is made into a ThreadLocal to ensure that this the resource
- * bundle is threadsafe.
- *
- * @param resBundleName - String containing name of class containing the
- * resource bundle.
- * @param resBundleKey - String key for the resource bundle being put on the
- * requestMap
- */
- @SuppressWarnings("unchecked")
- static void loadBundle(String resBundleName, String resBundleKey)
- {
- ThreadLocal<String> bundleKey = ThreadLocalUtils.newRequestThreadLocal();
-
- bundleKey.set(resBundleKey);
- loadBundle(resBundleName, bundleKey);
- }
-
- /**
- * Map containing a resource bundle and its key that is placed
- * on the http request map. This resource bundle is used by the menu
- * model metadata to externalize strings, such as tab labels, for
- * translation.
- */
- @SuppressWarnings("unchecked")
- static private class _BundleMap implements Map<String, String>
- {
- private ResourceBundle _bundle;
- private Locale _locale;
- private List<String> _values;
-
- public _BundleMap(ResourceBundle bundle)
- {
- _bundle = bundle;
- _locale = bundle.getLocale();
- }
-
- public _BundleMap(ResourceBundle bundle, Locale locale)
- {
- _bundle = bundle;
- _locale = locale;
- }
-
- //Optimized methods
- public String get(Object key)
- {
- try
- {
- return _bundle.getString(key.toString());
- }
- catch (Exception e)
- {
- return "!!!" + key + "!!!";
- }
- }
-
- public boolean isEmpty()
- {
- return !_bundle.getKeys().hasMoreElements();
- }
-
- public boolean containsKey(Object key)
- {
- return _bundle.getObject(key.toString()) != null;
- }
-
- //Unoptimized methods
- public Collection<String> values()
- {
- if (_values == null)
- {
- _values = new ArrayList<String>();
- for (Enumeration<String> enumer = _bundle.getKeys();
- enumer.hasMoreElements(); )
- {
- String v = _bundle.getString(enumer.nextElement());
- _values.add(v);
- }
- }
- return _values;
- }
-
- public int size()
- {
- return values().size();
- }
-
- public boolean containsValue(Object value)
- {
- return values().contains(value);
- }
-
- public Set<Map.Entry<String, String>> entrySet()
- {
- Set<Map.Entry<String, String>> set = new HashSet<Map.Entry<String, String>>();
-
- for (Enumeration<String> enumer = _bundle.getKeys(); enumer.hasMoreElements(); )
- {
- final String k = enumer.nextElement();
- set.add(new Map.Entry<String, String>()
- {
- public String getKey()
- {
- return k;
- }
-
- public String getValue()
- {
- return _bundle.getString(k);
- }
-
- public String setValue(String value)
- {
- throw new UnsupportedOperationException();
- }
- });
- }
- return set;
- }
-
- public Set<String> keySet()
- {
- Set<String> set = new HashSet<String>();
- for (Enumeration<String> enumer = _bundle.getKeys(); enumer.hasMoreElements(); )
- {
- set.add(enumer.nextElement());
- }
- return set;
- }
-
- //Unsupported methods
- public String remove(Object key)
- {
- throw new UnsupportedOperationException();
- }
-
- public void putAll(Map<? extends String, ? extends String> t)
- {
- throw new UnsupportedOperationException();
- }
-
- public String put(String key, String value)
- {
- throw new UnsupportedOperationException();
- }
-
- public void clear()
- {
- throw new UnsupportedOperationException();
- }
-
- public ResourceBundle getBundle()
- {
- return _bundle;
- }
-
- public Locale getLocale()
- {
- return _locale;
- }
- } // endclass _BundleMap
-
- private final static TrinidadLogger _LOG =
- TrinidadLogger.createTrinidadLogger(MenuUtils.class);
-}
-
-
-
-
-