summaryrefslogtreecommitdiffstats
path: root/rba.tool.editor.ui/src/rba/tool/editor/ui/editor/templates/RBAModelTemplateRegistry.xtend
blob: 0b1126c13d616463e782a5c23ad34a2f4d811432 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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)) ?: ""]);
	}
}