/******************************************************************************* * Copyright (c) 2005, 2009 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 * Amir Kouchekinia <amir@pyrus.us> - bug 200762 *******************************************************************************/ package org.eclipse.jface.fieldassist; import java.util.ArrayList; /** * SimpleContentProposalProvider is a class designed to map a static list of * Strings to content proposals. * * @see IContentProposalProvider * @since 1.0 * */ public class SimpleContentProposalProvider implements IContentProposalProvider { /* * The proposals provided. */ private String[] proposals; /* * The proposals mapped to IContentProposal. Cached for speed in the case * where filtering is not used. */ private IContentProposal[] contentProposals; /* * Boolean that tracks whether filtering is used. */ private boolean filterProposals = false; /** * Construct a SimpleContentProposalProvider whose content proposals are * always the specified array of Objects. * * @param proposals * the array of Strings to be returned whenever proposals are * requested. */ public SimpleContentProposalProvider(String[] proposals) { super(); this.proposals = proposals; } /** * Return an array of Objects representing the valid content proposals for a * field. * * @param contents * the current contents of the field (only consulted if filtering * is set to <code>true</code>) * @param position * the current cursor position within the field (ignored) * @return the array of Objects that represent valid proposals for the field * given its current content. */ public IContentProposal[] getProposals(String contents, int position) { if (filterProposals) { ArrayList list = new ArrayList(); for (int i = 0; i < proposals.length; i++) { if (proposals[i].length() >= contents.length() && proposals[i].substring(0, contents.length()) .equalsIgnoreCase(contents)) { list.add(new ContentProposal(proposals[i])); } } return (IContentProposal[]) list.toArray(new IContentProposal[list .size()]); } if (contentProposals == null) { contentProposals = new IContentProposal[proposals.length]; for (int i = 0; i < proposals.length; i++) { contentProposals[i] = new ContentProposal(proposals[i]); } } return contentProposals; } /** * Set the Strings to be used as content proposals. * * @param items * the array of Strings to be used as proposals. */ public void setProposals(String[] items) { this.proposals = items; contentProposals = null; } /** * Set the boolean that controls whether proposals are filtered according to * the current field content. * * @param filterProposals * <code>true</code> if the proposals should be filtered to * show only those that match the current contents of the field, * and <code>false</code> if the proposals should remain the * same, ignoring the field content. */ public void setFiltering(boolean filterProposals) { this.filterProposals = filterProposals; // Clear any cached proposals. contentProposals = null; } }