[commit] r2477 - trunk/GME/MgaUtil

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Thu May 1 11:30:22 CDT 2014


Author: ksmyth
Date: Thu May  1 11:30:22 2014
New Revision: 2477

Log:
Add 'Check Files' button to Purge/Select that can remove registry entries that dont line up with the on-disk mtas

Modified:
   trunk/GME/MgaUtil/MetaPurgeDialog.cpp
   trunk/GME/MgaUtil/MetaPurgeDialog.h
   trunk/GME/MgaUtil/MgaUtil.rc
   trunk/GME/MgaUtil/resource.h

Modified: trunk/GME/MgaUtil/MetaPurgeDialog.cpp
==============================================================================
--- trunk/GME/MgaUtil/MetaPurgeDialog.cpp	Fri Apr 25 12:46:37 2014	(r2476)
+++ trunk/GME/MgaUtil/MetaPurgeDialog.cpp	Thu May  1 11:30:22 2014	(r2477)
@@ -4,6 +4,7 @@
 #include "stdafx.h"
 #include "mgautil.h"
 #include "MetaPurgeDialog.h"
+#include "atlsafe.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -14,6 +15,108 @@
 /////////////////////////////////////////////////////////////////////////////
 // CMetaPurgeDialog dialog
 
+int CheckParadigms(BSTR paradigm, bool remove_invalid_entries)
+{
+	int num_invalid = 0;
+	IMgaRegistrarPtr registrar;
+	COMTHROW(registrar.CreateInstance(__uuidof(MgaRegistrar)));
+	CComVariant vguids;
+	registrar->__QueryParadigmAllGUIDs(paradigm, PutOut(vguids), REGACCESS_BOTH);
+	if (vguids.vt != (VT_ARRAY | VT_BSTR))
+		throw E_INVALIDARG;
+	ATL::CComSafeArray<BSTR> guids(vguids.parray);
+
+	CComBstrObj currentguid;
+	{
+		CComBSTR dummy;
+		CComVariant vv;
+		registrar->__QueryParadigm(paradigm, &dummy, &vv, REGACCESS_PRIORITY);
+		GUID guid;
+		CopyTo(vv, guid);
+		CopyTo(guid, currentguid);
+	}
+
+	for (int i = guids.GetLowerBound(); i <= guids.GetUpperBound(); ++i)	{
+		GUID gg;
+		CopyTo(guids[i], gg);
+		CComVariant vRegGuid;
+		CopyTo(gg, vRegGuid);
+
+		_bstr_t connstr;
+		_bstr_t version;
+		TCHAR statc = 'u';
+		HRESULT hr = registrar->QueryParadigm(paradigm, connstr.GetAddress(), &vRegGuid, REGACCESS_USER);
+		if(hr == E_NOTFOUND) {
+			statc = 's';
+			hr = registrar->QueryParadigm(paradigm, connstr.GetAddress(), &vRegGuid, REGACCESS_SYSTEM);
+		} 
+		if(hr != S_OK) {
+			statc = ' ';
+			connstr = _T("<<error reading this reg.entry>>");
+		}
+
+		hr = registrar->VersionFromGUID(paradigm, vRegGuid, version.GetAddress(), statc ==  'u' ? REGACCESS_USER : REGACCESS_SYSTEM);
+		if (FAILED(hr)) {
+			version = _T("N/A");
+		}
+
+		bool valid = false;
+		IMgaMetaProjectPtr project;
+		COMTHROW(project.CreateInstance(__uuidof(MgaMetaProject)));
+		try
+		{
+			project->__Open(connstr);
+			try
+			{
+				if (project->Version != version)
+					throw _com_error(E_PROJECT_MISMATCH);
+				_variant_t vFileGUID = project->GUID;
+				if (vFileGUID.vt != (VT_ARRAY | VT_UI1))
+					throw _com_error(E_PROJECT_MISMATCH);
+				ATL::CComSafeArray<BYTE> fileGUID(vFileGUID.parray);
+				if (fileGUID.GetCount() != sizeof(GUID))
+					throw _com_error(E_PROJECT_MISMATCH);
+				GUID gFileGUID;
+				CopyTo(vFileGUID, gFileGUID);
+				if (gFileGUID != gg)
+					throw _com_error(E_PROJECT_MISMATCH);
+				valid = true;
+			}
+			catch (_com_error&)
+			{
+				project->__Close();
+				throw;
+			}
+		}
+		catch (_com_error& e)
+		{
+		}
+		if (valid == false)
+		{
+			num_invalid++;
+			if (remove_invalid_entries)
+			{
+				registrar->UnregisterParadigmGUID(paradigm, vRegGuid, statc ==  'u' ? REGACCESS_USER : REGACCESS_SYSTEM);
+			}
+		}
+	}
+	return num_invalid;
+}
+
+void CMetaPurgeDialog::OnCheckFiles()
+{
+	int invalid = CheckParadigms(_bstr_t(paradigm), false);
+	if (invalid > 0)
+	{
+		wchar_t msg[256];
+		swprintf_s(msg, L"Found %d invalid registry entries. Do you want to remove them?", invalid);
+		if (IDYES == AfxMessageBox(msg, MB_YESNO))
+		{
+			CheckParadigms(_bstr_t(paradigm), true);
+			ResetItems();
+		}
+	}
+}
 
 CMetaPurgeDialog::CMetaPurgeDialog(CString &paradigmname,  IMgaRegistrar *reg, CWnd* pParent /*=NULL*/)
 	: CDialog(CMetaPurgeDialog::IDD, pParent), paradigm(paradigmname), registrar(reg)
