diff options
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/CMUtil.java')
-rw-r--r-- | jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/CMUtil.java | 374 |
1 files changed, 0 insertions, 374 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/CMUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/CMUtil.java deleted file mode 100644 index 47e20649b..000000000 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/CMUtil.java +++ /dev/null @@ -1,374 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 Sybase, Inc. 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: - * Sybase, Inc. - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsf.core.internal.tld; - -import java.util.Iterator; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsf.core.internal.JSFCorePlugin; -import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.CMDocumentFactoryTLD; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TaglibTracker; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration; -import org.eclipse.jst.jsp.core.taglib.ITaglibRecord; -import org.eclipse.wst.common.componentcore.ComponentCore; -import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; -import org.eclipse.wst.common.componentcore.resources.IVirtualFolder; -import org.eclipse.wst.html.core.internal.contentmodel.HTMLElementDeclaration; -import org.eclipse.wst.html.core.internal.provisional.HTMLCMProperties; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument; -import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; -import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMNodeWrapper; -import org.eclipse.wst.xml.core.internal.ssemodelquery.ModelQueryAdapter; -import org.w3c.dom.Element; - -/** - * Utility class to content model related information. - * - * @author mengbo - */ -public final class CMUtil { - /** - * If the element is a custom tag, get the URI of it. If the element is a - * standard JSP tag, return null. If is not jsp tag, then return null - * @param decl - * - * @return the tag uri as a string - */ - public static String getTagURI(CMElementDeclaration decl) { - if (decl instanceof CMNodeWrapper) { - decl = (CMElementDeclaration) ((CMNodeWrapper) decl) - .getOriginNode(); - } - if (decl instanceof TLDElementDeclaration) { - CMDocument doc = ((TLDElementDeclaration) decl).getOwnerDocument(); - if (doc instanceof TLDDocument) { - TLDDocument tldDoc = (TLDDocument)doc; - return getURIFromDoc(tldDoc , null); - } - } - return null; - } - - /** - * @param doc - * @param project - may be null in which case it is calculated as necessary from the doc baseLocation - * @return valid string to use for the uri when given a TLD doc - * Must <ul>not</ul> be called with HTML or JSP documents. - * As there is no API on the doc for standalone or tagDir doc, it is possible that this could return an invalid string. - * However, if the code is consistent in it's usage, all should be well. - * or null if not found. - */ - public static String getURIFromDoc(final TLDDocument doc, final IProject project) { - String uri = doc.getUri(); - IProject proj = project; - if (uri == null) {// - Path baseLoc = new Path(doc.getBaseLocation()); - if (proj == null) { - proj = getProjectFor(baseLoc); - if (proj == null) {//log error - return null; - } - } - - if (isTagDirDocument(doc, proj)) { - uri = getTagDirURI(doc, proj); - } else { - uri = getStandaloneTLDURI(doc, proj); - } - } - return uri; - } - - /** - * @param tldRec - * @param project - * @return valid string to use for the uri when given a ITaglibRecord - * or null. - */ - public static String getURIFromTaglibRecord(ITaglibRecord tldRec, IProject project) { - //similar code in PaletteHelper and above - String uri = tldRec.getDescriptor().getURI(); - if (uri == null || uri.trim().equals("")) { //$NON-NLS-1$ - //need to construct valid string representing taglib identifier - CMDocumentFactoryTLD factory = new CMDocumentFactoryTLD(); - TLDDocument doc = (TLDDocument)factory.createCMDocument(tldRec); - if (tldRec.getRecordType() == ITaglibRecord.TLD) { - uri = getStandaloneTLDURI(doc, project); - } - else if (tldRec.getRecordType() == ITaglibRecord.TAGDIR) { - uri = getTagDirURI(doc, project); - } - - } - return uri; - } - - private static String getStandaloneTLDURI(TLDDocument doc, IProject project) { - Path p = new Path(doc.getBaseLocation()); - IPath webContentPath = ComponentCore.createComponent(project).getRootFolder().getUnderlyingFolder().getLocation(); - return getURIFromPath(p.makeAbsolute().makeRelativeTo(webContentPath.makeAbsolute())); - } - - private static String getTagDirURI(TLDDocument doc, IProject project) { - Path p = new Path(doc.getBaseLocation()); - IVirtualComponent projectComp = ComponentCore.createComponent(project); - - if (projectComp != null) - { - IVirtualFolder rootFolder = projectComp.getRootFolder(); - - if (rootFolder != null) - { - IPath webContentPath = - rootFolder.getUnderlyingFolder().getFullPath(); - return getURIFromPath(p.makeRelativeTo(webContentPath)); - } - } - return null; - } - - private static String getURIFromPath(IPath uriPath) - { - if (uriPath != null) - return "/"+uriPath.toString(); //$NON-NLS-1$ - do not remove "/" since is necessary for tagdir attr on taglib directive - - return null; - } - - /** - * @param tldDoc - must not be null - * @param project - must not be null - * @return true if this is a tag dir tldDocument - */ - public static boolean isTagDirDocument(final TLDDocument tldDoc, final IProject project) { - if (tldDoc.getUri() == null || tldDoc.getUri().equals("")) { //$NON-NLS-1$ - IPath p = new Path(tldDoc.getBaseLocation()); - IPath webContentPath = ComponentCore.createComponent(project).getRootFolder().getUnderlyingFolder().getFullPath(); - if (p.matchingFirstSegments(webContentPath) == webContentPath.segmentCount()) { - p = p.removeFirstSegments(webContentPath.segmentCount()); - if (p.matchingFirstSegments(new Path("WEB-INF/tags")) == 2) { //$NON-NLS-1$) { - return true; - } - } - } - return false; - } - - //Code taken from jsf.common.ui.WorkspaceUtil - private static IProject getProjectFor(IPath path) { - String[] segs = path.segments(); - String projectPath = new String(); - IProject[] projects = ResourcesPlugin.getWorkspace().getRoot() - .getProjects(); - IProject project = null; - for (int p = 0; p < projects.length; p++) { - if (projects[p].isOpen()) { - for (int s = 0; s < segs.length; s++) { - if (segs[s].equalsIgnoreCase(projects[p].getName())) { - // Once we have a match on the project name, then - // the remainder of the segments equals the project path - for (int s2 = s + 1; s2 < segs.length; s2++) { - projectPath = projectPath - + "/" //$NON-NLS-1$ - + segs[s2]; - } - project = projects[p]; - break; - } - } - } - } - if (project == null) { - return null; - } - - // TODO: still don't understand why this refreshLocal is necessary - // for now, going to only allow it if this method is called - // when the tree isn't locked. This shouldn't cause a regression, since - // when the call fails currently things keep on going due to the catch - if (!project.getWorkspace().isTreeLocked()) - { - try { - project.refreshLocal(IResource.DEPTH_INFINITE, null); - } catch (CoreException e) { -// TODO C.B.:pushing this down to a warning because it creates really -// spurious output. Don't know why we are calling refreshLocal at all. - JSFCorePlugin.log(Status.WARNING, "Error.RefreshingLocal", e); //$NON-NLS-1$ - } - } - - IResource res = project.findMember(new Path(projectPath)); - if ((res != null) && (res.exists())) { - return project; - } - return null; - } - - /** - * Test whether this is the JSP core tag. - * - * @param decl - * @return true if decl is a jsp element declaration - */ - public static boolean isJSP(CMElementDeclaration decl) { - if (!decl.supports(HTMLCMProperties.IS_JSP)) { - return false; - } - Boolean b = (Boolean) decl.getProperty(HTMLCMProperties.IS_JSP); - return b.booleanValue(); - } - - /** - * @param decl - * @return true if the element declartion is a non-JSP html element - */ - public static boolean isHTML(CMElementDeclaration decl) { - if (!isJSP(decl) && (decl instanceof HTMLElementDeclaration)) { - return true; - } - return false; - } - - /** - * get element declaration of specified element - * - * @param element - * @return null if can't get it. - */ - public static CMElementDeclaration getElementDeclaration(Element element) { - if (element == null) { - return null; - } - INodeNotifier notifier = (INodeNotifier) element.getOwnerDocument(); - if (notifier == null) { - return null; - } - ModelQueryAdapter mqa = (ModelQueryAdapter) notifier - .getAdapterFor(ModelQueryAdapter.class); - if (mqa == null) { - return null; - } - return mqa.getModelQuery().getCMElementDeclaration(element); - } - - /** - * @param element - * @return the TLDElementDeclaration for element or null if not found - */ - public static TLDElementDeclaration getTLDElementDeclaration(Element element) { - CMNode decl = getElementDeclaration(element); - if (decl instanceof CMNodeWrapper) { - decl = ((CMNodeWrapper) decl).getOriginNode(); - } - if (decl instanceof TLDElementDeclaration) { - return (TLDElementDeclaration) decl; - } - return null; - } - - /** - * !!! NOTE: this function is intended to work around the problem that if your element - * has not yet been added to an IDOMModel, getElementDeclaration won't be able to find - * it. This method does nothing (unlike the ModelQuery-based approach in getElementDeclaration) - * to ensure that the namespace "uri" provided is valid in the structured document provided. It is - * therefore only advisable to use this method in cases where your node is not already a member of a - * IDOMModel. - * - * @param uri - * @param elementName - * @param document - * @return the TLDElementDeclaration for this required tag or null if there is nothing appropriate - */ - public static CMElementDeclaration getTLDElementDeclaration(final String uri, final String elementName, IDocument document) - { - TLDCMDocumentManager tldmgr = TaglibController.getTLDCMDocumentManager(document); - - if (tldmgr != null) - { - for (Iterator it = tldmgr.getTaglibTrackers().iterator();it.hasNext();) - { - TaglibTracker tracker = (TaglibTracker) it.next(); - - if (tracker.getURI().equals(uri)) - { - return (CMElementDeclaration) tracker.getElements().getNamedItem(tracker.getPrefix()+":"+elementName); //$NON-NLS-1$ - } - } - } - // fallthrough - return null; - } - - /** - * give an element, get its namespace URI. - * - * @param element - * @return the namespace URI - */ - public static String getElementNamespaceURI(Element element) { - //System.out.printf("uri for %s is %s\n", element.toString(), element.getNamespaceURI()); - - CMElementDeclaration decl = getElementDeclaration(element); - if (decl == null) { - - // if the content model has nothing, see if the element - // itself has an xml namespace - // TODO: should only apply this if the source document - // is a valid XML doc? - final String uri = element.getNamespaceURI(); - - // may be null which the default state - return uri; - } - - if (isJSP(decl)) { - return ITLDConstants.URI_JSP; - } else if (isHTML(decl)) { - return ITLDConstants.URI_HTML; - } - - return getTagURI(decl); - } - - /** - * @param element - * @return true if the element can have children - */ - public static boolean canHaveDirectTextChild(Element element) { - CMElementDeclaration decl = getElementDeclaration(element); - if (decl == null) { - return true; - } - int contentType = decl.getContentType(); - return contentType != CMElementDeclaration.ELEMENT - && contentType != CMElementDeclaration.EMPTY; - - } - - private CMUtil() - { - // util class, no external instantiation - } - -} |