/*
 *  ITnMapProxyFactory.h
 *  OpenGL Map Engine
 *
 *  Created by Benjamin & Thant on 4/7/2010
 *  Copyright 2009 TeleNav Inc. All rights reserved.
 *
 */

#ifndef ITN_MAP_PROXY_FACTORY_H
#define ITN_MAP_PROXY_FACTORY_H

/*! The Proxy Factory and its related classes are how the Engine
 * requests data from the Client, and how the Client provides the data
 * to the engine.
 *
 * The 'Proxy' classes are how the Engine requests data. The Client
 * provides implementations of the Proxy classes, and implementations
 * of the Proxy Factory functions that instantiate them.
 *
 * The 'Data' classes are how the Client passes the data to the
 * Engine. The Engine is responsible for implementing the Data
 * classes.
 * 
 * Asynchronous requests are supported via Data structures that are
 * derived from TnMapDataRequest and passed to the client using boost
 * shared pointers. The Client fulfills the request by calling the
 * appropriate member functions with the appropriate data. Once it is
 * finished, it calls the 'SetRequestResult' member function to
 * indicate to the engine that it has completed satisfying the data
 * request.
 *
 */

#include <foundation/SharedPtr.h>

class ITnMapResourceProxy;
class ITnMapRouteProxy;
class ITnMapTrafficProxy;
class ITnMapAnnotationProxy;
class ITnMapLandmarkProxy;
class ITnMapRasterTileProxy;
class ITnMapGlyphProxy;
class ITnMapVectorDataProxy;

class ITnMapProxyFactory
{
public:
    typedef Tn::Foundation::shared_ptr<ITnMapProxyFactory> ptr;

    virtual ~ITnMapProxyFactory() = 0;

    virtual Tn::Foundation::shared_ptr<ITnMapResourceProxy> GetResourceProxy() = 0;

    virtual Tn::Foundation::shared_ptr<ITnMapRouteProxy> GetRouteProxy() = 0;
    
    virtual Tn::Foundation::shared_ptr<ITnMapTrafficProxy> GetTrafficProxy() = 0;
    
    virtual Tn::Foundation::shared_ptr<ITnMapAnnotationProxy> GetAnnotationProxy() = 0;
    
    virtual Tn::Foundation::shared_ptr<ITnMapLandmarkProxy> GetLandmarkProxy() = 0;
    
    virtual Tn::Foundation::shared_ptr<ITnMapRasterTileProxy> GetRasterTileProxy() = 0;

    virtual Tn::Foundation::shared_ptr<ITnMapGlyphProxy> GetGlyphProxy() = 0;

    virtual Tn::Foundation::shared_ptr<ITnMapVectorDataProxy> GetVectorDataProxy() = 0;
};

#endif

