Author: mbenson
Date: Fri Jun 3 16:21:19 2011
New Revision: 1131093
URL: http://svn.apache.org/viewvc?rev=1131093&view=rev
Log:
special JSF2 handling for AllowedValuesComponentInitializer, do not populate
UISelectOne + UISelectItem unless UISelectItem is no-selection option
Added:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/util/
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/util/ComponentUtils.java
(with props)
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval12/src/main/resources/META-INF/faces-config.xml
- copied unchanged from r1125096,
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/resources/META-INF/faces-config.xml
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener20.java
(with props)
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer20.java
(with props)
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/resources/META-INF/faces-config.xml
(with props)
Removed:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/resources/
Modified:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer.java
Modified:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java
URL:
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java?rev=1131093&r1=1131092&r2=1131093&view=diff
==============================================================================
---
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java
(original)
+++
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java
Fri Jun 3 16:21:19 2011
@@ -66,7 +66,15 @@ public class DynamicBeanValidationStartu
ExtValUtils
.registerValidationStrategyToMetaDataTransformerNameMapper(new
ValuesMetaDataTransformer.Labeled.NameMapper());
- ExtValContext.getContext().addComponentInitializer(new
AllowedValuesComponentInitializer());
+
ExtValContext.getContext().addComponentInitializer(createAllowedValuesComponentInitializer());
+ }
+
+ /**
+ * Create the {@link AllowedValuesComponentInitializer} to register.
+ * @return {@link AllowedValuesComponentInitializer}
+ */
+ protected AllowedValuesComponentInitializer
createAllowedValuesComponentInitializer() {
+ return new AllowedValuesComponentInitializer();
}
private <R extends RendererInterceptor, S extends R> void
swap(ExtValContext extValContext,
Modified:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer.java
URL:
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer.java?rev=1131093&r1=1131092&r2=1131093&view=diff
==============================================================================
---
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer.java
(original)
+++
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer.java
Fri Jun 3 16:21:19 2011
@@ -24,6 +24,7 @@ import javax.faces.component.UISelectOne
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
+import org.apache.bval.jsr303.dynamic.extval.util.ComponentUtils;
import
org.apache.myfaces.extensions.validator.core.initializer.component.ComponentInitializer;
/**
@@ -36,39 +37,22 @@ public class AllowedValuesComponentIniti
/**
* {@inheritDoc}
*/
- public final void configureComponent(FacesContext facesContext,
UIComponent uiComponent,
- Map<String, Object> metaData) {
+ public void configureComponent(FacesContext facesContext, UIComponent
uiComponent, Map<String, Object> metaData) {
if (metaData.containsKey(MetaDataKeys.ALLOWED_VALUES) && uiComponent
instanceof UISelectOne) {
- UISelectItems uiSelectItems = findUISelectItems((UISelectOne)
uiComponent);
+ UISelectItems uiSelectItems =
ComponentUtils.findFirstChildOfType(UISelectItems.class, uiComponent);
if (uiSelectItems != null) {
if (!this.isOwner(uiSelectItems)) {
return;
}
- uiComponent.getChildren().remove(uiSelectItems);
+ } else {
+ uiSelectItems = createUISelectItems();
+ uiComponent.getChildren().add(uiSelectItems);
}
- uiSelectItems = createUISelectItems();
setValue(uiSelectItems, metaData.get(MetaDataKeys.ALLOWED_VALUES));
- uiComponent.getChildren().add(uiSelectItems);
}
}
/**
- * Find the first existing {@link UISelectItems} child of a specified
parent component.
- *
- * @param parent
- * to search
- * @return {@code UISelectItems} or {@code null}
- */
- protected UISelectItems findUISelectItems(UISelectOne parent) {
- for (UIComponent child : parent.getChildren()) {
- if (child instanceof UISelectItems) {
- return (UISelectItems) child;
- }
- }
- return null;
- }
-
- /**
* Generate a {@code UISelectItems} instance, adding our classname as the
value of an attribute mapping keyed by
* {@code ComponentInitializer}'s classname.
*
Added:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/util/ComponentUtils.java
URL:
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/util/ComponentUtils.java?rev=1131093&view=auto
==============================================================================
---
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/util/ComponentUtils.java
(added)
+++
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/util/ComponentUtils.java
Fri Jun 3 16:21:19 2011
@@ -0,0 +1,67 @@
+/*
+ * 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.bval.jsr303.dynamic.extval.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+import javax.faces.component.UIComponent;
+
+/**
+ * Component utilities.
+ *
+ * @version $Rev$ $Date$
+ */
+public abstract class ComponentUtils {
+
+ /**
+ * Find the first child of {@code parent} of specified {@code type}.
+ *
+ * @param <T>
+ * @param type
+ * @param parent
+ * @return child, {@code null} if none found
+ */
+ @SuppressWarnings("unchecked")
+ public static <T extends UIComponent> T findFirstChildOfType(Class<T>
type, UIComponent parent) {
+ for (UIComponent child : parent.getChildren()) {
+ if (type.isInstance(child)) {
+ return (T) child;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Find children of {@code parent} of specified {@code type}.
+ *
+ * @param <T>
+ * @param type
+ * @param parent
+ * @return Iterable
+ */
+ @SuppressWarnings("unchecked")
+ public static <T extends UIComponent> Iterable<T>
findChildrenOfType(Class<T> type, UIComponent parent) {
+ ArrayList<T> result = new ArrayList<T>();
+ for (UIComponent child : parent.getChildren()) {
+ if (type.isInstance(child)) {
+ result.add((T) child);
+ }
+ }
+ return result.isEmpty() ? Collections.<T> emptySet() : result;
+ }
+}
Propchange:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/util/ComponentUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener20.java
URL:
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener20.java?rev=1131093&view=auto
==============================================================================
---
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener20.java
(added)
+++
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener20.java
Fri Jun 3 16:21:19 2011
@@ -0,0 +1,38 @@
+/*
+ * 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.bval.jsr303.dynamic.extval;
+
+import
org.apache.bval.jsr303.dynamic.extval.metadata.AllowedValuesComponentInitializer;
+import
org.apache.bval.jsr303.dynamic.extval.metadata.AllowedValuesComponentInitializer20;
+
+/**
+ * JSF 2.0-specific {@code DynamicBeanValidationStartupListener}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DynamicBeanValidationStartupListener20 extends
DynamicBeanValidationStartupListener {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected AllowedValuesComponentInitializer
createAllowedValuesComponentInitializer() {
+ // TODO Auto-generated method stub
+ return new AllowedValuesComponentInitializer20();
+ }
+}
Propchange:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener20.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer20.java
URL:
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer20.java?rev=1131093&view=auto
==============================================================================
---
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer20.java
(added)
+++
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer20.java
Fri Jun 3 16:21:19 2011
@@ -0,0 +1,48 @@
+/*
+ * 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.bval.jsr303.dynamic.extval.metadata;
+
+import java.util.Map;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectItem;
+import javax.faces.context.FacesContext;
+
+import org.apache.bval.jsr303.dynamic.extval.util.ComponentUtils;
+
+/**
+ * Extends {@link AllowedValuesComponentInitializer} to bypass any component
which has an individually specified
+ * {@code UISelectItem} child that is <em>not</em> indicated to be a
no-selection option.
+ *
+ * @version $Rev$ $Date$
+ */
+public class AllowedValuesComponentInitializer20 extends
AllowedValuesComponentInitializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void configureComponent(FacesContext facesContext, UIComponent
uiComponent, Map<String, Object> metaData) {
+ for (UISelectItem item :
ComponentUtils.findChildrenOfType(UISelectItem.class, uiComponent)) {
+ if (item.isNoSelectionOption()) {
+ continue;
+ }
+ return;
+ }
+ super.configureComponent(facesContext, uiComponent, metaData);
+ }
+}
Propchange:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/AllowedValuesComponentInitializer20.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/resources/META-INF/faces-config.xml
URL:
http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/resources/META-INF/faces-config.xml?rev=1131093&view=auto
==============================================================================
---
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/resources/META-INF/faces-config.xml
(added)
+++
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/resources/META-INF/faces-config.xml
Fri Jun 3 16:21:19 2011
@@ -0,0 +1,26 @@
+<!--
+ * 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.
+-->
+<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
+ version="1.2">
+ <lifecycle>
+
<phase-listener>org.apache.bval.jsr303.dynamic.extval.DynamicBeanValidationStartupListener20</phase-listener>
+ </lifecycle>
+</faces-config>
Propchange:
incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval20/src/main/resources/META-INF/faces-config.xml
------------------------------------------------------------------------------
svn:eol-style = native