Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
mohawk-t-conversion-tool
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jon Shahen
mohawk-t-conversion-tool
Commits
b06818a8
Commit
b06818a8
authored
Oct 20, 2016
by
Jonathan Shahen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
User Role Timeslot next case statements done; testing required
parent
df58ae3f
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
61 additions
and
2 deletions
+61
-2
src/mohawk/converter/to/nusmv/ConvertToNuSMV.java
src/mohawk/converter/to/nusmv/ConvertToNuSMV.java
+38
-0
src/mohawk/converter/to/nusmv/nusmvTemplate.st
src/mohawk/converter/to/nusmv/nusmvTemplate.st
+23
-2
No files found.
src/mohawk/converter/to/nusmv/ConvertToNuSMV.java
View file @
b06818a8
...
...
@@ -63,6 +63,9 @@ public class ConvertToNuSMV extends ConvertTo {
/* Generate a list of NuSMVRule_Role */
ArrayList
<
NuSMVRule_Role
>
enabledRoleRules
=
getEnabledRoleRules
(
m
,
enabledRoleTimeslots
);
/* Generate a list of NuSMVRule_Role */
ArrayList
<
NuSMVRule_Role
>
roleTimeslotRules
=
getRoleTimeslotRules
(
m
,
roleTimeslots
);
// ---------------------------------------------------------------------
/* Timing */
timing
.
startTimer
(
tPrefix
+
"_"
+
"ruleMappingString"
);
String
ruleMappingStr
=
ruleMapping
(
m
);
...
...
@@ -95,6 +98,7 @@ public class ConvertToNuSMV extends ConvertTo {
st
.
add
(
"enabledRoles"
,
enabledRoleTimeslots
);
st
.
add
(
"enabledRoleRules"
,
enabledRoleRules
);
st
.
add
(
"roleTimeslotRules"
,
roleTimeslotRules
);
convertedStr
=
st
.
render
();
/* Timing */
timing
.
stopTimer
(
tPrefix
+
"_"
+
"template"
);
...
...
@@ -139,6 +143,40 @@ public class ConvertToNuSMV extends ConvertTo {
return
convertedStr
;
}
private
ArrayList
<
NuSMVRule_Role
>
getRoleTimeslotRules
(
MohawkT
m
,
Set
<
RoleTimeSlot
>
roleTimeslots
)
{
/** Role Index --> NuSMVRule_Role{} */
HashMap
<
Integer
,
NuSMVRule_Role
>
roleMap
=
new
HashMap
<>(
m
.
numberOfRoles
());
for
(
RoleTimeSlot
rts
:
roleTimeslots
)
{
if
(!
roleMap
.
containsKey
(
rts
.
_role
))
{
roleMap
.
put
(
rts
.
_role
,
new
NuSMVRule_Role
(
rts
.
_role
));
}
NuSMVRule_Role
tmp
=
roleMap
.
get
(
rts
.
_role
);
if
(
tmp
==
null
)
{
// How did this happen!!
throw
new
ArrayIndexOutOfBoundsException
(
"Something happened that I cannot really explain!?"
);
}
tmp
.
addTimeslot
(
rts
.
_time
);
}
ArrayList
<
Rule
>
allRules
=
m
.
canAssign
.
getRules
();
allRules
.
addAll
(
m
.
canRevoke
.
getRules
());
for
(
Rule
r
:
allRules
)
{
Integer
role
=
m
.
roleHelper
.
indexOf
(
r
.
_role
);
NuSMVRule_Role
tmp
=
roleMap
.
get
(
role
);
if
(
tmp
!=
null
)
{
tmp
.
addRule
(
m
,
r
);
}
else
{
logger
.
fine
(
"getEnabledRoleRules: Skipping role: "
+
r
.
_role
);
}
}
return
new
ArrayList
<
NuSMVRule_Role
>(
roleMap
.
values
());
}
private
ArrayList
<
NuSMVRule_Role
>
getEnabledRoleRules
(
MohawkT
m
,
Set
<
RoleTimeSlot
>
enabledRoles
)
{
/** Role Index --> NuSMVRule_Role{} */
HashMap
<
Integer
,
NuSMVRule_Role
>
roleMap
=
new
HashMap
<>(
m
.
numberOfRoles
());
...
...
src/mohawk/converter/to/nusmv/nusmvTemplate.st
View file @
b06818a8
...
...
@@ -32,7 +32,24 @@ RE : array 1..numroles of
ASSIGN
--
enabledRules
->
[{
role
1
:
[{
t
1
:
[
case1
,
case2
]}
,
...,
t
8
:
[]]}
,
...,
{
role
10
:
[]}]
<
users:
{
u
|<
roleTimeslotRules:
{
r
|
<
if
(
r
.
timeslots
)
>
----------------------------------------------------------------------------
----------------------------------------------------------------------------
--
User
<
u
>,
Role
<
r
.
role
>
Assign
/
Revoke
<
r
.
timeslots:
{
ts
|
<
if
(
ts
.
cases
)
>
next
(
U
[
<
u
>
][
<
r
.
role
>
][
<
ts
.
timeslot
>
])
:=
case
<
ts
.
cases:
{
c
|<\
t
>
user
=<
u
>
&
<
c
.
condition
>
:
<
if
(
c
.
trueResult
)
>
TRUE
<
else
>
FALSE
<
endif
>
};
separator=
"\n"
>
<\
t
>
TRUE
:
U
[
<
u
>
][
<
r
.
role
>
][
<
ts
.
timeslot
>
];
esac
;
<
else
>
next
(
U
[
<
u
>
][
<
r
.
role
>
][
<
ts
.
timeslot
>
])
:=
U
[
<
u
>
][
<
r
.
role
>
][
<
ts
.
timeslot
>
];
<
endif
>
};
separator=
"\n"
>
<
else
>--
Skipping
<
r
.
role
>
<
endif
>
};
separator=
"\n"
>
};
separator=
"\n"
>
<enabledRoleRules:
{
r
|
<
if
(
r
.
timeslots
)
>
-------------------------------------------------------------------------------
...
...
@@ -51,13 +68,17 @@ esac;
<
endif
>
};
separator=
"\n"
>
<
!
TODO:
Figure
out
admin
conditions
<
!
--------------------------------------------------------
--
TODO:
Figure
out
admin
conditions
VAR
--
<
numUsers
>
Users
Variable
<
users:
{
u
|<
roleTimeslots:
{
rt
|
U
<
u
><
rt
.
string
>
:
boolean
;};
separator=
" "
>
};
separator=
"\n"
>
--
<
numRolesEnabled
>
RoleEnabled
<
enabledRoles:
{
rt
|
RE
<
rt
.
string
>
:
boolean
;};
separator=
" "
>
------------------------------------------------------------
!>
ASSIGN
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment