lowlevellibsandfws/pluginfw/Framework/Example/EComSwiExample.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lowlevellibsandfws/pluginfw/Framework/Example/EComSwiExample.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,239 @@
+// Copyright (c) 2007-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:
+// The implementation of a classe
+// to be provided by ECom.
+// 1. Using the CExampleInterface class as a base.
+// 
+//
+
+#include "Interface.h"
+#include "ImplementationProxy.h"
+#include "TestUtilities.h"	// For __FILE__LINE__
+
+// ____________________________________________________________________________
+// 
+/**	Intended usage: This class implements the functionality promised by 
+	the CExampleInterface defintion class. It does little apart from provides a test instance
+	which may be retrieved and run for testing purposes.
+	Its resolution is based upon its registered default data string that
+	advertises this class as being able to handle 'text\wml' data.
+	@since 7.0
+ */
+class CImplementationClassOne : public CExampleInterface
+{
+// Methods
+public:
+/**
+	@fn				NewL(TAny* aInitParams)
+	Intended Usage	: Standardised safe construction which leaves nothing the cleanup stack.
+	Error Condition	: Leaves with error code.
+	@leave          	KErrNoMemory.
+	@since			7.0
+	@param			aInitParams The parameter struct used for initialising this object
+	@return			CImplementationClassOne* The class instance.
+	@pre 			None
+	@post			CImplementationClassOne has been constructed,
+					and initialised.
+ */
+	static CImplementationClassOne* NewL(TAny* aInitParams);
+
+/**
+	@fn				~CImplementationClassOne()
+	Intended Usage	: Default Destructor	
+	Error Condition	: None	
+	@since			7.0
+	@pre 			CImplementationClassOne has been constructed
+	@post			CImplementationClassOne has been completely destroyed.
+ */
+	virtual ~CImplementationClassOne();
+
+/**
+	@fn				DoMethodL()
+	Intended Usage	: Overload of the pure interface method
+					Representative of a method provided on 
+					the interface by the interface definer.
+	Error Condition	: Leaves with an error code.
+	@leave  		KErrNoMemory, KErrNotSupported.
+	@since			7.0
+	@return			None
+	@pre 			CImplementationClassOne has been constructed
+	@post			Unspecified
+ */	
+	void DoMethodL();
+
+/**
+	@fn				FireAndForget()
+	Intended Usage	: Overload of the pure interface method
+					asynchronous function which 
+					an interface definer could specify.  
+					It allows the client to call the function in the knowledge 
+					that the object will commit suicide when the 
+					function completes.
+	Error Condition	: None.
+	@since			7.0
+	@return			TInt KErrNone for success.
+	@pre 			CImplementationClassOne has been constructed
+	@post			Unspecified
+ */
+	TInt FireAndForget();
+
+ /**
+	@fn				ImplId()
+	Intended Usage	: To verify the object returned by ECOM.
+	Error Condition	: None.
+	@since			7.0s
+	@return			TUid (ECOM's Implementation Uid for this class.)
+	@pre 			CImplementationClassThree has been constructed
+	@post			Unspecified
+ */
+	TUid ImplId();
+
+private:
+/**
+	@fn				CImplementationClassOne()
+	Intended Usage	: Default Constructor : usable only by derived classes	
+	Error Condition	: None	
+	@since			7.0
+	@pre 			None
+	@post			CImplementationClassOne has been constructed
+ */
+	CImplementationClassOne();
+
+/**
+	@fn				ConstructL(TAny* aInitParams)
+	Intended Usage	: Completes the safe construction of the CImplementationClassOne object
+	Error Condition	: Leaves with the error code.	
+	@leave          	KErrNoMemory.	
+	@since			7.0
+	@param			aInitParams The parameter struct used for initialising this object
+	@pre 			CImplementationClassOne has been constructed
+	@post			CImplementationClassOne has been fully initialised.
+ */
+	void ConstructL(TAny* aInitParams);
+
+// Provide the CActive overloads
+	void RunL();
+	void DoCancel();
+	TInt RunError(TInt aError);
+
+private:
+/** A place for allocating some memory in the ConstructL */
+	HBufC*	iInternalDescriptor;
+/** An int to be stored in TLS to test its useage */	
+	TInt	iTLSInt;
+
+};  // End of CImplementationClassOne definition
+
+// __________________________________________________________________________
+// Implementation
+
+CImplementationClassOne* CImplementationClassOne::NewL(TAny* aInitParams)
+// Intended Usage	: Safe construction which leaves nothing upon the cleanup stack	
+// Error Condition	: Will leave with an appropriate error code	
+// Dependencies	: CBase
+// @param			" "
+// @return			CImplementationClassOne* a pointer to the fully instantiated CImplementationClassOne object
+// @pre 			None
+// @post			The object has been fully instantiated
+// Static member
+	{
+	CImplementationClassOne* self=new(ELeave) CImplementationClassOne();  // calls c'tor
+	CleanupStack::PushL(self);	// Make the construction safe by using the cleanup stack
+	self->ConstructL(aInitParams); // Complete the 'construction'.
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CImplementationClassOne::~CImplementationClassOne()
+// Default virtual d'tor
+	{
+	delete iInternalDescriptor;
+	}
+
+CImplementationClassOne::CImplementationClassOne()
+// Default c'tor for use by derived and 
+// static construction methods only
+: CExampleInterface()
+	{
+	// Deliberately do nothing here : See ConstructL() for initialisation completion.
+	}
+
+void CImplementationClassOne::ConstructL(TAny* aInitParams)
+// Intended Usage	: Safely complete the initialization of the constructed object	
+// Error Condition	: Will leave with an appropriate error code	
+// Dependencies	: CBase
+// @return			void
+// @pre 			CImplementationClassOne has been constructed
+// @post			The CImplementationClassOne object has been fully instantiated
+//
+	{
+	TExampleInterfaceInitParams* params = REINTERPRET_CAST(TExampleInterfaceInitParams*,
+														   aInitParams);
+	if(params->descriptor)
+		iInternalDescriptor = params->descriptor->AllocL();
+
+	Dll::SetTls(&iTLSInt);
+	}
+
+void CImplementationClassOne::DoMethodL()
+	{
+	// Access TLS to ensure it has been set properly
+	REINTERPRET_CAST(TInt*, Dll::Tls());
+	}
+
+TInt CImplementationClassOne::FireAndForget()
+	{
+	TRAPD(error,DoMethodL());
+	return error;			// Always KErrNotSupported
+	}
+
+// Provide the CActive overloads
+void CImplementationClassOne::RunL()
+	{
+	// Do nothing : should never be called
+	__ASSERT_DEBUG(EFalse,User::Invariant());
+	}
+
+void CImplementationClassOne::DoCancel()
+	{
+	// Do nothing
+	}
+
+TInt CImplementationClassOne::RunError(TInt aError)
+	{
+	return aError;
+	}
+
+TUid CImplementationClassOne::ImplId()
+	{
+	TUid idVal = {0x10009DDA};
+	return (idVal);
+	}
+
+
+// __________________________________________________________________________
+// Exported proxy for instantiation method resolution
+// Define the interface UIDs
+const TImplementationProxy ImplementationTable[] = 
+	{
+		IMPLEMENTATION_PROXY_ENTRY(0x10009DDA,	CImplementationClassOne::NewL),
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+	return ImplementationTable;
+	}
+