/*
 *                    BioJava development code
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  If you do not have a copy,
 * see:
 *
 *      http://www.gnu.org/copyleft/lesser.html
 *
 * Copyright for this code is held jointly by the individual
 * authors.  These should be listed in @author doc comments.
 *
 * For more information on the BioJava project and its aims,
 * or to join the biojava-l mailing list, visit the home page
 * at:
 *
 *      http://www.biojava.org/
 *
 */
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.biojava.nbio.survival.kaplanmeier.figure;

import java.awt.*;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Properties;

/**
 *
 * @author Scooter Willis <willishf at gmail dot com>
 */
public class KMFigureInfo {

    /** 
     *
     */
    public int titleHeight = 40;
    /**
     *
     */
    public int padding = 20;
    /**
     *
     */
    public Integer width = 600;
    /**
     *
     */
    public Integer height = 400;
    /**
     *
     */
    public double timeScale = 1.0; //multiplier to change time from days to months etc
    /**
     *
     */
    public double yaxisPercentIncrement = .2;
    /**
     *
     */
    public double xaxisPercentIncrement = .25;
    /**
     *
     */
    public double legendUpperPercentX = .95;
    /**
     *
     */
    public double legendUpperPercentY = .95;
    /**
     *
     */
    public double figureLineInfoLowerPercentX = .01;
    /**
     *
     */
    public double figureLineInfoLowerPercentY = .01;
    /**
     *
     */
    public BasicStroke axisStroke = new BasicStroke(2);
    /**
     *
     */
    public BasicStroke kmStroke = new BasicStroke(3);
    /**
     *
     */
    public Color[] legendColor = {Color.RED, Color.BLUE, Color.GREEN, Color.CYAN, Color.ORANGE, Color.YELLOW, Color.MAGENTA, Color.PINK};
    public ArrayList<Double> xAxisLabels = new ArrayList<Double>();//new ArrayList<Double>(Arrays.asList(0.0, 5.0, 10.0, 15.0, 20.0));
    public String xAxisLegend = "";
    public String yAxisLegend = "";
    public Color getColor(int index) {
        return legendColor[index];
    }

    /**
     *
     * @param propertyFileName
     * @throws Exception
     */
    public void init(String propertyFileName) throws Exception {
        Properties properties = new Properties();
        properties.load(new FileInputStream(propertyFileName));

        if (properties.containsKey("legendUpperPercentX")) {
            legendUpperPercentX = Double.parseDouble(properties.getProperty("legendUpperPercentX"));
        }

        if (properties.containsKey("legendUpperPercentY")) {
            legendUpperPercentY = Double.parseDouble(properties.getProperty("legendUpperPercentY"));
        }

        if (properties.containsKey("xAxisLabels")) {
            String values = properties.getProperty("xAxisLabels").trim();
            if (values.startsWith("[") || values.startsWith("(") || values.startsWith("{")) {
                values = values.substring(1, values.length()).trim();
            }
            if (values.endsWith("]") || values.endsWith(")") || values.endsWith("}")) {
                values = values.substring(0, values.length() - 1).trim();
            }
            xAxisLabels.clear();
            String[] data = values.split(",");
            for (String d : data) {
                try {
                    Double v = Double.parseDouble(d.trim());
                    xAxisLabels.add(v);
                } catch (Exception e) {
                }
            }
        }

        if (properties.containsKey("xAxisLegend")) {
            xAxisLegend = properties.getProperty("xAxisLegend");
        }
        
                if (properties.containsKey("yAxisLegend")) {
            yAxisLegend = properties.getProperty("yAxisLegend");
        }
    }
}
