/*******************************************************************************
* Copyright (c) 2011 SAP AG 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:
* SAP AG - initial API and implementation
******************************************************************************/
package com.sap.furcas.ide.editor.contentassist;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
public class CompletionListHelper {
private static class CompletionProposalsComparator implements Comparator<ICompletionProposal> {
/**
* proposals that start with the prefix come first
*/
private final String prefix;
public CompletionProposalsComparator(String prefix) {
this.prefix = prefix;
}
@Override
public int compare(ICompletionProposal a, ICompletionProposal b) {
boolean aTop = a.getDisplayString().startsWith(prefix);
boolean bTop = b.getDisplayString().startsWith(prefix);
if (aTop && bTop) {
return a.getDisplayString().compareTo(b.getDisplayString());
}
if (aTop) {
return -1;
}
if (bTop) {
return 1;
}
// !aTop and !bTop
return a.getDisplayString().compareTo(b.getDisplayString());
}
};
public static boolean containsDisplayString(List<ICompletionProposal> proposals, String displayString) {
for (ICompletionProposal p : proposals) {
if (p.getDisplayString().equals(displayString)) {
return true;
}
}
return false;
}
public static List<ICompletionProposal> removeDuplicates(List<ICompletionProposal> input) {
if (input == null) {
return null;
}
List<ICompletionProposal> results = new ArrayList<ICompletionProposal>();
for (ICompletionProposal proposal : input) {
if (!containsDisplayString(results, proposal.getDisplayString())) {
results.add(proposal);
}
}
return results;
}
public static List<ICompletionProposal> removeNullValues(List<ICompletionProposal> input) {
if (input == null) {
return null;
}
List<ICompletionProposal> results = new ArrayList<ICompletionProposal>();
for (ICompletionProposal proposal : input) {
if (proposal != null) {
results.add(proposal);
}
}
return results;
}
public static List<ICompletionProposal> sortProposals(List<ICompletionProposal> input, String prefix) {
if (input == null) {
return null;
}
List<ICompletionProposal> results = new ArrayList<ICompletionProposal>(input);
Collections.sort(results, new CompletionProposalsComparator(prefix));
return results;
}
public static List<ICompletionProposal> prefixFilter(List<ICompletionProposal> input, String prefix) {
List<ICompletionProposal> results = new ArrayList<ICompletionProposal>();
for (ICompletionProposal proposal : input) {
if (proposal.getDisplayString().startsWith(prefix)) {
results.add(proposal);
}
}
return results;
}
public static ICompletionProposal[] proposalListAsArray(List<ICompletionProposal> proposalList) {
if (proposalList == null) {
return null;
}
return proposalList.toArray(new ICompletionProposal[proposalList.size()]);
}
public static List<String> collectDisplayStrings(List<ICompletionProposal> proposals) {
List<String> results = new ArrayList<String>();
if (proposals != null) {
for (ICompletionProposal p : proposals) {
results.add(p.getDisplayString());
}
}
return results;
}
public static List<String> collectDisplayStrings(ICompletionProposal[] proposals) {
List<String> results = new ArrayList<String>();
if (proposals != null) {
for (ICompletionProposal p : proposals) {
results.add(p.getDisplayString());
}
}
return results;
}
}