javaextensions/pim/agnadapter/src.s60/cpimeventadapteraccess.cpp
changeset 21 2a9601315dfc
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/pim/agnadapter/src.s60/cpimeventadapteraccess.cpp	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2008 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:  Provides access to Agenda Model event adapters
+ *
+*/
+
+
+// INCLUDE FILES
+#include "cpimeventadapteraccess.h"
+#include "cpimapptadaptermanager.h"
+#include "cpimmemoadaptermanager.h"
+#include "cpimannivadaptermanager.h"
+#include "cpimagnapptadapter.h"
+#include "cpimagnmemoadapter.h"
+#include "cpimagnannivadapter.h"
+#include "mpimlocalizationmanager.h"
+#include "mpimlocalizationdata.h"
+#include "pimlocalizationids.h"
+#include "logger.h"
+
+// -----------------------------------------------------------------------------
+// CPIMEventAdapterAccess::CPIMEventAdapterAccess
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPIMEventAdapterAccess::CPIMEventAdapterAccess(
+    MPIMLocalizationManager* aLocalizationManager,
+    java::util::FunctionServer* aFuncServer) // not owned
+        :
+        iLocalizationManager(aLocalizationManager), iFuncServer(aFuncServer)
+{
+    JELOG2(EPim);
+}
+
+void CPIMEventAdapterAccess::ConstructL()
+{
+    JELOG2(EPim);
+    iEventListNames = new(ELeave) CDesCArrayFlat(KPIMNumberOfEventLists);
+
+    // will be left empty
+    iNoListNames = new(ELeave) CDesCArrayFlat(1);
+
+    // Order of lists matters:
+    // Appointments - Events (Memos) - Anniversaries
+    // See OpenEventListL().
+
+    iApptLocalizationData = iLocalizationManager->GetPIMLocalizationDataL(
+                                KPIMLocalizationIdEvent, KPIMListNameIdAppointment);
+
+    iMemoLocalizationData = iLocalizationManager->GetPIMLocalizationDataL(
+                                KPIMLocalizationIdEvent, KPIMListNameIdEvent);
+
+    iAnnivLocalizationData = iLocalizationManager->GetPIMLocalizationDataL(
+                                 KPIMLocalizationIdEvent, KPIMListNameIdAnniversary);
+
+    HBufC* listName = NULL; // reused
+
+    // Order of lists matters, see above.
+
+    listName = iApptLocalizationData->GetListNameL();
+    CleanupStack::PushL(listName);
+    iEventListNames->AppendL(*listName);
+    CleanupStack::PopAndDestroy(listName);
+
+    listName = iMemoLocalizationData->GetListNameL();
+    CleanupStack::PushL(listName);
+    iEventListNames->AppendL(*listName);
+    CleanupStack::PopAndDestroy(listName);
+
+    listName = iAnnivLocalizationData->GetListNameL();
+    CleanupStack::PushL(listName);
+    iEventListNames->AppendL(*listName);
+    CleanupStack::PopAndDestroy(listName);
+}
+
+// -----------------------------------------------------------------------------
+// CPIMEventAdapterAccess::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPIMEventAdapterAccess* CPIMEventAdapterAccess::NewL(
+    MPIMLocalizationManager* aLocalizationManager,
+    java::util::FunctionServer* aFuncServer) // not owned
+{
+    JELOG2(EPim);
+    CPIMEventAdapterAccess * self =
+        new(ELeave) CPIMEventAdapterAccess(aLocalizationManager, aFuncServer);
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// destructor
+CPIMEventAdapterAccess::~CPIMEventAdapterAccess()
+{
+    JELOG2(EPim);
+    delete iEventListNames;
+    delete iNoListNames;
+    delete iApptLocalizationData;
+    delete iMemoLocalizationData;
+    delete iAnnivLocalizationData;
+}
+
+const CDesCArray& CPIMEventAdapterAccess::ListNamesL(
+    const TPIMListType aListType)
+{
+    JELOG2(EPim);
+    if (aListType == EPIMEventList)
+    {
+        return *iEventListNames;
+    }
+    else
+    {
+        // no Event or ToDo lists
+        return *iNoListNames;
+    }
+}
+
+TBool CPIMEventAdapterAccess::OpenContactListL(const TDesC* /*aListName*/,
+        MPIMContactAdapterManager** /*aRetAdapterManager*/,
+        MPIMContactListAdapter** /*aRetListAdapter*/, MPIMLocalizationData** /*aRetLocalizationData*/)
+{
+    JELOG2(EPim);
+    // no Contact lists
+    return EFalse;
+}
+
+TBool CPIMEventAdapterAccess::OpenEventListL(const TDesC* aListName,
+        MPIMEventAdapterManager** aRetAdapterManager,
+        MPIMEventListAdapter** aRetListAdapter,
+        MPIMLocalizationData** aRetLocalizationData)
+{
+    JELOG2(EPim);
+    // Open named Event list or the default list if no name given
+    TPIMLocalizationDataID listId = KPIMListNameIdAppointment; // default
+
+    // Order of lists is Appointments - Memos - Anniversaries
+
+    if (aListName)
+    {
+        TInt listNamePos(0);
+        if (0 == iEventListNames->Find(*aListName, listNamePos))
+        {
+            listId = TPIMLocalizationDataID(listNamePos);
+        }
+        else
+        {
+            // List not found
+            return EFalse;
+        }
+    }
+
+    // OK, we have now identified the list - open it
+
+    MPIMEventAdapterManager* adapterManager = NULL;
+    MPIMEventListAdapter* listAdapter = NULL;
+    MPIMLocalizationData* localizationData = NULL;
+
+    switch (listId)
+    {
+    case EPIMEventListAppointment:
+    {
+        adapterManager = CPIMApptAdapterManager::NewL(
+                             (*iEventListNames)[listId]);
+        CleanupDeletePushL(adapterManager);
+
+        CPIMAgnApptAdapter* adapter = CPIMAgnApptAdapter::NewL(iFuncServer);
+        CleanupStack::PushL(adapter);
+
+        listAdapter = CPIMEventListAdapter::NewL(CCalEntry::EAppt, adapter,
+                      iFuncServer);
+
+        CleanupStack::Pop(adapter);
+        CleanupStack::Pop(adapterManager);
+
+        localizationData = iApptLocalizationData;
+
+        break;
+    }
+    case EPIMEventListEvent:
+    {
+        adapterManager = CPIMMemoAdapterManager::NewL(
+                             (*iEventListNames)[listId]);
+        CleanupDeletePushL(adapterManager);
+
+        CPIMAgnMemoAdapter* adapter = CPIMAgnMemoAdapter::NewL(iFuncServer);
+        CleanupStack::PushL(adapter);
+
+        listAdapter = CPIMEventListAdapter::NewL(CCalEntry::EEvent, adapter,
+                      iFuncServer);
+
+        CleanupStack::Pop(adapter);
+        CleanupStack::Pop(adapterManager);
+
+        localizationData = iMemoLocalizationData;
+
+        break;
+    }
+    case EPIMEventListAnniversary:
+    {
+        adapterManager = CPIMAnnivAdapterManager::NewL(
+                             (*iEventListNames)[listId]);
+        CleanupDeletePushL(adapterManager);
+
+        CPIMAgnAnnivAdapter* adapter = CPIMAgnAnnivAdapter::NewL(iFuncServer);
+        CleanupStack::PushL(adapter);
+
+        listAdapter = CPIMEventListAdapter::NewL(CCalEntry::EAnniv, adapter,
+                      iFuncServer);
+
+        CleanupStack::Pop(adapter);
+        CleanupStack::Pop(adapterManager);
+
+        localizationData = iAnnivLocalizationData;
+
+        break;
+    }
+    default:
+    {
+        // We should never end up here (but if we do, the list name
+        // mappings are not OK)
+        User::Leave(KErrCorrupt);
+    }
+    }
+
+    *aRetAdapterManager = adapterManager;
+    *aRetListAdapter = listAdapter;
+    *aRetLocalizationData = localizationData;
+
+    return ETrue;
+}
+
+TBool CPIMEventAdapterAccess::OpenToDoListL(const TDesC* /*aListName*/,
+        MPIMToDoAdapterManager** /*aRetAdapterManager*/,
+        MPIMToDoListAdapter** /*aRetListAdapter*/, MPIMLocalizationData** /*aRetLocalizationData*/)
+{
+    JELOG2(EPim);
+    // no ToDo lists
+    return EFalse;
+}
+
+//  End of File