00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef GRIBAPICDMWRITER_IMPLABSTRACT_H_
00026 #define GRIBAPICDMWRITER_IMPLABSTRACT_H_
00027
00028 #include <vector>
00029 #include <fstream>
00030 #include <iostream>
00031 #include "fimex/Logger.h"
00032 #include "fimex/CDMWriter.h"
00033 #include "fimex/XMLDoc.h"
00034 #include "fimex/CDMException.h"
00035 #include "fimex/TimeUnit.h"
00036
00037
00038 struct grib_handle;
00039
00040 namespace MetNoFimex
00041 {
00042
00043 class GribApiCDMWriter_ImplAbstract : public CDMWriter
00044 {
00045 public:
00052 GribApiCDMWriter_ImplAbstract(int gribVersion, const boost::shared_ptr<CDMReader>& cdmReader, const std::string& outputFile, const std::string& configFile);
00053 virtual ~GribApiCDMWriter_ImplAbstract();
00060 void run() throw(CDMException);
00061 protected:
00065 virtual void setGlobalAttributes();
00066 virtual void setData(const boost::shared_ptr<Data>& data);
00072 virtual void setProjection(const std::string& varName) throw(CDMException) = 0;
00073 virtual void setParameter(const std::string& varName, const FimexTime& fTime, double levelValue) throw(CDMException) = 0;
00074 virtual void setTime(const std::string& varName, const FimexTime& fTime);
00075 virtual void setLevel(const std::string& varName, double levelValue) = 0;
00081 virtual std::vector<double> getLevels(const std::string& varName) throw(CDMException);
00086 virtual std::vector<FimexTime> getTimes(const std::string& varName) throw(CDMException);
00092 virtual boost::shared_ptr<Data> handleTypeScaleAndMissingData(const std::string& varName, const FimexTime& fTime, double levelValue, boost::shared_ptr<Data> inData) = 0;
00093 virtual void writeGribHandleToFile();
00101 xmlNode* getNodePtr(const std::string& varName, const FimexTime& fTime, double levelValue) throw(CDMException);
00102
00103 protected:
00104 int gribVersion;
00105 const std::string configFile;
00106 const boost::shared_ptr<XMLDoc> xmlConfig;
00107 boost::shared_ptr<grib_handle> gribHandle;
00108 LoggerPtr logger;
00109 private:
00110 std::ofstream gribFile;
00111
00112 };
00113
00114 }
00115
00116 #endif