SM update and fixes
git-svn-id: https://projects.brucker.ch/su4sml/svn/infsec-import/trunk/src/su4sml@4320 3260e6d1-4efc-4170-b0a7-36055960796d
This commit is contained in:
parent
71c7e39694
commit
dfe13bc7ac
|
@ -261,6 +261,8 @@ fun transform_guard t (XMI.mk_Guard g) =
|
||||||
fun transform_event t (XMI.CallEvent ev) =
|
fun transform_event t (XMI.CallEvent ev) =
|
||||||
Rep.CallEvent (find_operation t (#operation ev),
|
Rep.CallEvent (find_operation t (#operation ev),
|
||||||
map (transform_parameter t) (#parameter ev))
|
map (transform_parameter t) (#parameter ev))
|
||||||
|
| transform_event t (XMI.SignalEvent ev) =
|
||||||
|
Rep.SignalEvent []
|
||||||
|
|
||||||
fun transform_proc t (XMI.mk_Procedure proc) =
|
fun transform_proc t (XMI.mk_Procedure proc) =
|
||||||
Rep.Proc_mk { proc_id = #xmiid proc,
|
Rep.Proc_mk { proc_id = #xmiid proc,
|
||||||
|
|
|
@ -243,6 +243,8 @@ fun insert_state table (XMI.CompositeState st) =
|
||||||
|
|
||||||
fun insert_event table (e as XMI.CallEvent ev) =
|
fun insert_event table (e as XMI.CallEvent ev) =
|
||||||
HashTable.insert table (#xmiid ev, Event e)
|
HashTable.insert table (#xmiid ev, Event e)
|
||||||
|
| insert_event table (e as XMI.SignalEvent ev) =
|
||||||
|
HashTable.insert table (#xmiid ev, Event e)
|
||||||
|
|
||||||
fun insert_transition table (XMI.mk_Transition trans) =
|
fun insert_transition table (XMI.mk_Transition trans) =
|
||||||
HashTable.insert table (#xmiid trans, Transition (XMI.mk_Transition trans))
|
HashTable.insert table (#xmiid trans, Transition (XMI.mk_Transition trans))
|
||||||
|
|
|
@ -63,7 +63,7 @@ datatype Guard = mk_Guard of {xmiid : string,
|
||||||
body : string option,
|
body : string option,
|
||||||
expression : XMI_OCL.OCLExpression option}
|
expression : XMI_OCL.OCLExpression option}
|
||||||
|
|
||||||
datatype Event = SignalEvent of Parameter list
|
datatype Event = SignalEvent of {xmiid : string, parameter: Parameter list}
|
||||||
| CallEvent of { xmiid : string,
|
| CallEvent of { xmiid : string,
|
||||||
name: string,
|
name: string,
|
||||||
operation: string, (* xmi.idref *)
|
operation: string, (* xmi.idref *)
|
||||||
|
|
|
@ -433,7 +433,8 @@ val filterPackages = fn trees => append (XmlTree.filter "UML:Package" trees
|
||||||
(XmlTree.filter "UML:Model" trees)
|
(XmlTree.filter "UML:Model" trees)
|
||||||
val filterStateMachines = XmlTree.filter "UML:StateMachine"
|
val filterStateMachines = XmlTree.filter "UML:StateMachine"
|
||||||
val filterActivityGraphs= XmlTree.filter "UML:ActivityGraph"
|
val filterActivityGraphs= XmlTree.filter "UML:ActivityGraph"
|
||||||
val filterEvents = XmlTree.filter "UML:CallEvent" (* add SignalEvents? *)
|
val filterEvents = fn x => append (XmlTree.filter "UML:CallEvent" x)
|
||||||
|
(XmlTree.filter "UML:SignalEvent" x)(* add SignalEvents? *)
|
||||||
|
|
||||||
(* there may be other kinds of dependencies, but we do not parse them atm *)
|
(* there may be other kinds of dependencies, but we do not parse them atm *)
|
||||||
val filterDependencies = XmlTree.filter "UML:Abstraction"
|
val filterDependencies = XmlTree.filter "UML:Abstraction"
|
||||||
|
@ -619,20 +620,20 @@ fun mkGuard tree =
|
||||||
let val getExpr = XmlTree.node_children_of o (XmlTree.find "UML:Guard.expression")
|
let val getExpr = XmlTree.node_children_of o (XmlTree.find "UML:Guard.expression")
|
||||||
val getBoolExpr = XmlTree.attributes_of o (XmlTree.find "UML:BooleanExpression") o
|
val getBoolExpr = XmlTree.attributes_of o (XmlTree.find "UML:BooleanExpression") o
|
||||||
XmlTree.node_children_of o (XmlTree.find "UML:Guard.expression")
|
XmlTree.node_children_of o (XmlTree.find "UML:Guard.expression")
|
||||||
val getOclExpr = (XmlTree.find "UML:ExpressionInOcl") o
|
val getOclExpr = (XmlTree.find "UML15OCL:Expressions.ExpressionInOcl") o
|
||||||
XmlTree.node_children_of o (XmlTree.find "UML:Guard.expression")
|
XmlTree.node_children_of o (XmlTree.find "UML:Guard.expression")
|
||||||
fun f atts trees = XMI.mk_Guard{
|
fun f atts trees = XMI.mk_Guard{
|
||||||
xmiid = getXmiId atts,
|
xmiid = getXmiId atts,
|
||||||
name = getMaybeEmptyName atts,
|
name = getMaybeEmptyName atts,
|
||||||
isSpecification = getBoolAtt "isSpecification" atts,
|
isSpecification = getBoolAtt "isSpecification" atts,
|
||||||
visibility = getVisibility atts,
|
visibility = getVisibility atts,
|
||||||
language = if XmlTree.exists "UML:ExpressionInOCL" (getExpr trees)
|
language = if XmlTree.exists "UML15OCL:Expressions.ExpressionInOcl" (getExpr trees)
|
||||||
then getLang(XmlTree.attributes_of (getOclExpr trees))
|
then getLang(XmlTree.attributes_of (getOclExpr trees))
|
||||||
else getLang(getBoolExpr trees),
|
else "blubb"(* getLang(getBoolExpr trees)*),
|
||||||
body = if XmlTree.exists "UML:ExpressionInOCL" (getExpr trees)
|
body = if XmlTree.exists "UML15OCL:Expressions.ExpressionInOCL" (getExpr trees)
|
||||||
then NONE
|
then NONE
|
||||||
else SOME (getBody (getBoolExpr trees)) ,
|
else SOME "blah"(*(getBody (getBoolExpr trees))*) ,
|
||||||
expression = if XmlTree.exists "UML:ExpressionInOCL" (getExpr trees)
|
expression = if XmlTree.exists "UML15OCL:Expressions.ExpressionInOcl" (getExpr trees)
|
||||||
then SOME (mkOCLExpression (getOclExpr trees))
|
then SOME (mkOCLExpression (getOclExpr trees))
|
||||||
else NONE}
|
else NONE}
|
||||||
in XmlTree.apply_on "UML:Guard" f tree
|
in XmlTree.apply_on "UML:Guard" f tree
|
||||||
|
@ -815,6 +816,7 @@ and mkStateMachine tree =
|
||||||
(trees)}
|
(trees)}
|
||||||
in XmlTree.apply_on "UML:StateMachine" f tree
|
in XmlTree.apply_on "UML:StateMachine" f tree
|
||||||
handle XmlTree.IllFormed msg => raise IllFormed ("in mkStateMachine: "^msg)
|
handle XmlTree.IllFormed msg => raise IllFormed ("in mkStateMachine: "^msg)
|
||||||
|
| IllFormed msg => raise IllFormed ("in mkStateMachine: "^msg)
|
||||||
| _ => raise IllFormed ("Error in mkStateMachine")
|
| _ => raise IllFormed ("Error in mkStateMachine")
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -1070,6 +1072,9 @@ fun mkCallEvent atts trees =
|
||||||
trees))
|
trees))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun mkSignalEvent atts trees = XMI.SignalEvent {xmiid = getXmiId atts,
|
||||||
|
parameter = []}
|
||||||
|
|
||||||
(* TODO: mkSignalEvent, etc ? *)
|
(* TODO: mkSignalEvent, etc ? *)
|
||||||
fun mkEvent tree =
|
fun mkEvent tree =
|
||||||
let val elem = XmlTree.tagname_of tree
|
let val elem = XmlTree.tagname_of tree
|
||||||
|
@ -1077,6 +1082,7 @@ fun mkEvent tree =
|
||||||
val trees = XmlTree.node_children_of tree
|
val trees = XmlTree.node_children_of tree
|
||||||
in
|
in
|
||||||
case elem of "UML:CallEvent" => mkCallEvent atts trees
|
case elem of "UML:CallEvent" => mkCallEvent atts trees
|
||||||
|
| "UML:SignalEvent" => mkSignalEvent atts trees
|
||||||
| _ => raise IllFormed ("in mkEvent: found unexpected element "^elem)
|
| _ => raise IllFormed ("in mkEvent: found unexpected element "^elem)
|
||||||
end
|
end
|
||||||
handle _ => raise IllFormed ("Error in mkEvent")
|
handle _ => raise IllFormed ("Error in mkEvent")
|
||||||
|
|
Loading…
Reference in New Issue