Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
TTool
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
mbe-tools
TTool
Commits
e2afb81f
Commit
e2afb81f
authored
10 years ago
by
Andrea Enrici
Browse files
Options
Downloads
Patches
Plain Diff
completed the partition of the algorithm in methods. No recursive junctions allowed.
parent
b8290e03
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/tmltranslator/TMLCPTextSpecification.java
+90
-98
90 additions, 98 deletions
src/tmltranslator/TMLCPTextSpecification.java
with
90 additions
and
98 deletions
src/tmltranslator/TMLCPTextSpecification.java
+
90
−
98
View file @
e2afb81f
...
...
@@ -112,6 +112,7 @@ public class TMLCPTextSpecification {
private
ArrayList
<
Integer
>
indexOfConnToRemove
;
private
ArrayList
<
TMLCPConnector
>
listTMLCPConnectors
;
private
StringBuffer
sbFork
;
private
StringBuffer
sbJunction
;
public
TMLCPTextSpecification
(
String
_title
)
{
title
=
_title
;
...
...
@@ -301,6 +302,11 @@ public class TMLCPTextSpecification {
sb
.
append
(
makeSingleActivityDiagram
(
ad
,
junctionDiagList
)
+
"\n\tEND\n"
);
sb
.
append
(
"\nEND "
+
ad
.
getName
()
+
"\n"
);
}
/*for( TMLCPActivityDiagram ad: junctionDiagList ) {
sb.append( "\nACTIVITY " + ad.getName() + "\n\n\tMAIN\n" );
sb.append( makeSingleActivityDiagram( ad, junctionDiagList ) + "\n\tEND\n" );
sb.append( "\nEND " + ad.getName() + "\n" );
}*/
return
sb
.
toString
();
}
...
...
@@ -310,47 +316,60 @@ public class TMLCPTextSpecification {
TMLCPElement
currentElement
,
nextElement
;
ArrayList
<
TMLCPElement
>
nextElements
;
currentElement
=
getStartState
(
ad
)
;
currentElement
=
getStartState
(
ad
)
.
getNextElements
().
get
(
0
);
//get the first element after the start state
while
(
!(
currentElement
instanceof
TMLCPStop
)
)
{
nextElements
=
currentElement
.
getNextElements
();
if
(
nextElements
.
size
()
>
1
)
{
// currentElement is a fork node
sbFork
=
new
StringBuffer
();
nex
tElement
=
parseFork
(
nextElements
);
// use attribute sbFork
curren
tElement
=
parseFork
(
nextElements
);
//
currentElement is the closing join,
use attribute sbFork
sb
.
append
(
sbFork
.
toString
()
);
sbFork
.
setLength
(
0
);
}
else
{
nextElement
=
nextElements
.
get
(
0
);
sb
.
append
(
parseTheRest
(
nextElement
,
junctionDiagList
)
);
else
{
// currentElement is either a refToDiag or a junction
if
(
isAJunction
(
currentElement
)
)
{
String
s
=
(
(
TMLCPRefAD
)
currentElement
).
getName
();
sbJunction
=
new
StringBuffer
();
sbJunction
.
append
(
parseJunction
(
getJunctionDiagram
(
s
.
substring
(
0
,
s
.
length
()-
2
)
,
junctionDiagList
),
junctionDiagList
)
);
sb
.
append
(
sbJunction
.
toString
()
);
sbJunction
.
setLength
(
0
);
}
else
{
sb
.
append
(
parseSequence
(
currentElement
)
);
}
}
currentElement
=
nextElement
;
currentElement
=
currentElement
.
getNextElements
().
get
(
0
)
;
}
return
sb
.
toString
();
}
private
String
parseSequence
(
TMLCPElement
element
)
{
if
(
element
instanceof
TMLCPRefSD
)
{
String
sb
=
(
removeHashKey
(
((
TMLCPRefSD
)
element
).
getName
()
)
+
" + "
);
return
sb
;
}
if
(
element
instanceof
TMLCPRefAD
)
{
String
sb
=
(
removeHashKey
(
((
TMLCPRefAD
)
element
).
getName
()
)
+
" + "
);
return
sb
;
}
return
""
;
}
private
TMLCPElement
parseFork
(
ArrayList
<
TMLCPElement
>
elements
)
{
sbFork
.
append
(
" { "
);
TMLCPElement
nextElement
=
null
;
sbFork
.
append
(
" { "
);
for
(
TMLCPElement
currentElement:
elements
)
{
nextElement
=
currentElement
;
sbFork
.
append
(
SP
+
"{"
);
while
(
!(
nextElement
instanceof
TMLCPJoin
)
)
{
if
(
nextElement
instanceof
TMLCPRefSD
)
{
sbFork
.
append
(
removeHashKey
(
SP
+
((
TMLCPRefSD
)
nextElement
).
getName
()
)
+
" +"
);
if
(
isAJunction
(
nextElement
)
)
{
sbFork
.
append
(
""
);
// should raise and error, no junction-choice in fork-join
}
if
(
nextElement
instanceof
TMLCPRefAD
)
{
String
s
=
(
(
TMLCPRefAD
)
nextElement
).
getName
();
if
(
s
.
length
()
>=
9
)
{
if
(
s
.
substring
(
0
,
8
).
equals
(
"junction"
)
)
{
//it is a reference to a junction diagram
sbFork
.
append
(
""
);
}
else
{
//it is a normal reference to a diagram
sbFork
.
append
(
removeHashKey
(
SP
+
((
TMLCPRefAD
)
nextElement
).
getName
()
)
+
" +"
);
}
}
else
{
sbFork
.
append
(
parseSequence
(
nextElement
)
);
}
nextElement
=
nextElement
.
getNextElements
().
get
(
0
);
//no nested fork and join
}
...
...
@@ -359,64 +378,12 @@ public class TMLCPTextSpecification {
}
sbFork
=
removeTrailingSymbol
(
sbFork
);
sbFork
.
append
(
" }"
);
return
nextElement
;
}
private
StringBuffer
removeTrailingSymbol
(
StringBuffer
sb
)
{
if
(
sb
.
length
()
>
0
)
{
sb
.
setLength
(
sb
.
length
()
-
1
);
return
sb
;
}
return
sb
;
}
private
String
parseTheRest
(
TMLCPElement
nextElement
,
ArrayList
<
TMLCPActivityDiagram
>
junctionDiagList
)
{
//parses sequence, junction+choice
private
String
parseJunction
(
TMLCPActivityDiagram
ad
,
ArrayList
<
TMLCPActivityDiagram
>
junctionDiagList
)
{
StringBuffer
sb
=
new
StringBuffer
();
if
(
nextElement
instanceof
TMLCPRefSD
)
{
sb
.
append
(
removeHashKey
(
((
TMLCPRefSD
)
nextElement
).
getName
()
)
+
" + "
);
}
if
(
nextElement
instanceof
TMLCPRefAD
)
{
String
s
=
(
(
TMLCPRefAD
)
nextElement
).
getName
();
if
(
s
.
length
()
>=
9
)
{
if
(
s
.
substring
(
0
,
8
).
equals
(
"junction"
)
)
{
//it is a reference to a junction diagram
sb
.
append
(
parseJunctionDiagram
(
getJunctionDiagram
(
s
.
substring
(
0
,
s
.
length
()-
2
),
junctionDiagList
),
junctionDiagList
)
);
TraceManager
.
addDev
(
"///////////////"
+
(
(
TMLCPRefAD
)
nextElement
).
getReferenceObject
().
toString
()
);
return
sb
.
toString
();
//suppose there is nothing after a junction
}
else
{
//it is a normal reference to a diagram
sb
.
append
(
removeHashKey
(
((
TMLCPRefAD
)
nextElement
).
getName
()
)
+
" + "
);
}
}
}
if
(
nextElement
instanceof
TMLCPJoin
)
{
TraceManager
.
addDev
(
"PASSING BY TMLCPJoin"
);
sb
.
append
(
""
);
}
if
(
nextElement
instanceof
TMLCPFork
)
{
TraceManager
.
addDev
(
"PASSING BY TMLCPFork"
);
sb
.
append
(
""
);
}
return
sb
.
toString
();
}
// Retrieves the AD corresponding to a junction from the list of junction diagrams
private
TMLCPActivityDiagram
getJunctionDiagram
(
String
name
,
ArrayList
<
TMLCPActivityDiagram
>
junctionDiagList
)
{
for
(
TMLCPActivityDiagram
diag:
junctionDiagList
)
{
if
(
diag
.
getName
().
equals
(
name
)
)
{
return
diag
;
}
}
return
junctionDiagList
.
get
(
0
);
}
private
String
parseJunctionDiagram
(
TMLCPActivityDiagram
ad
,
ArrayList
<
TMLCPActivityDiagram
>
junctionDiagList
)
{
StringBuffer
sb
=
new
StringBuffer
(
);
TMLCPElement
currentElement
,
nextElement
;
ArrayList
<
TMLCPElement
>
nextElements
;
...
...
@@ -432,22 +399,24 @@ public class TMLCPTextSpecification {
}
else
{
//it is a simple sequence with no nested junctions
nextElement
=
nextElements
.
get
(
0
);
if
(
nextElement
instanceof
TMLCPRefSD
)
{
sb
.
append
(
removeHashKey
(
((
TMLCPRefSD
)
nextElement
).
getName
()
)
+
" +"
);
}
if
(
nextElement
instanceof
TMLCPRefAD
)
{
sb
.
append
(
removeHashKey
(
((
TMLCPRefAD
)
nextElement
).
getName
()
)
+
" +"
);
}
sb
.
append
(
parseSequence
(
nextElement
)
);
}
currentElement
=
nextElement
;
}
sb
=
removeTrailingSymbol
(
sb
);
// Now parsing what comes after the choice operator
sb
.
append
(
"\n\tLOOP"
+
SP
+
ad
.
getName
()
+
"\n\t"
);
sb
.
append
(
parseChoice
(
currentElement
,
ad
)
);
return
sb
.
toString
();
}
private
String
parseChoice
(
TMLCPElement
currentElement
,
TMLCPActivityDiagram
ad
)
{
StringBuffer
sb
=
new
StringBuffer
(
"\n\tLOOP"
+
SP
+
ad
.
getName
()
+
"\n\t"
);
ArrayList
<
TMLCPElement
>
nextElements
;
int
index
=
0
;
ArrayList
<
TMLCPElement
>
branches
=
currentElement
.
getNextElements
();
ArrayList
<
String
>
guards
=
(
(
TMLCPChoice
)
currentElement
).
getGuards
();
for
(
TMLCPElement
element:
branches
)
{
//for each of the branches go until a stop or a junction, only possible to find seq/fork
sb
.
append
(
"\n\t"
+
guards
.
get
(
index
)
+
SP
);
while
(
!(
element
instanceof
TMLCPStop
)
)
{
...
...
@@ -459,23 +428,14 @@ public class TMLCPTextSpecification {
sbFork
.
setLength
(
0
);
}
else
{
//it is a simple sequence with no nested junctions, use element
//nextElement = nextElements.get(0);
if
(
element
instanceof
TMLCPRefSD
)
{
sb
.
append
(
removeHashKey
(
((
TMLCPRefSD
)
element
).
getName
()
)
+
" +"
);
}
if
(
element
instanceof
TMLCPRefAD
)
{
if
(
isAJunction
(
element
)
)
{
String
s
=
(
(
TMLCPRefAD
)
element
).
getName
();
if
(
s
.
length
()
>=
9
)
{
if
(
s
.
substring
(
0
,
8
).
equals
(
"junction"
)
)
{
//it is a reference to a junction diagram
sb
=
removeTrailingSymbol
(
sb
);
sb
.
append
(
"GOTO LOOP"
+
SP
+
s
);
//sb.append( parseJunctionDiagram( getJunctionDiagram( s.substring(0, s.length()-2), junctionDiagList ), junctionDiagList ) );
break
;
}
else
{
//it is a normal reference to a diagram
sb
.
append
(
removeHashKey
(
((
TMLCPRefAD
)
element
).
getName
()
)
+
" + "
);
}
}
sb
=
removeTrailingSymbol
(
sb
);
sb
.
append
(
"GOTO LOOP"
+
SP
+
s
);
break
;
}
else
{
sb
.
append
(
parseSequence
(
element
)
);
}
element
=
element
.
getNextElements
().
get
(
0
);
if
(
element
instanceof
TMLCPStop
)
{
...
...
@@ -483,7 +443,6 @@ public class TMLCPTextSpecification {
sb
.
append
(
SP
+
"GOTO END_LOOP"
);
}
}
}
// end of while
index
++;
}
// end of for
...
...
@@ -492,6 +451,39 @@ public class TMLCPTextSpecification {
return
sb
.
toString
();
}
private
boolean
isAJunction
(
TMLCPElement
element
)
{
if
(
element
instanceof
TMLCPRefAD
)
{
String
s
=
(
(
TMLCPRefAD
)
element
).
getName
();
if
(
s
.
length
()
>=
9
)
{
if
(
s
.
substring
(
0
,
8
).
equals
(
"junction"
)
)
{
//it is a reference to a junction diagram
return
true
;
}
}
}
return
false
;
}
// Retrieves the AD corresponding to a junction from the list of junction diagrams
private
TMLCPActivityDiagram
getJunctionDiagram
(
String
name
,
ArrayList
<
TMLCPActivityDiagram
>
junctionDiagList
)
{
for
(
TMLCPActivityDiagram
diag:
junctionDiagList
)
{
if
(
diag
.
getName
().
equals
(
name
)
)
{
return
diag
;
}
}
return
junctionDiagList
.
get
(
0
);
}
private
StringBuffer
removeTrailingSymbol
(
StringBuffer
sb
)
{
if
(
sb
.
length
()
>
0
)
{
sb
.
setLength
(
sb
.
length
()
-
1
);
return
sb
;
}
return
sb
;
}
private
StringBuffer
removeTrailingSymbols
(
StringBuffer
sb
,
int
n
)
{
if
(
sb
.
length
()
>
0
)
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment