List of usage examples for java.beans BeanDescriptor getValue
public Object getValue(String attributeName)
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")); }