williamr@2: /* williamr@2: * Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: For adding content to be synchronized. williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef __SYNCMLDATAFILTER_H__ williamr@2: #define __SYNCMLDATAFILTER_H__ williamr@2: williamr@2: //------------------------------------------------------------------------------------------------- williamr@2: // Includes williamr@2: //------------------------------------------------------------------------------------------------- williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: //------------------------------------------------------------------------------------------------- williamr@2: // Enumerations williamr@2: //------------------------------------------------------------------------------------------------- williamr@2: williamr@2: // Filter type (inclusive/exclusive) williamr@2: enum TSyncMLFilterType williamr@2: { williamr@2: ESyncMLTypeInclusive, williamr@2: ESyncMLTypeExclusive williamr@2: }; williamr@2: williamr@2: // Logical operator of CGI script williamr@2: enum TSyncMLFilterMatchType williamr@2: { williamr@2: ESyncMLMatchDisabled, // Value cannot be changed williamr@2: ESyncMLMatchNotSelected, // Value is not set yet williamr@2: ESyncMLMatchAND, williamr@2: ESyncMLMatchOR williamr@2: }; williamr@2: williamr@2: // Data type of filter property williamr@2: enum TSyncMLFilterPropertyDataType williamr@2: { williamr@2: ESyncMLDataTypeNull, williamr@2: ESyncMLDataTypeBool, williamr@2: ESyncMLDataTypeNumber, williamr@2: ESyncMLDataTypeDate, williamr@2: ESyncMLDataTypeTime, williamr@2: ESyncMLDataTypeText8, williamr@2: ESyncMLDataTypeText16 williamr@2: }; williamr@2: williamr@2: // This is used when DataProvider makes some changes to dynamic filters williamr@2: // or removes/adds filter based on store format of remote server williamr@2: enum TSyncMLFilterChangeInfo williamr@2: { williamr@2: ESyncMLDefault, williamr@2: ESyncMLNoChanges, williamr@2: ESyncMLDynamicFiltersUpdated, williamr@2: ESyncMLFiltersMoreFiltersSupportedByServer, williamr@2: ESyncMLFiltersLessFiltersSupportedByServer, williamr@2: ESyncMLFiltersUpdated // General if many changes williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * Filter Property Class. williamr@2: * williamr@2: * @lib syncmldatafilter.lib williamr@2: */ williamr@2: class CSyncMLFilterProperty : public CBase williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Symbian two-phased constructor. williamr@2: */ williamr@2: IMPORT_C static CSyncMLFilterProperty* NewLC(); williamr@2: williamr@2: /** williamr@2: * Symbian two-phased constructor. williamr@2: * @param aReader TResourceReader for recource file that includes needed information to initialize filter property. williamr@2: */ williamr@2: IMPORT_C static CSyncMLFilterProperty* NewLC( TResourceReader& aReader ); williamr@2: williamr@2: /** williamr@2: * Symbian two-phased constructor. williamr@2: * @param aStream RReadStream for stream that includes needed information to initialize filter property. williamr@2: */ williamr@2: IMPORT_C static CSyncMLFilterProperty* NewLC( RReadStream& aStream ); williamr@2: williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: IMPORT_C ~CSyncMLFilterProperty(); williamr@2: williamr@2: /** williamr@2: * Externalizes filter property. williamr@2: * @param aStream Specifies stream where filter property is externalized. williamr@2: */ williamr@2: IMPORT_C void ExternalizeL( RWriteStream& aStream ) const; williamr@2: williamr@2: /** williamr@2: * Name of filter property. williamr@2: * @return TDesC Name of the filter property. williamr@2: */ williamr@2: IMPORT_C const TDesC& DisplayName() const; williamr@2: williamr@2: /** williamr@2: * Data type of default values for filter property. williamr@2: * @return TSyncMLFilterPropertyDataType Data type. williamr@2: */ williamr@2: IMPORT_C TSyncMLFilterPropertyDataType DefaultValueDataType() const; williamr@2: williamr@2: /** williamr@2: * Data type of query value for filter property. williamr@2: * @return TSyncMLFilterPropertyDataType Data type. williamr@2: */ williamr@2: IMPORT_C TSyncMLFilterPropertyDataType QueryValueDataType() const; williamr@2: williamr@2: /** williamr@2: * Maximum text length of filter property. This is useful only if data type is text16 or text8. williamr@2: * @return TUint Maximum text length of the filter property. williamr@2: */ williamr@2: IMPORT_C TUint MaxTextLength() const; williamr@2: williamr@2: /** williamr@2: * Number of default values. williamr@2: * @return TInt Number of default values of the filter property. williamr@2: */ williamr@2: IMPORT_C TInt DefaultValueCount() const; williamr@2: williamr@2: /** williamr@2: * Default value from given index for text16 property. This is useful only if data type is text16. williamr@2: * @param aIndex Specifies index where default value is returned. williamr@2: * @return TDesC16 Default value from given index. williamr@2: */ williamr@2: IMPORT_C const TDesC16& DefaultValueText16L( TInt aIndex ) const; williamr@2: williamr@2: /** williamr@2: * Default value from given index for text8 property. This is useful only if data type is text8. williamr@2: * @param aIndex Specifies index where default value is returned. williamr@2: * @return TDesC8 Default value from given index. williamr@2: */ williamr@2: IMPORT_C const TDesC8& DefaultValueText8L( TInt aIndex ) const; williamr@2: williamr@2: /** williamr@2: * Default value from given index for number property. This is useful only if data type is number. williamr@2: * @param aIndex Specifies index where default value is returned. williamr@2: * @return TInt Default value from given index. williamr@2: */ williamr@2: IMPORT_C TInt DefaultValueIntL( TInt aIndex ) const; williamr@2: williamr@2: /** williamr@2: * Default value from given index for boolean property. This is useful only if data type is boolean. williamr@2: * @param aIndex Specifies index where default value is returned. williamr@2: * @return TBool Default value from given index. williamr@2: */ williamr@2: IMPORT_C TBool DefaultValueBoolL( TInt aIndex ) const; williamr@2: williamr@2: /** williamr@2: * Default value from given index for date property. This is useful only if data type is date. williamr@2: * @param aIndex Specifies index where default value is returned. williamr@2: * @return TTime Default value from given index. williamr@2: */ williamr@2: IMPORT_C const TTime& DefaultValueDateL( TInt aIndex ) const; williamr@2: williamr@2: /** williamr@2: * Default value from given index for time property. This is useful only if data type is time. williamr@2: * @param aIndex Specifies index where default value is returned. williamr@2: * @return TTime Default value from given index. williamr@2: */ williamr@2: IMPORT_C const TTime& DefaultValueTimeL( TInt aIndex ) const; williamr@2: williamr@2: /** williamr@2: * Clears all default values and value selections. williamr@2: */ williamr@2: IMPORT_C void ClearDefaultValuesL(); williamr@2: williamr@2: /** williamr@2: * Adds default value for text16 property. This is useful only if data type is text16. williamr@2: * @param aNewDefaultValue Value of added default value. williamr@2: * @param aSelected Specifies if value is selected or not. williamr@2: */ williamr@2: IMPORT_C void AddDefaultValueText16L( TDesC16& aNewDefaultValue, const TBool aSelected ); williamr@2: williamr@2: /** williamr@2: * Adds default value for text8 property. This is useful only if data type is text8. williamr@2: * @param aNewDefaultValue Value of added default value. williamr@2: * @param aSelected Specifies if value is selected or not. williamr@2: */ williamr@2: IMPORT_C void AddDefaultValueText8L( TDesC8& aNewDefaultValue, const TBool aSelected ); williamr@2: williamr@2: /** williamr@2: * Adds default value for number property. This is useful only if data type is number. williamr@2: * @param aNewDefaultValue Value of added default value. williamr@2: * @param aSelected Specifies if value is selected or not. williamr@2: */ williamr@2: IMPORT_C void AddDefaultValueIntL( const TInt aNewDefaultValue, const TBool aSelected ); williamr@2: williamr@2: /** williamr@2: * Adds default value for boolean property. This is useful only if data type is boolean. williamr@2: * @param aNewDefaultValue Value of added default value. williamr@2: * @param aSelected Specifies if value is selected or not. williamr@2: */ williamr@2: IMPORT_C void AddDefaultValueBoolL( const TBool aNewDefaultValue, const TBool aSelected ); williamr@2: williamr@2: /** williamr@2: * Adds default value for date property. This is useful only if data type is date. williamr@2: * @param aNewDefaultValue Value of added default value. williamr@2: * @param aSelected Specifies if value is selected or not. williamr@2: */ williamr@2: IMPORT_C void AddDefaultValueDateL( const TTime& aNewDefaultValue, const TBool aSelected ); williamr@2: williamr@2: /** williamr@2: * Adds default value for time property. This is useful only if data type is time. williamr@2: * @param aNewDefaultValue Value of added default value. williamr@2: * @param aSelected Specifies if value is selected or not. williamr@2: */ williamr@2: IMPORT_C void AddDefaultValueTimeL( const TTime& aNewDefaultValue, const TBool aSelected ); williamr@2: williamr@2: /** williamr@2: * Can use query value with default values or not. williamr@2: * @return TBool Returns ETrue if query can be used. Otherwise EFalse is returned. williamr@2: */ williamr@2: IMPORT_C TBool CanUseQueryValue() const; williamr@2: williamr@2: /** williamr@2: * Does filter property support multiple selection. williamr@2: * @return TBool Returns ETrue if multiple values can be selected. Otherwise EFalse is returned. williamr@2: */ williamr@2: IMPORT_C TBool SupportsMultipleSelection() const; williamr@2: williamr@2: /** williamr@2: * Does filter property support empty selection. williamr@2: * @return TBool Returns ETrue if none of values can be selected. Otherwise EFalse is returned. williamr@2: */ williamr@2: IMPORT_C TBool SupportsEmptySelection() const; williamr@2: williamr@2: /** williamr@2: * Returns information about which default values are selected. williamr@2: * @param aIndex Specifies index where selection information is returned. williamr@2: * @return TBool Returns ETrue if default value in given index is selected. Otherwise EFalse is returned. williamr@2: */ williamr@2: IMPORT_C TBool IsDefaultValueSelected( TInt aIndex ) const; williamr@2: williamr@2: /** williamr@2: * Returns information about query value selection. This is useful only if query value can be used. williamr@2: * @return TBool Returns ETrue if query value is selected. Otherwise EFalse is returned. williamr@2: */ williamr@2: IMPORT_C TBool IsQueryValueSelected() const; williamr@2: williamr@2: /** williamr@2: * Selects default value from given index. williamr@2: * @param aIndex Specifies index which is selected. williamr@2: */ williamr@2: IMPORT_C void SelectDefaultValueL( TInt aIndex ); williamr@2: williamr@2: /** williamr@2: * Unselects default value from given index. williamr@2: * @param aIndex Specifies index which is unselected. williamr@2: */ williamr@2: IMPORT_C void UnselectDefaultValueL( TInt aIndex ); williamr@2: williamr@2: /** williamr@2: * Returns query value for text16 property. This is useful only if data type is text16 and if query value can be used. williamr@2: * @return TDesC16 Query value. williamr@2: */ williamr@2: IMPORT_C const TDesC16& QueryValueText16L() const; williamr@2: williamr@2: /** williamr@2: * Returns query value for text8 property. This is useful only if data type is text8 and if query value can be used. williamr@2: * @return TDesC8 Query value. williamr@2: */ williamr@2: IMPORT_C const TDesC8& QueryValueText8L() const; williamr@2: williamr@2: /** williamr@2: * Returns query value for number property. This is useful only if data type is number and if query value can be used. williamr@2: * @return TInt Query value. williamr@2: */ williamr@2: IMPORT_C TInt QueryValueIntL() const; williamr@2: williamr@2: /** williamr@2: * Returns query value for boolean property. This is useful only if data type is boolean and if query value can be used. williamr@2: * @return TBool Query value. williamr@2: */ williamr@2: IMPORT_C TBool QueryValueBoolL() const; williamr@2: williamr@2: /** williamr@2: * Returns query value for date property. This is useful only if data type is date and if query value can be used. williamr@2: * @return TTime Query value. williamr@2: */ williamr@2: IMPORT_C const TTime& QueryValueDateL() const; williamr@2: williamr@2: /** williamr@2: * Returns query value for time property. This is useful only if data type is time and if query value can be used. williamr@2: * @return TTime Query value. williamr@2: */ williamr@2: IMPORT_C const TTime& QueryValueTimeL() const; williamr@2: williamr@2: /** williamr@2: * Unselects query value. This is useful only if query value can be used. williamr@2: * This method still keeps the value williamr@2: */ williamr@2: IMPORT_C void UnselectQueryValueL(); williamr@2: williamr@2: /** williamr@2: * Sets query value for text16 property. This is useful only if data type is text16 and if query value can be used. williamr@2: * This method also selects query value. williamr@2: * @param aValue Specifies new value for query value. williamr@2: */ williamr@2: IMPORT_C void SetQueryValueText16L( const TDesC16& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets query value for text8 property. This is useful only if data type is text8 and if query value can be used. williamr@2: * This method also selects query value. williamr@2: * @param aValue Specifies new value for query value. williamr@2: */ williamr@2: IMPORT_C void SetQueryValueText8L( const TDesC8& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets query value for number property. This is useful only if data type is number and if query value can be used. williamr@2: * This method also selects query value. williamr@2: * @param aValue Specifies new value for query value. williamr@2: */ williamr@2: IMPORT_C void SetQueryValueIntL( TInt aValue ); williamr@2: williamr@2: /** williamr@2: * Sets query value for boolean property. This is useful only if data type is boolean and if query value can be used. williamr@2: * This method also selects query value. williamr@2: * @param aValue Specifies new value for query value. williamr@2: */ williamr@2: IMPORT_C void SetQueryValueBoolL( TBool aValue ); williamr@2: williamr@2: /** williamr@2: * Sets query value for date property. This is useful only if data type is date and if query value can be used. williamr@2: * This method also selects query value. williamr@2: * @param aValue Specifies new value for query value. williamr@2: */ williamr@2: IMPORT_C void SetQueryValueDateL( const TTime& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets query value for time property. This is useful only if data type is time and if query value can be used. williamr@2: * This method also selects query value. williamr@2: * @param aValue Specifies new value for query value. williamr@2: */ williamr@2: IMPORT_C void SetQueryValueTimeL( const TTime& aValue ); williamr@2: williamr@2: /** williamr@2: * Size of data williamr@2: * @return Size of internal data williamr@2: */ williamr@2: IMPORT_C TInt DataSize(); williamr@2: williamr@2: private: williamr@2: /** williamr@2: * Basic constructor. williamr@2: */ williamr@2: CSyncMLFilterProperty(); williamr@2: williamr@2: williamr@2: private: williamr@2: HBufC* iDisplayName; williamr@2: TSyncMLFilterPropertyDataType iDataTypeForDefaultValues; williamr@2: TSyncMLFilterPropertyDataType iDataTypeForQueryValue; williamr@2: TUint iMaxTextLength; williamr@2: williamr@2: RPointerArray iDefaultValueText16List; williamr@2: RPointerArray iDefaultValueText8List; williamr@2: RArray iDefaultValueIntOrBoolList; williamr@2: RPointerArray iDefaultValueDateOrTimeList; williamr@2: williamr@2: TBool iCanUseQueryValue; williamr@2: TBool iSupportsMultpleSelection; williamr@2: TBool iSupportsEmptySelection; williamr@2: williamr@2: RArray iDefaultValueSelected; williamr@2: TBool iQueryValueSelected; williamr@2: williamr@2: HBufC16* iQueryValueText16; williamr@2: HBufC8* iQueryValueText8; williamr@2: TInt iQueryValueIntOrBool; williamr@2: TTime iQueryValueDateOrTime; williamr@2: williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * Filter Class. williamr@2: * williamr@2: * @lib syncmldatafilter.lib williamr@2: */ williamr@2: class CSyncMLFilter : public CBase williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Symbian two-phased constructor. williamr@2: */ williamr@2: IMPORT_C static CSyncMLFilter* NewLC(); williamr@2: williamr@2: /** williamr@2: * Symbian two-phased constructor. williamr@2: * @param aReader TResourceReader for recource file that includes needed information to initialize filter. williamr@2: */ williamr@2: IMPORT_C static CSyncMLFilter* NewLC( TResourceReader& aReader ); williamr@2: williamr@2: /** williamr@2: * Symbian two-phased constructor. williamr@2: * @param aStream RReadStream for stream that includes needed information to initialize filter. williamr@2: */ williamr@2: IMPORT_C static CSyncMLFilter* NewLC( RReadStream& aStream ); williamr@2: williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: IMPORT_C ~CSyncMLFilter(); williamr@2: williamr@2: /** williamr@2: * Externalizes filter. williamr@2: * @param aStream Specifies stream where filter is externalized. williamr@2: */ williamr@2: IMPORT_C void ExternalizeL( RWriteStream& aStream ) const; williamr@2: williamr@2: /** williamr@2: * ID of filter. williamr@2: * @return TUint ID of the filter. williamr@2: */ williamr@2: IMPORT_C TUint FilterId() const; williamr@2: williamr@2: /** williamr@2: * Name of filter. williamr@2: * @return TDesC Name of the filter. williamr@2: */ williamr@2: IMPORT_C const TDesC& DisplayName() const williamr@2: ; williamr@2: /** williamr@2: * Description of filter. williamr@2: * @return TDesC Description of the filter. williamr@2: */ williamr@2: IMPORT_C const TDesC& DisplayDescription() const; williamr@2: williamr@2: /** williamr@2: * Filter enable/disable information. williamr@2: * @return TBool ETrue if filter is enabled. Otherwise EFalse is returned. williamr@2: */ williamr@2: IMPORT_C TBool Enabled() const; williamr@2: williamr@2: /** williamr@2: * Set filter enable/disable information. williamr@2: * @param aEnabled ETrue if filter enabled and EFalse is filter is disabled williamr@2: */ williamr@2: IMPORT_C void SetEnabledL( const TBool aEnabled ); williamr@2: williamr@2: /** williamr@2: * Information about server capabilities to support this filter. williamr@2: * @return TBool ETrue if filter is supported by server. Otherwise EFalse is returned. williamr@2: */ williamr@2: IMPORT_C TBool SupportedByServer() const; williamr@2: williamr@2: /** williamr@2: * Set information about server capabilities to support this filter. williamr@2: * @param aSupported ETrue if filter is supported by server and EFalse if it is not supported. williamr@2: */ williamr@2: IMPORT_C void SetSupportedByServerL( const TBool aSupported ); williamr@2: williamr@2: /** williamr@2: * Information about match type effect to filter. williamr@2: * @return TBool ETrue if match type affect to filter. Otherwise EFalse is returned. williamr@2: */ williamr@2: IMPORT_C TBool MatchTypeSupported() const; williamr@2: williamr@2: /** williamr@2: * Set information about match type effect to filter. williamr@2: * @param aSupported ETrue if match type affect to filter and EFalse if it does not affect. williamr@2: */ williamr@2: IMPORT_C void SetMatchTypeSupported( const TBool aSupported ); williamr@2: williamr@2: /** williamr@2: * Properties of filter. williamr@2: * @return RPointerArray Properties of filter. williamr@2: */ williamr@2: IMPORT_C RPointerArray& FilterProperties(); williamr@2: williamr@2: /** williamr@2: * Size of data williamr@2: * @return Size of internal data williamr@2: */ williamr@2: IMPORT_C TInt DataSize(); williamr@2: williamr@2: private: williamr@2: /** williamr@2: * Basic constructor. williamr@2: */ williamr@2: CSyncMLFilter(); williamr@2: williamr@2: williamr@2: private: williamr@2: TUint iFilterId; williamr@2: HBufC* iDisplayName; williamr@2: HBufC* iDisplayDescription; williamr@2: TBool iEnabled; williamr@2: TBool iSupportedByServer; williamr@2: TBool iMatchTypeSupported; williamr@2: RPointerArray iProperties; williamr@2: williamr@2: }; williamr@2: williamr@2: #endif williamr@2: williamr@2: // End of file