--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/server/src/ncdreport.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,434 @@
+/*
+* 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: CNcdReport implementation
+*
+*/
+
+
+#include "ncdreport.h"
+#include "catalogsdebug.h"
+#include "ncdpanics.h"
+#include "ncdnodeidentifier.h"
+#include "catalogsutils.h"
+#include "ncdreportmanager.h"
+#include "catalogsconnectionmethod.h"
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+CNcdReport::~CNcdReport()
+ {
+ DLTRACEIN((""));
+
+ delete iMetadataId;
+ iTimeStamps.Reset();
+ delete iAttributes;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+void CNcdReport::ExternalizeL( RWriteStream& aStream )
+ {
+ DLTRACEIN((""));
+
+ ExternalizeEnumL( iType, aStream );
+
+ ExternalizeEnumL( iStatus.iStatus, aStream );
+ aStream.WriteInt32L( iStatus.iErrorCode );
+
+ aStream.WriteInt32L( iReportId );
+
+ iMetadataId->ExternalizeL( aStream );
+
+ iAccessPoint.ExternalizeL( aStream );
+
+ DLTRACE(("Externalizing timestamps"));
+ DASSERT( iTimeStamps.Count() == ENcdReportTimeInternal );
+ for ( TInt i = 0; i < ENcdReportTimeInternal; ++i )
+ {
+ aStream << iTimeStamps[i];
+ }
+ iAttributes->ExternalizeL( aStream );
+ DLTRACEOUT(("Externalization successful"));
+ }
+
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+void CNcdReport::InternalizeL( RReadStream& aStream )
+ {
+ DLTRACEIN((""));
+
+ // iType is internalized by the report manager
+ InternalizeEnumL( iStatus.iStatus, aStream );
+ iStatus.iErrorCode = aStream.ReadInt32L();
+
+ iReportId = aStream.ReadInt32L();
+
+ delete iMetadataId;
+ iMetadataId = NULL;
+
+ iMetadataId = CNcdNodeIdentifier::NewL( aStream );
+
+ iAccessPoint.InternalizeL( aStream );
+
+ ResetTimeStampsL();
+ DLTRACE(("Internalizing timestamps"));
+ DASSERT( iTimeStamps.Count() == ENcdReportTimeInternal );
+ for ( TInt i = 0; i < ENcdReportTimeInternal; ++i )
+ {
+ aStream >> iTimeStamps[i];
+ }
+
+ delete iAttributes;
+ iAttributes = NULL;
+ iAttributes = CNcdAttributes::NewL(
+ aStream,
+ ENcdReportAttributeInternal );
+
+ DLTRACEOUT(("Internalization successful"));
+ }
+
+
+// ---------------------------------------------------------------------------
+// Report type getter
+// ---------------------------------------------------------------------------
+const TNcdReportType& CNcdReport::ReportType() const
+ {
+ return iType;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Report id setter
+// ---------------------------------------------------------------------------
+void CNcdReport::SetReportId( const TNcdReportId& aReportId )
+ {
+ DLTRACEIN(("aReportId: %d", aReportId ));
+ iReportId = aReportId;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Report id getter
+// ---------------------------------------------------------------------------
+const TNcdReportId& CNcdReport::ReportId() const
+ {
+ return iReportId;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Attribute getter
+// ---------------------------------------------------------------------------
+CNcdAttributes& CNcdReport::Attributes()
+ {
+ DLTRACEIN((""));
+ return *iAttributes;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Attribute getter
+// ---------------------------------------------------------------------------
+const CNcdAttributes& CNcdReport::Attributes() const
+ {
+ DLTRACEIN((""));
+ return *iAttributes;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+const TNcdReportStatusInfo& CNcdReport::Status() const
+ {
+ DLTRACEIN(("iStatus: %d", iStatus.iStatus));
+ return iStatus;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TInt CNcdReport::SetStatus( const TNcdReportStatusInfo& aStatus )
+ {
+ DLTRACEIN(("aStatus: %d", aStatus.iStatus));
+ iStatus = aStatus;
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TBool CNcdReport::Match(
+ const CNcdNodeIdentifier& aMetadataId,
+ const TDesC& aGenericId,
+ const TDesC& aReportUri,
+ const TNcdReportType& aReportType ) const
+ {
+ return aMetadataId.Equals( *iMetadataId ) &&
+ ( aGenericId == iAttributes->AttributeString16(
+ ENcdReportAttributeGenericId ) ) &&
+ ( aReportUri == iAttributes->AttributeString16(
+ ENcdReportAttributeReportUri ) &&
+ ( aReportType == ReportType() ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Linear order for reports
+// ---------------------------------------------------------------------------
+TInt CNcdReport::Compare(
+ const CNcdReport& aFirst,
+ const CNcdReport& aSecond )
+ {
+ // Ordering is done so that reports that can be bundled together are
+ // as close as possible
+
+ // Zero means that items equal.
+ TInt comp( 0 );
+
+ // First compare that nodes are of the same type
+ comp = aFirst.ReportType() - aSecond.ReportType();
+
+ if ( comp == 0 )
+ {
+ // Compare report URIs
+ comp = aFirst.Attributes().AttributeString16(
+ ENcdReportAttributeReportUri).Compare(
+ aSecond.Attributes().AttributeString16(
+ ENcdReportAttributeReportUri ) );
+
+ if ( comp == 0 )
+ {
+ // Compare generic IDs
+ comp = aFirst.Attributes().AttributeString16(
+ ENcdReportAttributeGenericId ).Compare(
+ aSecond.Attributes().AttributeString16(
+ ENcdReportAttributeGenericId ) );
+ if ( comp == 0 )
+ {
+ // Compare metadata's
+ comp = CNcdNodeIdentifier::Compare(
+ aFirst.MetadataId(),
+ aSecond.MetadataId() );
+ }
+ }
+ }
+ return comp;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Access point setter
+// ---------------------------------------------------------------------------
+void CNcdReport::SetAccessPoint( const TCatalogsConnectionMethod& aAp )
+ {
+ DLTRACEIN((""));
+ iAccessPoint = aAp;
+ DLMETHOD( iAccessPoint );
+ }
+
+// ---------------------------------------------------------------------------
+// Access point getter
+// ---------------------------------------------------------------------------
+const TCatalogsConnectionMethod& CNcdReport::ConnectionMethod() const
+ {
+ DLTRACEIN((""));
+ DLMETHOD( iAccessPoint );
+ return iAccessPoint;
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+const CNcdNodeIdentifier& CNcdReport::MetadataId() const
+ {
+ return *iMetadataId;
+ }
+
+
+// ---------------------------------------------------------------------------
+// TimeStamp setter
+// ---------------------------------------------------------------------------
+void CNcdReport::SetTimeStamp(
+ const TNcdReportTimeStamps& aTimeStamp,
+ const TTime& aTime )
+ {
+ DLTRACEIN(("aTimeStamp: %d, time: %Ld", aTimeStamp, aTime.Int64() ));
+ DASSERT( aTimeStamp < iTimeStamps.Count() );
+ iTimeStamps[aTimeStamp] = aTime.Int64();
+ }
+
+
+// ---------------------------------------------------------------------------
+// TimeStamp getter
+// ---------------------------------------------------------------------------
+const TInt64& CNcdReport::TimeStamp(
+ const TNcdReportTimeStamps& aTimeStamp ) const
+ {
+ DLTRACEIN(("aTimeStamp: %d", aTimeStamp));
+
+ DASSERT( aTimeStamp < iTimeStamps.Count() );
+ DLTRACEOUT(("Time: %Ld", iTimeStamps[aTimeStamp] ));
+ return iTimeStamps[aTimeStamp];
+ }
+
+
+// ---------------------------------------------------------------------------
+// Reset the timestamp array
+// ---------------------------------------------------------------------------
+void CNcdReport::ResetTimeStampsL()
+ {
+ DLTRACEIN((""));
+ iTimeStamps.Reset();
+ iTimeStamps.ReserveL( ENcdReportTimeInternal );
+
+ TInt64 zero = 0;
+ for ( TInt i = 0; i < ENcdReportTimeInternal; ++i )
+ {
+ iTimeStamps.Append( zero );
+ }
+ DLTRACEOUT(("Time stamps reseted"));
+ }
+
+// ---------------------------------------------------------------------------
+// Transaction getter
+// ---------------------------------------------------------------------------
+const MCatalogsHttpOperation* CNcdReport::ReportTransaction() const
+ {
+ return iReportTransaction;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Transaction setter
+// ---------------------------------------------------------------------------
+void CNcdReport::SetReportTransaction(
+ MCatalogsHttpOperation* aTransaction)
+ {
+ iReportTransaction = aTransaction;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets time stamp to current time
+// ---------------------------------------------------------------------------
+void CNcdReport::SetCurrentTime( const TNcdReportTimeStamps& aTime )
+ {
+ DLTRACEIN(("aTime: %d", aTime));
+
+ TTime time;
+ time.UniversalTime();
+ SetTimeStamp( aTime, time );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Calculates difference between given times in seconds
+// ---------------------------------------------------------------------------
+TInt CNcdReport::DurationInSecondsL(
+ const TNcdReportTimeStamps& aStart,
+ const TNcdReportTimeStamps& aEnd ) const
+ {
+ DLTRACEIN((""));
+ TTime start( TimeStamp( aStart ) );
+ TTime end( TimeStamp( aEnd ) );
+ TTimeIntervalSeconds duration;
+
+ User::LeaveIfError( end.SecondsFrom( start, duration ) );
+ DLTRACEOUT(("Duration: %d", duration.Int() ));
+ return duration.Int();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Default implementation for CanBundle
+// ---------------------------------------------------------------------------
+TBool CNcdReport::CanBundle() const
+ {
+ DLTRACEIN((""));
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Add report data
+// ---------------------------------------------------------------------------
+void CNcdReport::AddReportDataL(
+ CNcdRequestInstallation& /* aRequest */ ) const
+ {
+ DLTRACEIN((""));
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// PRIVATE METHODS
+// ---------------------------------------------------------------------------
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+CNcdReport::CNcdReport(
+ TNcdReportType aType,
+ CNcdReportManager& aReportManager,
+ const TNcdReportStatusInfo& aStatus )
+ : iType( aType ),
+ iReportManager( aReportManager ),
+ iStatus( aStatus ),
+ iReportId( KNcdReportNotSupported )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+void CNcdReport::BaseConstructL(
+ const CNcdNodeIdentifier& aMetadataId )
+ {
+ DLTRACEIN((""));
+
+ iMetadataId = CNcdNodeIdentifier::NewL( aMetadataId );
+ ResetTimeStampsL();
+ iAttributes = CNcdAttributes::NewL( ENcdReportAttributeInternal );
+
+ DLTRACEOUT((""));
+ }
+
+
+// ---------------------------------------------------------------------------
+// ReportManager
+// ---------------------------------------------------------------------------
+const CNcdReportManager& CNcdReport::ReportManager() const
+ {
+ return iReportManager;
+ }
+
+// ---------------------------------------------------------------------------
+// ReportManager
+// ---------------------------------------------------------------------------
+CNcdReportManager& CNcdReport::ReportManager()
+ {
+ return iReportManager;
+ }
+