contentmgmt/contentaccessfwfordrm/source/caf/resolver.h
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/contentaccessfwfordrm/source/caf/resolver.h	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,231 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+
+#ifndef __RESOLVER_H__
+#define __RESOLVER_H__
+
+#include <e32std.h>
+#include <ecom/ecom.h>
+#include <caf/caftypes.h>
+
+namespace ContentAccess
+	{
+	const TUid KF32AgentImplUid = { 0x101FC2CF };
+
+	class CAgentInfo;
+	
+	/**
+	Used to identify the Content Access Agent who handles a particular file.
+	 
+	CAgentResolver builds an array of CAgentInfo objects. Each CAgentInfo object
+	holds metadata related to a particular agent implementation.
+
+	This class resolves:
+	  - Content to the Agent which manages it
+	  - Supplier mime-types to the agent which imports files with that mime type.
+
+	@internalComponent
+	@released
+	*/
+	class CAgentResolver : public CActive
+			{
+		public:
+			/** Constructs a new CAgentResolver and puts it on the cleanup stack
+			* @param aDynamicAgentUpdate ETrue if the CAgentResolver should update its list of agents when new agents appear. A CActiveScheduler must already be running when ETrue is supplied
+			* @leave KErrCANoAgent If no F32 agent was found
+			*/
+			IMPORT_C static CAgentResolver* NewLC(const TBool aDynamicAgentUpdate);
+
+			/** Constructs a new CAgentResolver
+			* @param aDynamicAgentUpdate ETrue if the CAgentResolver should update its list of agents when new agents appear. A CActiveScheduler must already be running when ETrue is supplied
+			* @leave KErrCANoAgent If no F32 agent was found
+			*/
+			IMPORT_C static CAgentResolver* NewL(const TBool aDynamicAgentUpdate);
+			virtual ~CAgentResolver();
+	
+			/** Finds the agent that handles the given supplier MIME type.
+			
+			@param aMimeType	MIME type from the supplier application.
+			@return				The CAgentInfo object associated with the agent that handles files with this MIME type.
+			 
+			@leave KErrCANoAgent	If no CA agent supports the given MIME type. 
+			*/
+			CAgentInfo& ResolveSupplierMimeL(const TDesC8& aMimeType) const;
+			 
+			/** Finds the agent that handles the given consumer MIME type.
+				
+			@note	Planning to remove this from the CAF API
+			
+			@param aMimeType	MIME type of the file
+			@return			The CAgentInfo object associated with the agent that handles files with this MIME type.
+ 			*/
+			CAgentInfo& ResolveConsumerMime(const TDesC8& aMimeType) const;
+			
+			/** Finds the agent that handles a file.
+			
+			@param aFile Handle of the file to be resolved.
+			@return	The CAgentInfo object associated with the agent that will handle this file.
+			*/
+			CAgentInfo& ResolveFileL(RFile& aFile) const;			
+			
+			/** Finds the agent that handles a file and returns the actual URI of the content.
+			
+			If the aUri is of the form "c:\\private\\agent_name\\" 
+			it will be translated to the form "c:\\private\\SID\\" in
+			aActualUri. Otherwise the aUri is just copied to aActualUri
+			
+			@param aUri	Location of file to be resolved.
+			@param aActualUri The actual location of the file
+			@param aShareMode The file sharing mode to be used with this file
+			@return	The CAgentInfo object associated with the agent that will handle this file.
+			*/
+			CAgentInfo& ResolveFileL(const TDesC& aUri, TDes& aActualUri, TContentShareMode aShareMode = EContentShareReadOnly) const;
+
+			/** Find the agent who owns a directory
+			
+			This function also maps a path from the agent directory name
+			to it's actual name in the file system.
+			
+			ie. For example if an agent "x" has files stored in a private server directory
+			"c:\\private\\12345678\\" 
+			
+			The file appear as "c:\\private\\x\\" to applications using CAF. This function
+			converts "c:\\private\\x\\" back to "c:\\private\\12345678\\"
+
+			@param aPath The path in the form c:\\private\\agent_name\\...
+			@param aActualPath The path in the form c:\\private\\SID\\...
+			@param aThePrivateDir to ETrue if the directory is just "\\private\\" 
+			@return	The Uid of the agent who owns the directory
+			*/			
+			TUid ResolveDirectory(const TDesC& aPath, TDes& aActualPath, TBool& aThePrivateDir) const;
+			
+			/** Converts a filename containing the agent SID to the filename containing the agent name.
+			@param aFileName The filename in the form "c:\\private\\12345678\\"
+			@return A buffer to the new filename in the form "c:\\private\\agent_name\\"
+			*/
+			HBufC* ConvertAgentFileNameL(const TDesC& aFileName) const;
+		
+			/** Determines the MIME types of the a file and the mime type of its contents.
+
+			This function should only be used by the CAF recogizer DLL.
+			
+			@param aName			The file name/URI to be investigated.
+			@param aBuffer			A buffer containing bytes from the start of the file.
+			@param aFileMimeType	If the file is recognized this will be populated with 
+									the mime type of the file.
+			@param aContentMimeType	If the file is recognized this will be populated with the mime type of the content object within the file. 
+
+			@return					ETrue if the file is recognized by content access agent
+			@return					EFalse if the file is not recognized by a content access agent
+			*/
+			IMPORT_C TBool DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer, TDes8& aFileMimeType, TDes8& aContentMimeType);
+	
+			/** Gets the preferred buffer size for recognizing files using the RecognizeFile() function.
+			
+			This function should only be used by the CAF recogizer DLL.  
+
+			@return	The largest preferred buffer nominated by any agent for recognizing files using the the DoRecognize() function.
+			*/
+			IMPORT_C TInt PreferredBufferSize();
+		
+			/** Accessor for the SupplierMimeTypes array.
+			*
+			* @return	An array of supplier MIME type supported by CAF agents.
+			*/
+			IMPORT_C const RArray<TPtrC8>& SupplierMimeTypes() const;
+
+			/** Accessor for the ConsumerMimeTypes array.
+			*
+			* @note	Planning to remove this from the CAF API
+			*
+			* @return	An array of consumer MIME types supported by CAF agents.
+			*/
+			IMPORT_C const RArray<TPtrC8>& ConsumerMimeTypes() const;
+
+			/** Find an agent by it's Uid */
+			CAgentInfo& AgentInfoL(const TUid& aUid) const;
+			
+			/** Find an agent by it's name */
+			CAgentInfo& AgentInfoL(const TDesC& aAgentName) const;
+			
+			/** Reference an agent in the iAgentInfos array by index */
+			CAgentInfo& AgentInfo(TInt aIndex) const;
+			
+			/** The number of agents, excluding the F32Agent */
+			 TInt AgentInfoCount() const;
+			
+			/** The default F32 agent */
+			TUid DefaultAgentUid() const;
+
+		private:
+			// From CActive, used for dynamically updating the list of content access agents
+			virtual void DoCancel();
+			virtual void RunL();
+		
+		private:
+			CAgentResolver(const TBool aDynamicAgentUpdate);
+			
+			/** Second phase constructor for CAgentResolver
+			*/
+			void ConstructL();
+
+
+			/** Builds a list of all the Content Access Agents. */
+			void BuildListOfAgentsL();
+			
+			/** Add an agent to the list of agents */
+			void AddAgentL(const CImplementationInformation& aImplInfo);
+
+			/** Resets the list. */
+			void DestroyListOfAgents();
+
+			/** Is this the F32 Agent 
+			@param aAgentInfo The agentinfo representing the agent
+			@return ETrue if it is the F32Agent, EFalse otherwise
+			*/
+			TBool IsF32Agent(CAgentInfo& aAgentInfo);
+
+			// Cleanup item
+			static void CleanImplArray(TAny* aArray);
+
+		private:
+			const TBool iDynamicAgentUpdate;
+			REComSession* iEcomSession;
+
+			RArray<TPtrC8> iSupplierMimeTypes;
+			RArray<TPtrC8> iConsumerMimeTypes;
+	
+			// Array of agentInfos (not including F32 agent)
+			RPointerArray <CAgentInfo> iAgentInfos;
+
+			// This points to the agent which handles content if it is not
+			// recognised by any other agent (this should be the F32Agent)
+			CAgentInfo* iDefaultAgent;
+			};
+
+	} // namespace ContentAccess
+#endif /* __RESOLVER_H__ */