Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletMetaResolvingStrategy.java')
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletMetaResolvingStrategy.java210
1 files changed, 210 insertions, 0 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletMetaResolvingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletMetaResolvingStrategy.java
new file mode 100644
index 000000000..9319cbd0a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletMetaResolvingStrategy.java
@@ -0,0 +1,210 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle Corporation.
+ * 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:
+ * Cameron Bateman - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsf.facelet.core.internal.registry;
+
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+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.model.types.TypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IHandlerTagElement.TagHandlerType;
+import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory;
+import org.eclipse.jst.jsf.designtime.internal.Messages;
+import org.eclipse.jst.jsf.designtime.internal.view.mapping.ViewMetadataLoader;
+import org.eclipse.jst.jsf.designtime.internal.view.mapping.ViewMetadataMapper;
+import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.TagMapping;
+import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.TagToViewObjectMapping;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.AbstractTagResolvingStrategy;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.DefaultTagTypeInfo;
+import org.eclipse.jst.jsf.facelet.core.internal.cm.FaceletDocumentFactory;
+import org.eclipse.jst.jsf.facelet.core.internal.tagmodel.ComponentTag;
+import org.eclipse.jst.jsf.facelet.core.internal.tagmodel.ConverterTag;
+import org.eclipse.jst.jsf.facelet.core.internal.tagmodel.HandlerTag;
+import org.eclipse.jst.jsf.facelet.core.internal.tagmodel.NoArchetypeFaceletTag;
+import org.eclipse.jst.jsf.facelet.core.internal.tagmodel.ValidatorTag;
+import org.osgi.framework.Version;
+
+/**
+ * Resolves facelet tags from JSF framework metadata.
+ *
+ * @author cbateman
+ *
+ */
+public class FaceletMetaResolvingStrategy
+ extends
+ AbstractTagResolvingStrategy<IFaceletTagResolvingStrategy.TLDWrapper, String>
+ implements IFaceletTagResolvingStrategy
+{
+
+ /**
+ * strategy id
+ */
+ public final static String ID = "org.eclipse.jst.jsf.facelet.metadata.FaceletMetaResolvingStrategy"; //$NON-NLS-1$
+ /**
+ * displayable nameb
+ */
+ public final static String DISPLAY_NAME = Messages.DefaultJSPTagResolver_DisplayName;
+
+ private final ViewMetadataLoader _loader;
+ private final ViewMetadataMapper _mapper;
+ private final FaceletDocumentFactory _factory;
+
+ /**
+ * @param project
+ * @param factory
+ */
+ public FaceletMetaResolvingStrategy(final IProject project,
+ final FaceletDocumentFactory factory)
+ {
+ _factory = factory;
+ _loader = new ViewMetadataLoader(project);
+ _mapper = new ViewMetadataMapper();
+ }
+
+ @Override
+ public ITagElement resolve(
+ final IFaceletTagResolvingStrategy.TLDWrapper elementDecl)
+ {
+ // final IProjectFacetVersion version = JSFAppConfigUtils
+ // .getProjectFacet(_project);
+ // final String versionAsString = version.getVersionString();
+ // final JSFVersion jsfVersion =
+ // JSFVersion.valueOfString(versionAsString);
+
+ final String uri = elementDecl.getUri();
+ final String tagName = elementDecl.getTagDefn().getName();
+ final TagIdentifier tagId = TagIdentifierFactory.createJSPTagWrapper(
+ uri, tagName);
+ // final DefaultTagTypeInfo defaultTagTypeInfo = new
+ // DefaultTagTypeInfo();
+ final TagMapping mapping = _loader.getTagToViewMapping(tagId);
+
+ TypeInfo elementType = null;
+ if (mapping != null)
+ {
+ elementType = findTypeInfo(mapping, "1.1", null); //$NON-NLS-1$
+ }
+
+ if (elementType instanceof ComponentTypeInfo)
+ {
+ return new ComponentTag(uri, tagName,
+ (ComponentTypeInfo) elementType, null, _factory,
+ new MetadataAttributeAdvisor(tagId, _loader));
+ }
+ else if (elementType instanceof ConverterTypeInfo)
+ {
+ return new ConverterTag(uri, tagName,
+ (ConverterTypeInfo) elementType, null, _factory,
+ new MetadataAttributeAdvisor(tagId, _loader));
+ }
+ else if (elementType instanceof ValidatorTypeInfo)
+ {
+ return new ValidatorTag(uri, tagName,
+ (ValidatorTypeInfo) elementType, null, _factory,
+ new MetadataAttributeAdvisor(tagId, _loader));
+ }
+ else if (elementType instanceof TagHandlerType)
+ {
+ return new HandlerTag(uri, tagName,
+ (TagHandlerType) elementType, null, _factory,
+ new MetadataAttributeAdvisor(
+ tagId, _loader));
+ }
+ else if (DefaultTagTypeInfo.isDefaultLib(tagId.getUri()))
+ {
+ return new NoArchetypeFaceletTag(uri, tagName, _factory, new MetadataAttributeAdvisor(tagId, _loader));
+ }
+
+ // not found
+ return null;
+ }
+
+ private TypeInfo findTypeInfo(final TagMapping mapping,
+ final String jsfVersion, final String libVersion)
+ {
+ final EList list = mapping.getVersionedTagToViewMappings();
+
+ FIND_BY_VERSION: for (final Iterator<?> it = list.iterator(); it
+ .hasNext();)
+ {
+ Object obj = it.next();
+
+ if (obj instanceof TagToViewObjectMapping)
+ {
+ final TagToViewObjectMapping viewMapping = (TagToViewObjectMapping) obj;
+
+ final String minJsfVersionString = viewMapping
+ .getMinJSFVersion();
+ if (minJsfVersionString != null)
+ {
+ try
+ {
+ final Version version = new Version(jsfVersion);
+ final Version minVersion = Version
+ .parseVersion(minJsfVersionString);
+
+ if (version.compareTo(minVersion) < 0)
+ {
+ // my version is less than the minimum specified
+ // by this meta-data
+ continue FIND_BY_VERSION;
+ }
+ }
+ catch (final IllegalArgumentException iae)
+ {
+ continue FIND_BY_VERSION;
+ }
+ }
+ final String minLibVersionString = viewMapping
+ .getMinLibraryVersion();
+ if (libVersion != null && minLibVersionString != null)
+ {
+ try
+ {
+ final Version version = new Version(libVersion);
+ final Version minLibVersion = Version
+ .parseVersion(minLibVersionString);
+
+ if (version.compareTo(minLibVersion) < 0)
+ {
+ // my lib version is less than the minimum specified
+ // by the meta-data
+ continue FIND_BY_VERSION;
+ }
+ }
+ catch (IllegalArgumentException iae)
+ {
+ continue FIND_BY_VERSION;
+ }
+ }
+ return _mapper.mapToFrameworkData(viewMapping.getTypeInfo());
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String getId()
+ {
+ return ID;
+ }
+
+ public String getDisplayName()
+ {
+ return DISPLAY_NAME;
+ }
+
+}

Back to the top