| /******************************************************************************* |
| * Copyright (c) 2006 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/Oracle - initial API and implementation |
| * |
| ********************************************************************************/ |
| |
| package org.eclipse.jst.jsf.context.resolver.structureddocument.internal.impl; |
| |
| import java.util.Iterator; |
| |
| import org.eclipse.jst.jsf.common.internal.JSPUtil; |
| import org.eclipse.jst.jsf.context.IModelContext; |
| import org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver; |
| import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext; |
| import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController; |
| import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager; |
| import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TaglibTracker; |
| import org.eclipse.wst.sse.core.StructuredModelManager; |
| import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; |
| import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; |
| import org.w3c.dom.Attr; |
| import org.w3c.dom.Node; |
| import org.w3c.dom.NodeList; |
| |
| /** |
| * TODO: this resolver only applies to structured documents that can have |
| * taglibs (I think only JSPs). Should we move a different package? |
| * Default taglib context resolver |
| * |
| * @author cbateman |
| * @deprecated Use ViewBasedTaglibResolver instead. This impl will be removed |
| * post-Helios. |
| */ |
| class TaglibContextResolver implements ITaglibContextResolver |
| { |
| private final IStructuredDocumentContext _context; |
| |
| TaglibContextResolver(IStructuredDocumentContext context) |
| { |
| _context = context; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver#getTagPrefixForURI(java.lang.String) |
| */ |
| public String getTagPrefixForURI(String uri) |
| { |
| return null; |
| } |
| |
| public boolean hasTag(final Node node) |
| { |
| Node checkNode = node; |
| |
| if (node instanceof Attr) |
| { |
| checkNode = ((Attr)node).getOwnerElement(); |
| } |
| |
| return getTracker(checkNode) != null; |
| } |
| |
| private TaglibTracker getTracker(Node node) |
| { |
| final String prefix = node.getPrefix(); |
| |
| final TLDCMDocumentManager docMgr = |
| TaglibController.getTLDCMDocumentManager(_context.getStructuredDocument()); |
| |
| // if there's no prefix, there's no way to id the tag library |
| // TODO: is this always true? need to consult spec |
| // similar problem if couldn't load docMgr |
| if (prefix == null |
| || docMgr == null) |
| { |
| return null; |
| } |
| |
| for (final Iterator it = docMgr.getTaglibTrackers().iterator(); it.hasNext();) |
| { |
| final TaglibTracker tracker = (TaglibTracker) it.next(); |
| |
| if (prefix.equals(tracker.getPrefix())) |
| { |
| return tracker; |
| } |
| } |
| |
| return null; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver#getTagURIForNodeName(org.w3c.dom.Node) |
| */ |
| public String getTagURIForNodeName(final Node node) |
| { |
| Node checkNode = node; |
| |
| if (node instanceof Attr) |
| { |
| checkNode = ((Attr)node).getOwnerElement(); |
| } |
| |
| final TaglibTracker tracker = getTracker(checkNode); |
| |
| if (tracker != null) |
| { |
| return tracker.getURI(); |
| } |
| |
| |
| return null; |
| } |
| |
| |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver#getTagsByNamespaceURI(java.lang.String, java.lang.String) |
| */ |
| public NodeList getTagsByNamespaceURI(String uri, String tagName) |
| { |
| //Document domDoc = new DOMContextResolver(_context).getDOMDocument(); |
| return null; |
| |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jst.jsf.context.resolver.IContextResolver#canResolveContext(org.eclipse.jst.jsf.context.IModelContext) |
| */ |
| public boolean canResolveContext(IModelContext modelContext) |
| { |
| // must be a JSP page |
| Object adapter = modelContext.getAdapter(IStructuredDocumentContext.class); |
| |
| if (adapter instanceof IStructuredDocumentContext) |
| { |
| IStructuredDocumentContext context = |
| (IStructuredDocumentContext) adapter; |
| IStructuredModel smodel = null; |
| |
| try |
| { |
| smodel = StructuredModelManager.getModelManager().getModelForRead((IStructuredDocument)context.getStructuredDocument()); |
| return JSPUtil.isJSPContentType(smodel.getContentTypeIdentifier()); |
| } |
| finally |
| { |
| if (smodel != null) |
| { |
| smodel.releaseFromRead(); |
| } |
| } |
| } |
| |
| return false; |
| } |
| } |