activityfw/storage/s60/src/afentry.cpp
changeset 104 9b022b1f357c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/storage/s60/src/afentry.cpp	Tue Jul 06 14:37:10 2010 +0300
@@ -0,0 +1,461 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+#include "afentry.h"
+#include <s32mem.h>
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phase constructor. Create and initialize instance
+ * @return entry instance
+ */
+CAfEntry* CAfEntry::NewL()
+{
+    CAfEntry *self = CAfEntry::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phase constructor. Create, initialize and push instance into cleanup stack
+ * @return entry instance
+ */
+CAfEntry* CAfEntry::NewLC()
+{
+    CAfEntry *self = new (ELeave)CAfEntry();
+    CleanupStack::PushL(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phase constructor. Create and initialize instance
+ * @param flags - entry flags
+ * @param applicationId - application unique identifier
+ * @param activityId - activity unique identifier
+ * @param imgSrc - thumbanail source
+ * @param privateData - privated application data
+ * @param publicData - public activity data
+ * @return entry instance
+ */
+CAfEntry* CAfEntry::NewL(TInt flags,
+                         TInt applicationId,
+                         const TDesC &activityId,
+                         const TDesC &imgSrc,
+                         const TDesC8 &privateData,
+                         const TDesC8 &publicData)
+{
+    CAfEntry* self = CAfEntry::NewLC(flags, 
+                                     applicationId, 
+                                     activityId, 
+                                     imgSrc, 
+                                     privateData, 
+                                     publicData);
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phase constructor. Create, initialize and push instance into cleanup stack
+ * @param flags - entry flags
+ * @param applicationId - application unique identifier
+ * @param activityId - activity unique identifier
+ * @param imgSrc - thumbanail source
+ * @param privateData - privated application data
+ * @param publicData - public activity data
+ * @return entry instance
+ */
+CAfEntry* CAfEntry::NewLC(TInt flags,
+                          TInt applicationId,
+                          const TDesC &activityId,
+                          const TDesC &imgSrc,
+                          const TDesC8 &privateData,
+                          const TDesC8 &publicData)
+{
+    CAfEntry *self = CAfEntry::NewLC();
+    self->ConstructL(flags, 
+                     applicationId, 
+                     activityId, 
+                     imgSrc, 
+                     privateData, 
+                     publicData);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+CAfEntry* CAfEntry::NewLC(const RMessage2& msg, int offset)
+{
+    CAfEntry* self = CAfEntry::NewLC();
+    RBuf8 serializedEntry;
+    CleanupClosePushL(serializedEntry);
+    ReallocL(serializedEntry, msg.GetDesMaxLength(offset));
+    msg.ReadL(offset, serializedEntry);
+    RDesReadStream entryReader(serializedEntry);
+    CleanupClosePushL(entryReader);
+    entryReader >> (*self);
+    CleanupStack::PopAndDestroy(&entryReader);
+    CleanupStack::PopAndDestroy(&serializedEntry);
+    return self;
+}
+// -----------------------------------------------------------------------------
+/**
+ * First phase constructor
+ */
+CAfEntry::CAfEntry()
+{
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Second phase constructor. Initialize instance
+ * @param flags - entry flags
+ * @param applicationId - application unique identifier
+ * @param activityId - activity unique identifier
+ * @param imgSrc - thumbanail source
+ * @param privateData - privated application data
+ * @param publicData - public activity data 
+ */
+void CAfEntry::ConstructL(TInt flags,
+                          TInt applicationId,
+                          const TDesC &activityId,
+                          const TDesC &imgSrc,
+                          const TDesC8 &privateData,
+                          const TDesC8 &publicData)
+{
+    mFlags = flags;
+    mAppId = applicationId;
+    CopyL(mActivityId, activityId);
+    CopyL(mImgSrc, imgSrc);
+    CopyL(mPrivateData, privateData);
+    CopyL(mPublicData, publicData);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Destructor. Release allocated resources 
+ */
+CAfEntry::~CAfEntry()
+{
+    mActivityId.Close();
+    mPrivateData.Close();
+    mPublicData.Close();
+    mImgSrc.Close();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide size of serialized entry
+ * @return size of serialized entry instance
+ */
+TInt CAfEntry::Size() const
+{
+    return (sizeof(TInt) * 3) + //flags + appId + actId size info 
+           mActivityId.Size() + //actId content size
+           DataSize(); //data size
+           
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide size of serialized entry
+ * @return size of serialized entry instance
+ */
+TInt CAfEntry::DataSize() const
+{
+    return (sizeof(TInt) * 3) + //privData size info + pubData size info + imgSrc size info
+            mImgSrc.Size() + //imgSize content size
+            mPrivateData.Size() + //privData content size
+            mPublicData.Size(); //pubData content size 
+}
+// -----------------------------------------------------------------------------
+/**
+ * Serialize entry content into output stream.
+ * @param stream - output stream
+ */
+void CAfEntry::ExternalizeL(RWriteStream &stream) const
+{
+    stream.WriteInt32L(mFlags);
+    stream.WriteInt32L(mAppId);
+    ExternalizeL(stream, mActivityId);
+    ExternalizeDataOnlyL(stream);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Deserialize entry content from input stream
+ * @param stream - input stream
+ */
+void CAfEntry::InternalizeL(RReadStream &stream)
+{
+    mFlags = stream.ReadInt32L();
+    mAppId = stream.ReadInt32L();
+    InternalizeL(mActivityId, stream);
+    InternalizeDataOnlyL(stream);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Serialize entry content into output stream.
+ * @param stream - output stream
+ */
+void CAfEntry::ExternalizeDataOnlyL(RWriteStream &stream) const
+{
+    ExternalizeL(stream, mImgSrc);
+    ExternalizeL(stream, mPrivateData);
+    ExternalizeL(stream, mPublicData);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Deserialize entry content from input stream
+ * @param stream - input stream
+ */
+void CAfEntry::InternalizeDataOnlyL(RReadStream &stream)
+{
+    
+    InternalizeL(mImgSrc, stream);
+    InternalizeL(mPrivateData, stream);
+    InternalizeL(mPublicData, stream);
+    
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity flags
+ * @return activity flags 
+ */
+TInt CAfEntry::Flags() const
+{
+    return mFlags;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity identifier.
+ * @return activity identifier
+ */
+TInt CAfEntry::ApplicationId() const
+{
+    return mAppId;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity identifier.
+ * @return activity identifier
+ */
+const TDesC& CAfEntry::ActivityId() const
+{
+    return mActivityId;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity data.
+ * @param rights - type of requested data
+ * @return activity data
+ */
+const TDesC8& CAfEntry::Data(CAfEntry::AccessRights rights) const
+{
+    return Private == rights ? mPrivateData : mPublicData;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity data.
+ * @param rights - type of requested data
+ * @return activity data
+ */
+void CAfEntry::SetDataL(const TDesC8& src, CAfEntry::AccessRights rights)
+{
+    CopyL(Private == rights ? mPrivateData : mPublicData, src);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity thumbail path
+ * @return path to activity thumbnail 
+ */
+const TDesC& CAfEntry::ImageSrc() const
+{
+    return mImgSrc;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Set new value of image source
+ */
+void CAfEntry::SetImageSrcL(const TDesC& src)
+{
+    CopyL(mImgSrc, src);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Reallocate blob buffer to requested size
+ * @param dst - destination buffer
+ * @param length - requested length
+ */
+void CAfEntry::ReallocL(RBuf8 &dst,TInt length)
+{
+    if (0 < length) {
+        if (dst.MaxLength() < length) {
+            dst.ReAllocL(length);
+        }
+    } else {
+        dst.Close();
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Reallocate text buffer to requested size
+ * @param dst - destination buffer
+ * @param length - requested length
+ */
+void CAfEntry::ReallocL(RBuf &dst,TInt length)
+{
+    if (0 < length) {
+        if (dst.MaxLength() < length) {
+            dst.ReAllocL(length);
+        }
+    } else {
+        dst.Close();
+    }
+}
+// -----------------------------------------------------------------------------
+/**
+ * Copy blob content from input stream
+ * @param dst - destination buffer
+ * @param src - source buffer
+ */
+void CAfEntry::CopyL(RBuf8 &dst,const TDesC8 &src)
+{
+    ReallocL(dst, src.Length());
+    if(0 < src.Length()) {
+        dst.Copy(src);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Copy text content from input buffer
+ * @param dst - destination buffer
+ * @param src - source buffer
+ */
+void CAfEntry::CopyL(RBuf &dst,const TDesC &src)
+{
+    ReallocL(dst, src.Length());
+    if(0 < src.Length()) {
+        dst.Copy(src);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Deserialize blob content from input stream
+ * @param dst - destination buffer
+ * @param src - input stream
+ */
+void CAfEntry::InternalizeL(RBuf8 &dst, RReadStream &src)
+{
+    const TInt length(src.ReadInt32L());
+    ReallocL(dst, length);
+    if (0 < length) {
+        src.ReadL(dst, length);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Deserialize text content from input stream
+ * @param dst - destination buffer
+ * @param src - input stream
+ */
+void CAfEntry::InternalizeL(RBuf &dst, RReadStream &src)
+{
+    const TInt length(src.ReadInt32L());
+    ReallocL(dst, length);
+    if (0 < length) {
+        src.ReadL(dst, length);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Serialize blob content into output stream
+ * @param dst - destination stream
+ * @param src - input buffer
+ */
+void CAfEntry::ExternalizeL(RWriteStream &dst,const TDesC8 & src)
+{
+    dst.WriteInt32L(src.Length());
+    if (src.Length()) {
+        dst.WriteL(src, src.Length());
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Serialize text content into output stream
+ * @param dst - destination stream
+ * @param src - input buffer
+ */
+void CAfEntry::ExternalizeL(RWriteStream &dst,const TDesC& src)
+{
+    dst.WriteInt32L(src.Length());
+    if (src.Length()) {
+        dst.WriteL(src, src.Length());
+    }
+}
+
+// -----------------------------------------------------------------------------
+RPointerArray<CAfEntry>& operator <<(RPointerArray<CAfEntry>& dst, const TDesC8 &src)
+{
+    dst.ResetAndDestroy();
+    RDesReadStream srcStream(src);
+    CleanupClosePushL(srcStream);
+    int numOfItems(srcStream.ReadInt32L());
+    for (int i(0); i < numOfItems; ++i) {
+        CAfEntry *entry = CAfEntry::NewLC();
+        srcStream >> (*entry);
+        dst.AppendL(entry);
+        CleanupStack::Pop(entry);
+    }
+    CleanupStack::PopAndDestroy(&srcStream);
+    return dst;
+}
+
+// -----------------------------------------------------------------------------
+RBuf8& operator <<(RBuf8 &dst, const RPointerArray<CAfEntry>& src)
+{
+    int iter(0), 
+        requiredSize(sizeof(int));
+    for(iter =0; iter< src.Count(); ++iter) {
+        requiredSize += src[iter]->Size();
+    }
+    CAfEntry::ReallocL(dst, requiredSize);
+    RDesWriteStream dstStream(dst);
+    CleanupClosePushL(dstStream);
+    dstStream.WriteInt32L(src.Count());
+    for (iter =0; iter < src.Count(); ++iter) {
+        dstStream << *(src[iter]);
+    }
+    CleanupStack::PopAndDestroy(&dstStream);
+    return dst;
+}