View Javadoc
1   package nl.tudelft.simulation.dsol.swing.charts.xy;
2   
3   import java.util.ArrayList;
4   import java.util.Arrays;
5   import java.util.List;
6   
7   import org.jfree.data.DomainOrder;
8   import org.jfree.data.general.AbstractSeriesDataset;
9   import org.jfree.data.general.DatasetChangeEvent;
10  import org.jfree.data.general.DatasetChangeListener;
11  
12  import nl.tudelft.simulation.language.filters.FilterInterface;
13  
14  /**
15   * The xyDataset specifies the xyDataset in DSOL.
16   * <p>
17   * Copyright (c) 2002-2023 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See
18   * for project information <a href="https://simulation.tudelft.nl/" target="_blank"> https://simulation.tudelft.nl</a>. The DSOL
19   * project is distributed under a three-clause BSD-style license, which can be found at
20   * <a href="https://https://simulation.tudelft.nl/dsol/docs/latest/license.html" target="_blank">
21   * https://https://simulation.tudelft.nl/dsol/docs/latest/license.html</a>.
22   * </p>
23   * @author <a href="https://www.linkedin.com/in/peterhmjacobs">Peter Jacobs </a>
24   * @since 1.5
25   */
26  public class XYDataset extends AbstractSeriesDataset implements org.jfree.data.xy.XYDataset, DatasetChangeListener
27  {
28  
29      /** default UId. */
30      private static final long serialVersionUID = 1L;
31  
32      /** series contains the series of the set. */
33      private XYSeries[] series = new XYSeries[0];
34  
35      /**
36       * constructs a new XYDataset.
37       */
38      public XYDataset()
39      {
40          super();
41          this.fireDatasetChanged();
42      }
43  
44      /** {@inheritDoc} */
45      @Override
46      public void datasetChanged(final DatasetChangeEvent arg0)
47      {
48          if (arg0 != null)
49          {
50              this.fireDatasetChanged();
51          }
52      }
53  
54      /**
55       * adds a dataset to the series
56       * @param dataset XYSeries; the set
57       */
58      public synchronized void addSeries(final XYSeries dataset)
59      {
60          dataset.addChangeListener(this);
61          List<XYSeries> list = new ArrayList<XYSeries>(Arrays.asList(this.series));
62          list.add(dataset);
63          this.series = list.toArray(new XYSeries[list.size()]);
64          this.fireDatasetChanged();
65      }
66  
67      /** {@inheritDoc} */
68      @Override
69      public DomainOrder getDomainOrder()
70      {
71          return DomainOrder.ASCENDING;
72      }
73  
74      /** {@inheritDoc} */
75      @Override
76      public int getItemCount(final int serie)
77      {
78          return this.series[serie].getItemCount();
79      }
80  
81      /** {@inheritDoc} */
82      @Override
83      public double getXValue(final int serie, final int item)
84      {
85          return this.series[serie].getXValue(item);
86      }
87  
88      /** {@inheritDoc} */
89      @Override
90      public double getYValue(final int serie, final int item)
91      {
92          return this.series[serie].getYValue(item);
93      }
94  
95      /** {@inheritDoc} */
96      @Override
97      public int getSeriesCount()
98      {
99          return this.series.length;
100     }
101 
102     /**
103      * @param serie int; the series to retrieve the name for
104      * @return name the name of the series
105      */
106     public String getSeriesName(final int serie)
107     {
108         return this.series[serie].getSeriesName();
109     }
110 
111     /** {@inheritDoc} */
112     @Override
113     public Number getX(final int serie, final int item)
114     {
115         return Double.valueOf(this.series[serie].getXValue(item));
116     }
117 
118     /** {@inheritDoc} */
119     @Override
120     public Number getY(final int serie, final int item)
121     {
122         return Double.valueOf(this.series[serie].getYValue(item));
123     }
124 
125     /**
126      * applies a filter on the chart
127      * @param filter FilterInterface; the filter to apply
128      */
129     public void setFilter(final FilterInterface filter)
130     {
131         for (int i = 0; i < this.series.length; i++)
132         {
133             this.series[i].setFilter(filter);
134         }
135     }
136 
137     /** {@inheritDoc} */
138     @Override
139     public Comparable<?> getSeriesKey(final int seriesNumber)
140     {
141         return this.series[seriesNumber].getSeriesName();
142     }
143 
144 }