/* Copyright 2000 Charles G. Wright * This software may be distributed under the terms of the * GNU General Public License. * * $Id: GRAhourgraph.java,v 1.1 2000-06-15 10:14:56-05 chuckles Exp chuckles $ */ // Class to test out the graphing object. import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; public class GRAhourgraph extends GRAgraph implements ActionListener, Observer{ public static final String name = "Hour Graph"; private CWselect hour_selector; private GRAph gr2; private ScrollPane sp2; private int[] fieldnums; private TMYgraphMaster parent; private UnitConverter uc; /** Constructor */ public GRAhourgraph(Color[] colors, TMYgraphMaster parent){ this.parent = parent; // Create the data object, then plot some data gr2 = new GRAph(colors); gr2.gridOn = true; gr2.xAxisMode = GRAph.TIME; sp2 = new ScrollPane(ScrollPane.SCROLLBARS_NEVER); sp2.add(gr2); GridBagLayout p2layout = new GridBagLayout(); setLayout(p2layout); GridBagConstraints c1 = new GridBagConstraints(); c1.fill = GridBagConstraints.BOTH; c1.gridwidth = GridBagConstraints.REMAINDER; c1.weightx = 1.0; c1.weighty = 1.0; p2layout.setConstraints(sp2, c1); add(sp2); c1.weighty = 0.0; c1.weightx = 0.0; hour_selector = new CWselect(TMYdata.hours, "Hour", 0); hour_selector.addActionListener(this); c1.fill = GridBagConstraints.NONE; c1.gridwidth = 1; c1.weighty = 0.0; p2layout.setConstraints(hour_selector, c1); add(hour_selector); uc = new UnitConverter(UnitConverter.NOTHING); uc.addObserver(this); } /** extract 1 year's data at specified hour */ private double[][] getHourlyData(CWmonitorable obj, int hour, int fieldnum){ double data_element; int[] field_types = obj.getFieldTypes(); double[][] hourly_data = new double[2][365]; int i = 0; int base_hour_in_year = 0; System.out.println("Retrieving hourly data for " + obj.getName() + " , field number " + fieldnum); for (int month = 0; month < 12; month++) { for (int day = 0; day < TMYdata.daysInMonth(month); day++){ hourly_data[0][i] = (double)(base_hour_in_year + hour); data_element = obj.getValue(month, day, hour, fieldnum); hourly_data[1][i] = UnitConverter.getConvertedValue(data_element, field_types[fieldnum]); i++; base_hour_in_year += 24; //System.out.println(hourly_data[0][i]+ " " + hourly_data[1][i]); } } return(hourly_data); } /** Implements the Observer interface. */ public void update(Observable obs, Object parent){ fieldnums = this.parent.getFieldList().getSelectedIndexes(); updateHourGraph(); } public void updateHourGraph(){ if (fieldnums.length > 0){ int index; CWmonitorable obj; //gr2.ymax = tmystuff.getHighValue(fieldnums); //gr2.ymin = tmystuff.getLowValue(fieldnums); //System.out.println("updateHourGraph() 5"); double plotdat[][][] = new double[fieldnums.length][][]; //System.out.println("updateHourGraph() 6"); for (int i = 0; i < fieldnums.length; i++){ index = CWmonitoredElements.indexAt(fieldnums[i]); obj = CWmonitoredElements.objectAt(fieldnums[i]); plotdat[i] = getHourlyData(obj, hour_selector.getSelectedIndex(), index); } //System.out.println("updateHourGraph() 7"); gr2.autoscale(plotdat); gr2.graphit(plotdat); gr2.repaint(); } } public void actionPerformed(ActionEvent ae){ CWselect sel = (CWselect)ae.getSource(); if (sel == hour_selector){ updateHourGraph(); } } }