Blame view

src/TimeTableCatalog/AsciiWriter.cc 3.6 KB
fbe3c2bb   Benjamin Renard   First commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
 * AsciiWriter.cc
 *
 *  Created on: 6 août 2013
 *      Author: CS
 */

#include <iostream>

#include "AsciiData.hh"
#include "AsciiWriter.hh"
#include <fstream>
#include "TimeTableCatalogUtil.hh"

namespace TimeTableCatalog {

const std::string AsciiWriter::FORMAT = "ASCII";

AsciiWriter::AsciiWriter(const std::string& pPath, const std::string& pName) :
		AbstractWriter(pPath, pName) {

}

AsciiWriter::~AsciiWriter() {
}

// ----------------- PUBLIC --------------------------

std::string AsciiWriter::write(const TimeTable& pTT) {
	LOG4CXX_DEBUG(logger, "Opening file " << getFile(pTT));
	std::ofstream ttfile(getFile(pTT), std::ios::out);

	// -- open file
	if (ttfile) {
		LOG4CXX_DEBUG(logger, "Writing metadata");
		writeMetaData(pTT, ttfile);
		LOG4CXX_DEBUG(logger, "Writing intervals");
		writeIntervals(pTT, ttfile);
	}
	LOG4CXX_DEBUG(logger, "End Of writing");
	// -- close file
	ttfile.close();

	return getFile(pTT);
}

/**
 * Creates an instance of this.
 */
std::unique_ptr<AbstractWriter> AsciiWriter::createInstance(
		const std::string& pPath, const std::string& pName) {
	return std::unique_ptr < AbstractWriter > (new AsciiWriter(pPath, pName));
}

/**
 * Gets the tt file expected extension, starting with .
 */
const std::string AsciiWriter::getExtension() const {
	return ".txt";
}

// ----------------- PRIVATE --------------------------

void AsciiWriter::writeMetaData(const TimeTable& pTT,
		std::ostream& pOut) {
	// -- write description
	for (auto line : pTT._description) {
		pOut << "# " << line << ";" << std::endl;
	}
	// -- write name
	pOut << "# " << AsciiData::NAME_KEYWORD << " " << pTT._name << ";" << std::endl;

	// -- write historic
	pOut << "# " << AsciiData::HISTORIC_KEYWORD << " " << pTT._history << ";" << std::endl;

	// -- write creation date
	pOut << "# " << AsciiData::CREATION_DATE_KEYWORD << " ";
	writeISOTime(pTT._creationDate, pTT._timeFormat, pOut);
	pOut << ";" << std::endl;

	// Write parameter description if defined (Catalog ONLY)
	ParameterDescriptionList pdl = pTT.getParameterDescritptions();
	int pCount=0;
	for (auto parameterDescription : pdl) {
		pOut << "# " << AsciiData::PARAMETER_KEYWORD << " " << (pCount+1) << ": ";
		pOut << AsciiData::ATTRIB_ID << ":" << parameterDescription.getId() << ", ";
		pOut << AsciiData::ATTRIB_NAME << ":" << parameterDescription.getName() << ", ";
		pOut << AsciiData::ATTRIB_SIZE << ":" << parameterDescription.getSize() << ", ";
		pOut << AsciiData::ATTRIB_TYPE << ":" << parameterDescription.getTypeAsString() << ", ";
		pOut << AsciiData::ATTRIB_UNIT << ":" << parameterDescription.getUnit() << ", ";
		pOut << AsciiData::ATTRIB_DESCRITION << ":" << parameterDescription.getDescription() << ", ";
		pOut << AsciiData::ATTRIB_UCD << ":" << parameterDescription.getUcd() << ", ";
		pOut << AsciiData::ATTRIB_UTYPE << ":" << parameterDescription.getUtype() << ";" << std::endl;
		pCount++;
	}
}

void AsciiWriter::writeIntervals(const TimeTable& pTT, std::ostream& pOut) {
	ParameterDescriptionList pdl = pTT.getParameterDescritptions();

	for (TimeInterval interval : pTT.getIntervals()) {
		writeISOTime(interval._startTime, pTT._timeFormat, pOut);
		pOut << AsciiData::SEPARATOR;
		writeISOTime(interval._stopTime, pTT._timeFormat, pOut);

		// If the TT has a parameter description list, write parameter data
		if (pdl.empty() == false) {
			for (auto parameterDescription : pdl) {
				std::vector<std::string> dataValues = interval.getParameterData (parameterDescription.getId());

				for (auto dataValue : dataValues) {
					pOut << AsciiData::SEPARATOR << dataValue;
				}
			}
		}

		// skip to next line
		pOut << std::endl;
	}
}

} /* namespace TimeTableCatalog */