diff -r 000000000000 -r 62f9d29f7211 webservices/wsrestplugin/inc/senrestplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wsrestplugin/inc/senrestplugin.h Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,258 @@ +/* +* Copyright (c) 2004 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: Header declaration +* +*/ + + + + + + + + +#ifndef SEN_REST_PLUGIN_H +#define SEN_REST_PLUGIN_H + +#include +#include +#include "SenXmlUtils.h" + +// FORWARD DECLARATIONS +class MSenCoreServiceManager; +class CSenBaseFragment; +class MSenTransport; +class CSenRestServiceSession; + +// CONSTANTS + +_LIT8(KRestFrameworkVersion, "1.0"); +_LIT8(KRestFrameworkXMLNS, "urn:com.nokia.Sen.rest.config.1.0"); +_LIT8(KRestFrameworkCue, "com.nokia.Sen.rest.RestServiceFramework"); + +// INCLUDES +#include "senserviceinvocationframework.h" // internal Framework\inc + +/** + * Class: CSenIdWsfPlugin + * + * Description: An implementation of the CSIF definition. This is concrete + * class, instance of which ECOM framework gives to ECOM clients. + */ +class CSenRestPlugin : public CSIF + { +public: + /** + * Function: NewL + * + * Description: Create instance of concrete implementation. Note that ECOM + * interface implementations can only have two signatures for + * NewL: + * - NewL without parameters (used here) + * - NewL with TAny* pointer, which may provide some client + * data + * + * Returns: Instance of this class. + * + * Note: The interface, which is abstract base class of this + * implementation, also provides NewL method. Normally abstract + * classes do not provide NewL, because they cannot create + * instances of themselves. + */ + static CSenRestPlugin* NewL(TAny* aManager); + + +public: // Methods implementing CSIF ECOM interface + // For convenience of components classes + //RFileLogger* Log() const; + + /** + * Return a system wide unique string to identify this framework + * + * @return TDesC8 that uniquely identifies this framework. + */ + virtual const TDesC8& Id(); + + /** + * Try to find one or more services that match the given + * ServiceDescription. + * Register ServiceDescriptions for these to the owner of the framework, + * i.e. to the ServiceManager. Return the number of ServiceDescriptions + * that were added. + * + * @param aPattern - A ServiceDescriptin that should be treated as a + * pattern + * + * @param + * return (TInt) count of matching ServiceDescriptions that were added + */ + virtual TInt AddServiceDescriptionL( MSenServiceDescription& aPattern, + MSenRemoteServiceConsumer& aRemoteConsumer, + HBufC8*& aErrorMsg ); + + /** + * Attempt to register the ServiceDescription to the ServiceManager that + * owns the framework. + * This is a callback used by the ServiceManager to give frameworks a + * chance to replace a generic ServiceDescription into something that is + * more specific, and more useful, to the ServiceInvocationFramework. + * + * @param aServiceDescription A ServiceDescription + * + * return TInt aError - indicates the error or KErrNone if successful + */ + virtual TInt RegisterServiceDescriptionL(MSenServiceDescription& aServiceDescription); + + + /** + * Attempt to unregister the ServiceDescription from the ServiceManager + * that owns the framework. + * This is a callback used by the ServiceManager. + * + * @param aServiceDescription A ServiceDescription + * + * return TInt aError - indicates the error or KErrNone if successful + */ + virtual TInt UnregisterServiceDescriptionL(MSenServiceDescription& aServiceDescription); + + /** + * Create a ServiceSession based upon the given ServiceDescription. + * The ServiceSession is expected to be "valid", i.e. ready for use + * by a client. + * + * @param aServiceDescription A ServiceDescription + * + * @param aNewSession (CSenServiceSession) + * + * return TInt error or KErrNone if successful + */ + virtual TInt CreateServiceSessionL(MSenServiceDescription& aServiceDescription, + MSenServiceDescription& aPattern, + CSenServiceSession*& aNewSession, + MSenRemoteServiceConsumer& aRemoteConsumer, + HBufC8*& aErrMsg); + + /** + * Return a new instance of a framework specific class that + * implements the ServiceDesccription interface. + * + * @param new service description + * (which typically derives from CSenServiceSession) + * + * return TInt error or KErrNone if successful + */ + virtual CSenWSDescription* NewServiceDescriptionL(); + + /** + * Return the ServiceManager for which this instance is working. + * This is used by the ServiceSession instances created by this framework. + * + * Note, in Sen, MSenCoreServiceManager IS SINGLETON(!), so all Frameworks + * return their "owner" - that is - the only service manager in + * Sen Framework + * + * @return (MSenCoreServiceManager) + */ + virtual MSenCoreServiceManager& Manager(); + + + /** + * Set the ServiceManager to which this instance reports. + * The (singleton) ServiceManager calls this method when + * it instantiates a framework. + * + * @param aServiceManager The singleton ServiceManager in the system. + */ + virtual void SetManager(MSenCoreServiceManager& aServiceManager); + + + /** + * Return an object that can do SAX based parsing of a XML fragment + * that contains framework specific configuration information. + * The ServiceManager asks for this BaseFragment upon startup + * in order to give this framework a chance to read its configuration + * information from the central ServiceManager configuration document. + * + * @return (CSenBaseFragment) + */ + virtual CSenBaseFragment& ConfigParser(); + + /** + * Write the ServiceInvocationFramework configuration as XML to a HBufC8. + * + * This method is invoked by the ServiceManager when it saves + * its state and/or configuration. + * + * Upon startup the chunk of XML that is written will be passed back to + * the configuation parser of the framework. + * + * The "schema" that shall be adhered to is: + *
+     * <element name="Framework">
+     *      <any/><!-- this is where implementations write additional
+     *      information -->
+     *      <attribute name="class" type="String">
+     *    <!-- In Syimbian the class attribute is used as cue for the
+     *      ECOM Resolver -->
+     * </element>
+     * 
+ * + * @param aTo - a HBufC8 to which the framework should write its + * configuration + */ + + virtual HBufC8* AsXmlL(); + virtual HBufC* AsXmlUnicodeL(); + virtual void EndElementL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName); + + TInt OnEvent(const TInt aEvent, TAny* aArgument); + + virtual TAny* ExtendedInterface(); + + // New methods + + /** + * REST framework specifies at least following text/xml content type: + * KTextWwwFormContentType == "application/x-www-form-urlencoded; charset=UTF-8" + * @return KErrNone on success, system-wide error code otherwise + */ + virtual TInt SetTransportPropertiesL(MSenTransport& aTransport); + +public: // destructor + virtual ~CSenRestPlugin(); + + +protected: + /** + * Function: CSenRestPlugin + * + * Discussion: Perform the first phase of two phase construction + */ + CSenRestPlugin(MSenCoreServiceManager& aManager); + + /** + * Function: ConstructL + * + * Discussion: Perform the second phase construction of a + * CImplementationClassPlus object. + */ + void ConstructL(); + +private: // data + MSenCoreServiceManager& iManager; + }; + + +#endif // SEN_REST_PLUGIN_H +