Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.jboss.seam.faces.component;
- import java.lang.annotation.Annotation;
- import java.util.Set;
- import javax.enterprise.inject.Produces;
- import javax.enterprise.inject.Typed;
- import javax.enterprise.inject.spi.InjectionPoint;
- import javax.faces.component.EditableValueHolder;
- import javax.faces.component.UICommand;
- import javax.faces.component.UIComponent;
- import javax.faces.component.UIData;
- import javax.faces.component.UIForm;
- import javax.faces.component.UIInput;
- import javax.faces.component.UIPanel;
- import javax.faces.context.FacesContext;
- /**
- * @author Dan Allen
- */
- public class UIComponentProducer
- {
- public @Produces @ClientId UIComponent findComponent(InjectionPoint ip, FacesContext ctx)
- {
- return findComponentWithType(ip, ctx, UIComponent.class);
- }
- public @Produces @ClientId @Typed(UIForm.class) UIForm findFormComponent(InjectionPoint ip, FacesContext ctx)
- {
- return findComponentWithType(ip, ctx, UIForm.class);
- }
- public @Produces @ClientId @Typed(UICommand.class) UICommand findCommandComponent(InjectionPoint ip, FacesContext ctx)
- {
- return findComponentWithType(ip, ctx, UICommand.class);
- }
- public @Produces @ClientId @Typed(UIInput.class) UIInput findInputComponent(InjectionPoint ip, FacesContext ctx)
- {
- return findComponentWithType(ip, ctx, UIInput.class);
- }
- public @Produces @ClientId @Typed(UIPanel.class) UIPanel findPanelComponent(InjectionPoint ip, FacesContext ctx)
- {
- return findComponentWithType(ip, ctx, UIPanel.class);
- }
- public @Produces @ClientId @Typed(UIData.class) UIData findDataComponent(InjectionPoint ip, FacesContext ctx)
- {
- return findComponentWithType(ip, ctx, UIData.class);
- }
- private <T extends UIComponent> T findComponentWithType(InjectionPoint ip, FacesContext ctx, Class<T> expectedType)
- {
- UIComponent candidate = ctx.getViewRoot().findComponent(getSearchExpression(ip));
- if (candidate != null && expectedType.isAssignableFrom(candidate.getClass()))
- {
- return expectedType.cast(candidate);
- }
- return null;
- }
- private String getSearchExpression(InjectionPoint ip)
- {
- for (Annotation candidate : ip.getQualifiers())
- {
- if (candidate.annotationType().equals(ClientId.class))
- {
- String expr = ((ClientId) candidate).value().trim();
- if (expr.length() == 0)
- {
- throw new IllegalArgumentException("Client id value cannot be empty at " + ip);
- }
- return expr;
- }
- }
- throw new IllegalArgumentException("Injection point " + ip + " does not have " + ClientId.class + " qualifier");
- }
- }
Add Comment
Please, Sign In to add comment