emailcontacts/contactactionservice/src/CFscFieldPropertyArray.cpp
changeset 0 8466d47a6819
equal deleted inserted replaced
-1:000000000000 0:8466d47a6819
       
     1 /*
       
     2 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Field property array for field types.
       
    15  *
       
    16 */
       
    17 
       
    18 
       
    19 #include "emailtrace.h"
       
    20 #include "CFscFieldPropertyArray.h"
       
    21 
       
    22 // Phonebook 2
       
    23 #include "FscPresentationUtils.h"
       
    24 #include "CFscFieldProperty.h"
       
    25 #include "CFscFieldOrderingManager.h"
       
    26 #include <FscActionUtils.rsg>
       
    27 #include "CFscFieldPropertyGroup.h"
       
    28 #include <Pbk2ContentIdentifiers.hrh>
       
    29 
       
    30 // Virtual Phonebook
       
    31 #include <MVPbkFieldType.h>
       
    32 #include <TVPbkFieldVersitProperty.h>
       
    33 #include <CVPbkFieldTypeSelector.h>
       
    34 #include <VPbkEng.rsg>
       
    35 
       
    36 // System includes
       
    37 #include <barsc.h>
       
    38 #include <barsread.h>
       
    39 #include <featmgr.h>
       
    40 #include <eikenv.h>
       
    41 #include <apgcli.h>
       
    42 #include <eikappui.h>
       
    43 #include <eikapp.h>
       
    44 //<cmail> hardcoded paths removal
       
    45 #include <data_caging_path_literals.hrh>
       
    46 #include <bautils.h>
       
    47 //</cmail>
       
    48 
       
    49 #include <coemain.h>
       
    50 
       
    51 // CONSTANTS DECLARATIONS
       
    52 //<cmail> hard coded path removed
       
    53 _LIT( KFscRscFileName, "fscactionutils.rsc" );
       
    54 //</cmail>
       
    55 
       
    56 
       
    57 // ---------------------------------------------------------------------------
       
    58 // CFscFieldPropertyArray::CFscFieldPropertyArray
       
    59 // ---------------------------------------------------------------------------
       
    60 //
       
    61 inline CFscFieldPropertyArray::CFscFieldPropertyArray()
       
    62     {
       
    63     FUNC_LOG;
       
    64     }
       
    65 
       
    66 // ---------------------------------------------------------------------------
       
    67 // CFscFieldPropertyArray::ConstructL
       
    68 // ---------------------------------------------------------------------------
       
    69 //
       
    70 inline void CFscFieldPropertyArray::ConstructL(
       
    71         const MVPbkFieldTypeList& aSupportedFieldTypeList)
       
    72     {
       
    73     FUNC_LOG;
       
    74 
       
    75     /*TFileName dllFileName;
       
    76     Dll::FileName( dllFileName );
       
    77     TParse parse;
       
    78     User::LeaveIfError(
       
    79             parse.Set( KFscRscFilePath, &dllFileName, NULL ) );
       
    80     TFileName resourceFileName( parse.FullName() );*/
       
    81     //<cmail> hardcoded removed, BaflUtils::NearestLanguageFile adds drive letter
       
    82     TFileName resourceFileName( KDC_RESOURCE_FILES_DIR );
       
    83     resourceFileName.Append(KFscRscFileName);
       
    84     BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), resourceFileName );
       
    85     TInt offset = CCoeEnv::Static()->AddResourceFileL( resourceFileName );    
       
    86     //</cmail>
       
    87     
       
    88     
       
    89     // Read field type presentation order information
       
    90     TResourceReader reader;
       
    91     CCoeEnv::Static()->CreateResourceReaderLC(reader, 
       
    92     R_FSC_FIELDTYPE_PRESENTATION_ORDERS);
       
    93 
       
    94     CFscFieldOrderingManager* orderings =
       
    95             CFscFieldOrderingManager::NewL(reader);
       
    96     CleanupStack::PopAndDestroy(); // R_FSC_FIELDTYPE_PRESENTATION_ORDERS
       
    97     CleanupStack::PushL(orderings);
       
    98 
       
    99     // Read field property resource strucutre array
       
   100     CCoeEnv::Static()->CreateResourceReaderLC(reader, R_FSC_FIELD_PROPERTIES);
       
   101     ReadFieldPropertiesL(reader, aSupportedFieldTypeList, *orderings);
       
   102 
       
   103     CCoeEnv::Static()->DeleteResourceFile(offset);
       
   104 
       
   105     CleanupStack::PopAndDestroy(2);// orderings, r_fsc_field_properties
       
   106     }
       
   107 
       
   108 // ---------------------------------------------------------------------------
       
   109 // CFscFieldPropertyArray::NewL
       
   110 // ---------------------------------------------------------------------------
       
   111 //
       
   112  CFscFieldPropertyArray* CFscFieldPropertyArray::NewL
       
   113 (const MVPbkFieldTypeList& aSupportedFieldTypeList)
       
   114     {
       
   115     FUNC_LOG;
       
   116     CFscFieldPropertyArray* self = new(ELeave) CFscFieldPropertyArray;
       
   117     CleanupStack::PushL(self);
       
   118     self->ConstructL( aSupportedFieldTypeList);
       
   119     CleanupStack::Pop(self);
       
   120     return self;
       
   121     }
       
   122 
       
   123 // ---------------------------------------------------------------------------
       
   124 // CFscFieldPropertyArray::NewL
       
   125 // ---------------------------------------------------------------------------
       
   126 //
       
   127  CFscFieldPropertyArray* CFscFieldPropertyArray::NewL(
       
   128         const MVPbkFieldTypeList& aSupportedFieldTypeList,
       
   129         TResourceReader& aReader)
       
   130     {
       
   131     FUNC_LOG;
       
   132     CFscFieldPropertyArray* self = new(ELeave) CFscFieldPropertyArray;
       
   133     CleanupStack::PushL(self);
       
   134     CFscFieldOrderingManager* orderings =
       
   135     self->CreateFieldOrderingsLC();
       
   136     self->ReadFieldPropertiesL( aReader, aSupportedFieldTypeList, *orderings );
       
   137     CleanupStack::PopAndDestroy( orderings );
       
   138     CleanupStack::Pop(self);
       
   139     return self;
       
   140     }
       
   141 
       
   142 // ---------------------------------------------------------------------------
       
   143 // CFscFieldPropertyArray::~CFscFieldPropertyArray
       
   144 // ---------------------------------------------------------------------------
       
   145 //
       
   146 CFscFieldPropertyArray::~CFscFieldPropertyArray()
       
   147     {
       
   148     FUNC_LOG;
       
   149     iFieldProperties.ResetAndDestroy();
       
   150     }
       
   151 
       
   152 // ---------------------------------------------------------------------------
       
   153 // CFscFieldPropertyArray::FindProperty
       
   154 // ---------------------------------------------------------------------------
       
   155 //
       
   156 const MPbk2FieldProperty* CFscFieldPropertyArray::FindProperty(
       
   157         const MVPbkFieldType& aFieldType) const
       
   158     {
       
   159     FUNC_LOG;
       
   160     const CFscFieldProperty* result= NULL;
       
   161     const TInt count = iFieldProperties.Count();
       
   162     for (TInt i = 0; i < count; ++i)
       
   163         {
       
   164         const CFscFieldProperty* property = iFieldProperties[i];
       
   165         if (property->FieldType().IsSame(aFieldType))
       
   166             {
       
   167             result = property;
       
   168             break;
       
   169             }
       
   170         }
       
   171 
       
   172     return result;
       
   173     }
       
   174 
       
   175 // ---------------------------------------------------------------------------
       
   176 // CFscFieldPropertyArray::Count
       
   177 // ---------------------------------------------------------------------------
       
   178 //
       
   179 TInt CFscFieldPropertyArray::Count() const
       
   180     {
       
   181     FUNC_LOG;
       
   182     return iFieldProperties.Count();
       
   183     }
       
   184 
       
   185 // ---------------------------------------------------------------------------
       
   186 // CFscFieldPropertyArray::At
       
   187 // ---------------------------------------------------------------------------
       
   188 //
       
   189 const MPbk2FieldProperty& CFscFieldPropertyArray::At(TInt aIndex) const
       
   190     {
       
   191     FUNC_LOG;
       
   192     return *iFieldProperties[aIndex];
       
   193     }
       
   194 
       
   195 // ---------------------------------------------------------------------------
       
   196 // CFscFieldPropertyArray::ReadFieldPropertiesL
       
   197 // ---------------------------------------------------------------------------
       
   198 //
       
   199 void CFscFieldPropertyArray::ReadFieldPropertiesL(TResourceReader& aReader,
       
   200         const MVPbkFieldTypeList& aSupportedFieldTypeList,
       
   201         CFscFieldOrderingManager& aOrderingManager)
       
   202     {
       
   203     FUNC_LOG;
       
   204     // aSupportedFieldTypeList is a list of the supported field type of the used store
       
   205     const TInt count = aReader.ReadInt16();
       
   206     for (TInt i = 0; i < count; ++i)
       
   207         {
       
   208         CFscFieldProperty* property = CFscFieldProperty::NewLC(aReader,
       
   209                 aSupportedFieldTypeList, aOrderingManager);
       
   210         TBool doNotAdd = EFalse;
       
   211         if (property->IsSupported())
       
   212             {
       
   213             if (!FeatureManager::FeatureSupported(KFeatureIdJapanese))
       
   214                 {
       
   215                 // Non-Japanese variants use all the other properties but
       
   216                 // Japanese reading fields
       
   217                 const MVPbkFieldType* lastNameReading =
       
   218                         aSupportedFieldTypeList.Find(
       
   219                         R_VPBK_FIELD_TYPE_LASTNAMEREADING);
       
   220                 const MVPbkFieldType* firstNameReading =
       
   221                         aSupportedFieldTypeList.Find(
       
   222                         R_VPBK_FIELD_TYPE_FIRSTNAMEREADING);
       
   223                 const MVPbkFieldType& type = property->FieldType();
       
   224                 if ( (lastNameReading && lastNameReading->IsSame(type) )
       
   225                         || firstNameReading && firstNameReading->IsSame(type) )
       
   226                     {
       
   227                     doNotAdd = ETrue;
       
   228                     }
       
   229                 }
       
   230             }
       
   231         else
       
   232             {
       
   233             doNotAdd = ETrue;
       
   234             }
       
   235 
       
   236         if (doNotAdd)
       
   237             {
       
   238             CleanupStack::PopAndDestroy(property);
       
   239             }
       
   240         else
       
   241             {
       
   242             iFieldProperties.AppendL(property);
       
   243             CleanupStack::Pop(property);
       
   244             }
       
   245         }
       
   246     }
       
   247 
       
   248 // ---------------------------------------------------------------------------
       
   249 // CFscFieldPropertyArray::CreateFieldOrderingsLC
       
   250 // ---------------------------------------------------------------------------
       
   251 //
       
   252 CFscFieldOrderingManager* CFscFieldPropertyArray::CreateFieldOrderingsLC(void)
       
   253     {
       
   254     FUNC_LOG;
       
   255 
       
   256     /*TFileName dllFileName;
       
   257     Dll::FileName( dllFileName );
       
   258     TParse parse;
       
   259     User::LeaveIfError(
       
   260             parse.Set( GetFileDir, &dllFileName, NULL ) );
       
   261     TFileName resourceFileName( parse.FullName() );*/
       
   262     //<cmail> hardcoded removed
       
   263     TFileName resourceFileName( KDC_RESOURCE_FILES_DIR );
       
   264     resourceFileName.Append(KFscRscFileName);
       
   265     BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), resourceFileName );
       
   266     TInt offset = CCoeEnv::Static()->AddResourceFileL( resourceFileName );    
       
   267     //</cmail>
       
   268     
       
   269     // Read field type presentation order information
       
   270     TResourceReader reader;
       
   271     CCoeEnv::Static()->CreateResourceReaderLC(reader,
       
   272             R_FSC_FIELDTYPE_PRESENTATION_ORDERS);
       
   273     CFscFieldOrderingManager* orderings =
       
   274             CFscFieldOrderingManager::NewL(reader);
       
   275 
       
   276     CCoeEnv::Static()->DeleteResourceFile(offset);
       
   277 
       
   278     CleanupStack::PopAndDestroy(2);// R_FSC_FIELDTYPE_PRESENTATION_ORDERS, resFile
       
   279     CleanupStack::PushL(orderings);
       
   280     return orderings;
       
   281     }
       
   282 
       
   283 // End of File
       
   284