blob: 42909661b75def164d7a28dba8c3603dd7ffbd3f [file] [log] [blame]
/*******************************************************************************
*Copyright (c) 2008 Standards for Technology in Automotive Retail 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:
* David Carver (STAR) - bug 230136 - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.xsl.ui.internal.contentassist;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal;
import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceInfo;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
import org.eclipse.wst.xsl.core.XSLCore;
import org.eclipse.wst.xsl.ui.internal.util.XSLPluginImageHelper;
import org.eclipse.wst.xsl.ui.internal.util.XSLPluginImages;
import org.w3c.dom.Node;
/**
* Provides content assistance for xsl elements that have the
* exclude-result-prefixes attribute. This will provide a list
* of all known result prefixes that aren't currently in the attribute
* list. This list is a space separated list. The XSL prefix is
* excluded.
*
* @author dcarver
* @since 1.0
*
*/
public class ExcludeResultPrefixesContentAssist extends AbstractXSLContentAssistRequest {
private static final String EXCLUDE_RESULT_PREFIXES = "exclude-result-prefixes"; //$NON-NLS-1$
private static final String DEFAULT = "#all"; //$NON-NLS-1$
private static final String ADDITIONAL_INFO = Messages.getString("ExcludeResultPrefixesContentAssist.2"); //$NON-NLS-1$
protected String[] tokens = null;
/**
* @param node
* @param documentRegion
* @param completionRegion
* @param begin
* @param length
* @param filter
* @param textViewer
*/
public ExcludeResultPrefixesContentAssist(Node node,
IStructuredDocumentRegion documentRegion,
ITextRegion completionRegion, int begin, int length, String filter,
ITextViewer textViewer) {
super(node, documentRegion, completionRegion, begin, length, filter, textViewer);
}
/**
* (non-Javadoc)
* @see org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest#getCompletionProposals()
*/
@Override
public ArrayList<ICompletionProposal> getCompletionProposals() {
proposals.clear();
IDOMAttr attrNode = (IDOMAttr)((IDOMElement)getNode()).getAttributeNode(EXCLUDE_RESULT_PREFIXES);
String excludeResultPrefixes = attrNode.getValue();
int offset = getCursorPosition();
if (excludeResultPrefixes == null || excludeResultPrefixes.equals(DEFAULT)) {
return getAllCompletionProposals();
}
tokens = excludeResultPrefixes.split("\\s"); //$NON-NLS-1$
if (tokens[0].equals("")) { //$NON-NLS-1$
CustomCompletionProposal proposal = new CustomCompletionProposal(
DEFAULT, offset, 0, DEFAULT.length(),
XSLPluginImageHelper.getInstance().getImage(XSLPluginImages.IMG_PREFIX),
DEFAULT, null, null, 0);
addProposal(proposal);
}
Collection<NamespaceInfo> namespaces = this.getNamespaces((IDOMElement)node);
for (NamespaceInfo namespace : namespaces) {
if (includePrefix(namespace)) {
CustomCompletionProposal proposal = new CustomCompletionProposal(
namespace.prefix, offset, 0, namespace.prefix.length(),
XSLPluginImageHelper.getInstance().getImage(XSLPluginImages.IMG_PREFIX),
namespace.prefix, null, namespace.uri, 0);
addProposal(proposal);
}
}
return getAllCompletionProposals();
}
protected boolean includePrefix(NamespaceInfo namespace) {
return !prefixExists(namespace.prefix) && !namespace.prefix.equals("") && !namespace.uri.equals(XSLCore.XSL_NAMESPACE_URI); //$NON-NLS-1$
}
protected boolean prefixExists(String prefix) {
if (tokens == null || tokens.length == 0) {
return false;
}
for (int cnt = 0; cnt < tokens.length; cnt++) {
if (prefix.equals(tokens[cnt])) {
return true;
}
}
return false;
}
}