--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/server/src/ncdsearchnodefolder.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2006 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: Implements CNcdSearchNodeFolder class
+*
+*/
+
+
+#include "ncdsearchnodefolder.h"
+#include "ncdnodefolderlink.h"
+#include "ncdnodefoldermetadata.h"
+#include "ncdnodemanager.h"
+#include "ncdnodeclassids.h"
+#include "ncdnodeidentifier.h"
+#include "ncdnodefunctionids.h"
+#include "catalogsbasemessage.h"
+#include "catalogsutils.h"
+#include "ncdutils.h"
+
+#include "catalogsdebug.h"
+
+CNcdSearchNodeFolder* CNcdSearchNodeFolder::NewL( CNcdNodeManager& aNodeManager,
+ const CNcdNodeIdentifier& aIdentifier,
+ TBool aIsTransparent )
+ {
+ CNcdSearchNodeFolder* self =
+ CNcdSearchNodeFolder::NewLC( aNodeManager, aIdentifier, aIsTransparent );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+CNcdSearchNodeFolder* CNcdSearchNodeFolder::NewLC( CNcdNodeManager& aNodeManager,
+ const CNcdNodeIdentifier& aIdentifier,
+ TBool aIsTransparent )
+ {
+ CNcdSearchNodeFolder* self =
+ new( ELeave ) CNcdSearchNodeFolder( aNodeManager,
+ NcdNodeClassIds::ENcdSearchFolderNodeClassId, aIsTransparent );
+ CleanupClosePushL( *self );
+ self->ConstructL( aIdentifier );
+ return self;
+ }
+
+CNcdSearchNodeFolder::CNcdSearchNodeFolder( CNcdNodeManager& aNodeManager,
+ NcdNodeClassIds::TNcdNodeClassId aNodeClassId, TBool aIsTransparent )
+: CNcdParentOfTransparentNode( aNodeManager,
+ aNodeClassId ), iIsTransparent( aIsTransparent )
+ {
+ }
+
+void CNcdSearchNodeFolder::ConstructL( const CNcdNodeIdentifier& aIdentifier )
+ {
+ DLTRACEIN(("this: %X", this ));
+
+ CNcdParentOfTransparentNode::ConstructL( aIdentifier );
+ iSearchFilter = CNcdSearchFilter::NewL();
+ iOriginIdentifier = CNcdNodeIdentifier::NewL();
+ DLTRACEOUT((""));
+ }
+
+
+CNcdSearchNodeFolder::~CNcdSearchNodeFolder()
+ {
+ DLTRACEIN(("this: %X", this));
+ delete iSearchFilter;
+ delete iOriginIdentifier;
+ DLTRACEOUT((""));
+ }
+
+void CNcdSearchNodeFolder::SetSearchFilterL( const CNcdSearchFilter& aFilter )
+ {
+ DLTRACEIN((""));
+
+ DeletePtr( iSearchFilter );
+ iSearchFilter = CNcdSearchFilter::NewL( aFilter );
+
+ #ifdef CATALOGS_BUILD_CONFIG_DEBUG
+ const MDesCArray& keywords = aFilter.Keywords();
+ DLINFO(("Search filter: "));
+ for ( TInt i = 0; i < keywords.MdcaCount(); i++ )
+ {
+ DLINFO((_L("%S"), &keywords.MdcaPoint( i ) ));
+ }
+ #endif
+ }
+
+void CNcdSearchNodeFolder::SetOriginIdentifierL(
+ const CNcdNodeIdentifier& aOriginIdentifier )
+ {
+ DLTRACEIN((""))
+ CNcdNodeIdentifier* originIdentifier = NULL;
+ originIdentifier = CNcdNodeIdentifier::NewL( aOriginIdentifier );
+ delete iOriginIdentifier;
+ iOriginIdentifier = originIdentifier;
+ }
+
+const CNcdNodeIdentifier& CNcdSearchNodeFolder::OriginIdentifierL() const
+ {
+ DLTRACEIN((""));
+ if( iOriginIdentifier->ContainsEmptyFields() )
+ {
+ DLTRACE((_L("Origin identifier not present") ));
+ // own origin identifier is empty, ask from parent
+ // NOTE: this will leave if parent folder can't be acquired, this is ok
+ // because some folder in the parent hierarchy must always have an origin
+ // identifier.
+ if( ClassId() == NcdNodeClassIds::ENcdSearchRootNodeClassId )
+ {
+ DLERROR((_L("Already at root and no origin found! Leave!") ));
+ User::Leave( KErrNotFound );
+ }
+ DLTRACE((_L("Asking Origin identifier from parent") ));
+ return NodeManager().SearchFolderL( NodeLinkL().ParentIdentifier() )
+ .OriginIdentifierL();
+ }
+ else
+ {
+ DLTRACE((_L("Origin identifier present, id: %S"), &iOriginIdentifier->NodeId() ));
+ return *iOriginIdentifier;
+ }
+ }
+
+void CNcdSearchNodeFolder::ExternalizeL( RWriteStream& aStream )
+ {
+ DLTRACEIN(("this: %X", this ));
+
+ CNcdParentOfTransparentNode::ExternalizeL( aStream );
+
+ iSearchFilter->ExternalizeL( aStream );
+ iOriginIdentifier->ExternalizeL( aStream );
+ aStream.WriteInt32L( iIsTransparent );
+ DLTRACEOUT((""));
+ }
+
+void CNcdSearchNodeFolder::InternalizeL( RReadStream& aStream )
+ {
+ DLTRACEIN(("this: %X", this));
+
+ CNcdParentOfTransparentNode::InternalizeL( aStream );
+
+ iSearchFilter->InternalizeL( aStream );
+ iOriginIdentifier->InternalizeL( aStream );
+ iIsTransparent = aStream.ReadInt32L();
+ DLTRACEOUT((""));
+ }
+
+void CNcdSearchNodeFolder::ExternalizeDataForRequestL( RWriteStream& aStream ) const
+ {
+ DLTRACEIN(("this: %X", this));
+
+ CNcdParentOfTransparentNode::ExternalizeDataForRequestL( aStream );
+
+ iSearchFilter->ExternalizeL( aStream );
+
+ DLTRACEOUT((""));
+ }
+
+TBool CNcdSearchNodeFolder::IsTransparent() const
+ {
+ DLTRACEIN((""));
+ return iIsTransparent;
+ }
+
+void CNcdSearchNodeFolder::SetTransparent( TBool aIsTransparent )
+ {
+ DLTRACEIN((""));
+ iIsTransparent = aIsTransparent;
+ }
+