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 <grib_api.h>
00030 #include <fstream>
00031 #include <iostream>
00032 #include "fimex/Logger.h"
00033 #include "fimex/CDMWriter.h"
00034 #include "fimex/XMLDoc.h"
00035 #include "fimex/CDMException.h"
00036 #include "fimex/TimeUnit.h"
00037
00038 namespace MetNoFimex
00039 {
00040
00041 class GribApiCDMWriter_ImplAbstract : public CDMWriter
00042 {
00043 public:
00050 GribApiCDMWriter_ImplAbstract(int gribVersion, const boost::shared_ptr<CDMReader>& cdmReader, const std::string& outputFile, const std::string& configFile);
00051 virtual ~GribApiCDMWriter_ImplAbstract();
00058 void run() throw(CDMException);
00059 protected:
00063 virtual void setGlobalAttributes();
00064 virtual void setData(const boost::shared_ptr<Data>& data);
00070 virtual void setProjection(const std::string& varName) throw(CDMException) = 0;
00071 virtual void setParameter(const std::string& varName, const FimexTime& fTime, double levelValue) throw(CDMException) = 0;
00072 virtual void setTime(const std::string& varName, const FimexTime& fTime);
00073 virtual void setLevel(const std::string& varName, double levelValue) = 0;
00079 virtual std::vector<double> getLevels(const std::string& varName) throw(CDMException);
00084 virtual std::vector<FimexTime> getTimes(const std::string& varName) throw(CDMException);
00090 virtual boost::shared_ptr<Data> handleTypeScaleAndMissingData(const std::string& varName, const FimexTime& fTime, double levelValue, boost::shared_ptr<Data> inData) = 0;
00091 virtual void writeGribHandleToFile();
00099 xmlNode* getNodePtr(const std::string& varName, const FimexTime& fTime, double levelValue) throw(CDMException);
00100
00101 protected:
00102 int gribVersion;
00103 const std::string configFile;
00104 const boost::shared_ptr<XMLDoc> xmlConfig;
00105 boost::shared_ptr<grib_handle> gribHandle;
00106 LoggerPtr logger;
00107 private:
00108 std::ofstream gribFile;
00109
00110 };
00111
00112 }
00113
00114 #endif