[GME-commit] GMESRC/GME/MgaUtil MetaDlg.cpp,1.13,1.14 MetaPurgeDialog.cpp,1.2,1.3 MgaRegistrar.cpp,1.35,1.36 MgaRegistrar.h,1.15,1.16 MgaUtil.rc,1.38,1.39

gme-commit at list.isis.vanderbilt.edu gme-commit at list.isis.vanderbilt.edu
Tue Jul 20 09:55:49 CDT 2004


Update of /var/lib/gme/GMESRC/GME/MgaUtil
In directory braindrain:/tmp/cvs-serv8866/GME/MgaUtil

Modified Files:
	MetaDlg.cpp MetaPurgeDialog.cpp MgaRegistrar.cpp 
	MgaRegistrar.h MgaUtil.rc 
Log Message:
Version string was introduced in the Registration process

CVS User: volgy

Index: MetaDlg.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/MgaUtil/MetaDlg.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** MetaDlg.cpp	25 Sep 2003 08:40:38 -0000	1.13
--- MetaDlg.cpp	20 Jul 2004 13:55:47 -0000	1.14
***************
*** 55,58 ****
--- 55,65 ----
  	CDialog::OnInitDialog();
  
+ 	CListCtrl* listctrl = (CListCtrl*)GetDlgItem(IDC_LIST);
+     DWORD dwStyle = listctrl->SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE,0,0);
+     dwStyle |= LVS_EX_FULLROWSELECT;
+     listctrl->SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
+ 
+ 
+ 
  	MSGTRY
  	{
***************
*** 69,73 ****
  			CComVariant dummy2;
  			CopyTo(dummy, &dummy2);
! 			if(registrar->RegisterParadigm(CComBSTR("AAA"), CComBSTR("AAA.MTA"), dummy2, REGACCESS_TEST) != S_OK) {
  				GetDlgItem(IDC_RADIOSYS)->EnableWindow(false);
  				GetDlgItem(IDC_RADIOUSER)->EnableWindow(false);
--- 76,80 ----
  			CComVariant dummy2;
  			CopyTo(dummy, &dummy2);
! 			if(registrar->RegisterParadigm(CComBSTR("AAA"), CComBSTR("AAA.MTA"), CComBSTR("1.0"), dummy2, REGACCESS_TEST) != S_OK) {
  				GetDlgItem(IDC_RADIOSYS)->EnableWindow(false);
  				GetDlgItem(IDC_RADIOUSER)->EnableWindow(false);
***************
*** 83,97 ****
  		VERIFYTHROW( m_list.InsertColumn(0, &lvc) != -1 );
  
! 		lvc.pszText = "";
! 		lvc.cx = 15;
  		VERIFYTHROW( m_list.InsertColumn(1, &lvc) != -1 );
  
  		lvc.pszText = "Connection string";
  		lvc.cx = 500;
! 		VERIFYTHROW( m_list.InsertColumn(2, &lvc) != -1 );
  
  		lvc.pszText = "GUID";
  		lvc.cx = 300;
! 		VERIFYTHROW( m_list.InsertColumn(3, &lvc) != -1 );
  
  		ResetItems();
--- 90,108 ----
  		VERIFYTHROW( m_list.InsertColumn(0, &lvc) != -1 );
  
! 		lvc.pszText = "S";
! 		lvc.cx = 20;
  		VERIFYTHROW( m_list.InsertColumn(1, &lvc) != -1 );
  
+ 		lvc.pszText = "Version";
+ 		lvc.cx = 50;
+ 		VERIFYTHROW( m_list.InsertColumn(2, &lvc) != -1 );
+ 
  		lvc.pszText = "Connection string";
  		lvc.cx = 500;
! 		VERIFYTHROW( m_list.InsertColumn(3, &lvc) != -1 );
  
  		lvc.pszText = "GUID";
  		lvc.cx = 300;
! 		VERIFYTHROW( m_list.InsertColumn(4, &lvc) != -1 );
  
  		ResetItems();
***************
*** 123,126 ****
--- 134,138 ----
  		CString name;
  		CString cstr;
+ 		CString version;
  		CComBstrObj guid2;
  
***************
*** 143,146 ****
--- 155,163 ----
  			CopyTo(guid, guid2);
  		}
+ 		
+ 		HRESULT hr = registrar->VersionFromGUID(paradigms[i], v, PutOut(version), mode ==  'u' ? REGACCESS_USER : REGACCESS_SYSTEM);
+ 		if (FAILED(hr)) {
+ 			version = "N/A";
+ 		}
  
  		int j = m_list.InsertItem(i, name);
***************
*** 148,155 ****
  		VERIFYTHROW( m_list.SetItemText(j, 1, mode) != 0 );
  
! 		VERIFYTHROW( m_list.SetItemText(j, 2, cstr) != 0 );
  
  
! 		VERIFYTHROW( m_list.SetItemText(j, 3, PutInCString(guid2)) != 0 );
  		if(name == to_select) m_list.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
  	}
--- 165,174 ----
  		VERIFYTHROW( m_list.SetItemText(j, 1, mode) != 0 );
  
! 		VERIFYTHROW( m_list.SetItemText(j, 2, version) != 0 );
! 
! 		VERIFYTHROW( m_list.SetItemText(j, 3, cstr) != 0 );
  
  
! 		VERIFYTHROW( m_list.SetItemText(j, 4, PutInCString(guid2)) != 0 );
  		if(name == to_select) m_list.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
  	}
