/*
 * Copyright 2009 Funambol, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* $Id$ */
#pragma once

#include <daemon/INotificationCenter.h>
#include <commontypes.h>
#include <CritSection.h>
#include <map>

namespace NS_DM_Client
{
	class NotificationCenter: public INotificationCenter
	{
	public:
		NotificationCenter();
		virtual ~NotificationCenter();
		virtual bool Subscribe(INotification* notif);
		virtual bool Unsubscribe(INotification* notif);

		virtual void StartDMSessionStatus(bool started);
		virtual void CheckFirmwareUpdateStatus(bool isNewFirmware);

		virtual void NotifyDMSessionStatus(EventType eventType, Initiator initiator, NotificationStatus statusCode);

		virtual void FirmwareInfo(const String &localpath, const String &filename, const int size);
		virtual void FirmwareUpdateStart(FirmwareUpdate::EnumFirmwareOperation fi);
		virtual void FirmwareUpdateFinished(FirmwareUpdate::EnumFirmwareOperation fi);

		virtual void StartDRMDCollecting(int duration);
		virtual void ProvisioningUpdate(const StringArray& URIs, CommandType command, EventType eventType, StatusCode resultCode);

	protected:
		NotificationCenter(const INotificationCenter&);
		NotificationCenter& operator =(const INotificationCenter&);

		bool exists(INotification* notif);

	protected:
		typedef std::map<void*, INotification*>	Notifications;
		Notifications				m_notifs;
		NS_Common::CritSection		m_notifsGuard;
	};
}

