[GME-commit] GMESRC/GME/Mga MgaProject.cpp,1.54,1.55 MgaProject.h,1.25,1.26

gme-commit at list.isis.vanderbilt.edu gme-commit at list.isis.vanderbilt.edu
Tue Jul 20 12:01:42 CDT 2004


Update of /var/lib/gme/GMESRC/GME/Mga
In directory braindrain:/tmp/cvs-serv9303/GME/Mga

Modified Files:
	MgaProject.cpp MgaProject.h 
Log Message:
Version based paradigm registration

CVS User: volgy

Index: MgaProject.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Mga/MgaProject.cpp,v
retrieving revision 1.54
retrieving revision 1.55
diff -C2 -d -r1.54 -r1.55
*** MgaProject.cpp	20 Jul 2004 10:48:30 -0000	1.54
--- MgaProject.cpp	20 Jul 2004 16:01:39 -0000	1.55
***************
*** 89,92 ****
--- 89,93 ----
  // check if meta is valid
  			CoreObj  dataroot, rootfolder;
+ 			CComBSTR parversion;
  
  // set values in 			
***************
*** 95,98 ****
--- 96,101 ----
  			dataroot[ATTRID_PARADIGM] = paradigmname;
  			dataroot[ATTRID_MGAVERSION] = mgaversion;
+ 			COMTHROW(metapr->get_Version(&parversion));
+ 			dataroot[ATTRID_PARVERSION] = parversion;
  			dataroot[ATTRID_NAME]    = rootname;
  			if( guid.vt != (VT_UI1 | VT_ARRAY) || GetArrayLength(guid) != sizeof(GUID) )
***************
*** 145,148 ****
--- 148,164 ----
  }
  
