internetradio2.0/networkcontrollerinc/irfilteredapreader.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 19 Apr 2010 14:01:53 +0300
changeset 0 09774dfdd46b
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* 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:  Used to read in only access points with the desired characteristics. 
*
*/


#ifndef CIRFILTEREDAPREADER_H
#define CIRFILTEREDAPREADER_H

#include <commsdattypesv1_1.h>

using namespace CommsDat;

/**
 *  Reads the access points for Network Controller component.
 * 
 *  Returns only those entries from IAP table that are referenced from 
 *  WAP_ACCESS_POINT table.
 * 
 *  In addition to that an instance of class performs filtering based on
 *  configured criteria.   
  *
 */
NONSHARABLE_CLASS( CIRFilteredApReader ): public CBase
    {
public:
    // The filtering flags
    static const TInt KIRFilterNone         = 0x0;
    static const TInt KIRFilterWAPOnly      = 0x1;
    static const TInt KIRFilterWAPMandatory = 0x2;
    static const TInt KIRFilterEasyWLAN     = 0x4;
    
public:
    /**
     * Two-phased constructor.
     * @param aFilterFlags Defines the filtering criteria applied to entries
     * @return Instance of CIRFilteredApReader
     */
    static CIRFilteredApReader* NewL( TInt aFilterFlags );

    /**
     * Two-phased constructor.
     * @param aFilterFlags Defines the filtering criteria applied to entries
     * @return Instance of CIRFilteredApReader
     */
    static CIRFilteredApReader* NewLC( TInt aFilterFlags );

    /**
     * Gets the first appropriate IAP record.
     * Initialises the required objects for iteration.
     * 
     * Only those records that have the desired characteristics are returned.
     *
     * @return The suitable record, if found. NULL, if no record was found
     */
    CCDIAPRecord* FirstRecordL();    

    /**
     * Gets the next appropriate IAP record.
     * Only those records that have the desired characteristics are returned.
     *
     * @return The suitable record, if found. NULL, if no record was found
     */
    CCDIAPRecord* NextRecordL();

private:
    /**
     * C++ Default constructor.
     * 
     * @param aFilterFlags Defines the filtering criteria applied to entries 
     */
    CIRFilteredApReader( TInt aFilterFlags );

    /**
     * Second phase constructor
     */
    void ConstructL();

    /**
     * Destructor.
     */
    ~CIRFilteredApReader();
    
    /**
     * Returns the current record.
     * 
     * @return The current record.
     */
    CCDWAPAccessPointRecord* CurrentRecordL() const;

    /**
     * Moves the iterator to next record in WAPAccessPoint table.
     * 
     * @return ETrue if there was more records, EFalse if not.
     */
    TBool MoveToNextRecord();

    /**
     * Loads items from WAPIPBearer and IAP tables that are
     * referenced by the current record.
     */
    TBool LoadCurrentApDetailsL();
    
    /**
     * Performs the filtering.
     * 
     * Applies the different filtering criteria according to configured
     * policy (flags).
     *
     * @return ETrue if the record was let through, EFalse if the record was filtered out.
     */
    TBool FilterL() const;

    /**
     * Filters the access point entries that have the mandatory WAP parameters.
     *
     * Currently only GatewayAddress of WAPIPBearer is checked.
     * 
     * Examining the StartPage field of WAPAccessPoint table proved to be 
     * too strict filter.  
     * 
     * @return ETrue if the record was let through, EFalse if the record was filtered out.
     */
    TBool FilterWAPMandatoryL() const;
    
    /**
     * Filters the access point entries that use IAPService, whose type is WAPOnly.
     * 
     * @return ETrue if the record was let through, EFalse if the record was filtered out.
     */
    TBool FilterWAPOnlyL() const;

    /**
     * Filters the access point entries whose name is "EasyWlan".
     * 
     * This filtering should be done in more clever way.
     * 
     * @return ETrue if the record was let through, EFalse if the record was filtered out.
     */
    TBool FilterEasyWlanL() const;

private: // data

    /**
     * The database accessor.
     * Owned.
     */
    CMDBSession* iDbSession;
    
    /**
     * All the records in WAPAccessPoint table. 
     * Owned.
     */
    CMDBRecordSet<CCDWAPAccessPointRecord>* iWapTable;
    
    /**
     * Index of the current record.
     */
    TInt iWapTableIndex;
    
    /**
     * WAPIPBearer entry associated with current record.
     * Owned.
     */
    CCDWAPIPBearerRecord* iWapIpBearerRecord;

    /**
     * IAP record associated with current record.
     * Owned.
     */
    CCDIAPRecord* iIapRecord;
    
    /**
     * Flags that define the applied filtering criteria.
     */
    TInt iFilterFlags;
    };
#endif // CIRFILTEREDAPREADER_H