[GME-commit] GMESRC/Tools/GMEMerge Merge.cpp,1.3,1.4
gme-commit at list.isis.vanderbilt.edu
gme-commit at list.isis.vanderbilt.edu
Fri Sep 22 20:36:38 CDT 2006
Update of /project/gme-repository/GMESRC/Tools/GMEMerge
In directory escher:/tmp/cvs-serv12589
Modified Files:
Merge.cpp
Log Message:
no message
CVS User: Gyorgy Balogh, ISIS (bogyom)
Index: Merge.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/Tools/GMEMerge/Merge.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Merge.cpp 16 Aug 2006 14:50:37 -0000 1.3
--- Merge.cpp 22 Sep 2006 19:36:36 -0000 1.4
***************
*** 14,20 ****
}
! void Merge::doMerge( IMgaProject * act_proj, IMgaProject * mergein_proj )
{
! try
{
long project_prefs_org;
--- 14,67 ----
}
! void Merge::test1()
{
! ObjMap act;
!
! addSubTreeToMap( CComPtr<IMgaObject>(act_root), act );
!
! ObjMap::iterator it = act.begin();
! while( it!=act.end() )
! {
! CComPtr<IMgaObject> o( it->second );
!
! int type = getType(o);
! if( type==OBJTYPE_MODEL || type==OBJTYPE_ATOM || type==OBJTYPE_REFERENCE ||
! type==OBJTYPE_CONNECTION || type==OBJTYPE_SET )
! {
! CComPtr<IMgaFCO> fco;
! COMTHROW( o->QueryInterface( &fco ) );
!
! CComPtr<IMgaFCO> type;
! VARIANT_BOOL instance;
! VARIANT_BOOL primary;
! GUID guid;
! GUID type_guid;
!
! guid = getGuid(o);
!
! COMTHROW( fco->get_DerivedFrom(&type));
! COMTHROW( fco->get_IsInstance(&instance));
! COMTHROW( fco->get_IsPrimaryDerived(&primary) );
!
! if( type.p != NULL && primary==VARIANT_TRUE )
! {
! type_guid = getGuid(CComPtr<IMgaObject>(type));
!
! COMTHROW( fco->DetachFromArcheType() );
! fco->AttachToArcheType( type, instance );
! }
!
! fco.Release();
! }
!
! o.Release();
!
! it++;
! }
! }
!
!
! void Merge::doMerge( IMgaProject * act_proj, IMgaProject * mergein_proj )
! { try
{
long project_prefs_org;
***************
*** 52,58 ****
}
catch(...)
! {
! COMTHROW(act_project->AbortTransaction());
! COMTHROW(mergein_project->AbortTransaction());
AfxMessageBox("Merge failed!");
}
--- 99,105 ----
}
catch(...)
! {
! act_project->AbortTransaction();
! mergein_project->AbortTransaction();
AfxMessageBox("Merge failed!");
}
***************
*** 94,97 ****
--- 141,147 ----
void Merge::doMerge()
{
+ //test1();
+ //return;
+
deleteObjects();
***************
*** 231,239 ****
CComPtr<IMgaFCO> fco;
CComPtr<IMgaFCO> type_fco;
COMTHROW( parent->QueryInterface( &fco ) );
COMTHROW( fco->get_DerivedFrom(&type_fco));
!
! if( type_fco.p != NULL )
{
GUID type_guid = getGuid(CComPtr<IMgaObject>(type_fco));
--- 281,291 ----
CComPtr<IMgaFCO> fco;
CComPtr<IMgaFCO> type_fco;
+ VARIANT_BOOL primary;
COMTHROW( parent->QueryInterface( &fco ) );
COMTHROW( fco->get_DerivedFrom(&type_fco));
! COMTHROW( fco->get_IsPrimaryDerived(&primary) );
!
! if( type_fco.p != NULL && primary )
{
GUID type_guid = getGuid(CComPtr<IMgaObject>(type_fco));
***************
*** 279,284 ****
CComPtr<IMgaFCO> type = findFCO(act_root,it->second.type);
! if( fco.p != NULL )
! COMTHROW( fco->AttachToArcheType( type, it->second.instance ) );
it++;
--- 331,381 ----
CComPtr<IMgaFCO> type = findFCO(act_root,it->second.type);
! GUID fco_g = it->first;
! GUID type_g = it->second.type;
!
! VARIANT_BOOL writeable;
!
! COMTHROW( fco->get_IsWritable( &writeable ) );
!
! if( fco.p != NULL && writeable )
! {
! //CComPtr<IMgaFCO> org_type;
! //COMTHROW( fco->get_DerivedFrom(&org_type));
!
! //COMTHROW( fco->DetachFromArcheType() );
! //COMTHROW( fco->AttachToArcheType( type, it->second.instance ) );
! try
! {
! fco->AttachToArcheType( type, it->second.instance );
! }
! catch(...)
! {
! }
!
! /*if( org_type.p != NULL )
! {
! GUID org_type_g = getGuid( CComPtr<IMgaObject>(org_type) );
! if( !IsEqualGUID( type_g, org_type_g ) )
! {
! COMTHROW( fco->AttachToArcheType( type, it->second.instance ) );
! }
! else
! COMTHROW( fco->AttachToArcheType( type, it->second.instance ) );
! }
! else
! COMTHROW( fco->AttachToArcheType( type, it->second.instance ) );*/
!
! /*// hack! AttachToArcheType sometimes throws an exception.
! try
! {
! COMTHROW( fco->AttachToArcheType( type, it->second.instance ) );
! }
! catch(...)
! {
! }*/
! }
!
! fco.Release();
! type.Release();
it++;
***************
*** 292,304 ****
{
CComPtr<IMgaFCO> fco = findFCO(act_root,it->first);
! CComPtr<IMgaFCO> reffered = findFCO(act_root,it->second);
if( fco.p != NULL )
{
! CComPtr<IMgaReference> ref;
! COMTHROW( fco->QueryInterface( &ref ) );
! ref->put_Referred( reffered );
}
it++;
--- 389,407 ----
{
CComPtr<IMgaFCO> fco = findFCO(act_root,it->first);
! CComPtr<IMgaFCO> reffered = findFCO(act_root,it->second);
if( fco.p != NULL )
{
! VARIANT_BOOL writeable;
! COMTHROW( fco->get_IsWritable( &writeable ) );
! if( writeable )
! {
! CComPtr<IMgaReference> ref;
! COMTHROW( fco->QueryInterface( &ref ) );
!
! ref->put_Referred( reffered );
! }
}
it++;
***************
*** 310,343 ****
ConnInfoMap::iterator it = conn_info.begin();
while( it!=conn_info.end() )
! {
! CComPtr<IMgaFCO> fco = findFCO(act_root,it->first);
if( fco.p != NULL )
{
CComPtr<IMgaConnection> conn;
! CComPtr<IMgaConnPoint> conn_point;
COMTHROW( fco->QueryInterface( &conn) );
! // check if all targets exist
! bool found_all = true;
! ConnPointVec::iterator it2 = it->second.begin();
! while( it2!=it->second.end() )
{
! CComPtr<IMgaFCO> target = findFCO(act_root,it2->target);
! if( target.p == NULL )
! {
! found_all = false;
! break;
! }
! else
{
! COMTHROW( conn->AddConnPoint(it2->role_name,0,target,NULL,&conn_point) );
! conn_point.Release();
}
- it2++;
- }
! if( !found_all )
! conn->DestroyObject();
}
it++;
--- 413,456 ----
ConnInfoMap::iterator it = conn_info.begin();
while( it!=conn_info.end() )
! {
! CComPtr<IMgaFCO> fco = findFCO(act_root,it->first);
if( fco.p != NULL )
{
CComPtr<IMgaConnection> conn;
! CComPtr<IMgaConnPoint> conn_point;
! VARIANT_BOOL writeable;
COMTHROW( fco->QueryInterface( &conn) );
+ COMTHROW( fco->get_IsWritable( &writeable ) );
! if( writeable )
{
! // check if all targets exist
! bool found_all = true;
! ConnPointVec::iterator it2 = it->second.begin();
! while( it2!=it->second.end() )
{
! CComPtr<IMgaFCO> target = findFCO(act_root,it2->target);
! if( target.p == NULL )
! {
! found_all = false;
! break;
! }
! else
! {
! //COMTHROW( conn->AddConnPoint(it2->role_name,0,target,NULL,&conn_point) );
! HRESULT hres = conn->AddConnPoint(it2->role_name,0,target,NULL,&conn_point);
! if( hres != S_OK )
! {
! printf("alma");
! }
! conn_point.Release();
! }
! it2++;
}
! if( !found_all )
! conn->DestroyObject();
! }
}
it++;
***************
*** 376,379 ****
--- 489,506 ----
}
+ bool Merge::shouldFollowLink( CComPtr<IMgaFCO> fco )
+ {
+ VARIANT_BOOL primary_derived;
+ CComPtr<IMgaFCO> derived_from;
+
+ //VARIANT_BOOL instance;
+ //COMTHROW( act->get_IsInstance(&instance) );
+
+ COMTHROW( fco->get_IsPrimaryDerived(&primary_derived) );
+ COMTHROW( fco->get_DerivedFrom(&derived_from) );
+
+ return (derived_from.p == NULL || primary_derived == VARIANT_TRUE );
+ }
+
void Merge::mergeFolders( CComPtr<IMgaFolder> act, CComPtr<IMgaFolder> mergein )
{
***************
*** 395,398 ****
--- 522,532 ----
act_fco = findFCOInChildren( act, guid );
+ if( !shouldFollowLink(mergein_fco) || (act_fco.p!=NULL && !shouldFollowLink(act_fco) ))
+ {
+ mergein_fco.Release();
+ act_fco.Release();
+ continue;
+ }
+
if( act_fco.p == NULL )
{
***************
*** 426,430 ****
CComPtr<IMgaFolders> mergein_subfolders;
CComPtr<IMgaFolder> mergein_folder;
! CComPtr<IMgaFCO> act_folder;
COMTHROW( mergein->get_ChildFolders(&mergein_subfolders) );
--- 560,564 ----
CComPtr<IMgaFolders> mergein_subfolders;
CComPtr<IMgaFolder> mergein_folder;
! CComPtr<IMgaFolder> act_folder;
COMTHROW( mergein->get_ChildFolders(&mergein_subfolders) );
***************
*** 445,454 ****
// create folder
! CComPtr<IMgaFolder> new_folder = copyFolder( mergein_folder, act );
!
! mergeFolders( new_folder, mergein_folder );
!
! COMTHROW( act_folder->QueryInterface(&new_folder) );
// TODO: copy registry!!
}
--- 579,586 ----
// create folder
! CComPtr<IMgaFolder> new_folder = copyFolder( mergein_folder, act );
+ COMTHROW( new_folder->QueryInterface(&act_folder) );
+
// TODO: copy registry!!
}
***************
*** 458,461 ****
--- 590,595 ----
}
+ mergeFolders( act_folder, mergein_folder );
+
act_folder.Release();
mergein_folder.Release();
***************
*** 470,473 ****
--- 604,610 ----
CComPtr<IMgaFCO> act_fco;
+ if( !shouldFollowLink(CComPtr<IMgaFCO>(act)) || !shouldFollowLink(CComPtr<IMgaFCO>(mergein)) )
+ return;
+
COMTHROW( mergein->get_ChildFCOs(&mergein_children) );
COMTHROW( mergein_children->get_Count(&n) );
***************
*** 475,479 ****
{
COMTHROW( mergein_children->get_Item(i,&mergein_fco) );
!
GUID guid = getGuid(CComPtr<IMgaObject>(mergein_fco));
int type = getType(CComPtr<IMgaObject>(mergein_fco));
--- 612,616 ----
{
COMTHROW( mergein_children->get_Item(i,&mergein_fco) );
!
GUID guid = getGuid(CComPtr<IMgaObject>(mergein_fco));
int type = getType(CComPtr<IMgaObject>(mergein_fco));
***************
*** 481,484 ****
--- 618,628 ----
act_fco = findFCOInChildren( act, guid );
+ if( !shouldFollowLink(mergein_fco) || (act_fco.p!=NULL && !shouldFollowLink(act_fco) ))
+ {
+ mergein_fco.Release();
+ act_fco.Release();
+ continue;
+ }
+
if( act_fco.p == NULL )
{
***************
*** 684,687 ****
--- 828,833 ----
CComPtr<IMgaAttribute> dest_attrib;
+ CComPtr<IMgaMetaAttribute> meta_attrib;
+
COMTHROW( src->get_Attributes(&src_attribs) );
COMTHROW( dest->get_Attributes(&dest_attribs) );
***************
*** 691,694 ****
--- 837,842 ----
COMTHROW( src_attribs->get_Item(i,&src_attrib) );
COMTHROW( dest_attribs->get_Item(i,&dest_attrib) );
+
+ COMTHROW( src_attrib->get_Meta( &meta_attrib ) );
CComVariant val;
***************
*** 698,701 ****
--- 846,850 ----
src_attrib.Release();
dest_attrib.Release();
+ meta_attrib.Release();
}
}
***************
*** 836,839 ****
--- 985,989 ----
COMTHROW( subfolders->get_Item(i,&folder) );
CComPtr<IMgaFCO> res = findFCO( folder, g );
+ folder.Release();
if( res.p != NULL )
return res;
***************
*** 916,919 ****
--- 1066,1071 ----
if( IsEqualGUID( getGuid(CComPtr<IMgaObject>(folder)), g ))
return folder;
+
+ folder.Release();
}
return CComPtr<IMgaFolder>();
More information about the GME-commit
mailing list