You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

451 lines
17 KiB
C++

// XTPCalendarDatabaseDataProvider.h: interface for
// the CXTPCalendarDatabaseDataProvider class.
//
// This file is a part of the XTREME CALENDAR MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
//{{AFX_CODEJOCK_PRIVATE
#if !defined(_XTPCALENDARDATABASEDATAPROVIDER_H__)
#define _XTPCALENDARDATABASEDATAPROVIDER_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CXTPCalendarSchedule;
class CXTPCalendarSchedules;
struct XTP_CALENDAR_RECURRENCE_OPTIONS;
XTP_DEFINE_SMART_PTR_INTERNAL(CXTPCalendarSchedules)
//===========================================================================
// Summary:
// This class is the implementation of the XTPCalendarData abstract
// class which represents the data portion of the Calendar control.
// Remarks:
// This implementation uses MS Access database as the data source.
// The Data source stores all Events data and provides a way to retrieve
// and save CXTPCalendarEvent objects.
//
// To use CXTPCalendarDatabaseDataProvider first construct an instance
// of CXTPCalendarDatabaseDataProvider object then use Open() member function
// to establish connection to the data source and initialize the object.
// Class provides a number of functions to manipulate events and events
// related data. After finished working with the data source must call
// the Close() member function to close the connection and to de-initialize
// the object and free any unused resources.
// See Also: CXTPCalendarData, CXTPCalendarMemoryDataProvider
//===========================================================================
class _XTP_EXT_CLASS CXTPCalendarDatabaseDataProvider : public CXTPCalendarData
{
//{{AFX_CODEJOCK_PRIVATE
class CADOCommand;
DECLARE_DYNAMIC(CXTPCalendarDatabaseDataProvider)
//}}AFX_CODEJOCK_PRIVATE
public:
//-----------------------------------------------------------------------
// Summary:
// Default constructor.
// Remarks:
// Constructs a Data object. To establish a connection to a
// specified data source and initialize the object the
// Open() member function must be called immediately after
// construction.
// See Also: Open()
//-----------------------------------------------------------------------
CXTPCalendarDatabaseDataProvider();
//-----------------------------------------------------------------------
// Summary:
// Default Destructor.
// Remarks:
// Handles all deallocation.
//-----------------------------------------------------------------------
virtual ~CXTPCalendarDatabaseDataProvider();
//-----------------------------------------------------------------------
// Summary:
// Call this member function to initialize a newly constructed
// Data object.
// Remarks:
// Data object must be created before you call Open.
// Returns:
// TRUE is successful. FALSE otherwise.
//-----------------------------------------------------------------------
virtual BOOL Open();
//-----------------------------------------------------------------------
// Summary:
// Call this member function to initialize data provider using existing
// ADO Connection object.
// Parameters:
// pdispADOConnection - [in] An IDispatch interface of ADO Connection.
// Remarks:
// Set Connection String as "Provider=ADO;" (or "Provider=Access;")
// Connection object must be opened before pass to OpenEx.
// Also calendar data provider do not close ADO Connection on Close method.
// You have to close it yourself.
// Returns:
// TRUE is successful. FALSE otherwise.
//-----------------------------------------------------------------------
virtual BOOL OpenEx(LPDISPATCH pdispADOConnection);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to create an empty database.
// Remarks:
// A database is created with the necessary tables structure.
// It is opened by default.
// Returns:
// TRUE is successful. FALSE otherwise.
//-----------------------------------------------------------------------
virtual BOOL Create();
//-----------------------------------------------------------------------
// Summary:
// This method saves data to the database.
// Remarks:
// Actually, this method just always returns TRUE for the
// database data provider. The reason is that database data provider
// always keep consistency of its data and could be closed without
// saving. The database file would contain the most recent data.
// Returns:
// TRUE is successful. FALSE otherwise.
//-----------------------------------------------------------------------
virtual BOOL Save();
//-----------------------------------------------------------------------
// Summary:
// Call this member function to close the connection to a data source.
//-----------------------------------------------------------------------
virtual void Close();
protected:
//-----------------------------------------------------------------------
// Summary:
// Retrieve day events for a specified day.
// Parameters:
// dtDay - A specified day.
// Remarks:
// This method creates and executes a database query on order to
// retrieve all appointments for a specified day.
// Returns:
// A collection of events for a specified day.
//-----------------------------------------------------------------------
virtual CXTPCalendarEventsPtr DoRetrieveDayEvents(COleDateTime dtDay);
//-----------------------------------------------------------------------
// Summary:
// Remove all events from the database.
// Remarks:
// This method creates and executes a database query which
// removes all appointments from the database.
//-----------------------------------------------------------------------
virtual void DoRemoveAllEvents();
//-----------------------------------------------------------------------
// Summary:
// Read event from the database.
// Parameters:
// dwEventID - Event ID of the read target.
// Remarks:
// This method creates and executes a database query which
// retrieves all data for a specified event.
// Returns:
// A pointer to the new CXTPCalendarEvent object which fields
// contains a data from the database.
//-----------------------------------------------------------------------
virtual CXTPCalendarEventPtr DoRead_Event(DWORD dwEventID);
//-----------------------------------------------------------------------
// Summary:
// Read recurrence pattern from the database
// Parameters:
// dwPatternID - Pattern ID of the read target.
// Remarks:
// This method creates and executes a database query which
// retrieves all data for a specified recurrence pattern.
// Returns:
// A pointer to the created CXTPCalendarRecurrencePattern object.
//-----------------------------------------------------------------------
virtual CXTPCalendarRecurrencePatternPtr DoRead_RPattern(DWORD dwPatternID);
//-----------------------------------------------------------------------
// Summary:
// Creates a new event in the database
// Parameters:
// pEvent - Pointer to the CXTPCalendarEvent object which describes
// all data fields of a newly created record.
// rdwNewEventID - [out] EventID of a newly created record,
// it is an auto-generated numeric events table key.
// Remarks:
// This method creates and executes a database query which
// adds a new record to the events table.
// Returns:
// TRUE if event created successfully,
// FALSE in case of any error during the process.
//-----------------------------------------------------------------------
virtual BOOL DoCreate_Event(CXTPCalendarEvent* pEvent, DWORD& rdwNewEventID);
//-----------------------------------------------------------------------
// Summary:
// Updates event properties in the database.
// Parameters:
// pEvent - Pointer to the CXTPCalendarEvent object which describes
// all data fields of an event.
// Remarks:
// This method creates and executes a database query which updates
// a corresponding database record with properties from the specified
// event.
// Returns:
// TRUE if an event updated successfully,
// FALSE in case of any errors during the process.
//-----------------------------------------------------------------------
virtual BOOL DoUpdate_Event(CXTPCalendarEvent* pEvent);
//-----------------------------------------------------------------------
// Summary:
// Deletes an event from the database.
// Parameters:
// pEvent - Pointer to the CXTPCalendarEvent object which describes
// all data fields of an event.
// Remarks:
// This method creates and executes a database query which deletes
// a corresponding database record.
// Returns:
// TRUE if an event deleted successfully,
// FALSE in case of any errors during the process.
//-----------------------------------------------------------------------
virtual BOOL DoDelete_Event(CXTPCalendarEvent* pEvent);
//-----------------------------------------------------------------------
// Summary:
// Creates a new recurrence pattern in the database
// Parameters:
// pPattern - Pointer to the CXTPCalendarRecurrencePattern object which
// describes all data fields of a newly created record.
// rdwNewPatternID - [out] ID of a newly created record,
// it is an auto-generated numeric table key.
// Remarks:
// This method creates and executes a database query which
// adds a new record to the recurrence patterns table.
// Returns:
// TRUE if recurrence pattern created successfully,
// FALSE in case of any error during the process.
//-----------------------------------------------------------------------
virtual BOOL DoCreate_RPattern(CXTPCalendarRecurrencePattern* pPattern, DWORD& rdwNewPatternID);
//-----------------------------------------------------------------------
// Summary:
// Updates a recurrence pattern in the database
// Parameters:
// pPattern - Pointer to the CXTPCalendarRecurrencePattern object.
// Remarks:
// This method creates and executes a database query which
// updates a corresponding record in the recurrence patterns table.
// Returns:
// TRUE if recurrence pattern updated successfully,
// FALSE in case of any error during the process.
//-----------------------------------------------------------------------
virtual BOOL DoUpdate_RPattern(CXTPCalendarRecurrencePattern* pPattern);
//-----------------------------------------------------------------------
// Summary:
// Deletes a recurrence pattern from the database
// Parameters:
// pPattern - Pointer to the CXTPCalendarRecurrencePattern object
// which should be deleted.
// Remarks:
// This method creates and executes a database query which
// deletes a corresponding record from the recurrence patterns table.
// Returns:
// TRUE if recurrence pattern deleted successfully,
// FALSE in case of any error during the process.
//-----------------------------------------------------------------------
virtual BOOL DoDelete_RPattern(CXTPCalendarRecurrencePattern* pPattern);
//-----------------------------------------------------------------------
// Summary:
// This method implements Getting all events from the database
// without generating recurrence occurrences.
// Remarks:
// Simple events are included as is.
// For the recurrence events only master events are included,
// recurrence occurrences are not generated.
// Returns:
// A CXTPCalendarEvents pointer containing a collection of
// all events.
// See Also: GetAllEvents_raw()
//-----------------------------------------------------------------------
virtual CXTPCalendarEventsPtr DoGetAllEvents_raw();
//-----------------------------------------------------------------------
// Summary:
// Retrieves a collection of events expiring in the period from
// dtFrom during next spPeriod.
// Parameters:
// dtFrom - Start date and time of a specified period.
// spPeriod - A duration of a specified period.
// Remarks:
// This method creates and executes a database query which
// returns a collection of upcoming events.
// It is used by a reminders manager.
// Returns:
// A CXTPCalendarEvents pointer containing a collection of
// upcoming events.
// See Also:
// CXTPCalendarRemindersManager overview
//-----------------------------------------------------------------------
virtual CXTPCalendarEventsPtr DoGetUpcomingEvents(COleDateTime dtFrom, COleDateTimeSpan spPeriod);
public:
//{{AFX_CODEJOCK_PRIVATE
static void AFX_CDECL TRACE_ProviderError(XTPADODB::_Connection* pConnDB);
static void AFX_CDECL TRACE_ComError(_com_error &e);
//}}AFX_CODEJOCK_PRIVATE
private:
virtual CXTPCalendarEventPtr _ReadEvent_common(XTPADODB::_Recordset* pRS, BOOL bEcxception);
virtual BOOL _ReadRExceptions(CXTPCalendarRecurrencePattern* pPattern);
virtual BOOL _GetRPatternOptions(XTPADODB::_Recordset* pRS, XTP_CALENDAR_RECURRENCE_OPTIONS* rROptions);
//-----------------------------------------------------------------------
// Summary:
// This member function is used to update options data in the database.
// Parameters:
// strOptionsData - Options data in XML format.
// Returns:
// TRUE if successful. Otherwise FALSE.
// See Also: LoadOptions
//-----------------------------------------------------------------------
virtual BOOL SaveOptions(const CString& strOptionsData);
//-----------------------------------------------------------------------
// Summary:
// This member function is used to load options data from the database.
// Returns:
// TRUE if successful. Otherwise FALSE.
// See Also: SaveOptions
//-----------------------------------------------------------------------
virtual BOOL LoadOptions();
virtual CXTPCalendarSchedulesPtr LoadSchedules();
virtual void UpdateSchedules();
virtual void _AddSchedules(CXTPCalendarSchedules* pAddSet);
virtual void _UpdateSchedules(CXTPCalendarSchedules* pUpdateSet, CXTPCalendarSchedules* pOrigSet);
virtual void _DeleteSchedules(CUIntArray* pDeleteIDs);
virtual CXTPCalendarSchedule* _ReadSchedule(XTPADODB::_Recordset* pRS);
protected:
BOOL m_bTraceOptions; // Indicates whether there should be only one record
// in the options table, or every save should add the new one.
private:
//{{AFX_CODEJOCK_PRIVATE
BOOL _Open();
void CreateEventTable(XTPADOX::_CatalogPtr ptrCatalog);
void CreateRPatternTable(XTPADOX::_CatalogPtr ptrCatalog);
void CreateOptionsTable(XTPADOX::_CatalogPtr ptrCatalog);
void CreateSchedulesTable(XTPADOX::_CatalogPtr ptrCatalog);
BOOL IsTableExist(XTPADOX::_CatalogPtr ptrCatalog, LPCWSTR pwszTableName);
//void CreateDicTable(XTPADOX::_CatalogPtr ptrCatalog, LPCWSTR strTable,
// LPCWSTR strNameID, bool bAuto = true);
BOOL UpdateDBStructure(XTPADODB::_Connection* pconnDb);
//}}AFX_CODEJOCK_PRIVATE
//{{AFX_CODEJOCK_PRIVATE
// members
XTPADODB::_ConnectionPtr m_pconnDb;
BOOL m_bCloseDbConnection;
CADOCommand* m_pcmdGetLastID;
CADOCommand* m_pcmdAddEvent;
CADOCommand* m_pcmdDelEvent;
CADOCommand* m_pcmdUpdEvent;
CADOCommand* m_pcmdGetDayEvents;
CADOCommand* m_pcmdGetRExceptions;
CADOCommand* m_pcmdGetEvent;
CADOCommand* m_pcmdUpdEventPatternID;
CADOCommand* m_pcmdAddRPattern;
CADOCommand* m_pcmdDelRPattern;
CADOCommand* m_pcmdUpdRPattern;
CADOCommand* m_pcmdGetRPattern;
CADOCommand* m_pcmdRemoveAllEvents;
CADOCommand* m_pcmdRemoveAllRPatterns;
CADOCommand* m_pcmdRemoveAllOptions;
CADOCommand* m_pcmdGetOptions;
CADOCommand* m_pcmdAddOptions;
CADOCommand* m_pcmdAddSchedule;
CADOCommand* m_pcmdUpdSchedule;
//}}AFX_CODEJOCK_PRIVATE
private:
// internal only used member functions
//{{AFX_CODEJOCK_PRIVATE
virtual BOOL _SetRPatternOptions(CADOCommand* pCmd, CXTPCalendarRecurrencePattern* pPattern);
void DeleteAllDBCommands();
void CreateGetLastIDCommand();
void CreateAddEventCommand();
void CreateDelEventCommand();
void CreateUpdEventCommand();
void CreateGetDayEventCommand();
void CreateAddRPatternCommand();
void CreateDelRPatternCommand();
void CreateUpdRPatternCommand();
void CreateGetRPatternCommand();
void CreateGetRExceptionsCommand();
void CreateGetEventCommand();
void CreateUpdEventPatternIDCommand();
void CreateRemoveAllCommands();
void CreateGetOptionsCommand();
void CreateAddOptionsCommand();
void CreateAddScheduleCommand();
void CreateUpdScheduleCommand();
//}}AFX_CODEJOCK_PRIVATE
};
#endif // !defined(_XTPCALENDARDATABASEDATAPROVIDER_H__)