--- /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<KRealWidth> 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<KRealWidth> 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;
+ }
+