You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/11/09 21:36:12 UTC
svn commit: r1199953 - in
/myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib:
./ UIComponentELTagBase.java UIComponentELTagUtils.java
UIComponentTagUtils.java core/ core/SelectItemTagBase.java
Author: lu4242
Date: Wed Nov 9 20:36:11 2011
New Revision: 1199953
URL: http://svn.apache.org/viewvc?rev=1199953&view=rev
Log:
revert some classes still in use inside myfaces core
Added:
myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/ (with props)
myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java (with props)
myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java (with props)
myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentTagUtils.java (with props)
myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/core/ (with props)
myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/core/SelectItemTagBase.java (with props)
Propchange: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/
------------------------------------------------------------------------------
bugtraq:number = true
Added: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java?rev=1199953&view=auto
==============================================================================
--- myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java (added)
+++ myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java Wed Nov 9 20:36:11 2011
@@ -0,0 +1,259 @@
+/*
+ * 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.shared.taglib;
+
+import org.apache.myfaces.shared.renderkit.JSFAttr;
+
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+import javax.faces.webapp.UIComponentELTag;
+
+/**
+ * @author Manfred Geiler (latest modification by $Author$)
+ * @author Bruno Aranda (JSR-252)
+ * @version $Revision$ $Date$
+ */
+public abstract class UIComponentELTagBase
+ extends UIComponentELTag
+{
+ //private static final Log log = LogFactory.getLog(UIComponentTagBase.class);
+
+ //UIComponent attributes
+ private ValueExpression _forceId;
+
+ private ValueExpression _forceIdIndex;
+ private static final Boolean DEFAULT_FORCE_ID_INDEX_VALUE = Boolean.TRUE;
+
+ private ValueExpression _javascriptLocation;
+ private ValueExpression _imageLocation;
+ private ValueExpression _styleLocation;
+
+ //Special UIComponent attributes (ValueHolder, ConvertibleValueHolder)
+ private ValueExpression _value;
+ private ValueExpression _converter;
+ //attributes id, rendered and binding are handled by UIComponentTag
+
+ public void release() {
+ super.release();
+
+ _forceId = null;
+ _forceIdIndex = null;
+
+ _value=null;
+ _converter=null;
+
+ _javascriptLocation = null;
+ _imageLocation = null;
+ _styleLocation = null;
+ }
+
+ protected void setProperties(UIComponent component)
+ {
+ super.setProperties(component);
+
+ setBooleanProperty(component, org.apache.myfaces.shared.renderkit.JSFAttr.FORCE_ID_ATTR, _forceId);
+ setBooleanProperty(component, org.apache.myfaces.shared.renderkit.JSFAttr.FORCE_ID_INDEX_ATTR, _forceIdIndex, DEFAULT_FORCE_ID_INDEX_VALUE);
+ if (_javascriptLocation != null) setStringProperty(component, JSFAttr.JAVASCRIPT_LOCATION, _javascriptLocation);
+ if (_imageLocation != null) setStringProperty(component, JSFAttr.IMAGE_LOCATION, _imageLocation);
+ if (_styleLocation != null) setStringProperty(component, JSFAttr.STYLE_LOCATION, _styleLocation);
+
+ //rendererType already handled by UIComponentTag
+
+ setValueProperty(component, _value);
+ setConverterProperty(component, _converter);
+ }
+
+ /**
+ * Sets the forceId attribute of the tag. NOTE: Not every tag that extends this class will
+ * actually make use of this attribute. Check the TLD to see which components actually
+ * implement it.
+ *
+ * @param aForceId The value of the forceId attribute.
+ */
+ public void setForceId(ValueExpression aForceId)
+ {
+ _forceId = aForceId;
+ }
+
+ /**
+ * Sets the forceIdIndex attribute of the tag. NOTE: Not every tag that extends this class will
+ * actually make use of this attribute. Check the TLD to see which components actually implement it.
+ *
+ * @param aForceIdIndex The value of the forceIdIndex attribute.
+ */
+ public void setForceIdIndex(ValueExpression aForceIdIndex)
+ {
+ _forceIdIndex = aForceIdIndex;
+ }
+
+ public void setValue(ValueExpression value)
+ {
+ _value = value;
+ }
+
+ public void setConverter(ValueExpression converter)
+ {
+ _converter = converter;
+ }
+
+
+ /**
+ * Sets the javascript location attribute of the tag. NOTE: Not every tag that extends this class will
+ * actually make use of this attribute. Check the TLD to see which components actually implement it.
+ *
+ * @param aJavascriptLocation The alternate javascript location to use.
+ */
+ public void setJavascriptLocation(ValueExpression aJavascriptLocation)
+ {
+ _javascriptLocation = aJavascriptLocation;
+ }
+
+ /**
+ * Sets the image location attribute of the tag. NOTE: Not every tag that extends this class will
+ * actually make use of this attribute. Check the TLD to see which components actually implement it.
+ *
+ * @param aImageLocation The alternate image location to use.
+ */
+ public void setImageLocation(ValueExpression aImageLocation)
+ {
+ _imageLocation = aImageLocation;
+ }
+
+ /**
+ * Sets the style location attribute of the tag. NOTE: Not every tag that extends this class will
+ * actually make use of this attribute. Check the TLD to see which components actually implement it.
+ *
+ * @param aStyleLocation The alternate style location to use.
+ */
+ public void setStyleLocation(ValueExpression aStyleLocation)
+ {
+ _styleLocation = aStyleLocation;
+ }
+
+ // sub class helpers
+
+ protected void setIntegerProperty(UIComponent component, String propName, ValueExpression value)
+ {
+ UIComponentELTagUtils.setIntegerProperty(component, propName, value);
+ }
+
+ protected void setIntegerProperty(UIComponent component, String propName, ValueExpression value, Integer defaultValue)
+ {
+ UIComponentELTagUtils.setIntegerProperty(component, propName, value, defaultValue);
+ }
+
+ protected void setLongProperty(UIComponent component, String propName, ValueExpression value)
+ {
+ UIComponentELTagUtils.setLongProperty(component, propName, value);
+ }
+
+ protected void setLongProperty(UIComponent component, String propName, ValueExpression value, Long defaultValue)
+ {
+ UIComponentELTagUtils.setLongProperty(component, propName, value, defaultValue);
+ }
+
+ @Deprecated
+ protected void setStringProperty(UIComponent component, String propName, String value)
+ {
+ UIComponentTagUtils.setStringProperty(getFacesContext(), component, propName, value);
+ }
+
+ protected void setStringProperty(UIComponent component, String propName, ValueExpression value)
+ {
+ UIComponentELTagUtils.setStringProperty(component, propName, value);
+ }
+
+ protected void setStringProperty(UIComponent component, String propName, ValueExpression value, String defaultValue)
+ {
+ UIComponentELTagUtils.setStringProperty(component, propName, value, defaultValue);
+ }
+
+ @Deprecated
+ protected void setBooleanProperty(UIComponent component, String propName, String value)
+ {
+ UIComponentTagUtils.setBooleanProperty(getFacesContext(), component, propName, value);
+ }
+
+ protected void setBooleanProperty(UIComponent component, String propName, ValueExpression value)
+ {
+ UIComponentELTagUtils.setBooleanProperty(component, propName, value);
+ }
+
+ protected void setBooleanProperty(UIComponent component, String propName, ValueExpression value, Boolean defaultValue)
+ {
+ UIComponentELTagUtils.setBooleanProperty(component, propName, value, defaultValue);
+ }
+
+ private void setValueProperty(UIComponent component, ValueExpression value)
+ {
+ UIComponentELTagUtils.setValueProperty(getFacesContext(), component, value);
+ }
+
+ private void setConverterProperty(UIComponent component, ValueExpression value)
+ {
+ UIComponentELTagUtils.setConverterProperty(getFacesContext(), component, value);
+ }
+
+ protected void addValidatorProperty(UIComponent component, MethodExpression value)
+ {
+ UIComponentELTagUtils.addValidatorProperty(getFacesContext(), component, value);
+ }
+
+ @Deprecated
+ protected void setActionProperty(UIComponent component, String action)
+ {
+ UIComponentTagUtils.setActionProperty(getFacesContext(), component, action);
+ }
+
+ protected void setActionProperty(UIComponent component, MethodExpression action)
+ {
+ UIComponentELTagUtils.setActionProperty(getFacesContext(), component, action);
+ }
+
+ @Deprecated
+ protected void setActionListenerProperty(UIComponent component, String actionListener)
+ {
+ UIComponentTagUtils.setActionListenerProperty(getFacesContext(), component, actionListener);
+ }
+
+ protected void setActionListenerProperty(UIComponent component, MethodExpression actionListener)
+ {
+ UIComponentELTagUtils.addActionListenerProperty(getFacesContext(), component, actionListener);
+ }
+
+ protected void addValueChangedListenerProperty(UIComponent component, MethodExpression valueChangedListener)
+ {
+ UIComponentELTagUtils.addValueChangedListenerProperty(getFacesContext(), component, valueChangedListener);
+ }
+
+ protected void setValueBinding(UIComponent component,
+ String propName,
+ ValueExpression value)
+ {
+ UIComponentELTagUtils.setValueBinding(getFacesContext(), component, propName, value);
+ }
+
+ protected Object evaluateValueExpression(ValueExpression expression)
+ {
+ return UIComponentELTagUtils.evaluateValueExpression(getFacesContext().getELContext(), expression);
+ }
+
+
+}
Propchange: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagBase.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java?rev=1199953&view=auto
==============================================================================
--- myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java (added)
+++ myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java Wed Nov 9 20:36:11 2011
@@ -0,0 +1,402 @@
+/*
+ * 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.shared.taglib;
+
+import java.util.logging.Logger;
+
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.component.ActionSource2;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UICommand;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIGraphic;
+import javax.faces.component.UIParameter;
+import javax.faces.component.UISelectBoolean;
+import javax.faces.component.ValueHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.event.MethodExpressionActionListener;
+import javax.faces.event.MethodExpressionValueChangeListener;
+import javax.faces.validator.MethodExpressionValidator;
+
+/**
+ * @author Manfred Geiler (latest modification by $Author$)
+ * @author Bruno Aranda (JSR-252)
+ * @version $Revision$ $Date$
+ *
+ * @since 1.2
+ */
+public class UIComponentELTagUtils
+{
+ //private static final Log log = LogFactory.getLog(UIComponentELTagUtils.class);
+ private static final Logger log = Logger.getLogger(UIComponentELTagUtils.class.getName());
+
+ private UIComponentELTagUtils() {} //util class, no instantiation allowed
+
+ /**
+ * @since 1.2
+ */
+ public static void setIntegerProperty(UIComponent component,
+ String propName,
+ ValueExpression value)
+ {
+ setIntegerProperty(component, propName, value, null);
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void setIntegerProperty(UIComponent component,
+ String propName,
+ ValueExpression value,
+ Integer defaultValue)
+ {
+ if (value != null)
+ {
+ if (value.isLiteralText())
+ {
+ component.getAttributes().put(propName, Integer.valueOf(value.getExpressionString()));
+ }
+ else
+ {
+ component.setValueExpression(propName, value);
+ }
+ }
+ else
+ {
+ if (defaultValue != null)
+ {
+ component.getAttributes().put(propName, defaultValue);
+ }
+ }
+ }
+
+
+ /**
+ * @since 1.2
+ */
+ public static void setLongProperty(UIComponent component,
+ String propName,
+ ValueExpression value)
+ {
+ setLongProperty(component, propName, value, null);
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void setLongProperty(UIComponent component,
+ String propName,
+ ValueExpression value,
+ Long defaultValue)
+ {
+ if (value != null)
+ {
+ if (value.isLiteralText())
+ {
+ component.getAttributes().put(propName, Long.valueOf(value.getExpressionString()));
+ }
+ else
+ {
+ component.setValueExpression(propName, value);
+ }
+ }
+ else
+ {
+ if (defaultValue != null)
+ {
+ component.getAttributes().put(propName, defaultValue);
+ }
+ }
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void setStringProperty(UIComponent component,
+ String propName,
+ ValueExpression value)
+ {
+ setStringProperty(component, propName, value, null);
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void setStringProperty(UIComponent component,
+ String propName,
+ ValueExpression value,
+ String defaultValue)
+ {
+ if (value != null)
+ {
+ if (value.isLiteralText())
+ {
+ component.getAttributes().put(propName, value.getExpressionString());
+ }
+ else
+ {
+ component.setValueExpression(propName, value);
+ }
+ }
+ else
+ {
+ if (defaultValue != null)
+ {
+ component.getAttributes().put(propName, defaultValue);
+ }
+ }
+ }
+
+
+ /**
+ * @since 1.2
+ */
+ public static void setBooleanProperty(UIComponent component,
+ String propName,
+ ValueExpression value)
+ {
+ setBooleanProperty(component, propName, value, null);
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void setBooleanProperty(UIComponent component,
+ String propName,
+ ValueExpression value,
+ Boolean defaultValue)
+ {
+ if (value != null)
+ {
+ if (value.isLiteralText())
+ {
+ component.getAttributes().put(propName, Boolean.valueOf(value.getExpressionString()));
+ }
+ else
+ {
+ component.setValueExpression(propName, value);
+ }
+ }
+ else
+ {
+ if (defaultValue != null)
+ {
+ component.getAttributes().put(propName, defaultValue);
+ }
+ }
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void setValueProperty(FacesContext context,
+ UIComponent component,
+ ValueExpression value)
+ {
+ if (value != null)
+ {
+ if (!value.isLiteralText())
+ {
+ component.setValueExpression(org.apache.myfaces.shared.renderkit.JSFAttr.VALUE_ATTR, value);
+ }
+ else if (component instanceof UICommand)
+ {
+ ((UICommand)component).setValue(value.getExpressionString());
+ }
+ else if (component instanceof UIParameter)
+ {
+ ((UIParameter)component).setValue(value.getExpressionString());
+ }
+ else if (component instanceof UISelectBoolean)
+ {
+ ((UISelectBoolean)component).setValue(Boolean.valueOf(value.getExpressionString()));
+ }
+ else if (component instanceof UIGraphic)
+ {
+ ((UIGraphic)component).setValue(value.getExpressionString());
+ }
+ //Since many input components are ValueHolders the special components
+ //must come first, ValueHolder is the last resort.
+ else if (component instanceof ValueHolder)
+ {
+ ((ValueHolder)component).setValue(value.getExpressionString());
+ }
+ else
+ {
+ log.severe("Component " + component.getClass().getName() + " is no ValueHolder, cannot set value.");
+ }
+ }
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void setConverterProperty(FacesContext context,
+ UIComponent component,
+ ValueExpression value)
+ {
+ if (value != null)
+ {
+ if (component instanceof ValueHolder)
+ {
+ if (value.isLiteralText())
+ {
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ Converter converter = facesContext.getApplication().createConverter(value.getExpressionString());
+ ((ValueHolder)component).setConverter(converter);
+ }
+ else
+ {
+ component.setValueExpression(org.apache.myfaces.shared.renderkit.JSFAttr.CONVERTER_ATTR, value);
+ }
+ }
+ else
+ {
+ log.severe("Component " + component.getClass().getName() + " is no ValueHolder, cannot set value.");
+ }
+ }
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void addValidatorProperty(FacesContext context,
+ UIComponent component,
+ MethodExpression validator)
+ {
+ if (validator != null)
+ {
+ if (!(component instanceof EditableValueHolder))
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " is no EditableValueHolder");
+ }
+
+ ((EditableValueHolder)component).addValidator(new MethodExpressionValidator(validator));
+ }
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void setValueBinding(FacesContext context,
+ UIComponent component,
+ String propName,
+ ValueExpression value)
+ {
+ if (value != null)
+ {
+ if (!value.isLiteralText())
+ {
+ component.setValueExpression(propName, value);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " attribute " + propName + " must be a value reference, was " + value);
+ }
+ }
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void setActionProperty(FacesContext context,
+ UIComponent component,
+ MethodExpression action)
+ {
+ if (action != null)
+ {
+ if (!(component instanceof ActionSource2))
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " is no ActionSource2");
+ }
+
+ ((ActionSource2)component).setActionExpression(action);
+ }
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void addActionListenerProperty(FacesContext context,
+ UIComponent component,
+ MethodExpression actionListener)
+ {
+ if (actionListener != null)
+ {
+ if (!(component instanceof ActionSource2))
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " is no ActionSource");
+ }
+
+ ((ActionSource2)component).addActionListener(new MethodExpressionActionListener(actionListener));
+ }
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static void addValueChangedListenerProperty(FacesContext context,
+ UIComponent component,
+ MethodExpression valueChangedListener)
+ {
+ if (valueChangedListener != null)
+ {
+ if (!(component instanceof EditableValueHolder))
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " is no EditableValueHolder");
+ }
+
+ ((EditableValueHolder)component).addValueChangeListener(
+ new MethodExpressionValueChangeListener(valueChangedListener));
+ }
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static Object evaluateValueExpression(ELContext elContext, ValueExpression valueExpression )
+ {
+ return valueExpression.isLiteralText() ? valueExpression.getExpressionString() : valueExpression.getValue(elContext);
+ }
+
+ /**
+ * @since 1.2
+ */
+ public static Boolean getBooleanValue(ELContext elContext, ValueExpression valueExpression)
+ {
+ if (valueExpression.isLiteralText()){
+ return Boolean.valueOf(valueExpression.getExpressionString());
+ }
+
+ return (Boolean) valueExpression.getValue(elContext);
+ }
+
+ public static Integer getIntegerValue(ELContext elContext, ValueExpression valueExpression)
+ {
+ if (valueExpression.isLiteralText()){
+ return Integer.valueOf(valueExpression.getExpressionString());
+ }
+
+ return (Integer) valueExpression.getValue(elContext);
+ }
+
+}
Propchange: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentELTagUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentTagUtils.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentTagUtils.java?rev=1199953&view=auto
==============================================================================
--- myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentTagUtils.java (added)
+++ myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentTagUtils.java Wed Nov 9 20:36:11 2011
@@ -0,0 +1,348 @@
+/*
+ * 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.shared.taglib;
+
+import java.util.logging.Logger;
+
+import javax.faces.component.ActionSource;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UICommand;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIGraphic;
+import javax.faces.component.UIParameter;
+import javax.faces.component.UISelectBoolean;
+import javax.faces.component.ValueHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.el.MethodBinding;
+import javax.faces.el.ValueBinding;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.webapp.UIComponentTag;
+
+import org.apache.myfaces.shared.el.SimpleActionMethodBinding;
+
+/**
+ * @author Manfred Geiler (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ *
+ * @deprecated replaced by @{link UIComponentELTagUtils}
+ */
+public class UIComponentTagUtils
+{
+ //private static final Log log = LogFactory.getLog(UIComponentTagUtils.class);
+ private static final Logger log = Logger.getLogger(UIComponentTagUtils.class.getName());
+
+ private static final Class[] VALIDATOR_ARGS = {FacesContext.class,
+ UIComponent.class,
+ Object.class};
+ private static final Class[] ACTION_LISTENER_ARGS = {ActionEvent.class};
+ private static final Class[] VALUE_LISTENER_ARGS = {ValueChangeEvent.class};
+
+ private UIComponentTagUtils() {} //util class, no instantiation allowed
+
+
+ public static boolean isValueReference(String v)
+ {
+ return UIComponentTag.isValueReference(v);
+ }
+
+
+ public static void setIntegerProperty(FacesContext context,
+ UIComponent component,
+ String propName,
+ String value)
+ {
+ if (value != null)
+ {
+ if (isValueReference(value))
+ {
+ ValueBinding vb = context.getApplication().createValueBinding(value);
+ component.setValueBinding(propName, vb);
+ }
+ else
+ {
+ //FIXME: should use converter maybe?
+ component.getAttributes().put(propName, Integer.valueOf(value));
+ }
+ }
+ }
+
+ public static void setLongProperty(FacesContext context,
+ UIComponent component,
+ String propName,
+ String value)
+ {
+ if (value != null)
+ {
+ if (isValueReference(value))
+ {
+ ValueBinding vb = context.getApplication().createValueBinding(value);
+ component.setValueBinding(propName, vb);
+ }
+ else
+ {
+ //FIXME: should use converter maybe?
+ component.getAttributes().put(propName, Long.valueOf(value));
+ }
+ }
+ }
+
+ public static void setStringProperty(FacesContext context,
+ UIComponent component,
+ String propName,
+ String value)
+ {
+ if (value != null)
+ {
+ if (isValueReference(value))
+ {
+ ValueBinding vb = context.getApplication().createValueBinding(value);
+ component.setValueBinding(propName, vb);
+ }
+ else
+ {
+ //TODO: Warning if component has no such property (with reflection)
+ component.getAttributes().put(propName, value);
+ }
+ }
+ }
+
+
+ public static void setBooleanProperty(FacesContext context,
+ UIComponent component,
+ String propName,
+ String value)
+ {
+ if (value != null)
+ {
+ if (isValueReference(value))
+ {
+ ValueBinding vb = context.getApplication().createValueBinding(value);
+ component.setValueBinding(propName, vb);
+ }
+ else
+ {
+ //TODO: More sophisticated way to convert boolean value (yes/no, 1/0, on/off, etc.)
+ component.getAttributes().put(propName, Boolean.valueOf(value));
+ }
+ }
+ }
+
+
+ public static void setValueProperty(FacesContext context,
+ UIComponent component,
+ String value)
+ {
+ if (value != null)
+ {
+ if (isValueReference(value))
+ {
+ ValueBinding vb = context.getApplication().createValueBinding(value);
+ component.setValueBinding(org.apache.myfaces.shared.renderkit.JSFAttr.VALUE_ATTR, vb);
+ }
+ else if (component instanceof UICommand)
+ {
+ ((UICommand)component).setValue(value);
+ }
+ else if (component instanceof UIParameter)
+ {
+ ((UIParameter)component).setValue(value);
+ }
+ else if (component instanceof UISelectBoolean)
+ {
+ ((UISelectBoolean)component).setValue(Boolean.valueOf(value));
+ }
+ else if (component instanceof UIGraphic)
+ {
+ ((UIGraphic)component).setValue(value);
+ }
+ //Since many input components are ValueHolders the special components
+ //must come first, ValueHolder is the last resort.
+ else if (component instanceof ValueHolder)
+ {
+ ((ValueHolder)component).setValue(value);
+ }
+ else
+ {
+ log.severe("Component " + component.getClass().getName() + " is no ValueHolder, cannot set value.");
+ }
+ }
+ }
+
+
+ public static void setConverterProperty(FacesContext context,
+ UIComponent component,
+ String value)
+ {
+ if (value != null)
+ {
+ if (component instanceof ValueHolder)
+ {
+ if (isValueReference(value))
+ {
+ ValueBinding vb = context.getApplication().createValueBinding(value);
+ component.setValueBinding(org.apache.myfaces.shared.renderkit.JSFAttr.CONVERTER_ATTR, vb);
+ }
+ else
+ {
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ Converter converter = facesContext.getApplication().createConverter(value);
+ ((ValueHolder)component).setConverter(converter);
+ }
+ }
+ else
+ {
+ log.severe("Component " + component.getClass().getName() + " is no ValueHolder, cannot set value.");
+ }
+ }
+ }
+
+
+ public static void setValidatorProperty(FacesContext context,
+ UIComponent component,
+ String validator)
+ {
+ if (validator != null)
+ {
+ if (!(component instanceof EditableValueHolder))
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " is no EditableValueHolder");
+ }
+ if (isValueReference(validator))
+ {
+ MethodBinding mb = context.getApplication().createMethodBinding(validator,
+ VALIDATOR_ARGS);
+ ((EditableValueHolder)component).setValidator(mb);
+ }
+ else
+ {
+ log.severe("Component " + component.getClientId(context) + " has invalid validation expression " + validator);
+ }
+ }
+ }
+
+ public static void setValueBinding(FacesContext context,
+ UIComponent component,
+ String propName,
+ String value)
+ {
+ if (value != null)
+ {
+ if (isValueReference(value))
+ {
+ ValueBinding vb = context.getApplication().createValueBinding(value);
+ component.setValueBinding(propName, vb);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " attribute " + propName + " must be a value reference, was " + value);
+ }
+ }
+ }
+
+ public static void setActionProperty(FacesContext context,
+ UIComponent component,
+ String action)
+ {
+ if (action != null)
+ {
+ if (!(component instanceof ActionSource))
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " is no ActionSource");
+ }
+ MethodBinding mb;
+ if (isValueReference(action))
+ {
+ mb = context.getApplication().createMethodBinding(action, null);
+ }
+ else
+ {
+ mb = new SimpleActionMethodBinding(action);
+ }
+ ((ActionSource)component).setAction(mb);
+ }
+ }
+
+ public static void setActionListenerProperty(FacesContext context,
+ UIComponent component,
+ String actionListener)
+ {
+ if (actionListener != null)
+ {
+ if (!(component instanceof ActionSource))
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " is no ActionSource");
+ }
+ if (isValueReference(actionListener))
+ {
+ MethodBinding mb = context.getApplication().createMethodBinding(actionListener,
+ ACTION_LISTENER_ARGS);
+
+ /**
+ if(! Void.class.equals(mb.getType(context)))
+ {
+ throw new IllegalArgumentException(
+ actionListener +
+ " : Return types for action listeners must be void, see JSF spec. 3.2.1.1");
+ }
+ */
+
+ ((ActionSource)component).setActionListener(mb);
+ }
+ else
+ {
+ log.severe("Component " + component.getClientId(context) + " has invalid actionListener value: " + actionListener);
+ }
+ }
+ }
+
+ public static void setValueChangedListenerProperty(FacesContext context,
+ UIComponent component,
+ String valueChangedListener)
+ {
+ if (valueChangedListener != null)
+ {
+ if (!(component instanceof EditableValueHolder))
+ {
+ throw new IllegalArgumentException("Component " + component.getClientId(context) + " is no EditableValueHolder");
+ }
+ if (isValueReference(valueChangedListener))
+ {
+ MethodBinding mb = context.getApplication().createMethodBinding(valueChangedListener,
+ VALUE_LISTENER_ARGS);
+ /**
+ if(! Void.class.equals(mb.getType(context)))
+ {
+ throw new IllegalArgumentException(
+ valueChangedListener +
+ " : Return types for value change listeners must be void, see JSF spec. 3.2.5.1");
+ }
+ */
+
+ ((EditableValueHolder)component).setValueChangeListener(mb);
+ }
+ else
+ {
+ log.severe("Component " + component.getClientId(context) + " has invalid valueChangedListener expression " + valueChangedListener);
+ }
+ }
+ }
+
+}
Propchange: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/UIComponentTagUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/core/
------------------------------------------------------------------------------
bugtraq:number = true
Added: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/core/SelectItemTagBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/core/SelectItemTagBase.java?rev=1199953&view=auto
==============================================================================
--- myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/core/SelectItemTagBase.java (added)
+++ myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/core/SelectItemTagBase.java Wed Nov 9 20:36:11 2011
@@ -0,0 +1,107 @@
+/*
+ * 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.shared.taglib.core;
+
+import org.apache.myfaces.shared.renderkit.JSFAttr;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
+
+/**
+ * @author Thomas Spiegl (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class SelectItemTagBase
+ extends org.apache.myfaces.shared.taglib.UIComponentELTagBase
+{
+ //private static final Log log = LogFactory.getLog(SelectItemTag.class);
+
+ public String getComponentType()
+ {
+ return "javax.faces.SelectItem";
+ }
+
+ public String getRendererType()
+ {
+ return null;
+ }
+
+ // UISelectItem attributes
+ private ValueExpression _itemDisabled;
+ private ValueExpression _itemDescription;
+ private ValueExpression _itemLabel;
+ private ValueExpression _itemValue;
+ private ValueExpression _escape;
+ private ValueExpression _noSelectionOption;
+
+ protected void setProperties(UIComponent component)
+ {
+ super.setProperties(component);
+
+ setBooleanProperty(component, JSFAttr.ITEM_DISABLED_ATTR, _itemDisabled);
+ setStringProperty(component, JSFAttr.ITEM_DESCRIPTION_ATTR, _itemDescription);
+ setStringProperty(component, org.apache.myfaces.shared.renderkit.JSFAttr.ITEM_LABEL_ATTR, _itemLabel);
+ setStringProperty(component, JSFAttr.ITEM_VALUE_ATTR, _itemValue);
+ setBooleanProperty(component, JSFAttr.ITEM_ESCAPED_ATTR, _escape, Boolean.TRUE);
+ setBooleanProperty(component, JSFAttr.NO_SELECTION_OPTION_ATTR, _noSelectionOption, Boolean.FALSE);
+ }
+
+ public void setItemDisabled(ValueExpression itemDisabled)
+ {
+ _itemDisabled = itemDisabled;
+ }
+
+ public void setItemDescription(ValueExpression itemDescription)
+ {
+ _itemDescription = itemDescription;
+ }
+
+ public void setItemLabel(ValueExpression itemLabel)
+ {
+ _itemLabel = itemLabel;
+ }
+
+ @Deprecated
+ protected void setItemValue(String itemValue)
+ {
+ _itemValue = getFacesContext().getApplication().getExpressionFactory().createValueExpression(
+ getFacesContext().getELContext(),itemValue,String.class);
+ }
+
+ public void setItemValue(ValueExpression itemValue)
+ {
+ _itemValue = itemValue;
+ }
+
+ public void setEscape(ValueExpression escape)
+ {
+ _escape = escape;
+ }
+
+ protected ValueExpression getItemValue()
+ {
+ return _itemValue;
+ }
+
+ public void setNoSelectionOption(ValueExpression noSelectionOption)
+ {
+ _noSelectionOption = noSelectionOption;
+ }
+
+}
Propchange: myfaces/core/branches/2.0.x/shared/src/main/java/org/apache/myfaces/shared/taglib/core/SelectItemTagBase.java
------------------------------------------------------------------------------
svn:eol-style = native