/*
 * Copyright (C) 2009 - 2010 Funambol, Inc.
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License version 3 as published by
 * the Free Software Foundation with the addition of the following permission
 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
 * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE
 * WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program; if not, see http://www.gnu.org/licenses or write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301 USA.
 *
 * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite
 * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
 *
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU Affero General Public License version 3.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public License
 * version 3, these Appropriate Legal Notices must retain the display of the
 * "Powered by Funambol" logo. If the display of the logo is not reasonably
 * feasible for technical reasons, the Appropriate Legal Notices must display
 * the words "Powered by Funambol".
 */
/* $Id$ */

#pragma once

namespace NS_DM_Client
{
	class IExecutionQueue;
	class IServerExchangeManager;
	class IMOTreeManager;
	class INotificationListener;
    class INotificationCenter;

	class IDeviceAdapter;
	class DynamicLoader;
	class IDaemonEngineRequest;

    namespace NS_DataStorage
    {
        class IDataStorage;
    }
    typedef NS_DataStorage::IDataStorage    IDataStorage;

	class ProfileComponentsHolder
	{
	public:
		ProfileComponentsHolder(void);
		~ProfileComponentsHolder(void);

//         const char*             GetProfileName() const;
//         void                    SetProfileName(const char*);

        //      to support profile separated logging
        //         Logger&                 GetLogger();
        //         void                    SetLogger(Logger&);

		IExecutionQueue*		GetExecutionQueue();
		IServerExchangeManager*	GetServerExchangeManager();
		IMOTreeManager*			GetMOTreeManager();
		INotificationListener*	GetNotificationListener();
		IDataStorage*			GetDataStorage();
		IDeviceAdapter*			GetDeviceAdapter();
		INotificationCenter*	GetNotificationCenter();
		IDaemonEngineRequest*	GetDaemonEngineRequest();

		void					SetExecutionQueue(IExecutionQueue*);
		void					SetServerExchangeManager(IServerExchangeManager*);
		void					SetMOTreeManager(IMOTreeManager*);
		void					SetNotificationListener(INotificationListener*);
		void					SetDataStorage(IDataStorage*);
		void					SetDeviceAdapter(IDeviceAdapter*, DynamicLoader* = 0);
		void					SetNotificationCenter(INotificationCenter*);
		void					SetDaemonEngineRequest(IDaemonEngineRequest*);
		

	private:
		ProfileComponentsHolder(const ProfileComponentsHolder&);
		ProfileComponentsHolder& operator=(const ProfileComponentsHolder&);

    private:
		IExecutionQueue*		m_ExecQueue;
		IServerExchangeManager*	m_ServExchange;
		IMOTreeManager*			m_MOTree;
		INotificationListener*	m_NotificationListener;
		IDataStorage*			m_DataStorage;
		IDeviceAdapter*			m_DeviceAdapter;
		DynamicLoader* 			m_DeviceAdapterDynamicLoader;
		INotificationCenter*	m_NotificationCenter;
		IDaemonEngineRequest*	m_daemonEngineRequest;
	};

}
