Skip to content

Commit

Permalink
Fix import_from_amola when states are not named
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexandreDecan committed Apr 1, 2018
1 parent 6977487 commit d453fba
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions sismic/io/amola.py
Expand Up @@ -121,6 +121,10 @@ def import_from_amola(xmi_path: str, *, ignore_validation: bool=False) -> Statec
'END': FinalState,
}

# State name
def name(node):
return node.name if node.name else 's'+str(id(node))

nodes = list(model.nodes)
parents = {}
while len(nodes) > 0:
Expand All @@ -129,7 +133,7 @@ def import_from_amola(xmi_path: str, *, ignore_validation: bool=False) -> Statec
state_klass = state_klasses.get(node.type, None)

if state_klass:
state = state_klass(node.name if node.name else 's'+str(id(node)))
state = state_klass(name(node))

try:
metadata = json.loads(node.metadata) if node.metadata else {}
Expand All @@ -141,8 +145,8 @@ def import_from_amola(xmi_path: str, *, ignore_validation: bool=False) -> Statec
state.postconditions = metadata.get('postconditions', [])
state.invariants = metadata.get('invariants', [])

parents[node.name] = node.Father.name if node.Father else None
statechart.add_state(state, parents.get(node.name, None))
parents[name(node)] = name(node.Father) if node.Father else None
statechart.add_state(state, parents.get(name(node), None))
nodes.extend(list(node.Children))

if node.actions:
Expand All @@ -156,7 +160,7 @@ def import_from_amola(xmi_path: str, *, ignore_validation: bool=False) -> Statec
event, guard, action = import_TE(action)
if event or guard or action:
tr = Transition(
source=node.name,
source=name(node),
target=None,
event=event,
guard=guard,
Expand All @@ -175,17 +179,17 @@ def import_from_amola(xmi_path: str, *, ignore_validation: bool=False) -> Statec

# Convert START state transition to state.initial
if transition.source.type == 'START':
statechart.state_for(transition.source.Father.name).initial = transition.target.name
statechart.state_for(name(transition.source.Father)).initial = name(transition.target)
# Convert HISTORY/SHALLOW_HISTORY state transition to state.memory
elif transition.source.type in ['HISTORY', 'SHALLOW_HISTORY']:
statechart.state_for(transition.source.name).memory = transition.target.name
statechart.state_for(name(transition.source)).memory = name(transition.target)
else:
# Parse Transition Expression
event, guard, action = import_TE(transition.TE)

tr = Transition(
source=transition.source.name,
target=None if metadata.get('internal', False) else transition.target.name,
source=name(transition.source),
target=None if metadata.get('internal', False) else name(transition.target),
event=event,
guard=guard,
action=action,
Expand Down

0 comments on commit d453fba

Please sign in to comment.