diff -r 000000000000 -r 7f85d04be362 upnpmediaserver/contentdirectoryservice/inc/upnpelementfactory.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpmediaserver/contentdirectoryservice/inc/upnpelementfactory.h Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,305 @@ +/** @file +* Copyright (c) 2005-2006 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: Declares ElementFactory class. +* +*/ + + +#ifndef C_CUPNPELEMENTFACTORY_H +#define C_CUPNPELEMENTFACTORY_H + + +// INCLUDES + +#include +#include +#include "upnpcontentdirectory.h" +#include "upnpfiletransfer.h" +#include "upnperrors.h" // Added by ClassView +#include "upnpdominterface.h" + +// FORWARD DECLARATIONS + +class CUpnpElementFactory; +class TUpnpContainerUpdateId; +class CUpnpFileTransferTimerObserver; +class CUpnpObject; +class CUpnpItem; + + +// FORWARD DECLARATIONS + +class CUpnpContentDirectory; + +// CLASS DECLARATION + +/** +* @brief Used to create content objects +* +* +* @lib contentdirectory.lib +* @since Series60 2.6 +*/ +class CUpnpElementFactory : public CBase +{ +public: // Constructors and destructors + + /** + * Gets active element from XML document. An active element + * is a first element different from element. + * @param aDocument XML document which will be search for active element. + * @return handler to active element. + */ + TXmlEngElement ActiveElementL( const RXmlEngDocument& aDocument ); + + /** + * Extracts active element from XML document. + * An active element is a first element different from element. + * IMPORTANT: Caller takes responsibility for returned element. + * @param aDocument XML document which will be search for active element. + * @return handler to extracted active element. + */ + RXmlEngDocument ExtractActiveElementL( const RXmlEngDocument& aDocument ); + + /** + * Checks if two elements are equal and have exactly the same subtrees. + * @param aFirst - first element to compare + * @param aSecond - second element to compare + * @return ETrue if elemants are equal. + */ + TBool ElementsMatchL( TXmlEngElement aFirst, TXmlEngElement aSecond ); + + /** + * Counts elements in array that have the same name. + * @param aName - name of elements, which will be counted. + * @param aArray - array with elements to count. + * @return number of found elements. + */ + TInt CountElementsL( const TDesC8& aName, RArray& aArray ); + + /** + * Counts elements in array that have the same name. + * @param aName - name of elements, which will be counted. + * @param aArray - array with elements to count. + * @return number of found elements. + */ + TInt CountElementsL( const TDesC8& aName, RArray& aArray ); + + /** + * Gets classes descriptions for given object. + * @param aObject - element representing object, which classes + * descriptions we wan to acquire + * @param aArray - (OUT) reference to array which will be filled with classes + * descriptions. + * @param aObjType - object type [item or container] + */ + void ClassesL( const TXmlEngElement& aObject, RArray& aArray, const TDesC8& aObjType = KNullDesC8() ); + + /** + * Constructs descriptor with element's name and namespace prefix separated with colon. + * IMPORTANT: As the function name indicates, it leaves pointer to heap descriptor on + * cleanup stack. + * @param aElement - element for which descriptor will be constructed. + * @return - pointer to descriptor, allocated on the heap, containing element's name with prefix. + */ + HBufC8* NameWithNsLC( const TXmlEngElement& aElement ); + + + /** + * Two-phased constructor for building CUpnpElementFactory. + * @since Series60 2.6 + */ + static CUpnpElementFactory* NewL( const TDesC& aObjectsXmlPath ); + + /** + * Two-phased constructor for building CUpnpElementFactory. + * @since Series60 2.6 + */ + static CUpnpElementFactory* NewLC( const TDesC& aObjectsXmlPath ); + + /** + * Destructor function; called automatically from the destructor of a + * derived class + */ + virtual ~CUpnpElementFactory(); + + /** + * Function to validate a new object given by Control Point, especially + * upnp:class element field eg. object.item.musictrack + * IMPORTANT: If objects's description is invalid due to missing elements + * it tries to repair it by adding those missing elements. + * @since Series60 2.6 + * @param aElement element (xml) given by Control Point + * @param aUpdateItem + * @return Returns a error code that is to be sent to caller of action. + */ + TUpnpErrorCode ValidateNewObjectL( const TXmlEngElement& aNewElement, TBool aNew = ETrue, TBool aLocalSharing = EFalse ); + + /** + * Function gets pointer to CUpnpContentDirectory and puts it into CUpnpElementFactory object + * @param aCD - pointer to CUpnpContentDirectory object + */ + void GetContentDirectoryReference(CUpnpContentDirectory* aCD); + +private: // Constructors + + /** + * C++ default constructor. + */ + CUpnpElementFactory(); + + /** + * Second phase of the constructor. + * By default Symbian 2nd phase constructor is private. + * @param service Parent service + */ + void ConstructL(const TDesC& aObjectsXmlPath); + +private: // New functions + + void ValidateBigImageL( TXmlEngElement aObj); + + /** + * + * @since Series S60 3.1 + * @param aPattern + * @return boolean + */ + TBool IsRequiredL(TXmlEngElement aPattern); + + /** + * Getter + * @since Series S60 3.1 + * @param aPropertyName + * @param aClassList + * @return TXmlEngElement + */ + TXmlEngElement GetPatternForResAttrL(const TDesC8& aPropertyName, RArray& aClassList ); + + /** + * + * @since Series S60 3.1 + * @param aElement + * @param aClassList + */ + void ValidateResElL( TXmlEngElement aElement, RArray& aClassList); + + /** + * Validates element + * @since Series S60 3.1 + * @param aElement + * @param aClasList + */ + void ValidateElementL(TXmlEngElement aElement, RArray& aClassList); + + /** + * + * @since Series S60 3.1 + * @param aObj + * @parma aClassList + */ + void ValidatePropertiesL(TXmlEngElement aObj, RArray& aClassList); + + /** + * + * @since Series S60 3.1 + * @param aObj + * @param aClassList + */ + void ValidateMainAttributesL(TXmlEngElement aObj, RArray& aClassList); + + /** + * + * @since Series S60 3.1 + * @param aAttr + * @parma aPattern + */ + void ValidateElWithPatternL(TXmlEngElement aAttr, TXmlEngElement aPattern); + + /** + * + * @since Series S60 3.1 + * @param aAttr + * @param aPattern + */ + void ValidateAttrWithPatternL(TXmlEngAttr aAttr, TXmlEngElement aPattern); + + /** + * + * @since Series S60 3.1 + * @param aPropertyName + * @param aClassList + * @return TXmlEngElement + */ + TXmlEngElement GetPatternL( const TDesC8& aPropertyName, RArray& aClassList, const TDesC8& aType ); + + /** + * + * @since Series S60 3.1 + * @param aElement + * @return boolean + */ + TBool IsClassElement( const TXmlEngElement& aElement ); + + /** + * + * @since Series S60 3.1 + * @param aElement + * @return boolean + */ + TBool IsNotEmptyImportUriL( const TXmlEngElement& aElement ); + + /** + * + * @since Series S60 3.1 + * @param aElement + * @return boolean + */ + TBool IsMainObjectTagL(TXmlEngElement aElement); + + /** + * + * @since Series S60 3.1 + * @param aProtocolInfo + * @param aLocalSharing + * @return descriptor pointer + */ + HBufC8* ValidateProtocolInfoInResL( const TDesC8& aProtocolInfo, TBool aLocalSharing ); + + /** + * + * @since Series S60 3.1 + * @param aElement + */ + void CheckDurationOfResElementL(const TXmlEngElement& aElement); + + /** + * + * @since Series S60 3.2 + * @param aElement + */ + void CheckSizeOfResElementL(const TXmlEngElement& aElement); + +private: // Data + + // owned + RXmlEngDocument iDocument; + // Pointer to content directory + CUpnpContentDirectory* iContentDirectory; + RXmlEngDOMImplementation iDOMImpl; +}; + +#endif // C_CUPNPELEMENTFACTORY_H + +// End of File