diff options
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/TagAnalyzer.java')
-rw-r--r-- | jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/TagAnalyzer.java | 868 |
1 files changed, 0 insertions, 868 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/TagAnalyzer.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/TagAnalyzer.java deleted file mode 100644 index cd721d591..000000000 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/TagAnalyzer.java +++ /dev/null @@ -1,868 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 2008 Oracle Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Oracle Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsf.designtime.internal.view.model.jsp.analyzer; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaConventions; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jem.internal.proxy.core.IBeanProxy; -import org.eclipse.jem.internal.proxy.core.IBeanTypeProxy; -import org.eclipse.jem.internal.proxy.core.IConfigurationContributor; -import org.eclipse.jem.internal.proxy.core.IStandardBeanTypeProxyFactory; -import org.eclipse.jem.internal.proxy.core.ProxyFactoryRegistry; -import org.eclipse.jem.internal.proxy.ide.IDERegistration; -import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo; -import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterTypeInfo; -import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorTypeInfo; -import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IJSFTagElement; -import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IHandlerTagElement.TagHandlerType; -import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IJSFTagElement.TagType; -import org.eclipse.jst.jsf.core.JSFVersion; -import org.eclipse.jst.jsf.core.internal.JSFCorePlugin; -import org.eclipse.jst.jsf.core.internal.JSFCoreTraceOptions; -import org.eclipse.jst.jsf.core.internal.jem.BeanProxyUtil.BeanProxyWrapper; -import org.eclipse.jst.jsf.core.internal.jem.BeanProxyUtil.ProxyException; -import org.eclipse.jst.jsf.designtime.internal.view.DTComponentIntrospector; -import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDComponentTagElement; -import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDConverterTagElement; -import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDTagElement; -import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDTagHandlerElement; -import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDValidatorTagElement; -import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.IAttributeAdvisor.NullAttributeAdvisor; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration; - -/** - * Utility class supporting methods to derive information from JSP tag - * definitions (TLD) - * - * @author cbateman - * - */ -public final class TagAnalyzer -{ - private static final String JAVAX_FACES_WEBAPP_CONVERTER_TAG = "javax.faces.webapp.ConverterTag"; //$NON-NLS-1$ - private static final String JAVAX_FACES_WEBAPP_CONVERTER_ELTAG = "javax.faces.webapp.ConverterELTag"; //$NON-NLS-1$ - private static final String JAVAX_FACES_WEBAPP_VALIDATOR_TAG = "javax.faces.webapp.ValidatorTag"; //$NON-NLS-1$ - private static final String JAVAX_FACES_WEBAPP_VALIDATOR_ELTAG = "javax.faces.webapp.ValidatorELTag"; //$NON-NLS-1$ - private static final String JAVAX_FACES_WEBAPP_FACET_TAG = "javax.faces.webapp.FacetTag"; //$NON-NLS-1$ - - // private static final String JAVAX_FACES_WEBAPP_ACTIONLISTENER_TAG = - // "javax.faces.webapp.ActionListenerTag"; - // private static final String JAVAX_FACES_WEBAPP_VALUECHANGELISTENER_TAG = - // "javax.faces.webapp.ValueChangeListenerTag"; - private static final String JAVAX_FACES_WEBAPP_ATTRIBUTE_TAG = "javax.faces.webapp.AttributeTag"; //$NON-NLS-1$ - - private final static Set<String> COMPONENT_TAG_HANDLER_TYPES_JSF11; - private final static Set<String> COMPONENT_TAG_HANDLER_TYPES_JSF12; - - private final static Set<String> CONVERTER_TAG_HANDLER_TYPES_JSF11 = Collections - .singleton(JAVAX_FACES_WEBAPP_CONVERTER_TAG); - private final static Set<String> CONVERTER_TAG_HANDLER_TYPES_JSF12; - - private final static Set<String> VALIDATOR_TAG_HANDLER_TYPES_JSF11 = Collections - .singleton(JAVAX_FACES_WEBAPP_VALIDATOR_TAG); - private final static Set<String> VALIDATOR_TAG_HANDLER_TYPES_JSF12; - - private final static Set<String> FACET_TAG_HANDLER = Collections - .singleton(JAVAX_FACES_WEBAPP_FACET_TAG); - private final static Set<String> ATTRIBUTE_TAG_HANDLER = Collections - .singleton(JAVAX_FACES_WEBAPP_ATTRIBUTE_TAG); - // private final static Set<String> ACTIONLISTENER_TAG_HANDLER = Collections - // .singleton(JAVAX_FACES_WEBAPP_ACTIONLISTENER_TAG); - // private final static Set<String> VALUECHANGELISTENER_TAG_HANDLER = - // Collections - // .singleton(JAVAX_FACES_WEBAPP_VALUECHANGELISTENER_TAG); - - private final static Set<String> ALL_HANDLER_TAGS; - - static - { - // components - // JSF 1.1 - Set<String> set = new HashSet<String>(8); - set.add("javax.faces.webapp.UIComponentTag"); //$NON-NLS-1$ - set.add("javax.faces.webapp.UIComponentBodyTag"); //$NON-NLS-1$ - COMPONENT_TAG_HANDLER_TYPES_JSF11 = Collections.unmodifiableSet(set); - - // JSF 1.2+ - set = new HashSet<String>(8); - set.addAll(COMPONENT_TAG_HANDLER_TYPES_JSF11); - set.add("javax.faces.webapp.UIComponentELTag"); //$NON-NLS-1$ - COMPONENT_TAG_HANDLER_TYPES_JSF12 = Collections.unmodifiableSet(set); - - // converters - set = new HashSet<String>(8); - set.add(JAVAX_FACES_WEBAPP_CONVERTER_TAG); - set.add(JAVAX_FACES_WEBAPP_CONVERTER_ELTAG); - CONVERTER_TAG_HANDLER_TYPES_JSF12 = Collections.unmodifiableSet(set); - - // validators - set = new HashSet<String>(8); - set.add(JAVAX_FACES_WEBAPP_VALIDATOR_TAG); - set.add(JAVAX_FACES_WEBAPP_VALIDATOR_ELTAG); - VALIDATOR_TAG_HANDLER_TYPES_JSF12 = Collections.unmodifiableSet(set); - - // tag handlers - ALL_HANDLER_TAGS = new HashSet<String>(); - ALL_HANDLER_TAGS.addAll(FACET_TAG_HANDLER); - ALL_HANDLER_TAGS.addAll(ATTRIBUTE_TAG_HANDLER); - // ALL_HANDLER_TAGS.addAll(VALUECHANGELISTENER_TAG_HANDLER); - // ALL_HANDLER_TAGS.addAll(ACTIONLISTENER_TAG_HANDLER); - } - - /** - * Tries to determine the component type of the component that corresponds - * to the JSP tag defined by tldDecl. - * - * @param tldDecl - * @param project - * @return get the component type from the tag definition or null if none. - */ - public static String findComponentType(final TLDElementDeclaration tldDecl, - final IProject project) - { - final String className = tldDecl.getTagclass(); - - final IConfigurationContributor[] contributor = new IConfigurationContributor[] - { new ServletBeanProxyContributor(project) }; - - ProxyFactoryRegistry registry = null; - try - { - registry = getProxyFactoryRegistry(contributor, project); - - if (registry != null) - { - - final IStandardBeanTypeProxyFactory factory = registry - .getBeanTypeProxyFactory(); - final IBeanTypeProxy classTypeProxy = factory - .getBeanTypeProxy(className); - final BeanProxyWrapper classTypeWrapper = new BeanProxyWrapper(project, - classTypeProxy); - - try - { - classTypeWrapper.init(); - return classTypeWrapper.callStringMethod("getComponentType"); //$NON-NLS-1$ - } - catch (final ProxyException tp) - { - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR) - { - JSFCoreTraceOptions.log("TagAnalyzer.findComponentType", tp); //$NON-NLS-1$ - } - } - } - } - finally - { - if (registry != null) - { - registry.terminateRegistry(true); - } - } - return null; - } - - /** - * Tries to introspect tldDecl's tag class to determine what the identifier - * of the underlying Converter that is used to register it in the app config - * - * @param tldDecl - * @param project - * @return the converter type identifier for the tldDecl or null if not - * found - */ - public static String findConverterType(final TLDElementDeclaration tldDecl, - final IProject project) - { - // TODO: allow for pluggable resolver? - - // This one is more hacky and less prone to success than the component - // type finder because the ConverterTag doesn't initialize its type - // field on construction. Instead, both MyFaces and RI seem to do it - // based on the doStartTag method. They also don't provide a standard - // interface for acquiring the id so instead we make some guess on - // the internal field name. - ProxyFactoryRegistry registry = null; - try - { - final String className = tldDecl.getTagclass(); - - final IConfigurationContributor[] contributor = new IConfigurationContributor[] - { new ServletBeanProxyContributor(project) }; - registry = getProxyFactoryRegistry( - contributor, project); - - if (registry != null) - { - final IStandardBeanTypeProxyFactory factory = registry - .getBeanTypeProxyFactory(); - final IBeanTypeProxy classTypeProxy = factory - .getBeanTypeProxy(className); - - try - { - final IType type = JavaCore.create(project).findType(className); - - if (type != null - && DTComponentIntrospector - .isTypeNameInstanceOfClass( - type, - Collections - .singleton(JAVAX_FACES_WEBAPP_CONVERTER_ELTAG))) - { - return findConverterType_InELTag(factory, classTypeProxy,project); - } - // the assumption is that this is a component tag, so we assume - // it is one. - else if (type != null - && DTComponentIntrospector - .isTypeNameInstanceOfClass( - type, - Collections - .singleton(JAVAX_FACES_WEBAPP_CONVERTER_TAG))) - { - return findConverterType_InTag(factory, classTypeProxy, project); - } - } - catch (final JavaModelException jme) - { - // suppress for now - } - } - } - finally - { - if (registry != null) - { - registry.terminateRegistry(true); - } - } - return null; - } - - private static String findConverterType_InTag( - final IStandardBeanTypeProxyFactory factory, - final IBeanTypeProxy classTypeProxy, final IProject project) - { - final IBeanTypeProxy nullPageContextType = factory - .getBeanTypeProxy("javax.servlet.jsp.PageContext"); //$NON-NLS-1$ - final BeanProxyWrapper classTypeWrapper = new BeanProxyWrapper(project, - classTypeProxy); - - try - { - classTypeWrapper.init(); - - callSuppressExceptions(classTypeWrapper, "setPageContext", //$NON-NLS-1$ - new IBeanProxy[] - { null }, new IBeanTypeProxy[] - { nullPageContextType }); - callSuppressExceptions(classTypeWrapper, "doStartTag"); //$NON-NLS-1$ - - final IBeanTypeProxy converterProxy = factory - .getBeanTypeProxy(JAVAX_FACES_WEBAPP_CONVERTER_TAG); - - // hopefully doStartTag set the converter field before it - // failed. - // now try to guess what it's called - String converterId = getStringField(classTypeWrapper, - converterProxy, "converterId"); //$NON-NLS-1$ - - if (converterId != null) - { - return converterId; - } - - converterId = getStringField(classTypeWrapper, converterProxy, - "_converterId"); //$NON-NLS-1$ - - if (converterId != null) - { - return converterId; - } - - // no? look for a CONVERTER_ID - converterId = getStringField(classTypeWrapper, classTypeProxy, - "CONVERTER_ID"); //$NON-NLS-1$ - } - catch (final ProxyException tp) - { - // fall through - } - return null; - } - - private static String findConverterType_InELTag( - final IStandardBeanTypeProxyFactory factory, - final IBeanTypeProxy classTypeProxy, final IProject project) - { - final BeanProxyWrapper classTypeWrapper = new BeanProxyWrapper(project, - classTypeProxy); - final IBeanTypeProxy elExpressionType = factory - .getBeanTypeProxy("javax.el.ValueExpression"); //$NON-NLS-1$ - - if (elExpressionType == null) - { - return null; - } - - try - { - classTypeWrapper.init(); - - callSuppressExceptions(classTypeWrapper, "doStartTag"); //$NON-NLS-1$ - - // no? look for a CONVERTER_ID - final IBeanProxy converterId = getFieldInParents(classTypeWrapper, - classTypeProxy, "CONVERTER_ID_EXPR"); //$NON-NLS-1$ - - if (converterId != null) - { - converterId.getTypeProxy().isKindOf(elExpressionType); - final BeanProxyWrapper elExprValue = new BeanProxyWrapper(project, - converterId.getTypeProxy()); - final String value = elExprValue - .callStringMethod("getExpressionString"); //$NON-NLS-1$ - System.out.println("Expression string:" + value); //$NON-NLS-1$ - } - - // - // - // final IBeanTypeProxy converterProxy = factory - // .getBeanTypeProxy(JAVAX_FACES_WEBAPP_CONVERTER_TAG); - - } - catch (final ProxyException tp) - { - // fall through - } - return null; - } - - /** - * @param tldDecl - * @param project - * @return the validator type identifier for the tldDecl or null if not - * found - */ - public static String findValidatorType(final TLDElementDeclaration tldDecl, - final IProject project) - { - // TODO: allow for pluggable resolver? - - // This one is more hacky and less prone to success than the component - // type finder because the Validator doesn't initialize its type - // field on construction. Instead, both MyFaces and RI seem to do it - // based on the doStartTag method. They also don't provide a standard - // interface for acquiring the id so instead we make some guess on - // the internal field name. - final String className = tldDecl.getTagclass(); - - final IConfigurationContributor[] contributor = new IConfigurationContributor[] - { new ServletBeanProxyContributor(project) }; - - ProxyFactoryRegistry registry = null; - - try - { - registry = getProxyFactoryRegistry(contributor, project); - - if (registry != null) - { - final IStandardBeanTypeProxyFactory factory = registry - .getBeanTypeProxyFactory(); - final IBeanTypeProxy classTypeProxy = factory - .getBeanTypeProxy(className); - final BeanProxyWrapper classTypeWrapper = new BeanProxyWrapper(project, - classTypeProxy); - final IBeanTypeProxy converterProxy = factory - .getBeanTypeProxy(JAVAX_FACES_WEBAPP_VALIDATOR_TAG); - try - { - classTypeWrapper.init(); - - callSuppressExceptions(classTypeWrapper, "doStartTag"); //$NON-NLS-1$ - callSuppressExceptions(classTypeWrapper, "createValidator"); //$NON-NLS-1$ - - // hopefully doStartTag set the converter field before it - // failed. - // now try to guess what it's called - String validatorId = getStringField(classTypeWrapper, - converterProxy, "validatorId"); //$NON-NLS-1$ - - if (validatorId != null) - { - return validatorId; - } - - validatorId = getStringField(classTypeWrapper, converterProxy, - "_validatorId"); //$NON-NLS-1$ - - if (validatorId != null) - { - return validatorId; - } - - // no? then see if there's a VALIDATOR_ID field *on the tag* - validatorId = getStringField(classTypeWrapper, classTypeProxy, - "VALIDATOR_ID"); //$NON-NLS-1$ - - if (validatorId != null) - { - return validatorId; - } - } - catch (final ProxyException tp) - { - // fall through - } - } - } - finally - { - if (registry != null) - { - registry.terminateRegistry(true); - } - } - return null; - - } - - private static IBeanProxy getFieldInParents( - final BeanProxyWrapper classTypeWrapper, - final IBeanTypeProxy typeProxy, final String fieldName) - { - try - { - return classTypeWrapper.getFieldValueIncludeParents(fieldName, - typeProxy); - } - catch (final ProxyException e) - { - // suppress - } - - return null; - } - - private static String getStringField( - final BeanProxyWrapper classTypeWrapper, - final IBeanTypeProxy typeProxy, final String fieldName) - { - try - { - return classTypeWrapper.getStringFieldValue(fieldName, typeProxy); - } - catch (final ProxyException e) - { - // suppress - } - - return null; - } - - private static void callSuppressExceptions( - final BeanProxyWrapper classTypeWrapper, final String methodName) - { - try - { - classTypeWrapper.call(methodName); - } - catch (final ProxyException tp) - { - // suppress this since it may well throw an exception - // depending on what assumptions the tag class is making - // that won't be true because we're not in a servlet - } - } - - private static void callSuppressExceptions( - final BeanProxyWrapper classTypeWrapper, final String methodName, - final IBeanProxy[] args, final IBeanTypeProxy[] argTypes) - { - try - { - classTypeWrapper.call(methodName, args, argTypes); - } - catch (final ProxyException tp) - { - // suppress this since it may well throw an exception - // depending on what assumptions the tag class is making - // that won't be true because we're not in a servlet - } - - } - - /** - * @param project - * @return a new proxy factory registry or null; - * - * TODO: caching? - */ - private static ProxyFactoryRegistry getProxyFactoryRegistry( - final IConfigurationContributor[] configuration, - final IProject project) - { - try - { - return IDERegistration.startAnImplementation(configuration, false, - project, project.getName(), JSFCorePlugin.PLUGIN_ID, - new NullProgressMonitor()); - } - catch (final CoreException e) - { - JSFCorePlugin.log("Error starting vm for project: " //$NON-NLS-1$ - + project.getName(), e); - } - - return null; - } - - /** - * @param tldDecl - * @param project - * @return the tag element for the tldDecl - */ - public static TLDTagElement createTLDTagElement( - final TLDElementDeclaration tldDecl, final IProject project) - { - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR) - { - JSFCoreTraceOptions - .log(String - .format( - "TagAnalyzer.createTLDTagElement: Start tld=%s, project=%s", //$NON-NLS-1$ - tldDecl.getNodeName(), project.getName())); - } - long startTime = 0; - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR_PERF) - { - startTime = System.nanoTime(); - } - - try - { - final IJavaProject javaProject = JavaCore.create(project); - final String typeName = tldDecl.getTagclass(); - - if (typeName == null - || JavaConventions.validateJavaTypeName(typeName, - JavaCore.VERSION_1_3, - JavaCore.VERSION_1_3).getSeverity() == IStatus.ERROR) - { - JSFCorePlugin.log( - "Bad tag class name in " + tldDecl.toString(), //$NON-NLS-1$ - new Throwable()); - return null; - } - - final IType type = javaProject.findType(typeName); - - if (type == null) - { - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR) - { - JSFCoreTraceOptions.log("Type not found for: "+typeName); //$NON-NLS-1$ - } - return null; - } - final TagType tagType = getJSFComponentTagType(type, project); - - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR) - { - JSFCoreTraceOptions.log(String.format( - "Tag class type=%s\nTag type=%s", type, tagType)); //$NON-NLS-1$ - } - - if (tagType == TagType.COMPONENT) - { - final TLDTagElement element = createComponentTagElement(tldDecl, project); - - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR_PERF) - { - String name = element != null ? element.toString() - : "<none>"; //$NON-NLS-1$ - System.out.printf( - "Time to create component tag element %s was %d\n", //$NON-NLS-1$ - name, Long.valueOf(System.nanoTime() - startTime)); - } - return element; - } - else if (tagType == TagType.CONVERTER) - { - final TLDTagElement element = createConverterTagElement(tldDecl, project); - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR_PERF) - { - String name = element != null ? element.toString() - : "<none>"; //$NON-NLS-1$ - System.out.printf( - "Time to create converter tag element %s was %d\n", //$NON-NLS-1$ - name, Long.valueOf(System.nanoTime() - startTime)); - } - return element; - } - else if (tagType == TagType.VALIDATOR) - { - final TLDTagElement element = createValidatorTagElement(tldDecl, project); - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR_PERF) - { - String name = element != null ? element.toString() - : "<none>"; //$NON-NLS-1$ - System.out.printf( - "Time to create validator tag element %s was %d\n", //$NON-NLS-1$ - name, Long.valueOf(System.nanoTime() - startTime)); - } - return element; - } - else if (tagType == TagType.HANDLER) - { - final TLDTagElement element = createHandlerTagElement(tldDecl, type); - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR_PERF) - { - String name = element != null ? element.toString() - : "<none>"; //$NON-NLS-1$ - System.out.printf( - "Time to create handler tag element %s was %d\n", //$NON-NLS-1$ - name, Long.valueOf(System.nanoTime() - startTime)); - } - return element; - } - } - catch (final JavaModelException jme) - { - JSFCorePlugin.log(jme, "Trying to get type for TLD"); //$NON-NLS-1$ - } - - return null; - } - - /** - * @param tldDecl - * @param project - * @return a component tag element for tldDecl - */ - public static TLDTagElement createComponentTagElement( - final TLDElementDeclaration tldDecl, final IProject project) - { - final String componentType = findComponentType(tldDecl, project); - - if (componentType != null) - { - final String componentClass = DTComponentIntrospector - .findComponentClass(componentType, project); - - if (componentClass != null && !"".equals(componentClass.trim())) //$NON-NLS-1$ - { - final ComponentTypeInfo typeInfo = DTComponentIntrospector - .getComponent(componentType, componentClass, project, - new IConfigurationContributor[] - {new ServletBeanProxyContributor(project)}); - - if (typeInfo != null) - { - final TLDComponentTagElement tagElement = new TLDComponentTagElement( - tldDecl, typeInfo, new NullAttributeAdvisor()); - return tagElement; - } - } - } - - // TODO: really return null? - return null; - } - - /** - * @param tldDecl - * @param project - * @return a converter tag element for tldDecl - */ - public static TLDTagElement createConverterTagElement( - final TLDElementDeclaration tldDecl, final IProject project) - { - final String converterId = findConverterType(tldDecl, project); - - if (converterId != null) - { - final String converterClass = DTComponentIntrospector - .findConverterClass(converterId, project); - - if (converterClass != null && !"".equals(converterClass.trim())) //$NON-NLS-1$ - { - final ConverterTypeInfo typeInfo = DTComponentIntrospector - .getConverter(converterId, converterClass); - final TLDConverterTagElement tagElement = new TLDConverterTagElement( - tldDecl, typeInfo, new NullAttributeAdvisor()); - return tagElement; - } - } - - // we know (actually we assume by contract) that this a converter - // so create an unknown converter tag for it - return new TLDConverterTagElement(tldDecl, ConverterTypeInfo.UNKNOWN, new NullAttributeAdvisor()); - } - - /** - * @param tldDecl - * @param project - * @return a validator tag element for the tldDec - */ - public static TLDTagElement createValidatorTagElement( - final TLDElementDeclaration tldDecl, final IProject project) - { - final String validatorId = findValidatorType(tldDecl, project); - - if (validatorId != null) - { - final String validatorClass = DTComponentIntrospector - .findValidatorClass(validatorId, project); - - if (validatorClass != null && !"".equals(validatorClass.trim())) //$NON-NLS-1$ - { - final ValidatorTypeInfo typeInfo = DTComponentIntrospector - .getValidator(validatorId, validatorClass); - final TLDValidatorTagElement tagElement = new TLDValidatorTagElement( - tldDecl, typeInfo, new NullAttributeAdvisor()); - return tagElement; - } - } - // we know (actually we assume by contract) that this a validator - // so create an unknown converter tag for it - return new TLDValidatorTagElement(tldDecl, ValidatorTypeInfo.UNKNOWN, new NullAttributeAdvisor()); - } - - /** - * @param tldDecl - * @param type - * @return the tag element for a JSF handler - */ - public static TLDTagElement createHandlerTagElement( - final TLDElementDeclaration tldDecl, final IType type) - { - if (DTComponentIntrospector.isTypeNameInstanceOfClass(type, - FACET_TAG_HANDLER)) - { - return new TLDTagHandlerElement(tldDecl, TagHandlerType.FACET, new NullAttributeAdvisor()); - } - else if (DTComponentIntrospector.isTypeNameInstanceOfClass(type, - ATTRIBUTE_TAG_HANDLER)) - { - return new TLDTagHandlerElement(tldDecl, TagHandlerType.ATTRIBUTE, new NullAttributeAdvisor()); - } - // else if (isTypeNameInstanceOfClass(type, ACTIONLISTENER_TAG_HANDLER)) - // { - // return new TLDTagHandlerElement(tldDecl, - // TagHandlerType.ACTIONLISTENER); - // } - // else if (isTypeNameInstanceOfClass(type, - // VALUECHANGELISTENER_TAG_HANDLER)) - // { - // return new TLDTagHandlerElement(tldDecl, - // TagHandlerType.VALUECHANGELISTENER); - // } - return null; - } - - /** - * @param type - * @param project - * @return true if type represents a JSF component action class (spec 9.2.2) - */ - public static IJSFTagElement.TagType getJSFComponentTagType( - final IType type, final IProject project) - { - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR) - { - JSFCoreTraceOptions - .log(String - .format( - "TagAnalyzer.getJSFComponentTagType: Determining Tag Type for type %s on project %s", //$NON-NLS-1$ - type.getFullyQualifiedName(), project - .toString())); - } - - Set<String> componentTags = null; - Set<String> converterTags = null; - Set<String> validatorTags = null; - - final JSFVersion jsfVersion = ServletBeanProxyContributor.getProjectVersion(project); - - if (jsfVersion == null){ - return null; - } - // v1.1(9.2.2): JSF component tags must sub-class one of these - else if (jsfVersion == JSFVersion.V1_0 || jsfVersion == JSFVersion.V1_1) - { - componentTags = COMPONENT_TAG_HANDLER_TYPES_JSF11; - converterTags = CONVERTER_TAG_HANDLER_TYPES_JSF11; - validatorTags = VALIDATOR_TAG_HANDLER_TYPES_JSF11; - } - // v1.2(9.2.2): JSF component tags must sub-class UIComponentELTag - // the original two are included because we must be backward - // compatible - else if (jsfVersion == JSFVersion.V1_2 || jsfVersion == JSFVersion.V2_0) - { - componentTags = COMPONENT_TAG_HANDLER_TYPES_JSF12; - converterTags = CONVERTER_TAG_HANDLER_TYPES_JSF12; - validatorTags = VALIDATOR_TAG_HANDLER_TYPES_JSF12; - } - else - { - throw new IllegalArgumentException(); - } - - TagType tagType = null; - - if (DTComponentIntrospector.isTypeNameInstanceOfClass(type, - componentTags)) - { - tagType = TagType.COMPONENT; - } - else if (DTComponentIntrospector.isTypeNameInstanceOfClass(type, - converterTags)) - { - tagType = TagType.CONVERTER; - } - else if (DTComponentIntrospector.isTypeNameInstanceOfClass(type, - validatorTags)) - { - tagType = TagType.VALIDATOR; - } - else if (DTComponentIntrospector.isTypeNameInstanceOfClass(type, - ALL_HANDLER_TAGS)) - { - tagType = TagType.HANDLER; - } - - if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR) - { - JSFCoreTraceOptions.log(String.format( - "TagAnalyzer.getJSFComponentTagType: tag type is %s", //$NON-NLS-1$ - tagType != null ? tagType.toString() : "null")); //$NON-NLS-1$ - } - return tagType; - } - - -} |