--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/server/src/ncdreportinstall.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,318 @@
+/*
+* 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: CNcdReportInstall implementation
+*
+*/
+
+
+#include "ncdreportinstall.h"
+
+#include "ncdreportmanager.h"
+#include "catalogsdebug.h"
+#include "ncdpanics.h"
+#include "ncdnodeidentifier.h"
+#include "catalogsutils.h"
+#include "catalogsconstants.h"
+#include "ncdrequestinstallation.h"
+#include "ncdprotocol.h"
+#include "catalogshttpoperation.h"
+#include "catalogshttpconfig.h"
+#include "ncdrequestgenerator.h"
+#include "ncdproviderutils.h"
+#include "ncdgeneralmanager.h"
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+CNcdReportInstall* CNcdReportInstall::NewLC(
+ CNcdReportManager& aReportManager,
+ const TDesC& aContentIdentifier,
+ const CNcdNodeIdentifier& aMetadataId,
+ const TNcdReportStatusInfo& aStatus,
+ const TDesC& aReportUri,
+ const TDesC& aReportNamespace )
+ {
+ CNcdReportInstall* self = new( ELeave ) CNcdReportInstall(
+ aStatus, aReportManager );
+ CleanupStack::PushL( self );
+ self->ConstructL(
+ aContentIdentifier,
+ aMetadataId,
+ aReportUri,
+ aReportNamespace );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Create new CNcdReportInstall from the given stream
+// ---------------------------------------------------------------------------
+CNcdReportInstall* CNcdReportInstall::NewLC(
+ CNcdReportManager& aReportManager,
+ RReadStream& aStream )
+ {
+ TNcdReportStatusInfo tmpStatus;
+ CNcdReportInstall* self = new( ELeave ) CNcdReportInstall(
+ tmpStatus, aReportManager );
+ CleanupStack::PushL( self );
+ self->InternalizeL( aStream );
+ return self;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+CNcdReportInstall::~CNcdReportInstall()
+ {
+ DLTRACEIN((""));
+ }
+
+
+// ---------------------------------------------------------------------------
+// Overridden SetStatus
+// ---------------------------------------------------------------------------
+TInt CNcdReportInstall::SetStatus( const TNcdReportStatusInfo& aStatus )
+ {
+ DLTRACEIN((""));
+ TInt err( CNcdReport::SetStatus( aStatus ) );
+
+ DLTRACEOUT(("err: %d", err));
+ return err;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TBool CNcdReportInstall::CanBundle() const
+ {
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+void CNcdReportInstall::AddReportDataL(
+ CNcdRequestInstallation& aRequest ) const
+ {
+ DLTRACEIN((""));
+ aRequest.AddInstallDetailsL(
+ MetadataId().NodeId(),
+ // convert status to actual status code
+ ReportStatusToInstallReportStatus( Status() ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TBool CNcdReportInstall::IsSendable() const
+ {
+ DLTRACEIN((""));
+ TInt value = ReportStatusToInstallReportStatus( Status() );
+
+ // Can send if status code is good and it's not being sent already.
+ // Notice, that for now same constants are used here as in download report.
+ return value != KNcdDownloadReportNotSupported &&
+ !ReportTransaction() &&
+ Attributes().AttributeInt32(
+ ENcdReportAttributeSendable );
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TBool CNcdReportInstall::CanBeRemoved() const
+ {
+ DLTRACEIN((""));
+ return Status().iStatus >= ENcdReportCancel &&
+ Status().iStatus == Attributes().AttributeInt32(
+ ENcdReportAttributeLatestSentReport );
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+HBufC8* CNcdReportInstall::CreateReportL() const
+ {
+ DLTRACEIN((""));
+ CNcdRequestInstallation* report =
+ NcdRequestGenerator::CreateInstallationReportRequestLC();
+
+ report->SetNamespaceL( Attributes().AttributeString16(
+ ENcdReportAttributeReportNamespace ) );
+
+ AddReportDataL( *report );
+
+ HBufC8* data =
+ ReportManager().GeneralManager().ProtocolManager().ProcessPreminetRequestL(
+ ReportManager().Context(),
+ *report,
+ Attributes().AttributeString16(
+ ENcdReportAttributeReportUri ),
+ ETrue );
+
+
+ CleanupStack::PopAndDestroy( report );
+ return data;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+void CNcdReportInstall::UpdateTransactionConfigL(
+ MCatalogsHttpOperation& aTransaction )
+ {
+ DLTRACEIN((""));
+ aTransaction.Config().SetConnectionMethod( ConnectionMethod() );
+ aTransaction.Config().SetPriority( ECatalogsPriorityLow );
+ aTransaction.SetContentTypeL( KMimeTypeXml );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Returns ETrue if the status cannot change anymore
+// ---------------------------------------------------------------------------
+TBool CNcdReportInstall::StatusIsFinal() const
+ {
+ DLTRACEIN((""));
+ return IsOneOf(
+ Status().iStatus,
+ ENcdReportCancel,
+ ENcdReportFail,
+ ENcdReportSuccess );
+ }
+
+
+// ---------------------------------------------------------------------------
+// PRIVATE METHODS
+// ---------------------------------------------------------------------------
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+CNcdReportInstall::CNcdReportInstall(
+ const TNcdReportStatusInfo& aStatus,
+ CNcdReportManager& aReportManager )
+ : CNcdReport( ENcdReportInstall, aReportManager, aStatus )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+void CNcdReportInstall::ConstructL(
+ const TDesC& aContentIdentifier,
+ const CNcdNodeIdentifier& aMetadataId,
+ const TDesC& aReportUri,
+ const TDesC& aReportNamespace )
+ {
+ DLTRACEIN((""));
+ BaseConstructL( aMetadataId );
+
+ if ( !aReportUri.Length() ||
+ !aReportNamespace.Length() )
+ {
+ DLERROR(("Either URI, report URI or report namespace is empty"));
+ User::Leave( KErrArgument );
+ }
+
+ Attributes().SetAttributeL(
+ ENcdReportAttributeGenericId,
+ aContentIdentifier );
+
+ Attributes().SetAttributeL(
+ ENcdReportAttributeReportUri,
+ aReportUri );
+
+ Attributes().SetAttributeL(
+ ENcdReportAttributeReportNamespace,
+ aReportNamespace );
+
+ DLTRACEOUT((""));
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TInt CNcdReportInstall::ReportStatusToInstallReportStatus(
+ const TNcdReportStatusInfo& aStatus ) const
+ {
+ DLTRACEIN(( "aStatus: %d", aStatus.iStatus ));
+
+ TInt status = 0;
+
+ if ( ReportManager().ReportingStyle()
+ == MNcdServerReportManager::EReportingStyleS60 )
+ {
+ // Return the S60 error code.
+ status = aStatus.iErrorCode;
+ }
+ else
+ {
+ // For now, use the same values as with the download.
+ // If these are defined more accurately, then change them.
+ switch ( aStatus.iStatus )
+ {
+ case ENcdReportCancel:
+ {
+ status = KNcdDownloadReportCancel;
+ break;
+ }
+
+ case ENcdReportFail:
+ {
+ status = KNcdDownloadReportFail;
+ break;
+ }
+
+ case ENcdReportSuccess:
+ {
+ status = KNcdDownloadReportSuccess;
+ break;
+ }
+
+ // Unsupported cases
+ case ENcdReportNone:
+ case ENcdReportCreate:
+ case ENcdReportStart:
+ case ENcdReportPause:
+ case ENcdReportResume:
+ {
+ DLTRACE(("Status not supported for install reporting"));
+ status = KNcdDownloadReportNotSupported;
+ break;
+ }
+
+ default:
+ {
+ NCD_ASSERT_ALWAYS( 0, ENcdPanicIndexOutOfRange );
+ break;
+ }
+ }
+ }
+
+ DLTRACEOUT(("Install report status: %d", status));
+ return status;
+ }