[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