upnpsharing/upnpsharingalgorithm/inc/upnpcontainerresolver.h
branchIOP_Improvements
changeset 40 08b5eae9f9ff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpsharing/upnpsharingalgorithm/inc/upnpcontainerresolver.h	Wed Nov 03 11:45:09 2010 +0200
@@ -0,0 +1,232 @@
+/*
+* Copyright (c) 2009 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:  Header file for the CUpnpContainerResolver class.
+*
+*/
+
+#ifndef C_UPNP_CONTAINER_RESOLVER_H
+#define C_UPNP_CONTAINER_RESOLVER_H
+
+#include <e32base.h>
+#include <barsc.h> // for RResourceFile
+#include <upnpcontainer.h>
+#include "upnpcdsliteobjectarray.h"
+
+// FORWARD DECLARTIONS
+class CUpnpItem;
+
+// CLASS DECLARATION
+
+/**
+*  CUpnpContainerResolver class definition
+*
+*  @lib upnpsharingalgorithm.lib
+*  @since S60 5.2
+*/
+class CUpnpContainerResolver : public CBase
+    {
+
+    public: // Constructors and destructor
+
+        /**
+         * Two-phased constructor.
+         *
+         * @since S60 5.2
+         * @param aCdsLiteObjectArray, array of cds objects
+         * @return container resolver object
+         */
+        static CUpnpContainerResolver* NewL(
+            CUpnpCdsLiteObjectArray& aCdsLiteObjectArray );
+
+        /**
+         * Destructor.
+         *
+         * @since S60 5.2
+         */
+        virtual ~CUpnpContainerResolver();
+
+        /**
+         * Resolves containers that need to be created.
+         * Container list is returned to the caller.
+         *
+         * @since S60 5.2
+         * @param aItem, upnp item to be shared
+         * @return RPointerArray, array containing created containers
+         */
+        RPointerArray<CUpnpContainer>
+            ResolveContainerStructureL( CUpnpItem& aItem );
+
+        /**
+         * Resolves containers that need to be created for a reference item.
+         * Container list is returned to the caller.
+         *
+         * @since S60 5.2
+         * @param aType, reference media type
+         * @param aItem, upnp item to be shared
+         * @return RPointerArray, array containing created containers
+         */
+        RPointerArray<CUpnpContainer>
+            ResolveReferenceContainersL( TInt aType, CUpnpItem& aItem );
+
+        /**
+         * Resolves containers that need to be removed (containers
+         * that does not contain items anymore) after an item
+         * has been unshared
+         *
+         * @since S60 5.2
+         * @param aContainerId, Container id where item belongs.
+         * @return RPointerArray, containers to be removed
+         */
+        RPointerArray<CUpnpCdsLiteObject>
+            ResolveEmptyContainersL( TDesC8& aContainerId );
+
+    private: // Second-phase contstruction
+
+        /**
+         * Default c++ constructor
+         *
+         * @since S60 5.2
+         * @param aCdsLiteObjectArray, array of cds objects
+         */
+        CUpnpContainerResolver(
+            CUpnpCdsLiteObjectArray& aCdsLiteObjectArray ):
+                iCdsLiteObjectArray( aCdsLiteObjectArray ) {}
+
+        /**
+         * Second-phase constructor.
+         *
+         * @since S60 5.2
+         */
+        void ConstructL();
+
+        /**
+         * Creates a new UpnpContainer according to the given parameters
+         *
+         * @since S60 5.2
+         * @param aTitle, title of created container
+         * @param aClass, class of created container
+         * @return CUpnpContainer, created container
+         */
+        CUpnpContainer* CreateContainerL( const TDesC8& aTitle,
+                                          const TDesC8& aClass );
+
+        /**
+         * Finds non-existing containers from CDS and creates them.
+         * If new containers are not created, returned parent id
+         * is for item, otherwise for last found container
+         *
+         * @since S60 5.2
+         * @param aContainerNames, container names to be resolved
+         * @param aContainers, containers that need to be shared
+         * @param aMediaClass, media class type
+         * @return HBufC8, parent id of a container / item
+         */
+        HBufC8* CreateContainersL(
+            RPointerArray<HBufC8>& aContainerNames,
+            RPointerArray<CUpnpContainer>& aContainers,
+            const TDesC8& aMediaClass );
+
+
+        /**
+         * Reads resource text from component resource file.
+         *
+         * @since S60 5.2
+         * @param aResourceId, resource id
+         * @return HBufC8, resource text
+         */
+        HBufC8* ReadResourceTextL( TInt aResourceId );
+
+        /**
+         * Finds element value of a certain element
+         *
+         * @since S60 5.2
+         * @param elements, element array
+         * @return HBufC8, element value
+         */
+        HBufC8* GetElementL( const RUPnPElementsArray& elements,
+                                   const TDesC8& aElement );
+
+        /**
+         * Modifies aDate parameter so that month and day
+         * values are decreased by one. This is because
+         * month and day count need to be started from
+         * zero, not from 1.
+         *
+         * @since S60 5.2
+         * @param aDate, date to be adjusted
+         * @return HBufC8, adjusted date
+         */
+        HBufC8* AdjustDateL( const TDesC8& aDate );
+
+        /**
+         * Adds date containers to the aContainerNames
+         * list. Year, Month and Day are added separately.
+         * Returns KErrNotFound, if date metadata is missing.
+         *
+         * @since S60 5.2
+         * @param aContainerNames, list of containers
+         * @param aElements, list of item elements
+         * @return TInt, error code
+         */
+        TInt AddByDateContainersL(
+            RPointerArray<HBufC8>& aContainerNames,
+            const RUPnPElementsArray& aElements );
+
+        /**
+         * Finds an element and modifies element value so
+         * that only the first letter of the element is
+         * capitalized. Modified element value is appended
+         * to the aContainerNames array. Returns KErrNotFound,
+         * if date metadata is missing.
+         *
+         * @since S60 5.2
+         * @param aContainerNames, list of containers
+         * @param aElements, list of item elements
+         * @param aElementType, element type
+         */
+        void ModifyAndAppendElementL(
+                RPointerArray<HBufC8>& aContainerNames,
+                const RUPnPElementsArray& aElements,
+                const TDesC8& aElementType );
+
+        /**
+         * Appends container name to array.
+         * Container name is read from resource.
+         * @since S60 5.2
+         * @param aArray, array of container names
+         * @param TInt, resource text id
+         */
+        void AppendContainerNameToArrayL( RPointerArray<HBufC8>& aArray,
+                                          TInt aResourceTextId );
+    private: // Data members
+
+        /**
+         * Reference to the object array
+         */
+        CUpnpCdsLiteObjectArray& iCdsLiteObjectArray;
+
+        /**
+         * Resource file. Owned
+         */
+        RResourceFile            iResourceFile;
+
+        /**
+         * File server session. Owned
+         */
+        RFs                      iFs;
+    };
+
+#endif // C_UPNP_CONTAINER_RESOLVER_H
+
+// End of file