From dfe13bc7ac5a896d3ee7312b21d246dae3bb0c72 Mon Sep 17 00:00:00 2001 From: "Achim D. Brucker" Date: Wed, 5 Apr 2006 10:29:18 +0000 Subject: [PATCH] SM update and fixes git-svn-id: https://projects.brucker.ch/su4sml/svn/infsec-import/trunk/src/su4sml@4320 3260e6d1-4efc-4170-b0a7-36055960796d --- src/xmi2rep.sml | 2 ++ src/xmi_idtable.sml | 2 ++ src/xmi_state_machines.sml | 2 +- src/xml2xmi.sml | 20 +++++++++++++------- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/xmi2rep.sml b/src/xmi2rep.sml index 8d00cdf..8e20232 100644 --- a/src/xmi2rep.sml +++ b/src/xmi2rep.sml @@ -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, diff --git a/src/xmi_idtable.sml b/src/xmi_idtable.sml index d39d97a..6d1329f 100644 --- a/src/xmi_idtable.sml +++ b/src/xmi_idtable.sml @@ -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)) diff --git a/src/xmi_state_machines.sml b/src/xmi_state_machines.sml index 01f07aa..4c373d3 100644 --- a/src/xmi_state_machines.sml +++ b/src/xmi_state_machines.sml @@ -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 *) diff --git a/src/xml2xmi.sml b/src/xml2xmi.sml index dcfc1f9..f08e36e 100644 --- a/src/xml2xmi.sml +++ b/src/xml2xmi.sml @@ -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")