blob: 9dc30ac52d168082b5bbb4c8ecfa3a2ae4c8224a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 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 - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.xsl.exslt.ui.internal.contentassist;
import java.util.ArrayList;
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.xml.core.internal.contentmodel.util.DOMNamespaceHelper;
import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceTable;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
import org.eclipse.wst.xsl.core.model.CallTemplate;
import org.eclipse.wst.xsl.exslt.core.internal.EXSLTCore;
import org.eclipse.wst.xsl.ui.internal.util.XSLPluginImageHelper;
import org.eclipse.wst.xsl.ui.internal.util.XSLPluginImages;
import org.eclipse.wst.xsl.ui.provisional.contentassist.AbstractXSLContentAssistRequest;
import org.eclipse.wst.xsl.ui.provisional.contentassist.CustomCompletionProposal;
import org.eclipse.wst.xsl.ui.provisional.contentassist.SelectAttributeContentAssist;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class CommonSelectContentAssistRequest extends SelectAttributeContentAssist {
private static final String EXSLT_COMMON_NAMESPACE = "http://exslt.org/common";
private static final String NODE_SET = "node-set( )";
private static final String OBJECT_TYPE = "object-type( )";
String prefix = "";
public CommonSelectContentAssistRequest(Node node,
IStructuredDocumentRegion documentRegion,
ITextRegion completionRegion, int begin, int length, String filter,
ITextViewer textViewer) {
super(node, documentRegion, completionRegion, begin, length, filter,
textViewer);
}
@Override
public ArrayList<ICompletionProposal> getCompletionProposals() {
proposals.clear();
adjustXPathStart(SELECT_ATTRIBUTE);
int offset = getReplacementBeginPosition();
IDOMAttr attrNode = getAttribute(SELECT_ATTRIBUTE);
this.matchString = extractXPathMatchString(attrNode, getRegion(),
getReplacementBeginPosition());
addSelectProposals((Element) getNode().getParentNode(), offset);
return getAllCompletionProposals();
}
@Override
protected void addSelectProposals(Element rootElement, int offset) {
Document doc = rootElement.getOwnerDocument();
NamespaceTable namespaceTable = new NamespaceTable(doc);
namespaceTable.addElement(doc.getDocumentElement());
prefix = namespaceTable.getPrefixForURI(EXSLTCore.EXSLT_COMMON_NAMESPACE);
addNodeSetProposal();
addObjectTypeProposal();
}
private void addNodeSetProposal() {
String nodeset = "";
if (prefix != null) {
nodeset = prefix + ":" + NODE_SET;
} else {
nodeset = NODE_SET;
}
CustomCompletionProposal proposal = new CustomCompletionProposal(
nodeset, getStartOffset() + 1, 0,
nodeset.length(), XSLPluginImageHelper
.getInstance().getImage(
XSLPluginImages.IMG_XPATH_FUNCTION), nodeset, null, null, 0);
proposals.add((ICompletionProposal)proposal);
}
private void addObjectTypeProposal() {
String nodeset = "";
if (prefix != null) {
nodeset = prefix + ":" + OBJECT_TYPE;
} else {
nodeset = OBJECT_TYPE;
}
CustomCompletionProposal proposal = new CustomCompletionProposal(
nodeset, getStartOffset() + 1, 0,
nodeset.length(), XSLPluginImageHelper
.getInstance().getImage(
XSLPluginImages.IMG_XPATH_FUNCTION), nodeset, null, null, 0);
proposals.add((ICompletionProposal)proposal);
}
}