[Mobies-commit] [commit] r4050 - in UDM/trunk: src/UdmGme tests/test_refports

ksmyth at redhat1.isis.vanderbilt.edu ksmyth at redhat1.isis.vanderbilt.edu
Wed Jun 27 15:56:33 CDT 2012


Author: ksmyth
Date: Wed Jun 27 15:56:33 2012
New Revision: 4050

Log:
Gme backend: dont record refport_parent_rev in references' registries. Erase refport_parent when SetSrc or SetDst. Fixes bug with exporting to xme a file with a refport_parent in the registry, which becomes invalid when imported. Relax assertions in refport test: __rp_container_rev wont work when the connection is not connected; __rp_container wont work after the connection is disconnected

Modified:
   UDM/trunk/src/UdmGme/UdmGme.cpp
   UDM/trunk/tests/test_refports/RefPortsTest.cpp

Modified: UDM/trunk/src/UdmGme/UdmGme.cpp
==============================================================================
--- UDM/trunk/src/UdmGme/UdmGme.cpp	Wed Jun 27 15:56:21 2012	(r4049)
+++ UDM/trunk/src/UdmGme/UdmGme.cpp	Wed Jun 27 15:56:33 2012	(r4050)
@@ -477,6 +477,8 @@
 	// to clear peer_toRemove's registry too, call it again with arguments reversed and the other role name
 	void RpHelperRemoveFromRegistry(const IMgaFCOPtr &fco, const IMgaFCOPtr &peer_toRemove, const string &role_name)
 	{
+		if (fco->Status != OBJECT_EXISTS)
+			return;
 		SmartBSTR co_ids = fco->RegistryValue[role_name.c_str()];
 		if (!(!co_ids))
 		{
@@ -545,15 +547,10 @@
 		return ret;
 	}
 
-	IMgaFCOsPtr RpHelperFindPeerFCOs(const IMgaFCOPtr &self,
-		const string &role_name, bool role_isNavigable,
-		const string &other_role_name, bool other_role_isNavigable,
-		const GmeDataNetwork *dn, bool only_ifNavigable, bool set_registry = true);
-
 	IMgaFCOsPtr RpHelperFindPeerFCOsFromModel(const IMgaFCOPtr &self,
 		const string &role_name, bool role_isNavigable,
 		const string &other_role_name, bool other_role_isNavigable,
-		const GmeDataNetwork *dn, bool only_ifNavigable, bool set_registry)
+		const GmeDataNetwork *dn, bool only_ifNavigable)
 	{
 		IMgaFCOsPtr ret;
 		ret.CreateInstance("Mga.MgaFCOs");
@@ -584,12 +581,6 @@
 
 				if (!only_ifNavigable || (only_ifNavigable && role_isNavigable))
 					COMTHROW(ret->Append(fco));
-
-				if (set_registry)
-				{
-					RpHelperAddToRegistry(self, fco, role_name, role_isNavigable);
-					RpHelperAddToRegistry(fco, self, other_role_name, other_role_isNavigable);
-				}
 			}
 		}
 		else if (self->GetObjType() == OBJTYPE_REFERENCE)
@@ -602,18 +593,13 @@
 			MGACOLL_ITERATE(IMgaConnPoint, cp)
 			{
 				IMgaSimpleConnectionPtr conn = MGACOLL_ITER->Owner;
-				IMgaFCOsPtr references = RpHelperFindPeerFCOsFromModel(conn, other_role_name, other_role_isNavigable, role_name, role_isNavigable, dn, true, false);
+				IMgaFCOsPtr references = RpHelperFindPeerFCOsFromModel(conn, other_role_name, other_role_isNavigable, role_name, role_isNavigable, dn, true);
 				MGACOLL_ITERATE(IMgaFCO, references)
 				{
 					if (reference->GetIsEqual(MGACOLL_ITER) == VARIANT_TRUE)
 					{
 						if (!only_ifNavigable || (only_ifNavigable && role_isNavigable))
 							COMTHROW(ret->Append(conn));
-						if (set_registry)
-						{
-							RpHelperAddToRegistry(self, conn, role_name, role_isNavigable);
-							RpHelperAddToRegistry(conn, self, other_role_name, other_role_isNavigable);
-						}
 					};
 				}
 				MGACOLL_ITERATE_END;
@@ -624,40 +610,6 @@
 		return ret;
 	}
 
