diff -r 000000000000 -r 667063e416a2 locationtriggering/ltcontextsourceplugin/src/lbttriggernode.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationtriggering/ltcontextsourceplugin/src/lbttriggernode.cpp Tue Feb 02 01:06:48 2010 +0200 @@ -0,0 +1,405 @@ +/* +* 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 used to set & get the trigger attributes +* +*/ + +#include "lbttriggernode.h" +#include "lbtcontextsourceplugindebug.h" + + +// --------------------------------------------------------------------------- +// TTriggerNode::SetTriggerNameL +// --------------------------------------------------------------------------- +// +void TTriggerNode::SetTriggerNameL( const TPtrC& aTriggerName ) + { + // Check that the name is not NULL,if Yes then + // leave with KErrArgument + if( aTriggerName == KNullDesC ) + { + User::Leave( KErrArgument ); + } + + // Check that the length of the name is <= 256,if not then + // extract only upto 256 characters before setting + if( aTriggerName.Length() > KMaxNameLength ) + { + iTriggerName.Set( aTriggerName.Mid( 0,KMaxNameLength ) ); + } + else + { + iTriggerName.Set( aTriggerName ); + } + } + +// --------------------------------------------------------------------------- +// TTriggerNode::SetLatitudeL +// --------------------------------------------------------------------------- +// +void TTriggerNode::SetLatitudeL( const TPtrC& aLatitude ) + { + LBTCONTEXTSOURCEPLUGINDEBUG ( "TTriggerNode::SetLatitudeL - IN" ); + // Check that the value is not NULL + if( aLatitude == KNullDesC ) + { + // set value to NaN & leave with KErrArgument + TRealX nan; + nan.SetNaN(); + iLatitude = nan; + User::Leave( KErrArgument ); + } + + // Convert the string to TReal64 + // holds the parsed number in text form + TBuf parsedLatitude; + TLex lexer( aLatitude ); + User::LeaveIfError( lexer.Val( iLatitude,KRealPoint ) ); + // Format the real number to round off to 6 decimal digits + // initialize the TRealFormat variable + TRealFormat realFormat; + realFormat.iPoint = KRealPoint; + realFormat.iType = KRealFormatFixed | KDoNotUseTriads; + realFormat.iPlaces = KCoordinateDecimalPlaces; + realFormat.iWidth = KRealWidth; + User::LeaveIfError( parsedLatitude.Num( iLatitude,realFormat ) ); + // convert the formattted string back to TReal64 + TLex lex( parsedLatitude ); + User::LeaveIfError( lex.Val( iLatitude,KRealPoint ) ); + + // Check the range of the latitude value,if not within range + // leave with KErrArgument + if ( !( iLatitude >= KMinLatitude && iLatitude <= KMaxLatitude ) ) + { + User::Leave( KErrArgument ); + } + LBTCONTEXTSOURCEPLUGINDEBUG ( "TTriggerNode::SetLatitudeL - OUT" ); + } + +// --------------------------------------------------------------------------- +// TTriggerNode::SetLongitudeL +// --------------------------------------------------------------------------- +// +void TTriggerNode::SetLongitudeL( const TPtrC& aLongitude ) + { + // Check that the value is not NULL + if( aLongitude == KNullDesC ) + { + // set value to NaN & leave with KErrArgument + TRealX nan; + nan.SetNaN(); + iLatitude = nan; + User::Leave( KErrArgument ); + } + + // Convert the string to TReal64 + // holds the parsed number in text form + TBuf parsedLongitude; + TLex lexer( aLongitude ); + User::LeaveIfError( lexer.Val( iLongitude,KRealPoint ) ); + // Format the real number to round off to 6 decimal digits + // initialize the TRealFormat variable + TRealFormat realFormat; + realFormat.iPoint = KRealPoint; + realFormat.iType = KRealFormatFixed | KDoNotUseTriads; + realFormat.iPlaces = KCoordinateDecimalPlaces; + realFormat.iWidth = KRealWidth; + User::LeaveIfError( parsedLongitude.Num( iLongitude,realFormat ) ); + // convert the formattted string back to TReal64 + TLex lex( parsedLongitude ); + User::LeaveIfError( lex.Val( iLongitude,KRealPoint ) ); + + // Check the range of the latitude value,if not within range + // leave with KErrArgument + if ( !( iLongitude >= KMinLongitude && iLongitude <= KMaxLongitude ) ) + { + User::Leave( KErrArgument ); + } + } + +// --------------------------------------------------------------------------- +// TTriggerNode::SetRegionL +// --------------------------------------------------------------------------- +// +void TTriggerNode::SetRegionL( const TPtrC& aRegion ) + { + // Check that the value is not NULL + if( aRegion == KNullDesC ) + { + User::Leave( KErrArgument ); + } + // check that the region specified is a circle,since it is the + // only permissible value else leave with KErrArgument + // Convert the value read from file to lower case inorder to compare + // the values + TInt length = aRegion.Length(); + HBufC * buffer = HBufC::NewL( length ); + CleanupStack::PushL( buffer ); + TPtr ptr = buffer->Des(); + ptr.Copy( aRegion ); + ptr.LowerCase(); + + if ( ! ( ptr.CompareC( KRegionValue ) ) ) + { + iRegion.Set( aRegion ); + } + else + { + User::Leave( KErrArgument ); + } + CleanupStack::PopAndDestroy( buffer ); + } + +// --------------------------------------------------------------------------- +// TTriggerNode::SetRadiusL +// --------------------------------------------------------------------------- +// +void TTriggerNode::SetRadiusL( const TPtrC& aRadius ) + { + // Check that the value is not NULL + if( aRadius == KNullDesC ) + { + // set value to NaN & leave with KErrArgument + TRealX nan; + nan.SetNaN(); + iRadius = nan; + User::Leave( KErrArgument ); + } + + // Check the radius value, + // Minimum radius must be 100 meters + TLex lex( aRadius ); + TReal radiusValue = 0; + User::LeaveIfError( lex.Val( radiusValue ) ); + + // Check that the radius value is positive else leave with KErrArgument + if( radiusValue < 0 ) + { + User::Leave( KErrArgument ); + } + + if ( radiusValue < KMinRadius ) + { + iRadius = KMinRadius; + } + else + { + iRadius = radiusValue; + } + } + +// --------------------------------------------------------------------------- +// TTriggerNode::SetDirection +// --------------------------------------------------------------------------- +// +void TTriggerNode::SetDirectionL( const TPtrC& aDirection ) + { + // If the value is null,then set default value to + // CLbtTriggerConditionArea::EFireOnEnter + if( aDirection == KNullDesC ) + { + iDirection = CLbtTriggerConditionArea::EFireOnEnter; + } + + // Compare the value set in the file with the permissible values + // If it doesnt match ,then set the default value + // Convert the value read to lower case to compare the strings + TInt length = aDirection.Length(); + HBufC * buffer = HBufC::NewL( length ); + TPtr ptr = buffer->Des(); + ptr.Copy( aDirection ); + ptr.LowerCase(); + + if( !( ptr.CompareC( KDirectionValueOnEntry ) ) ) + { + iDirection = CLbtTriggerConditionArea::EFireOnEnter; + } + else if( !( ptr.CompareC( KDirectionValueOnExit ) ) ) + { + iDirection = CLbtTriggerConditionArea::EFireOnExit; + } + else + { + iDirection = CLbtTriggerConditionArea::EFireOnEnter; + } + + delete buffer; + } + +// --------------------------------------------------------------------------- +// TTriggerNode::SetContextSource +// --------------------------------------------------------------------------- +// +void TTriggerNode::SetContextSource( const TPtrC& aSetName ) + { + // If the value is null,then set default context source value to "Location" + if( aSetName == KNullDesC ) + { + iSetName.Set( KDefaultContextSourceName ); + } + + // Check that the length of the name is <= 256,if not then + // extract only upto 256 characters before setting + if( aSetName.Length() > KMaxNameLength ) + { + iSetName.Set( aSetName.Mid( 0,KMaxNameLength ) ); + } + else + { + iSetName.Set(aSetName); + } + } + +// --------------------------------------------------------------------------- +// TTriggerNode::SetCurrentState +// --------------------------------------------------------------------------- +// +void TTriggerNode::SetCurrentStateL( const TPtrC& aCurrentState ) + { + // If the value is null,then set default value to + // CLbtTriggerEntry::EStateEnabled + if( aCurrentState == KNullDesC ) + { + iCurrentState = CLbtTriggerEntry::EStateEnabled; + } + + // Compare the value set in the file with the permissible values + // If it doesnt match ,then set the default value + // Convert the value read to lower case to compare the strings + TInt length = aCurrentState.Length(); + HBufC * buffer = HBufC::NewL( length ); + TPtr ptr = buffer->Des(); + ptr.Copy( aCurrentState ); + ptr.LowerCase(); + + if( !( ptr.CompareC( KCurrentStateOn ) ) ) + { + iCurrentState = CLbtTriggerEntry::EStateEnabled; + } + else if( !( ptr.CompareC( KCurrentStateOff ) ) ) + { + iCurrentState = CLbtTriggerEntry::EStateDisabled; + } + else + { + iCurrentState = CLbtTriggerEntry::EStateEnabled; + } + + delete buffer; + } + +// --------------------------------------------------------------------------- +// TTriggerNode::GetTriggerName +// --------------------------------------------------------------------------- +// +TInt TTriggerNode::GetTriggerName( TPtrC& aTriggerName ) + { + if ( iTriggerName == KNullDesC ) + { + return KErrNotFound; + } + + aTriggerName.Set( iTriggerName ); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// TTriggerNode::GetLatitude +// --------------------------------------------------------------------------- +// +TInt TTriggerNode::GetLatitude( TReal& aLatitude ) + { + if ( Math::IsNaN( iLatitude ) ) + { + return KErrNotFound; + } + + aLatitude = iLatitude; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// TTriggerNode::GetLongitude +// --------------------------------------------------------------------------- +// +TInt TTriggerNode::GetLongitude( TReal& aLongitude ) + { + if ( Math::IsNaN( iLongitude ) ) + { + return KErrNotFound; + } + + aLongitude = iLongitude; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// TTriggerNode::GetDirection +// --------------------------------------------------------------------------- +// +CLbtTriggerConditionArea::TDirection TTriggerNode::GetDirection() + { + return iDirection; + } + + + +// --------------------------------------------------------------------------- +// TTriggerNode::GetRegion +// --------------------------------------------------------------------------- +// +TInt TTriggerNode::GetRegion( TPtrC& aRegion ) + { + if ( iRegion == KNullDesC ) + { + return KErrNotFound; + } + + aRegion.Set( iRegion ); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// TTriggerNode::GetRadius +// --------------------------------------------------------------------------- +// +TInt TTriggerNode::GetRadius( TReal& aRadius ) + { + if ( Math::IsNaN( iRadius ) ) + { + return KErrNotFound; + } + + aRadius = iRadius; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// TTriggerNode::GetContextSource +// --------------------------------------------------------------------------- +// +TPtrC& TTriggerNode::GetContextSource() + { + return iSetName; + } + +// --------------------------------------------------------------------------- +// TTriggerNode::GetCurrentState +// --------------------------------------------------------------------------- +// +CLbtTriggerEntry::TLbtTriggerState TTriggerNode::GetCurrentState() + { + return iCurrentState; + } +