diff -r e8e63152f320 -r 2a9601315dfc javaextensions/pim/cntadapter/inc.s60/cpimcmadaptermanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/pim/cntadapter/inc.s60/cpimcmadaptermanager.h Mon May 03 12:27:20 2010 +0300 @@ -0,0 +1,507 @@ +/* +* 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 static information about contact lists and creates + * contact list adapters. + * +*/ + + +#ifndef CPIMCMADAPTERMANAGER_H +#define CPIMCMADAPTERMANAGER_H + +// INCLUDES +#include "mpimcontactadaptermanager.h" +#include "mpimadaptermanager.h" +#include "pimcontact.h" // field enums +#include "pimcommon.h" // basic types +#include + +// CONSTANTS + + +const TPIMField KPIMSupportedFields[] = +{ + EPIMContactPhoto, + EPIMContactName, + EPIMContactNickname, + EPIMContactTel, + EPIMContactEmail, + EPIMContactExtDtmf, + EPIMContactExtVoip, + EPIMContactExtPTT, + EPIMContactExtSWIS, + EPIMContactExtSip, + EPIMContactOrg, + EPIMContactExtDepartment, + EPIMContactTitle, + EPIMContactExtAssistantName, + EPIMContactExtSpouse, + EPIMContactExtChildren, + EPIMContactUrl, + EPIMContactAddr, + EPIMContactBirthday, + EPIMContactExtAnniversary, + EPIMContactNote, + EPIMContactClass, + EPIMContactExtWvUserId, + EPIMContactUid, + EPIMContactRevision +}; + +/** + * Number of supported Contact fields by S60 platform + */ +const TInt KPIMSupportedFieldsCount = sizeof(KPIMSupportedFields) + / sizeof(TPIMField); + +/** + * Maximum number of values for all standard PIM API Contact fields. + * + * The field constants are numbered from 100 to 118; thus they can be + * mapped to a table starting from 0 by reducing 100 from the field + * constant values. + * + * See @ref KPIMContactMaxValueMappingOffset. + */ +const TInt KPIMMaxValues[] = +{ + 3, // address + 1, // birthday + 1, // class + KPIMUnlimitedValues, // email + 0, // formatted address + 0, // formatted name + 1, // name + 1, // nickname + KPIMUnlimitedValues, // note + 1, // org + 1, // photo + 0, // photo url + 0, // public key + 0, // public key string + 1, // revision + KPIMUnlimitedValues, // tel + KPIMUnlimitedValues, // title + 1, // uid + KPIMUnlimitedValues // url +}; + +/** + * Maximum number of values for all extended PIM API Contact fields. + * + * The field constants are numbered from 0x1005001 to 0x1005003; + * thus they can be mapped to a table starting from 0 by reducing 0x1005001 + * from the field constant values. + * + * See @ref KPIMContactMaxExtValueMappingOffset. + */ +const TInt KPIMMaxExtValues[] = +{ + 1, // Extended WV User ID + KPIMUnlimitedValues, // Extended SIP + KPIMUnlimitedValues, // Extended DTMF + 1, // Extended Department + 1, // Extended Assistant name + 1, // Extended Children + 1, // Extended Spouse + 1, // Extended Anniversary + KPIMUnlimitedValues, // Extended VOIP + KPIMUnlimitedValues, // Extended PTT + KPIMUnlimitedValues // Extended SWIS +}; + +/** + * Smallest Contact standard field constant. + */ +const TInt KPIMContactSmallestField = 100; + +/** + * Largest Contact standard field constant. + */ +const TInt KPIMContactLargestField = 118; + +/** + * The offset for mapping Contact standard field constant values to + * elements in @ref KPIMMaxValues table. + */ +const TInt KPIMContactMaxValueMappingOffset = 100; + +/** + * Smallest Contact extended field constant. + */ +const TInt KPIMContactSmallestExtField = 0x1005001; + +/** + * Largest Contact extended field constant. + */ +const TInt KPIMContactLargestExtField = 0x100500B; +/** + * The offset for mapping Contact extended field constant values to + * elements in @ref KPIMMaxExtValues table. + */ +const TInt KPIMContactMaxExtValueMappingOffset = 0x1005001; + +/** + * Number of Contact fields in PIM API. + */ +const TInt KPIMFieldCount = sizeof(KPIMMaxValues) / sizeof(TInt) + + sizeof(KPIMMaxExtValues) / sizeof(TInt); + +// Supported ADDR attributes +const TPIMAttribute KPIMAddrAttributes[] = +{ + EPIMContactAttrHome, + EPIMContactAttrWork +}; + +const TPIMAttribute KPIMAddrAttributesCombined = (EPIMContactAttrWork + | EPIMContactAttrHome); + +const TInt KPIMAddrAttributeCount = sizeof(KPIMAddrAttributes) + / sizeof(TPIMAttribute); + +// Supported EMAIL attributes +const TPIMAttribute KPIMEmailAttributes[] = +{ + EPIMContactAttrHome, + EPIMContactAttrWork, + EPIMContactAttrPreferred +}; + +const TPIMAttribute KPIMEmailAttributesCombined = (EPIMContactAttrHome + | EPIMContactAttrWork | EPIMContactAttrPreferred); + +const TInt KPIMEmailAttributeCount = sizeof(KPIMEmailAttributes) + / sizeof(TPIMAttribute); + +// Supported TEL attributes +const TPIMAttribute KPIMTelAttributes[] = +{ + EPIMContactAttrHome, + EPIMContactAttrWork, + EPIMContactAttrMobile, + EPIMContactAttrAuto, + EPIMContactAttrExtVideoCall, + EPIMContactAttrFax, + EPIMContactAttrPager, + EPIMContactAttrPreferred, + EPIMContactAttrSms, + EPIMContactAttrAsst, + EPIMContactAttrOther // We "support" this but it is silently discarded +}; + +const TPIMAttribute KPIMTelAttributesCombined = (EPIMContactAttrHome + | EPIMContactAttrWork | EPIMContactAttrMobile | EPIMContactAttrAuto + | EPIMContactAttrExtVideoCall | EPIMContactAttrFax + | EPIMContactAttrPager | EPIMContactAttrPreferred | EPIMContactAttrSms + | EPIMContactAttrAsst | EPIMContactAttrOther); + +const TInt KPIMTelAttributeCount = sizeof(KPIMTelAttributes) + / sizeof(TPIMAttribute); + +// Note: These are only the supported elements +const TPIMArrayElement KPIMNameElements[] = +{ + EPIMContactNamePrefix, + EPIMContactNameGiven, + EPIMContactExtGivenNameReading, + EPIMContactNameOther, + EPIMContactNameFamily, + EPIMContactExtFamilyNameReading, + EPIMContactNameSuffix +}; + +const TInt KPIMNameElementCount = sizeof(KPIMNameElements) + / sizeof(TPIMArrayElement); + +const TInt KPIMNameArraySize = EPIMContactNameNumElements; + +// Note: All elements are currently supported +const TInt KPIMAddrElementCount = EPIMContactAddrNumElements; + +const TPIMArrayElement KPIMAddrElements[KPIMAddrElementCount] = +{ + EPIMContactAddrPoBox, + EPIMContactAddrExtra, + EPIMContactAddrStreet, + EPIMContactAddrPostalCode, + EPIMContactAddrLocality, + EPIMContactAddrRegion, + EPIMContactAddrCountry +}; + +// Supported VOIP attributes +const TPIMAttribute KPIMVoipAttributes[] = +{ + EPIMContactAttrHome, + EPIMContactAttrWork, + EPIMContactAttrPreferred +}; + +const TInt KPIMVoipAttributeCount = sizeof(KPIMVoipAttributes) + / sizeof(TPIMAttribute); + +// FORWARD DECLARATIONS +class MPIMItem; + +// CLASS DECLARATION + +/** + * This class provides access to the PIM Contacts Model list + */ + +NONSHARABLE_CLASS(CPIMCMAdapterManager): public CBase, + public MPIMContactAdapterManager, + public MPIMAdapterManager +{ +public: // Constructors and a destructor + + /** + * Two-phased constructor. + * + * @param aListName List name. + */ + static CPIMCMAdapterManager* NewL(const TDesC& aListName); + + /** + * destructor + */ + ~CPIMCMAdapterManager(); + +public: // MPIMAdapterManager + + const TDesC& ListNameL(); + + /** + * Provides number of maximum categories supported by the list adapter. + * @return Number of maximum supported categories . + */ + TInt MaxCategories(); + + /** + * Checks whether a specific field is supported by the list adapter. + * @param aField The field to be checked. + * @return ETrue if the given field is supported, EFalse otherwise. + */ + TBool IsSupportedField(TPIMField aField); + + /** + * Provides all fields supported by the list adapter. + * + * @return An array containing all supported fields. + * + * @par Leaving: + * The method leaves on error. Such error always means that the adapter + * is non-functional. + */ + const CArrayFix& GetSupportedFieldsL(); + + /** + * Checks whether a specific attribute is supported by the list adapter. + * @param aAttribute The attribute to be checked. + * @return ETrue if the given attribute is supported, EFalse otherwise. + */ + TBool IsSupportedAttribute(TPIMField aField, + TPIMAttribute aAttribute); + + /** + * Provides all attributes supported by the list adapter. + * + * @return An array containing all supported attributes. + * + * @par Leaving: + * The method leaves on error. Such error always means that the adapter + * is non-functional. + */ + const CArrayFix& GetSupportedAttributesL( + TPIMField aField); + + /** + * Provides attributes supported for a field, combined into single + * integer value. + * + * @param aField The field to which the attributes are associated with. + * + * @return An integer holding the combination of all attributes + * supported for \a aField. + * + * @par Leaving. + * The method leaves on error. Error codes should be interpreted as + * follows: + * @li \c KErrArgument - \a aField is not valid. + */ + TPIMAttribute GetSupportedAttributesCombinedL( + TPIMField aField); + + /** + * Provides all attributes supported for all fields, combined into + * single integer value. + * + * @return An integer holding the combination of all attributes + * supported for all fields. + */ + TPIMAttribute GetAllSupportedAttributesCombined(); + + /** + * Checks whether a specific array element is supported by the list adapter. + * @param aArrayElement The array element to be checked. + * @return ETrue if the given array element is supported, EFalse otherwise. + */ + TBool IsSupportedArrayElement(TPIMField aStringArrayField, + TPIMArrayElement aArrayElement); + + /** + * Provides all array elements supported by the list adapter. + * + * @return An array containing all supported array elements. + * + * @par Leaving: + * The method leaves on error. Such error always means that the adapter + * is non-functional. + */ + const CArrayFix& GetSupportedArrayElementsL( + TPIMField aStringArrayField); + + /** + * Provides the number of maximum values supported for a specific field. + * @param aField The field to be evaluated. + * @return Number of values supported for the field. + */ + TInt MaxValues(TPIMField aField); + + /** + * Provides the array size of a specific string array field. + * The values in a string array field are arrays themselves. + * StringArraySize method returns the number of elements in every value + * of the field. + * + * @param aStringArrayField The string array field to be evaluated. + * @return Number of elements in a single string array value. + * + * @par Leaving: + * The method leaves with \c KErrArgument if \a aStringArrayField + * is not a string array field. + */ + TInt StringArraySizeL(TPIMField aStringArrayField); + + /** + * Provides pointer to a function which implements an algorithm that + * determines the order of two items. + * + * @return Item comparison function. + */ + TPIMItemComparisonFunc ItemOrder(); + +public: // MPIMContactAdapterManager + + /** + * Provides access to the \ref MPIMAdapterManager representation of + * this object. + * + * @return The \ref MPIMAdapterManager representation of this object. + */ + MPIMAdapterManager* GetAdapterManager(); + +public: // new methods + + /** + * Compares two MPIMItemData objects. + * Used for determining + * their ordering in an item enumeration. + * + * @param aFirst first object to compare + * @param aSecond second object to compare + * @return + * @li < 0, if aFirst becomes \b before aSecond + * @li 0, if the objects are equal in the ordering + * @li > 0, if aFirst becomes \b after aSecond + */ + static TInt ItemComparisonFunc(const MPIMItem& aFirst, + const MPIMItem& aSecond); + + /** + * Compares two MPIMItemData objects. + * Used for determining + * their ordering in an item enumeration. + * + * @param aFirst first object to compare + * @param aSecond second object to compare + * @return + * @li < 0, if aFirst becomes \b before aSecond + * @li 0, if the objects are equal in the ordering + * @li > 0, if aFirst becomes \b after aSecond + */ + static TInt ItemComparisonFuncL(const MPIMItem& aFirst, + const MPIMItem& aSecond); + +protected: // New methods + + /** + * Provides data type of a specific field. + * @param aField The field to be evaluated. + * @return Field type. + */ + TPIMFieldDataType GetFieldDataTypeL(TPIMField aField); + +protected: + /** + * C++ default constructor. + */ + CPIMCMAdapterManager(); + + /** + * Symbian 2nd phase constructor + */ + void ConstructL(const TDesC& aListName); + +private: // private methods + TBool IsSupportedAttributeL(TPIMField aField, + TPIMAttribute aAttribute); + TBool IsSupportedArrayElementL(TPIMField aArrayField, + TPIMArrayElement aElement); + +private: // members + + /** List name, owned. The name does not change after initialization. */ + TDesC* iListName; + + // List of supported fields by this adapter, owned. + CArrayFixFlat* iSupportedFields; + + // List of attributes for those fields which support no attributes, + // owned. + CArrayFixFlat* iNoAttributes; + + // List of attributes for address and url fields, owned. + CArrayFixFlat* iAddrAttributes; + + // List of attributes for the email field, owned. + CArrayFixFlat* iEmailAttributes; + + // List of attributes for the tel field, owned. + CArrayFixFlat* iTelAttributes; + + // List of supported name array elements, owned. + CArrayFixFlat* iNameElements; + + // List of supported address array elements, owned. + CArrayFixFlat* iAddrElements; + + // List of attributes for the voip field, woned. + CArrayFixFlat* iVoipAttributes; + +}; + +#endif // CPIMCMADAPTERMANAGER_H +// End of File