package de.se_rwth.monticoreeditor.templates; import static de.se_rwth.langeditor.util.Misc.loadImage; import java.util.ArrayList; import java.util.List; import java.util.Optional; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.templates.DocumentTemplateContext; import org.eclipse.jface.text.templates.Template; import org.eclipse.jface.text.templates.TemplateContextType; import org.eclipse.jface.text.templates.TemplateProposal; import org.eclipse.swt.graphics.Image; import com.google.common.collect.Lists; public class ProdTemplate { public ProdTemplate() { } public List<TemplateProposal> getTemplateProposals(ITextViewer viewer, int offset, String prefix) { ArrayList<TemplateProposal> ret = Lists.newArrayList(); DocumentTemplateContext docContext = new DocumentTemplateContext(new TemplateContextType(), viewer.getDocument(), offset - prefix.length(), prefix.length()); Region region = new Region(offset, viewer.getDocument().getLength()); // LexProd addProposal(ret, docContext, region, prefix, "LexProd", "token ${Name} = ${Alts};", "icons/tnames_co.gif"); // Interface Prod addProposal(ret, docContext, region, prefix, "InterfaceProd", "interface ${Name} = ${Alts};", "icons/intf_obj.gif"); // Enum Prod addProposal(ret, docContext, region, prefix, "EnumProd", "enum ${Name} = ${Constants};", "icons/element.gif"); // External Prod addProposal(ret, docContext, region, prefix, "ExtProd", "external ${Name};", "icons/element.gif"); // Abstract Prod addProposal(ret, docContext, region, prefix, "AbstractProd", "abstract ${Name} = ${Alts};", "icons/class_abs_tsk.gif"); // AST rule addProposal(ret, docContext, region, prefix, "AstRule", "ast ${Name} = ${AttributeOrMethod};", "icons/source_attach_attrib.gif"); // ClassProd addProposal(ret, docContext, region, prefix, "ClassProd", "${Name} = ${Alts};", "icons/teamstrm_rep.gif"); return ret; } protected void addProposal(List<TemplateProposal> ret, DocumentTemplateContext docContext, Region region, String prefix, String templateName, String replace, String imagePath) { if (templateName.startsWith(prefix)) { Template simpleTemplate = new Template(templateName, "Insert a simple " + templateName + " template", IDocument.DEFAULT_CONTENT_TYPE, replace, false); Optional<Image> img = loadImage(imagePath); ret.add(new TemplateProposal(simpleTemplate, docContext, region, img.get())); } } }