| /******************************************************************************* |
| * Copyright (c) 2006 Oracle Corporation. |
| * 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: |
| * Cameron Bateman/Oracle - initial API and implementation |
| * |
| ********************************************************************************/ |
| package org.eclipse.jst.jsf.core.internal.contentassist.el; |
| |
| import java.util.List; |
| |
| import org.eclipse.jface.text.contentassist.ICompletionProposal; |
| import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext; |
| |
| /** |
| * Encapsulates an EL content assist completion prefix |
| * |
| * @author cbateman |
| * |
| */ |
| public abstract class ContentAssistStrategy |
| { |
| /** |
| * ContentAssistStrategy type for a dot content assist completion |
| */ |
| public final static int PREFIX_TYPE_DOT_COMPLETION = 0; |
| /** |
| * ContentAssistStrategy type for an id content assist completion |
| */ |
| public final static int PREFIX_TYPE_ID_COMPLETION = 1; |
| /** |
| * Completions for an empty expression |
| */ |
| public final static int PREFIX_TYPE_EMPTY_EXPRESSION = 2; |
| |
| private final int type; |
| private final String value; |
| private final String proposalStart; |
| |
| /** |
| * @param type |
| * @param value |
| * @param proposalStart |
| */ |
| public ContentAssistStrategy(final int type, final String value, final String proposalStart) |
| { |
| super(); |
| this.type = type; |
| this.value = value; |
| this.proposalStart = proposalStart; |
| } |
| |
| /** |
| * @return the type of this completion prefix as defined by |
| * one of the PREFIX_TYPE constants |
| */ |
| public final int getType() |
| { |
| return type; |
| } |
| |
| /** |
| * @return the token which this prefix is for |
| */ |
| public final String getValue() |
| { |
| return value; |
| } |
| |
| /** |
| * @param context |
| * @return the list of proposals for this strategy. Contents of the list |
| * must be of type ICompletionProposal. List should be considered immutable. |
| */ |
| public abstract List<ICompletionProposal> getProposals(IStructuredDocumentContext context); |
| |
| /** |
| * @return the part of the proposal which was already typed when user invoked autocomplete |
| */ |
| public String getProposalStart() { |
| return proposalStart; |
| } |
| |
| /** |
| * @param completionList |
| * @param proposal |
| */ |
| protected void addProposalsMatchingProposalStart(final List completionList, final ICompletionProposal[] proposal) { |
| final String start = getProposalStart(); |
| for (int j = 0; j < proposal.length; j++) { |
| final String proposalString = proposal[j].getDisplayString(); |
| //TODO Should use "real" proposal replacement instead of displayString: |
| if (proposalString.length() >= start.length() && |
| proposalString.substring(0, start.length()).equalsIgnoreCase(start)) |
| { |
| completionList.add(proposal[j]); |
| } |
| } |
| } |
| } |