Main.cc 3.45 KB
/**
 * Main.cc
 *  Created on: 18 mar. 2016
 *      Author: AKKA IS
 */

#include <iostream>

#include <boost/program_options.hpp>

#include "AMDA-Kernel_Config.hh"
#include <Application.hh>

// Parameters module include
#include "ParameterManager.hh"
#include "Parameter.hh"
#include "Process.hh"
#include "ParameterInfo.hh"
#include "ServicesServer.hh"
#include "TimeUtil.hh"

using namespace std;
namespace po = boost::program_options;
using namespace log4cxx;
using namespace log4cxx::helpers;
using namespace AMDA::Parameters;

#define MAX_YEAR 2040

/**
 * Main function
 */
int main(int argc, char *argv[]) {
	int result = AMDA_EXIT_OK;

	/// Parse command line parameters
	po::options_description desc("Allowed options");

	desc.add_options()
		("help,h", "Produce help message")
		("version,v", "Program version")
		("parameter,p", po::value< vector<string> >(), "Parameter(s) name")
	;

	po::positional_options_description p;
	p.add("parameter", -1);

	po::variables_map vm;
	po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
	po::notify(vm);

	if (vm.count("help")) {
		cout << desc << "\n";
		return result;
	}
	if (vm.count("version")) {
		cout << "Version: " << AMDA_Kernel_VERSION << "\n";
		return result;
	}

	if (!vm.count("parameter")) {
		return result;
	}

	AMDA::Common::Application lMain;

	return lMain.main(argc,argv,[&](int , char **, AMDA::helpers::Properties& lProperties) -> int {

			vector<string> lParameterList = vm["parameter"].as< vector<string> >();

			///Create ParameterManager and configuration
			ParameterManager parameterManager;
			std::string emptyStr;
			std::stringstream ss;
			char startTimeIso[24];
			char stopTimeIso[24];
			memset(startTimeIso, 0, 24*sizeof(char));
			memset(stopTimeIso, 0, 24*sizeof(char));
			double startTime = 0.;
			double stopTime = 0.;

			std::vector<std::string> gran;
			gran.push_back("-01-01T00:01:00.000");
			gran.push_back("-01-01T01:00:00.000");
			gran.push_back("-01-02T00:00:00.000");
			gran.push_back("-02-01T00:00:00.000");
			gran.push_back("-12-31T00:00:00.000");
			

			for (std::vector<std::string>::iterator itGran = gran.begin(); itGran != gran.end(); ++itGran) {
				for (int y = 1970; y < MAX_YEAR; ++y) {
					ss.str("");
					ss << std::setfill('0') << y << "-01-01T00:00:00.000";
					memcpy(startTimeIso, ss.str().c_str(), 24*sizeof(char));
					startTime = AMDA::TimeUtil::readTimeInIso(startTimeIso);
					ss.str("");
					ss << std::setfill('0') << y << (*itGran);
					memcpy(stopTimeIso, ss.str().c_str(), 24*sizeof(char));
					stopTime = AMDA::TimeUtil::readTimeInIso(stopTimeIso);
					parameterManager.addInputInterval(startTime, stopTime, 0, emptyStr, emptyStr, 0);
				}
			}

			if (!lProperties["app.param.gapthreshold"].empty())
			{
				double defaultGapThreshold = atof(lProperties["app.param.gapthreshold"].c_str());
				if (defaultGapThreshold > 0.)
					parameterManager.setDefaultGapThreshold(defaultGapThreshold);
			}

			for (auto lParamName : lParameterList) {
				try {
					///Create Parameter
					parameterManager.createParameter(lParamName);

					///Generate Output
					AMDA::Parameters::ParameterInfo* lParameterInfo =
							new AMDA::Parameters::ParameterInfo(parameterManager);
					ParamOutputSPtr lParamOutput(lParameterInfo);
					lParameterInfo->setParamName(lParamName);
					parameterManager.getParamOutputList().push_back( lParamOutput);
				} catch (...) {
				}
			}
			/// launch request
			parameterManager.execute("");

			return result;
});

}