blob: 149c341124d52f7e35c89e2d2530f68b8d4ff31f [file] [log] [blame]
package org.eclipse.jst.jsf.facelet.core.internal.cm.strategy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.jst.jsf.common.dom.TagIdentifier;
import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagAttribute;
import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.Namespace;
import org.eclipse.jst.jsf.designtime.internal.view.model.ITagRegistry;
import org.eclipse.jst.jsf.facelet.core.internal.cm.AttributeCMAdapter;
import org.eclipse.jst.jsf.facelet.core.internal.cm.TagInfo;
import org.eclipse.jst.jsf.facelet.core.internal.util.ViewUtil;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
/**
* The
* @author cbateman
*
*/
public class FaceletExternalMetadataStrategy extends
AbstractExternalMetadataStrategy
{
/**
* The unique identifier for the strategy.
*/
public final static String STRATEGY_ID = "org.eclipse.jst.jsf.facelet.core.internal.cm.strategy.FaceletExternalMetadataStrategy"; //$NON-NLS-1$
private final IProject _project;
/**
* @param project
*/
public FaceletExternalMetadataStrategy(final IProject project)
{
super(STRATEGY_ID, Messages.FaceletExternalMetadataStrategy_0);
_project = project;
}
@Override
public TagInfo perform(TagIdentifier input) throws Exception
{
final ITagRegistry tagRegistry = ViewUtil.getTagRegistry(_project);
if (tagRegistry != null)
{
Namespace tagLibrary = tagRegistry.getTagLibrary(input.getUri());
if (tagLibrary != null)
{
return new FaceletInternalInfo(tagLibrary);
}
}
return getNoResult();
}
private static class FaceletInternalInfo extends TagInfo
{
private final Namespace _namespace;
public FaceletInternalInfo(final Namespace namespace)
{
_namespace = namespace;
}
@Override
public Object getTagProperty(String tagName, String key)
{
if ("description".equals(key)) //$NON-NLS-1$
{
// TODO:
}
return null;
}
@Override
public CMNamedNodeMap getAttributes(String tagName)
{
ITagElement viewElement = _namespace.getViewElement(tagName);
if (viewElement != null)
{
return new MyNodeNameMap(viewElement);
}
return null;
}
private static class MyNodeNameMap implements CMNamedNodeMap
{
private final ITagElement _tagElement;
private final ArrayList<CMNode> _attrs;
public MyNodeNameMap(final ITagElement tagElement)
{
super();
_tagElement = tagElement;
_attrs = new ArrayList<CMNode>();
for (final Map.Entry<String, ? extends ITagAttribute> entry : _tagElement.getAttributes().entrySet())
{
final ITagAttribute attr = entry.getValue();
_attrs.add(new AttributeCMAdapter(attr));
}
}
public int getLength()
{
return _attrs.size();
}
public CMNode getNamedItem(String name)
{
if (name == null)
{
return null;
}
for (final CMNode cmNode : _attrs)
{
if (name.equals(cmNode.getNodeName()))
{
return cmNode;
}
}
return null;
}
public CMNode item(int index)
{
return _attrs.get(index);
}
public Iterator iterator()
{
return Collections.unmodifiableList(_attrs).iterator();
}
}
}
}