[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 ¶digmname, 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