Towards refactoring meta-models into multi-level models
Fernando Mac´ ıas1 Esther Guerra2 Juan de Lara2 fernandomacias.es Campina Grande, November 21, 2017
1Western Norway University of Applied Sciences 2Universidad Aut´
- noma de Madrid
1 / 16
Towards refactoring meta-models into multi-level models as 1 Esther - - PowerPoint PPT Presentation
Towards refactoring meta-models into multi-level models as 1 Esther Guerra 2 Juan de Lara 2 Fernando Mac fernandomacias.es Campina Grande, November 21, 2017 1 Western Norway University of Applied Sciences 2 Universidad Aut onoma de Madrid
1Western Norway University of Applied Sciences 2Universidad Aut´
1 / 16
Juan de Lara, Esther Guerra, and Jes´ us S´ anchez Cuadrado. “When and How to Use Multilevel Modelling”. In: ACM Trans. Softw. Eng. Methodol. 24.2 (Dec. 2014), 12:1–12:46. issn: 1049-331X. doi: 10.1145/2685615 2 / 16
3 / 16
4 / 16
5 / 16
6 / 16
PolicyType name: String RuleType name: String ElementType name: String hierarchy: bool
1..* parameters ruleTypes 1..* elementTypes 1..*
Rule name: String Parameter name: String Policy name: String
type type parameters 1..* rules * elements * type children *
(a) “flat” meta-model
7 / 16
userRole:RuleType name= “UserRole” user:ElementType name= “User” hierarchy= false role:ElementType name= “Role” hierarchy= true rbac:PolicyType name= “RBAC” policy:Policy name= “LibraryRBAC” rule:Rule name= “R1” p2:Parameter name= “Student” p1:Parameter name= “Romain”
:type :type :type :type :rules :ruleTypes :parameters :parameters
PolicyType name: String RuleType name: String ElementType name: String hierarchy: bool
1..* parameters ruleTypes 1..* elementTypes 1..*
Rule name: String Parameter name: String Policy name: String
type type parameters 1..* rules * elements * type children *
(a) “flat” meta-model (c) “flat” model
7 / 16
userRole:RuleType name= “UserRole” user:ElementType name= “User” hierarchy= false role:ElementType name= “Role” hierarchy= true rbac:PolicyType name= “RBAC” policy:Policy name= “LibraryRBAC” rule:Rule name= “R1” p2:Parameter name= “Student” p1:Parameter name= “Romain”
:type :type :type :type :rules :ruleTypes :parameters :parameters
PolicyType name: String RuleType name: String ElementType name: String hierarchy: bool
1..* parameters ruleTypes 1..* elementTypes 1..*
Rule name: String Parameter name: String Policy name: String
type type parameters 1..* rules * elements * type children *
(a) “flat” meta-model (b) multi-level specification
PolicyType name: String RuleType name: String ElementType
1..* parameters 1..* elementTypes 1..* ruleTypes children@(2)
name: String hierarchy@1: bool
(c) “flat” model
7 / 16
userRole:RuleType name= “UserRole” user:ElementType name= “User” hierarchy= false role:ElementType name= “Role” hierarchy= true rbac:PolicyType name= “RBAC” policy:Policy name= “LibraryRBAC” rule:Rule name= “R1” p2:Parameter name= “Student” p1:Parameter name= “Romain”
:type :type :type :type :rules :ruleTypes :parameters :parameters
userRole:RuleType name= “UserRole” user:ElementType name= “User” hierarchy= false role:ElementType name= “Role” hierarchy= true rbac:PolicyType name= “RBAC”
roles:ruleTypes rparam: parameters 1..1 uparam: parameters 1..1 *
PolicyType name: String RuleType name: String ElementType name: String hierarchy: bool
1..* parameters ruleTypes 1..* elementTypes 1..*
Rule name: String Parameter name: String Policy name: String
type type parameters 1..* rules * elements * type children *
(a) “flat” meta-model (b) multi-level specification
PolicyType name: String RuleType name: String ElementType
1..* parameters 1..* elementTypes 1..* ruleTypes children@(2)
name: String hierarchy@1: bool
(c) “flat” model (d) multi-level model
7 / 16
userRole:RuleType name= “UserRole” user:ElementType name= “User” hierarchy= false role:ElementType name= “Role” hierarchy= true rbac:PolicyType name= “RBAC” policy:Policy name= “LibraryRBAC” rule:Rule name= “R1” p2:Parameter name= “Student” p1:Parameter name= “Romain”
:type :type :type :type :rules :ruleTypes :parameters :parameters
userRole:RuleType name= “UserRole” user:ElementType name= “User” hierarchy= false role:ElementType name= “Role” hierarchy= true rbac:PolicyType name= “RBAC”
roles:ruleTypes rparam: parameters
rule:userRole name= “R1” p2:role name= “Student” p1:user name= “Romain” policy:rbac name= “LibraryRBAC”
1..1 uparam: parameters 1..1 :rparam :uparam * :roles
PolicyType name: String RuleType name: String ElementType name: String hierarchy: bool
1..* parameters ruleTypes 1..* elementTypes 1..*
Rule name: String Parameter name: String Policy name: String
type type parameters 1..* rules * elements * type children *
(a) “flat” meta-model (b) multi-level specification
PolicyType name: String RuleType name: String ElementType
1..* parameters 1..* elementTypes 1..* ruleTypes children@(2)
name: String hierarchy@1: bool
(c) “flat” model (d) multi-level model
7 / 16
8 / 16
9 / 16
9 / 16
10 / 16
10 / 16
11 / 16
11 / 16
11 / 16
11 / 16
12 / 16
12 / 16
12 / 16
13 / 16
14 / 16
15 / 16
16 / 16