syncmlfw/ds/hostserver/dshostserverbase/src/Nsmldsdataproviderarray.cpp
changeset 0 b497e44ab2fc
equal deleted inserted replaced
-1:000000000000 0:b497e44ab2fc
       
     1 /*
       
     2 * Copyright (c) 2005 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:  array for storing dataproviders and datastores.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include <s32std.h>
       
    21 
       
    22 #include <nsmldebug.h>
       
    23 #include "nsmldshostconstants.h"
       
    24 #include "NSmlAdapterLog.h"
       
    25 #include "Nsmldsdataproviderarray.h"
       
    26 #include "Nsmldsasyncrequesthandler.h"
       
    27 
       
    28 #ifdef __HOST_SERVER_MTEST__
       
    29 #include "../../stif/DSHostServerTest/inc/fakedataprovider.h"
       
    30 #else
       
    31 #include <SmlDataProvider.h>
       
    32 #endif
       
    33 
       
    34 // ======================================= MEMBER FUNCTIONS =======================================
       
    35 
       
    36 // ------------------------------------------------------------------------------------------------
       
    37 // RNSmlDSDataProviderArray::RNSmlDSDataProviderArray()
       
    38 // ------------------------------------------------------------------------------------------------
       
    39 RNSmlDSDataProviderArray::RNSmlDSDataProviderArray()
       
    40     {
       
    41     }
       
    42 
       
    43 // ------------------------------------------------------------------------------------------------
       
    44 // RNSmlDSDataProviderArray::ResetAndDestroy
       
    45 // ------------------------------------------------------------------------------------------------
       
    46 void RNSmlDSDataProviderArray::ResetAndDestroy()
       
    47     {
       
    48     for ( TInt i = 0; i < Count(); i++ )
       
    49         {
       
    50         TNSmlDSDataProviderElement* DPI = ( *this )[i];
       
    51         RDataStoreElementArray* DSA = DPI->iDataStores;
       
    52         	
       
    53         for ( TInt j = 0; j < DSA->Count(); j++ )
       
    54             {
       
    55             TNSmlDSDataStoreElement* DSI = ( *DSA )[j];
       
    56             delete Destroy( DSI );
       
    57             }
       
    58         DSA->Close();
       
    59         delete DSA;
       
    60         DPI->iDataStores = NULL;
       
    61         delete DPI->iDataprovider;
       
    62         }
       
    63     RPointerArray<TNSmlDSDataProviderElement>::ResetAndDestroy();
       
    64     }
       
    65 
       
    66 // ------------------------------------------------------------------------------------------------
       
    67 // RNSmlDSDataProviderArray::DataProvider
       
    68 // ------------------------------------------------------------------------------------------------
       
    69 CSmlDataProvider* RNSmlDSDataProviderArray::DataProvider( TSmlDataProviderId aId )
       
    70     {
       
    71     TNSmlDSDataProviderElement* findDPI = DataProviderElement( aId );
       
    72     if ( findDPI )
       
    73         {
       
    74         return findDPI->iDataprovider;
       
    75         }
       
    76     return NULL;
       
    77     }
       
    78     
       
    79 // ------------------------------------------------------------------------------------------------
       
    80 // RNSmlDSDataProviderArray::DataProviderElement
       
    81 // ------------------------------------------------------------------------------------------------
       
    82 TNSmlDSDataProviderElement* RNSmlDSDataProviderArray::DataProviderElement( TSmlDataProviderId aId )
       
    83     {
       
    84     for ( TInt i = 0; i < Count(); i++ )
       
    85         {
       
    86         TNSmlDSDataProviderElement* test = ( *this )[i];
       
    87         if ( test->iDataprovider->Identifier() == aId )
       
    88             {
       
    89             return test;
       
    90             }
       
    91         }
       
    92     return NULL;
       
    93     }
       
    94 
       
    95 // ------------------------------------------------------------------------------------------------
       
    96 // RNSmlDSDataProviderArray::DataStore
       
    97 // ------------------------------------------------------------------------------------------------
       
    98 CSmlDataStore* RNSmlDSDataProviderArray::DataStore( TSmlDataProviderId aId, 
       
    99 	const TDesC& aStoreName )
       
   100     {
       
   101     TNSmlDSDataProviderElement* findDPI = DataProviderElement( aId );
       
   102 
       
   103     TNSmlDSDataStoreElement* findDSI = DataStoreElement( findDPI, aStoreName );
       
   104     if ( findDSI )
       
   105         {
       
   106         return findDSI->iDataStore;
       
   107         }
       
   108 
       
   109     return NULL;
       
   110     }
       
   111 
       
   112 // ------------------------------------------------------------------------------------------------
       
   113 // RNSmlDSDataProviderArray::DataStoreElement
       
   114 // ------------------------------------------------------------------------------------------------
       
   115 TNSmlDSDataStoreElement* RNSmlDSDataProviderArray::DataStoreElement( 
       
   116 	const TNSmlDSDataProviderElement* aItem, const TDesC& aStoreName )
       
   117     {
       
   118     if ( !aItem )
       
   119     	{
       
   120     	return NULL;
       
   121     	}
       
   122 
       
   123     RDataStoreElementArray* DSA = aItem->iDataStores;
       
   124     for ( TInt i = 0 ; i < DSA->Count(); i++ )
       
   125         {
       
   126         TNSmlDSDataStoreElement* test = ( *DSA )[i];
       
   127         if ( test->StoreName() == aStoreName )
       
   128             {
       
   129             return test;
       
   130             }
       
   131         }
       
   132     return NULL;
       
   133     }
       
   134     
       
   135 // ------------------------------------------------------------------------------------------------
       
   136 // RNSmlDSDataProviderArray::InsertL
       
   137 // ------------------------------------------------------------------------------------------------
       
   138 TInt RNSmlDSDataProviderArray::InsertL( CSmlDataProvider* aDataprovider )
       
   139     {
       
   140     if ( !aDataprovider )
       
   141     	{
       
   142     	User::Leave( KErrArgument );
       
   143     	}
       
   144 
       
   145     TInt ret( KErrAlreadyExists );
       
   146     
       
   147     TNSmlDSDataProviderElement* findDPI = DataProviderElement( aDataprovider->Identifier() );
       
   148     if ( !findDPI )
       
   149         {
       
   150         findDPI = new ( ELeave ) TNSmlDSDataProviderElement();
       
   151         CleanupStack::PushL( findDPI );
       
   152         findDPI->iDataStores = new ( ELeave ) RDataStoreElementArray();
       
   153         CleanupStack::PushL( findDPI->iDataStores );
       
   154         
       
   155         findDPI->iDataprovider = aDataprovider;
       
   156         AppendL ( findDPI );
       
   157         CleanupStack::Pop( 2 ); //findDPI->iDataStores, findDPI
       
   158         
       
   159         ret = KErrNone;
       
   160         }
       
   161     
       
   162     return ret;    
       
   163     }
       
   164 
       
   165 // ------------------------------------------------------------------------------------------------
       
   166 // RNSmlDSDataProviderArray::InsertL
       
   167 // ------------------------------------------------------------------------------------------------
       
   168 TNSmlDSDataStoreElement* RNSmlDSDataProviderArray::InsertL( 
       
   169 	TNSmlDSDataProviderElement* aDataproviderItem, 
       
   170 	CSmlDataStore* aDataStore, 
       
   171 	HBufC* aDataStoreName )
       
   172     {
       
   173     if ( !aDataproviderItem ) 
       
   174     	{
       
   175     	User::Leave( KErrArgument );
       
   176     	}
       
   177     if ( !aDataStore ) return NULL;
       
   178 
       
   179     TNSmlDSDataStoreElement* findDSI = DataStoreElement( aDataproviderItem, *aDataStoreName );
       
   180     if ( findDSI )
       
   181         {
       
   182         User::Leave( KErrAlreadyExists );
       
   183         }
       
   184     
       
   185     // Appending new TNSmlDSDataStoreElement to array
       
   186     findDSI = new ( ELeave ) TNSmlDSDataStoreElement( aDataStoreName );
       
   187     CleanupStack::PushL( findDSI );
       
   188     aDataproviderItem->iDataStores->AppendL( findDSI );
       
   189     findDSI->iDataStore = aDataStore;
       
   190     CleanupStack::Pop( findDSI );
       
   191         
       
   192     return findDSI;
       
   193     }
       
   194 
       
   195 // ------------------------------------------------------------------------------------------------
       
   196 // RNSmlDSDataProviderArray::Remove
       
   197 // ------------------------------------------------------------------------------------------------
       
   198 CNSmlDSAsyncRequestHandler* RNSmlDSDataProviderArray::Remove( 
       
   199 	TNSmlDSDataProviderElement* aDataproviderItem, 
       
   200 	TNSmlDSDataStoreElement* aDataStoreItem )
       
   201 	{
       
   202 	if ( !aDataproviderItem || !aDataStoreItem )
       
   203 		{
       
   204 		return NULL;
       
   205 		}
       
   206 		
       
   207 	if ( !aDataproviderItem->iDataStores )
       
   208 		{
       
   209 		return NULL;
       
   210 		}
       
   211 	
       
   212 	TInt ind ( aDataproviderItem->iDataStores->Find( aDataStoreItem ) );
       
   213 	if ( ind != KErrNotFound )
       
   214 		{
       
   215 		aDataproviderItem->iDataStores->Remove( ind );
       
   216 		}
       
   217 		
       
   218 	return Destroy( aDataStoreItem );
       
   219 	}
       
   220 	
       
   221 // ------------------------------------------------------------------------------------------------
       
   222 // RNSmlDSDataProviderArray::Destroy
       
   223 // frees the memory reserver for aDataStoreItem except iDSAO, which is returned. 
       
   224 // ------------------------------------------------------------------------------------------------
       
   225 CNSmlDSAsyncRequestHandler* RNSmlDSDataProviderArray::Destroy( 
       
   226 	TNSmlDSDataStoreElement*& aDataStoreItem )
       
   227 	{
       
   228 	delete aDataStoreItem->iDataStore;
       
   229 	aDataStoreItem->iDataStore = NULL;
       
   230 	
       
   231     if ( aDataStoreItem->iBatchItemUids )
       
   232         {
       
   233         aDataStoreItem->iBatchItemUids->Close();
       
   234         delete aDataStoreItem->iBatchItemUids;
       
   235         aDataStoreItem->iBatchItemUids = NULL;
       
   236         }
       
   237         
       
   238    	delete aDataStoreItem->iStoreName;
       
   239     aDataStoreItem->iStoreName = NULL;
       
   240     
       
   241     delete aDataStoreItem->iDSFormat;
       
   242     aDataStoreItem->iDSFormat = NULL;
       
   243     
       
   244     delete aDataStoreItem->iAdpLog;
       
   245     aDataStoreItem->iAdpLog = NULL;
       
   246         
       
   247     CNSmlDSAsyncRequestHandler* dsao = aDataStoreItem->iDSAO;
       
   248     if ( dsao )
       
   249     	{
       
   250     	dsao->iDSItem = NULL;
       
   251     	}
       
   252 
       
   253     delete aDataStoreItem;
       
   254     aDataStoreItem = NULL;
       
   255     return dsao;
       
   256 	}
       
   257 	
       
   258 // End of File