Пример #1
0
 private String[] determineQName(Tag tag) {
   TagAttribute attr = tag.getAttributes().get("jsfc");
   if (attr != null) {
     if (log.isLoggable(Level.FINE)) {
       log.fine(attr + " JSF Facelet Compile Directive Found");
     }
     String value = attr.getValue();
     String namespace, localName;
     int c = value.indexOf(':');
     if (c == -1) {
       namespace = this.namespaceManager.getNamespace("");
       localName = value;
     } else {
       String prefix = value.substring(0, c);
       namespace = this.namespaceManager.getNamespace(prefix);
       if (namespace == null) {
         throw new TagAttributeException(tag, attr, "No Namespace matched for: " + prefix);
       }
       localName = value.substring(c + 1);
     }
     return new String[] {namespace, localName};
   } else {
     return new String[] {tag.getNamespace(), tag.getLocalName()};
   }
 }
Пример #2
0
 public void applyMetadata(FaceletContext ctx, Object instance) {
   UIComponent c = (UIComponent) instance;
   c.setValueExpression(
       "value",
       attr.getValueExpression(
           ctx, ((c instanceof UISelectBoolean) ? Boolean.class : Object.class)));
 }
Пример #3
0
  public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
    // only process if it's been created
    if (null == parent
        || (null == (parent = parent.getParent()))
        || !(ComponentHandler.isNew(parent))) {
      return;
    }

    Map<String, Object> attrs = parent.getAttributes();

    CompositeComponentBeanInfo componentBeanInfo =
        (CompositeComponentBeanInfo) attrs.get(UIComponent.BEANINFO_KEY);
    assert (null != componentBeanInfo);
    List<PropertyDescriptor> declaredAttributes = componentBeanInfo.getPropertyDescriptorsList();

    // Get the value of required the name propertyDescriptor
    ValueExpression ve = name.getValueExpression(ctx, String.class);
    String strValue = (String) ve.getValue(ctx);

    // Search the propertyDescriptors for one for this attribute
    for (PropertyDescriptor cur : declaredAttributes) {
      if (strValue.endsWith(cur.getName())) {
        // If we have a match, no need to waste time
        // duplicating and replacing it.
        return;
      }
    }

    PropertyDescriptor propertyDescriptor;
    try {
      propertyDescriptor = new PropertyDescriptor(strValue, null, null);
      declaredAttributes.add(propertyDescriptor);
    } catch (IntrospectionException ex) {
      throw new TagException(
          tag, "Unable to create property descriptor for property " + strValue, ex);
    }

    for (TagAttribute tagAttribute : this.tag.getAttributes().getAll()) {
      String attributeName = tagAttribute.getLocalName();
      PropertyHandler handler = ATTRIBUTE_MANAGER.getHandler(ctx, attributeName);
      if (handler != null) {
        handler.apply(ctx, attributeName, propertyDescriptor, tagAttribute);
      }
    }

    this.nextHandler.apply(ctx, parent);
  }
Пример #4
0
  public Metadata applyRule(String name, TagAttribute attribute, MetadataTarget meta) {
    if (meta.isTargetInstanceOf(ValueHolder.class)) {

      if ("converter".equals(name)) {
        if (attribute.isLiteral()) {
          return new LiteralConverterMetadata(attribute.getValue());
        } else {
          return new DynamicConverterMetadata2(attribute);
        }
      }

      if ("value".equals(name)) {
        // if (attribute.isLiteral()) {
        //    return new LiteralValueMetadata(attribute.getValue());
        // } else {
        return new DynamicValueExpressionMetadata(attribute);
        // }
      }
    }
    return null;
  }
Пример #5
0
  public void apply(FaceletContext ctx, UIComponent parent) throws IOException {
    // only process if it's been created
    if (null == parent
        || (null == (parent = parent.getParent()))
        || !(ComponentHandler.isNew(parent))) {
      return;
    }

    Map<String, Object> attrs = parent.getAttributes();

    CompositeComponentBeanInfo componentBeanInfo =
        (CompositeComponentBeanInfo) attrs.get(UIComponent.BEANINFO_KEY);
    assert (null != componentBeanInfo);
    List<PropertyDescriptor> declaredAttributes = componentBeanInfo.getPropertyDescriptorsList();

    // Get the value of required the name propertyDescriptor
    ValueExpression ve = name.getValueExpression(ctx, String.class);
    String strValue = (String) ve.getValue(ctx);

    // Search the propertyDescriptors for one for this attribute
    for (PropertyDescriptor cur : declaredAttributes) {
      if (strValue.endsWith(cur.getName())) {
        // If we have a match, no need to waste time
        // duplicating and replacing it.
        return;
      }
    }

    PropertyDescriptor propertyDescriptor;
    try {
      propertyDescriptor = new CCAttributePropertyDescriptor(strValue, null, null);
      declaredAttributes.add(propertyDescriptor);
    } catch (IntrospectionException ex) {
      throw new TagException(
          tag, "Unable to create property descriptor for property " + strValue, ex);
    }

    TagAttribute defaultTagAttribute = null;
    PropertyHandler defaultHandler = null;
    for (TagAttribute tagAttribute : this.tag.getAttributes().getAll()) {
      String attributeName = tagAttribute.getLocalName();
      if ("default".equals(attributeName)) {
        // store the TagAttribute and the PropertyHandler for later
        // execution, as the handler for the default-attribute requires,
        // that the PropertyHandler for 'type' - if it exists - has been
        // applied first.
        defaultTagAttribute = tagAttribute;
        defaultHandler = ATTRIBUTE_MANAGER.getHandler(ctx, "default");
      } else {
        PropertyHandler handler = ATTRIBUTE_MANAGER.getHandler(ctx, attributeName);
        if (handler != null) {
          handler.apply(ctx, attributeName, propertyDescriptor, tagAttribute);
        }
      }
    }
    if (defaultHandler != null) {
      // If the 'default'-attribute of cc:attribute was set, apply the
      // previously stored PropertyHandler (see above) now, as now it is
      // guaranteed that if a 'type'-attribute existed, that its handler
      // was already applied
      try {
        defaultHandler.apply(ctx, "default", propertyDescriptor, defaultTagAttribute);
      } catch (IllegalArgumentException ex) {
        // If the type (according to the type-attribute) can not be
        // found, the DefaultPropertyHandler will wrapp the
        // ClassNotFoundException into an IllegalArgumentException,
        // which is unwrapped into a TagException here.
        throw new TagException(
            tag, "'type' could not be resolved: " + ex.getCause(), ex.getCause());
      }
    }

    this.nextHandler.apply(ctx, parent);
  }
Пример #6
0
 public void applyMetadata(FaceletContext ctx, Object instance) {
   ((UIComponent) instance)
       .setValueBinding(
           "converter", new LegacyValueBinding(attr.getValueExpression(ctx, Converter.class)));
 }