landmarks/locationlandmarks/internalservices/inc/EPos_PosLmLandmarkHandler.h
author Peter Fordham <peter.fordham@gmail.com>
Fri, 19 Mar 2010 17:30:40 -0700
branchCompilerCompatibility
changeset 9 5b5e2139c4b9
parent 0 667063e416a2
permissions -rw-r--r--
Bug 1729 - Add braces around _FOFF macro.

/*
* Copyright (c) 2002-2007 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: Handles landmark operations on a local landmark database.
*
*
*/


#ifndef POSLMLANDMARKHANDLER_H
#define POSLMLANDMARKHANDLER_H

#include <d32dbms.h>
#include <EPos_Landmarks.h>
#include <EPos_CPosLandmark.h>

class CPosLmLocalDbAccess;
class CPosLandmarkCategory;
class CPosLmPartialReadParameters;

/**
*  Handles landmark operations on a local landmark database.
*/
class PosLmLandmarkHandler
    {

    public: // New functions

        /**
        * Reads a landmark from the database. The landmark id must be set. The
        * id specifies which landmark to read.
        *
        * Leaves with @p KErrNotFound if not found.
        *
        * @param[in] aDbAccess A database access.
        * @param[in,out] aLandmark A landmark with the ID set.
        */
        IMPORT_C static void ReadLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            CPosLandmark& aLandmark );

        /**
        * Adds a landmark to the database.
        *
        * @param[in] aDbAccess A database access.
        * @param[in] aLandmark The landmark to add.
        */
        IMPORT_C static void AddLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            CPosLandmark& aLandmark );

        /**
        * Updates a landmark in the database.
        *
        * Leaves with @p KErrNotFound if not found.
        *
        * @param[in] aDbAccess A database access.
        * @param[in] aLandmark The new landmark data.
        */
        IMPORT_C static void UpdateLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            const CPosLandmark& aLandmark );

        /**
        * Removes a landmark from the database.
        *
        * @param[in] aDbAccess A database access.
        * @param[in] aLandmarkId The ID of the landmark to delete.
        */
        IMPORT_C static void RemoveLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            TPosLmItemId  aLandmarkId );

        /**
        * Reads partial information about a landmark from the landmark
        * database. The landmark id must be set. The id specifies which
        * landmark to read.
        *
        * @param[in] aDbAccess A database access.
        * @param[in,out] aLandmark A landmark with id set.
        * @param[in] aPartialSettings Partial settings.
        */
        IMPORT_C static void ReadPartialLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            CPosLandmark& aLandmark,
            CPosLmPartialReadParameters& aPartialSettings );

        /**
         * Reads partial information about a landmark from the landmark
         * database. The landmark id must be set. The id specifies which
         * landmark to read.
         *
         * @param[in] aView View to landmark table, positioned
         *      to landmark's record
         * @param[in] aDbAccess A database access.
         * @param[in,out] aLandmark A landmark with id set.
         * @param[in] aPartialSettings Partial settings.
         */
         IMPORT_C static void ReadPartialLandmarkL(
             RDbRowSet& aView,
             CPosLmLocalDbAccess& aDbAccess,
             CPosLandmark& aLandmark,
             CPosLmPartialReadParameters& aPartialSettings );

         /**
        * Adds the specified categories to the specified landmark.
        *
        * @param[in] aDbAccess A database access.
        * @param[in] aCategories An array of category IDs.
        * @param[in] aLandmarkId A landmark id.
        */
        IMPORT_C static void AddCategoriesToLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            const RArray<TPosLmItemId>& aCategories,
            const TPosLmItemId& aLandmarkId );

        /**
        * Fetches all landmark IDs from the database. Sorts the IDs by landmark
        * name if specified.
        *
        * @param[in] aDbAccess A database access.
        * @param[in] aUseSort Whether to use sort or not.
        * @param[in] aSortDescending If sort is used, ETrue for descending order,
        *   otherwise ascending order.
        * @param[out] aLandmarkIds The fetched landmark IDs.
        */
        IMPORT_C static void GetAllLandmarkIdsL(
            CPosLmLocalDbAccess& aDbAccess,
            TBool aUseSort,
            TBool aSortDescending,
            RArray<TPosLmItemId>& aLandmarkIds );

        /**
        * Checks whether a landmark exists or not.
        *
        * @param[in] aDbAccess A database access.
        * @param[in] aLandmarkId A landmark id.
        */
        IMPORT_C static TBool LandmarkExistsL(
            CPosLmLocalDbAccess& aDbAccess,
            TPosLmItemId aLandmarkId );

        /**
        * Removes a specified category from a specified landmark.
        * @param[in] aDbAccess A database access.
        * @param[in] aCategoryId A category.
        * @param[in] aLandmarkId A landmark.
        */
        IMPORT_C static void RemoveCategoryFromLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            TPosLmItemId aCategoryId,
            TPosLmItemId aLandmarkId );

        /**
        * Checks whether the specified landmark has the specified category.
        *
        * @param[in] aDbAccess A database access.
        * @param[in] aCategoryId A category id.
        * @param[in] aLandmarkId A landmark id.
        * @return ETrue if the specified landmark has the specified category,
        *   otherwise EFalse.
        */
        IMPORT_C static TBool HasLandmarkSpecifiedCategoryL(
            CPosLmLocalDbAccess& aDbAccess,
            TPosLmItemId aCategoryId,
            TPosLmItemId aLandmarkId );

        /** Returns total number of landmark rows */
        IMPORT_C static TUint TotalLandmarkCountL( CPosLmLocalDbAccess& aDbAccess );
    
        /**
         * Reads a landmark from the database. The landmark id must be set. The
         * id specifies which landmark to read.
         *
         * Leaves with @p KErrNotFound if not found.
         *
         * @param[in] aView View to landmark table, positioned
         *      to landmark's record
         * @param[in] aDbAccess A database access.
         * @param[in,out] aLandmark A landmark with the ID set.
         */
        IMPORT_C static void ReadLandmarkL(
            RDbRowSet& aView,
            CPosLmLocalDbAccess& aDbAccess,
            CPosLandmark& aLandmark );

    private:

	    static void ReadLandmarkL(
	        CPosLmLocalDbAccess& aDbAccess,
	        CPosLandmark& aLandmark,
	        CPosLandmark::TAttributes aAttributes,
	        TBool aHasRequestedFields,
	        const RArray<TUint>& aRequestedFields );
    
    	static void ReadLandmarkL(
            RDbRowSet& aView,
            CPosLmLocalDbAccess& aDbAccess,
            CPosLandmark& aLandmark,
            CPosLandmark::TAttributes aAttributes,
            TBool aHasRequestedFields,
            const RArray<TUint>& aRequestedFields );

        static void AddBasicLandmarkInfoL(
            CPosLmLocalDbAccess& aDbAccess,
            CPosLandmark& aLandmark );

        static void AddFieldsL(
            CPosLmLocalDbAccess& aDbAccess,
            const CPosLandmark& aLandmark );

        static void AddCategoriesL(
            CPosLmLocalDbAccess& aDbAccess,
            const CPosLandmark& aLandmark );

        static void ReadPositionL(
        	RDbRowSet& aView,
            CPosLandmark& aLandmark );

        static void ReadCoverageRadiusL(
        	RDbRowSet& aView,
            CPosLandmark& aLandmark );

        /** Reads landmark name from current row in given rowset
         *  and fills it to given landmark */
        static void ReadNameL(
            RDbRowSet& aView,
            CPosLandmark& aLandmark );

        static void ReadDescriptionL(
        	RDbRowSet& aView,
            CPosLandmark& aLandmark );

        static void ReadIconL(
            CPosLmLocalDbAccess& aDbAccess,
            RDbRowSet& aView,
            CPosLandmark& aLandmark );

        static void ReadFieldsL(
            CPosLmLocalDbAccess& aDbAccess,
            CPosLandmark& aLandmark,
            TBool aHasRequestedFields,
            const RArray<TUint>& aRequestedFields );

        static void ReadCategoriesL(
            CPosLmLocalDbAccess& aDbAccess,
            CPosLandmark& aLandmark );

        static void UpdateCategoriesL(
            CPosLmLocalDbAccess& aDbAccess,
            const CPosLandmark& aLandmark,
            const CPosLandmark& aOldLandmark );

        static void UpdateFieldsL(
            CPosLmLocalDbAccess& aDbAccess,
            const CPosLandmark& aLandmark,
            const CPosLandmark& aOldLandmark );

        static void UpdateIconAndBasicLandmarkInfoL(
            CPosLmLocalDbAccess& aDbAccess,
            const CPosLandmark& aLandmark,
            const CPosLandmark& aOldLandmark );

        static TBool CheckIfIconAndBasicInfoAreEqualL(
            const CPosLandmark& aLandmark,
            const CPosLandmark& aLandmarkInDb );

        static void RemoveNonExistingCategoriesL(
            CPosLmLocalDbAccess& aDbAccess,
            RArray<TPosLmItemId>& aCategoryIdArray );

        static void RemoveCategoriesFromLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            const RArray<TPosLmItemId>& aCategories,
            const TPosLmItemId& aLandmarkId );

        static void AddFieldsToLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            const RArray<TUint>& aFieldIds,
            const CPosLandmark& aLandmark );

        static void UpdateFieldsForLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            const RArray<TUint>& aFieldIds,
            const CPosLandmark& aLandmark );

        static void RemoveFieldsFromLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            const RArray<TUint>& aFieldIds,
            const CPosLandmark& aLandmark );

        static void InsertFieldL(
            RDbView& view,
            const TPositionFieldId& aFieldId,
            const CPosLandmark& aLandmark );

        static void SetPositionL(
            RDbView& aView,
            const CPosLandmark& aLandmark );

        static void SetCoverageRadiusL(
            RDbView& aView,
            const CPosLandmark& aLandmark );

        static void SetLandmarkNameL(
            RDbView& aView,
            const CPosLandmark& aLandmark );

        static void SetLandmarkDescriptionL(
            RDbView& aView,
            const CPosLandmark& aLandmark );

        static void SetIconL(
            RDbView& aView,
            const CPosLandmark& aLandmark,
            const TUint32 aIconPathId );

        static TBool ReadIconPathIdL(
            CPosLmLocalDbAccess& aDbAccess,
            const TPosLmItemId& aId,
            TUint32& aIconPathId );

        static void RemoveAllCategoriesFromLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            TPosLmItemId aLandmarkId );

        static void RemoveAllFieldsFromLandmarkL(
            CPosLmLocalDbAccess& aDbAccess,
            TPosLmItemId aLandmarkId );

        static TBool RemoveBasicLandmarkInfoL(
            CPosLmLocalDbAccess& aDbAccess,
            TPosLmItemId aLandmarkId,
            TUint32& aIconPathId );
        
        static void OpenLandmarkViewLC(
            TPosLmItemId aLandmarkId,
            RDbView& aView,
            CPosLmLocalDbAccess& aDbAccess );

    };

#endif      // POSLMLANDMARKHANDLER_H

// End of File