[GME-commit] GMESRC/SDK/BON Builder.cpp, 1.27, 1.28 Builder.h, 1.15, 1.16

Log messages of CVS commits gme-commit at list.isis.vanderbilt.edu
Thu Mar 27 17:20:27 CDT 2008


Update of /project/gme-repository/GMESRC/SDK/BON
In directory escher:/tmp/cvs-serv17721

Modified Files:
	Builder.cpp Builder.h 
Log Message:
Cloning method (CloneHere) implemented.


CVS User: Zoltan Molnar, ISIS (zolmol)

Index: Builder.h
===================================================================
RCS file: /project/gme-repository/GMESRC/SDK/BON/Builder.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** Builder.h	13 Apr 2004 16:34:57 -0000	1.15
--- Builder.h	27 Mar 2008 22:20:25 -0000	1.16
***************
*** 396,399 ****
--- 396,401 ----
  	void GetAspectNames(CStringList &list);
  
+ 	CBuilderObject *CloneHere( CBuilderObject* orig);
+ 
  	CBuilderModel *CreateNewModel(CString partName, CBuilderModel* baseType = NULL, bool instance = true);
  	CBuilderAtom  *CreateNewAtom(CString patrName, CBuilderAtom* baseType = NULL, bool instance = true);

Index: Builder.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/SDK/BON/Builder.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** Builder.cpp	4 Jan 2006 16:42:37 -0000	1.27
--- Builder.cpp	27 Mar 2008 22:20:25 -0000	1.28
***************
*** 1929,1932 ****
--- 1929,2030 ----
  }
  
+ CBuilderObject *CBuilderModel::CloneHere( CBuilderObject* orig)
+ {
+ 	CComPtr<IMgaFCO>   src_obj = orig->GetIObject();
+ 	CComPtr<IMgaModel> par_obj = GetIModel();
+ 
+ 	CComPtr<IMgaFCOs>       fco_coll;  // ptr to a collection of IMgaFCO objects
+ 	CComPtr<IMgaMetaRoles>  rol_coll;  // same
+ 	fco_coll.CoCreateInstance( L"Mga.MgaFCOs");        // create an empty 'array' of MgaFCO objects
+ 	rol_coll.CoCreateInstance( L"Mga.MgaMetaRoles");   // same
+ 
+ 	// fco collection with 1 element
+ 	fco_coll->Append( src_obj);
+ 
+ 	CComPtr<IMgaMetaRole> role;
+ 	src_obj->get_MetaRole(&role);
+ 	
+ 	// role collection with 1 element
+ 	rol_coll->Append( role); // based on the assumption that the parent of src_obj is of same or similar kind to par_obj
+ 
+ 	CComPtr<IMgaFCOs> dst_coll;
+ 	par_obj->CopyFCOs( fco_coll, rol_coll, &dst_coll);
+ 
+ 	// analyze dst_coll
+ 	long l = 0;
+ 	if( dst_coll) dst_coll->get_Count( &l);
+ 
+ 	CBuilderObject *return_value = 0;
+ 	for( int i = 1; i <= l; ++i)
+ 	{
+ 		CComPtr<IMgaFCO> dst;
+ 		dst_coll->get_Item( i, &dst);
+ 
+ 		objtype_enum ot;
+ 		if( dst) dst->get_ObjType( &ot);
+ 		if( ot == OBJTYPE_ATOM)
+ 		{
+ 			CBuilderAtom* o = CBuilderFactory::Create(CComQIPtr<IMgaAtom>(dst), this);
+ 
+ 			children.AddTail(o);
+ 
+ 			CBuilderAtomList *objectlist;
+ 			VERIFY( atomLists.Lookup( o->GetPartName(), objectlist) );
+ 			objectlist->AddTail(o);
+ 
+ 			return_value = o;
+ 		}
+ 		else if( ot == OBJTYPE_MODEL)
+ 		{
+ 			CBuilderModel* o = CBuilderFactory::Create( CComQIPtr<IMgaModel>(dst), this);
+ 			o->Resolve();
+ 
+ 			children.AddTail(o);
+ 			models.AddTail(o);
+ 
+ 			CBuilderModelList *objectlist;
+ 			VERIFY( modelLists.Lookup( o->GetPartName(), objectlist) );
+ 			objectlist->AddTail(o);
+ 
+ 			return_value = o;
+ 		}
+ 		else if( ot == OBJTYPE_SET)
+ 		{
+ 			CBuilderSet* o = CBuilderFactory::Create( CComQIPtr<IMgaSet>(dst), this);
+ 
+ 			FindSets( o->GetPartName())->AddTail( o);
+ 			sets.AddTail(o);
+ 			children.AddTail(o);
+ 
+ 			return_value = o;
+ 		}
+ 		else if( ot == OBJTYPE_REFERENCE)
+ 		{
+ 			CBuilderReference* oo = CBuilderFactory::Create(CComQIPtr<IMgaReference>(dst), this);
+ 
+ 			CBuilderReferenceList *objectlist;
+ 			VERIFY( referenceLists.Lookup( oo->GetPartName(), objectlist) );
+ 			objectlist->AddTail(oo);
+ 
+ 			children.AddTail(oo);
+ 
+ 			if(oo->IsKindOf(RUNTIME_CLASS(CBuilderModelReference)) ) {
+ 					CBuilderModelReferenceList *mobjectlist;
+ 					VERIFY( modelReferenceLists.Lookup(oo->GetPartName(), mobjectlist) );
+ 					mobjectlist->AddTail((CBuilderModelReference *)oo);
+ 			}
+ 			else if(oo->IsKindOf(RUNTIME_CLASS(CBuilderAtomReference)) ) {
+ 					CBuilderAtomReferenceList *aobjectlist;
+ 					VERIFY( atomReferenceLists.Lookup(oo->GetPartName(), aobjectlist) );
+ 					aobjectlist->AddTail((CBuilderAtomReference *)oo);
+ 			}
+ 
+ 			return_value = oo;
+ 		}
+ 	}
+ 
+ 	return return_value;
+ }
+ 
  CBuilderModel *CBuilderModel::CreateNewModel(CString partName, CBuilderModel *baseType, bool instance)
  {



More information about the GME-commit mailing list