javaextensions/pim/cntadapter/inc.s60/cpimcontactfieldinfo.h
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/pim/cntadapter/inc.s60/cpimcontactfieldinfo.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,223 @@
+/*
+* 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:  Helper class to map Contacts Model fields
+ *
+*/
+
+
+#ifndef CPIMCONTACTFIELDINFO_H
+#define CPIMCONTACTFIELDINFO_H
+
+// INTERNAL INCLUDES
+#include "pimcommon.h"
+#include "pimcontact.h"
+
+// EXTERNAL INCLUDES
+#include <e32std.h>
+#include <cntdef.hrh>
+
+// FORWARD DECLARATIONS
+class CContentType;
+
+/**
+ * Helper clas to map fields between PIM API and Contacts
+ * Model fields.
+ */
+NONSHARABLE_CLASS(CPIMContactFieldInfo) : public CBase
+{
+public: // Type definitions
+
+    /**
+     * Struct for mapping PIM field to a
+     * Contacts Model field
+     */
+    struct TPIMFieldInfo
+    {
+public:
+        // Constructor
+        TPIMFieldInfo(TInt aContactsModelField,
+        TPIMContactField aPIMField) :
+                iPIMField(aPIMField),
+                iSubElement(EPIMFieldInvalid),
+                iContactsModelField(aContactsModelField)
+        {}
+
+        // Constructor with subelement
+        TPIMFieldInfo(TInt aContactsModelField,
+        TPIMContactField aPIMField,
+        TInt aSubElement) :
+                iPIMField(aPIMField),
+                iSubElement(aSubElement),
+                iContactsModelField(aContactsModelField)
+        {}
+
+        // PIM field id
+        TPIMContactField iPIMField;
+        // Sub field. e.g array element
+        TInt iSubElement;
+        // Contacts Model field id
+        TInt iContactsModelField;
+    };
+
+public:
+
+    /**
+     * Two phase constructor
+     * Returns an instance of this class
+     */
+    static CPIMContactFieldInfo* NewL();
+
+    /**
+     * Two phase constructor
+     * Returns an instance of this class. The instance
+     * is left to the cleanup stack
+     */
+    static CPIMContactFieldInfo* NewLC();
+
+    /**
+     * Destructor
+     */
+    ~CPIMContactFieldInfo();
+
+public: // New functions
+
+    /**
+     * MatchContactField
+     * Matches a Contacts Model field type to
+     * PIM item contact field type
+     *
+     * @param aContactsModelFieldType Contacts Model field type
+     * @return Matched PIM contact field
+     */
+    TPIMContactField MatchContactField(
+        TInt aContactsModelFieldType) const;
+
+    /**
+     * MatchPIMField
+     * Matches a PIM field to a Contacts Model field. Ownership of
+     * the returned array is transferred to the caller
+     *
+     * @param aContactField PIM field
+     * @return All matched fields with this PIM contact field.
+     *         In addition, one PIM field may have array elements
+     *         as sub elements
+     */
+    CArrayFix< TInt>* MatchPIMFieldL(TPIMContactField
+                                     aContactField) const;
+
+    /**
+     * MatchContactNameElement
+     * Matches a Contacts Model field type to PIM contact
+     * name/address element. This function should be use when
+     * the actual field type is known
+     *
+     * @param aContactModelFieldType Contacts Model field type
+     * @return Matched PIM constact name/address field array element
+     */
+    TInt MatchContactArrayElement(TInt aContactsModelFieldType) const;
+
+    /**
+     * FieldAttributes
+     * Returns the attributes of the specific Contacts Model
+     * field.
+     *
+     * @param aContentType Content type from which to get attributes
+     * @return Attributes of the passed content type
+     */
+    TPIMAttribute FieldAttributes(const CContentType& aContentType) const;
+
+    /**
+     * GetFieldInternalAttributesL
+     * Returns the internal attributes of the specific Contacts Model
+     * field.
+     *
+     * @param aContentType Content type from which to get attributes
+     * @param aArrayOfAttributes Attributes array which fields will be added
+     * @return Attributes of the passed content type
+     */
+    void GetFieldInternalAttributesL(
+        const CContentType& aContentType,
+        CArrayFix< TUid>& aArrayOfAttributes) const;
+
+    /**
+     * Creates a content type for a specific address element.
+     *
+     * @param aElement PIM Address field element
+     * @param aCategory     Phonebook category for the field.
+     *                      Values can be EContactCategoryNone,
+     *                      EContactCategoryHome,
+     *                      EContactCategoryWork or
+     *                      EContactCategoryOther
+     *
+     * @return The requested Content Type. The ownership of the object
+     *      is transferred to the caller. The object is left in the
+     *      cleanup stack.
+     *
+     * @par Leaving:
+     *      This leaves if theres an error with a system wide error code
+     */
+    CContentType* AddressContentTypeL(
+        TPIMContactAddrElement aElement,
+        EContactFieldCategory aCategory) const;
+
+    /**
+     * Creates a content type for a specific name element.
+     *
+     * @param aElement PIM Address field element
+     *
+     * @return The requested Content Type. The ownership of the object
+     *      is transferred to the caller.
+     *
+     * @par Leaving:
+     *      This leaves if theres an error with a system wide error code
+     */
+    CContentType* NameContentTypeL(TPIMContactNameElement aElement) const;
+
+    /**
+     * Creates a content type for a specific string field
+     *
+     * @param aContactField Contact field which Content Type
+     *        is to be created
+     * @param aAttributes Attributes of this field
+     * @param aCaterory Category of this field. In return, contains
+     *        new category if modification is needed
+     * @return The requested Content Type. The ownership is transferred
+     *         to the caller
+     */
+    CContentType* StringFieldContentTypeL(
+        const TPIMContactField aContactField,
+        const TPIMAttribute aAttributes,
+        EContactFieldCategory& aCategory) const;
+
+private:
+
+    /**
+     * Default C++ constructor
+     */
+    inline CPIMContactFieldInfo();
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+private: // Data
+
+    // Array holding fields info
+    CArrayFix< TPIMFieldInfo>* iFieldsInfo;
+
+};
+
+#endif // CPIMCONTACTFIELDINFO_H
+// End of file