diff options
Diffstat (limited to 'bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AttributeContextInformationProvider.java')
-rw-r--r-- | bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AttributeContextInformationProvider.java | 231 |
1 files changed, 0 insertions, 231 deletions
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AttributeContextInformationProvider.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AttributeContextInformationProvider.java deleted file mode 100644 index f18d7c88df..0000000000 --- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AttributeContextInformationProvider.java +++ /dev/null @@ -1,231 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 2010 IBM Corporation 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: - * IBM Corporation - initial API and implementation - * Jens Lukowski/Innoopract - initial renaming/restructuring - * - *******************************************************************************/ -package org.eclipse.wst.xml.ui.internal.contentassist; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; - -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.contentassist.ContextInformation; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration; -import org.eclipse.wst.xml.core.internal.contentmodel.CMContent; -import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; -import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNodeList; -import org.eclipse.wst.xml.core.internal.contentmodel.basic.CMNamedNodeMapImpl; -import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery; -import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryUtil; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - - -/** - * Calculates attribute context information based on a StructuedDocument and - * document position. - * - * @author pavery - */ -public class AttributeContextInformationProvider { - private final IContextInformation[] EMPTY_CONTEXT_INFO = new IContextInformation[0]; - private Comparator fComparator; - - private IStructuredDocument fDocument = null; - private ContextInfoModelUtil fModelUtil = null; - - public AttributeContextInformationProvider(IStructuredDocument doc, AttributeContextInformationPresenter presenter) { - fDocument = doc; - fModelUtil = new ContextInfoModelUtil(fDocument); - } - - /** - * @param sdRegion - * - */ - private boolean canProposeInfo(IStructuredDocumentRegion sdRegion) { - if ((sdRegion != null) && isEndTag(sdRegion)) { - return false; - } - else { - return true; - } - } - - public IContextInformation[] getAttributeInformation(int offset) { - /* - * need to take care of special cases w/ ambiguous regions <tag>| - * </tag> also end tags.. - */ - IContextInformation[] results = EMPTY_CONTEXT_INFO; - - IStructuredDocumentRegion sdRegion = fModelUtil.getDocument().getRegionAtCharacterOffset(offset); - if (!canProposeInfo(sdRegion)) { - return EMPTY_CONTEXT_INFO; - } - - IDOMNode node = fModelUtil.getXMLNode(offset); - if (node != null) { - switch (node.getNodeType()) { - case Node.ELEMENT_NODE : - results = getInfoForElement(node); - break; - // future... - // case Node.TEXT_NODE : - // results = getInfoForText(node); - // break; - } - } - return results; - } - - /** - * Returns a comparator that compares CMAttributeDeclaration names. - * - * the comparator - */ - private Comparator getCMAttributeComparator() { - if (fComparator == null) { - fComparator = new Comparator() { - public int compare(Object o1, Object o2) { - return ((CMAttributeDeclaration) o1).getAttrName().compareTo(((CMAttributeDeclaration) o2).getAttrName()); - } - }; - } - return fComparator; - } - - /** - * @param node - * - */ - private IContextInformation[] getInfoForElement(IDOMNode node) { - IContextInformation[] results = EMPTY_CONTEXT_INFO; - CMElementDeclaration decl = fModelUtil.getModelQuery().getCMElementDeclaration((Element) node); - if (decl != null) { - CMNamedNodeMap attributes = decl.getAttributes(); - - CMNamedNodeMapImpl allAttributes = new CMNamedNodeMapImpl(attributes); - List nodes = ModelQueryUtil.getModelQuery(node.getOwnerDocument()).getAvailableContent((Element) node, decl, ModelQuery.INCLUDE_ATTRIBUTES); - for (int k = 0; k < nodes.size(); k++) { - CMNode cmnode = (CMNode) nodes.get(k); - if (cmnode.getNodeType() == CMNode.ATTRIBUTE_DECLARATION) { - allAttributes.put(cmnode); - } - } - attributes = allAttributes; - - String attrContextString = node.getNodeName(); - StringBuffer attrInfo = new StringBuffer(" "); //$NON-NLS-1$ - String name = ""; //$NON-NLS-1$ - HashMap attrPosMap = new HashMap(); - int pos = 0; - int length = 0; - int numPerLine = 8; - - CMAttributeDeclaration[] sortedAttrs = getSortedAttributes(attributes); - - for (int i = 0; i < sortedAttrs.length; i++) { - name = sortedAttrs[i].getAttrName(); - length = name.length(); - pos = attrInfo.length(); - - attrInfo.append(name); - - if (sortedAttrs[i].getUsage() == CMAttributeDeclaration.REQUIRED) { - attrInfo.append("*"); //$NON-NLS-1$ - length++; - } - if (i < attributes.getLength() - 1) { - attrInfo.append(" "); //$NON-NLS-1$ - if ((i != 0) && (i % numPerLine == 0)) { - attrInfo.append("\n "); //$NON-NLS-1$ - } - } - attrPosMap.put(name, new Position(pos, length)); - } - if (!attrInfo.toString().trim().equals("")) { - return new IContextInformation[]{new AttributeContextInformation(attrContextString, attrInfo.toString(), attrPosMap)}; - } - } - return results; - } - - /** - * @param node - * - */ - IContextInformation[] getInfoForText(IDOMNode node) { - Node parent = node.getParentNode(); - String contextString = node.getNodeName(); - StringBuffer info = new StringBuffer(" "); //$NON-NLS-1$ - if ((parent != null) && (parent.getNodeType() == Node.ELEMENT_NODE)) { - CMElementDeclaration decl = fModelUtil.getModelQuery().getCMElementDeclaration((Element) parent); - CMContent content = decl.getContent(); - if (content instanceof CMGroup) { - CMGroup cmGroup = (CMGroup) content; - CMNodeList children = cmGroup.getChildNodes(); - CMNode cmNode = null; - for (int i = 0; i < children.getLength(); i++) { - cmNode = children.item(i); - contextString = cmNode.getNodeName(); - if (contextString != null) { - info.append("<" + cmNode.getNodeName() + ">"); //$NON-NLS-1$ //$NON-NLS-2$ - if (i < children.getLength() - 1) { - info.append(" "); //$NON-NLS-1$ - } - } - } - } - } - if (!info.toString().trim().equals("")) { - return new IContextInformation[]{new ContextInformation(contextString, info.toString())}; - } - else { - return EMPTY_CONTEXT_INFO; - } - } - - /** - * Returns sorted array of CMAttributeDeclarations. - * - * @param attributes - * - */ - private CMAttributeDeclaration[] getSortedAttributes(CMNamedNodeMap attributes) { - List sorted = new ArrayList(); - for (int i = 0; i < attributes.getLength(); i++) { - sorted.add(attributes.item(i)); - } - Collections.sort(sorted, getCMAttributeComparator()); - return (CMAttributeDeclaration[]) sorted.toArray(new CMAttributeDeclaration[sorted.size()]); - } - - /** - * @param sdRegion - * - */ - private boolean isEndTag(IStructuredDocumentRegion sdRegion) { - ITextRegionList regions = sdRegion.getRegions(); - return regions.get(0).getType() == DOMRegionContext.XML_END_TAG_OPEN; - } -} |