[commit] r1791 - trunk/GME/Mga

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Mon Jan 9 17:37:34 CST 2012


Author: ksmyth
Date: Mon Jan  9 17:37:33 2012
New Revision: 1791

Log:
Fail fast when bad role (wrong parent) is given. Was caught in check().

Modified:
   trunk/GME/Mga/MgaComplexOps.cpp

Modified: trunk/GME/Mga/MgaComplexOps.cpp
==============================================================================
--- trunk/GME/Mga/MgaComplexOps.cpp	Mon Jan  9 11:16:28 2012	(r1790)
+++ trunk/GME/Mga/MgaComplexOps.cpp	Mon Jan  9 17:37:33 2012	(r1791)
@@ -1067,9 +1067,9 @@
 				ASSERT(targettype == DTID_MODEL);
 				CComPtr<IMgaMetaRole> r;
 				if(rlist) COMTHROW(rlist->get_Item(i+1, &r));
+				CComPtr<IMgaMetaFCO> mf; 
+				COMTHROW(get_Meta(&mf));
 				if(!r) {   // NO metarole given, inherit that of original object
-					CComPtr<IMgaMetaFCO> mf; 
-					COMTHROW(get_Meta(&mf));
 					CComQIPtr<IMgaMetaModel> parentmeta = mf;
 					if(!parentmeta) COMTHROW(E_MGA_META_INCOMPATIBILITY);
 					metaref_type t;
@@ -1081,14 +1081,18 @@
 					COMTHROW(metar->get_Name(&rolename));
 					COMTHROW(parentmeta->get_RoleByName(rolename, &r));
 					if(!r) COMTHROW(E_MGA_NO_ROLE);
-
 				}
 				{
 					metaref_type kt;
 					CComPtr<IMgaMetaFCO> mfco;
 					COMTHROW(r->get_Kind(&mfco));
 					COMTHROW(mfco->get_MetaRef(&kt));
-					if(kt != (nobjs[i])[ATTRID_META]) COMTHROW(E_MGA_NO_ROLE);
+					if(kt != (nobjs[i])[ATTRID_META])
+						COMTHROW(E_MGA_NO_ROLE);
+					CComPtr<IMgaMetaModel> mmodel;
+					COMTHROW(r->get_ParentModel(&mmodel));
+					if (!mf.IsEqualObject(mmodel))
+						COMTHROW(E_MGA_INVALID_ROLE);
 				}
 
 				COMTHROW(r->get_MetaRef(&trole));


More information about the gme-commit mailing list