001package ca.bc.webarts.javaFX;
002
003import javafx.application.Application;
004import javafx.scene.Group;
005import javafx.scene.Scene;
006import javafx.stage.Stage;
007import java.util.ArrayList;
008import java.util.Arrays;
009import java.util.List;
010
011import javax.xml.parsers.DocumentBuilderFactory;
012import javax.xml.parsers.DocumentBuilder;
013import org.w3c.dom.Document;
014import org.w3c.dom.NodeList;
015// import org.w3c.dom.Node;
016import org.w3c.dom.Element;
017import java.io.File;
018
019import javafx.collections.FXCollections;
020import javafx.event.ActionEvent;
021import javafx.event.EventHandler;
022import javafx.geometry.Side;
023import javafx.scene.Node;
024import javafx.scene.chart.BarChart;
025import javafx.scene.chart.CategoryAxis;
026import javafx.scene.chart.NumberAxis;
027import javafx.scene.chart.XYChart;
028
029/**
030 *
031 * An advanced bar chart with a variety of controls.
032 *
033 * @see javafx.scene.chart.BarChart
034 * @see javafx.scene.chart.Chart
035 * @see javafx.scene.chart.NumberAxis
036 * @see javafx.scene.chart.XYChart
037 */
038public class MyFXBarChart extends Application
039{
040
041    private void init(Stage primaryStage)
042    {
043        Group root = new Group();
044        primaryStage.setScene(new Scene(root));
045
046        root.getChildren().add(createExerciseChart());
047    }
048
049
050    private static String getTagValue(String sTag, Element eElement)
051    {
052      NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
053      org.w3c.dom.Node nValue = (org.w3c.dom.Node) nlList.item(0);
054      return nValue.getNodeValue();
055    }
056
057
058    protected BarChart<String, Number> createExerciseChart()
059    {
060      CategoryAxis xAxis = new CategoryAxis();
061      NumberAxis yAxis = new NumberAxis();
062      String dateStr = "";
063      int calories = 0;
064      double miles = 0;
065      double km = 0;
066      String separator = java.io.File.separator;
067
068      String [] categoryNames = {"Calories"};
069      yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis,"",null));
070      BarChart<String,Number> bc = new BarChart<String,Number>(xAxis,yAxis);
071      // setup chart
072      bc.setTitle("Toms Calories Burned On Treadmill");
073      xAxis.setLabel("Date");
074      xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList(categoryNames)));
075      yAxis.setLabel("Calories");
076      // add starting data
077      XYChart.Series<String,Number> series1 = new XYChart.Series<String,Number>();
078      XYChart.Series<String,Number> series2 = new XYChart.Series<String,Number>();
079      series1.setName("Calories");
080      series2.setName("km");
081
082      for (int i = 5;i>0; i--)
083      {
084        try
085        {
086          File fXmlFile = new File(separator+"media"+separator+"TGLIVESTRNG"+separator+"LS"+separator+"USERS"+separator+"USER2"+separator+"0"+i+".wrk");
087          DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
088          DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
089          Document doc = dBuilder.parse(fXmlFile);
090          doc.getDocumentElement().normalize();
091
092          System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
093          NodeList nList = doc.getElementsByTagName("summary");
094          System.out.println("-----------------------");
095          org.w3c.dom.Node nNode = nList.item(0);
096          if (nNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE)
097          {
098            Element eElement = (Element) nNode;
099            System.out.println("Year : " + getTagValue("Year", eElement));
100            System.out.println("Month : " + getTagValue("Month", eElement));
101            System.out.println("Date : " + getTagValue("Date", eElement));
102            dateStr = getTagValue("Year", eElement)+"_"+getTagValue("Month", eElement)+"_"+getTagValue("Date", eElement);
103            System.out.println("Avgpace : " + getTagValue("Avgpace", eElement));
104            System.out.println("Calories : " + getTagValue("Calories", eElement));
105            calories = Integer.parseInt(getTagValue("Calories", eElement));
106            System.out.print("Distances : " + getTagValue("Distances", eElement)+ " miles");
107            miles = Double.parseDouble(getTagValue("Distances", eElement));
108            km = miles / 0.62;
109            System.out.println(" ("+km+" km)");
110            System.out.println("Totalelev : " + getTagValue("Totalelev", eElement));
111            System.out.println("TotalTime : " + getTagValue("TotalTime", eElement));
112          }
113          //fXmlFile.close();
114        }
115        catch (Exception e)
116        {
117          e.printStackTrace();
118        }
119
120
121        // create sample data
122        series1.getData().add(new XYChart.Data<String,Number>(dateStr, calories));
123        series2.getData().add(new XYChart.Data<String,Number>(dateStr, km));
124      }
125      bc.getData().add(series1);
126      bc.getData().add(series2);
127
128      //return createDefaultChart();
129      return bc;
130    }
131
132    protected BarChart<String, Number> createDefaultChart() {
133        final String[] years = {"2009", "2010", "2011"};
134        final CategoryAxis xAxis = new CategoryAxis();
135        final NumberAxis yAxis = new NumberAxis();
136        yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis,"$",null));
137        final BarChart<String,Number> bc = new BarChart<String,Number>(xAxis,yAxis);
138        // setup chart
139        bc.setTitle("Toms First JavaFX BarChart");
140        xAxis.setLabel("Year");
141        xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList(years)));
142        yAxis.setLabel("Price");
143        // add starting data
144        XYChart.Series<String,Number> series1 = new XYChart.Series<String,Number>();
145        series1.setName("Data Series 1");
146        XYChart.Series<String,Number> series2 = new XYChart.Series<String,Number>();
147        series2.setName("Data Series 2");
148        XYChart.Series<String,Number> series3 = new XYChart.Series<String,Number>();
149        series3.setName("Data Series 3");
150        // create sample data
151        series1.getData().add(new XYChart.Data<String,Number>(years[0], 567));
152        series1.getData().add(new XYChart.Data<String,Number>(years[1], 1292));
153        series1.getData().add(new XYChart.Data<String,Number>(years[2], 2180));
154        series2.getData().add(new XYChart.Data<String,Number>(years[0], 956));
155        series2.getData().add(new XYChart.Data<String,Number>(years[1], 1665));
156        series2.getData().add(new XYChart.Data<String,Number>(years[2], 2450));
157        series3.getData().add(new XYChart.Data<String,Number>(years[0], 800));
158        series3.getData().add(new XYChart.Data<String,Number>(years[1], 1000));
159        series3.getData().add(new XYChart.Data<String,Number>(years[2], 2800));
160        bc.getData().add(series1);
161        bc.getData().add(series2);
162        bc.getData().add(series3);
163        return bc;
164    }
165
166    @Override public void start(Stage primaryStage) throws Exception {
167        init(primaryStage);
168        primaryStage.show();
169    }
170    public static void main(String[] args) { launch(args); }
171}