Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: e78647383cd03d9ef035c7f2a2572dcfb370023d (plain) (blame)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/******************************************************************************
 * Copyright (c) 2014, 2020 Borland Software Corporation, CEA LIST, Artal and others
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *	Svyatoslav Kovalsky (Montages) - initial API and implementation
 *	Aurelien Didier (ARTAL) - aurelien.didier51@gmail.com - Bug 569174
 *	Etienne Allogo (ARTAL) - etienne.allogo@artal.fr - Bug 569174 : L1.2 clean up
 *****************************************************************************/
 package xpt

import com.google.inject.Inject
import org.eclipse.papyrus.gmf.codegen.gmfgen.GenEditorGenerator
import org.eclipse.papyrus.gmf.codegen.gmfgen.GenAuditRoot
import org.eclipse.papyrus.gmf.codegen.gmfgen.GenAuditContainer

@com.google.inject.Singleton class ConstraintProviders {

	@Inject extension Common
	@Inject extension GenAuditRoot_qvto
	@Inject extension GenEditorGenerator_qvto

	def extensions(GenEditorGenerator it)'''
		«IF hasAudits(it)»«extensions(audits)»«ENDIF»
	'''

	def extensions(GenAuditRoot it)'''
		«extensions_emfv_constraintProviders»
		«extensions_emfv_constraintBindings»
		«extensions_emfv_uiContexts»
	'''

	//
	// Extension point: org.eclipse.emf.validation.constraintProviders
	//
	def extensions_emfv_constraintProviders(GenAuditRoot it)'''
		«tripleSpace(1)»<extension point="org.eclipse.emf.validation.constraintProviders">
		«tripleSpace(2)»«xmlGeneratedTag»
		«FOR c : categories»«declareCategory(c)»«ENDFOR»
		«tripleSpace(2)»<constraintProvider cache="true">
			«FOR p : getAllTargetedModelPackages(it)»
			«tripleSpace(3)»<package namespaceUri="«p.getEcorePackage.nsURI»"/>
			«ENDFOR»
		«tripleSpace(1)»«FOR c : categories»«defineCategory(c)»«ENDFOR»
		«tripleSpace(2)»</constraintProvider>
		«tripleSpace(1)»</extension>
	'''

	//
	// Extension point: org.eclipse.emf.validation.constraintBindings
	//
	def extensions_emfv_constraintBindings(GenAuditRoot it)'''
		«tripleSpace(1)»<extension point="org.eclipse.emf.validation.constraintBindings">
		«tripleSpace(2)»«xmlGeneratedTag»
		«FOR ctx : clientContexts»
			«tripleSpace(2)»<clientContext default="false" id="«getQualifiedIdentity(ctx)»">
			«tripleSpace(3)»<selector class="«ctx.getQualifiedClassName()»"/>
			«tripleSpace(2)»</clientContext>
			«tripleSpace(2)»<binding context="«getQualifiedIdentity(ctx)»">
			«FOR rule : rules.filter(r | r.target !== null && r.target.contextSelector == ctx)»
					«tripleSpace(6)»<constraint ref="«editorGen.plugin.ID».«escapeXML(rule.id)»"/>
			«ENDFOR»
			«tripleSpace(5)»</binding>

		«ENDFOR»
		«tripleSpace(1)»</extension>
	'''

	//
	// Extension point: org.eclipse.emf.validation.ui.UIRegisteredClientContext
	//
	def extensions_emfv_uiContexts(GenAuditRoot it)'''
		«IF editorGen.diagram.liveValidationUIFeedback»
		«tripleSpace(1)»<extension point="org.eclipse.emf.validation.ui.UIRegisteredClientContext">
		«tripleSpace(2)»«xmlGeneratedTag»
		«FOR ctx : clientContexts»
			«tripleSpace(3)»<clientContext id="«getQualifiedIdentity(ctx)»"/>
		«ENDFOR»
		«tripleSpace(2)»</extension>
		«ENDIF»
	'''

	def declareCategory(GenAuditContainer it)'''
		«tripleSpace(4)»<category id="«pathMap»" mandatory="false" name="«IF name !== null »«escapeXML(name)»«ELSE»«pathMap»«ENDIF»">
		«tripleSpace(3)»<![CDATA[«IF description !== null »«description»«ELSE»«''»«ENDIF»]]>
		«tripleSpace(2)»</category>
	'''

	def defineCategory(GenAuditContainer it)'''
		«tripleSpace(4)»<constraints categories="«pathMap»">
		«FOR audit : audits.filter(a | a.target !== null && a.target.getTargetClass() !== null )»
		«tripleSpace(6)»<constraint id="«escapeXML(audit.id)»"
		«tripleSpace(4)»«IF audit.requiresConstraintAdapter»lang="Java" class="«audit.getConstraintAdapterQualifiedClassName()»"«ELSE»lang="OCL"«ENDIF»
			«IF audit.name !== null »
				«tripleSpace(4)»name="«escapeXML(audit.name)»"
			«ELSE»
				«tripleSpace(4)»name="«escapeXML(audit.id)»"
			«ENDIF»
		«tripleSpace(4)»mode="«IF audit.useInLiveMode»Live«ELSE»Batch«ENDIF»"
		«tripleSpace(4)»severity="«audit.severity»" statusCode="200">
			«IF audit.description !== null »
			«tripleSpace(4)»«IF !audit.requiresConstraintAdapter»<![CDATA[«IF audit.rule !== null »«audit.rule.body»«ELSE»«''»«ENDIF»]]>«ENDIF»
			«tripleSpace(4)»<description><![CDATA[«(audit.description)»]]></description>
			«ELSE»
			«tripleSpace(4)»<description><![CDATA[«('')»]]></description>
			«ENDIF»
			«IF audit.message !== null »
				«tripleSpace(4)»<message><![CDATA[«audit.message»]]></message>
				«ELSE»
				«IF audit.name !== null »
				«tripleSpace(4)»<message><![CDATA[«audit.name» audit violated]]></message>
				«ELSE»
				«tripleSpace(4)»<message><![CDATA[«audit.id» audit violated]]></message>
				«ENDIF»
			«ENDIF»
		«tripleSpace(4)»<target class="«audit.target.getTargetClassModelQualifiedName()»"/>
		«tripleSpace(3)»</constraint>
		«ENDFOR»
		«tripleSpace(6)»</constraints>
	'''

	protected def pathMap(GenAuditContainer it) '''«FOR p : path SEPARATOR '/' »«escapeXML(p.id)»«ENDFOR»'''
}

Back to the top