--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CFieldFactory.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,140 @@
+/*
+* 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: The virtual phonebook field factory
+*
+*/
+
+
+
+#ifndef CFIELDFACTORY_H
+#define CFIELDFACTORY_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <MVPbkFieldType.h>
+#include <VPbkFieldType.hrh>
+
+// FORWARD DECLARATIONS
+class CContactItem;
+class CContactItemField;
+class TVPbkFieldVersitProperty;
+class RFs;
+
+namespace VPbkCntModel {
+
+
+// FORWARD DECLARATIONS
+class CFieldTypeMap;
+
+// CLASS DECLARATIONS
+
+/**
+ * Virtual Phonebook field type -> Contact Model field factory.
+ */
+NONSHARABLE_CLASS(CFieldFactory) : public CBase,
+ public MVPbkFieldTypeList
+ {
+ public: // Constructor and destructor
+ /**
+ * Creates a new instance of this class.
+ *
+ * @param aFieldTypeMap field type mapper.
+ * @param aSystemTemplate Contact Database system template. This
+ * object takes ownership of the system
+ * template unless this function leaves.
+ * @param aMasterFieldTypeList Master field type list from CVPbkContactManager.
+ * @return a new instance of this class.
+ */
+ static CFieldFactory* NewL( const CFieldTypeMap& aFieldTypeMap,
+ CContactItem* aSystemTemplate,
+ const MVPbkFieldTypeList& aMasterFieldTypeList,
+ RFs& aFs );
+
+ /**
+ * Destructor.
+ */
+ ~CFieldFactory();
+
+ public: // New functions
+ /**
+ * Creates and returns a new Contact Model field based on Virtual
+ * Phonebook generic field type.
+ *
+ * A field definition that matches the field type is searched from the
+ * system template that was passed as a construction parameter to this
+ * object.
+ *
+ * @param aFieldType type of the field to create.
+ * @return a new Contact Model field. Caller takes ownership of the
+ * returned object. May return NULL if the field type is not
+ * supported by Contact Model.
+ */
+ CContactItemField* CreateFieldLC( const MVPbkFieldType& aFieldType ) const;
+
+ /**
+ * Finds and returns matching Contact Model system template field base on
+ * Virtual Phonebook generic field type.
+ *
+ * @param aFieldType type of the field to match.
+ * @return Matching Contact Model field if found, NULL otherwise.
+ */
+ const CContactItemField* FindField( const MVPbkFieldType& aFieldType ) const;
+
+ public: // From MVPbkFieldTypeList
+ TInt FieldTypeCount() const;
+ const MVPbkFieldType& FieldTypeAt( TInt aIndex ) const;
+ TBool ContainsSame( const MVPbkFieldType& aFieldType ) const;
+ TInt MaxMatchPriority() const;
+ const MVPbkFieldType* FindMatch(
+ const TVPbkFieldVersitProperty& aMatchProperty,
+ TInt aMatchPriority) const;
+ const MVPbkFieldType* FindMatch(
+ TVPbkNonVersitFieldType aNonVersitType ) const;
+ const MVPbkFieldType* Find( TInt aFieldTypeResId ) const;
+
+ private: // Data types
+ class TFieldAndTypeTuple;
+
+ private: // Constructors
+ CFieldFactory();
+ void ConstructL(const CFieldTypeMap& aFieldTypeMap,
+ const CContactItem& aSystemTemplate,
+ const MVPbkFieldTypeList& aMasterFieldTypeList,
+ RFs& aFs );
+ void InsertInMasterFieldTypeOrderL( TFieldAndTypeTuple& aMapping,
+ const MVPbkFieldTypeList& aMasterFieldTypeList );
+ TInt IndexOfTypeInMasterList( const MVPbkFieldType& aType,
+ const MVPbkFieldTypeList& aMasterFieldTypeList );
+ void DoInsertMappingTupleL(
+ const MVPbkFieldTypeList& aMasterFieldTypeList,
+ const CFieldTypeMap& aFieldTypeMap,
+ const CContactItemField& field);
+
+ private: // Data
+ //Own: field and type mapping array
+ RArray<TFieldAndTypeTuple> iFieldAndTypeMapping;
+ ///Own: System template instance. Owned by this object.
+ CContactItem* iSystemTemplate;
+ ///Own: max match priority
+ TInt iMaxMatchPriority;
+ ///Own: non system template fields
+ RPointerArray<const CContactItemField> iNonSystemTemplateFields;
+ };
+
+} // namespace VPbkCntModel
+
+#endif // CFIELDFACTORY_H
+
+//End of file