+ 
+ STDMETHODIMP CMgaProject::OpenParadigm(BSTR s, BSTR ver) {
+ 	COMTRY {
+ 		CComVariant vguid;
+ 		{
+ 			CComPtr<IMgaRegistrar> mgareg;
+ 			COMTHROW(mgareg.CoCreateInstance(OLESTR("MGA.MgaRegistrar")));
+ 			COMTHROW(EDEF(mgareg->GUIDFromVersion(s, ver, &vguid, REGACCESS_PRIORITY), E_MGA_PARADIGM_NOTREG));
+ 		}
+ 		COMTHROW(OpenParadigm(s,&vguid));
+ 	} COMCATCH(;);
+ }
+ 
  STDMETHODIMP CMgaProject::CreateEx(BSTR projectname, BSTR paradigmname, VARIANT paradigmGUID) {
  	COMTRY {
***************
*** 212,215 ****
--- 228,232 ----
  		CComBSTR s;
  		CComVariant pGUID;
+ 		CComBSTR ver;
  		CComPtr<ICoreMetaProject> genericproject;
  		CreateCoreMetaProject(genericproject);
***************
*** 234,237 ****
--- 251,255 ----
  
  			pGUID=CComVariant(dataroot[ATTRID_PARGUID]);
+ 			ver = dataroot[ATTRID_PARVERSION];
  			COMTHROW(lm->Flush());
  			COMTHROW(CommitTransaction());
***************
*** 246,257 ****
  
  		if(paradigmname) {
  			s = paradigmname;
  		}
  		if(paradigmGUID.vt != VT_EMPTY) {
  			if(CComVariant(true) == paradigmGUID) pGUID = NULLVARIANT;
  			else pGUID = paradigmGUID;
  		}
  		if(s.Length()) {
! 			COMTHROW(OpenParadigm(s, &pGUID));
  			bool guidchanged = false;
  			if(guidcmp(soldguid, pGUID)) {
--- 264,285 ----
  
  		if(paradigmname) {
+ 			ver.Empty();
  			s = paradigmname;
  		}
  		if(paradigmGUID.vt != VT_EMPTY) {
+ 			ver.Empty();
  			if(CComVariant(true) == paradigmGUID) pGUID = NULLVARIANT;
  			else pGUID = paradigmGUID;
  		}
  		if(s.Length()) {
! 			if (ver.Length()) {
! 				// Version string has precedence
! 				COMTHROW(OpenParadigm(s,ver));
! 				COMTHROW(metapr->get_GUID(&pGUID));
! 			}
! 			else {
! 				COMTHROW(OpenParadigm(s,&pGUID));
! 				COMTHROW(metapr->get_Version(&ver));
! 			}
  			bool guidchanged = false;
  			if(guidcmp(soldguid, pGUID)) {
***************
*** 277,280 ****
--- 305,309 ----
  					dataroot[ATTRID_PARADIGM] = s;
  					dataroot[ATTRID_PARGUID] = pGUID;
+ 					dataroot[ATTRID_PARVERSION] = ver;
  					COMTHROW(CommitTransaction());
  					opened = CHANGED;
***************
*** 319,322 ****
--- 348,352 ----
  		CComBSTR s;
  		CComVariant pGUID;
+ 		CComBSTR ver;
  		CComPtr<ICoreMetaProject> genericproject;
  		CreateCoreMetaProject(genericproject);
***************
*** 340,343 ****
--- 370,374 ----
  
  			pGUID=CComVariant(dataroot[ATTRID_PARGUID]);
+ 			ver=dataroot[ATTRID_PARVERSION];
  			COMTHROW(lm->Flush());
  			COMTHROW(CommitTransaction());
***************
*** 349,355 ****
  	
  		if(s.Length()) {
! 			COMTHROW(OpenParadigm(s,&pGUID));
  		}
  		else COMTHROW(E_MGA_MODULE_INCOMPATIBILITY);
  		COMTHROW(RegisterActiveObject((IMgaProject *)this,CLSID_MgaProject,ACTIVEOBJECT_STRONG,&rot));
  		StartAutoAddOns();
--- 380,410 ----
  	
  		if(s.Length()) {
! 			if (ver.Length()) {
! 				// Version string has precedence
! 				COMTHROW(OpenParadigm(s,ver));
! 			}
! 			else {
! 				COMTHROW(OpenParadigm(s,&pGUID));
! 			}
  		}
  		else COMTHROW(E_MGA_MODULE_INCOMPATIBILITY);
+ 
+ 		CComVariant nGUID;
+ 		COMTHROW(metapr->get_GUID(&nGUID));
+ 		if(guidcmp(pGUID, nGUID) && (*ro_mode == VARIANT_FALSE)) {
+ 			COMTHROW(BeginTransaction(lm, TRANSACTION_GENERAL));
+ 			try {
+ 				CoreObj  dataroot;
+ 				COMTHROW(dataproject->get_RootObject(&dataroot.ComPtr()));
+ 				dataroot[ATTRID_PARGUID] = nGUID;
+ 				COMTHROW(CommitTransaction());
+ 				opened = CHANGED;
+ 				guidstat = DIRTY;
+ 			} catch(hresult_exception &e) {
+ 				lm->Flush();
+ 				AbortTransaction();
+ 				throw e;
+ 			}
+ 		}
  		COMTHROW(RegisterActiveObject((IMgaProject *)this,CLSID_MgaProject,ACTIVEOBJECT_STRONG,&rot));
  		StartAutoAddOns();
***************
*** 379,382 ****
--- 434,438 ----
  STDMETHODIMP CMgaProject::QueryProjectInfo(BSTR projectname, long *mgaversion, 
  										   BSTR *paradigmname, 
+ 										   BSTR *parversion,
  										   VARIANT *paradigmGUID,
  										   VARIANT_BOOL *ro_mode)
***************
*** 387,390 ****
--- 443,447 ----
  		CHECK_OUTPAR(mgaversion);
  		CHECK_OUTSTRPAR(paradigmname);
+ 		CHECK_OUTSTRPAR(parversion);
  		CHECK_OUTPAR(paradigmGUID);
  		CHECK_OUTPAR(ro_mode);
***************
*** 406,409 ****
--- 463,467 ----
  			COMTHROW(dp->get_RootObject(&dataroot.ComPtr()));
  		    *paradigmname = CComBSTR(dataroot[ATTRID_PARADIGM]).Detach();
+ 		    *parversion = CComBSTR(dataroot[ATTRID_PARVERSION]).Detach();
  		    CComVariant(dataroot[ATTRID_PARGUID]).Detach(paradigmGUID);
  			*mgaversion = dataroot[ATTRID_MGAVERSION];

Index: MgaProject.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Mga/MgaProject.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** MgaProject.h	19 Jul 2004 08:42:30 -0000	1.25
--- MgaProject.h	20 Jul 2004 16:01:39 -0000	1.26
***************
*** 70,73 ****
--- 70,74 ----
  
  	STDMETHOD(OpenParadigm)(BSTR s, VARIANT *pGUID);
+ 	STDMETHOD(OpenParadigm)(BSTR s, BSTR ver);
  	STDMETHOD(Create)(BSTR projectname, BSTR paradigmname) { return CreateEx(projectname, paradigmname, NULLVARIANT); }
  	STDMETHOD(CreateEx)(BSTR projectname, BSTR paradigmname, VARIANT parguid);
***************
*** 147,150 ****
--- 148,152 ----
  	STDMETHOD(QueryProjectInfo)(BSTR projectname, long *mgaversion, 
  										   BSTR *paradigmname, 
+ 										   BSTR *parversion,
  										   VARIANT *paradigmGUID,
  										   VARIANT_BOOL *ro_mode);



More information about the GME-commit mailing list