/*******************************************************************************
* Copyright (c) 2013 itemis AG (http://www.itemis.eu).
* 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
******************************************************************************/
/*
* generated by Xtext
*/
package de.itemis.tooling.terminology.ui.contentassist;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
import org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher;
import de.itemis.tooling.terminology.terminology.Entry;
import de.itemis.tooling.terminology.terminology.SubjectEntries;
import de.itemis.tooling.terminology.terminology.Term;
/**
* see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on how to customize content assistant
*/
public class TerminologyProposalProvider extends AbstractTerminologyProposalProvider {
//propose related entries by allowing typing a term name but inserting the entry id
@Override
public void completeEntry_RelatedEntries(EObject model,
Assignment assignment, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
SubjectEntries entries=(SubjectEntries) EcoreUtil2.getRootContainer(model);
for (Entry entry : entries.getEntries()) {
for (Term term : entry.getTerms()) {
final String termNameLower =term.getName().toLowerCase();
PrefixMatcher matcher = new PrefixMatcher() {
@Override
public boolean isCandidateMatchingPrefix(String name, String prefix) {
return termNameLower.startsWith(prefix.toLowerCase())||name.startsWith(prefix);
}
};
ContentAssistContext newContext = context.copy().setMatcher(matcher).toContext();
ICompletionProposal result = null;
StyledString displayString = getStyledDisplayString(term,term.getName(),term.getName());
Image image = getImage(term);
result = createCompletionProposal(entry.getName(), displayString, image, newContext);
if (result instanceof ConfigurableCompletionProposal) {
ConfigurableCompletionProposal typed = (ConfigurableCompletionProposal) result;
typed.setAdditionalProposalInfo(entry);
typed.setHover(getHover());
typed.setMatcher(matcher);
}
getPriorityHelper().adjustCrossReferencePriority(result, context.getPrefix());
acceptor.accept(result);
}
}
}
}