--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/favouritesengine/ClientServer/src/FavouritesItemImpl.cpp Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,353 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 class CFavouritesItemImpl
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "FavouritesItemImpl.h"
+#include "FavouritesPanic.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::NewL
+// ---------------------------------------------------------
+//
+CFavouritesItemImpl* CFavouritesItemImpl::NewL()
+ {
+ CFavouritesItemImpl* item = NewLC();
+ CleanupStack::Pop( item );
+ return item;
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::NewLC
+// ---------------------------------------------------------
+//
+CFavouritesItemImpl* CFavouritesItemImpl::NewLC()
+ {
+ CFavouritesItemImpl* item = new (ELeave) CFavouritesItemImpl();
+ CleanupStack::PushL( item );
+ item->ConstructL();
+ return item;
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::~CFavouritesItemImpl
+// ---------------------------------------------------------
+//
+CFavouritesItemImpl::~CFavouritesItemImpl()
+ {
+ delete iName;
+ delete iUrl;
+ delete iUserName;
+ delete iPassword;
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::operator=
+// ---------------------------------------------------------
+//
+CFavouritesItemImpl& CFavouritesItemImpl::operator=
+( const CFavouritesItemImpl& aCopyFrom )
+ {
+ if( &aCopyFrom != this )
+ {
+ iUid = aCopyFrom.iUid;
+ iParentFolder = aCopyFrom.iParentFolder;
+ iType = aCopyFrom.iType;
+ SetNameL( *(aCopyFrom.iName) );
+ SetUrlL( *(aCopyFrom.iUrl) );
+ iWapAp = aCopyFrom.iWapAp;
+ SetUserNameL( *(aCopyFrom.iUserName) );
+ SetPasswordL( *(aCopyFrom.iPassword) );
+ iFactoryItem = aCopyFrom.iFactoryItem;
+ iReadOnly = aCopyFrom.iReadOnly;
+ iContextId = aCopyFrom.iContextId;
+ iModified = aCopyFrom.iModified;
+ iHidden = aCopyFrom.iHidden;
+ }
+ return *this;
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::ConstructL
+// ---------------------------------------------------------
+//
+void CFavouritesItemImpl::ConstructL()
+ {
+ iUid = KFavouritesNullUid;
+ iParentFolder = KFavouritesNullUid;
+ iType = CFavouritesItem::EItem;
+ iName = HBufC::NewL( 0 );
+ iUrl = HBufC::NewL( 0 );
+ iWapAp.SetDefault();
+ iUserName = HBufC::NewL( 0 );
+ iPassword = HBufC::NewL( 0 );
+ iFactoryItem = EFalse;
+ iReadOnly = EFalse;
+ iContextId = KFavouritesNullContextId;
+ iModified = Time::NullTTime();
+ iHidden = EFalse;
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::SetNameL
+// ---------------------------------------------------------
+//
+void CFavouritesItemImpl::SetNameL( const TDesC& aName )
+ {
+ HBufC* buf = HBufC::NewLC( aName.Length() );
+ TPtr bufp( buf->Des() );
+ User::LeaveIfError( MakeName( aName, bufp ) );
+ CleanupStack::Pop( buf );
+ delete iName;
+ iName = buf;
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::ExternalizeL
+// ---------------------------------------------------------
+//
+void CFavouritesItemImpl::ExternalizeL( RWriteStream& aStream ) const
+ {
+ aStream.WriteInt32L( iUid );
+ aStream.WriteInt32L( iParentFolder );
+ aStream.WriteInt32L( STATIC_CAST( TInt, iType ) );
+ BufToStreamL( *iName, aStream );
+ BufToStreamL( *iUrl, aStream );
+ iWapAp.ExternalizeL( aStream );
+ BufToStreamL( *iUserName, aStream );
+ BufToStreamL( *iPassword, aStream );
+ aStream.WriteInt32L( STATIC_CAST( TInt, iReadOnly ) );
+ aStream.WriteInt32L( STATIC_CAST( TInt, iFactoryItem ) );
+ aStream.WriteInt32L( iContextId );
+ aStream.WriteInt32L( I64HIGH( iModified.Int64() ) );
+ aStream.WriteInt32L( I64LOW( iModified.Int64() ) );
+ aStream.WriteInt32L( STATIC_CAST( TInt, iHidden ) );
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::InternalizeL
+// ---------------------------------------------------------
+//
+void CFavouritesItemImpl::InternalizeL( RReadStream& aStream )
+ {
+ iUid = aStream.ReadInt32L();
+ iParentFolder = aStream.ReadInt32L();
+ iType = STATIC_CAST( CFavouritesItem::TType, aStream.ReadInt32L() );
+ BufFromStreamL( iName, aStream );
+ BufFromStreamL( iUrl, aStream );
+ iWapAp.InternalizeL( aStream );
+ BufFromStreamL( iUserName, aStream );
+ BufFromStreamL( iPassword, aStream );
+ iReadOnly = STATIC_CAST( TBool, aStream.ReadInt32L() );
+ iFactoryItem = STATIC_CAST( TBool, aStream.ReadInt32L() );
+ iContextId = aStream.ReadInt32L();
+ // Need to use local variables, cannot read to TInt64 constructor directly
+ // from stream. Order of argument evaluation is compiler dependent!
+ TUint32 high = aStream.ReadInt32L();
+ TUint32 low = aStream.ReadInt32L();
+ iModified = MAKE_TINT64( high, low );
+ iHidden = STATIC_CAST( TBool, aStream.ReadInt32L() );
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::ExternalizeUpdateDeltaL
+// ---------------------------------------------------------
+//
+void CFavouritesItemImpl::ExternalizeUpdateDeltaL( RWriteStream& aStream ) const
+ {
+ aStream.WriteInt32L( iUid );
+ BufToStreamL( *iName, aStream );
+ aStream.WriteInt32L( I64HIGH( iModified.Int64() ) );
+ aStream.WriteInt32L( I64LOW( iModified.Int64() ) );
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::InternalizeUpdateDeltaL
+// ---------------------------------------------------------
+//
+void CFavouritesItemImpl::InternalizeUpdateDeltaL( RReadStream& aStream )
+ {
+ iUid = aStream.ReadInt32L();
+ BufFromStreamL( iName, aStream );
+ // Need to use local variables, cannot read to TInt64 constructor directly
+ // from stream. Order of argument evaluation is compiler dependent!
+ TUint32 high = aStream.ReadInt32L();
+ TUint32 low = aStream.ReadInt32L();
+ iModified = MAKE_TINT64( high, low );
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::BufToStreamL
+// ---------------------------------------------------------
+//
+void CFavouritesItemImpl::BufToStreamL
+( const TDesC& aBuf, RWriteStream& aStream ) const
+ {
+ aStream.WriteInt32L( aBuf.Length() );
+ aStream.WriteL( aBuf );
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::BufFromStreamL
+// ---------------------------------------------------------
+//
+void CFavouritesItemImpl::BufFromStreamL( HBufC*& aBuf, RReadStream& aStream )
+ {
+ TInt len = aStream.ReadInt32L();
+ HBufC* buf = HBufC::NewLC( len );
+ TPtr ptr( buf->Des() ); ptr.SetLength( len );
+ aStream.ReadL( ptr, len );
+ delete aBuf;
+ aBuf = buf;
+ CleanupStack::Pop( buf ); // Now member.
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::SetBufL
+// ---------------------------------------------------------
+//
+void CFavouritesItemImpl::SetBufL
+( HBufC*& aBuf, const TDesC& aDesc, TInt aMaxLength )
+ {
+ if ( aDesc.Length() > aMaxLength )
+ {
+ User::Leave( KErrOverflow );
+ }
+ HBufC* buf = aDesc.AllocL();
+ delete aBuf;
+ aBuf = buf;
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::IsValid
+// ---------------------------------------------------------
+//
+TBool CFavouritesItemImpl::IsValid() const
+ {
+ TBool ret = ETrue;
+ if ( !IsValidName( *iName ) )
+ {
+ // Valid name is required for all (except the root folder).
+ ret = EFalse;
+ }
+ else
+ {
+ switch ( iType )
+ {
+ case CFavouritesItem::EItem:
+ if ( !iUrl->Length() )
+ {
+ // URL is required for items.
+ ret = EFalse;
+ }
+ break;
+
+ case CFavouritesItem::EFolder:
+ if (
+ iUrl->Length() ||
+ iUserName->Length() ||
+ iPassword->Length()
+ )
+ {
+ // URL, Username, Password are not allowed
+ // for folders.
+ ret = EFalse;
+ }
+ break;
+
+ default:
+ {
+ FavouritesPanic( EFavouritesBadType );
+ }
+ }
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::MakeName
+// ---------------------------------------------------------
+//
+TInt CFavouritesItemImpl::MakeName( const TDesC& aSource, TDes& aTarget )
+ {
+ TInt err( KErrNone );
+ _LIT(KEikEdwinRightToLeftMark, "\x200F" );
+ // Copy source to target.
+ aTarget = aSource;
+ TBool rightRemove, leftRemove;
+ rightRemove = EFalse;
+ leftRemove = EFalse;
+
+ // Remove leading/trailing spaces.
+ if(aTarget.Right(1).Compare(KEikEdwinRightToLeftMark) ==0)
+ {
+ aTarget.Delete(aTarget.Length() -1,1);
+ rightRemove = ETrue;
+ }
+
+ if(aTarget.Left(1).Compare(KEikEdwinRightToLeftMark) ==0)
+ {
+ aTarget.Delete(0,1);
+ leftRemove = ETrue;
+ }
+
+
+ aTarget.Trim();
+ if(rightRemove)
+ {
+ if(aTarget.Right(1).Compare(KEikEdwinRightToLeftMark) ==0)
+ {
+ aTarget.Delete(aTarget.Length() -1,1);
+ }
+
+ }
+ if(leftRemove)
+ {
+ if(aTarget.Left(1).Compare(KEikEdwinRightToLeftMark) ==0)
+ {
+ aTarget.Delete(0,1);
+ }
+ }
+
+ // Trim to valid length.
+ if ( aTarget.Length() > KFavouritesMaxName )
+ {
+ aTarget.SetLength( KFavouritesMaxName );
+ err = KErrOverflow;
+ }
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CFavouritesItemImpl::IsValidName
+// ---------------------------------------------------------
+//
+TBool CFavouritesItemImpl::IsValidName( const TDesC& aName )
+ {
+ // All characters accepted (no exclusion of special characters.).
+ // Name must contain at least non-whitespace; since this method expects
+ // a trimmed name, this is equivalent of checking if the name is empty.
+ // This method always gets a trimmed name (MakeName generated).
+ return aName.Length();
+ }
+
+// End of File