emlab.trend.HourlyCSVTimeSeries.java Source code

Java tutorial

Introduction

Here is the source code for emlab.trend.HourlyCSVTimeSeries.java

Source

/*******************************************************************************
 * Copyright 2012 the original author or authors.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/
package emlab.trend;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.neo4j.annotation.NodeEntity;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author J.C. Richstein
 * 
 */
@NodeEntity
public class HourlyCSVTimeSeries implements HourlyTimeSeries {

    Logger logger = LoggerFactory.getLogger(CSVDataTrend.class);

    private String filename;

    private double[] hourlyArray;

    @Transactional
    private void readData() {

        this.persist();
        logger.warn("Trying to read CSV file: " + filename);

        String data = new String();

        // Save the data in a long String
        try {

            InputStreamReader inputStreamReader = new InputStreamReader(
                    this.getClass().getResourceAsStream(filename));
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String line;

            while ((line = bufferedReader.readLine()) != null) {
                data = data.concat(line + ",");
            }
            bufferedReader.close();

            String[] vals = data.split(",");
            setHourlyArray(parseString(vals), 0);

        } catch (Exception e) {
            logger.error("Couldn't read CSV file: " + filename);
            e.printStackTrace();
        }

    }

    /**
     * Parameter time specifies year of the hourly array. Currently not
     * implemented to make a difference.
     * 
     * @param time
     * @return
     */
    public double[] getHourlyArray(long time) {
        if (hourlyArray != null)
            try {
                return hourlyArray;
            } catch (Exception e) {
                logger.error("CSV File has wrong length (!= 8760 hours");
                e.printStackTrace();
            }
        else {
            readData();
            return hourlyArray;
        }
        return null;

    }

    public void setHourlyArray(double[] hourlyArray, long time) {
        this.hourlyArray = hourlyArray;
    }

    private double[] parseString(String[] vals) throws Exception {

        if (vals.length == 8760) {
            double[] doubleArrayData = new double[vals.length];
            for (int i = 0; i <= vals.length - 1; i++) {
                doubleArrayData[i] = Double.parseDouble(vals[i]);
            }
            return doubleArrayData;
        } else {
            throw new Exception();
        }
    }

    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

}