1 //*******************************************************************
2 // Copyright (C) 2000 ImageLinks Inc.
3 //
4 // License:  MIT
5 //
6 // See LICENSE.txt file in the top level directory for more details.
7 //
8 // Author:  Frank Warmerdam (warmerda@home.com)
9 //
10 //*******************************************************************
11 //  $Id: ossimImageWriterFactoryRegistry.h 22865 2014-08-06 11:17:03Z gpotts $
12 
13 #ifndef ossimImageWriterFactoryRegistry_HEADER
14 #define ossimImageWriterFactoryRegistry_HEADER
15 #include <ossim/base/ossimObjectFactory.h>
16 #include <ossim/imaging/ossimImageWriterFactoryBase.h>
17 #include <ossim/base/ossimFactoryListInterface.h>
18 #include <vector>
19 #include <iosfwd>
20 
21 class ossimImageFileWriter;
22 class ossimKeywordlist;
23 
24 class OSSIMDLLEXPORT ossimImageWriterFactoryRegistry :
25    public ossimObjectFactory,
26    public ossimFactoryListInterface<ossimImageWriterFactoryBase, ossimImageFileWriter>
27 {
28 public:
29    static ossimImageWriterFactoryRegistry* instance();
30 
31    ossimImageFileWriter *createWriter(const ossimFilename& filename)const;
32    ossimImageFileWriter *createWriterFromExtension(const ossimString& fileExtension)const;
33    ossimImageFileWriter *createWriter(const ossimKeywordlist &kwl,
34                                       const char *prefix=0)const;
35    ossimImageFileWriter* createWriter(const ossimString& typeName)const;
36 
37    ossimObject* createObject(const ossimKeywordlist &kwl,
38                              const char *prefix=0)const;
39 
40    ossimObject* createObject(const ossimString& typeName)const;
41 
42    /**
43     * getTypeNameList.  This should return the class type of the object being
44     * used to perform the writting.
45     */
46    virtual void getTypeNameList(std::vector<ossimString>& typeList)const;
47 
48    /**
49     * getImageTypeList.  This is the actual image type name.  So for
50     * example, ossimTiffWriter has several image types.  Some of these
51     * include TIFF_TILED, TIFF_TILED_BAND_SEPARATE ... etc.
52     * The ossimGdalWriter
53     * may include GDAL_IMAGINE_HFA, GDAL_RGB_NITF, GDAL_JPEG20000, ... etc
54     * A writer should be able to be instantiated by this name as well as a
55     * class name
56     */
57    virtual void getImageTypeList(std::vector<ossimString>& imageTypeList)const;
58 
59    virtual void getImageFileWritersBySuffix(ossimImageWriterFactoryBase::ImageFileWriterList& result,
60                                             const ossimString& ext)const;
61    virtual void getImageFileWritersByMimeType(ossimImageWriterFactoryBase::ImageFileWriterList& result,
62                                               const ossimString& mimeType)const;
63    /**
64     * @brief Prints list of writers from getImageTypeList.
65     * @param  out Stream to print to.
66     * @return std::ostream&
67     */
68    std::ostream& printImageTypeList(std::ostream& out)const;
69 
70    /**
71     * @brief Prints list of writers from getImageTypeList.
72     * @param  out Stream to print to.
73     * @return std::ostream&
74     */
75    std::ostream& printWriterProps(std::ostream& out)const;
76 
77 protected:
78    ossimImageWriterFactoryRegistry();
79    ossimImageWriterFactoryRegistry(const ossimImageWriterFactoryRegistry&);
80    void operator=(const ossimImageWriterFactoryRegistry&);
81 
82    //static ossimImageWriterFactoryRegistry*    theInstance;
83 };
84 
85 extern "C"
86 {
87   OSSIMDLLEXPORT void* ossimImageWriterFactoryRegistryGetInstance();
88 }
89 #endif
90