234 lines
4.5 KiB
C++
234 lines
4.5 KiB
C++
|
// ScheduleEntry.cpp : Implementation of CScheduleEntry
|
||
|
#include "stdafx.h"
|
||
|
#include "ScheduleEntry.h"
|
||
|
#include "Property.h"
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CScheduleEntry
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CScheduleEntries
|
||
|
|
||
|
|
||
|
STDMETHODIMP CScheduleEntries::get_ItemWithServiceAtTime(IService *pservice, DATE dt, IScheduleEntry **ppschedentry)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
HRESULT hr;
|
||
|
ValidateInPtr<IService>(pservice);
|
||
|
ValidateOutPtr<IScheduleEntry>(ppschedentry, NULL);
|
||
|
|
||
|
CComPtr<IScheduleEntries> pschedentries;
|
||
|
hr = get_ItemsWithService(pservice, &pschedentries);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
long cItems;
|
||
|
hr = pschedentries->get_Count(&cItems);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
if (cItems == 0)
|
||
|
return E_INVALIDARG;
|
||
|
|
||
|
CComQIPtr<IObjects> pobjs(pschedentries);
|
||
|
CComPtr<IObjects> pobjs2;
|
||
|
hr = pobjs->get_ItemsInTimeRange(dt, dt, &pobjs2);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
hr = pobjs2->get_Count(&cItems);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
if (cItems == 0)
|
||
|
return E_INVALIDARG;
|
||
|
|
||
|
CComPtr<IUnknown> punk;
|
||
|
hr = pobjs2->get_Item(_variant_t(0L), &punk);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
return punk->QueryInterface(__uuidof(IScheduleEntry), (void **) ppschedentry);
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntries::get_ItemsWithService(IService *pservice, IScheduleEntries **ppschedentries)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
ValidateInPtr<IService>(pservice);
|
||
|
ValidateOutPtr<IScheduleEntries>(ppschedentries, NULL);
|
||
|
|
||
|
CComQIPtr<CObjects> pobjs(GetControllingUnknown());
|
||
|
CComPtr<IObjects> pobjsT;
|
||
|
HRESULT hr;
|
||
|
|
||
|
hr = pobjs->get_ItemsInverseRelatedToBy(pservice,
|
||
|
m_pdb->ScheduleEntryPropSet::ServiceMetaPropertyType(), &pobjsT);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
return pobjsT->QueryInterface(__uuidof(IScheduleEntries), (void **) ppschedentries);
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntries::get_AddNew(DATE dtStart, DATE dtEnd, IService *pservice, IProgram *pprog, IScheduleEntry **ppschedentry)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
ValidateInPtr<IService>(pservice);
|
||
|
ValidateOutPtr<IScheduleEntry>(ppschedentry, NULL);
|
||
|
|
||
|
HRESULT hr;
|
||
|
|
||
|
hr = _get_AddNew(ppschedentry);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
(*ppschedentry)->putref_Service(pservice);
|
||
|
(*ppschedentry)->putref_Program(pprog);
|
||
|
(*ppschedentry)->put_StartTime(dtStart);
|
||
|
(*ppschedentry)->put_EndTime(dtEnd);
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntry::get_Service(IService **ppservice)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
ValidateOutPtr<IService>(ppservice, NULL);
|
||
|
|
||
|
HRESULT hr;
|
||
|
if (m_pservice == NULL)
|
||
|
{
|
||
|
hr = _get_ItemRelatedBy(m_pdb->ScheduleEntryPropSet::ServiceMetaPropertyType(), (IService **) &m_pservice);
|
||
|
if (hr == S_FALSE || FAILED(hr))
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
m_pservice.CopyTo(ppservice);
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntry::putref_Service(IService *pservice)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
ValidateInPtr<IService>(pservice);
|
||
|
|
||
|
m_pservice = pservice;
|
||
|
return _put_ItemRelatedBy(m_pdb->ScheduleEntryPropSet::ServiceMetaPropertyType(),
|
||
|
(IService *) m_pservice);
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntry::get_Program(IProgram **ppprog)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
ValidateOutPtr<IProgram>(ppprog, NULL);
|
||
|
|
||
|
HRESULT hr;
|
||
|
if (m_pprog == NULL)
|
||
|
{
|
||
|
hr = _get_ItemRelatedBy(m_pdb->ScheduleEntryPropSet::ProgramMetaPropertyType(),
|
||
|
(IProgram **) &m_pprog);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
m_pprog.CopyTo(ppprog);
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntry::putref_Program(IProgram *pprog)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
ValidateInPtr<IProgram>(pprog);
|
||
|
|
||
|
m_pprog = pprog;
|
||
|
|
||
|
return _put_ItemRelatedBy(m_pdb->ScheduleEntryPropSet::ProgramMetaPropertyType(),
|
||
|
(IProgram *) m_pprog);
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntry::get_StartTime(DATE *pdtStart)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
ValidateOut<DATE>(pdtStart);
|
||
|
|
||
|
return m_pdb->_get_Start((IScheduleEntry *) this, pdtStart);
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntry::put_StartTime(DATE dtStart)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
return m_pdb->_put_Start((IScheduleEntry *) this, dtStart);
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntry::get_EndTime(DATE *pdtEnd)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
ValidateOut<DATE>(pdtEnd);
|
||
|
|
||
|
return m_pdb->_get_End((IScheduleEntry *) this, pdtEnd);
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntry::put_EndTime(DATE dtEnd)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
return m_pdb->_put_End((IScheduleEntry *) this, dtEnd);
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CScheduleEntry::get_Length(long *plSecs)
|
||
|
{
|
||
|
ENTER_API
|
||
|
{
|
||
|
ValidateOut<long>(plSecs, 0);
|
||
|
|
||
|
// UNDONE: Test
|
||
|
DATE dtStart;
|
||
|
DATE dtEnd;
|
||
|
HRESULT hr;
|
||
|
|
||
|
hr = get_StartTime(&dtStart);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
hr = get_EndTime(&dtEnd);
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
*plSecs = (long) ((dtEnd - dtStart)*86400.0); // 86400 = 24*60*60
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
LEAVE_API
|
||
|
}
|