diff options
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.facelet.ui/src/org/eclipse/jst/jsf/facelet/ui/internal/contentassist/XHTMLContentAssistProcessor2.java')
-rw-r--r-- | jsf/plugins/org.eclipse.jst.jsf.facelet.ui/src/org/eclipse/jst/jsf/facelet/ui/internal/contentassist/XHTMLContentAssistProcessor2.java | 335 |
1 files changed, 0 insertions, 335 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.ui/src/org/eclipse/jst/jsf/facelet/ui/internal/contentassist/XHTMLContentAssistProcessor2.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.ui/src/org/eclipse/jst/jsf/facelet/ui/internal/contentassist/XHTMLContentAssistProcessor2.java deleted file mode 100644 index 47ac5910e..000000000 --- a/jsf/plugins/org.eclipse.jst.jsf.facelet.ui/src/org/eclipse/jst/jsf/facelet/ui/internal/contentassist/XHTMLContentAssistProcessor2.java +++ /dev/null @@ -1,335 +0,0 @@ -package org.eclipse.jst.jsf.facelet.ui.internal.contentassist; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IProject; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.contentassist.CompletionProposal; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jface.text.contentassist.IContentAssistProcessor; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.jface.text.contentassist.IContextInformationValidator; -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.context.resolver.structureddocument.IDOMContextResolver; -import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory; -import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver; -import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ITextRegionContextResolver; -import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext; -import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory; -import org.eclipse.jst.jsf.designtime.internal.view.model.ITagRegistry; -import org.eclipse.jst.jsf.designtime.internal.view.model.TagRegistryFactory.TagRegistryFactoryException; -import org.eclipse.jst.jsf.facelet.core.internal.registry.FaceletRegistryManager.MyRegistryFactory; -import org.eclipse.jst.jsf.facelet.ui.internal.FaceletUiPlugin; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; - -/** - * Temporary. - * - * @author cbateman - * - */ -public class XHTMLContentAssistProcessor2 implements IContentAssistProcessor -{ - private final static ICompletionProposal[] NO_PROPOSALS = new ICompletionProposal[0]; - - public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, - int offset) - { - List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); - final IStructuredDocumentContext context = IStructuredDocumentContextFactory.INSTANCE - .getContext(viewer, offset); - - if (context != null) - { - final IDOMContextResolver domContextResolver = IStructuredDocumentContextResolverFactory.INSTANCE - .getDOMContextResolver(context); - - final Document doc = domContextResolver.getDOMDocument(); - - if (doc == null) - { - return NO_PROPOSALS; - } - - // get the namespaces that are already declared - final Map<String, PrefixEntry> documentNamespaces = getDocumentNamespaces(doc); - - final ITextRegionContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE - .getTextRegionResolver(context); - - if (resolver != null) - { - final String regionType = resolver.getRegionType(); - - if (DOMRegionContext.XML_CONTENT.equals(regionType)) - { - // TODO: this may be in the open it may occur on the inside - // of a - // "<" that doesn't have any further tag name yet - proposals = getTagCompletionsForDocument(context, - documentNamespaces, TagPrefix.NO_PREFIX); - } - else if (DOMRegionContext.XML_TAG_NAME.equals(regionType)) - { - final TagPrefix tagPrefix = new TagPrefix(resolver - .getRegionText()); - proposals = getTagCompletionsForDocument(context, - documentNamespaces, tagPrefix); - } - else - { - System.out.println(regionType); - } - } - } - - return proposals.toArray(NO_PROPOSALS); - } - - private List<ICompletionProposal> getTagCompletionsForDocument( - final IStructuredDocumentContext context, - final Map<String, PrefixEntry> namespaces, final TagPrefix tagPrefix) - { - final List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); - - final IWorkspaceContextResolver wkspaceResolver = IStructuredDocumentContextResolverFactory.INSTANCE - .getWorkspaceContextResolver(context); - final IProject project = wkspaceResolver.getProject(); - - MyRegistryFactory factory = new MyRegistryFactory(); - ITagRegistry registry; - try - { - registry = factory.createTagRegistry(project); - if (registry == null) - { - return proposals; - } - - final Collection<? extends Namespace> tagLibs = registry - .getAllTagLibraries(); - - for (final Namespace tagLib : tagLibs) - { - final PrefixEntry ns = namespaces.get(tagLib.getNSUri()); - - // if the tag library is not initialized, don't trigger - // a potentially expensive operation during the content assist - if (ns != null && tagLib.isInitialized()) - { - // only add if this namespace's prefix starts with - // the prefix that the user provided - if (ns._prefix.startsWith(tagPrefix.getPrefix())) - { - final Collection<?> tags = tagLib.getViewElements(); - - for (final Iterator<?> it = tags.iterator(); it - .hasNext();) - { - final ITagElement tagElement = (ITagElement) it - .next(); - - // only add an element it starts with the prefix - // provided - if (tagElement.getName().startsWith( - tagPrefix.getLocalName())) - { - final String userPrefix = tagPrefix - .getUserPrefix(); - - final String tagName = ns._prefix + ":" - + tagElement.getName(); - String replacementText = ""; - if ("".equals(userPrefix)) - { - replacementText = "<" + tagName + "></" - + tagName + ">"; - } - else - { - replacementText = tagName - .substring(userPrefix.length()); - } - proposals.add(new CompletionProposal( - replacementText, context - .getDocumentPosition(), 0, 0, - null, tagName, null, null)); - } - } - } - } - } - } - catch (TagRegistryFactoryException e) - { - FaceletUiPlugin.log(e); - } - - return proposals; - } - - private Map<String, PrefixEntry> getDocumentNamespaces(Document doc) - { - final Map<String, PrefixEntry> namespaces = new HashMap<String, PrefixEntry>(); - - Element rootElement = doc.getDocumentElement(); - - if (rootElement != null) - { - NamedNodeMap attrs = rootElement.getAttributes(); - for (int i = 0; i < attrs.getLength(); i++) - { - Attr a = (Attr) attrs.item(i); - PrefixEntry ns = PrefixEntry.parseNamespace(a); - if (ns != null) - { - namespaces.put(ns.getUri(), ns); - } - } - } - - return namespaces; - } - - private static class TagPrefix - { - public final static TagPrefix NO_PREFIX = new TagPrefix(""); - - private final String _prefix; - private final String _localName; - private final boolean _hasColon; - - public TagPrefix(final String tagName) - { - int prefixIdx = tagName.indexOf(':'); - - if (prefixIdx != -1) - { - _prefix = tagName.substring(0, prefixIdx); - _hasColon = true; - if (tagName.length() > prefixIdx) - { - _localName = tagName.substring(prefixIdx + 1); - } - else - { - _localName = ""; - } - } - else - { - _hasColon = false; - _prefix = tagName; - _localName = ""; - } - } - - public String getUserPrefix() - { - String userPrefix = _prefix; - - if (_hasColon) - { - userPrefix += ":"; - userPrefix += _localName; - } - - return userPrefix; - } - - public String getPrefix() - { - return _prefix; - } - - public String getLocalName() - { - return _localName; - } - } - - private static class PrefixEntry - { - private final String _uri; - private final String _prefix; - - public static PrefixEntry parseNamespace(Attr attr) - { - final String prefix = attr.getPrefix(); - - if ("xmlns".equals(prefix)) - { - final String prefixName = attr.getLocalName(); - if (prefixName != null) - { - final String uri = attr.getNodeValue(); - - if (uri != null) - { - return new PrefixEntry(uri, prefixName); - } - } - } - - return null; - } - - public PrefixEntry(final String uri, final String prefix) - { - _uri = uri; - _prefix = prefix; - } - - public final String getUri() - { - return _uri; - } - - public int hashCode() - { - return _uri.hashCode(); - } - - public boolean equals(Object obj) - { - return _uri.equals(obj); - } - } - - public IContextInformation[] computeContextInformation(ITextViewer viewer, - int offset) - { - return null; - } - - public char[] getCompletionProposalAutoActivationCharacters() - { - return null; - } - - public char[] getContextInformationAutoActivationCharacters() - { - return null; - } - - public IContextInformationValidator getContextInformationValidator() - { - return null; - } - - public String getErrorMessage() - { - return null; - } - -} |