@@ -39,6 +142,7 @@
 	ON_WM_CANCELMODE()
 	ON_BN_CLICKED(IDC_PURGE2, OnPurge)
 	ON_BN_CLICKED(IDC_SETCURRENT, OnSetcurrent)
+	ON_BN_CLICKED(IDC_CHECK_FILES, OnCheckFiles)
 	ON_BN_CLICKED(IDOK, OnOK)
 	ON_NOTIFY(LVN_COLUMNCLICK, IDC_PURGELIST, OnParadigmsHeader)
 	

Modified: trunk/GME/MgaUtil/MetaPurgeDialog.h
==============================================================================
--- trunk/GME/MgaUtil/MetaPurgeDialog.h	Fri Apr 25 12:46:37 2014	(r2476)
+++ trunk/GME/MgaUtil/MetaPurgeDialog.h	Thu May  1 11:30:22 2014	(r2477)
@@ -45,6 +45,7 @@
 	afx_msg void OnClose();
 	afx_msg void OnOK();
 	//}}AFX_MSG
+	void OnCheckFiles();
 	DECLARE_MESSAGE_MAP()
 private:
 	void ResetItems();

Modified: trunk/GME/MgaUtil/MgaUtil.rc
==============================================================================
--- trunk/GME/MgaUtil/MgaUtil.rc	Fri Apr 25 12:46:37 2014	(r2476)
+++ trunk/GME/MgaUtil/MgaUtil.rc	Thu May  1 11:30:22 2014	(r2477)
@@ -171,6 +171,7 @@
     LTEXT           "Select versions no longer needed. \nThe current version (*) cannot be purged.",IDC_STATIC,7,7,496,19
     CONTROL         "Delete files",IDC_DELFILES,"Button",BS_AUTORADIOBUTTON | WS_GROUP,521,62,51,10
     CONTROL         "Unregister\nonly",IDC_NODELFILES,"Button",BS_AUTORADIOBUTTON | BS_MULTILINE,522,76,50,21
+    PUSHBUTTON      "Check files",IDC_CHECK_FILES,521,108,50,14
 END
 
 IDD_REGISTRY_BROWSER DIALOGEX 0, 0, 406, 220

Modified: trunk/GME/MgaUtil/resource.h
==============================================================================
--- trunk/GME/MgaUtil/resource.h	Fri Apr 25 12:46:37 2014	(r2476)
+++ trunk/GME/MgaUtil/resource.h	Thu May  1 11:30:22 2014	(r2477)
@@ -208,6 +208,7 @@
 #define IDC_EDGESMOOTHMODE              2291
 #define IDC_EDIT_SHADOWDIRECTION        2292
 #define IDC_FONTSMOOTHMODE              2292
+#define IDC_CHECK_FILES                 2293
 #define ID_CNTX_ADDNODE                 32774
 #define ID_CNTX_CLEARNODE               32775
 #define ID_CNTX_REMOVETREE              32776
@@ -220,7 +221,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        2075
 #define _APS_NEXT_COMMAND_VALUE         32779
-#define _APS_NEXT_CONTROL_VALUE         2293
+#define _APS_NEXT_CONTROL_VALUE         2294
 #define _APS_NEXT_SYMED_VALUE           2091
 #endif
 #endif


More information about the gme-commit mailing list