[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