| /******************************************************************************* |
| * Copyright (c) 2001, 2004 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.List; |
| |
| 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.core.internal.provisional.text.ITextRegionCollection; |
| import org.eclipse.wst.sse.core.internal.util.StringUtils; |
| import org.w3c.dom.Node; |
| |
| |
| public class ContentAssistRequest { |
| protected IStructuredDocumentRegion documentRegion = null; |
| protected List macros = new ArrayList(); |
| protected String matchString; |
| protected Node node = null; |
| protected Node parent = null; |
| protected List proposals = new ArrayList(); |
| protected ITextRegion region = null; |
| protected int replacementBeginPosition; |
| protected int replacementLength; |
| |
| // private Boolean separate = null; // (pa) not used |
| // private Boolean sort = null; // (pa) not used |
| /** |
| * XMLContentAssistRequest constructor comment. |
| */ |
| public ContentAssistRequest(Node node, Node parent, IStructuredDocumentRegion documentRegion, ITextRegion completionRegion, int begin, int length, String filter) { |
| super(); |
| setNode(node); |
| setParent(parent); |
| setDocumentRegion(documentRegion); |
| setRegion(completionRegion); |
| setMatchString(filter); |
| setReplacementBeginPosition(begin); |
| setReplacementLength(length); |
| } |
| |
| public void addMacro(ICompletionProposal newProposal) { |
| macros.add(newProposal); |
| } |
| |
| public void addProposal(ICompletionProposal newProposal) { |
| proposals.add(newProposal); |
| } |
| |
| public ICompletionProposal[] getCompletionProposals() { |
| ICompletionProposal results[] = null; |
| if (getProposals().size() > 0 || getMacros().size() > 0) { |
| List allProposals = new ArrayList(); |
| if (!shouldSeparate()) { |
| allProposals.addAll(getProposals()); |
| // should be empty, as all macros should have gone into the |
| // proposal list |
| allProposals.addAll(getMacros()); |
| allProposals = sortProposals(allProposals); |
| } else { |
| allProposals.addAll(sortProposals(getProposals())); |
| allProposals.addAll(sortProposals(getMacros())); |
| } |
| |
| results = new ICompletionProposal[allProposals.size()]; |
| for (int i = 0; i < allProposals.size(); i++) { |
| results[i] = (ICompletionProposal) allProposals.get(i); |
| } |
| } |
| return results; |
| } |
| |
| |
| public IStructuredDocumentRegion getDocumentRegion() { |
| return documentRegion; |
| } |
| |
| /** |
| * |
| * @return java.util.List |
| */ |
| public java.util.List getMacros() { |
| return macros; |
| } |
| |
| /** |
| * |
| * @return java.lang.String |
| */ |
| public java.lang.String getMatchString() { |
| return matchString; |
| } |
| |
| /** |
| * |
| * @return org.w3c.dom.Node |
| */ |
| public org.w3c.dom.Node getNode() { |
| return node; |
| } |
| |
| /** |
| * |
| * @return org.w3c.dom.Node |
| */ |
| public org.w3c.dom.Node getParent() { |
| return parent; |
| } |
| |
| /** |
| * |
| * @return java.util.List |
| */ |
| public java.util.List getProposals() { |
| return proposals; |
| } |
| |
| public ITextRegion getRegion() { |
| return region; |
| } |
| |
| /** |
| * |
| * @return int |
| */ |
| public int getReplacementBeginPosition() { |
| return replacementBeginPosition; |
| } |
| |
| /** |
| * @return int |
| */ |
| public int getReplacementLength() { |
| return replacementLength; |
| } |
| |
| public int getStartOffset() { |
| if (getDocumentRegion() != null && getRegion() != null) |
| return ((ITextRegionCollection) getDocumentRegion()).getStartOffset(getRegion()); |
| return -1; |
| } |
| |
| public String getText() { |
| if (getDocumentRegion() != null && getRegion() != null) |
| return ((ITextRegionCollection) getDocumentRegion()).getText(getRegion()); |
| return ""; //$NON-NLS-1$ |
| } |
| |
| public int getTextEndOffset() { |
| if (getDocumentRegion() != null && getRegion() != null) |
| return ((ITextRegionCollection) getDocumentRegion()).getTextEndOffset(getRegion()); |
| return -1; |
| } |
| |
| /** |
| * @param region |
| */ |
| public void setDocumentRegion(IStructuredDocumentRegion region) { |
| documentRegion = region; |
| } |
| |
| /** |
| * |
| * @param newMatchString |
| * java.lang.String |
| */ |
| public void setMatchString(java.lang.String newMatchString) { |
| matchString = newMatchString; |
| } |
| |
| /** |
| * |
| * @param newNode |
| * org.w3c.dom.Node |
| */ |
| public void setNode(org.w3c.dom.Node newNode) { |
| node = newNode; |
| } |
| |
| /** |
| * |
| * @param newParent |
| * org.w3c.dom.Node |
| */ |
| public void setParent(org.w3c.dom.Node newParent) { |
| parent = newParent; |
| } |
| |
| /** |
| * |
| * @param newRegion |
| */ |
| public void setRegion(ITextRegion newRegion) { |
| region = newRegion; |
| } |
| |
| /** |
| * |
| * @param newReplacementBeginPosition |
| * int |
| */ |
| public void setReplacementBeginPosition(int newReplacementBeginPosition) { |
| replacementBeginPosition = newReplacementBeginPosition; |
| } |
| |
| |
| public void setReplacementLength(int newReplacementLength) { |
| replacementLength = newReplacementLength; |
| } |
| |
| public boolean shouldSeparate() { |
| /* |
| * if (separate == null) { PreferenceManager manager = |
| * getPreferenceManager(); if(manager == null) { separate = |
| * Boolean.FALSE; } else { Element caSettings = |
| * manager.getElement(PreferenceNames.CONTENT_ASSIST); separate = new |
| * Boolean(caSettings.getAttribute(PreferenceNames.SEPARATE).equals(PreferenceNames.TRUE)); } } |
| * return separate.booleanValue(); |
| */ |
| return false; |
| } |
| |
| protected List sortProposals(List proposalsIn) { |
| Collections.sort(proposalsIn, new ProposalComparator()); |
| return proposalsIn; |
| |
| } |
| |
| /** |
| * |
| * @return java.lang.String |
| */ |
| public java.lang.String toString() { |
| return "Node: " + getNode() //$NON-NLS-1$ |
| + "\nParent: " + getParent() //$NON-NLS-1$ |
| + "\nStructuredDocumentRegion: " + StringUtils.escape(getDocumentRegion().toString()) //$NON-NLS-1$ |
| + "\nRegion: " + getRegion() //$NON-NLS-1$ |
| + "\nMatch string: '" + StringUtils.escape(getMatchString()) + "'" //$NON-NLS-2$//$NON-NLS-1$ |
| + "\nOffsets: [" + getReplacementBeginPosition() + "-" + (getReplacementBeginPosition() + getReplacementLength()) + "]\n"; //$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ |
| } |
| |
| } |