blob: e34d56d1d2ac8eceda8f6e6bb112ac3d8cb5e214 [file] [log] [blame]
/*******************************************************************************
* 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;
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.IAttributeAdvisor.NullAttributeAdvisor;
import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
import org.osgi.framework.Version;
/**
* ** TEMPORARY CLASS UNTIL META-DATA STRATEGY IS AVAILABLE **
*
* @author cbateman
*
*/
public class DefaultJSPTagResolver extends JSPTagResolvingStrategy
{
/**
* strategy id
*/
public final static String ID = "org.eclipse.jst.jsf.metadata.DefaultJSPTagResolver"; //$NON-NLS-1$
/**
* displayable nameb
*/
public final static String DISPLAY_NAME = Messages.DefaultJSPTagResolver_DisplayName;
private final ViewMetadataLoader _loader;
private final ViewMetadataMapper _mapper;
/**
* @return the descriptor for this resolver strategy
*/
public static StrategyDescriptor createDescriptor()
{
return new StrategyDescriptor(ID, DISPLAY_NAME);
}
/**
* @param project
*/
public DefaultJSPTagResolver(final IProject project)
{
_loader = new ViewMetadataLoader(project);
_mapper = new ViewMetadataMapper();
}
@Override
public ITagElement resolve(final TLDElementDeclaration elementDecl)
{
// final IProjectFacetVersion version = JSFAppConfigUtils
// .getProjectFacet(_project);
// final String versionAsString = version.getVersionString();
// final JSFVersion jsfVersion = JSFVersion.valueOfString(versionAsString);
final TagIdentifier tagId = TagIdentifierFactory
.createTLDTagWrapper(elementDecl);
// 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 TLDComponentTagElement(elementDecl,
(ComponentTypeInfo) elementType,
new MetadataAttributeAdvisor(tagId, _loader, elementDecl));
}
else if (elementType instanceof ConverterTypeInfo)
{
return new TLDConverterTagElement(elementDecl,
(ConverterTypeInfo) elementType,
new MetadataAttributeAdvisor(tagId, _loader, elementDecl));
}
else if (elementType instanceof ValidatorTypeInfo)
{
return new TLDValidatorTagElement(elementDecl,
(ValidatorTypeInfo) elementType,
new MetadataAttributeAdvisor(tagId, _loader, elementDecl));
}
else if (elementType instanceof TagHandlerType)
{
return new TLDTagHandlerElement(elementDecl,
(TagHandlerType) elementType,
new MetadataAttributeAdvisor(tagId, _loader, elementDecl));
}
else if (DefaultTagTypeInfo.isDefaultLib(tagId.getUri()))
{
return new TLDTagElement(elementDecl, new NullAttributeAdvisor());
}
// 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;
}
}