| package org.eclipse.jst.jsf.facelet.core.internal.cm; |
| |
| import org.eclipse.jst.jsf.common.dom.TagIdentifier; |
| import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory; |
| import org.eclipse.jst.jsf.facelet.core.internal.FaceletCorePlugin; |
| import org.eclipse.jst.jsf.facelet.core.internal.cm.strategy.TagInfoStrategyComposite; |
| import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap; |
| |
| /** |
| * A tag info that composes a number of other tag infos selected from a |
| * TagInfoStrategyComposite. |
| * |
| * @author cbateman |
| * |
| */ |
| public abstract class CompositeTagInfo extends TagInfo |
| { |
| private final TagInfoStrategyComposite _compositeStrategy; |
| private final String _uri; |
| |
| /** |
| * @param uri |
| * @param compositeStrategy |
| */ |
| protected CompositeTagInfo(final String uri, final TagInfoStrategyComposite compositeStrategy) |
| { |
| _uri = uri; |
| _compositeStrategy = compositeStrategy; |
| } |
| @Override |
| public Object getTagProperty(String tagName, String key) |
| { |
| final TagIdentifier tagId = TagIdentifierFactory.createJSPTagWrapper( |
| _uri, tagName); |
| _compositeStrategy.resetIterator(); |
| |
| for (TagInfo tagInfo = getNextExternalInfo(tagId); tagInfo != _compositeStrategy |
| .getNoResult(); tagInfo = getNextExternalInfo(tagId)) |
| { |
| try |
| { |
| if (tagInfo != _compositeStrategy.getNoResult()) |
| { |
| final Object value = tagInfo.getTagProperty(tagName, key); |
| |
| if (value != null) |
| { |
| return value; |
| } |
| } |
| |
| // fall-through |
| } |
| catch (final Exception e) |
| { |
| FaceletCorePlugin.log("During meta-data strategy", e); //$NON-NLS-1$ |
| } |
| } |
| |
| return null; |
| |
| } |
| |
| /** |
| * @param tagName |
| * @return a named node map of known attributes for the tag, or null if not |
| * found |
| */ |
| @Override |
| public CMNamedNodeMap getAttributes(String tagName) |
| { |
| final TagIdentifier tagId = TagIdentifierFactory.createJSPTagWrapper( |
| _uri, tagName); |
| _compositeStrategy.resetIterator(); |
| |
| for (TagInfo tagInfo = getNextExternalInfo(tagId); tagInfo != _compositeStrategy |
| .getNoResult(); tagInfo = getNextExternalInfo(tagId)) |
| { |
| try |
| { |
| if (tagInfo != _compositeStrategy.getNoResult()) |
| { |
| final CMNamedNodeMap nodeMap = tagInfo |
| .getAttributes(tagName); |
| |
| if (nodeMap != null) |
| { |
| return nodeMap; |
| } |
| } |
| |
| // fall-through |
| } |
| catch (final Exception e) |
| { |
| FaceletCorePlugin.log("During meta-data strategy", e); //$NON-NLS-1$ |
| } |
| } |
| |
| return null; |
| } |
| |
| private TagInfo getNextExternalInfo(final TagIdentifier input) |
| { |
| return _compositeStrategy.perform(input); |
| } |
| } |