diff options
Diffstat (limited to 'rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates')
3 files changed, 152 insertions, 0 deletions
diff --git a/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/RBAModelTemplateRegistry.xtend b/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/RBAModelTemplateRegistry.xtend new file mode 100644 index 0000000..0b1126c --- /dev/null +++ b/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/RBAModelTemplateRegistry.xtend @@ -0,0 +1,99 @@ +package rba.tool.editor.ui.editor.templates + +import com.google.common.collect.Lists +import com.google.inject.Inject +import com.google.inject.Singleton +import java.util.List +import java.util.Map +import org.apache.commons.lang.StringUtils +import org.eclipse.jface.text.templates.Template +import org.eclipse.xtext.EcoreUtil2 +import org.eclipse.xtext.GrammarUtil +import org.eclipse.xtext.IGrammarAccess +import org.eclipse.xtext.Keyword +import org.eclipse.xtext.ui.editor.templates.ContextTypeIdHelper +import rba.tool.editor.ui.util.CharacterUtil + +@Singleton +class RBAModelTemplateRegistry extends TemplateRegistry { + + private final Map<String, String> PATTERNS = newLinkedHashMap( + "rba.tool.editor.RBAModel.kw_runtime:" -> "${true}", + "rba.tool.editor.RBAModel.kw_global:" -> "${false}", + "rba.tool.editor.RBAModel.kw_description:" -> "\"${}\"", + "rba.tool.editor.RBAModel.kw_width:" -> "${0}", + "rba.tool.editor.RBAModel.kw_height:" -> "${0}", + "rba.tool.editor.RBAModel.kw_x:" -> "${0}", + "rba.tool.editor.RBAModel.kw_y:" -> "${0}", + "rba.tool.editor.RBAModel.kw_attenuateValue:" -> "${0}", + "rba.tool.editor.RBAModel.kw_loserType:" -> "${NEVER_GIVEUP}", + "rba.tool.editor.RBAModel.kw_arbitrationPolicy:" -> "${DEFAULT}", + "rba.tool.editor.RBAModel.kw_basePoint:" -> "${LEFT_TOP}", + "rba.tool.editor.RBAModel.kw_type:" -> "${DEFAULT}", + "rba.tool.editor.RBAModel.kw_allocatable:" -> "[${cursor}]", + "rba.tool.editor.RBAModel.kw_subarea:" -> "[${cursor}]", + "rba.tool.editor.RBAModel.kw_sizeReference:" -> "${size_id}", + "rba.tool.editor.RBAModel.kw_layout:" -> "", + "rba.tool.editor.RBAModel.kw_visibility:" -> "${STANDARD_VALUE}", + "rba.tool.editor.RBAModel.kw_priority:" -> "${STANDARD_VALUE}", + "rba.tool.editor.RBAModel.kw_value:" -> "${STANDARD_VALUE}", + "rba.tool.editor.RBAModel.kw_zorder:" -> "${STANDARD_VALUE}", + "rba.tool.editor.RBAModel.kw_contentStateRef:" -> "${contentState_id}", + "rba.tool.editor.RBAModel.kw_areaReference:" -> "${area_id}", + "rba.tool.editor.RBAModel.kw_condition:" -> "", + "rba.tool.editor.RBAModel.kw_area:" -> "${area_id}", + "rba.tool.editor.RBAModel.kw_content:" -> "${content_id}" + ) ; + + private final ContextTypeIdHelper helper; + + @Inject + public new(IGrammarAccess grammarAccess, ContextTypeIdHelper helper) { + this.helper = helper; + registerTemplates(grammarAccess); + } + + def protected void registerTemplates(IGrammarAccess grammarAccess) { + val List<Template> allTemplates = Lists.newArrayList(); + for (parserRule : GrammarUtil.allParserRules(grammarAccess.getGrammar())) { + var Template template; + for (keyword : EcoreUtil2.getAllContentsOfType(parserRule, Keyword)) { + if (CharacterUtil.isKeywordWorthyToPropose(keyword)) { + val name = keyword.value; + if (!StringUtils.isEmpty(name)) { + if (StringUtils.endsWith(name, ":")) { + template = new Template(name, "", getId(keyword), getPattern(keyword), true); + } else { + template = new Template(name, "", getId(keyword), name, true); + } + allTemplates.add(template); + } + } + } + } + for (enumRule : GrammarUtil.allEnumRules(grammarAccess.getGrammar())) { + var Template template; + for (keyword : EcoreUtil2.getAllContentsOfType(enumRule, Keyword)) { + if (CharacterUtil.isKeywordWorthyToPropose(keyword)) { + val name = keyword.value; + if (!StringUtils.isEmpty(name)) { + template = new Template(name, "", getId(keyword), name, true); + allTemplates.add(template); + } + } + } + } + + for (template : allTemplates) { + addTemplate(template); + } + } + + def public String getId(Keyword k) { + return helper.getId(k); + } + + def private String getPattern(Keyword k) { + return StringUtils.join(#[k.value, " ", PATTERNS.get(getId(k)) ?: ""]); + } +} diff --git a/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/RBAModelTemplateStore.xtend b/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/RBAModelTemplateStore.xtend new file mode 100644 index 0000000..7330f91 --- /dev/null +++ b/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/RBAModelTemplateStore.xtend @@ -0,0 +1,30 @@ +package rba.tool.editor.ui.editor.templates + +import com.google.inject.Inject +import com.google.inject.Singleton +import java.util.ArrayList +import java.util.List +import org.eclipse.jface.preference.IPreferenceStore +import org.eclipse.jface.text.templates.ContextTypeRegistry +import org.eclipse.jface.text.templates.Template +import org.eclipse.ui.plugin.AbstractUIPlugin +import org.eclipse.xtext.ui.editor.templates.XtextTemplateStore + +@Singleton +class RBAModelTemplateStore extends XtextTemplateStore { + + private TemplateRegistry templateRegistry; + + @Inject + new(TemplateRegistry templateRegistry, ContextTypeRegistry registry, IPreferenceStore store, String key, AbstractUIPlugin plugin) { + super(registry, store, key, plugin); + this.templateRegistry = templateRegistry; + } + + override getTemplates(String contextTypeId) { + val List<Template> templates = new ArrayList<Template>(super.getTemplates(contextTypeId)); + val template = templateRegistry.getTemplate(contextTypeId); + if (template !== null) templates.add(template); + return templates.toArray(newArrayOfSize(templates.size())); + } +} diff --git a/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/TemplateRegistry.xtend b/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/TemplateRegistry.xtend new file mode 100644 index 0000000..edba477 --- /dev/null +++ b/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/TemplateRegistry.xtend @@ -0,0 +1,23 @@ +package rba.tool.editor.ui.editor.templates + +import java.util.Iterator +import java.util.LinkedHashMap +import java.util.Map +import org.eclipse.jface.text.templates.Template + +class TemplateRegistry { + + private final Map<String, Template> fTemplates = new LinkedHashMap<String, Template>(); + + def public void addTemplate(Template template) { + fTemplates.put(template.contextTypeId, template); + } + + def public Template getTemplate(String id) { + return fTemplates.get(id); + } + + def public Iterator<Template> templates() { + return fTemplates.values().iterator(); + } +} |