Example usage for java.beans BeanDescriptor getValue

List of usage examples for java.beans BeanDescriptor getValue

Introduction

In this page you can find the example usage for java.beans BeanDescriptor getValue.

Prototype

public Object getValue(String attributeName) 

Source Link

Document

Retrieve a named attribute with this feature.

Usage

From source file:org.apache.myfaces.application.ApplicationImpl.java

@Override
public UIComponent createComponent(FacesContext context, Resource componentResource) {
    checkNull(context, "context");
    checkNull(componentResource, "componentResource");

    UIComponent component = null;/*w  w  w  .  j  a  v  a2 s  .  c om*/
    Resource resource;
    String fqcn;
    Class<? extends UIComponent> componentClass = null;

    /*
     * Obtain a reference to the ViewDeclarationLanguage for this Application instance by calling
     * ViewHandler.getViewDeclarationLanguage(javax.faces.context.FacesContext, java.lang.String), passing the
     * viewId found by calling UIViewRoot.getViewId() on the UIViewRoot in the argument FacesContext.
     */
    UIViewRoot view = context.getViewRoot();
    Application application = context.getApplication();
    ViewDeclarationLanguage vdl = application.getViewHandler().getViewDeclarationLanguage(context,
            view.getViewId());

    /*
     * Obtain a reference to the composite component metadata for this composite component by calling
     * ViewDeclarationLanguage.getComponentMetadata(javax.faces.context.FacesContext,
     * javax.faces.application.Resource), passing the facesContext and componentResource arguments to this method.
     * This version of JSF specification uses JavaBeans as the API to the component metadata.
     */
    BeanInfo metadata = vdl.getComponentMetadata(context, componentResource);
    if (metadata == null) {
        throw new FacesException("Could not get component metadata for " + componentResource.getResourceName()
                + ". Did you forget to specify <composite:interface>?");
    }

    /*
     * Determine if the component author declared a component-type for this component instance by obtaining the
     * BeanDescriptor from the component metadata and calling its getValue() method, passing
     * UIComponent.COMPOSITE_COMPONENT_TYPE_KEY as the argument. If non-null, the result must be a ValueExpression
     * whose value is the component-type of the UIComponent to be created for this Resource component. Call through
     * to createComponent(java.lang.String) to create the component.
     */
    BeanDescriptor descriptor = metadata.getBeanDescriptor();
    ValueExpression componentType = (ValueExpression) descriptor
            .getValue(UIComponent.COMPOSITE_COMPONENT_TYPE_KEY);
    boolean annotationsApplied = false;
    if (componentType != null) {
        component = application.createComponent((String) componentType.getValue(context.getELContext()));
        annotationsApplied = true;
    } else {
        /*
         * Otherwise, determine if a script based component for this Resource can be found by calling
         * ViewDeclarationLanguage.getScriptComponentResource(javax.faces.context.FacesContext,
         * javax.faces.application.Resource). If the result is non-null, and is a script written in one of the
         * languages listed in JSF 4.3 of the specification prose document, create a UIComponent instance from the
         * script resource.
         */
        resource = vdl.getScriptComponentResource(context, componentResource);
        if (resource != null) {
            String name = resource.getResourceName();
            String className = name.substring(0, name.lastIndexOf('.'));

            component = (UIComponent) ClassUtils.newInstance(className);
        } else {
            /*
             * Otherwise, let library-name be the return from calling Resource.getLibraryName() on the argument
             * componentResource and resource-name be the return from calling Resource.getResourceName() on the
             * argument componentResource. Create a fully qualified Java class name by removing any file extension
             * from resource-name and let fqcn be library-name + "." + resource-name. If a class with the name of
             * fqcn cannot be found, take no action and continue to the next step. If any of 
             * InstantiationException,
             * IllegalAccessException, or ClassCastException are thrown, wrap the exception in a FacesException and
             * re-throw it. If any other exception is thrown, log the exception and continue to the next step.
             */

            boolean isProduction = FacesContext.getCurrentInstance().isProjectStage(ProjectStage.Production);
            String name = componentResource.getResourceName();
            String className = name.substring(0, name.lastIndexOf('.'));
            fqcn = componentResource.getLibraryName() + "." + className;

            if (isProduction) {
                componentClass = (Class<? extends UIComponent>) _componentClassMap.get(fqcn);
            }
            if (componentClass == null) {
                try {
                    componentClass = ClassUtils.classForName(fqcn);
                    if (isProduction) {
                        _componentClassMap.put(fqcn, componentClass);
                    }
                } catch (ClassNotFoundException e) {
                    // Remember here that classForName did not find Class
                    if (isProduction) {
                        _componentClassMap.put(fqcn, NOTHING.getClass());
                    }
                }
            }

            if (componentClass != null && NOTHING.getClass() != componentClass) {
                try {
                    component = componentClass.newInstance();
                } catch (InstantiationException e) {
                    log.log(Level.SEVERE, "Could not instantiate component class name = " + fqcn, e);
                    throw new FacesException("Could not instantiate component class name = " + fqcn, e);
                } catch (IllegalAccessException e) {
                    log.log(Level.SEVERE, "Could not instantiate component class name = " + fqcn, e);
                    throw new FacesException("Could not instantiate component class name = " + fqcn, e);
                } catch (Exception e) {
                    log.log(Level.SEVERE, "Could not instantiate component class name = " + fqcn, e);
                }
            }

            /*
             * If none of the previous steps have yielded a UIComponent instance, call
             * createComponent(java.lang.String) passing "javax.faces.NamingContainer" as the argument.
             */
            if (component == null) {
                component = application.createComponent(context, UINamingContainer.COMPONENT_TYPE, null);
                annotationsApplied = true;
            }
        }
    }

    /*
     * Call UIComponent.setRendererType(java.lang.String) on the UIComponent instance, passing
     * "javax.faces.Composite" as the argument.
     */
    component.setRendererType("javax.faces.Composite");

    /*
     * Store the argument Resource in the attributes Map of the UIComponent under the key,
     * Resource.COMPONENT_RESOURCE_KEY.
     */
    component.getAttributes().put(Resource.COMPONENT_RESOURCE_KEY, componentResource);

    /*
     * Store composite component metadata in the attributes Map of the UIComponent under the key,
     * UIComponent.BEANINFO_KEY.
     */
    component.getAttributes().put(UIComponent.BEANINFO_KEY, metadata);

    /*
     * Before the component instance is returned, it must be inspected for the presence of a 
     * ListenerFor annotation.
     * If this annotation is present, the action listed in ListenerFor must be taken on the component, 
     * before it is
     * returned from this method.
     */
    if (!annotationsApplied) {
        _handleAnnotations(context, component, component);
    }

    return component;
}

From source file:org.eclipse.wb.internal.swing.customize.CustomizerAction.java

/**
 * @return <code>true</code> if {@link BeanInfo} for given info object contains flag
 *         "EXPLICIT_PROPERTY_CHANGE"./* w w  w. ja  va 2  s .c om*/
 */
private static boolean isExplicitPropertyChange(JavaInfo javaInfo) throws Exception {
    BeanDescriptor beanDescriptor = javaInfo.getDescription().getBeanDescriptor();
    return Boolean.TRUE.equals(beanDescriptor.getValue("EXPLICIT_PROPERTY_CHANGE"));
}