installationservices/swcomponentregistry/source/client/appregentries.cpp
branchRCL_3
changeset 25 7333d7932ef7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/source/client/appregentries.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1231 @@
+/*
+* Copyright (c) 2009-2010 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: 
+* Implement entry classes for Software Components Registry interface.
+*
+*/
+
+#include <usif/scr/appregentries.h>
+#include <usif/scr/screntries.h>
+#include <scs/streamingarray.h>
+#include <scs/cleanuputils.h>
+
+using namespace Usif;
+///////////////////////
+//TApplicationCharacteristics
+///////////////////////
+EXPORT_C TApplicationCharacteristics::TApplicationCharacteristics()
+    {
+    iEmbeddability = ENotEmbeddable;
+    iSupportsNewFile = EFalse;
+    iAppIsHidden = EFalse;
+    iLaunchInBackground = EFalse;
+    iGroupName = KNullDesC;
+    iAttributes = 0;
+    }
+
+EXPORT_C void TApplicationCharacteristics::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L((TInt)iEmbeddability);
+    aStream.WriteInt32L(iSupportsNewFile);
+    aStream.WriteInt32L(iAppIsHidden);
+    aStream.WriteInt32L(iLaunchInBackground);
+    aStream.WriteInt32L(iGroupName.Length());
+    aStream.WriteL(iGroupName);
+    aStream.WriteUint32L(iAttributes);
+    }
+
+EXPORT_C void TApplicationCharacteristics::InternalizeL(RReadStream& aStream) 
+    {
+    iEmbeddability = (TAppEmbeddability)aStream.ReadInt32L();
+    iSupportsNewFile = aStream.ReadInt32L();
+    iAppIsHidden = aStream.ReadInt32L();
+    iLaunchInBackground = aStream.ReadInt32L();
+    TInt groupNameLength = aStream.ReadInt32L();
+    aStream.ReadL(iGroupName, groupNameLength);
+    iAttributes = aStream.ReadUint32L();
+    }
+
+///////////////////////
+//CEmbeddabilityFilter
+///////////////////////
+EXPORT_C TEmbeddableFilter::TEmbeddableFilter(): iEmbeddabilityFlags(0)
+    {
+    
+    }
+
+EXPORT_C TUint TEmbeddableFilter::EmbeddabilityFlags() const
+    {
+    return iEmbeddabilityFlags;
+    }
+
+void TEmbeddableFilter::SetEmbeddabilityFlags(TUint aEmbeddabilityFlags)
+    {
+    iEmbeddabilityFlags = aEmbeddabilityFlags;
+    }
+
+EXPORT_C void TEmbeddableFilter::AddEmbeddability(TApplicationCharacteristics::TAppEmbeddability aEmbeddability)
+    {
+    iEmbeddabilityFlags |= (1 << aEmbeddability);
+    }
+
+EXPORT_C TBool TEmbeddableFilter::MatchesEmbeddability(TApplicationCharacteristics::TAppEmbeddability aEmbeddability) const
+    {
+    TUint embeddabilityFlag = (1 << aEmbeddability);
+    return ((embeddabilityFlag & iEmbeddabilityFlags) == 0) ? EFalse : ETrue;
+    }
+
+//////////////////
+//CAppInfoFilter
+//////////////////
+
+CAppInfoFilter::CAppInfoFilter()
+        {
+        
+        }
+
+CAppInfoFilter::~CAppInfoFilter()
+        {
+        
+        }
+
+EXPORT_C CAppInfoFilter* CAppInfoFilter::NewLC()
+        {
+        CAppInfoFilter *self = new(ELeave) CAppInfoFilter();
+        CleanupStack::PushL(self);
+        self->ConstructL();
+        return self;
+        }
+
+
+EXPORT_C CAppInfoFilter* CAppInfoFilter::NewL()
+        {
+        CAppInfoFilter *self = CAppInfoFilter::NewLC();
+        CleanupStack::Pop(self);
+        return self;
+        }
+
+EXPORT_C CAppInfoFilter* CAppInfoFilter::NewL(RReadStream& aStream)
+        {   
+        CAppInfoFilter *self = CAppInfoFilter::NewLC();
+        self->InternalizeL(aStream);
+        CleanupStack::Pop(self);
+        return self;
+        }
+
+void CAppInfoFilter::ConstructL()
+        {
+        iSetFlag = EAllApps;
+        }
+
+EXPORT_C void CAppInfoFilter::ExternalizeL(RWriteStream& aStream) const
+        {
+        aStream.WriteUint16L(iSetFlag);
+        aStream.WriteInt32L(iScreenMode);
+        aStream.WriteUint32L(iEmbeddabilityFilter.EmbeddabilityFlags());
+        aStream.WriteUint32L(iCapabilityAttributeMask);
+        aStream.WriteUint32L(iCapabilityAttributeValue);          
+        aStream.WriteUint32L(iServiceUid.iUid);
+        aStream.WriteUint32L(iAppUid.iUid);
+        }
+
+void CAppInfoFilter::InternalizeL(RReadStream& aStream)
+    {
+    iSetFlag = aStream.ReadUint16L();
+    iScreenMode = aStream.ReadInt32L();  
+    iEmbeddabilityFilter.SetEmbeddabilityFlags(aStream.ReadUint32L());
+    iCapabilityAttributeMask  = aStream.ReadUint32L();
+    iCapabilityAttributeValue = aStream.ReadUint32L();
+    iServiceUid = TUid::Uid(aStream.ReadUint32L());
+    iAppUid = TUid::Uid(aStream.ReadUint32L());
+    }
+
+EXPORT_C void CAppInfoFilter::SetAllApps()
+        {
+        iSetFlag = EAllApps;
+        }
+
+EXPORT_C void CAppInfoFilter::SetAllApps(const TInt aScreenMode)
+        {
+        iScreenMode = aScreenMode;
+        iSetFlag = EAllAppsWithScreenMode;
+        }
+
+EXPORT_C void CAppInfoFilter::SetEmbeddableApps()
+        {
+        iSetFlag = EGetEmbeddableApps;
+        }
+
+EXPORT_C void CAppInfoFilter::SetEmbeddableApps(const TInt aScreenMode)   
+        {
+        iScreenMode = aScreenMode;
+        iSetFlag = EGetEmbeddableAppsWithSreenMode;
+        }
+
+EXPORT_C void CAppInfoFilter::SetEmbeddabilityFilter(TEmbeddableFilter& aEmbeddabilityFilter)
+        {
+        iEmbeddabilityFilter = aEmbeddabilityFilter;
+        iSetFlag = EGetFilteredAppsWithEmbeddabilityFilter;        
+        }
+
+EXPORT_C void CAppInfoFilter::SetEmbeddabilityFilterWithScreenMode(TEmbeddableFilter& aEmbeddabilityFilter, const TInt aScreenMode)
+        {
+        iEmbeddabilityFilter = aEmbeddabilityFilter;
+        iScreenMode = aScreenMode;
+        iSetFlag = EGetFilteredAppsWithEmbeddabilityFilterWithScreenMode;           
+        }
+EXPORT_C void CAppInfoFilter::SetServerApps(const TUid aServiceUid)
+        {
+        iServiceUid = aServiceUid;
+        iSetFlag = EGetServerApps;
+        }
+EXPORT_C void CAppInfoFilter::SetServerApps(const TUid aServiceUid,const TInt aScreenMode)
+        {
+        iServiceUid = aServiceUid;
+        iScreenMode = aScreenMode;
+        iSetFlag = EGetServerAppsWithScreenMode;
+        }
+
+EXPORT_C void CAppInfoFilter::SetCapabilityAttributeMaskAndValue(const TInt aCapabilityAttributeMask, const TInt aCapabilityAttributeValue)
+        {
+        iCapabilityAttributeMask = aCapabilityAttributeMask;
+        iCapabilityAttributeValue =  aCapabilityAttributeValue;
+        iSetFlag =  EGetFilteredAppsWithCapabilityMaskAndValue;
+        }
+
+EXPORT_C void CAppInfoFilter::SetCapabilityAttributeMaskAndValue(const TInt aCapabilityAttributeMask, const TInt aCapabilityAttributeValue, const TInt aScreenMode)
+        {
+        iCapabilityAttributeMask = aCapabilityAttributeMask;
+        iCapabilityAttributeValue =  aCapabilityAttributeValue;
+        iScreenMode = aScreenMode;
+        iSetFlag = EGetFilteredAppsWithCapabilityMaskAndValueWithScreenMode;
+        }
+
+////////////////////////
+//CAppServiceInfoFilter
+////////////////////////
+
+CAppServiceInfoFilter::CAppServiceInfoFilter()
+    {
+        
+    }
+
+CAppServiceInfoFilter::~CAppServiceInfoFilter()
+    {
+    delete iDataType;
+    }
+
+EXPORT_C CAppServiceInfoFilter* CAppServiceInfoFilter::NewLC()
+    {
+    CAppServiceInfoFilter *self = new(ELeave) CAppServiceInfoFilter();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+
+EXPORT_C CAppServiceInfoFilter* CAppServiceInfoFilter::NewL()
+    {
+    CAppServiceInfoFilter *self = CAppServiceInfoFilter::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CAppServiceInfoFilter* CAppServiceInfoFilter::NewL(RReadStream& aStream)
+    {   
+    CAppServiceInfoFilter *self = CAppServiceInfoFilter::NewLC();
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CAppServiceInfoFilter::ConstructL()
+    {
+    DeleteObjectZ(iDataType);
+    iDataType = KNullDesC().AllocL();
+    
+    }
+
+EXPORT_C void CAppServiceInfoFilter::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteUint16L(iSetFlag);
+    aStream.WriteUint32L(iAppUid.iUid);
+    aStream.WriteUint32L(iServiceUid.iUid);
+    aStream << *iDataType;
+    }
+
+void CAppServiceInfoFilter::InternalizeL(RReadStream& aStream)
+    {
+    iSetFlag = aStream.ReadUint16L();
+    iAppUid = TUid::Uid(aStream.ReadUint32L());
+    iServiceUid = TUid::Uid(aStream.ReadUint32L());
+    DeleteObjectZ(iDataType);
+    iDataType = HBufC::NewL(aStream, KMaxTInt);
+
+    }
+
+
+EXPORT_C void CAppServiceInfoFilter::SetAppUidForServiceInfo (const TUid aAppUid)
+    {
+    iAppUid = aAppUid;
+    iSetFlag = EGetServiceInfoForApp;
+    }
+
+EXPORT_C void CAppServiceInfoFilter::SetServiceUidForServiceImplementations (const TUid aServiceUid)
+    {
+    iServiceUid = aServiceUid;
+    iSetFlag = EGetServiceImplementationForServiceUid;
+    }
+
+EXPORT_C void CAppServiceInfoFilter::SetServiceUidAndDatatTypeForServiceImplementationsL (const TUid aServiceUid, const TDesC& aDataType)
+    {
+    iServiceUid = aServiceUid;
+    DeleteObjectZ(iDataType);
+    iDataType = aDataType.AllocL();
+    iSetFlag = EGetServiceImplementationForServiceUidAndDatatType;
+    }
+
+EXPORT_C void CAppServiceInfoFilter::SetAppUidAndServiceUidForOpaqueData (const TUid aAppUid, const TUid aServiceUid)
+    {
+    iAppUid = aAppUid;
+    iServiceUid = aServiceUid;
+    iSetFlag = EGetOpaqueDataForAppWithServiceUid;
+    }
+
+///////////////////////
+// COpaqueData
+///////////////////////
+
+COpaqueData::COpaqueData()
+    {
+    // empty
+    }
+
+COpaqueData::~COpaqueData()
+    {
+    delete iOpaqueData;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewL()
+    {
+    COpaqueData *self = COpaqueData::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewLC()
+    {
+    COpaqueData *self = new(ELeave) COpaqueData();
+    CleanupStack::PushL(self);
+    self->ConstructL(KNullDesC8(), TLanguage(0));
+    return self;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewL(TDesC8& aOpaqueData, TLanguage aLanguage)
+    {
+    COpaqueData *self = COpaqueData::NewLC(aOpaqueData, aLanguage);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewLC(TDesC8& aOpaqueData, TLanguage aLanguage)
+    {
+    COpaqueData *self = new(ELeave) COpaqueData();
+    CleanupStack::PushL(self);
+    self->ConstructL(aOpaqueData, aLanguage);
+    return self;
+    }
+
+EXPORT_C COpaqueData* COpaqueData::NewL(RReadStream& aStream)
+    {
+    COpaqueData *self = COpaqueData::NewLC();
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void COpaqueData::ConstructL(const TDesC8& aOpaqueData, TLanguage aLanguage)
+    {  
+	//if the length of opaque data is more than 4k, we will truncate it to 4k.
+    const TInt KMaxOpaqueDataLength = 4096;    
+    if (aOpaqueData.Length() > KMaxOpaqueDataLength)
+        {
+        iOpaqueData = HBufC8::NewL(KMaxOpaqueDataLength);
+        iOpaqueData->Des().Copy(aOpaqueData.Ptr(),KMaxOpaqueDataLength);
+        }
+    else
+        {
+        iOpaqueData = aOpaqueData.AllocL();
+        }
+    iLanguage = aLanguage;
+    }
+
+EXPORT_C HBufC8& COpaqueData::OpaqueData()
+    {
+    return *iOpaqueData;
+    }
+
+EXPORT_C TLanguage COpaqueData::Language()
+    {
+    return iLanguage;
+    }
+
+
+EXPORT_C void COpaqueData::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L(iOpaqueData->Length());
+    aStream << *iOpaqueData;
+    aStream.WriteUint16L(iLanguage);
+    }
+
+EXPORT_C void COpaqueData::InternalizeL(RReadStream& aStream)
+    {
+    DeleteObjectZ(iOpaqueData);
+    
+    TInt32 opaqueDataLength = aStream.ReadInt32L();
+    iOpaqueData = HBufC8::NewL(aStream, opaqueDataLength);
+    iLanguage = (TLanguage) aStream.ReadUint16L();
+    }
+
+///////////////////////
+// CApplicationRegistrationData
+///////////////////////
+
+CApplicationRegistrationData::CApplicationRegistrationData()
+	{
+	// empty
+	}
+
+CApplicationRegistrationData::~CApplicationRegistrationData()
+	{
+	iOwnedFileArray.ResetAndDestroy();
+    iServiceArray.ResetAndDestroy();
+    iLocalizableAppInfoList.ResetAndDestroy();
+    iAppPropertiesArray.ResetAndDestroy();
+    iOpaqueDataArray.ResetAndDestroy();
+	delete iAppFile;									
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewL()
+	{
+	CApplicationRegistrationData *self = CApplicationRegistrationData::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewLC()
+	{
+	CApplicationRegistrationData *self = new(ELeave) CApplicationRegistrationData();
+	CleanupStack::PushL(self);
+	self->ConstructL(KNullDesC());
+	return self;
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewL(RReadStream& aStream)
+	{
+	CApplicationRegistrationData *self = CApplicationRegistrationData::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewL(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<CServiceInfo>& aServiceArray, RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                              RPointerArray<CPropertyEntry>& aAppPropertiesArray, TUid aAppUid, 
+                                              const TDesC& aAppFile)
+    {
+    CApplicationRegistrationData *self = CApplicationRegistrationData::NewLC(aOwnedFileArray, aServiceArray, aLocalizableAppInfoList,
+                                              aAppPropertiesArray, aAppUid, aAppFile);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewLC(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<CServiceInfo>& aServiceArray, RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                               RPointerArray<CPropertyEntry>& aAppPropertiesArray, TUid aAppUid, 
+                                               const TDesC& aAppFile)
+    {
+    CApplicationRegistrationData *self = new(ELeave) CApplicationRegistrationData();
+    CleanupStack::PushL(self);
+    self->ConstructL(aOwnedFileArray, aServiceArray, aLocalizableAppInfoList,
+                     aAppPropertiesArray, aAppUid, aAppFile);
+    return self;
+    }
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewL(
+        RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<
+                Usif::CServiceInfo>& aServiceArray, RPointerArray<
+                Usif::CLocalizableAppInfo>& aLocalizableAppInfoList,
+        RPointerArray<Usif::CPropertyEntry>& aAppPropertiesArray,
+        RPointerArray<Usif::COpaqueData>& aOpaqueDataArray, TUid aAppUid,
+        const TDesC& aAppFile, TApplicationCharacteristics& aCharacteristics,
+        TInt aDefaultScreenNumber, TInt aTypeId)
+    {
+    CApplicationRegistrationData *self = CApplicationRegistrationData::NewLC(
+            aOwnedFileArray, aServiceArray, aLocalizableAppInfoList,
+            aAppPropertiesArray, aOpaqueDataArray, aAppUid, aAppFile,
+            aCharacteristics, aDefaultScreenNumber, aTypeId);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CApplicationRegistrationData* CApplicationRegistrationData::NewLC(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<Usif::CServiceInfo> &aServiceArray, RPointerArray<Usif::CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                               RPointerArray<Usif::CPropertyEntry>& aAppPropertiesArray, 
+                                               RPointerArray<Usif::COpaqueData>& aOpaqueDataArray, TUid aAppUid, 
+                                               const TDesC& aAppFile, TApplicationCharacteristics& aCharacteristics,
+                                               TInt aDefaultScreenNumber, TInt aTypeId)
+	{
+	CApplicationRegistrationData *self = new(ELeave) CApplicationRegistrationData();
+	CleanupStack::PushL(self);
+	self->ConstructL(aOwnedFileArray, aServiceArray, aLocalizableAppInfoList,
+                     aAppPropertiesArray, aOpaqueDataArray, aAppUid, aAppFile, aCharacteristics,
+                     aDefaultScreenNumber, aTypeId);
+	return self;
+	}
+	
+void CApplicationRegistrationData::ConstructL(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<Usif::CServiceInfo> &aServiceArray, RPointerArray<Usif::CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                               RPointerArray<Usif::CPropertyEntry>& aAppPropertiesArray, 
+                                               RPointerArray<Usif::COpaqueData>& aOpaqueDataArray, TUid aAppUid, 
+                                               const TDesC& aAppFile, TApplicationCharacteristics& aCharacteristics, 
+                                               TInt aDefaultScreenNumber, TInt aTypeId)
+	{
+	iOwnedFileArray = aOwnedFileArray;
+    iServiceArray = aServiceArray;
+    iLocalizableAppInfoList = aLocalizableAppInfoList;
+    iAppPropertiesArray = aAppPropertiesArray;
+    iOpaqueDataArray = aOpaqueDataArray;
+	iAppUid = aAppUid;
+	DeleteObjectZ(iAppFile);
+	iAppFile = aAppFile.AllocL();
+	iTypeId = aTypeId;
+	iCharacteristics.iAttributes = aCharacteristics.iAttributes;
+	iCharacteristics.iAppIsHidden = aCharacteristics.iAppIsHidden;
+	iCharacteristics.iEmbeddability = aCharacteristics.iEmbeddability;
+	iCharacteristics.iSupportsNewFile = aCharacteristics.iSupportsNewFile;
+	iCharacteristics.iLaunchInBackground = aCharacteristics.iLaunchInBackground;
+	iCharacteristics.iGroupName = aCharacteristics.iGroupName;
+	iDefaultScreenNumber = aDefaultScreenNumber;							
+	}
+
+void CApplicationRegistrationData::ConstructL(RPointerArray<HBufC>& aOwnedFileArray, RPointerArray<Usif::CServiceInfo> &aServiceArray, RPointerArray<Usif::CLocalizableAppInfo>& aLocalizableAppInfoList,
+                                               RPointerArray<Usif::CPropertyEntry>& aAppPropertiesArray, TUid aAppUid, 
+                                               const TDesC& aAppFile)
+    {
+    iOwnedFileArray = aOwnedFileArray;
+    iServiceArray = aServiceArray;
+    iLocalizableAppInfoList = aLocalizableAppInfoList;
+    iAppPropertiesArray = aAppPropertiesArray;
+    iAppUid = aAppUid;
+    DeleteObjectZ(iAppFile);
+    iAppFile = aAppFile.AllocL();  
+    }
+
+void CApplicationRegistrationData::ConstructL(const TDesC& aAppFile)
+    {
+    DeleteObjectZ(iAppFile);
+    iAppFile = aAppFile.AllocL(); 
+    }
+
+EXPORT_C void CApplicationRegistrationData::ExternalizeL(RWriteStream& aStream) const
+	{
+	ExternalizePointersArrayL(iOwnedFileArray, aStream);
+	ExternalizePointersArrayL(iServiceArray, aStream);
+	ExternalizePointersArrayL(iLocalizableAppInfoList, aStream);
+	ExternalizePointersArrayL(iAppPropertiesArray, aStream);
+	ExternalizePointersArrayL(iOpaqueDataArray, aStream);
+	aStream << iAppUid;
+	aStream << *iAppFile;
+	aStream.WriteInt32L(iTypeId);
+	aStream << iCharacteristics;
+	aStream.WriteInt32L(iDefaultScreenNumber);
+	}
+	
+EXPORT_C void CApplicationRegistrationData::InternalizeL(RReadStream& aStream)
+	{
+	iOwnedFileArray.ResetAndDestroy();
+	InternalizePointersArrayL(iOwnedFileArray, aStream);
+	iServiceArray.ResetAndDestroy();
+	InternalizePointersArrayL(iServiceArray, aStream);
+	iLocalizableAppInfoList.ResetAndDestroy();
+	InternalizePointersArrayL(iLocalizableAppInfoList, aStream);
+	iAppPropertiesArray.ResetAndDestroy();
+	InternalizePointersArrayL(iAppPropertiesArray, aStream);
+	iOpaqueDataArray.ResetAndDestroy();
+	InternalizePointersArrayL(iOpaqueDataArray, aStream);
+
+	aStream >> iAppUid;
+
+	DeleteObjectZ(iAppFile);
+	iAppFile = HBufC::NewL(aStream, KMaxTInt);
+
+	iTypeId = aStream.ReadInt32L();
+	aStream >> iCharacteristics;
+	iDefaultScreenNumber = aStream.ReadInt32L();
+	}
+
+EXPORT_C const TUid CApplicationRegistrationData::AppUid() const
+	{
+	return iAppUid;
+	}
+
+EXPORT_C const TDesC& CApplicationRegistrationData::AppFile() const
+	{
+	return *iAppFile;
+	}
+
+EXPORT_C TInt CApplicationRegistrationData::TypeId() const
+    {
+    return iTypeId;
+    }
+
+EXPORT_C TUint CApplicationRegistrationData::Attributes() const
+	{
+	return iCharacteristics.iAttributes;
+	}
+
+EXPORT_C TBool CApplicationRegistrationData::Hidden() const
+	{
+	return iCharacteristics.iAppIsHidden;
+	}
+
+EXPORT_C TApplicationCharacteristics::TAppEmbeddability CApplicationRegistrationData::Embeddability() const
+	{
+	return iCharacteristics.iEmbeddability;
+	}
+
+EXPORT_C TBool CApplicationRegistrationData::NewFile() const
+	{
+	return iCharacteristics.iSupportsNewFile;
+	}
+
+EXPORT_C TBool CApplicationRegistrationData::Launch() const
+	{
+	return iCharacteristics.iLaunchInBackground;
+	}
+
+EXPORT_C const TDesC& CApplicationRegistrationData::GroupName() const
+	{
+	return iCharacteristics.iGroupName;
+	}
+
+EXPORT_C TInt CApplicationRegistrationData::DefaultScreenNumber() const
+	{
+	return iDefaultScreenNumber;
+	}
+
+EXPORT_C const RPointerArray<HBufC>& CApplicationRegistrationData::OwnedFileArray() const
+	{
+	return iOwnedFileArray;
+	}
+
+EXPORT_C const RPointerArray<CServiceInfo>& CApplicationRegistrationData::ServiceArray() const
+	{
+	return iServiceArray;
+	}
+
+EXPORT_C const RPointerArray<CLocalizableAppInfo>& CApplicationRegistrationData::LocalizableAppInfoList() const
+	{
+	return iLocalizableAppInfoList;
+	}
+
+EXPORT_C const RPointerArray<CPropertyEntry>& CApplicationRegistrationData::AppProperties() const
+	{
+	return iAppPropertiesArray;
+	}
+
+EXPORT_C const RPointerArray<COpaqueData>& CApplicationRegistrationData::AppOpaqueData() const
+    {
+    return iOpaqueDataArray;
+    }
+
+///////////////////////
+// CDataType
+///////////////////////
+
+CDataType::CDataType()
+	{
+	// empty
+	}
+
+CDataType::~CDataType()
+	{
+    delete iType;
+	}
+
+EXPORT_C CDataType* CDataType::NewL()
+	{
+	CDataType *self = CDataType::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CDataType* CDataType::NewLC()
+	{
+	CDataType *self = new(ELeave) CDataType();
+	CleanupStack::PushL(self);
+	self->ConstructL(0, KNullDesC());
+	return self;
+	}
+
+EXPORT_C CDataType* CDataType::NewL(RReadStream& aStream)
+	{
+	CDataType *self = CDataType::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CDataType* CDataType::NewL(TInt aPriority, const TDesC& aType)
+	{
+	CDataType *self = CDataType::NewLC(aPriority, aType);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CDataType* CDataType::NewLC(TInt aPriority, const TDesC& aType)
+	{
+	CDataType *self = new(ELeave) CDataType();
+	CleanupStack::PushL(self);
+	self->ConstructL(aPriority, aType);
+	return self;
+	}
+
+void CDataType::ConstructL(TInt aPriority, const TDesC& aType)
+	{
+	iPriority = aPriority;
+	DeleteObjectZ(iType);
+    iType = aType.AllocL();
+    }
+
+EXPORT_C void CDataType::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iPriority);
+	aStream << *iType;
+	}
+			
+EXPORT_C void CDataType::InternalizeL(RReadStream& aStream)
+	{
+	iPriority = aStream.ReadInt32L();
+	DeleteObjectZ(iType);
+	iType = HBufC::NewL(aStream, KMaxTInt);
+	}
+
+EXPORT_C TInt CDataType::Priority() const
+	{
+	return iPriority;
+	}
+
+EXPORT_C const TDesC& CDataType::Type() const
+	{
+	return *iType;
+	}
+
+///////////////////////
+// CServiceInfo
+///////////////////////
+
+CServiceInfo::CServiceInfo()
+	{
+	// empty
+	}
+
+CServiceInfo::~CServiceInfo()
+	{
+	iDataTypes.ResetAndDestroy();
+	iOpaqueDataArray.ResetAndDestroy();
+   }
+
+EXPORT_C CServiceInfo* CServiceInfo::NewL()
+	{
+	CServiceInfo *self = CServiceInfo::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CServiceInfo* CServiceInfo::NewLC()
+	{
+	CServiceInfo *self = new(ELeave) CServiceInfo();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+EXPORT_C CServiceInfo* CServiceInfo::NewL(RReadStream& aStream)
+	{
+	CServiceInfo *self = CServiceInfo::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CServiceInfo* CServiceInfo::NewL(const TUid aUid, RPointerArray<COpaqueData>& aOpaqueDataArray, RPointerArray<CDataType>& aDataTypes)
+	{
+	CServiceInfo *self = CServiceInfo::NewLC(aUid, aOpaqueDataArray, aDataTypes);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CServiceInfo* CServiceInfo::NewLC(const TUid aUid, RPointerArray<COpaqueData>& aOpaqueDataArray, RPointerArray<CDataType>& aDataTypes)
+	{
+	CServiceInfo *self = new(ELeave) CServiceInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(aUid, aOpaqueDataArray, aDataTypes);
+	return self;
+	}
+	
+void CServiceInfo::ConstructL(const TUid aUid, RPointerArray<COpaqueData>& aOpaqueDataArray, RPointerArray<CDataType>& aDataTypes)
+	{
+	iUid = aUid;
+	iOpaqueDataArray = aOpaqueDataArray;
+    iDataTypes = aDataTypes;
+    }
+
+EXPORT_C void CServiceInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << iUid;
+	ExternalizePointersArrayL(iOpaqueDataArray, aStream);
+	ExternalizePointersArrayL(iDataTypes, aStream);
+	}
+		
+EXPORT_C void CServiceInfo::InternalizeL(RReadStream& aStream)
+	{
+	aStream >> iUid;
+	iOpaqueDataArray.Reset();
+	InternalizePointersArrayL(iOpaqueDataArray, aStream);
+	InternalizePointersArrayL(iDataTypes, aStream);
+	}
+
+EXPORT_C const TUid CServiceInfo::Uid() const
+	{
+	return iUid;
+	}
+
+EXPORT_C const RPointerArray<CDataType>& CServiceInfo::DataTypes() const
+	{
+	return iDataTypes;
+	}
+
+EXPORT_C const RPointerArray<COpaqueData>& CServiceInfo::OpaqueData() const
+    {
+    return iOpaqueDataArray;
+    }
+
+///////////////////////
+// CLocalizableAppInfo
+///////////////////////
+
+CLocalizableAppInfo::CLocalizableAppInfo()
+	{
+	// empty
+	}
+
+CLocalizableAppInfo::~CLocalizableAppInfo()
+	{
+	delete iShortCaption;
+    delete iGroupName;
+	delete iCaptionAndIconInfo;
+	iViewDataList.ResetAndDestroy();
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewL()
+	{
+	CLocalizableAppInfo *self = CLocalizableAppInfo::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewLC()
+	{
+	CLocalizableAppInfo *self = new(ELeave) CLocalizableAppInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(KNullDesC(), KNullDesC());
+	return self;
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewL(RReadStream& aStream)
+	{
+	CLocalizableAppInfo *self = CLocalizableAppInfo::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewL(const TDesC& aShortCaption, TLanguage aApplicationLanguage, const TDesC& aGroupName, CCaptionAndIconInfo* aCaptionAndIconInfo, RPointerArray<CAppViewData>& aViewDataList)
+	{
+	CLocalizableAppInfo *self = CLocalizableAppInfo::NewLC(aShortCaption, aApplicationLanguage, aGroupName, aCaptionAndIconInfo, aViewDataList);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CLocalizableAppInfo* CLocalizableAppInfo::NewLC(const TDesC& aShortCaption, TLanguage aApplicationLanguage, const TDesC& aGroupName, CCaptionAndIconInfo* aCaptionAndIconInfo, RPointerArray<CAppViewData>& aViewDataList)
+	{
+	CLocalizableAppInfo *self = new(ELeave) CLocalizableAppInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(aShortCaption, aApplicationLanguage, aGroupName, aCaptionAndIconInfo, aViewDataList);
+	return self;
+	}
+	
+void CLocalizableAppInfo::ConstructL(const TDesC& aShortCaption, TLanguage aApplicationLanguage, const TDesC& aGroupName, CCaptionAndIconInfo* aCaptionAndIconInfo, RPointerArray<Usif::CAppViewData> aViewDataList)
+	{
+	DeleteObjectZ(iShortCaption);
+	iShortCaption = aShortCaption.AllocL();
+	iApplicationLanguage = aApplicationLanguage;
+	DeleteObjectZ(iGroupName);
+	iGroupName = aGroupName.AllocL();
+	iCaptionAndIconInfo = aCaptionAndIconInfo;
+	iViewDataList = aViewDataList;	
+    }
+
+void CLocalizableAppInfo::ConstructL(const TDesC& aShortCaption, const TDesC& aGroupName)
+    {
+    DeleteObjectZ(iShortCaption);
+    iShortCaption = aShortCaption.AllocL();
+    DeleteObjectZ(iGroupName);
+    iGroupName = aGroupName.AllocL();
+    }
+
+
+EXPORT_C void CLocalizableAppInfo::ExternalizeL(RWriteStream& aStream) const
+	{	
+	 aStream << *iShortCaption;
+	 aStream << TCardinality(iApplicationLanguage);
+     aStream << *iGroupName;
+	if(NULL != iCaptionAndIconInfo)
+	    {	    
+	    aStream.WriteInt8L(ETrue);
+	    aStream << *iCaptionAndIconInfo;
+	    }
+	else
+	    {	    
+	    aStream.WriteInt8L(EFalse);    
+	    }
+	ExternalizePointersArrayL(iViewDataList, aStream);
+	}
+	
+EXPORT_C void CLocalizableAppInfo::InternalizeL(RReadStream& aStream) 
+	{
+	DeleteObjectZ(iShortCaption);
+	iShortCaption = HBufC::NewL(aStream, KMaxTInt);
+	TCardinality c;
+	aStream >> c;
+	iApplicationLanguage = static_cast<TLanguage>(static_cast<TInt>(c));
+	DeleteObjectZ(iGroupName);
+	iGroupName = HBufC::NewL(aStream, KMaxTInt);
+	DeleteObjectZ(iCaptionAndIconInfo);
+	TBool isCaptionAndIconInfo= aStream.ReadInt8L();
+	if(isCaptionAndIconInfo)
+	    {
+	    iCaptionAndIconInfo = CCaptionAndIconInfo::NewL(aStream);
+	    }
+	InternalizePointersArrayL(iViewDataList, aStream);
+	}
+
+EXPORT_C const TDesC& CLocalizableAppInfo::ShortCaption() const
+	{
+	return *iShortCaption;
+	}
+
+EXPORT_C TLanguage CLocalizableAppInfo::ApplicationLanguage() const
+	{
+	return iApplicationLanguage;
+	}
+
+EXPORT_C const TDesC& CLocalizableAppInfo::GroupName() const
+	{
+	return *iGroupName;
+	}
+
+EXPORT_C const RPointerArray<CAppViewData>& CLocalizableAppInfo::ViewDataList() const
+	{
+	return iViewDataList;
+	}
+
+EXPORT_C const CCaptionAndIconInfo* CLocalizableAppInfo::CaptionAndIconInfo() const
+	{
+	return iCaptionAndIconInfo;
+	}
+
+///////////////////////
+// CCaptionAndIconInfo
+///////////////////////
+
+CCaptionAndIconInfo::CCaptionAndIconInfo()
+	{
+	// empty
+	}
+
+CCaptionAndIconInfo::~CCaptionAndIconInfo()
+	{
+	delete iCaption;
+	delete iIconFileName;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewL()
+	{
+	CCaptionAndIconInfo *self = CCaptionAndIconInfo::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewLC()
+	{
+	CCaptionAndIconInfo *self = new(ELeave) CCaptionAndIconInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(KNullDesC(), KNullDesC(), 0);
+	return self;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewL(RReadStream& aStream)
+	{
+	CCaptionAndIconInfo *self = CCaptionAndIconInfo::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewL(const TDesC& aCaption, const TDesC& aIconFileName, TInt aNumOfAppIcons)
+	{
+	CCaptionAndIconInfo *self = CCaptionAndIconInfo::NewLC(aCaption, aIconFileName, aNumOfAppIcons);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CCaptionAndIconInfo* CCaptionAndIconInfo::NewLC(const TDesC& aCaption, const TDesC& aIconFileName, TInt aNumOfAppIcons)
+	{
+	CCaptionAndIconInfo *self = new(ELeave) CCaptionAndIconInfo();
+	CleanupStack::PushL(self);
+	self->ConstructL(aCaption, aIconFileName, aNumOfAppIcons);
+	return self;
+	}
+	
+void CCaptionAndIconInfo::ConstructL(const TDesC& aCaption, const TDesC& aIconFileName, TInt aNumOfAppIcons)
+	{
+	DeleteObjectZ(iCaption);
+	iCaption = aCaption.AllocL();
+	DeleteObjectZ(iIconFileName);
+    iIconFileName = aIconFileName.AllocL();
+	iNumOfAppIcons = aNumOfAppIcons;
+	}
+
+EXPORT_C void CCaptionAndIconInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+     aStream << *iCaption;
+     aStream << *iIconFileName;
+	 aStream.WriteInt32L(iNumOfAppIcons);
+	}
+		
+EXPORT_C void CCaptionAndIconInfo::InternalizeL(RReadStream& aStream)
+	{
+	DeleteObjectZ(iCaption);
+	iCaption = HBufC::NewL(aStream, KMaxTInt);
+	DeleteObjectZ(iIconFileName);
+	iIconFileName = HBufC::NewL(aStream, KMaxTInt);
+	iNumOfAppIcons = aStream.ReadInt32L();
+	}
+
+EXPORT_C const TDesC& CCaptionAndIconInfo::Caption() const
+	{
+	return *iCaption;
+	}
+
+EXPORT_C const TDesC& CCaptionAndIconInfo::IconFileName() const
+	{
+	return *iIconFileName;
+	}
+
+EXPORT_C TInt CCaptionAndIconInfo::NumOfAppIcons() const
+	{
+	return iNumOfAppIcons;
+	}
+
+///////////////////////
+// CAppViewData
+///////////////////////
+
+CAppViewData::CAppViewData()
+	{
+	// empty
+	}
+
+CAppViewData::~CAppViewData()
+	{
+	delete iCaptionAndIconInfo;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewL()
+	{
+	CAppViewData *self = CAppViewData::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewLC()
+	{
+	CAppViewData *self = new(ELeave) CAppViewData();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewL(RReadStream& aStream)
+	{
+	CAppViewData *self = CAppViewData::NewLC();
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewL(TUid aUid, TInt aScreenMode, CCaptionAndIconInfo* aCaptionAndIconInfo)
+	{
+	CAppViewData *self = CAppViewData::NewLC(aUid, aScreenMode, aCaptionAndIconInfo);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CAppViewData* CAppViewData::NewLC(TUid aUid, TInt aScreenMode, CCaptionAndIconInfo* aCaptionAndIconInfo)
+	{
+	CAppViewData *self = new(ELeave) CAppViewData();
+	CleanupStack::PushL(self);
+	self->ConstructL(aUid, aScreenMode, aCaptionAndIconInfo);
+	return self;
+	}
+	
+void CAppViewData::ConstructL(TUid aUid, TInt aScreenMode, CCaptionAndIconInfo* aCaptionAndIconInfo)
+	{
+	iUid = aUid;
+    iScreenMode = aScreenMode;
+	iCaptionAndIconInfo = aCaptionAndIconInfo;
+	}
+
+EXPORT_C void CAppViewData::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << iUid;
+	aStream.WriteInt32L(iScreenMode);
+	if(NULL != iCaptionAndIconInfo)
+	   {       
+	   aStream.WriteInt8L(ETrue);
+	   aStream << *iCaptionAndIconInfo;
+	   }
+	else
+	   {       
+	   aStream.WriteInt8L(EFalse);    
+	   }
+	}
+			
+EXPORT_C void CAppViewData::InternalizeL(RReadStream& aStream)
+	{
+	aStream >> iUid;
+	iScreenMode = aStream.ReadInt32L();
+	DeleteObjectZ(iCaptionAndIconInfo);
+	TBool isCaptionAndIconInfo= aStream.ReadInt8L();
+	if(isCaptionAndIconInfo)
+	  {
+	  iCaptionAndIconInfo = CCaptionAndIconInfo::NewL(aStream);
+	  }
+	}
+
+EXPORT_C const TUid CAppViewData::Uid() const
+	{
+	return iUid;
+	}
+
+EXPORT_C TInt CAppViewData::ScreenMode() const
+	{
+	return iScreenMode;
+	}
+
+EXPORT_C const CCaptionAndIconInfo* CAppViewData::CaptionAndIconInfo() const
+	{
+	return iCaptionAndIconInfo;
+	}
+
+
+///////////////////////
+// CLauncherExecutable
+///////////////////////
+
+CLauncherExecutable::CLauncherExecutable()
+    {
+    }
+
+CLauncherExecutable::~CLauncherExecutable()
+    {
+    delete iLauncher;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewL()
+    {
+    CLauncherExecutable *self = CLauncherExecutable::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewLC()
+    {
+    CLauncherExecutable *self = new(ELeave) CLauncherExecutable();
+    CleanupStack::PushL(self);
+    self->ConstructL(0, KNullDesC());
+    return self;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewL(TInt aTypeId, const TDesC& aLauncher)
+    {
+    CLauncherExecutable *self = CLauncherExecutable::NewLC(aTypeId, aLauncher);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewLC(TInt aTypeId, const TDesC& aLauncher)
+    {
+    CLauncherExecutable *self = new(ELeave) CLauncherExecutable();
+    CleanupStack::PushL(self);
+    self->ConstructL(aTypeId, aLauncher);
+    return self;
+    }
+
+EXPORT_C CLauncherExecutable* CLauncherExecutable::NewL(RReadStream& aStream)
+    {
+    CLauncherExecutable *self = CLauncherExecutable::NewLC();
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CLauncherExecutable::ConstructL(TInt aTypeId, const TDesC& aLauncher)
+    {
+    iTypeId = aTypeId;
+    DeleteObjectZ(iLauncher);
+    iLauncher = aLauncher.AllocL();
+    }
+
+EXPORT_C const TDesC& CLauncherExecutable::Launcher() const
+    {
+    return *iLauncher;
+    }
+
+EXPORT_C TInt CLauncherExecutable::TypeId() const
+    {
+    return iTypeId;
+    }
+
+EXPORT_C void CLauncherExecutable::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L(iTypeId);
+    aStream << *iLauncher;
+    }
+
+EXPORT_C void CLauncherExecutable::InternalizeL(RReadStream& aStream)
+    {       
+    iTypeId = aStream.ReadInt32L();
+    
+    DeleteObjectZ(iLauncher);
+    iLauncher = HBufC::NewL(aStream, KMaxTInt);
+    }
+