-	IMgaFCOsPtr RpHelperFindPeerFCOs(const IMgaFCOPtr &self,
-		const string &role_name, bool role_isNavigable,
-		const string &other_role_name, bool other_role_isNavigable,
-		const GmeDataNetwork *dn, bool only_ifNavigable, bool set_registry)
-	{
-		IMgaFCOsPtr ret;
-		ret.CreateInstance("Mga.MgaFCOs");
-
-		set<string> seen_fcos;
-
-		IMgaFCOsPtr fcos = RpHelperFindPeerFCOsFromRegistry(self, role_name, only_ifNavigable, dn);
-		MGACOLL_ITERATE(IMgaFCO, fcos)
-		{
-			if (seen_fcos.find(string(MGACOLL_ITER->GetID())) == seen_fcos.end())
-			{
-				COMTHROW(ret->Append(MGACOLL_ITER));
-				seen_fcos.insert(string(MGACOLL_ITER->GetID()));
-			}
-		}
-		MGACOLL_ITERATE_END;
-
-		fcos = RpHelperFindPeerFCOsFromModel(self, role_name, role_isNavigable, other_role_name, other_role_isNavigable, dn, only_ifNavigable, set_registry);
-		MGACOLL_ITERATE(IMgaFCO, fcos)
-		{
-			if (seen_fcos.find(string(MGACOLL_ITER->GetID())) == seen_fcos.end())
-			{
-				COMTHROW(ret->Append(MGACOLL_ITER));
-				seen_fcos.insert(string(MGACOLL_ITER->GetID()));
-			}
-		}
-		MGACOLL_ITERATE_END;
-
-		return ret;
-	}
 
 #if 0
 	// Before connecting self to peer, check that the result would be valid.
@@ -708,12 +660,13 @@
 	}
 #endif
 