***************
*** 292,295 ****
--- 311,317 ----
  			COMTHROW( paradigm->get_Name(PutOut(name)) );
  
+ 			CComBstrObj version;
+ 			COMTHROW( paradigm->get_Version(PutOut(version)) );
+ 
  			CComVariant guid;
  			COMTHROW( paradigm->get_GUID(PutOut(guid)) );
***************
*** 298,302 ****
  
  			ASSERT( registrar != NULL );
! 			COMTHROW( registrar->RegisterParadigm(name, PutInBstr(conn), guid, regacc_translate(m_accessmode)) );
  
  			to_select = PutInBstr(name);
--- 320,324 ----
  
  			ASSERT( registrar != NULL );
! 			COMTHROW( registrar->RegisterParadigm(name, PutInBstr(conn), PutInBstr(version), guid, regacc_translate(m_accessmode)) );
  
  			to_select = PutInBstr(name);
***************
*** 340,344 ****
  	{
  		int i = m_list.GetNextSelectedItem(pos);
! 		connstr = m_list.GetItemText(i, 2);
  		if(connstr[0] == '?') {
  			AfxMessageBox("Error with selected paradigm");
--- 362,366 ----
  	{
  		int i = m_list.GetNextSelectedItem(pos);
! 		connstr = m_list.GetItemText(i, 3);
  		if(connstr[0] == '?') {
  			AfxMessageBox("Error with selected paradigm");

Index: MetaPurgeDialog.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/MgaUtil/MetaPurgeDialog.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** MetaPurgeDialog.cpp	28 Mar 2001 18:56:00 -0000	1.2
--- MetaPurgeDialog.cpp	20 Jul 2004 13:55:47 -0000	1.3
***************
*** 53,56 ****
--- 53,62 ----
  	CDialog::OnInitDialog();
  
+ 	CListCtrl* listctrl = (CListCtrl*)GetDlgItem(IDC_PURGELIST);
+     DWORD dwStyle = listctrl->SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE,0,0);
+     dwStyle |= LVS_EX_FULLROWSELECT;
+     listctrl->SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
+ 
+ 
  	MSGTRY
  	{
***************
*** 60,75 ****
  		lvc.mask = LVCF_WIDTH | LVCF_TEXT;
  
! 		lvc.pszText = "Version ID";
! 		lvc.cx = 100;
  		VERIFYTHROW( m_list.InsertColumn(0, &lvc) != -1 );
  
! 		lvc.pszText = "C";
! 		lvc.cx = 20;
  		VERIFYTHROW( m_list.InsertColumn(1, &lvc) != -1 );
  
  
  		lvc.pszText = "Connection String";
  		lvc.cx = 300;
! 		VERIFYTHROW( m_list.InsertColumn(2, &lvc) != -1 );
  
  		ResetItems();
--- 66,85 ----
  		lvc.mask = LVCF_WIDTH | LVCF_TEXT;
  
! 		lvc.pszText = "S";
! 		lvc.cx = 20;
  		VERIFYTHROW( m_list.InsertColumn(0, &lvc) != -1 );
  
! 		lvc.pszText = "Version";
! 		lvc.cx = 50;
  		VERIFYTHROW( m_list.InsertColumn(1, &lvc) != -1 );
  
+ 		lvc.pszText = "GUID";
+ 		lvc.cx = 250;
+ 		VERIFYTHROW( m_list.InsertColumn(2, &lvc) != -1 );
+ 
  
  		lvc.pszText = "Connection String";
  		lvc.cx = 300;
! 		VERIFYTHROW( m_list.InsertColumn(3, &lvc) != -1 );
  
  		ResetItems();
***************
*** 120,123 ****
--- 130,134 ----
  
  		CString connstr;
+ 		CString version;
  		char statc = 'u';
  		HRESULT hr = registrar->QueryParadigm(CComBSTR(paradigm), PutOut(connstr), &vv, REGACCESS_USER);
***************
*** 125,129 ****
  			statc = 's';
  			hr = registrar->QueryParadigm(CComBSTR(paradigm), PutOut(connstr), &vv, REGACCESS_SYSTEM);
! 		}
  		if(hr != S_OK) {
  			statc = ' ';
--- 136,140 ----
  			statc = 's';
  			hr = registrar->QueryParadigm(CComBSTR(paradigm), PutOut(connstr), &vv, REGACCESS_SYSTEM);
! 		} 
  		if(hr != S_OK) {
  			statc = ' ';
***************
*** 131,139 ****
  		}
  
  		int j;
! 		VERIFYTHROW( (j = m_list.InsertItem(i, PutInCString(guidnames[i]))) != -1 );
! 		
! 		VERIFYTHROW( m_list.SetItemText(j, 1, CString(currentguid == guidnames[i] ? "*" : " ") + statc) != 0 );
! 		VERIFYTHROW( m_list.SetItemText(j, 2, connstr) != 0 );
  
  	}
--- 142,155 ----
  		}
  
+ 		hr = registrar->VersionFromGUID(CComBSTR(paradigm), vv, PutOut(version), statc ==  'u' ? REGACCESS_USER : REGACCESS_SYSTEM);
+ 		if (FAILED(hr)) {
+ 			version = "N/A";
+ 		}
+ 
  		int j;
! 		VERIFYTHROW( (j = m_list.InsertItem(i, CString(currentguid == guidnames[i] ? "*" : " ") + statc)) != -1 );
! 		VERIFYTHROW( m_list.SetItemText(j, 1, version) != 0 );
! 		VERIFYTHROW( m_list.SetItemText(j, 2, PutInCString(guidnames[i])) != 0 );
! 		VERIFYTHROW( m_list.SetItemText(j, 3, connstr) != 0 );
  
  	}
