meetingrequest/mrentry/src/cesmrconflictchecker.cpp
branchRCL_3
changeset 12 4ce476e64c59
parent 11 0396474f30f5
child 13 8592a65ad3fb
--- a/meetingrequest/mrentry/src/cesmrconflictchecker.cpp	Mon Mar 15 12:39:10 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,430 +0,0 @@
-/*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-*  Description : ESMR conflict checker implementation
-*  Version     : %version: tr1sido#7 %
-*
-*/
-
-#include "emailtrace.h"
-#include "cesmrconflictchecker.h"
-#include "cesmrcaldbmgr.h"
-#include "esmrhelper.h"
-#include "esmrentryhelper.h"
-#include "esmrinternaluid.h"
-
-#include <calcommon.h>
-#include <calinstance.h>
-#include <calentryview.h>
-#include <calinstanceview.h>
-#include <ct/rcpointerarray.h>
-
-/// Unnamed namespace for local definitions
-namespace { // codescanner::namespace
-
-// Definition for zero
-const TInt KZero(0);
-
-/** Defines instace filter type */
-enum TInstanceFilter
-    {
-    EIncludeSameUID,
-    ERemoveSameUID
-    };
-
-#ifdef _DEBUG
-
-// Literal for panic texts
-_LIT( KESMRConflictCheckerTxt, "ESMRConflictChecker" );
-
-/** Enumeration for panic codes */
-enum TESMRConflictCheckerPanic
-    {
-    // Input entry is not appointment
-    EESMRConflictCheckerInvalidEntryType
-    };
-
-/**
- * Thows system wide panic.
- * @param aPanic Panic code.
- */
-void Panic( TESMRConflictCheckerPanic aPanic )
-    {
-
-    User::Panic( KESMRConflictCheckerTxt, aPanic );
-    }
-
-#else
-
-/**
- * Thows system wide leave.
- * @param aError Leave code.
- */
-void Leave( TInt aError )
-    {
-
-    User::Leave( aError );
-    }
-
-#endif
-
-/**
- * Resolves time range for possible conflicting entries. Instance view
- * is used for resolving the time range.
- *
- * @param aStart Start time
- * @param aEnd End time
- * @param aInstanceView Pointer to calendar db instance view
- * @return Time range for possible conflicting entries
- */
-CalCommon::TCalTimeRange ResolveFetchTimeRangeL(
-        TTime aStart,
-        TTime aEnd,
-        CCalInstanceView* aInstanceView )
-    {
-    FUNC_LOG;
-    const CalCommon::TCalViewFilter instanceFilter = 
-            CalCommon::EIncludeAppts;
-
-    TDateTime start = aStart.DateTime();
-    TDateTime end   = aEnd.DateTime();
-
-    start.SetHour( KZero );
-    start.SetMinute( KZero );
-    start.SetSecond( KZero );
-    start.SetMicroSecond( KZero );
-
-    end.SetHour( KZero );
-    end.SetMinute( KZero );
-    end.SetSecond( KZero );
-    end.SetMicroSecond( KZero );
-    TTime endTime = end;
-    
-    if ( TTime(start) == endTime || 
-         endTime < aEnd )
-        {
-        
-        endTime += TTimeIntervalDays(1);
-        end = endTime.DateTime();
-        }
-
-    TCalTime rangeStart;
-    rangeStart.SetTimeLocalL( start );
-
-    TCalTime instanceTime = aInstanceView->PreviousInstanceL(
-            instanceFilter,
-            rangeStart );
-
-    if (  Time::NullTTime() != instanceTime.TimeUtcL()  )
-        {
-        rangeStart = instanceTime;
-        }
-
-    TCalTime rangeEnd;
-    rangeEnd.SetTimeLocalL( end );
-
-    instanceTime = aInstanceView->NextInstanceL(
-            instanceFilter,
-            rangeEnd );
-
-    if ( instanceTime.TimeLocalL() != Time::NullTTime() )
-        {
-        rangeEnd = instanceTime;
-        }
-
-    return CalCommon::TCalTimeRange( rangeStart, rangeEnd );
-    }
-
-/**
- * Removes and deletes the entries, which do not confilct with
- * entry. Entry is considered to be conflicting entry if starts or
- * ends between aEntry's start and end time.
- *
- * @param aEntries Reference to entries, which may conflict
- * @param aEntry Reference to entry, which confilcts are resolved.
- */
-void RemoveAndDeleteNonConflictingInstancesL(
-    RPointerArray<CCalInstance>& instanceArray,    
-    // const CCalEntry& aEntry,
-    TCalTime aStartTime,
-    TCalTime aEndTime,
-    const TDesC8& aUid,
-    TInstanceFilter aFilterType )
-    {
-    FUNC_LOG;
-    TInt index(0);
-
-    TTime startTimeUtc = aStartTime.TimeUtcL();
-    TTime endTimeUtc = aEndTime.TimeUtcL();
-    
-    while( index < instanceArray.Count() )
-        {
-        TBool conflictingInstance( ETrue );
-        CCalInstance* instance = instanceArray[index];
-        
-        TTime entryStartTimeUtc = instance->StartTimeL().TimeUtcL();
-        TTime entryEndTimeUtc = instance->EndTimeL().TimeUtcL();            
-
-        TPtrC8 uid( instance->Entry().UidL() );
-        if ( ERemoveSameUID == aFilterType && 
-             0 == aUid.CompareF(uid) )
-            {
-            conflictingInstance = EFalse;
-            }
-        else if ( entryStartTimeUtc >= startTimeUtc &&
-                  entryStartTimeUtc < endTimeUtc )
-            {
-            // Entry starts during another entry
-            index++;
-            }
-        else if ( entryEndTimeUtc > startTimeUtc &&
-                entryEndTimeUtc <= endTimeUtc )
-            {
-            // Entry ends during another entry
-            index++;
-            }
-        else if ( entryStartTimeUtc > startTimeUtc &&
-                  entryEndTimeUtc < endTimeUtc )
-            {
-            // Antry starts and ends during another entry
-            index++;
-            }
-        else if ( entryStartTimeUtc < startTimeUtc &&
-                  entryEndTimeUtc > endTimeUtc )
-            {
-            // Antry starts and ends during another entry
-            index++;
-            }
-        else
-            {
-            conflictingInstance = EFalse;            
-            }
-        
-        // Remove non-conflicting instance from instance array
-        if ( !conflictingInstance )
-            {
-            instanceArray.Remove(index);
-            delete instance; 
-            instance = NULL;
-            }
-        }
-    }
-
-/**
- * Creates calendar entries from the conflicting instances
- * and stores the created entries into entry array.
- * Ownership of the created entries is transferred to caller.
- * @param aInstanceArray Reference to instance array
- * @param aConflictingEntries Reference to entry array.
- */
-void CreateEntriesFromInstancesL(
-        RPointerArray<CCalInstance>& instanceArray,
-        RPointerArray<CCalEntry>& aConflictingEntries )
-    {
-    FUNC_LOG;
-    TInt instanceCount( instanceArray.Count() );    
-    for ( TInt i(0); i < instanceCount; ++i )
-        {        
-        CCalEntry& parent( instanceArray[i]->Entry() );
-        CCalEntry* entry = ESMRHelper::CopyEntryLC( parent, 
-                                                    parent.MethodL(),
-                                                    ESMRHelper::ECopyFull );
-        
-        entry->SetStartAndEndTimeL( instanceArray[i]->StartTimeL(),
-                                    instanceArray[i]->EndTimeL() );
-
-        User::LeaveIfError( aConflictingEntries.Append( entry ) );
-        CleanupStack::Pop( entry );
-        }
-    }
-
-}  // namespace
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CESMRConflictChecker::CESMRConflictChecker
-// ---------------------------------------------------------------------------
-//
-inline CESMRConflictChecker::CESMRConflictChecker(
-        MESMRCalDbMgr& aDbMgr ) :
-        iDbMgr( aDbMgr )
-    {
-    FUNC_LOG;
-    // Not implementation yet
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRConflictChecker::~CESMRConflictChecker
-// ---------------------------------------------------------------------------
-//
-CESMRConflictChecker::~CESMRConflictChecker()
-    {
-    FUNC_LOG;
-    // Not implementation yet
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRConflictChecker::NewL
-// ---------------------------------------------------------------------------
-//
-CESMRConflictChecker* CESMRConflictChecker::NewL(
-        MESMRCalDbMgr& aDbMgr )
-    {
-    FUNC_LOG;
-    CESMRConflictChecker* self =
-            new (ELeave) CESMRConflictChecker(aDbMgr);
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRConflictChecker::FindConflictsL
-// ---------------------------------------------------------------------------
-//
-void CESMRConflictChecker::FindConflictsL(
-            const CCalEntry& aEntry,
-            RPointerArray<CCalEntry>& aConflicts )
-    {
-    FUNC_LOG;
-
-    // Checking input parameters
-#ifdef _DEBUG
-
-    __ASSERT_DEBUG(
-            CCalEntry::EAppt == aEntry.EntryTypeL(),
-            Panic(EESMRConflictCheckerInvalidEntryType) );
-
-#else
-
-    if ( CCalEntry::EAppt != aEntry.EntryTypeL() )
-        {
-        Leave( KErrArgument );
-        }
-
-#endif
-
-    CCalInstanceView* instanceView = iDbMgr.NormalDbInstanceView();
-    
-    CalCommon::TCalTimeRange timeRange =
-            ResolveFetchTimeRangeL( 
-                    aEntry.StartTimeL().TimeUtcL(),
-                    aEntry.EndTimeL().TimeUtcL(), 
-                    instanceView );
-
-    RCPointerArray<CCalInstance> instanceArray;
-    CleanupClosePushL( instanceArray );
-
-    instanceView->FindInstanceL( instanceArray,
-                                 CalCommon::EIncludeAppts,
-                                 timeRange );
-
-    RemoveAndDeleteNonConflictingInstancesL(
-            instanceArray,
-            aEntry.StartTimeL(),
-            aEntry.EndTimeL(),
-            aEntry.UidL(),
-            ERemoveSameUID );
-
-    CreateEntriesFromInstancesL( instanceArray, aConflicts );
-    
-    CleanupStack::PopAndDestroy(); // instanceArray
-    
-    }
-
-// ---------------------------------------------------------------------------
-// CESMRConflictChecker::FindInstancesForEntry
-// ---------------------------------------------------------------------------
-//
-void CESMRConflictChecker::FindInstancesForEntryL(
-        TTime aStart, 
-        TTime aEnd,
-        const CCalEntry& aEntry,
-        RPointerArray<CCalEntry>& aInstances )
-    {
-    FUNC_LOG;
-    TDateTime startDt = aStart.DateTime();
-    startDt.SetHour( KZero );
-    startDt.SetMinute( KZero );
-    startDt.SetSecond( KZero );
-    
-    TDateTime endDt = aEnd.DateTime();
-    endDt.SetHour( KMaxHoursInDay );
-    endDt.SetMinute( KMaxMinutesInHour );
-    endDt.SetSecond( KMaxSecondsInMinute );
-    
-    aStart = startDt;
-    aEnd = endDt;
-    
-    CCalInstanceView* instanceView = iDbMgr.NormalDbInstanceView();
-    
-    CalCommon::TCalTimeRange timeRange =
-            ResolveFetchTimeRangeL( 
-                    aStart,
-                    aEnd, 
-                    instanceView );
-
-    RCPointerArray<CCalInstance> instanceArray;
-    CleanupClosePushL( instanceArray );
-
-    instanceView->FindInstanceL( instanceArray,
-                                 CalCommon::EIncludeAppts,
-                                 timeRange );
-    
-    TInt i(0);
-    while( i < instanceArray.Count() )
-        {
-        CCalInstance* instance = instanceArray[i];
-        CCalEntry& instanceEntry( instance->Entry() );
-        
-        TBool sameUid( 
-                0 == instanceEntry.UidL().CompareF( aEntry.UidL() ) );
-        
-        TBool thisInstance( 
-                instance->StartTimeL().TimeLocalL() == 
-                aEntry.StartTimeL().TimeLocalL() &&
-                instance->EndTimeL().TimeLocalL() == 
-                aEntry.EndTimeL().TimeLocalL() );      
-        
-        if ( !sameUid || thisInstance )
-            {
-            // This is either same entry as aEntry or then
-            // this entry does not belong to this series 
-            delete instance;
-            instanceArray.Remove( i );            
-            }
-        else
-            {
-            ++i;
-            }        
-        }
-    
-    TCalTime start;
-    start.SetTimeUtcL( aStart );
-    
-    TCalTime end;
-    end.SetTimeUtcL( aEnd );
-    
-    RemoveAndDeleteNonConflictingInstancesL(
-            instanceArray,
-            start,
-            end,
-            aEntry.UidL(),
-            EIncludeSameUID );
-    
-    CreateEntriesFromInstancesL( instanceArray, aInstances );
-    
-    CleanupStack::PopAndDestroy(); // instanceArray    
-    }
-
-// EOF
-