[Mobies-commit] [commit] r3924 - UDM/trunk/src/UdmGme
ksmyth at redhat1.isis.vanderbilt.edu
ksmyth at redhat1.isis.vanderbilt.edu
Wed Nov 2 11:28:29 CDT 2011
Author: ksmyth
Date: Wed Nov 2 11:28:29 2011
New Revision: 3924
Log:
Use defaults from MetaGME2UML (GReAT) for role names. Fixes errors where a paradigm is registered, then MetaGME2UML is run=> the registered paradigm doesnt have the required registry entries (error msg "Association resolves to invalid object")
Modified:
UDM/trunk/src/UdmGme/UdmGme.cpp
Modified: UDM/trunk/src/UdmGme/UdmGme.cpp
==============================================================================
--- UDM/trunk/src/UdmGme/UdmGme.cpp Wed Nov 2 11:26:39 2011 (r3923)
+++ UDM/trunk/src/UdmGme/UdmGme.cpp Wed Nov 2 11:28:29 2011 (r3924)
@@ -251,6 +251,10 @@
#undef INTERFACEVERSION_INCLUDED
#undef INTERFACE_VERSION
+// KMS: VS intellisense has a hard time loading from typelib GUID. This fixes it:
+//#include "C:\Users\ksmyth\git\UDM\Build\Win32\VC10\Release\obj\src\UdmGme\Mga.tlh"
+//#include "C:\Users\ksmyth\git\UDM\Build\Win32\VC10\Release\obj\src\UdmGme\Meta.tlh"
+
namespace UdmGme
{
@@ -289,6 +293,43 @@
assocmapitem() : metaobjs_count(0), metaobjs(NULL), rp_helper(false), pt_abstract(false), src_rp_helper(&Udm::_null), dst_rp_helper(&Udm::_null) {};
};
+ SmartBSTR GetRoleFromMeta(IMgaMetaFCOPtr& meta, const wchar_t* role_type)
+ {
+ SmartBSTR role = meta->RegistryValue[role_type];
+ if (role.length() == 0)
+ {
+ if (wcscmp(role_type, L"sName") == 0)
+ {
+ if (meta->ObjType == OBJTYPE_CONNECTION)
+ return SmartBSTR(L"src") + meta->Name;
+ else if (meta->ObjType == OBJTYPE_SET)
+ return SmartBSTR(L"set") + meta->Name;
+ }
+ else if (wcscmp(role_type, L"dName") == 0)
+ {
+ if (meta->ObjType == OBJTYPE_CONNECTION)
+ return SmartBSTR(L"dst") + meta->Name;
+ }
+ else if (wcscmp(role_type, L"mName") == 0)
+ {
+ if (meta->ObjType == OBJTYPE_SET)
+ return SmartBSTR(L"members");
+ }
+ else if (wcscmp(role_type, L"rName") == 0)
+ {
+ if (meta->ObjType == OBJTYPE_REFERENCE)
+ return SmartBSTR(L"ref");
+ }
+ else if (wcscmp(role_type, L"rrName") == 0)
+ {
+ if (meta->ObjType == OBJTYPE_REFERENCE)
+ return SmartBSTR(L"referedby") + meta->Name;
+ }
+ // TODO dRefParent
+ }
+ return role;
+ }
+
struct privdata
{
@@ -3262,8 +3303,8 @@
if (p)
{
if (p->GetObjType() != OBJTYPE_REFERENCE) continue;
- SmartBSTR herename = p->RegistryValue["rrName"];
- SmartBSTR therename = p->RegistryValue["rName"];
+ SmartBSTR herename = GetRoleFromMeta(p, L"rrName");
+ SmartBSTR therename = GetRoleFromMeta(p, L"rName");
if (!(!therename) && !(!herename))
{
if (string((const char *) therename) != "ref") continue;
@@ -3385,16 +3426,16 @@
switch(bt->GetObjType())
{
case OBJTYPE_REFERENCE:
- herename = bt->RegistryValue["rrName"];
- therename = bt->RegistryValue["rName"];
+ herename = GetRoleFromMeta(bt, L"rrName");
+ therename = GetRoleFromMeta(bt, L"rName");
break;
case OBJTYPE_SET:
- herename = bt->RegistryValue["sName"];
- therename = bt->RegistryValue["mName"];
+ herename = GetRoleFromMeta(bt, L"sName");
+ therename = GetRoleFromMeta(bt, L"mName");
break;
case OBJTYPE_CONNECTION:
- sRefParent = bt->RegistryValue["sRefParent"];
- dRefParent = bt->RegistryValue["dRefParent"];
+ sRefParent = GetRoleFromMeta(bt, L"sRefParent");
+ dRefParent = GetRoleFromMeta(bt, L"dRefParent");
nn->rp_helper = true;//it's an rp_helper connection
break;
default:
@@ -3513,18 +3554,18 @@
switch(nn->ot)
{
case OBJTYPE_REFERENCE:
- herename = nn->metaobj->RegistryValue["rrName"];
- therename = nn->metaobj->RegistryValue["rName"];
+ herename = GetRoleFromMeta(nn->metaobj, L"rrName");
+ therename = GetRoleFromMeta(nn->metaobj, L"rName");
break;
case OBJTYPE_SET:
- herename = nn->metaobj->RegistryValue["sName"];
- therename = nn->metaobj->RegistryValue["mName"];
+ herename = GetRoleFromMeta(nn->metaobj, L"sName");
+ therename = GetRoleFromMeta(nn->metaobj, L"mName");
break;
case OBJTYPE_CONNECTION:
if (nn->rp_helper) break;
- herename = nn->metaobj->RegistryValue["sName"];
- therename = nn->metaobj->RegistryValue["dName"];
+ herename = GetRoleFromMeta(nn->metaobj, L"sName");
+ therename = GetRoleFromMeta(nn->metaobj, L"dName");
{
for(set< ::Uml::AssociationRole>::iterator j = roles.begin(); j != roles.end(); j++)
{
@@ -3559,8 +3600,8 @@
if(nn->ot != expect) throw udm_exception(errPrefix + "Association resolves to invalid object type: " + (string)p->Name);
//compute which one is the primary role name
- herename = p->RegistryValue["sName"];
- therename = p->RegistryValue["dName"];
+ herename = GetRoleFromMeta(p, L"sName");
+ therename = GetRoleFromMeta(p, L"dName");
{
for(set< ::Uml::AssociationRole>::iterator j = roles.begin(); j != roles.end(); j++)
{
@@ -3613,10 +3654,10 @@
assocmapitem *nn = i->second;
if ( !nn->metaobj ) continue;
- SmartBSTR sRefParent = nn->metaobj->RegistryValue["sRefParent"];
- SmartBSTR dRefParent = nn->metaobj->RegistryValue["dRefParent"];
- SmartBSTR herename = nn->metaobj->RegistryValue["sName"];
- SmartBSTR therename = nn->metaobj->RegistryValue["dName"];
+ SmartBSTR sRefParent = GetRoleFromMeta(nn->metaobj, L"sRefParent");
+ SmartBSTR dRefParent = GetRoleFromMeta(nn->metaobj, L"dRefParent");
+ SmartBSTR herename = GetRoleFromMeta(nn->metaobj, L"sName");
+ SmartBSTR therename = GetRoleFromMeta(nn->metaobj, L"dName");
if ( nn->ot != OBJTYPE_CONNECTION || nn->rp_helper || !sRefParent || !dRefParent ) continue;
More information about the Mobies-commit
mailing list