You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by aw...@apache.org on 2006/08/16 07:00:19 UTC
svn commit: r431848 [5/6] - in /incubator/adffaces/trunk/trinidad: ./
trinidad-api/src/main/java-templates/org/apache/myfaces/trinidad/component/
trinidad-api/src/main/java/org/apache/myfaces/trinidad/bean/
trinidad-api/src/main/java/org/apache/myfaces...
Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuNode.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuNode.java?rev=431848&r1=431847&r2=431848&view=diff
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuNode.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuNode.java Wed Aug 16 00:00:16 2006
@@ -1,804 +1,806 @@
-/*
- * @(#)MenuNode.java
- *
- * Copyright 2006 The Apache Software Foundation.
- *
- * Licensed 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.List;
-
-import java.util.Map;
-
-import javax.faces.context.FacesContext;
-import javax.faces.webapp.UIComponentTag;
-
-import org.xml.sax.Attributes;
-
-import org.apache.myfaces.trinidad.model.XMLMenuModel;
-
-/**
- * Code generic to a Menu Nodes of the menu model.
- *
- * IMPORTANT NOTE: even internally, values that support EL expressions
- * should use the "get" methods to obtain values.
- *
- * @author Kris McQueen and Gary Kind
- */
-
-public class MenuNode
-{
- /**
- * Constructs a MenuNode
- */
- public MenuNode()
- {}
-
- /**
- * Set the menu item's label.
- *
- * @param label - String name shown in the menu item
- */
- public void setLabel(String label)
- {
- _label = label;
- }
-
- /**
- * Get the menu item's label
- *
- * This could either be a string value set directly in
- * the metadata or an EL expression string. In the case
- * of an EL expression, we need to get its bound value.
- *
- * @return label as a String
- */
- public String getLabel()
- {
- if (_bundleKey != null && _bundleName != null)
- {
- // Load the resource bundle based on the locale of the
- // current request. If the locale has not changed, this
- // method just returns.
- MenuUtils.loadBundle(_bundleName, _bundleKey + getHandlerId());
- }
-
- if ( _label != null
- && UIComponentTag.isValueReference(_label)
- )
- {
- _label = _evalElStr(_label);
- }
- return _label;
- }
-
- /**
- * Set the icon used by the menu item.
- *
- * @param icon - the String URI to the icon.
- */
- public void setIcon(String icon)
- {
- _icon = icon;
- }
-
- /**
- * Get the icon used by the menu item
- * This could either be a string value set directly in
- * the metadata or an EL expression string. In the case
- * of an EL expression, we need to get its bound value.
- *
- * @return icon - the String URI to the icon.
- */
- public String getIcon()
- {
- return MenuUtils.evalString(_icon);
- }
-
- /**
- * Sets the rendered attribute of the menu item.
- * If false, menu item will not appear.
- *
- * @param rendered - boolean that toggles the visible state of the XMLMenuModel
- * item.
- */
- public void setRendered(boolean rendered)
- {
- _renderedStr = rendered ? "true" : "false";
- }
-
- /**
- * Gets the rendered attribute of the menu item.
- * If false, menu item will not appear.
- *
- * @return boolean indicating whether or not the menu item is visible.
- */
- public boolean getRendered()
- {
- boolean rendered = MenuUtils.evalBoolean(_renderedStr, true);
- return rendered;
- }
-
- /**
- * Sets the disabled attribute of the menu item.
- * If true, menu item will not appear greyed-out and clicking
- * on it will have no effect
- *
- * @param disabled - boolean that toggles the enabled/disabled state of the
- * menu item.
- */
- public void setDisabled(boolean disabled)
- {
- _disabledStr = disabled ? "true" : "false";
- }
-
- /**
- * Gets the disabled attribute of the menu item.
- * If true, menu item will not appear greyed-out and clicking
- * on it will have no effect
- *
- * @return boolean indicating whether or not the menu item is disabled.
- */
- public boolean getDisabled()
- {
- boolean disabled = MenuUtils.evalBoolean(_disabledStr, false);
- return disabled;
- }
-
- /**
- * Sets the visible attribute of the menu item.
- * If false, menu item will not appear
- *
- * @param visible - boolean that toggles the visible state of the
- * menu item.
- */
- public void setVisible(boolean visible)
- {
- _visibleStr = visible ? "true" : "false";
- }
-
- /**
- * Gets the visible attribute of the menu item.
- * If false, menu item will not appear
- *
- * @return boolean indicating whether or not the menu item is visible.
- */
- public boolean getVisible()
- {
- boolean visible = MenuUtils.evalBoolean(_visibleStr, true);
- return visible;
- }
-
- /**
- * Sets the defaultFocusPath attribute of the menu item.
- *
- * @param defaultFocusPath - boolean that tells the XMLMenuModel model that
- * the focus path to this node should be used in cases where the focus path
- * is not determinable by the XMLMenuModel model.
- */
- public void setDefaultFocusPath(boolean defaultFocusPath)
- {
- _defaultFocusPathStr = defaultFocusPath ? "true" : "false";
- }
-
- /**
- * Gets the defaultFocusPath attribute of the menu item.
- *
- * @return boolean indicating whether or not this is the focus path to use,
- * by default, in cases where there are duplicate paths to this node and
- * the focus path is not determinable by the XMLMenuModel model.
- */
- public boolean getDefaultFocusPath()
- {
- boolean defaultFocusPath = MenuUtils.evalBoolean(_defaultFocusPathStr,
- false);
- return defaultFocusPath;
- }
-
- /**
- * Get the List of menu item's children.
- *
- * @return List of menu item's children
- */
- public List getChildren()
- {
- return _children;
- }
-
- /**
- * Set the List of menu item's children.
- *
- * @param children - List of MenuNode children for this MenuNode
- */
- public void setChildren(List children)
- {
- _children = children;
- }
-
- /**
- * Gets the readOnly state of the node.
- *
- * @return the node's readOnly state as a boolean.
- */
- public boolean getReadOnly()
- {
- boolean readOnly = MenuUtils.evalBoolean(_readOnlyStr, false);
- return readOnly;
- }
-
- /**
- * Sets the the value of the readOnly attribute of the node.
- *
- * @param readOnly - boolean setting readOnly state of the node
- */
- public void setReadOnly(boolean readOnly)
- {
- _readOnlyStr = readOnly ? "true" : "false";
- }
-
- /**
- * Sets the value of the node's focusViewId property.
- *
- * @param focusViewId - string value of the Node's "focusViewId" property.
- */
- public void setFocusViewId(String focusViewId)
- {
- _focusViewId = focusViewId;
- }
-
- /**
- * Gets the value of the node's focusViewId property.
- *
- * @return string - the value of the Node's "focusViewId" property.
- */
- public String getFocusViewId()
- {
- return _focusViewId;
- }
-
- /**
- * Sets the rendered attribute of the menu item.
- * If false, menu item will not appear.
- *
- * Called only from MenuContentHandlerImpl during parsing of metadata.
- *
- * @param renderedStr - string representing a boolean value
- */
- public void setRendered(String renderedStr)
- {
- _renderedStr = renderedStr;
- }
-
- /**
- * Sets the disabled attribute of the menu item.
- * If false, menu item will appear in a disabled state.
- *
- * @param disabledStr - string representing a boolean value or
- * an EL Expression
- */
- public void setDisabled(String disabledStr)
- {
- _disabledStr = disabledStr;
- }
-
- /**
- * Sets the readOnly attribute of the menu item.
- * If false, menu item will appear in a readOnly state.
- *
- * @param readOnlyStr - string representing a boolean value or EL
- * expression.
- */
- public void setReadOnly(String readOnlyStr)
- {
- _readOnlyStr = readOnlyStr;
- }
-
- /**
- * Sets the visible attribute of the menu item.
- * If false, menu item will not appear.
- *
- * @param visibleStr - string representing a boolean value or
- * an EL Expression
- */
- public void setVisible(String visibleStr)
- {
- _visibleStr = visibleStr;
- }
-
- /**
- * Sets the defaultFocusPath attribute of the menu item.
- *
- * Called only from MenuContentHandlerImpl during parsing of metadata.
- *
- * @param defaultFocusPathStr - string representing a boolean value
- */
- public void setDefaultFocusPath(String defaultFocusPathStr)
- {
- _defaultFocusPathStr = defaultFocusPathStr;
- }
-
- /**
- * setAccessKey - Takes either a single character String or
- * an EL expression and sets the value of the accessKey attribute
- * of the node.
- *
- * @param accessKey - Single character String or EL expression
- * representing the label's access key.
- */
- public void setAccessKey (String accessKey)
- {
- if ( accessKey != null
- && UIComponentTag.isValueReference(accessKey)
- )
- {
- // EL Expression
- _accessKey = accessKey;
- }
- else
- {
- // accessKey cannot be more than one character
- if (accessKey != null && accessKey.length() > 1)
- return;
-
- _accessKey = accessKey;
- }
- }
-
- /**
- * setAccessKey - Takes a single character and sets the value of the
- * accessKey attribute of the node.
- *
- * @param accessKey - Single character label access key.
- */
- public void setAccessKey (char accessKey)
- {
- char[] charArray = {'\0'};
-
- charArray[0] = accessKey;
- _accessKey = String.copyValueOf(charArray);
- }
-
- /**
- * getAccessKey - get the label's accessKey as a char.
- *
- * @return the access key of the label as a char.
- */
- public char getAccessKey()
- {
- String accessKeyStr = MenuUtils.evalString(_accessKey);
-
- if (accessKeyStr == null || accessKeyStr.length() > 1)
- return '\0';
-
- return accessKeyStr.charAt(0);
- }
-
- /**
- * setLabelAndAccessKey - Takes either an EL expression or a
- * String representing the label and accessKey together, and
- * sets the label and the accessKey separately.
- *
- * @param labelAndAccessKey - either and EL Expression or
- * a String representing the label and accessKey together.
- */
- public void setLabelAndAccessKey(String labelAndAccessKey)
- {
- int ampIdx = 0;
- _labelAndAccessKeyEL = false;
-
- // if EL expression, set it and the label to the same thing
- if ( labelAndAccessKey != null
- && UIComponentTag.isValueReference(labelAndAccessKey)
- )
- {
- _labelAndAccessKey = labelAndAccessKey;
- _labelAndAccessKeyEL = true;
- _accessKey = null;
- }
- else if ( labelAndAccessKey == null
- || (ampIdx = labelAndAccessKey.indexOf('&')) == -1
- )
- {
- // String is null or a label w/o an accesskey
- _label = labelAndAccessKey;
- _accessKey = null;
- }
- else if (ampIdx == (labelAndAccessKey.length() - 1))
- {
- // & is last character, strip it.
- _label = labelAndAccessKey.substring(0, ampIdx);
- _accessKey = null;
- }
- else
- {
- // We have a string with an accessKey somewhere
- _splitLabelAndAccessKey(labelAndAccessKey);
- }
- }
-
- /**
- * getLabelAndAccessKey - get the label and accessKey together
- * in a single string.
- *
- * @return a String containing (representing) the label and accessKey
- * together.
- */
- public String getLabelAndAccessKey()
- {
- // If labelAndAccessKey is an EL expression
- // we get it and process it, set the label
- // and the accessKey, null out labelAndAccessKey
- // and set labelAndAccessKeyEL to false
- if (_labelAndAccessKeyEL)
- {
- _labelAndAccessKey = _evalElStr(_labelAndAccessKey);
- setLabelAndAccessKey(_labelAndAccessKey);
- _labelAndAccessKey = null;
- _labelAndAccessKeyEL = false;
- }
- // Now it is a simple string, so we have already
- // set the label and accessKey. We get both the
- // label and accessKey, construct a labelAndAccessKey
- // and return it.
- String label = getLabel(); // This is a simple string
-
- if (_accessKey == null)
- return label; // String is just the label
-
- return _joinLabelAndAccessKey(label, _accessKey);
- }
-
- /**
- * setId - sets the id of the node.
- *
- * @param id - the identifier for the node component
- */
- public void setId (String id)
- {
- _id = id;
- }
-
- /**
- * getId - gets the id of the node.
- *
- * @return - String identifier for the node component.
- */
- public String getId()
- {
- return _id;
- }
-
- /*===========================================================================
- * getRefNode(), doAction(), & getDestination() are never called. They
- * are just here so that the same methods in itemNode.java and GroupNode.java
- * will compile.
- * ==========================================================================
- */
- /**
- * Get the node whose id matches this node's
- * idref attribute value.
- *
- * @return the MenuNode whose id matches this
- * node's idref attribute value.
- */
- public MenuNode getRefNode()
- {
- return this;
- }
-
- /**
- * Called by the Default ActionListener
- * when a menu node is clicked/selected.
- *
- * @return String outcome or viewId used
- * during a POST for navigation.
- */
- public String doAction()
- {
- // Call the doAction method of my idref node
- return getRefNode().doAction();
- }
-
- /**
- * Get the Destination URL of a page for a
- * GET.
- *
- * @return String URL of a page.
- */
- public String getDestination()
- {
- // Call the doAction method of my idref node
- return getRefNode().getDestination();
- }
-
- /**
- * Get the value of a custom attribute. This needs to be
- * public so that the menu model can call into the node
- * to get the value of a custom attribute.
- *
- * @param name String name of the custom attribute
- * @return Object value of the matching node
- */
- public Object getCustomProperty(String name)
- {
- String value = _customPropList.getValue(name);
-
- if ( value != null
- && UIComponentTag.isValueReference(value)
- )
- {
- return MenuUtils.getBoundValue(value);
- }
-
- return value;
- }
-
- /**
- * Get the Attributes containing the custom attributes on this node. This
- * needs to be public so that the menu model can get them.
- *
- * @return Attributes list containing the custom attributes on this node
- */
- public Attributes getCustomPropList()
- {
- return _customPropList;
- }
-
- /**
- * Set the list of custom attributes.
- *
- * @param attrList Attributes List for this node from MenuContentHandlerImpl
- */
- protected void setCustomPropList(Attributes attrList)
- {
- _customPropList = attrList;
- }
-
- /**
- * setResBundleKey - sets the name of the resource bundle used in
- * obtaining the node's label text. Used, along with the handerId,
- * to identify and get a string from the proper resource bundle.
- *
- * @param bundleKey - String name of the resource bundle.
- */
- protected void setResBundleKey(String bundleKey)
- {
- _bundleKey = bundleKey;
- }
-
- /**
- * setResBundleKey - sets the name of the resource bundle used in
- * obtaining the node's label text. Used, along with the handerId,
- * to identify and get a string from the proper resource bundle.
- *
- * @param bundleName - String name of the resource bundle.
- */
- protected void setResBundleName(String bundleName)
- {
- _bundleName = bundleName;
- }
-
- /**
- * setHandlerId - sets the MenuContentHandlerImpl's handlerId on the node.
- * Used, along with the bundleKey, to identify and get a string from the
- * proper resource bundle.
- *
- * @param handlerId String uniquely identifying the specific
- * MenuContentHandlerImpl that created this node.
- */
- protected void setHandlerId(String handlerId)
- {
- _handlerId = handlerId;
- }
-
- /**
- * Notifies the root model that this node has been selected on a POST
- *
- * @param selectedNode - The currently selected menu item.
- */
- protected void postSelectedNode(MenuNode selectedNode)
- {
- getRootModel().setCurrentlyPostedNode(selectedNode);
- }
-
- /**
- * Set the MenuContentHandlerImpl's id.
- *
- * This is appended to the node's id in getId() to
- * ensure that each node's id is unique.
- *
- * @return String object id of the MenuContentHandlerImpl
- */
- protected String getHandlerId()
- {
- return _handlerId;
- }
-
- /**
- * Get the top-level, root menu model, which contains
- * the entire menu tree.
- *
- * @return root, top-level XMLMenuModel
- */
- protected XMLMenuModel getRootModel()
- {
- FacesContext facesContext = FacesContext.getCurrentInstance();
- Map requestMap = facesContext.getExternalContext().getRequestMap();
-
- return (XMLMenuModel) requestMap.get(getRootModelUri());
- }
-
- /**
- * Get the top-level, root menu model's Uri.
- *
- * @return root, top-level XMLMenuModel's Uri
- */
- public String getRootModelUri()
- {
- return _rootModelUri;
- }
-
- /**
- * Sets the root menu Model's Uri.
- * <p>
- * This is always only the top-level, root model's Uri.
- * We do this because the MenuContentHandlerImpl and nodes need to be able
- * to call into the root model to:
- * <ul>
- * <li>notify them root menu model of the currently selected node on a POST
- * </ul>
- *
- * @param rootModelUri - String the root, top-level menu model's Uri.
- */
- public void setRootModelUri(String rootModelUri)
- {
- _rootModelUri = rootModelUri;
- }
-
- /**
- * _joinLabelAndAccessKey - takes a string label and string accessKey
- * and combines them into a single labelAndAccessKey string.
- *
- * @param label - String with node's label.
- * @param accessKey - One character String which is the label's accessKey.
- * @return
- */
- private String _joinLabelAndAccessKey(String label, String accessKey)
- {
- char[] keyArray = label.toCharArray();
- int len = label.length();
- int lentimes2 = len*2;
- char[] keyArray2 = new char[lentimes2];
- int i, j = 0;
- boolean accessKeyFound = false;
-
- // find the first occurrence of a single Ampersand
- for (i=0, j=0; i < len; i++, j++)
- {
- // AccessKey
- if ( keyArray[i] == accessKey.charAt(0)
- && !accessKeyFound
- )
- {
- keyArray2[j] = '&';
- j++;
- accessKeyFound = true;
- }
-
- keyArray2[j] = keyArray[i];
-
- // Ampersand as regular character
- // double it up.
- if (keyArray[i] == '&')
- {
- j++;
- keyArray2[j] = keyArray[i];
- }
- }
-
- String combinedLabel = new String(keyArray2, 0, j);
- return combinedLabel;
- }
-
- /**
- * _splitLabelAndAccessKey - takes a string containing a label
- * and an accessKey and breaks separates it and sets the label
- * and the accessKey separately.
- *
- * @param labelAndAccessKey - String holding both a label and
- * accessKey.
- */
- private void _splitLabelAndAccessKey(String labelAndAccessKey)
- {
- char[] keyArray = labelAndAccessKey.toCharArray();
- int len = labelAndAccessKey.length();
- char[] keyArray2 = new char[len];
- int i, j = 0;
- boolean accessKeyFound = false;
-
- for (i=0, j=0; i < len ; i++, j++)
- {
- if (keyArray[i] == '&')
- {
- i++;
-
- if (!accessKeyFound && keyArray[i] != '&')
- {
- // We have our accessKey
- _accessKey = labelAndAccessKey.substring(i, i+1);
- accessKeyFound = true;
- }
- }
-
- keyArray2[j] = keyArray[i];
- }
-
- String label = new String(keyArray2, 0, j);
- _label = label;
- }
-
- /**
- * _evalElStr - Evaluate an EL expression string.
- *
- * @param str - the EL expression
- * @return the bound value of the El expression as a String
- */
- private String _evalElStr(String str)
- {
- // Check to see if EL expression gets its value from a
- // resource bundle.
- String elVar = str.substring(2, str.indexOf('.'));
-
- if ( _bundleKey != null
- && _bundleKey.equals(elVar)
- )
- {
- // we have an EL expression to get a value from a
- // resource bundle
- elVar = str.substring(0, str.indexOf('.'));
- String elKey = str.substring(str.indexOf('.'));
- String elStr = elVar + getHandlerId() + elKey;
- String elVal = (String)MenuUtils.getBoundValue(elStr);
- return elVal;
- }
- else
- {
- // We have some other EL expression
- return (String)MenuUtils.getBoundValue(str);
- }
- }
-
- private String _label = null;
- private String _icon = null;
- private List _children = null;
- private String _focusViewId = null;
- private String _renderedStr = null;
- private String _disabledStr = null;
- private String _visibleStr = null;
- private String _readOnlyStr = null;
- private String _handlerId = null;
- private String _bundleKey = null;
- private String _bundleName = null;
- private String _accessKey = null;
- private String _id = null;
- private boolean _labelAndAccessKeyEL = false;
- private String _labelAndAccessKey = null;
- private String _defaultFocusPathStr = null;
-
- // Map for Custom attributes (properties)
- private Attributes _customPropList = null;
-
- // Menu model Uri's
- private String _rootModelUri = null;
-}
+/*
+ * @(#)MenuNode.java
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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.List;
+
+import java.util.Map;
+
+import javax.faces.context.FacesContext;
+import javax.faces.webapp.UIComponentTag;
+
+import org.xml.sax.Attributes;
+
+import org.apache.myfaces.trinidad.model.XMLMenuModel;
+
+/**
+ * Code generic to a Menu Nodes of the menu model.
+ *
+ * IMPORTANT NOTE: even internally, values that support EL expressions
+ * should use the "get" methods to obtain values.
+ *
+ * @author Kris McQueen and Gary Kind
+ */
+
+public class MenuNode
+{
+ /**
+ * Constructs a MenuNode
+ */
+ public MenuNode()
+ {}
+
+ /**
+ * Set the menu item's label.
+ *
+ * @param label - String name shown in the menu item
+ */
+ public void setLabel(String label)
+ {
+ _label = label;
+ }
+
+ /**
+ * Get the menu item's label
+ *
+ * This could either be a string value set directly in
+ * the metadata or an EL expression string. In the case
+ * of an EL expression, we need to get its bound value.
+ *
+ * @return label as a String
+ */
+ public String getLabel()
+ {
+ if (_bundleKey != null && _bundleName != null)
+ {
+ // Load the resource bundle based on the locale of the
+ // current request. If the locale has not changed, this
+ // method just returns.
+ MenuUtils.loadBundle(_bundleName, _bundleKey + getHandlerId());
+ }
+
+ if ( _label != null
+ && UIComponentTag.isValueReference(_label)
+ )
+ {
+ _label = _evalElStr(_label);
+ }
+ return _label;
+ }
+
+ /**
+ * Set the icon used by the menu item.
+ *
+ * @param icon - the String URI to the icon.
+ */
+ public void setIcon(String icon)
+ {
+ _icon = icon;
+ }
+
+ /**
+ * Get the icon used by the menu item
+ * This could either be a string value set directly in
+ * the metadata or an EL expression string. In the case
+ * of an EL expression, we need to get its bound value.
+ *
+ * @return icon - the String URI to the icon.
+ */
+ public String getIcon()
+ {
+ return MenuUtils.evalString(_icon);
+ }
+
+ /**
+ * Sets the rendered attribute of the menu item.
+ * If false, menu item will not appear.
+ *
+ * @param rendered - boolean that toggles the visible state of the XMLMenuModel
+ * item.
+ */
+ public void setRendered(boolean rendered)
+ {
+ _renderedStr = rendered ? "true" : "false";
+ }
+
+ /**
+ * Gets the rendered attribute of the menu item.
+ * If false, menu item will not appear.
+ *
+ * @return boolean indicating whether or not the menu item is visible.
+ */
+ public boolean getRendered()
+ {
+ boolean rendered = MenuUtils.evalBoolean(_renderedStr, true);
+ return rendered;
+ }
+
+ /**
+ * Sets the disabled attribute of the menu item.
+ * If true, menu item will not appear greyed-out and clicking
+ * on it will have no effect
+ *
+ * @param disabled - boolean that toggles the enabled/disabled state of the
+ * menu item.
+ */
+ public void setDisabled(boolean disabled)
+ {
+ _disabledStr = disabled ? "true" : "false";
+ }
+
+ /**
+ * Gets the disabled attribute of the menu item.
+ * If true, menu item will not appear greyed-out and clicking
+ * on it will have no effect
+ *
+ * @return boolean indicating whether or not the menu item is disabled.
+ */
+ public boolean getDisabled()
+ {
+ boolean disabled = MenuUtils.evalBoolean(_disabledStr, false);
+ return disabled;
+ }
+
+ /**
+ * Sets the visible attribute of the menu item.
+ * If false, menu item will not appear
+ *
+ * @param visible - boolean that toggles the visible state of the
+ * menu item.
+ */
+ public void setVisible(boolean visible)
+ {
+ _visibleStr = visible ? "true" : "false";
+ }
+
+ /**
+ * Gets the visible attribute of the menu item.
+ * If false, menu item will not appear
+ *
+ * @return boolean indicating whether or not the menu item is visible.
+ */
+ public boolean getVisible()
+ {
+ boolean visible = MenuUtils.evalBoolean(_visibleStr, true);
+ return visible;
+ }
+
+ /**
+ * Sets the defaultFocusPath attribute of the menu item.
+ *
+ * @param defaultFocusPath - boolean that tells the XMLMenuModel model that
+ * the focus path to this node should be used in cases where the focus path
+ * is not determinable by the XMLMenuModel model.
+ */
+ public void setDefaultFocusPath(boolean defaultFocusPath)
+ {
+ _defaultFocusPathStr = defaultFocusPath ? "true" : "false";
+ }
+
+ /**
+ * Gets the defaultFocusPath attribute of the menu item.
+ *
+ * @return boolean indicating whether or not this is the focus path to use,
+ * by default, in cases where there are duplicate paths to this node and
+ * the focus path is not determinable by the XMLMenuModel model.
+ */
+ public boolean getDefaultFocusPath()
+ {
+ boolean defaultFocusPath = MenuUtils.evalBoolean(_defaultFocusPathStr,
+ false);
+ return defaultFocusPath;
+ }
+
+ /**
+ * Get the List of menu item's children.
+ *
+ * @return List of menu item's children
+ */
+ public List<MenuNode> getChildren()
+ {
+ return _children;
+ }
+
+ /**
+ * Set the List of menu item's children.
+ *
+ * @param children - List of MenuNode children for this MenuNode
+ */
+ public void setChildren(List<MenuNode> children)
+ {
+ _children = children;
+ }
+
+ /**
+ * Gets the readOnly state of the node.
+ *
+ * @return the node's readOnly state as a boolean.
+ */
+ public boolean getReadOnly()
+ {
+ boolean readOnly = MenuUtils.evalBoolean(_readOnlyStr, false);
+ return readOnly;
+ }
+
+ /**
+ * Sets the the value of the readOnly attribute of the node.
+ *
+ * @param readOnly - boolean setting readOnly state of the node
+ */
+ public void setReadOnly(boolean readOnly)
+ {
+ _readOnlyStr = readOnly ? "true" : "false";
+ }
+
+ /**
+ * Sets the value of the node's focusViewId property.
+ *
+ * @param focusViewId - string value of the Node's "focusViewId" property.
+ */
+ public void setFocusViewId(String focusViewId)
+ {
+ _focusViewId = focusViewId;
+ }
+
+ /**
+ * Gets the value of the node's focusViewId property.
+ *
+ * @return string - the value of the Node's "focusViewId" property.
+ */
+ public String getFocusViewId()
+ {
+ return _focusViewId;
+ }
+
+ /**
+ * Sets the rendered attribute of the menu item.
+ * If false, menu item will not appear.
+ *
+ * Called only from MenuContentHandlerImpl during parsing of metadata.
+ *
+ * @param renderedStr - string representing a boolean value
+ */
+ public void setRendered(String renderedStr)
+ {
+ _renderedStr = renderedStr;
+ }
+
+ /**
+ * Sets the disabled attribute of the menu item.
+ * If false, menu item will appear in a disabled state.
+ *
+ * @param disabledStr - string representing a boolean value or
+ * an EL Expression
+ */
+ public void setDisabled(String disabledStr)
+ {
+ _disabledStr = disabledStr;
+ }
+
+ /**
+ * Sets the readOnly attribute of the menu item.
+ * If false, menu item will appear in a readOnly state.
+ *
+ * @param readOnlyStr - string representing a boolean value or EL
+ * expression.
+ */
+ public void setReadOnly(String readOnlyStr)
+ {
+ _readOnlyStr = readOnlyStr;
+ }
+
+ /**
+ * Sets the visible attribute of the menu item.
+ * If false, menu item will not appear.
+ *
+ * @param visibleStr - string representing a boolean value or
+ * an EL Expression
+ */
+ public void setVisible(String visibleStr)
+ {
+ _visibleStr = visibleStr;
+ }
+
+ /**
+ * Sets the defaultFocusPath attribute of the menu item.
+ *
+ * Called only from MenuContentHandlerImpl during parsing of metadata.
+ *
+ * @param defaultFocusPathStr - string representing a boolean value
+ */
+ public void setDefaultFocusPath(String defaultFocusPathStr)
+ {
+ _defaultFocusPathStr = defaultFocusPathStr;
+ }
+
+ /**
+ * setAccessKey - Takes either a single character String or
+ * an EL expression and sets the value of the accessKey attribute
+ * of the node.
+ *
+ * @param accessKey - Single character String or EL expression
+ * representing the label's access key.
+ */
+ public void setAccessKey (String accessKey)
+ {
+ if ( accessKey != null
+ && UIComponentTag.isValueReference(accessKey)
+ )
+ {
+ // EL Expression
+ _accessKey = accessKey;
+ }
+ else
+ {
+ // accessKey cannot be more than one character
+ if (accessKey != null && accessKey.length() > 1)
+ return;
+
+ _accessKey = accessKey;
+ }
+ }
+
+ /**
+ * setAccessKey - Takes a single character and sets the value of the
+ * accessKey attribute of the node.
+ *
+ * @param accessKey - Single character label access key.
+ */
+ public void setAccessKey (char accessKey)
+ {
+ char[] charArray = {'\0'};
+
+ charArray[0] = accessKey;
+ _accessKey = String.copyValueOf(charArray);
+ }
+
+ /**
+ * getAccessKey - get the label's accessKey as a char.
+ *
+ * @return the access key of the label as a char.
+ */
+ public char getAccessKey()
+ {
+ String accessKeyStr = MenuUtils.evalString(_accessKey);
+
+ if (accessKeyStr == null || accessKeyStr.length() > 1)
+ return '\0';
+
+ return accessKeyStr.charAt(0);
+ }
+
+ /**
+ * setLabelAndAccessKey - Takes either an EL expression or a
+ * String representing the label and accessKey together, and
+ * sets the label and the accessKey separately.
+ *
+ * @param labelAndAccessKey - either and EL Expression or
+ * a String representing the label and accessKey together.
+ */
+ public void setLabelAndAccessKey(String labelAndAccessKey)
+ {
+ int ampIdx = 0;
+ _labelAndAccessKeyEL = false;
+
+ // if EL expression, set it and the label to the same thing
+ if ( labelAndAccessKey != null
+ && UIComponentTag.isValueReference(labelAndAccessKey)
+ )
+ {
+ _labelAndAccessKey = labelAndAccessKey;
+ _labelAndAccessKeyEL = true;
+ _accessKey = null;
+ }
+ else if ( labelAndAccessKey == null
+ || (ampIdx = labelAndAccessKey.indexOf('&')) == -1
+ )
+ {
+ // String is null or a label w/o an accesskey
+ _label = labelAndAccessKey;
+ _accessKey = null;
+ }
+ else if (ampIdx == (labelAndAccessKey.length() - 1))
+ {
+ // & is last character, strip it.
+ _label = labelAndAccessKey.substring(0, ampIdx);
+ _accessKey = null;
+ }
+ else
+ {
+ // We have a string with an accessKey somewhere
+ _splitLabelAndAccessKey(labelAndAccessKey);
+ }
+ }
+
+ /**
+ * getLabelAndAccessKey - get the label and accessKey together
+ * in a single string.
+ *
+ * @return a String containing (representing) the label and accessKey
+ * together.
+ */
+ public String getLabelAndAccessKey()
+ {
+ // If labelAndAccessKey is an EL expression
+ // we get it and process it, set the label
+ // and the accessKey, null out labelAndAccessKey
+ // and set labelAndAccessKeyEL to false
+ if (_labelAndAccessKeyEL)
+ {
+ _labelAndAccessKey = _evalElStr(_labelAndAccessKey);
+ setLabelAndAccessKey(_labelAndAccessKey);
+ _labelAndAccessKey = null;
+ _labelAndAccessKeyEL = false;
+ }
+ // Now it is a simple string, so we have already
+ // set the label and accessKey. We get both the
+ // label and accessKey, construct a labelAndAccessKey
+ // and return it.
+ String label = getLabel(); // This is a simple string
+
+ if (_accessKey == null)
+ return label; // String is just the label
+
+ return _joinLabelAndAccessKey(label, _accessKey);
+ }
+
+ /**
+ * setId - sets the id of the node.
+ *
+ * @param id - the identifier for the node component
+ */
+ public void setId (String id)
+ {
+ _id = id;
+ }
+
+ /**
+ * getId - gets the id of the node.
+ *
+ * @return - String identifier for the node component.
+ */
+ public String getId()
+ {
+ return _id;
+ }
+
+ /*===========================================================================
+ * getRefNode(), doAction(), & getDestination() are never called. They
+ * are just here so that the same methods in itemNode.java and GroupNode.java
+ * will compile.
+ * ==========================================================================
+ */
+ /**
+ * Get the node whose id matches this node's
+ * idref attribute value.
+ *
+ * @return the MenuNode whose id matches this
+ * node's idref attribute value.
+ */
+ public MenuNode getRefNode()
+ {
+ return this;
+ }
+
+ /**
+ * Called by the Default ActionListener
+ * when a menu node is clicked/selected.
+ *
+ * @return String outcome or viewId used
+ * during a POST for navigation.
+ */
+ public String doAction()
+ {
+ // Call the doAction method of my idref node
+ return getRefNode().doAction();
+ }
+
+ /**
+ * Get the Destination URL of a page for a
+ * GET.
+ *
+ * @return String URL of a page.
+ */
+ public String getDestination()
+ {
+ // Call the doAction method of my idref node
+ return getRefNode().getDestination();
+ }
+
+ /**
+ * Get the value of a custom attribute. This needs to be
+ * public so that the menu model can call into the node
+ * to get the value of a custom attribute.
+ *
+ * @param name String name of the custom attribute
+ * @return Object value of the matching node
+ */
+ public Object getCustomProperty(String name)
+ {
+ String value = _customPropList.getValue(name);
+
+ if ( value != null
+ && UIComponentTag.isValueReference(value)
+ )
+ {
+ return MenuUtils.getBoundValue(value);
+ }
+
+ return value;
+ }
+
+ /**
+ * Get the Attributes containing the custom attributes on this node. This
+ * needs to be public so that the menu model can get them.
+ *
+ * @return Attributes list containing the custom attributes on this node
+ */
+ public Attributes getCustomPropList()
+ {
+ return _customPropList;
+ }
+
+ /**
+ * Set the list of custom attributes.
+ *
+ * @param attrList Attributes List for this node from MenuContentHandlerImpl
+ */
+ protected void setCustomPropList(Attributes attrList)
+ {
+ _customPropList = attrList;
+ }
+
+ /**
+ * setResBundleKey - sets the name of the resource bundle used in
+ * obtaining the node's label text. Used, along with the handerId,
+ * to identify and get a string from the proper resource bundle.
+ *
+ * @param bundleKey - String name of the resource bundle.
+ */
+ protected void setResBundleKey(String bundleKey)
+ {
+ _bundleKey = bundleKey;
+ }
+
+ /**
+ * setResBundleKey - sets the name of the resource bundle used in
+ * obtaining the node's label text. Used, along with the handerId,
+ * to identify and get a string from the proper resource bundle.
+ *
+ * @param bundleName - String name of the resource bundle.
+ */
+ protected void setResBundleName(String bundleName)
+ {
+ _bundleName = bundleName;
+ }
+
+ /**
+ * setHandlerId - sets the MenuContentHandlerImpl's handlerId on the node.
+ * Used, along with the bundleKey, to identify and get a string from the
+ * proper resource bundle.
+ *
+ * @param handlerId String uniquely identifying the specific
+ * MenuContentHandlerImpl that created this node.
+ */
+ protected void setHandlerId(String handlerId)
+ {
+ _handlerId = handlerId;
+ }
+
+ /**
+ * Notifies the root model that this node has been selected on a POST
+ *
+ * @param selectedNode - The currently selected menu item.
+ */
+ protected void postSelectedNode(MenuNode selectedNode)
+ {
+ getRootModel().setCurrentlyPostedNode(selectedNode);
+ }
+
+ /**
+ * Set the MenuContentHandlerImpl's id.
+ *
+ * This is appended to the node's id in getId() to
+ * ensure that each node's id is unique.
+ *
+ * @return String object id of the MenuContentHandlerImpl
+ */
+ protected String getHandlerId()
+ {
+ return _handlerId;
+ }
+
+ /**
+ * Get the top-level, root menu model, which contains
+ * the entire menu tree.
+ *
+ * @return root, top-level XMLMenuModel
+ */
+ @SuppressWarnings("unchecked")
+ protected XMLMenuModel getRootModel()
+ {
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ Map<String, Object> requestMap =
+ facesContext.getExternalContext().getRequestMap();
+
+ return (XMLMenuModel) requestMap.get(getRootModelUri());
+ }
+
+ /**
+ * Get the top-level, root menu model's Uri.
+ *
+ * @return root, top-level XMLMenuModel's Uri
+ */
+ public String getRootModelUri()
+ {
+ return _rootModelUri;
+ }
+
+ /**
+ * Sets the root menu Model's Uri.
+ * <p>
+ * This is always only the top-level, root model's Uri.
+ * We do this because the MenuContentHandlerImpl and nodes need to be able
+ * to call into the root model to:
+ * <ul>
+ * <li>notify them root menu model of the currently selected node on a POST
+ * </ul>
+ *
+ * @param rootModelUri - String the root, top-level menu model's Uri.
+ */
+ public void setRootModelUri(String rootModelUri)
+ {
+ _rootModelUri = rootModelUri;
+ }
+
+ /**
+ * _joinLabelAndAccessKey - takes a string label and string accessKey
+ * and combines them into a single labelAndAccessKey string.
+ *
+ * @param label - String with node's label.
+ * @param accessKey - One character String which is the label's accessKey.
+ * @return
+ */
+ private String _joinLabelAndAccessKey(String label, String accessKey)
+ {
+ char[] keyArray = label.toCharArray();
+ int len = label.length();
+ int lentimes2 = len*2;
+ char[] keyArray2 = new char[lentimes2];
+ int i, j = 0;
+ boolean accessKeyFound = false;
+
+ // find the first occurrence of a single Ampersand
+ for (i=0, j=0; i < len; i++, j++)
+ {
+ // AccessKey
+ if ( keyArray[i] == accessKey.charAt(0)
+ && !accessKeyFound
+ )
+ {
+ keyArray2[j] = '&';
+ j++;
+ accessKeyFound = true;
+ }
+
+ keyArray2[j] = keyArray[i];
+
+ // Ampersand as regular character
+ // double it up.
+ if (keyArray[i] == '&')
+ {
+ j++;
+ keyArray2[j] = keyArray[i];
+ }
+ }
+
+ String combinedLabel = new String(keyArray2, 0, j);
+ return combinedLabel;
+ }
+
+ /**
+ * _splitLabelAndAccessKey - takes a string containing a label
+ * and an accessKey and breaks separates it and sets the label
+ * and the accessKey separately.
+ *
+ * @param labelAndAccessKey - String holding both a label and
+ * accessKey.
+ */
+ private void _splitLabelAndAccessKey(String labelAndAccessKey)
+ {
+ char[] keyArray = labelAndAccessKey.toCharArray();
+ int len = labelAndAccessKey.length();
+ char[] keyArray2 = new char[len];
+ int i, j = 0;
+ boolean accessKeyFound = false;
+
+ for (i=0, j=0; i < len ; i++, j++)
+ {
+ if (keyArray[i] == '&')
+ {
+ i++;
+
+ if (!accessKeyFound && keyArray[i] != '&')
+ {
+ // We have our accessKey
+ _accessKey = labelAndAccessKey.substring(i, i+1);
+ accessKeyFound = true;
+ }
+ }
+
+ keyArray2[j] = keyArray[i];
+ }
+
+ String label = new String(keyArray2, 0, j);
+ _label = label;
+ }
+
+ /**
+ * _evalElStr - Evaluate an EL expression string.
+ *
+ * @param str - the EL expression
+ * @return the bound value of the El expression as a String
+ */
+ private String _evalElStr(String str)
+ {
+ // Check to see if EL expression gets its value from a
+ // resource bundle.
+ String elVar = str.substring(2, str.indexOf('.'));
+
+ if ( _bundleKey != null
+ && _bundleKey.equals(elVar)
+ )
+ {
+ // we have an EL expression to get a value from a
+ // resource bundle
+ elVar = str.substring(0, str.indexOf('.'));
+ String elKey = str.substring(str.indexOf('.'));
+ String elStr = elVar + getHandlerId() + elKey;
+ String elVal = (String)MenuUtils.getBoundValue(elStr);
+ return elVal;
+ }
+ else
+ {
+ // We have some other EL expression
+ return (String)MenuUtils.getBoundValue(str);
+ }
+ }
+
+ private String _label = null;
+ private String _icon = null;
+ private List<MenuNode> _children = null;
+ private String _focusViewId = null;
+ private String _renderedStr = null;
+ private String _disabledStr = null;
+ private String _visibleStr = null;
+ private String _readOnlyStr = null;
+ private String _handlerId = null;
+ private String _bundleKey = null;
+ private String _bundleName = null;
+ private String _accessKey = null;
+ private String _id = null;
+ private boolean _labelAndAccessKeyEL = false;
+ private String _labelAndAccessKey = null;
+ private String _defaultFocusPathStr = null;
+
+ // Map for Custom attributes (properties)
+ private Attributes _customPropList = null;
+
+ // Menu model Uri's
+ private String _rootModelUri = null;
+}
Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuUtils.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuUtils.java?rev=431848&r1=431847&r2=431848&view=diff
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuUtils.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/menu/MenuUtils.java Wed Aug 16 00:00:16 2006
@@ -1,403 +1,405 @@
-/*
- * @(#)MenuUtils.java
- *
- *
- * Copyright 2006 The Apache Software Foundation.
- *
- * Licensed 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 javax.faces.el.ValueBinding;
-
-import javax.faces.webapp.UIComponentTag;
-
-import org.apache.myfaces.trinidad.logging.TrinidadLogger;
-
-/**
- * Menu Utilities used by the Menu Model internal code.
- * All classes are package private.
- *
- * @author Gary Kind
- */
-class MenuUtils
-{
- MenuUtils() {}
-
- //=======================================================================
- // Bound Value/EL Binding utilities
- //=======================================================================
-
- /**
- * Gets the bound value of an EL expression
- *
- * @param elExpression - String representing an EL expression
- */
- static Object getBoundValue(String elExpression)
- {
- Object retVal = null;
-
- try
- {
- // Value of rendered is EL method binding, so we
- // need to evaluate it
- FacesContext ctx = FacesContext.getCurrentInstance();
- ValueBinding binding =
- ctx.getApplication().createValueBinding(elExpression);
- retVal = binding.getValue(ctx);
- }
- catch (Exception ex)
- {
- _LOG.severe("EL Expression " + elExpression +
- " is invalid or returned a bad value.\n", ex);
- return null;
- }
- return retVal;
- }
-
- /**
- * 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
- && UIComponentTag.isValueReference(boolStr)
- )
- {
- Boolean bValue = (Boolean) getBoundValue(boolStr);
- 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
- && UIComponentTag.isValueReference(propVal)
- )
- {
- String elVal = (String) getBoundValue(propVal);
- 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
- && UIComponentTag.isValueReference(propVal)
- )
- {
- Integer elVal = (Integer) getBoundValue(propVal);
- 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
- * sessionMap
- */
- static void loadBundle(String resBundle, ThreadLocal key)
- {
- FacesContext facesContext = FacesContext.getCurrentInstance();
- Map applicationMap = facesContext.getExternalContext().getApplicationMap();
-
- // Get the request Locale
- Locale requestLocale = facesContext.getExternalContext().getRequestLocale();
-
- // Make sure it is not null
- if (requestLocale == null)
- {
- requestLocale = facesContext.getViewRoot().getLocale();
-
- if (requestLocale == null)
- {
- requestLocale = facesContext.getApplication().getDefaultLocale();
- }
- }
-
- // Is there a bundle with this key already on the session map?
- _BundleMap bundleMap = (_BundleMap) applicationMap.get((String) 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 (UIComponentTag.isValueReference(resBundle))
- {
- bundleName = (String)MenuUtils.getBoundValue(resBundle);
- }
- else
- {
- bundleName = resBundle ;
- }
- }
-
- final ResourceBundle bundle;
-
- try
- {
- bundle = ResourceBundle.getBundle(bundleName, requestLocale);
- }
- catch (MissingResourceException e)
- {
- _LOG.severe("Resource bundle " + bundleName + " could not be found.", 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((String)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
- * sessionMap
- */
- static void loadBundle(String resBundleName, String resBundleKey)
- {
- ThreadLocal bundleKey = new ThreadLocal();
-
- 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.
- */
- static private class _BundleMap implements Map
- {
- private ResourceBundle _bundle;
- private Locale _locale;
- private List _values;
- Object retVal = null;
-
- public _BundleMap(ResourceBundle bundle)
- {
- _bundle = bundle;
- _locale = bundle.getLocale();
- }
-
- public _BundleMap(ResourceBundle bundle, Locale locale)
- {
- _bundle = bundle;
- _locale = locale;
- }
-
- //Optimized methods
- public Object get(Object key)
- {
- try
- {
- return _bundle.getObject(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 values()
- {
- if (_values == null)
- {
- _values = new ArrayList();
- for (Enumeration enumer = _bundle.getKeys();
- enumer.hasMoreElements(); )
- {
- String v = _bundle.getString((String)enumer.nextElement());
- _values.add(v);
- }
- }
- return _values;
- }
-
- public int size()
- {
- return values().size();
- }
-
- public boolean containsValue(Object value)
- {
- return values().contains(value);
- }
-
- public Set entrySet()
- {
- Set set = new HashSet();
-
- for (Enumeration enumer = _bundle.getKeys(); enumer.hasMoreElements(); )
- {
- final String k = (String)enumer.nextElement();
- set.add(new Map.Entry()
- {
- public Object getKey()
- {
- return k;
- }
-
- public Object getValue()
- {
- return _bundle.getObject(k);
- }
-
- public Object setValue(Object value)
- {
- throw new UnsupportedOperationException(
- this.getClass().getName() + " UnsupportedOperationException");
- }
- });
- }
- return set;
- }
-
- public Set keySet()
- {
- Set set = new HashSet();
- for (Enumeration enumer = _bundle.getKeys(); enumer.hasMoreElements(); )
- {
- set.add(enumer.nextElement());
- }
- return set;
- }
-
- //Unsupported methods
- public Object remove(Object key)
- {
- throw new UnsupportedOperationException(this.getClass().getName()
- + " UnsupportedOperationException");
- }
-
- public void putAll(Map t)
- {
- throw new UnsupportedOperationException(this.getClass().getName()
- + " UnsupportedOperationException");
- }
-
- public Object put(Object key, Object value)
- {
- throw new UnsupportedOperationException(this.getClass().getName()
- + " UnsupportedOperationException");
- }
-
- public void clear()
- {
- throw new UnsupportedOperationException(this.getClass().getName()
- + " UnsupportedOperationException");
- }
-
- public ResourceBundle getBundle()
- {
- return _bundle;
- }
-
- public Locale getLocale()
- {
- return _locale;
- }
- } // endclass _BundleMap
-
- private final static TrinidadLogger _LOG =
- TrinidadLogger.createTrinidadLogger(MenuUtils.class);
-}
-
+/*
+ * @(#)MenuUtils.java
+ *
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 javax.faces.el.ValueBinding;
+
+import javax.faces.webapp.UIComponentTag;
+
+import org.apache.myfaces.trinidad.logging.TrinidadLogger;
+
+/**
+ * Menu Utilities used by the Menu Model internal code.
+ * All classes are package private.
+ *
+ * @author Gary Kind
+ */
+class MenuUtils
+{
+ MenuUtils() {}
+
+ //=======================================================================
+ // Bound Value/EL Binding utilities
+ //=======================================================================
+
+ /**
+ * Gets the bound value of an EL expression
+ *
+ * @param elExpression - String representing an EL expression
+ */
+ static Object getBoundValue(String elExpression)
+ {
+ Object retVal = null;
+
+ try
+ {
+ // Value of rendered is EL method binding, so we
+ // need to evaluate it
+ FacesContext ctx = FacesContext.getCurrentInstance();
+ ValueBinding binding =
+ ctx.getApplication().createValueBinding(elExpression);
+ retVal = binding.getValue(ctx);
+ }
+ catch (Exception ex)
+ {
+ _LOG.severe("EL Expression " + elExpression +
+ " is invalid or returned a bad value.\n", ex);
+ return null;
+ }
+ return retVal;
+ }
+
+ /**
+ * 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
+ && UIComponentTag.isValueReference(boolStr)
+ )
+ {
+ Boolean bValue = (Boolean) getBoundValue(boolStr);
+ 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
+ && UIComponentTag.isValueReference(propVal)
+ )
+ {
+ String elVal = (String) getBoundValue(propVal);
+ 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
+ && UIComponentTag.isValueReference(propVal)
+ )
+ {
+ Integer elVal = (Integer) getBoundValue(propVal);
+ 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
+ * sessionMap
+ */
+ @SuppressWarnings("unchecked")
+ static void loadBundle(String resBundle, ThreadLocal<String> key)
+ {
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ Map<String, Object> applicationMap =
+ facesContext.getExternalContext().getApplicationMap();
+
+ // Get the request Locale
+ Locale requestLocale = facesContext.getExternalContext().getRequestLocale();
+
+ // Make sure it is not null
+ if (requestLocale == null)
+ {
+ requestLocale = facesContext.getViewRoot().getLocale();
+
+ 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 (UIComponentTag.isValueReference(resBundle))
+ {
+ bundleName = (String)MenuUtils.getBoundValue(resBundle);
+ }
+ else
+ {
+ bundleName = resBundle ;
+ }
+ }
+
+ final ResourceBundle bundle;
+
+ try
+ {
+ bundle = ResourceBundle.getBundle(bundleName, requestLocale);
+ }
+ catch (MissingResourceException e)
+ {
+ _LOG.severe("Resource bundle " + bundleName + " could not be found.", 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
+ * sessionMap
+ */
+ static void loadBundle(String resBundleName, String resBundleKey)
+ {
+ ThreadLocal<String> bundleKey = new ThreadLocal<String>();
+
+ 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.
+ */
+ static private class _BundleMap implements Map<String, String>
+ {
+ private ResourceBundle _bundle;
+ private Locale _locale;
+ private List<String> _values;
+ Object retVal = null;
+
+ 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(
+ this.getClass().getName() + " 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(this.getClass().getName()
+ + " UnsupportedOperationException");
+ }
+
+ public void putAll(Map<? extends String, ? extends String> t)
+ {
+ throw new UnsupportedOperationException(this.getClass().getName()
+ + " UnsupportedOperationException");
+ }
+
+ public String put(String key, String value)
+ {
+ throw new UnsupportedOperationException(this.getClass().getName()
+ + " UnsupportedOperationException");
+ }
+
+ public void clear()
+ {
+ throw new UnsupportedOperationException(this.getClass().getName()
+ + " UnsupportedOperationException");
+ }
+
+ public ResourceBundle getBundle()
+ {
+ return _bundle;
+ }
+
+ public Locale getLocale()
+ {
+ return _locale;
+ }
+ } // endclass _BundleMap
+
+ private final static TrinidadLogger _LOG =
+ TrinidadLogger.createTrinidadLogger(MenuUtils.class);
+}
+
Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/metadata/RegionMetadata.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/metadata/RegionMetadata.java?rev=431848&r1=431847&r2=431848&view=diff
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/metadata/RegionMetadata.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/metadata/RegionMetadata.java Wed Aug 16 00:00:16 2006
@@ -51,10 +51,9 @@
*/
public final class RegionMetadata extends RegionManager
{
- @SuppressWarnings("unchecked")
private RegionMetadata()
{
- _map = Collections.EMPTY_MAP;
+ _map = Collections.emptyMap();
}
@Override
@@ -203,7 +202,9 @@
_LOG.fine("Associating jspUri {0} with componentType:{1}",
new Object[] { comp.getJspUIDef(), componentType});
}
- if (_map == Collections.EMPTY_MAP)
+
+ Map<String, RegionConfig> comparant = Collections.emptyMap();
+ if (_map == comparant)
{
_map = new HashMap<String, RegionConfig>(5);
}
@@ -515,10 +516,9 @@
public static final class ComponentMetaData extends RegionConfig
{
- @SuppressWarnings("unchecked")
public ComponentMetaData()
{
- _attrs = Collections.EMPTY_LIST;
+ _attrs = Collections.emptyList();
}
@Override
@@ -552,7 +552,8 @@
private void _addAttribute(AttributeMetaData attr)
{
- if (_attrs == Collections.EMPTY_LIST)
+ List<AttributeMetaData> comparant = Collections.emptyList();
+ if (_attrs == comparant)
{
_attrs = new ArrayList<AttributeMetaData>(5);
}
Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/DialogRequest.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/DialogRequest.java?rev=431848&r1=431847&r2=431848&view=diff
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/DialogRequest.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/DialogRequest.java Wed Aug 16 00:00:16 2006
@@ -46,7 +46,7 @@
_formId = formId;
if (dialogProperties == null)
- dialogProperties = Collections.EMPTY_MAP;
+ dialogProperties = Collections.emptyMap();
Object width = dialogProperties.get("width");
Object height = dialogProperties.get("height");
Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/TreeTableRenderer.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/TreeTableRenderer.java?rev=431848&r1=431847&r2=431848&view=diff
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/TreeTableRenderer.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/desktop/TreeTableRenderer.java Wed Aug 16 00:00:16 2006
@@ -435,7 +435,7 @@
{
final UIXTreeTable treeTableBase = ttrc.getUIXTreeTable();
final ResponseWriter writer = context.getResponseWriter();
- final RowKeySet<Object> treeState = treeTableBase.getDisclosedRowKeys();
+ final RowKeySet treeState = treeTableBase.getDisclosedRowKeys();
final int specialColCount = _getSpecialColCount(ttrc);
TableUtils.RowLoop loop = new TableUtils.RowLoop()