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:
Achim D. Brucker 2006-04-05 10:29:18 +00:00
parent 71c7e39694
commit dfe13bc7ac
4 changed files with 18 additions and 8 deletions

View File

@ -261,6 +261,8 @@ fun transform_guard t (XMI.mk_Guard g) =
fun transform_event t (XMI.CallEvent ev) =
Rep.CallEvent (find_operation t (#operation ev),
map (transform_parameter t) (#parameter ev))
| transform_event t (XMI.SignalEvent ev) =
Rep.SignalEvent []
fun transform_proc t (XMI.mk_Procedure proc) =
Rep.Proc_mk { proc_id = #xmiid proc,

View File

@ -243,6 +243,8 @@ fun insert_state table (XMI.CompositeState st) =
fun insert_event table (e as XMI.CallEvent ev) =
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) =
HashTable.insert table (#xmiid trans, Transition (XMI.mk_Transition trans))

View File

@ -63,7 +63,7 @@ datatype Guard = mk_Guard of {xmiid : string,
body : string 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,
name: string,
operation: string, (* xmi.idref *)

View File

@ -433,7 +433,8 @@ val filterPackages = fn trees => append (XmlTree.filter "UML:Package" trees
(XmlTree.filter "UML:Model" trees)
val filterStateMachines = XmlTree.filter "UML:StateMachine"
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 *)
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")
val getBoolExpr = XmlTree.attributes_of o (XmlTree.find "UML:BooleanExpression") o
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")
fun f atts trees = XMI.mk_Guard{
xmiid = getXmiId atts,
name = getMaybeEmptyName atts,
isSpecification = getBoolAtt "isSpecification" 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))
else getLang(getBoolExpr trees),
body = if XmlTree.exists "UML:ExpressionInOCL" (getExpr trees)
else "blubb"(* getLang(getBoolExpr trees)*),
body = if XmlTree.exists "UML15OCL:Expressions.ExpressionInOCL" (getExpr trees)
then NONE
else SOME (getBody (getBoolExpr trees)) ,
expression = if XmlTree.exists "UML:ExpressionInOCL" (getExpr trees)
else SOME "blah"(*(getBody (getBoolExpr trees))*) ,
expression = if XmlTree.exists "UML15OCL:Expressions.ExpressionInOcl" (getExpr trees)
then SOME (mkOCLExpression (getOclExpr trees))
else NONE}
in XmlTree.apply_on "UML:Guard" f tree
@ -815,6 +816,7 @@ and mkStateMachine tree =
(trees)}
in XmlTree.apply_on "UML:StateMachine" f tree
handle XmlTree.IllFormed msg => raise IllFormed ("in mkStateMachine: "^msg)
| IllFormed msg => raise IllFormed ("in mkStateMachine: "^msg)
| _ => raise IllFormed ("Error in mkStateMachine")
end;
@ -1070,6 +1072,9 @@ fun mkCallEvent atts trees =
trees))
}
fun mkSignalEvent atts trees = XMI.SignalEvent {xmiid = getXmiId atts,
parameter = []}
(* TODO: mkSignalEvent, etc ? *)
fun mkEvent tree =
let val elem = XmlTree.tagname_of tree
@ -1077,6 +1082,7 @@ fun mkEvent tree =
val trees = XmlTree.node_children_of tree
in
case elem of "UML:CallEvent" => mkCallEvent atts trees
| "UML:SignalEvent" => mkSignalEvent atts trees
| _ => raise IllFormed ("in mkEvent: found unexpected element "^elem)
end
handle _ => raise IllFormed ("Error in mkEvent")