EMlab-generation Documentation  1.0
Documentation of the EMLab-Generation model.
TimeSeriesCSVReader.java
1 
4 package emlab.gen.trend;
5 
6 import java.io.BufferedReader;
7 import java.io.InputStreamReader;
8 
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11 import org.springframework.data.neo4j.annotation.NodeEntity;
12 import org.springframework.transaction.annotation.Transactional;
13 
25 @NodeEntity
26 public class TimeSeriesCSVReader extends TimeSeriesImpl {
27 
28  Logger logger = LoggerFactory.getLogger(TimeSeriesCSVReader.class);
29 
30  private String filename;
31 
32  private String delimiter;
33 
34  private String variableName;
35 
36  private void readSingleColumn() {
37 
38  logger.warn("Trying to read single column CSV file: " + filename);
39 
40  String data = new String();
41 
42  // Save the data in a long String
43  try {
44 
45  InputStreamReader inputStreamReader = new InputStreamReader(this.getClass().getResourceAsStream(filename));
46  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
47 
48  String line;
49  int lineCounter = 0;
50  while ((line = bufferedReader.readLine()) != null) {
51  data = data.concat(line + ",");
52  lineCounter++;
53  }
54  bufferedReader.close();
55  double[] timeSeries = new double[lineCounter];
56  int i = 0;
57  for (String s : data.split("[,]")) {
58  timeSeries[i] = Double.parseDouble(s);
59  i++;
60  }
61  setTimeSeries(timeSeries);
62 
63  } catch (Exception e) {
64  logger.error("Couldn't read CSV file: " + filename);
65  e.printStackTrace();
66  }
67  this.persist();
68  }
69 
70  @Transactional
71  private void readVariableFromCSV() {
72  logger.warn("Trying to read variable " + variableName + " from CSV file: " + filename + " with delimiter "
73  + delimiter);
74 
75  // Save the data in a long String
76  try {
77 
78  InputStreamReader inputStreamReader = new InputStreamReader(this.getClass().getResourceAsStream(filename));
79  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
80 
81  String line;
82  String[] lineContentSplit = null;
83  while ((line = bufferedReader.readLine()) != null) {
84  if (line.startsWith(variableName)) {
85  lineContentSplit = line.split(delimiter);
86  break;
87  }
88  }
89  bufferedReader.close();
90  double[] timeSeries = new double[lineContentSplit.length - 1];
91  int i = 0;
92  for (String s : lineContentSplit) {
93  if (i > 0)
94  timeSeries[i - 1] = Double.parseDouble(s);
95  i++;
96  }
97  setTimeSeries(timeSeries);
98  this.persist();
99 
100  } catch (Exception e) {
101  logger.error("Couldn't read CSV file: " + filename);
102  e.printStackTrace();
103  }
104 
105  }
106 
107  @Override
108  public double getValue(long time) {
109  if (getTimeSeries() == null)
110  if (variableName != null)
111  readVariableFromCSV();
112  else
113  readSingleColumn();
114  return super.getValue(time);
115  }
116 
117  public String getFilename() {
118  return filename;
119  }
120 
121  public void setFilename(String filename) {
122  this.filename = filename;
123  }
124 
125  public String getDelimiter() {
126  return delimiter;
127  }
128 
129  public void setDelimiter(String delimiter) {
130  this.delimiter = delimiter;
131  }
132 
133  public String getVariableName() {
134  return variableName;
135  }
136 
137  public void setVariableName(String variable) {
138  this.variableName = variable;
139  }
140 
141 }