Guest User

Untitled

a guest
May 21st, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
  1. package org.jboss.seam.faces.component;
  2.  
  3. import java.lang.annotation.Annotation;
  4. import java.util.Set;
  5. import javax.enterprise.inject.Produces;
  6. import javax.enterprise.inject.Typed;
  7. import javax.enterprise.inject.spi.InjectionPoint;
  8. import javax.faces.component.EditableValueHolder;
  9. import javax.faces.component.UICommand;
  10. import javax.faces.component.UIComponent;
  11. import javax.faces.component.UIData;
  12. import javax.faces.component.UIForm;
  13. import javax.faces.component.UIInput;
  14. import javax.faces.component.UIPanel;
  15. import javax.faces.context.FacesContext;
  16.  
  17. /**
  18. * @author Dan Allen
  19. */
  20. public class UIComponentProducer
  21. {
  22. public @Produces @ClientId UIComponent findComponent(InjectionPoint ip, FacesContext ctx)
  23. {
  24. return findComponentWithType(ip, ctx, UIComponent.class);
  25. }
  26.  
  27. public @Produces @ClientId @Typed(UIForm.class) UIForm findFormComponent(InjectionPoint ip, FacesContext ctx)
  28. {
  29. return findComponentWithType(ip, ctx, UIForm.class);
  30. }
  31.  
  32. public @Produces @ClientId @Typed(UICommand.class) UICommand findCommandComponent(InjectionPoint ip, FacesContext ctx)
  33. {
  34. return findComponentWithType(ip, ctx, UICommand.class);
  35. }
  36.  
  37. public @Produces @ClientId @Typed(UIInput.class) UIInput findInputComponent(InjectionPoint ip, FacesContext ctx)
  38. {
  39. return findComponentWithType(ip, ctx, UIInput.class);
  40. }
  41.  
  42. public @Produces @ClientId @Typed(UIPanel.class) UIPanel findPanelComponent(InjectionPoint ip, FacesContext ctx)
  43. {
  44. return findComponentWithType(ip, ctx, UIPanel.class);
  45. }
  46.  
  47. public @Produces @ClientId @Typed(UIData.class) UIData findDataComponent(InjectionPoint ip, FacesContext ctx)
  48. {
  49. return findComponentWithType(ip, ctx, UIData.class);
  50. }
  51.  
  52. private <T extends UIComponent> T findComponentWithType(InjectionPoint ip, FacesContext ctx, Class<T> expectedType)
  53. {
  54. UIComponent candidate = ctx.getViewRoot().findComponent(getSearchExpression(ip));
  55. if (candidate != null && expectedType.isAssignableFrom(candidate.getClass()))
  56. {
  57. return expectedType.cast(candidate);
  58. }
  59. return null;
  60. }
  61.  
  62. private String getSearchExpression(InjectionPoint ip)
  63. {
  64. for (Annotation candidate : ip.getQualifiers())
  65. {
  66. if (candidate.annotationType().equals(ClientId.class))
  67. {
  68. String expr = ((ClientId) candidate).value().trim();
  69. if (expr.length() == 0)
  70. {
  71. throw new IllegalArgumentException("Client id value cannot be empty at " + ip);
  72. }
  73. return expr;
  74. }
  75. }
  76. throw new IllegalArgumentException("Injection point " + ip + " does not have " + ClientId.class + " qualifier");
  77. }
  78. }
Add Comment
Please, Sign In to add comment