[GME-commit] GMESRC/GME/Mga MgaLibOps.cpp,1.10,1.11

gme-commit at list.isis.vanderbilt.edu gme-commit at list.isis.vanderbilt.edu
Fri Jul 21 20:44:24 CDT 2006


Update of /project/gme-repository/GMESRC/GME/Mga
In directory escher:/tmp/cvs-serv9972

Modified Files:
	MgaLibOps.cpp 
Log Message:
Allowing SubLanguages mga files as libraries, in case of Language Composition.


CVS User: Zoltan Molnar, ISIS (zolmol)

Index: MgaLibOps.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Mga/MgaLibOps.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** MgaLibOps.cpp	22 May 2006 17:11:07 -0000	1.10
--- MgaLibOps.cpp	21 Jul 2006 19:44:22 -0000	1.11
***************
*** 7,11 ****
  #include "MgaLibOps.h" // by ZolMol
  #include "MgaLibRefr.h"
! 
  
  HRESULT FCO::get_LibraryName(BSTR *libname) {
--- 7,11 ----
  #include "MgaLibOps.h" // by ZolMol
  #include "MgaLibRefr.h"
! #include "../interfaces/Parser.h"
  
  HRESULT FCO::get_LibraryName(BSTR *libname) {
***************
*** 182,192 ****
  
  		// ask some info about the project to be attached
  		long mga_ver( 0);
  		{
! 			CComBSTR par_nm;     // not used now
  			CComBSTR par_vs;     // not used now
  			CComVariant par_gd;  // not used now
  			VARIANT_BOOL ro_mode;// not used now 
  			COMTHROW(p->QueryProjectInfo( connstr, &mga_ver, &par_nm, &par_vs, &par_gd, &ro_mode));
  		}
  
--- 182,246 ----
  
  		// ask some info about the project to be attached
+ 		bool upgraded = false; CComBSTR connstr_upgraded( "MGA=");
  		long mga_ver( 0);
  		{
! 			CComBSTR par_nm;
  			CComBSTR par_vs;     // not used now
  			CComVariant par_gd;  // not used now
  			VARIANT_BOOL ro_mode;// not used now 
  			COMTHROW(p->QueryProjectInfo( connstr, &mga_ver, &par_nm, &par_vs, &par_gd, &ro_mode));
+ 			if( par_nm != paradigmname)
+ 			{
+ 				// must upgrade 'connstr' project into 'paradigmname' paradigm
+ 				VARIANT_BOOL ro = VARIANT_TRUE;
+ 				HRESULT hr = p->Open( connstr, &ro);
+ 				if( FAILED( hr)) {
+ 					Reporter( mgaproject).show( CComBSTR( "Could not open the to-be-library project."));
+ 					return;
+ 				}
+ 
+ 				// Find TEMP directory
+ 				TCHAR szTempPath[MAX_PATH];
+ 				if (::GetTempPath(MAX_PATH, szTempPath) == 0) {
+ 					Reporter( mgaproject).show( CComBSTR( "Could not find TEMP directory."));
+ 					return;
+ 				}
+ 
+ 				// Create temporary filenames 
+ 				TCHAR szTempXmeFileName[MAX_PATH];
+ 				TCHAR szTempMgaFileName[MAX_PATH];
+ 				if( ::GetTempFileName(szTempPath, _T("GME"), 0, szTempXmeFileName) == 0  // 0 means ERROR
+ 				 || ::GetTempFileName(szTempPath, _T("GME"), 0, szTempMgaFileName) == 0) {
+ 					ASSERT(("Unable to get temporary filename.", false));
+ 					Reporter( mgaproject).show( CComBSTR( "Could not get temporary filename."));
+ 					return;
+ 				}
+ 
+ 				// Dump the to-be-library into XML
+ 				CComPtr<IMgaDumper> dumper;
+ 				COMTHROW( dumper.CoCreateInstance(L"Mga.MgaDumper") );
+ 				ASSERT( dumper != NULL );
+ 
+ 				COMTHROW(dumper->put_FormatVersion(0));
+ 				COMTHROW(dumper->DumpProject( p, PutInBstr( szTempXmeFileName)) );
+ 
+ 				p->Close();
+ 
+ 				// Create a new 'paradigmname' project
+ 				connstr_upgraded.Append( szTempMgaFileName); // connection string prepared
+ 				hr = p->CreateEx( PutInBstr( connstr_upgraded), PutInBstr( paradigmname), paradigmGUID);
+ 				if( SUCCEEDED( hr)) {
+ 					CComPtr<IMgaParser> parser;
+ 					COMTHROW( parser.CoCreateInstance(L"Mga.MgaParser") );
+ 					ASSERT( parser != NULL );
+ 
+ 					COMTHROW(parser->ParseProject( p, PutInBstr( szTempXmeFileName)) );
+ 					p->Close();
+ 					upgraded = true;
+ 				}
+ 				else if(hr == E_MGA_PARADIGM_NOTREG || hr == E_MGA_PARADIGM_INVALID) {
+ 					ASSERT(0); // how come? these are similar to mgaproject's data
+ 				}
+ 			}
  		}
  
***************
*** 211,215 ****
  		}
  
! 		COMTHROW(p->OpenEx(connstr, paradigmname, paradigmGUID));
  		COMTHROW(p->BeginTransaction(NULL, TRANSACTION_READ_ONLY));
  		{
--- 265,270 ----
  		}
  
! 		COMTHROW(p->OpenEx( upgraded?connstr_upgraded:connstr, paradigmname, paradigmGUID));
! 
  		COMTHROW(p->BeginTransaction(NULL, TRANSACTION_READ_ONLY));
  		{



More information about the GME-commit mailing list