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