[Mobies-commit] [commit] r3686 - UDM/trunk/src/UdmCliGen

ksmyth at redhat1.isis.vanderbilt.edu ksmyth at redhat1.isis.vanderbilt.edu
Mon Mar 28 14:22:01 CDT 2011


Author: ksmyth
Date: Mon Mar 28 14:22:01 2011
New Revision: 3686

Log:
Put Initialize inside of a namespace. Add Dictionary to construct runtime class (i.e. downcast) to aid debugging. Add Uninitialize method

Modified:
   UDM/trunk/src/UdmCliGen/Implementation.tmpl
   UDM/trunk/src/UdmCliGen/Initialize.tmpl
   UDM/trunk/src/UdmCliGen/UdmCliGen.py

Modified: UDM/trunk/src/UdmCliGen/Implementation.tmpl
==============================================================================
--- UDM/trunk/src/UdmCliGen/Implementation.tmpl	Mon Mar 28 14:20:38 2011	(r3685)
+++ UDM/trunk/src/UdmCliGen/Implementation.tmpl	Mon Mar 28 14:22:01 2011	(r3686)
@@ -47,6 +47,18 @@
                     (backing.derived(), o => new ${c.name}(o)));
             }
         }
+        public ${fq_iname($c)} this_downcasted
+        {
+            get
+            {
+                $impl_namespace${root.name}Initialize.castDelegate<Udm.Native.UdmCliObject> cast;
+                if ($impl_namespace${root.name}Initialize.downcasts.TryGetValue(type, out cast))
+                {
+                    return (${fq_iname($c)})cast(this);
+                }
+                return null;
+            }
+        }
 
 
         public static global::Udm.Native.Uml.Class meta;

Modified: UDM/trunk/src/UdmCliGen/Initialize.tmpl
==============================================================================
--- UDM/trunk/src/UdmCliGen/Initialize.tmpl	Mon Mar 28 14:20:38 2011	(r3685)
+++ UDM/trunk/src/UdmCliGen/Initialize.tmpl	Mon Mar 28 14:22:01 2011	(r3686)
@@ -1,7 +1,20 @@
 #from common import *
 
+namespace ${impl_namespace[0:-1]} {
 class ${root.name}Initialize {
 
+public ${root.name}(string metaFilename) {
+    Udm.Native.Udm.Initialize();
+    // Open MSL meta
+    Udm.Native.SmartDataNetwork meta = new Udm.Native.SmartDataNetwork(Udm.Native.Uml.Uml.diagram);
+    meta.OpenExisting(metaFilename);
+    Udm.Impl.MSLInitialize.Initialize(meta);
+}
+
+
+public delegate T castDelegate<T>(Udm.Native.UdmCliObject o) where T : Udm.Native.UdmCliObject;
+public static System.Collections.Generic.Dictionary<Udm.Native.Uml.Class, castDelegate<Udm.Native.UdmCliObject>> downcasts = new System.Collections.Generic.Dictionary<Udm.Native.Uml.Class, castDelegate<Udm.Native.UdmCliObject>>();
+
 public static void Initialize(Udm.Native.DataNetwork meta)
 {
 System.Collections.Generic.Dictionary<string, Udm.Native.Uml.Class> classes = new System.Collections.Generic.Dictionary<string,Udm.Native.Uml.Class>();
@@ -16,6 +29,7 @@
 #for $o in get_descendants($root)
 #if $o.type.name == "Class"
 ${fq_name($o)}.meta = classes["${get_path($o, "/")}"];
+downcasts.Add(${fq_name($o)}.meta, x=>${fq_name($o)}.Cast(x));
 #else if $o.type.name == "Attribute"
 ${fq_name($o.parent)}.$role_metaname($o) = attributes["${get_path($o, "/")}"];
 #end if
@@ -40,6 +54,35 @@
 Udm.Native.Uml.Uml.SetParentRole(${fq_name(crole.target)}.$role_metaname(prole), classes["${get_path($crole.target, "/")}"], classes["${get_path($prole.target, "/")}"], "$crole.name", "$prole.name");
 #end if
 #end for
+}
+
+public static void Uninitialize()
+{
+downcasts.Clear();
+
+#for $o in get_descendants($root)
+#if $o.type.name == "Class"
+${fq_name($o)}.meta = null;
+#else if $o.type.name == "Attribute"
+${fq_name($o.parent)}.$role_metaname($o) = null;
+#end if
+#end for
 
+
+#for $o in get_descendants($root)
+#if $o.type.name == "Association"
+#set role1 = $o.children()[0]
+#set role2 = $o.children()[1]
+${fq_name(role1.target)}.$role_metaname(role2) = null;
+#set (role2, role1) = (role1, role2)
+${fq_name(role1.target)}.$role_metaname(role2) = null;
+#else if $o.type.name == "Composition"
+#set crole = $o.childRole_role_children[0]
+#set prole = $o.parentRole_role_children[0]
+${fq_name(prole.target)}.$role_metaname(crole) = null;
+${fq_name(crole.target)}.$role_metaname(prole) = null;
+#end if
+#end for
+}
 }
 }

Modified: UDM/trunk/src/UdmCliGen/UdmCliGen.py
==============================================================================
--- UDM/trunk/src/UdmCliGen/UdmCliGen.py	Mon Mar 28 14:20:38 2011	(r3685)
+++ UDM/trunk/src/UdmCliGen/UdmCliGen.py	Mon Mar 28 14:22:01 2011	(r3686)
@@ -65,7 +65,7 @@
         t = get_template("Interface", searchList=[searchList])
         output.write(str(t))
 
-        searchList = {'c': child, 'namespace': common.impl_namespace + common.get_path(child.parent), 'uml': uml, 'diagram_name': dn.root.name}
+        searchList = {'c': child, 'namespace': common.impl_namespace + common.get_path(child.parent), 'uml': uml, 'diagram_name': dn.root.name, 'root': dn.root}
         t = get_template("Implementation", searchList=[searchList])
         output.write(str(t))
 


More information about the Mobies-commit mailing list