***************
*** 150,156 ****
  		while(pos) {
  			int i = m_list.GetNextSelectedItem(pos);
! 			CString cur = m_list.GetItemText(i,1);
  			if(cur[0] == '*') continue;
! 			CString delguid = m_list.GetItemText(i,0);
  			GUID gg;
  			CopyTo(CComBSTR(delguid),gg);
--- 166,172 ----
  		while(pos) {
  			int i = m_list.GetNextSelectedItem(pos);
! 			CString cur = m_list.GetItemText(i,0);
  			if(cur[0] == '*') continue;
! 			CString delguid = m_list.GetItemText(i,2);
  			GUID gg;
  			CopyTo(CComBSTR(delguid),gg);
***************
*** 158,162 ****
  			CopyTo(gg, vv);
  			COMTHROW( registrar->UnregisterParadigmGUID(CComBSTR(paradigm), vv, cur[1] == 's' ? REGACCESS_SYSTEM : REGACCESS_USER) );
! 			CString delcstr = m_list.GetItemText(i,2);
  			if(m_delfiles != 0 || delcstr.Find("MGA=") != 0) continue;
  			DeleteFile(LPCTSTR(delcstr)+4);
--- 174,178 ----
  			CopyTo(gg, vv);
  			COMTHROW( registrar->UnregisterParadigmGUID(CComBSTR(paradigm), vv, cur[1] == 's' ? REGACCESS_SYSTEM : REGACCESS_USER) );
! 			CString delcstr = m_list.GetItemText(i,3);
  			if(m_delfiles != 0 || delcstr.Find("MGA=") != 0) continue;
  			DeleteFile(LPCTSTR(delcstr)+4);
***************
*** 176,188 ****
  		if(pos) {
  			int i = m_list.GetNextSelectedItem(pos);
! 			CString cur = m_list.GetItemText(i,1);
  			if(cur[0] == '*') return;
! 			CString setguid = m_list.GetItemText(i,0);
  			GUID gg;
  			CopyTo(CComBSTR(setguid),gg);
  			CComVariant vv;
  			CopyTo(gg, vv);
! 			CString setcstr = m_list.GetItemText(i,2);
! 			COMTHROW( registrar->RegisterParadigm(CComBSTR(paradigm), CComBSTR(setcstr), vv, 
  				cur[1] == 's' ? REGACCESS_SYSTEM : REGACCESS_USER) );
  		}
--- 192,205 ----
  		if(pos) {
  			int i = m_list.GetNextSelectedItem(pos);
! 			CString cur = m_list.GetItemText(i,0);
  			if(cur[0] == '*') return;
! 			CString setver = m_list.GetItemText(i,1);
! 			CString setguid = m_list.GetItemText(i,2);
  			GUID gg;
  			CopyTo(CComBSTR(setguid),gg);
  			CComVariant vv;
  			CopyTo(gg, vv);
! 			CString setcstr = m_list.GetItemText(i,3);
! 			COMTHROW( registrar->RegisterParadigm(CComBSTR(paradigm), CComBSTR(setcstr), CComBSTR(setver), vv, 
  				cur[1] == 's' ? REGACCESS_SYSTEM : REGACCESS_USER) );
  		}

Index: MgaRegistrar.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/MgaUtil/MgaRegistrar.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -C2 -d -r1.35 -r1.36
*** MgaRegistrar.cpp	3 Mar 2004 18:37:06 -0000	1.35
--- MgaRegistrar.cpp	20 Jul 2004 13:55:47 -0000	1.36
***************
*** 557,561 ****
  
  
! HRESULT GetMtaInfo(BSTR conn, BSTR *parname, VARIANT *guid) {
  	COMTRY {
  		CComObjPtr<IMgaMetaProject> paradigm;
--- 557,561 ----
  
  
! HRESULT GetMtaInfo(BSTR conn, BSTR *parname, BSTR *version, VARIANT *guid) {
  	COMTRY {
  		CComObjPtr<IMgaMetaProject> paradigm;
***************
*** 567,570 ****
--- 567,572 ----
  		COMTHROW( paradigm->get_Name(parname) );
  
+ 		COMTHROW( paradigm->get_Version(version) );
+ 
  		COMTHROW( paradigm->get_GUID(guid) );
  
***************
*** 600,606 ****
  			  if(info & FILE_ATTRIBUTE_DIRECTORY) COMTHROW(E_FILEOPEN);
  			  try {
! 				CComBstrObj name;	// Format: name-<8digitcksum>
  				CComVariant prevguid;
! 				COMTHROW(GetMtaInfo(PutInBstr(conn), PutOut(name), PutOut(prevguid)));
  				CComBstrObj conn1;
  				if(QueryParadigm(name, PutOut(conn1), &prevguid, REGACCESS_PRIORITY) == S_OK &&
--- 602,609 ----
  			  if(info & FILE_ATTRIBUTE_DIRECTORY) COMTHROW(E_FILEOPEN);
  			  try {
! 				CComBstrObj name;	// Format: name-<GUID>
  				CComVariant prevguid;
! 				CComBstrObj prevversion;
! 				COMTHROW(GetMtaInfo(PutInBstr(conn), PutOut(name), PutOut(prevversion), PutOut(prevguid)));
  				CComBstrObj conn1;
  				if(QueryParadigm(name, PutOut(conn1), &prevguid, REGACCESS_PRIORITY) == S_OK &&
***************
*** 610,614 ****
  					CComBstrObj guidstr;
  					CopyTo(gg, guidstr);
! 					connrecent = conn.Left(conn.GetLength()-4)+"-"+CString(PutInCString(guidstr)).Mid(1,8)+".mta";
  
  					bool sysmove = false, usermove = false;
--- 613,617 ----
  					CComBstrObj guidstr;
  					CopyTo(gg, guidstr);
! 					connrecent = conn.Left(conn.GetLength()-4)+"-"+CString(PutInCString(guidstr))+".mta";
  
  					bool sysmove = false, usermove = false;
***************
*** 616,620 ****
  					if(QueryParadigm(name, PutOut(conn1), &prevguid, REGACCESS_SYSTEM) == S_OK &&
  						conn1 == CComBSTR(conn)) {  // if it was correctly registered in system
! 						if(RegisterParadigm(name, PutInBstr(connrecent), prevguid, REGACCESS_TEST) != S_OK) {
  							AfxMessageBox("Cannot register this paradigm file\n"
  										  "an existing '.mta' file with the same name\n"
--- 619,623 ----
  					if(QueryParadigm(name, PutOut(conn1), &prevguid, REGACCESS_SYSTEM) == S_OK &&
  						conn1 == CComBSTR(conn)) {  // if it was correctly registered in system
! 						if(RegisterParadigm(name, PutInBstr(connrecent), prevversion, prevguid, REGACCESS_TEST) != S_OK) {
  							AfxMessageBox("Cannot register this paradigm file\n"
  										  "an existing '.mta' file with the same name\n"
***************
*** 629,633 ****
  					conn1.Empty();
  					if(QueryParadigm(name, PutOut(conn1), &prevguid, REGACCESS_USER) == S_OK &&
! 						conn1 == CComBSTR(conn)) {  // if it was correctly registered in system
  						usermove = true;;
  					}
--- 632,636 ----
  					conn1.Empty();
  					if(QueryParadigm(name, PutOut(conn1), &prevguid, REGACCESS_USER) == S_OK &&
! 						conn1 == CComBSTR(conn)) {  // if it was correctly registered in user
  						usermove = true;;
  					}
***************
*** 638,645 ****
   
  					if(sysmove) {
! 						COMTHROW( RegisterParadigm( name, PutInBstr(connrecent), prevguid, REGACCESS_SYSTEM) );
  					}
  					if(usermove) {
! 						COMTHROW( RegisterParadigm( name, PutInBstr(connrecent), prevguid, REGACCESS_USER) );
  					}
  				}
--- 641,648 ----
   
  					if(sysmove) {
! 						COMTHROW( RegisterParadigm( name, PutInBstr(connrecent), prevversion, prevguid, REGACCESS_SYSTEM) );
  					}
  					if(usermove) {
! 						COMTHROW( RegisterParadigm( name, PutInBstr(connrecent), prevversion, prevguid, REGACCESS_USER) );
  					}
  				}
***************
*** 660,672 ****
  		CComBstrObj name;
  		CComVariant guid;
! 		COMTHROW(GetMtaInfo(PutInBstr(conn), PutOut(name), PutOut(guid)));
  		if(!connrecent.IsEmpty()) {
  			CComBstrObj namer;
  			CComVariant guidr;
! 			COMTHROW(GetMtaInfo(PutInBstr(connrecent), PutOut(namer), PutOut(guidr)));
  			// We should change existing registration only here, if the new GUID != the old
  		}
  
! 		COMTHROW(RegisterParadigm( name, PutInBstr(conn), guid, mode) );
  		if(newname) MoveTo(name, newname);
  	} COMCATCH(;)
--- 663,677 ----
  		CComBstrObj name;
  		CComVariant guid;
! 		CComBstrObj version;
! 		COMTHROW(GetMtaInfo(PutInBstr(conn), PutOut(name), PutOut(version), PutOut(guid)));
  		if(!connrecent.IsEmpty()) {
  			CComBstrObj namer;
  			CComVariant guidr;
! 			CComBstrObj versionr;
! 			COMTHROW(GetMtaInfo(PutInBstr(connrecent), PutOut(namer), PutOut(versionr), PutOut(guidr)));
  			// We should change existing registration only here, if the new GUID != the old
  		}
  
! 		COMTHROW(RegisterParadigm( name, PutInBstr(conn), PutInBstr(version), guid, mode) );
  		if(newname) MoveTo(name, newname);
  	} COMCATCH(;)
***************
*** 732,737 ****
  
  
! STDMETHODIMP CMgaRegistrar::RegisterParadigm(BSTR name, BSTR connstr, VARIANT guid, regaccessmode_enum mode)
  {
  	if( guid.vt != (VT_UI1 | VT_ARRAY) || GetArrayLength(guid) != sizeof(GUID) )
  	COMRETURN(E_INVALIDARG);
--- 737,745 ----
  
  
! STDMETHODIMP CMgaRegistrar::RegisterParadigm(BSTR name, BSTR connstr, BSTR version, VARIANT guid, regaccessmode_enum mode)
  {
+ 	USES_CONVERSION;
+ 	CString cver(OLE2CT(version)); 
+ 
  	if( guid.vt != (VT_UI1 | VT_ARRAY) || GetArrayLength(guid) != sizeof(GUID) )
  	COMRETURN(E_INVALIDARG);
***************
*** 757,760 ****
--- 765,771 ----
  
  			ERRTHROW( par.SetValue(PutInCString(guid3), "CurrentVersion") );
+ 			if (!cver.IsEmpty()) {
+ 				ERRTHROW( par.SetValue(PutInCString(guid3), cver) );
+ 			}
  			CRegKey parg;
  			ERRTHROW( parg.Create(par, PutInCString(guid3)) );
***************
*** 784,787 ****
--- 795,801 ----
  
  				ERRTHROW( par.SetValue(PutInCString(guid3), "CurrentVersion") );
+ 				if (!cver.IsEmpty()) {
+ 					ERRTHROW( par.SetValue(PutInCString(guid3), cver) );
+ 				}
  				CRegKey parg;
  				ERRTHROW( parg.Create(par, PutInCString(guid3)) );
***************
*** 950,953 ****
--- 964,1065 ----
  }
  
+ STDMETHODIMP CMgaRegistrar::VersionFromGUID(BSTR name, VARIANT guid, BSTR *ver, regaccessmode_enum mode)
+ {
+ 	CHECK_OUT(ver);
+ 
+ 	bool found = false;
+ 	COMTRY
+ 	{
+ 		GUID gg;
+ 		CopyTo(guid,gg);
+ 		CComBstrObj guidbstr;
+ 		CopyTo(gg, guidbstr);
+ 
+ 		if(mode & RM_USER) {
+ 			CRegKey par;
+ 			ERRTHROW( par.Open(HKEY_CURRENT_USER, rootreg + "\\Paradigms\\"+name) );
+ 			
+ 			for(int index = 0;; ++index) {
+ 				TCHAR name[512];
+ 				DWORD namesize = sizeof(name);
+ 				BYTE value[512];
+ 				DWORD valuesize = sizeof(value);
+ 				DWORD valtype;
+ 
+ 				LONG err = RegEnumValue(par, index, name, &namesize, NULL, &valtype, value, &valuesize);
+ 				if( err == ERROR_NO_MORE_ITEMS )
+ 					break;
+ 				ERRTHROW( err );
+ 				if (valtype == REG_SZ) {
+ 					CString cver(value);
+ 					if (cver.Compare(PutInCString(guidbstr)) == 0) {
+ 						CString namestr(name);
+ 						if (namestr.CompareNoCase("CurrentVersion") != 0) {
+ 							found = true;
+ 							CopyTo(namestr, ver);
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}
+ 		if(mode & (RM_SYSDOREAD)) {
+ 			CRegKey par;
+ 			ERRTHROW( par.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Paradigms\\"+name) );
+ 			for(int index = 0;; ++index) {
+ 				TCHAR name[512];
+ 				DWORD namesize = sizeof(name);
+ 				BYTE value[512];
+ 				DWORD valuesize = sizeof(value);
+ 				DWORD valtype;
+ 
+ 				LONG err = RegEnumValue(par, index, name, &namesize, NULL, &valtype, value, &valuesize);
+ 				if( err == ERROR_NO_MORE_ITEMS )
+ 					break;
+ 				ERRTHROW( err );
+ 				if (valtype == REG_SZ) {
+ 					CString cver(value);
+ 					if (cver.Compare(PutInCString(guidbstr)) == 0) {
+ 						CString namestr(name);
+ 						if (namestr.CompareNoCase("CurrentVersion") != 0) {
+ 							found = true;
+ 							CopyTo(namestr, ver);
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}
+ 		if(!found) return(E_NOTFOUND);
+ 	}
+ 	COMCATCH(;)
+ }
+ 
+ STDMETHODIMP CMgaRegistrar::GUIDFromVersion(BSTR name, BSTR ver, VARIANT* guid, regaccessmode_enum mode)
+ {
+ 	CHECK_OUT(guid);
+ 
+ 	CString verstr = PutInCString(ver);
+ 	CString gstr;
+ 
+ 	COMTRY
+ 	{
+ 		if(mode & RM_USER) {
+ 			CRegKey par;
+ 			ERRTHROW( par.Open(HKEY_CURRENT_USER, rootreg + "\\Paradigms\\"+name) );
+ 
+ 			gstr = QueryValue(par, verstr);
+ 		}
+ 		if(mode & (RM_SYSDOREAD)) {
+ 			CRegKey par;
+ 			ERRTHROW( par.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Paradigms\\"+name) );
+ 			gstr = QueryValue(par, verstr);
+ 		}
+ 		GUID g;
+ 		CopyTo(CComBSTR(gstr),g); 
+ 		CopyTo(g, guid);
+ 	}
+ 	COMCATCH(;)
+ }
+ 
+ 
  STDMETHODIMP CMgaRegistrar::UnregisterParadigmGUID(BSTR name, VARIANT v, regaccessmode_enum mode)
  {				// it cannot be unregistered if it is the current version
***************
*** 966,969 ****
--- 1078,1101 ----
  				COMTHROW(E_INVALID_USAGE);
  			}
+ 			
+ 			for(int index = 0;; ++index) {
+ 				TCHAR name[512];
+ 				DWORD namesize = sizeof(name);
+ 				BYTE value[512];
+ 				DWORD valuesize = sizeof(value);
+ 				DWORD valtype;
+ 
+ 				LONG err = RegEnumValue(par, index, name, &namesize, NULL, &valtype, value, &valuesize);
+ 				if( err == ERROR_NO_MORE_ITEMS )
+ 					break;
+ 				ERRTHROW( err );
+ 				if (valtype == REG_SZ) {
+ 					CString cver(value);
+ 					if (cver.Compare(PutInCString(guidbstr)) == 0) {
+ 						RegDeleteValue(par, name);
+ 					}
+ 				}
+ 			}
+ 
  			ERRTHROW( par.RecurseDeleteKey(PutInCString(guidbstr)) );
  		}
***************
*** 975,979 ****
  				COMTHROW(E_INVALID_USAGE);
  			}
! 			if(mode & RM_SYS) ERRTHROW( par.RecurseDeleteKey(PutInCString(guidbstr)) );
  			if(mode & RM_TEST) ERRTHROW( par.Open(par, PutInCString(guidbstr)) );
  		}
--- 1107,1131 ----
  				COMTHROW(E_INVALID_USAGE);
  			}
! 			if(mode & RM_SYS) {
! 				ERRTHROW( par.RecurseDeleteKey(PutInCString(guidbstr)) );
! 				for(int index = 0;; ++index) {
! 					TCHAR name[512];
! 					DWORD namesize = sizeof(name);
! 					BYTE value[512];
! 					DWORD valuesize = sizeof(value);
! 					DWORD valtype;
! 
! 					LONG err = RegEnumValue(par, index, name, &namesize, NULL, &valtype, value, &valuesize);
! 					if( err == ERROR_NO_MORE_ITEMS )
! 						break;
! 					ERRTHROW( err );
! 					if (valtype == REG_SZ) {
! 						CString cver(value);
! 						if (cver.Compare(PutInCString(guidbstr)) == 0) {
! 							RegDeleteValue(par, name);
! 						}
! 					}
! 				}
! 			}
  			if(mode & RM_TEST) ERRTHROW( par.Open(par, PutInCString(guidbstr)) );
  		}

Index: MgaRegistrar.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/MgaUtil/MgaRegistrar.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** MgaRegistrar.h	2 Mar 2004 21:51:28 -0000	1.15
--- MgaRegistrar.h	20 Jul 2004 13:55:47 -0000	1.16
***************
*** 48,52 ****
  	STDMETHOD(get_Paradigms)(regaccessmode_enum mode, VARIANT *names);
  	STDMETHOD(RegisterParadigmFromData)(BSTR connstr, BSTR *newname, regaccessmode_enum mode);
! 	STDMETHOD(RegisterParadigm)(BSTR name, BSTR connstr, VARIANT guid, regaccessmode_enum mode);
  	STDMETHOD(QueryParadigmAllGUIDs)(BSTR name, VARIANT *names, regaccessmode_enum mode);
  	STDMETHOD(QueryParadigm)(BSTR name, BSTR *connstr, VARIANT *quid, regaccessmode_enum mode);
--- 48,52 ----
  	STDMETHOD(get_Paradigms)(regaccessmode_enum mode, VARIANT *names);
  	STDMETHOD(RegisterParadigmFromData)(BSTR connstr, BSTR *newname, regaccessmode_enum mode);
! 	STDMETHOD(RegisterParadigm)(BSTR name, BSTR connstr, BSTR version, VARIANT guid, regaccessmode_enum mode);
  	STDMETHOD(QueryParadigmAllGUIDs)(BSTR name, VARIANT *names, regaccessmode_enum mode);
  	STDMETHOD(QueryParadigm)(BSTR name, BSTR *connstr, VARIANT *quid, regaccessmode_enum mode);
***************
*** 54,57 ****
--- 54,59 ----
  	STDMETHOD(UnregisterParadigmGUID)(BSTR name, VARIANT v, regaccessmode_enum mode);
  	STDMETHOD(UnregisterParadigm)(BSTR name, regaccessmode_enum mode);
+ 	STDMETHOD(VersionFromGUID)(BSTR name, VARIANT guid, BSTR *ver, regaccessmode_enum mode);
+ 	STDMETHOD(GUIDFromVersion)(BSTR name, BSTR ver, VARIANT* guid, regaccessmode_enum mode);
  
  	STDMETHOD(get_Components)(regaccessmode_enum mode, VARIANT *progids);

Index: MgaUtil.rc
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/MgaUtil/MgaUtil.rc,v
retrieving revision 1.38
retrieving revision 1.39
diff -C2 -d -r1.38 -r1.39
*** MgaUtil.rc	14 Jul 2004 19:30:15 -0000	1.38
--- MgaUtil.rc	20 Jul 2004 13:55:47 -0000	1.39
***************
*** 269,288 ****
  END
  
! IDD_METAPURGEDIALOG DIALOG DISCARDABLE  0, 0, 220, 181
  STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
  CAPTION "Dialog"
  FONT 8, "MS Sans Serif"
  BEGIN
!     DEFPUSHBUTTON   "Close",IDCLOSE,157,7,56,14
!     PUSHBUTTON      "Purge selected",IDC_PURGE2,157,24,56,14
      CONTROL         "List2",IDC_PURGELIST,"SysListView32",LVS_REPORT | 
!                     LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,146,167
      LTEXT           "Select versions no more needed. \nThe current version (*) cannot be purged.",
!                     IDC_STATIC,159,67,54,61
      CONTROL         "Delete files",IDC_DELFILES,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,156,134,51,10
      CONTROL         "Unregister\nonly",IDC_NODELFILES,"Button",
!                     BS_AUTORADIOBUTTON | BS_MULTILINE,156,143,50,21
!     PUSHBUTTON      "Set Current",IDC_SETCURRENT,157,41,56,14
  END
  
--- 269,288 ----
  END
  
! IDD_METAPURGEDIALOG DIALOG DISCARDABLE  0, 0, 371, 182
  STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
  CAPTION "Dialog"
  FONT 8, "MS Sans Serif"
  BEGIN
!     DEFPUSHBUTTON   "Close",IDCLOSE,308,7,56,14
!     PUSHBUTTON      "Purge selected",IDC_PURGE2,308,24,56,14
      CONTROL         "List2",IDC_PURGELIST,"SysListView32",LVS_REPORT | 
!                     LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,292,168
      LTEXT           "Select versions no more needed. \nThe current version (*) cannot be purged.",
!                     IDC_STATIC,310,67,54,61
      CONTROL         "Delete files",IDC_DELFILES,"Button",BS_AUTORADIOBUTTON | 
!                     WS_GROUP,307,132,51,10
      CONTROL         "Unregister\nonly",IDC_NODELFILES,"Button",
!                     BS_AUTORADIOBUTTON | BS_MULTILINE,307,141,50,21
!     PUSHBUTTON      "Set Current",IDC_SETCURRENT,308,41,56,14
  END
  
***************
*** 669,675 ****
      BEGIN
          LEFTMARGIN, 7
!         RIGHTMARGIN, 213
          TOPMARGIN, 7
!         BOTTOMMARGIN, 174
      END
  
--- 669,675 ----
      BEGIN
          LEFTMARGIN, 7
!         RIGHTMARGIN, 364
          TOPMARGIN, 7
!         BOTTOMMARGIN, 175
      END
  



More information about the GME-commit mailing list