--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/pim/cntadapter/inc.s60/cpimcontactitemadapter.h Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,545 @@
+/*
+* 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: Handles conversion between PIM API Contact Items and Contacts
+ * Model Contact Cards.
+ *
+*/
+
+
+#ifndef CPIMCONTACTITEMADAPTER_H
+#define CPIMCONTACTITEMADAPTER_H
+
+// INTERNAL INCLUDES
+#include "pimcommon.h"
+#include "pimcontact.h"
+
+// EXTERNAL INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <cntdef.h>
+
+// CONSTANTS
+
+/** Maximum lengths of address elements in S60 */
+const TInt KContactAddrElemMaxLengths[EPIMContactAddrNumElements] =
+{
+ 20, // P.O.Box
+ 50, // Extra/Extension
+ 50, // Street
+ 50, // City
+ 50, // State/Region
+ 20, // Postal code
+ 50 // Country
+};
+
+/** Maximum lengths of name elements in S60 */
+const TInt KContactNameElemMaxLengths[EPIMContactNameNumElements] =
+{
+ 50, // Family/surname
+ 50, // Given/First name
+ 50, // Other
+ 10, // Prefix
+ 10, // Suffix
+ 50, // Family name reading
+ 50 // Given name reading
+};
+
+/**
+ * Maximum lengths of standard string field values in S60.
+ * An offset to the table is found by substracting
+ * KContactStringMaxLengthsOffset from a field id.
+ */
+const TInt KContactStringMaxLengths[] =
+{
+ KErrNotFound, // EPIMContactAddr
+ KErrNotFound, // EPIMContactBirthday
+ KErrNotFound, // EPIMContactClass
+ 150, // EPIMContactEmail
+ KErrNotSupported, // EPIMContactFormattedAddr
+ KErrNotSupported, // EPIMContactFormattedName
+ KErrNotFound, // EPIMContactName
+ 50, // EPIMContactNickname
+ 1000, // EPIMContactNote
+ 50, // EPIMContactOrg
+ KErrNotFound, // EPIMContactPhoto
+ KErrNotFound, // EPIMContactPhotoUrl
+ KErrNotSupported, // EPIMContactPublicKey
+ KErrNotSupported, // EPIMContactPublicKeyString
+ KErrNotFound, // EPIMContactRevision
+ 48, // EPIMContactTel
+ 50, // EPIMContactTitle
+ KErrNotFound, // EPIMContactUid
+ 1000 // EPIMContactUrl
+};
+
+const TInt KContactStringMaxLengthsOffset = 100;
+const TInt KContactStringMaxLengthsLen = sizeof(KContactStringMaxLengths)
+ / sizeof(TInt);
+
+/**
+ * Maximum lengths of extended string field values in S60.
+ */
+const TInt KContactExtStringMaxLengths[] =
+{
+ 50, // Extended WV user ID
+ 100, // Extended SIP
+ 60, // Extended DTFM
+ 50, // Extended Department
+ 50, // Extended Assistant name
+ 50, // Extended Children
+ 50, // Extended Spouse
+ KErrNotFound, // Extended Anniversary
+ 100, // Extended VOIP
+ 100, // Extended PTT
+ 100 // Extended SWIS
+};
+
+const TInt KContactExtStringMaxLengthOffset = 0x1005001;
+const TInt KContactExtStringMaxLengthsLen = sizeof(KContactExtStringMaxLengths)
+ / sizeof(TInt);
+
+// FORWARD DECLARATIONS
+class CPIMContactCategoryManager;
+class CContactCard;
+class CViewContact;
+class RContactViewSortOrder;
+class MPIMContactItem;
+class MPIMItemData;
+class CContentType;
+class CContactItemField;
+class CPIMImageScaler;
+class CPIMContactFieldInfo;
+
+// CLASS DECLARATION
+
+/**
+ * Contact Item Adapter
+ * Converts Contact Items from PIM representation to Contacts Model
+ * representation and vice versa.
+ */
+NONSHARABLE_CLASS(CPIMContactItemAdapter): public CBase
+{
+public: // Constructor and destructor
+ /**
+ * Two-phased constructor.
+ */
+ static CPIMContactItemAdapter* NewL(
+ CPIMContactCategoryManager& aCategoryManager);
+
+ /**
+ * Destructor.
+ */
+ ~CPIMContactItemAdapter();
+
+public: // new methods
+ /**
+ * Converts from a PIM item data to a Contacts Model contact card.
+ *
+ * @param aItem The item to convert
+ *
+ * @return A contact card with the same information as given in
+ * the parameter item. The \b ownership of the card is
+ * transferred to the caller.
+ *
+ * @par Leaving:
+ * This leaves on an error with system wide error codes.
+ * @par NOTE!
+ * The debug version of this method panics if the item contains
+ * unsupported fields!
+ */
+ CContactCard* CardL(const MPIMContactItem& aItem);
+
+ /**
+ * Converts from a Contacts Model contact card to the PIM
+ * representation.
+ *
+ * @param aItem Item data container to fill with the data
+ * @param aCard Contact card to convert
+ *
+ * @par Leaving:
+ * - KErrNotFound: The contact belongs to a group which either does not
+ * exist, or does not have a label. In other words, the
+ * database has been corrupted.
+ * - This method may also leave with other system wide error codes.
+ */
+ void FillItemL(MPIMContactItem& aItem, const CContactCard& aCard);
+
+
+ /**
+ * Updates the data in the Contacts Model contact card to match
+ * the data in the PIM item data container.
+ *
+ * @param aItem Item from which the data is read
+ * @param aCard The card which is updated
+ *
+ * @par Leaving:
+ * This leaves on an error with system wide error codes.
+ * @par NOTE!
+ * The debug version of this method panics if the item contains
+ * unsupported fields!
+ */
+ void UpdateCardL(const MPIMContactItem& aItem,
+ CContactCard& aCard);
+
+ /**
+ * Updates the category information in the database.
+ *
+ * @param aItem Item which contains the category information which
+ * is used in the update.
+ * @param aCard the card which is updated.
+ *
+ * @par Leaving:
+ * - KErrNotFound: There is something fishy about the groups in the
+ * database.
+ */
+ void UpdateCategoriesL(const MPIMContactItem& aItem,
+ const CContactCard& aCard);
+
+ /**
+ * Returns Contacts model field which is mapped to the PIM contact
+ * field. Ownership of the returned array is transferred to the caller
+ *
+ * @return Mapped Contacts Model fields
+ */
+ CArrayFix< TInt>* ContactsModelFieldTypeL(
+ TPIMContactField aContactField) const;
+
+private:
+ /**
+ * C++ constructor.
+ */
+ CPIMContactItemAdapter(CPIMContactCategoryManager& aCategoryManager);
+
+ /**
+ * Symbian 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Deletes all the supported fields from the contact card.
+ * Those fields which are not supported are left as is.
+ *
+ * @param aCard The card which is cleaned
+ *
+ */
+ void CleanCard(CContactCard& aCard);
+
+ /**
+ * Checks if we support this particular contact field.
+ *
+ * @param aField The field which is checked
+ *
+ * @return ETrue if the field is supported, EFalse otherwise
+ *
+ */
+ TBool IsSupportedField(CContactItemField& aField);
+
+ /**
+ * Converts a field from a PIM Item to a Contact Card.
+ *
+ * @param aItem item to read the field from
+ * @param aCard card to write the field to
+ * @param aField field to convert
+ *
+ * @par Leaving:
+ * This method leaves on error with system wide error codes.
+ * @par NOTE!
+ * The debug version of this method panics if the field is unsupported!
+ */
+ void ConvertFieldL(const MPIMContactItem& aItem,
+ CContactCard& aCard,
+ TPIMContactField aField);
+
+ /**
+ * Converts a field from a Contact Card to a PIM Item
+ *
+ * @param aField field to read the data from
+ * @param aItem item to write the data to
+ *
+ * @par Leaving:
+ * This method leaves on an error with system wide error codes.
+ */
+ void ConvertFieldL(const CContactItemField& aField,
+ MPIMContactItem& aItem);
+
+ /**
+ * Converts a text field from a Contact Card to a PIM Item
+ *
+ * @param aField field to read the data from
+ * @param aItem item to write the data to
+ *
+ * @par Leaving:
+ * This method leaves on error with system wide error codes
+ */
+ void ConvertTextFieldL(const CContactItemField& aField,
+ MPIMContactItem& aItem);
+
+ /**
+ * Adds a string field to the item, and optionally sets the
+ * fields label.
+ *
+ * @param aItem item to which the string field is added
+ * @param aField field type
+ * @param aAttributes attributes of the field to be added
+ * @param aInternalAttributes Internal attributes of the field
+ * @param aValue value to be added. Ownership gets transferred
+ * to the item.
+ * @param aLabel label to be set. NULL if default label is to
+ * be used. Ownership gets transferred.
+ */
+ void AddStringFieldWithLabelL(
+ MPIMItemData& aItem,
+ TPIMField aField,
+ TPIMAttribute aAttributes,
+ CArrayFix< TUid>* aInternalAttributes,
+ const TPtrC aValue,
+ const TPtrC aLabel);
+
+ /**
+ * Converts a date field from a Contact Card to a PIM Item
+ *
+ * @param aField field to read the data from
+ * @param aItem item to write the data to
+ *
+ * @par Leaving:
+ * This method leaves on error with system wide error codes
+ */
+ void ConvertDateFieldL(const CContactItemField& aField,
+ MPIMContactItem& aItem);
+
+ /**
+ * Converts a store field from a Contact Card to a PIM Item
+ *
+ * @param aField field to read the data from
+ * @param aItem item to write the data to
+ *
+ * @par Leaving:
+ * This method leaves on error with system wide error codes
+ */
+ void ConvertStoreFieldL(const CContactItemField& aField,
+ MPIMContactItem& aItem);
+
+ /**
+ * Adds a name field to a PIM Item
+ *
+ * @param aText text to add
+ * @param aItem item to add the field to
+ * @param aElement element which is added
+ * @param aLabel lable to be set
+ *
+ * @par Leaving:
+ * This method leaves on an error with system wide error codes.
+ */
+ void AddNameFieldToItemL(
+ TPtrC aText,
+ MPIMContactItem& aItem,
+ TPIMContactNameElement aElement,
+ TPtrC aLabel);
+
+ /**
+ * Adds an addres field to a PIM Item
+ *
+ * @param aText text to add
+ * @param aItem item to add the field to
+ * @param aElement element which is added
+ * @param aAttributes attributes of the address field
+ * @param aLabel label to be set
+ *
+ * @par Leaving:
+ * This method leaves on an error with system wide error codes.
+ */
+ void AddAddressFieldToItemL(
+ TPtrC aText,
+ MPIMContactItem& aItem,
+ TPIMContactAddrElement aElement,
+ TPIMAttribute aAttributes,
+ TPtrC aLabel);
+
+ /**
+ * Converts an address field from a PIM Item to a Contact Card.
+ *
+ * @param aItem item to read the field from
+ * @param aCard card to write the field to
+ * @param aField field to convert
+ * @param aIndex index to the field to convert
+ * @param aAttributes attributes of the field to convert
+ *
+ * @par Leaving:
+ * This method leaves on an error with system wide error codes.
+ */
+ void ConvertAddressFieldL(
+ const MPIMItemData& aItem,
+ CContactCard& aCard,
+ TPIMContactField aField,
+ TInt aIndex,
+ TPIMAttribute aAttributes);
+
+ /**
+ * Converts a name field from a PIM Item to a Contact Card.
+ *
+ * @param aItem item to read the field from
+ * @param aCard card to write the field to
+ * @param aField field to convert
+ * @param aIndex index to the field to convert
+ *
+ * @par Leaving:
+ * This method leaves on an error with system wide error codes.
+ */
+ void ConvertNameFieldL(
+ const MPIMItemData& aItem,
+ CContactCard& aCard,
+ TPIMContactField aField,
+ TInt aIndex);
+
+ /**
+ * Converts a date field from a PIM Item to a Contact Card.
+ *
+ * @param aItem item to read the field from
+ * @param aCard card to write the field to
+ * @param aField field to convert
+ * @param aIndex index to the field to convert
+ *
+ * @par Leaving:
+ * This method leaves on an error with system wide error codes.
+ * @par NOTE!
+ * The debug version of this method panics if the date is not a birthday!
+ */
+ void ConvertDateFieldL(
+ const MPIMItemData& aItem,
+ CContactCard& aCard,
+ TPIMContactField aField,
+ TInt aIndex);
+
+ /**
+ * Converts a string field from a PIM Item to a Contact Card.
+ *
+ * @param aItem item to read the field from
+ * @param aCard card to write the field to
+ * @param aField field to convert
+ * @param aIndex index to the field to convert
+ *
+ * @par Leaving:
+ * This method leaves on an error with system wide error codes.
+ */
+ void ConvertStringFieldL(
+ const MPIMItemData& aItem,
+ CContactCard& aCard,
+ TPIMContactField aField,
+ TInt aIndex);
+
+ /**
+ * Converts a photo field from a PIM Item to a Contact Card.
+ *
+ * @param aItem item to read the field from
+ * @param aCard card to write the field to
+ * @param aField field to convert
+ * @param aIndex index to the field to convert
+ *
+ * @par Leaving:
+ * This method may leave.
+ */
+ void ConvertPhotoFieldL(
+ const MPIMItemData& aItem,
+ CContactCard& aCard,
+ TPIMContactField aField,
+ TInt aIndex);
+
+ /**
+ * Converts a class field from a PIM Item to a Contact Card.
+ *
+ * @param aItemData item to read the field from
+ * @param aCard card to write the field to
+ * @param aField field to convert
+ * @param aIndex index to the field to convert
+ *
+ * @par Leaving:
+ * This method may leave.
+ */
+ void ConvertClassFieldL(
+ const MPIMItemData& aItemData,
+ CContactCard& aCard,
+ TPIMContactField aField,
+ TInt aIndex);
+
+ /**
+ * Converts a class field from a Contact Card to PIM item
+ *
+ * @param aItemData Item to add the field
+ * @param aClassDesValue Pointer descriptor to the native value
+ * @param aLabel Label for the field
+ *
+ * @par Leaving
+ * This method may leve
+ */
+ void AddClassFieldToItemL(
+ MPIMItemData& aItemData,
+ TPtrC& aClassDesValue,
+ TPtrC aLabel);
+
+ /**
+ * Checks the attributes in the address values in the given
+ * item, and finds out optimal values for address index
+ * members.
+ * @param aItem item which is checked
+ * @param aPlainAddressIndex the index of address without
+ * attributes is placed here
+ * @param aHomeAddressIndex the index of address with home
+ * attribute is placed here
+ * @param aWorkAddressIndex the index of address with work
+ * attribute is placed here
+ */
+ void AddressAttributesL(const MPIMItemData& aItem,
+ TInt& aPlainAddressIndex,
+ TInt& aHomeAddressIndex,
+ TInt& aWorkAddressIndex);
+
+ /**
+ * Checks that given string value does not exceed the limit
+ * specified for the given field.
+ */
+ void EnsureValidStringValueLengthL(
+ TPIMContactField aField,
+ const TDesC& aValue);
+
+ /**
+ * Checks that given address array element does not exceed
+ * a predefined length limit.
+ */
+ void EnsureValidAddrElemLengthL(
+ TPIMContactAddrElement aElemIndex,
+ const TDesC& aElemValue);
+
+ /**
+ * Checks that given name array element does not exceed
+ * a predefined length limit.
+ */
+ void EnsureValidNameElemLengthL(
+ TPIMContactNameElement aElemIndex,
+ const TDesC& aElemValue);
+
+private: // members
+
+ // Handles categories
+ CPIMContactCategoryManager& iCategoryManager;
+
+ // Scales bitmaps, owned.
+ CPIMImageScaler* iImageScaler;
+
+ // Matches Contacts Model fields to PIM contact fields
+ CPIMContactFieldInfo* iFieldInfo;
+
+};
+
+#endif // CPIMCONTACTITEMADAPTER_H
+// End of file