View Javadoc

1   /*
2    *  File: SwingTimeBarExample.java 
3    *  Copyright (c) 2004-2007  Peter Kliem (Peter.Kliem@jaret.de)
4    *  A commercial license is available, see http://www.jaret.de.
5    *
6    *  This program is free software; you can redistribute it and/or modify
7    *  it under the terms of the GNU General Public License as published by
8    *  the Free Software Foundation; either version 2 of the License, or
9    *  (at your option) any later version.
10   *
11   *  This program is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   *  GNU General Public License for more details.
15   *
16   *  You should have received a copy of the GNU General Public License
17   *  along with this program; if not, write to the Free Software
18   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19   */
20  package de.jaret.examples.timebars.simple.swing;
21  
22  import java.awt.BorderLayout;
23  import java.util.ArrayList;
24  import java.util.Iterator;
25  import java.util.List;
26  
27  import javax.swing.JFrame;
28  
29  import de.jaret.util.date.Interval;
30  import de.jaret.util.date.IntervalImpl;
31  import de.jaret.util.date.JaretDate;
32  import de.jaret.util.ui.timebars.model.DefaultRowHeader;
33  import de.jaret.util.ui.timebars.model.DefaultTimeBarModel;
34  import de.jaret.util.ui.timebars.model.DefaultTimeBarRowModel;
35  import de.jaret.util.ui.timebars.model.TimeBarModel;
36  import de.jaret.util.ui.timebars.model.TimeBarRow;
37  import de.jaret.util.ui.timebars.swing.TimeBarViewer;
38  
39  /***
40   * Swing: Very simple test: timebar viewer with lots of intervals and a second
41   * thread modifying the intervals.
42   * 
43   * @author Peter Kliem
44   * @version $Id: SwingTimeBarExample.java 425 2007-05-13 13:08:03Z olk $
45   */
46  public class SwingTimeBarExample {
47      public static final List _headerList = new ArrayList();
48  
49      public static void main(String[] args) {
50          JFrame f = new JFrame(SwingTimeBarExample.class.getName());
51          f.setSize(300, 330);
52          f.getContentPane().setLayout(new BorderLayout());
53          f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
54  
55          TimeBarModel model = createRandomModel(10, 120, 50);
56          TimeBarViewer tbv = new TimeBarViewer(model);
57  
58          f.getContentPane().add(tbv, BorderLayout.CENTER);
59  
60          f.setVisible(true);
61  
62          // model will be changed by the main thread
63          startChanging(model);
64  
65      }
66  
67      /***
68       * @param model
69       */
70      private static void startChanging(TimeBarModel model) {
71          long delay = 800;
72          for (int r = 0; r < model.getRowCount(); r++) {
73              TimeBarRow row = model.getRow(r);
74              double sum = getIntervalSum(row);
75              DefaultRowHeader header = (DefaultRowHeader) _headerList.get(r);
76              header.setLabel("R" + r + "(" + sum + ")");
77              System.out.println("Changed header " + r);
78              try {
79                  Thread.sleep(delay);
80              } catch (InterruptedException e) {
81                  e.printStackTrace();
82              }
83          }
84          for (int r = 0; r < model.getRowCount(); r++) {
85              TimeBarRow row = model.getRow(r);
86              Iterator it = row.getIntervals().iterator();
87              while (it.hasNext()) {
88                  Interval interval = (Interval) it.next();
89                  double minutes = interval.getEnd().diffMinutes(interval.getBegin());
90                  JaretDate date = interval.getEnd().copy();
91                  date.backMinutes(minutes / 4);
92                  interval.setEnd(date);
93                  double sum = getIntervalSum(row);
94                  DefaultRowHeader header = (DefaultRowHeader) _headerList.get(r);
95                  header.setLabel("R" + r + "(" + sum + ")");
96                  System.out.println("Changed interval " + interval);
97                  try {
98                      Thread.sleep(delay / 2);
99                  } catch (InterruptedException e) {
100                     e.printStackTrace();
101                 }
102             }
103         }
104 
105     }
106 
107     private static double getIntervalSum(TimeBarRow row) {
108         double result = 0;
109         Iterator it = row.getIntervals().iterator();
110         while (it.hasNext()) {
111             Interval interval = (Interval) it.next();
112             result += interval.getEnd().diffMinutes(interval.getBegin());
113         }
114 
115         return result;
116     }
117 
118     public static TimeBarModel createRandomModel(int rows, int averageLengthInMinutes, int countPerRow) {
119         DefaultTimeBarModel model = new DefaultTimeBarModel();
120 
121         for (int row = 0; row < rows; row++) {
122             DefaultRowHeader header = new DefaultRowHeader("r" + row);
123             _headerList.add(header);
124             DefaultTimeBarRowModel tbr = new DefaultTimeBarRowModel(header);
125             JaretDate date = new JaretDate();
126             for (int i = 0; i < countPerRow; i++) {
127                 IntervalImpl interval = new IntervalImpl();
128                 int length = averageLengthInMinutes / 2 + (int) (Math.random() * (double) averageLengthInMinutes);
129                 interval.setBegin(date.copy());
130                 date.advanceMinutes(length);
131                 interval.setEnd(date.copy());
132 
133                 tbr.addInterval(interval);
134 
135                 int pause = (int) (Math.random() * (double) averageLengthInMinutes / 5);
136                 date.advanceMinutes(pause);
137             }
138             model.addRow(tbr);
139         }
140 
141         System.out.println("Created " + (rows * countPerRow) + " Intervals");
142 
143         return model;
144     }
145 }