/*******************************************************************************
* Copyright (c) 2011-2016 Medevit OG, Medelexis AG
* 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:
* Marco Descher, initial API and implementaion
* Lucia Amman, bug fixes and improvements
* Sponsors: M. + P. Richter
*******************************************************************************/
package at.medevit.elexis.gdt.ui.dialog.provider;
import java.util.ArrayList;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
public class Feld8402ContentProposalProvider implements IContentProposalProvider {
private String[] proposals;
private String[] labels;
private String[] detailDescription;
private IContentProposal[] contentProposals;
private boolean filterProposals = false;
public Feld8402ContentProposalProvider(String[] proposals, String[] labels, String[] detailDescription){
super();
this.proposals = proposals;
this.labels = labels;
this.detailDescription = detailDescription;
}
@Override
public IContentProposal[] getProposals(String contents, int position){
if (filterProposals) {
ArrayList<IContentProposal> list = new ArrayList<IContentProposal>();
for (int i = 0; i < proposals.length; i++) {
if (proposals[i].length() >= contents.length()
&& proposals[i].substring(0, contents.length()).equalsIgnoreCase(contents)) {
list.add(makeContentProposal(proposals[i], labels[i], detailDescription[i]));
}
}
return (IContentProposal[]) list.toArray(new IContentProposal[list.size()]);
}
if (contentProposals == null) {
refreshProposals();
}
return contentProposals;
}
public void setProposals(String[] proposals, String[] labels, String[] detailDescription){
this.proposals = proposals;
this.labels = labels;
this.detailDescription = detailDescription;
contentProposals = null;
refreshProposals();
}
public void setFiltering(boolean filterProposals){
this.filterProposals = filterProposals;
contentProposals = null;
}
private void refreshProposals() {
contentProposals = new IContentProposal[proposals.length];
for (int i = 0; i < proposals.length; i++) {
String detailDescriptionA = null;
if (detailDescription != null && detailDescription[i]!=null) detailDescriptionA = detailDescription[i];
contentProposals[i] = makeContentProposal(proposals[i], labels[i], detailDescriptionA);
}
}
private IContentProposal makeContentProposal(final String proposal, final String label, final String detailDescription){
return new IContentProposal() {
public String getContent(){
return proposal;
}
public String getDescription(){
return detailDescription;
}
public String getLabel(){
return proposal + " - " + label;
}
public int getCursorPosition(){
return proposal.length();
}
};
}
}