package org.easyb.eclipse.templates.processor;
import org.eclipse.jdt.internal.corext.template.java.JavaDocContext;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.templates.DocumentTemplateContext;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContext;
import org.eclipse.jface.text.templates.TemplateProposal;
import org.eclipse.swt.graphics.Image;
//TODO THis class may not be needed
public class BehaviourTemplateProposal extends TemplateProposal{
private final Template template;
private final TemplateContext context;
private final IRegion region;
private int relevance;
public BehaviourTemplateProposal(Template template, TemplateContext context, IRegion region, Image image){
super(template,context,region,image);
this.template = template;
this.context = context;
this.region = region;
relevance = computeRelevance();
}
public String getAdditionalProposalInfo(){
return template.getDescription();
}
private int computeRelevance() {
// see org.eclipse.jdt.internal.codeassist.RelevanceConstants
final int R_DEFAULT= 0;
final int R_INTERESTING= 5;
final int R_CASE= 10;
final int R_NON_RESTRICTED= 3;
final int R_EXACT_NAME = 4;
final int R_INLINE_TAG = 31;
int base= R_DEFAULT + R_INTERESTING + R_NON_RESTRICTED;
try {
if (context instanceof DocumentTemplateContext) {
DocumentTemplateContext templateContext= (DocumentTemplateContext) context;
IDocument document= templateContext.getDocument();
String content= document.get(region.getOffset(), region.getLength());
if (template.getName().startsWith(content))
base += R_CASE;
if (template.getName().equalsIgnoreCase(content))
base += R_EXACT_NAME;
if (context instanceof JavaDocContext)
base += R_INLINE_TAG;
}
} catch (BadLocationException e) {
// ignore - not a case sensitive match then
}
// see CompletionProposalCollector.computeRelevance
// just under keywords, but better than packages
final int TEMPLATE_RELEVANCE= 1;
return base * 16 + TEMPLATE_RELEVANCE;
}
@Override
public int getRelevance() {
return relevance;
}
public String getTemplateName(){
return template.getName();
}
public String getTemplatePattern(){
if(template==null){
return "";
}
return template.getPattern();
}
public void setRelevance(int relevance){
this.relevance = relevance;
}
}