wlanutilities/wlansniffer/wlaninfosorting/src/wsfwlaninfoarrayvisitor.cpp
branchRCL_3
changeset 25 f28ada11abbf
parent 0 56b72877c1cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/wlaninfosorting/src/wsfwlaninfoarrayvisitor.cpp	Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 2007-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:  Implementation of CWsfWlanInfoArrayVisitor
+*
+*/
+
+
+
+//  EXTERNAL INCLUDES
+#include <badesca.h> 
+#include <e32base.h> 
+#include <eikenv.h>
+#include <bautils.h>
+#include <data_caging_path_literals.hrh>
+
+//  CLASS HEADER
+#include "wsfwlaninfoarrayvisitor.h"
+
+//INTERNAL INCLUDES
+#include "wsfwlaninfosortingbrand.h"
+#include "wsfwlaninfosortingdefault.h"
+#include "wsfwlaninfosortingblacklist.h"
+#include "wsfwlaninfoarray.h"
+#include "wsfwlaninfosortingdbchangenotifier.h"
+
+
+/**
+* Blacklist database identifier
+*/
+_LIT( KBlacklistDbFormat, "SECURE[2000cf30]" );
+
+/**
+* Blacklist database file name
+*/
+_LIT( KBlacklistDbName, "c:wsfblacklist.db" );
+
+/**
+* ROM folder
+*/
+_LIT( KDriveZ, "z:" );
+
+/**
+* Resource file name
+*/
+_LIT( KResourceFileName, "wsfwlaninfosorting.rsc" );
+
+
+#ifdef _DEBUG
+    _LIT( KCWsfWlanInfoArrayVisitor, "arrayvisitor" );
+	#define __ASSERTD( cond ) __ASSERT_DEBUG( (cond),  User::Panic( KCWsfWlanInfoArrayVisitor, __LINE__) )
+#else
+    #define __ASSERTD( cond )
+#endif //_DEBUG
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::NewLC
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfWlanInfoArrayVisitor* CWsfWlanInfoArrayVisitor::NewLC( 
+                                                        const TBool aReadOnly )
+	{
+	CWsfWlanInfoArrayVisitor* thisPtr = new (ELeave) CWsfWlanInfoArrayVisitor( 
+	                                                               aReadOnly );
+	CleanupStack::PushL( thisPtr );
+	thisPtr->ConstructL();
+	return thisPtr;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfWlanInfoArrayVisitor* CWsfWlanInfoArrayVisitor::NewL( 
+                                                        const TBool aReadOnly ) 
+	{
+	CWsfWlanInfoArrayVisitor* thisPtr = NewLC( aReadOnly );
+	CleanupStack::Pop();
+	return thisPtr;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::~CWsfWlanInfoArrayVisitor
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfWlanInfoArrayVisitor::~CWsfWlanInfoArrayVisitor()  
+	{
+	delete iDbChangeNotifier;
+	delete iBlackListSorting;
+	delete iBrandSorting; 
+	delete iDefaultSorting;
+	
+	iFilterDb.Close();
+	
+	
+	iDbms.Close();
+	iFileServer.Close();
+	
+	// let the resourcefile go..
+	if ( iResourceFileOffset != -1 )
+		{
+		iCoeEnv.DeleteResourceFile( iResourceFileOffset );			
+		}
+
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::CWsfWlanInfoArrayVisitor
+// ----------------------------------------------------------------------------
+//
+CWsfWlanInfoArrayVisitor::CWsfWlanInfoArrayVisitor( const TBool aReadOnly ): 
+    TKeyArrayFix( 0, ECmpNormal ),
+	iCoeEnv( *CEikonEnv::Static() ),
+	iResourceFileOffset( -1 ),
+	iReadOnly( aReadOnly )
+	{
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanInfoArrayVisitor::ConstructL()
+	{
+    TFileName resourceFileName;
+
+    resourceFileName.Append( KDriveZ );
+    resourceFileName.Append( KDC_RESOURCE_FILES_DIR );   
+    resourceFileName.Append( KResourceFileName );
+
+    BaflUtils::NearestLanguageFile( iCoeEnv.FsSession(), resourceFileName );
+    iResourceFileOffset = iCoeEnv.AddResourceFileL( resourceFileName );
+
+	
+	User::LeaveIfError( iFileServer.Connect() );
+	User::LeaveIfError( iDbms.Connect() );
+	
+	OpenDataBaseL();
+
+	
+	iDefaultSorting = CWsfWlanInfoSortingDefault::NewL();
+	iBrandSorting = CWsfWlanInfoSortingBrand::NewL();
+	iBlackListSorting = CWsfWlanInfoSortingBlackList::NewL( iFilterDb );
+	
+	iDbChangeNotifier = CWsfWlanInfoSortingDbChangeNotifier::NewL( iFilterDb );
+	iDbChangeNotifier->AppendDbRelatedFilterL( iBlackListSorting );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::FilterPreSortL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfWlanInfoArrayVisitor::FilterPreSortL( 
+                                        CWsfWlanInfoArray* aArrayToBeFiltered )
+	{
+	__ASSERTD( aArrayToBeFiltered );
+	
+	// go through the filters  
+	// store the array ref
+	
+	TInt arrayLoopCount( aArrayToBeFiltered->Count() );
+	TWsfWlanInfo* wlanInfo;
+	
+	for ( TInt arrayLoop( 0 ); arrayLoop < arrayLoopCount; ++arrayLoop )
+		{
+		wlanInfo = aArrayToBeFiltered->At( arrayLoop );
+		
+		// blacklist sorting must come first to be able to filter out 
+		// customer favourite networks, too
+		if ( !iBlackListSorting->SetupOnRuleMatch( *wlanInfo ) )
+			{
+		    iBrandSorting->SetupOnRuleMatch( *wlanInfo );
+			}
+		}
+	
+	iInfoArray = aArrayToBeFiltered;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::FilterPostSortL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfWlanInfoArrayVisitor::FilterPostSortL( 
+                                        CWsfWlanInfoArray* aArrayToBeFiltered )
+	{
+	__ASSERTD( aArrayToBeFiltered );
+	
+	// go through the filters....
+	
+	// we could remove the entries which are marked as blacklist entries...
+	TInt arrayLoopCount( aArrayToBeFiltered->Count() );
+	TWsfWlanInfo* wlanInfo;
+
+	for ( TInt arrayLoop( arrayLoopCount - 1); arrayLoop >= 0; --arrayLoop )
+		{
+		wlanInfo =  aArrayToBeFiltered->At( arrayLoop );
+		if ( wlanInfo->BlackListEntry() && !wlanInfo->Connected() )
+			{
+			// filter out only non-connected items
+			aArrayToBeFiltered->Delete( wlanInfo );
+			}
+		}
+	// and let the iInfoArray expire..
+	iInfoArray = NULL;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::SortingKey
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TKeyArrayFix& CWsfWlanInfoArrayVisitor::SortingKey() 
+	{
+	return *this;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::LoadFilterDefinitionsL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfWlanInfoArrayVisitor::LoadFilterDefinitionsL()
+	{
+	// filter by filter - call the load
+	iDefaultSorting->ReadFilterDefsL();
+	iBrandSorting->ReadFilterDefsL();
+	iBlackListSorting->ReadFilterDefsL();
+	if ( iReadOnly && !iDbChangeNotifier->IsActive() )
+		{
+		iDbChangeNotifier->StartDbObservation();
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::AppendBrandingIconsL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfWlanInfoArrayVisitor::AppendBrandingIconsL( 
+                                                    CAknIconArray& aIconArray )
+	{
+	iBrandSorting->AppendBrandIconsL( aIconArray );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::EditBlackListL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CWsfWlanInfoArrayVisitor::EditBlackListL( 
+                                            CWsfWlanInfoArray& aInfoItemArray )
+	{
+	iBlackListSorting->EditFilterDefsL( aInfoItemArray );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::BlackListItemCount
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CWsfWlanInfoArrayVisitor::BlackListItemCount() const
+    {
+    return iBlackListSorting->BlackListItemCount();
+    }
+    
+	
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::Compare
+// ----------------------------------------------------------------------------
+//
+TInt CWsfWlanInfoArrayVisitor::Compare( TInt aLeft, TInt aRight ) const
+	{
+	TWsfWlanInfo* left = iInfoArray->At( aLeft );
+	TWsfWlanInfo* right = iInfoArray->At( aRight );
+	
+	__ASSERTD( left );
+	__ASSERTD( right );	
+	
+	return iDefaultSorting->Compare( *left, *right );
+	}
+
+
+// ----------------------------------------------------------------------------
+// CWsfWlanInfoArrayVisitor::OpenDataBaseL
+// ----------------------------------------------------------------------------
+//
+void CWsfWlanInfoArrayVisitor::OpenDataBaseL()
+	{
+    if ( iFilterDb.Open( iDbms, KBlacklistDbName, KBlacklistDbFormat ) != 
+                                                                     KErrNone )
+        {
+		User::LeaveIfError( iFilterDb.Create( iDbms, 
+		                                      KBlacklistDbName, 
+		                                      KBlacklistDbFormat ) );
+		
+		// create tables in the new database
+		CWsfWlanInfoSortingBlackList::NewLC( iFilterDb );
+		CleanupStack::PopAndDestroy();
+		}
+	}
+
+