diff -r 000000000000 -r c53acadfccc6 metadataengine/server/inc/mdsnamespacedef.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/metadataengine/server/inc/mdsnamespacedef.h Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,255 @@ +/* +* 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: Class to hold description about one namespace and every objects, +* properties and events it holds. +* +*/ + +#ifndef __MDSNAMESPACE_H__ +#define __MDSNAMESPACE_H__ + +#include +#include + +#include "mdsitemdef.h" + +class CMdsObjectDef; +class CMdsEventDef; +class CMdsRelationDef; +class CMdCSerializationBuffer; +class CMdsPropertyDef; +class CMdsSchema; + +/** + * Metadata namespace class + * + * This class is responsible for holding information about everything + * which namespace can contain (name, objects, event, relations) + * + */ +class CMdsNamespaceDef : public CMdsItemDef + { + friend class CMdsSchema; + friend class CMdsImportExport; + +public: + /** + * Create new namespace object + * @param aId id of namespace + * @param aName name of namespace + * @param aReadOnly read-only namespace flag + * @return pointer to new created namespace + */ + static CMdsNamespaceDef* NewL( TDefId aId, const TDesC& aName, TBool aReadOnly, + TUint32 aVendorId ); + + /** + * Create new namespace object + * @param aId id of namespace + * @param aName name of namespace + * @param aReadOnly read-only namespace flag + * @return pointer to new created namespace + */ + static CMdsNamespaceDef* NewLC( TDefId aId, const TDesC& aName, TBool aReadOnly, + TUint32 aVendorId ); + + virtual ~CMdsNamespaceDef(); + + inline TBool GetReadOnly() const; + + inline TBool GetFirstRead() const; + + inline void UnsetFirstRead(); + + inline void SetBaseObject( CMdsObjectDef* const aBaseObject ); + + inline TInt32 GetVendorId() const; + + inline void SetVendorId(TInt32 aVendorId); + + /** + * Add object to namespace and return pointer to it, + * if object already exist function leaves with KErrAlreadyExists + * @param objName name of the object definition + * @param parName name of the object parent + * @return pointer to new object definition or leave with error + */ + CMdsObjectDef* AddObjectDefL( const TDesC& aObjectName, const TDesC& aParentName, CMdsSchema* aDefaultSchema ); + + /** + * Add relation to array + * @param relName name of relation + */ + void AddRelationDefL( const TDesC& aRelationName ); + + /** + * Add event to event array + * @param objName name of event + * @param aPriority priority of event + */ + void AddEventDefL( const TDesC& aEventName, TInt32 aPriority ); + + /** + * Gets object def by object def id. + * @param aId objectdef id + * @return a pointer to object definition + */ + const CMdsObjectDef* GetObjectByIdL( TDefId aId ) const; + + /** + * Gets event def by devent def id. + * @param aId eventdef id + * @return a pointer to event definition + */ + const CMdsEventDef* GetEventByIdL( TDefId aId ) const; + + /** + * Gets relation def by relation def id. + * @param aId relationdef id + * @return a pointer to relation definition + */ + const CMdsRelationDef* GetRelationByIdL( TDefId aId ) const; + + /** + * Gets property def by property def id. + * @param aId property id + * @return a pointer to relation property + */ + const CMdsPropertyDef* GetPropertyL( TDefId aId ) const; + + /** + * Import object, event and relation defs from default DB. + */ + void ImportFromDBL(); + + /** + * Adds new object definition to DB. + * @param aId object def id + * @param aParentId parent object def id + * @param aFlags flags for the new object + * @param aName new object def name + */ + void AddObjectDefL( TDefId aId, TDefId aParentId, TInt aFlags, const TDesC& aName ); + + /** + * Adds new relation definition to DB. + * @param aId relation def id + * @param aRelationName new relation name + */ + void AddRelationDefL( TDefId aId, const TDesC& aRelationName ); + + /** + * Adds new event definition to DB. + * @param aId event def id + * @param aEventName new event name + * @param aPriority + */ + void AddEventDefL( TDefId aId, const TDesC& aEventName, TInt32 aPriority ); + + /** + * Get required size of serialized buffer when this is serialized. + * + * @return required size of serialized buffer + */ + TUint32 RequiredBufferSize(); + + /** + * Serialize own data to serialized buffer (correct position must be set + * before calling) and return new position of serialized buffer. + * + * @param aBuffer serialized buffer. + */ + TMdCOffset SerializeL(CMdCSerializationBuffer& aBuffer, TMdCOffset aFreeSpace); + + /** + * Search for relation, using name + * @param objName name of object to search for + * @return pointer to found object or NULL + */ + CMdsRelationDef* GetRelationDef( const TDesC& aRelationName ) const; + + /** + * Search for event, using name + * @param objName name of object to search for + * @return pointer to found object or NULL + */ + CMdsEventDef* GetEventDef( const TDesC& aEventName ) const; + + /** + * Search for object, using name + * @param objName name of object to search for + * @return pointer to found object or NULL + */ + CMdsObjectDef* GetObjectDef( const TDesC& aObjectName ) const; + + +private: + + /** + * default constructor + */ + inline CMdsNamespaceDef( TDefId aId, TBool aReadOnly, + TUint32 aVendorId ); + + /** + * Second phase constructor + * @param aName name of namespace + */ + void ConstructL( const TDesC& aName ); + + void StoreToDBL(TBool aStoreOnlyNamespace = EFalse ); + void MergeObjectsL( CMdsNamespaceDef* aNamespace, const TBool& aDryRun ); + void MergeRelationsL( CMdsNamespaceDef* aNamespace, const TBool& aDryRun ); + void MergeEventsL( CMdsNamespaceDef* aNamespace, const TBool& aDryRun ); + +private: +enum TNamespaceDefFlags + { + ENamespaceDefFlagsReadOnly = 0x0001, + ENamespaceDefFlagsFirstRead = 0x0002, + }; + +private: + /** + * Store every namespace read from schema file. + */ + RPointerArray iObjectDefs; + + /** + * Store every namespace read from schema file. + */ + RPointerArray iEventDefs; + + /** + * Store every namespace read from schema file. + */ + RPointerArray iRelationDefs; + + TInt32 iVendorId; + + /** + * Namespace flags: readOnly, firstRead + */ + TUint32 iFlags; + + /** + * Pointer to base object + * DO NOT DELETE, NOT OWN !!! + */ + static CMdsObjectDef* iBaseObject; + }; + +#include "mdsnamespacedef.inl" + +#endif // __MDSNAMESPACE_H__