diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/src/ncdreport.cpp --- /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; + } +