/*
* Copyright (c) 2002-2005 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 derives the XML service description and further extends
* it by adding consumer policy interface implementation.
*
*/
#ifndef SEN_SERVICE_PATTERN_H
#define SEN_SERVICE_PATTERN_H
// INCLUDES
#include <e32base.h>
#include <s32strm.h>
#include "senwsdescription.h"
#include <MSenConsumerPolicy.h>
// FORWARD DECLARATIONS
class CSenConsumerPolicy;
// CLASS DECLARATION
/**
* Class derives the WS description and further extends
* it by implementing consumer policy interface.
*
* WS pattern is typically used by Basic Web Service consumers,
* which often know, which policy to use in the communication with
* certain Web Service Provider (WSP).
*
* For example, a Basic Web Service consumer application might want
* strictly define certain Internet Access Point (IAP) to be used when
* initializing new service connection. Such an application can simply
* instantiate new WSPattern and set pre-known IAP ID into it.
*
* The main purpose of this class is to simplify the initialization
* of service connections for Basic Web Services.
*
* It is important to note, that all the consumer policy information entered
* via WSPattern extending the MSenConsumerPolicy is treated
* in "policy-per-client" terms. In other words, any consumer
* policy information will not be stored for latter use of other
* applications (even they might happen to use same WSP and contract!).
*
* This is due the nature of Service Pattern: it acts as a consumer
* originated filter, after which a service will be resolved.
*
* Any service which "meets" the Service Pattern "constraints", is
* considered as a "match", because such service accepts this
* (search) pattern.
*
* @lib SenServDesc.lib
* @since Series60 3.0
*/
class CSenWSPattern : public CSenWSDescription, public MSenConsumerPolicy
{
public: // Constructors and destructor
/**
* Standard 2 phase constructors
*/
IMPORT_C static CSenWSPattern* NewL();
/**
* Standard 2 phase constructors
*/
IMPORT_C static CSenWSPattern* NewLC();
/**
* Standard 2 phase constructor
* @param aNamespaceURI namespace URI for the service pattern.
*/
IMPORT_C static CSenWSPattern* NewL(const TDesC8& aNamespaceURI);
/**
* Standard 2 phase constructor
* @param aNamespaceURI namespace URI for the service pattern.
*/
IMPORT_C static CSenWSPattern* NewLC(const TDesC8& aNamespaceURI);
/**
* Standard 2 phase constructor.
* @param aEndPoint service pattern endpoint.
* @param aContract service pattern contract.
*/
IMPORT_C static CSenWSPattern* NewL( const TDesC8& aEndPoint,
const TDesC8& aContract );
/**
* Standard 2 phase constructor.
* @param aEndPoint service pattern endpoint.
* @param aContract service pattern contract.
*/
IMPORT_C static CSenWSPattern* NewLC( const TDesC8& aEndPoint,
const TDesC8& aContract );
/**
* Destructor.
*/
IMPORT_C virtual ~CSenWSPattern();
// New functions
/**
* Convenience method for writing out the consumer policy as XML
* in UTF-8 form.
* @since Series60 3.0
* @return consumer policy as UTF-8 form XML.
*/
IMPORT_C HBufC8* ConsumerPolicyAsXmlL();
// Functions from base classes
// From CSenWSDescription
/**
* Compares that both service description and possible
* policy inside of it matches with this instance.
* @since Series60 3.0
* @param aPattern the service description to compare to
* @return ETrue both service description and policy information
* matches, otherwise EFalse. If some value is not set
* in current instance, it is not compared.
*/
IMPORT_C TBool Matches(MSenServiceDescription& aWSPattern);
/**
* Callback function which implements the XML content handler interface.
* Parses the consumer policies independently.
* @since Series60 3.0
* @param aNsUri The namespace URI of the new element
* @param aLocalName The local name of the new element
* @param aQName The qualified name of the new element
* @param aAttributes The attributes of the new element
*/
IMPORT_C void StartElementL(const TDesC8& aNsUri,
const TDesC8& aLocalName,
const TDesC8& aQName,
const RAttributeArray& aAttributes);
// From MSenConsumerPolicy
IMPORT_C virtual void SetConsumerIapIdL(TUint32 aIapId);
IMPORT_C virtual TInt ConsumerIapId(TUint32& aCurrentIapId);
IMPORT_C virtual void SetConsumerIdentityProviderIdsL(
CSenIdentityProviderIdArray8& aList);
IMPORT_C virtual TInt AddConsumerIdentityProviderIdL(
const TDesC8& aProviderId);
IMPORT_C virtual const CSenIdentityProviderIdArray8&
ConsumerIdentityProviderIds8L();
IMPORT_C virtual TBool AcceptsConsumerPolicy(
MSenConsumerPolicy& aPolicyPattern);
IMPORT_C virtual TInt RebuildFromConsumerPolicy(
MSenConsumerPolicy& aTemplate);
IMPORT_C virtual TBool HasSuperClass( TDescriptionClassType aType );
protected: // New functions
/**
* C++ constructor.
* @since Series60 3.0
* @param aType enumeration defininng the type of this class.
*/
IMPORT_C CSenWSPattern(
MSenServiceDescription::TDescriptionClassType aType);
/**
* Base constructor offered to sub class implementations.
* @since Series60 3.0
*/
IMPORT_C void BaseConstructL();
/**
* Base constructor offered to sub class implementations.
* @since Series60 3.0
* @param aNamespaceURI the localname for XML element representation
* of this class.
*/
IMPORT_C void BaseConstructL(const TDesC8& aNamespaceURI);
/**
* Base constructor offered to sub class implementations.
* @since Series60 3.0
* @param aEndPoint is the actual endpoint to the service
* @param aContract of the service, typically some URI
*/
IMPORT_C void BaseConstructL(const TDesC8& aEndPoint, const TDesC8& aContract);
public:
/**
* Sets the Consumer SNAP ID.
* @param aSnapId A TUint32 consumer SNAP ID
*/
IMPORT_C virtual void SetConsumerSnapIdL(TUint32 aSnapId);
/**
* Gets the Consumer SNAP ID.
* @param aCurrentSnapId A TUint32 reference to be filled in with the
* value of the SNAP ID.
* @return KErrNone if no error, or some of the system
* wide error codes.
*/
IMPORT_C virtual TInt ConsumerSnapId(TUint32& aCurrentSnapId);
protected: // Data
// Consumer policy class instance, used as a delegate in parsing
CSenConsumerPolicy* iConsumerPolicy;
};
#endif SEN_SERVICE_PATTERN_H
// End of File