-	IMgaFCOPtr getPrefferedSrcRef(const IMgaSimpleConnectionPtr& conn, const GmeDataNetwork * dn)
+	IMgaFCOPtr getPrefferedSrcRef(const IMgaSimpleConnectionPtr& conn, const GmeDataNetwork * dn, SmartBSTR& regName=SmartBSTR())
 	{
 		SmartBSTR regrolename = conn->RegistryValue["sRefParent"];
 		IMgaFCOPtr ret;
 		if (!(!regrolename))
 		{
+			regName = regrolename;
 			IMgaFCOsPtr references = RpHelperFindPeerFCOsFromRegistry(conn, string(regrolename), true, dn);
 			if (references->GetCount() == 1)
 					ret = references->GetItem(1);
@@ -721,12 +674,13 @@
 		return ret;
 	};
 
-	IMgaFCOPtr getPrefferedDstRef(const IMgaSimpleConnectionPtr& conn, const GmeDataNetwork * dn)
+	IMgaFCOPtr getPrefferedDstRef(const IMgaSimpleConnectionPtr& conn, const GmeDataNetwork * dn, SmartBSTR& regName=SmartBSTR())
 	{
 		SmartBSTR regrolename = conn->RegistryValue["dRefParent"];
 		IMgaFCOPtr ret;
 		if (!(!regrolename))
 		{
+			regName = regrolename;
 			IMgaFCOsPtr references = RpHelperFindPeerFCOsFromRegistry(conn, string(regrolename), true, dn);
 			if (references->GetCount() == 1)
 					ret = references->GetItem(1);
@@ -949,12 +903,13 @@
 				IMgaFCOPtr peer = static_cast<GmeObject *>(*nvect.begin())->self;
 				if(reverse) 
 				{
-					IMgaFCOPtr pref_ref = getPrefferedSrcRef(IMgaSimpleConnectionPtr(self), (GmeDataNetwork*)mydn);
+					SmartBSTR regName;
+					IMgaFCOPtr pref_ref = getPrefferedSrcRef(IMgaSimpleConnectionPtr(self), (GmeDataNetwork*)mydn, regName);
 					if (pref_ref)
 					{
 						IMgaFCOsPtr references = FindReferencesToFCO(peer, pref_ref);
 						COMTHROW(IMgaSimpleConnectionPtr(self)->SetSrc(references, peer));
-						
+						self->RegistryNode[regName]->Clear();
 					}
 					else
 					{
@@ -973,11 +928,13 @@
 				}//if(reverse) 
 				else 
 				{
-					IMgaFCOPtr pref_ref = getPrefferedDstRef(IMgaSimpleConnectionPtr(self), (GmeDataNetwork*)mydn);
+					SmartBSTR regName;
+					IMgaFCOPtr pref_ref = getPrefferedDstRef(IMgaSimpleConnectionPtr(self), (GmeDataNetwork*)mydn, regName);
 					if (pref_ref)
 					{
 						IMgaFCOsPtr references = FindReferencesToFCO(peer, pref_ref);
 						COMTHROW(IMgaSimpleConnectionPtr(self)->SetDst(references, peer));
+						self->RegistryNode[regName]->Clear();
 					}
 					else
 					{
@@ -1012,9 +969,8 @@
 					IMgaSimpleConnectionPtr conn = static_cast<GmeObject *>(*i)->self;
 					
 					//we need to check if there is an associated helper connection
-					GmeObject * go = new GmeObject(conn, mydn);
-					go->RemoveHelperConnections();
-					delete go;
+					GmeObject go(conn, mydn);
+					go.RemoveHelperConnections();
 
 					conn->DestroyObject();
 				}//for i pvect
@@ -1025,11 +981,13 @@
 					IMgaSimpleConnectionPtr conn = static_cast<GmeObject *>(*i)->self;
 					if(reverse)
 					{
-						IMgaFCOPtr pref_ref = getPrefferedDstRef(conn, (GmeDataNetwork*)mydn);
+						SmartBSTR regName;
+						IMgaFCOPtr pref_ref = getPrefferedDstRef(conn, (GmeDataNetwork*)mydn, regName);
 						if (pref_ref)
 						{
 							IMgaFCOsPtr references = static_cast<GmeObject *>(*i)->FindReferencesToFCO(self, pref_ref);
 							COMTHROW(conn->SetDst(references, self));
+							self->RegistryNode[regName]->Clear();
 						}
 						else
 						{
@@ -1046,11 +1004,13 @@
 					}//if(reverse)
 					else 
 					{
-						IMgaFCOPtr pref_ref = getPrefferedSrcRef(conn, (GmeDataNetwork*)mydn);
+						SmartBSTR regName;
+						IMgaFCOPtr pref_ref = getPrefferedSrcRef(conn, (GmeDataNetwork*)mydn, regName);
 						if (pref_ref)
 						{
 							IMgaFCOsPtr references = static_cast<GmeObject *>(*i)->FindReferencesToFCO(self, pref_ref);
 							COMTHROW(conn->SetSrc(references, self));
+							self->RegistryNode[regName]->Clear();
 						}
 						else
 						{
@@ -1096,7 +1056,6 @@
 								throw udm_exception("Connection to reference port already exists, delete it first before changing the reference!");
 #endif
 							RpHelperAddToRegistry(self, connecting_object, rname, isNavigable);
-							RpHelperAddToRegistry(connecting_object, self, oname, oIsNavigable);
 						}
 					}
 					if (pvect.size())
@@ -1105,7 +1064,6 @@
 						{
                             IMgaFCOPtr connecting_object = static_cast<GmeObject *>(*i)->self;
 							RpHelperRemoveFromRegistry(self, connecting_object, rname);
-							RpHelperRemoveFromRegistry(connecting_object, self, oname);
 						}
 					};
 				}//if (nn->rp_helper)
@@ -1506,7 +1464,7 @@
 					IMgaFCOsPtr fcos = RpHelperFindPeerFCOsFromModel(self,
 						rname, meta.isNavigable(),
 						orole.name(), orole.isNavigable(),
-						(GmeDataNetwork *)mydn, true, false);
+						(GmeDataNetwork *)mydn, true);
 					MGACOLL_ITERATE(IMgaFCO, fcos)
 					{
 						ret.push_back(new GmeObject(MGACOLL_ITER, mydn));

Modified: UDM/trunk/tests/test_refports/RefPortsTest.cpp
==============================================================================
--- UDM/trunk/tests/test_refports/RefPortsTest.cpp	Wed Jun 27 15:56:21 2012	(r4049)
+++ UDM/trunk/tests/test_refports/RefPortsTest.cpp	Wed Jun 27 15:56:33 2012	(r4050)
@@ -97,15 +97,16 @@
 	CPPUNIT_ASSERT(ARef1::Cast(c.a_end__rp_container()) == aref1);
 	CPPUNIT_ASSERT(BRef::Cast(c.b_end__rp_container()) == bref);
 
-	ARef1 aref1_ = ARef1::Cast(c.a_end__rp_container());
-	std::set<C> conns = aref1_.a_end__rp_container_rev();
-	CPPUNIT_ASSERT_EQUAL((size_t)1, conns.size());
-	CPPUNIT_ASSERT_EQUAL(c, *conns.begin());
+	// we allow aref and bref.__rp_container_rev().size() == 0 before a_ and b_end_end are set
 
 	// connect src and dst
 	c.a_end_end() = a;
 	c.b_end_end() = b;
 	
+	ARef1 aref1_ = ARef1::Cast(c.a_end__rp_container());
+	std::set<C> conns = aref1_.a_end__rp_container_rev();
+	CPPUNIT_ASSERT_EQUAL((size_t)1, conns.size());
+	CPPUNIT_ASSERT_EQUAL(c, *conns.begin());
 
 #if 0
 	// what should happen when the reference port is connected and the
@@ -170,7 +171,9 @@
 	c.a_end_chain().disconnect();
 	CPPUNIT_ASSERT(A::Cast(c.a_end_end()) == Udm::null);
 	CPPUNIT_ASSERT(APar::Cast(aref1.ref()) == apar);
-	CPPUNIT_ASSERT(ARef1::Cast(c.a_end__rp_container()) == aref1);
+	// We don't guarantee either assertions:
+	//CPPUNIT_ASSERT(ARef1::Cast(c.a_end__rp_container()) == aref1);
+	//CPPUNIT_ASSERT(ARef1::Cast(c.a_end__rp_container()) == Udm::null);
 	CPPUNIT_ASSERT(B::Cast(c.b_end_end()) == b2);
 
 	// disconnect dst
@@ -178,7 +181,9 @@
 	CPPUNIT_ASSERT(B::Cast(c.b_end_end()) == Udm::null);
 	CPPUNIT_ASSERT(BPar::Cast(bref2.ref()) == bpar2);
 	CPPUNIT_ASSERT(BRef::Cast(bref3.ref()) == bref2);
-	CPPUNIT_ASSERT(BRef::Cast(c.b_end__rp_container()) == bref3);
+	// We don't guarantee either assertions:
+	//CPPUNIT_ASSERT(BRef::Cast(c.b_end__rp_container()) == bref3);
+	//CPPUNIT_ASSERT(BRef::Cast(c.b_end__rp_container()) == Udm::null);
 
 
 	c.a_end_end() = a;


More information about the Mobies-commit mailing list