diff -r 000000000000 -r c53acadfccc6 metadataengine/server/src/mdspropertydef.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/metadataengine/server/src/mdspropertydef.cpp Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,357 @@ +/* +* 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 property +* +*/ + +#include "mdspropertydef.h" + +#include "mdcdef.h" +#include "mdssqliteconnection.h" +#include "mdsindexer.h" +#include "mdcserializationbuffer.h" +#include "mdeinternalerror.h" + +/** + * NewLC + */ +CMdsPropertyDef* CMdsPropertyDef::NewLC( const TDesC& aName, TPropertyType aType, + TBool aReadOnly, TBool aMandatory, TBool aIndexed ) + { + CMdsPropertyDef* ret = new( ELeave ) CMdsPropertyDef( aType ); + CleanupStack::PushL( ret ); + ret->ConstructL( aName, aReadOnly, aMandatory, aIndexed ); + return ret; + } + +/** + * NewL + */ +CMdsPropertyDef* CMdsPropertyDef::NewL( const TDesC& aName, TPropertyType aType, + TBool aReadOnly, TBool aMandatory, TBool aIndexed ) + { + CMdsPropertyDef* ret = CMdsPropertyDef::NewLC( aName, aType, aReadOnly, aMandatory, aIndexed ); + CleanupStack::Pop( ret ); + return ret; + } + +CMdsPropertyDef* CMdsPropertyDef::NewL( const TDesC& aName, TPropertyType aType, TUint32 aFlags ) + { + return CMdsPropertyDef::NewL( aName, aType, aFlags & EPropertyReadOnly, aFlags & EPropertyMandatory, EFalse ); + } + +CMdsPropertyDef* CMdsPropertyDef::NewLC( const TDesC& aName, TPropertyType aType, TUint32 aFlags ) + { + return CMdsPropertyDef::NewLC( aName, aType, aFlags & EPropertyReadOnly, aFlags & EPropertyMandatory, EFalse ); + } + +/** + * default constructor + */ +inline CMdsPropertyDef::CMdsPropertyDef( TPropertyType aType ) + : iType( aType ) + {} + +/** + * ConstructL + */ +void CMdsPropertyDef::ConstructL( const TDesC& aName, TBool aReadOnly, TBool aMandatory, + TBool aIndexed ) + { + // check that only allowed characters (A-Z, a-z, 0-9) are used + CheckAllowerCharatersL( aName, ETrue ); + + CMdsItemDef::ConstructL( aName ); + + if ( aMandatory ) + { + iPropertyFlags |= EPropertyMandatory; + } + + if ( aReadOnly ) + { + iPropertyFlags |= EPropertyReadOnly; + } + + iIndexed = aIndexed; + } + +/** + * Destructor + */ +CMdsPropertyDef::~CMdsPropertyDef() + { + } + +/** + * AddMinMaxValueL + */ +void CMdsPropertyDef::AddMinMaxValueL( const TInt32& aMinValue, const TInt32& aMaxValue ) + { + if( iType == EPropertyBool || iType == EPropertyInt8 || iType == EPropertyUint8 || + iType == EPropertyInt16 || iType == EPropertyUint16 || iType == EPropertyInt32 || + iType == EPropertyText ) + { + iMinValue.iInt32 = aMinValue; + iMaxValue.iInt32 = aMaxValue; + } + else + { +#ifdef _DEBUG + User::Panic( _L("MdSPDAd1") , KErrMdEUnknownPropertyType ); +#endif + User::Leave( KErrMdEUnknownPropertyType ); + } + } + +/** + * AddMinMaxValueL + */ +void CMdsPropertyDef::AddMinMaxValueL( const TUint32& aMinValue, const TUint32& aMaxValue ) + { + if( iType == EPropertyUint32 ) + { + iMinValue.iUint32 = aMinValue; + iMaxValue.iUint32 = aMaxValue; + } + else + { +#ifdef _DEBUG + User::Panic( _L("MdSPDAd2") , KErrMdEUnknownPropertyType ); +#endif + User::Leave( KErrMdEUnknownPropertyType ); + } + } + +/** + * AddMinMaxValueL + */ +void CMdsPropertyDef::AddMinMaxValueL( const TInt64& aMinValue, const TInt64& aMaxValue ) + { + if( iType == EPropertyInt64 || iType == EPropertyTime ) + { + iMinValue.iInt64 = aMinValue; + iMaxValue.iInt64 = aMaxValue; + } + else + { +#ifdef _DEBUG + User::Panic( _L("MdSPDAd3") , KErrMdEUnknownPropertyType ); +#endif + User::Leave( KErrMdEUnknownPropertyType ); + } + } + +/** + * AddMinMaxValueL + */ +void CMdsPropertyDef::AddMinMaxValueL( const TReal& aMinValue, const TReal& aMaxValue ) + { + if( iType == EPropertyReal32 || iType == EPropertyReal64 ) + { + iMinValue.iReal = aMinValue; + iMaxValue.iReal = aMaxValue; + } + else + { +#ifdef _DEBUG + User::Panic( _L("MdSPDAd4") , KErrMdEUnknownPropertyType ); +#endif + User::Leave( KErrMdEUnknownPropertyType ); + } + } + + +/** + * Get SQLite type name + * @return type name + */ +const TDesC& CMdsPropertyDef::GetSqlTypeName() const + { + _LIT( KMdsSqlTypeInt, "INTEGER" ); + _LIT( KMdsSqlTypeBigInt, "LARGEINT" ); + _LIT( KMdsSqlTypeReal, "REAL" ); + _LIT( KMdsSqlTypeText, "TEXT" ); + + switch( iType ) + { + case EPropertyBool: case EPropertyInt8: case EPropertyUint8: case EPropertyInt16: + case EPropertyUint16: case EPropertyInt32: + { + return KMdsSqlTypeInt; + } + case EPropertyUint32: case EPropertyInt64: case EPropertyTime: + { + return KMdsSqlTypeBigInt; + } + case EPropertyReal32: + case EPropertyReal64: + { + return KMdsSqlTypeReal; + } + case EPropertyText: + { + return KMdsSqlTypeText; + } + default: + return KMdsSqlTypeText; + } + } + +TColumnDataType CMdsPropertyDef::GetSqlType() const + { + switch( iType ) + { + case EPropertyBool: + return EColumnBool; + case EPropertyInt8: + case EPropertyInt16: + case EPropertyInt32: + return EColumnInt32; + case EPropertyUint8: + case EPropertyUint16: + case EPropertyUint32: + return EColumnUint32; + case EPropertyInt64: + return EColumnInt64; + case EPropertyTime: + return EColumnTime; + case EPropertyReal32: + return EColumnReal32; + case EPropertyReal64: + return EColumnReal64; + case EPropertyText: + return EColumnDes16; + default: + return EColumnDes16; + } + } + +void CMdsPropertyDef::StoreToDBL( TDefId aObjectDefId ) + { + _LIT( KMdsSqlClauseAddPropertyDef, "INSERT INTO PropertyDef(ObjectDefId,Flags,Type,MinValue,MaxValue,Name) Values(?,?,?,?,?,?);" ); + + if ( GetStoredInDB() ) + { + return; + } + + RRowData rowData; + CleanupClosePushL( rowData ); + rowData.AppendL( TColumn( aObjectDefId ) ); + rowData.AppendL( TColumn( iPropertyFlags ) ); + rowData.AppendL( TColumn( iType ) ); + switch( iType ) + { + case EPropertyBool: case EPropertyInt8: case EPropertyUint8: case EPropertyInt16: + case EPropertyUint16: case EPropertyInt32: case EPropertyText: + { + rowData.AppendL( TColumn( iMinValue.iInt32 ) ); + rowData.AppendL( TColumn( iMaxValue.iInt32 ) ); + break; + } + case EPropertyUint32: + { + rowData.AppendL( TColumn( (TInt64)iMinValue.iUint32 ) ); + rowData.AppendL( TColumn( (TInt64)iMaxValue.iUint32 ) ); + break; + } + case EPropertyInt64: case EPropertyTime: + { + rowData.AppendL( TColumn( iMinValue.iInt64 ) ); + rowData.AppendL( TColumn( iMaxValue.iInt64 ) ); + break; + } + case EPropertyReal32: case EPropertyReal64: + { + rowData.AppendL( TColumn( iMinValue.iReal ) ); + rowData.AppendL( TColumn( iMaxValue.iReal ) ); + break; + } + default: +#ifdef _DEBUG + User::Panic( _L("MdSPDSto") , KErrMdEUnknownPropertyType ); +#endif + User::Leave( KErrMdEUnknownPropertyType ); + } + rowData.AppendL( TColumn( GetName().AllocL() ) ); + + TDefId id; + id = MMdSIndexer::ExecuteAndGetIndexL( KMdsSqlClauseAddPropertyDef, rowData ); + SetId( id ); + + SetStoredInDB(); + CleanupStack::PopAndDestroy( &rowData ); + } + +TBool CMdsPropertyDef::operator==( const CMdsPropertyDef& aPropertyDef ) const + { + if ( iType != aPropertyDef.iType || iPropertyFlags != aPropertyDef.iPropertyFlags || + GetName() != aPropertyDef.GetName() ) + { + return EFalse; + } + switch( iType ) + { + case EPropertyBool: case EPropertyInt8: case EPropertyUint8: case EPropertyInt16: + case EPropertyUint16: case EPropertyInt32: case EPropertyText: + { + return ( iMinValue.iInt32 == aPropertyDef.iMinValue.iInt32 && + iMaxValue.iInt32 == aPropertyDef.iMaxValue.iInt32 ) ; + } + case EPropertyUint32: + { + return ( iMinValue.iUint32 == aPropertyDef.iMinValue.iUint32 && + iMaxValue.iUint32 == aPropertyDef.iMaxValue.iUint32 ) ; + } + case EPropertyReal32: + case EPropertyReal64: + { + return ( iMinValue.iReal == aPropertyDef.iMinValue.iReal && + iMaxValue.iReal == aPropertyDef.iMaxValue.iReal ) ; + } + case EPropertyInt64: + case EPropertyTime: + { + return ( iMinValue.iInt64 == aPropertyDef.iMinValue.iInt64 && + iMaxValue.iInt64 == aPropertyDef.iMaxValue.iInt64 ) ; + } + default: + return EFalse; + } + + } + +TUint32 CMdsPropertyDef::RequiredBufferSize() + { + return sizeof(TMdCPropertyDef) + CMdsItemDef::RequiredBufferSize(); + } + +TMdCOffset CMdsPropertyDef::SerializeL(CMdCSerializationBuffer& aBuffer, TMdCOffset aFreeSpace) + { + TMdCPropertyDef propertyDef; + propertyDef.iDefId = GetId(); + propertyDef.iFlags = iPropertyFlags; + propertyDef.iValueType = iType; + propertyDef.iMinValue = iMinValue; + propertyDef.iMaxValue = iMaxValue; + + // store name + propertyDef.iName.iPtr.iCount = GetName().Length(); + propertyDef.iName.iPtr.iOffset = aFreeSpace; + propertyDef.SerializeL( aBuffer ); + + aBuffer.PositionL( aFreeSpace ); + return CMdsItemDef::SerializeL( aBuffer ); + }