#ifndef NMDATAFORECAST_H #define NMDATAFORECAST_H #include #include "nmData_global.h" #include "nmDataBase.h" #include "nmDataAttribute.h" struct NM_DATA_EXPORT PressureRow { nmDataAttribute duration; nmDataAttribute pressure; PressureRow(); }; struct NM_DATA_EXPORT FlowRow { nmDataAttribute duration; nmDataAttribute q0; FlowRow(); }; struct NM_DATA_EXPORT ConstantPressure { nmDataAttribute initialPressure; nmDataAttribute abandonmentRate; bool isAbandonmentRate; nmDataAttribute maximumRate; bool isMaximumRate; nmDataAttribute forecastDuration; nmDataAttribute producingPressure; ConstantPressure(); // Getter and Setter for initialPressure nmDataAttribute& getInitialPressure(); void setInitialPressure(const nmDataAttribute& value); // Getter and Setter for abandonmentRate nmDataAttribute& getAbandonmentRate(); void setAbandonmentRate(const nmDataAttribute& value); // Getter and Setter for isAbandonmentRate bool getIsAbandonmentRate() const; void setIsAbandonmentRate(bool value); // Getter and Setter for maximumRate nmDataAttribute& getMaximumRate(); void setMaximumRate(const nmDataAttribute& value); // Getter and Setter for isMaximumRate bool getIsMaximumRate() const; void setIsMaximumRate(bool value); // Getter and Setter for forecastDuration nmDataAttribute& getForecastDuration(); void setForecastDuration(const nmDataAttribute& value); // Getter and Setter for producingPressure nmDataAttribute& getProducingPressure(); void setProducingPressure(const nmDataAttribute& value); }; struct NM_DATA_EXPORT DecliningPressure { nmDataAttribute initialPressure; nmDataAttribute abandonmentRate; bool isAbandonmentRate; nmDataAttribute maximumRate; bool isMaximumRate; nmDataAttribute forecastDuration; nmDataAttribute producingPressureStart; nmDataAttribute producingPressureEnd; nmDataAttribute pressureChangePeriod; DecliningPressure(); // Getter and Setter for initialPressure nmDataAttribute& getInitialPressure(); void setInitialPressure(const nmDataAttribute& value); // Getter and Setter for abandonmentRate nmDataAttribute& getAbandonmentRate(); void setAbandonmentRate(const nmDataAttribute& value); // Getter and Setter for isAbandonmentRate bool getIsAbandonmentRate() const; void setIsAbandonmentRate(bool value); // Getter and Setter for maximumRate nmDataAttribute& getMaximumRate(); void setMaximumRate(const nmDataAttribute& value); // Getter and Setter for isMaximumRate bool getIsMaximumRate() const; void setIsMaximumRate(bool value); // Getter and Setter for forecastDuration nmDataAttribute& getForecastDuration(); void setForecastDuration(const nmDataAttribute& value); // Getter and Setter for producingPressureStart nmDataAttribute& getProducingPressureStart(); void setProducingPressureStart(const nmDataAttribute& value); // Getter and Setter for producingPressureEnd nmDataAttribute& getProducingPressureEnd(); void setProducingPressureEnd(const nmDataAttribute& value); // Getter and Setter for pressureChangePeriod nmDataAttribute& getPressureChangePeriod(); void setPressureChangePeriod(const nmDataAttribute& value); }; struct NM_DATA_EXPORT MultiplePressures { nmDataAttribute initialPressure; nmDataAttribute abandonmentRate; bool isAbandonmentRate; nmDataAttribute maximumRate; bool isMaximumRate; MultiplePressures(); QVector pressureTable; // Getter and Setter for initialPressure nmDataAttribute& getInitialPressure(); void setInitialPressure(const nmDataAttribute& value); // Getter and Setter for abandonmentRate nmDataAttribute& getAbandonmentRate(); void setAbandonmentRate(const nmDataAttribute& value); // Getter and Setter for isAbandonmentRate bool getIsAbandonmentRate() const; void setIsAbandonmentRate(bool value); // Getter and Setter for maximumRate nmDataAttribute& getMaximumRate(); void setMaximumRate(const nmDataAttribute& value); // Getter and Setter for isMaximumRate bool getIsMaximumRate() const; void setIsMaximumRate(bool value); QVector& getPressureTable(); void setPressureTable(const QVector& table); }; struct NM_DATA_EXPORT MultipleRates { nmDataAttribute initialPressure; MultipleRates(); QVector flowTable; // Getter and Setter for initialPressure nmDataAttribute& getInitialPressure(); void setInitialPressure(const nmDataAttribute& value); QVector& getFlowTable(); void setFlowTable(const QVector& table); }; class NM_DATA_EXPORT nmDataForecast : public nmDataBase { public: nmDataForecast(); ~nmDataForecast(); nmDataForecast(const nmDataForecast& other); nmDataForecast& operator=(const nmDataForecast& other); enum ForecastOption { ConstantPressureOption = 0, DecliningPressureOption = 1, MultiplePressuresOption = 2, MultipleRatesOption = 3, }; void setForecastOption(ForecastOption option); ForecastOption getForecastOption() const; void setConstantPressureData(const ConstantPressure& cp); ConstantPressure& getConstantPressureData(); void setDecliningPressureData(const DecliningPressure& dp); DecliningPressure& getDecliningPressureData(); void setMultiplePressuresData(const MultiplePressures& mp); MultiplePressures& getMultiplePressuresData(); void setMultipleRatesData(const MultipleRates& mr); MultipleRates& getMultipleRatesData(); virtual rapidjson::Value ToJsonValue(rapidjson::Document::AllocatorType& allocator) const override; virtual void FromJsonValue(const rapidjson::Value& jsonValue) override; private: ForecastOption currentOption; ConstantPressure constantPressureData; DecliningPressure decliningPressureData; MultiplePressures multiplePressuresData; MultipleRates multipleRatesData; }; #endif // NMDATAFORECAST_H