Fix out of memory crash with TimeUnit.
.. | .. |
---|
10 | 10 | import javax.swing.*; |
---|
11 | 11 | import java.util.*; |
---|
12 | 12 | |
---|
13 | | -public class DateFieldAction extends TimeflowAction { |
---|
| 13 | +public class DateFieldAction extends TimeflowAction |
---|
| 14 | +{ |
---|
| 15 | + public DateFieldAction(TimeflowApp app) |
---|
| 16 | + { |
---|
| 17 | + super(app, "Set Date Fields...", null, "Set date fields corresponding to start, end."); |
---|
| 18 | + } |
---|
14 | 19 | |
---|
15 | | - public DateFieldAction(TimeflowApp app) |
---|
16 | | - { |
---|
17 | | - super(app, "Set Date Fields...", null, "Set date fields corresponding to start, end."); |
---|
18 | | - } |
---|
19 | | - |
---|
20 | | - @Override |
---|
21 | | - public void actionPerformed(ActionEvent e) { |
---|
22 | | - DateFieldPanel.popWindow(app.model); |
---|
23 | | - } |
---|
| 20 | + @Override |
---|
| 21 | + public void actionPerformed(ActionEvent e) |
---|
| 22 | + { |
---|
| 23 | + DateFieldPanel.popWindow(app.model); |
---|
| 24 | + } |
---|
24 | 25 | } |
---|
.. | .. |
---|
6 | 6 | import java.net.URL; |
---|
7 | 7 | import java.util.*; |
---|
8 | 8 | |
---|
9 | | -public class BasicAct implements Act { |
---|
10 | | - |
---|
11 | | - private HashMap data=new HashMap(); |
---|
12 | | - private ActDB db; |
---|
13 | | - |
---|
14 | | - public BasicAct(ActDB db) |
---|
15 | | - { |
---|
16 | | - this.db=db; |
---|
17 | | - } |
---|
18 | | - |
---|
| 9 | +public class BasicAct implements Act |
---|
| 10 | +{ |
---|
19 | 11 | |
---|
20 | | - @Override |
---|
21 | | - public String getString(Field field) { |
---|
22 | | - return (String)data.get(field.getName()); |
---|
23 | | - } |
---|
24 | | - |
---|
25 | | - public void setText(Field field, String text) |
---|
26 | | - { |
---|
27 | | - data.put(field.getName(), text); |
---|
28 | | - } |
---|
| 12 | + private HashMap data = new HashMap(); |
---|
| 13 | + private ActDB db; |
---|
29 | 14 | |
---|
30 | | - @Override |
---|
31 | | - public String[] getTextList(Field field) { |
---|
32 | | - return (String[])data.get(field.getName()); |
---|
33 | | - } |
---|
34 | | - |
---|
35 | | - public void setTextList(Field field, String[] list){ |
---|
36 | | - data.put(field.getName(), list); |
---|
37 | | - } |
---|
| 15 | + public BasicAct(ActDB db) |
---|
| 16 | + { |
---|
| 17 | + this.db = db; |
---|
| 18 | + } |
---|
38 | 19 | |
---|
39 | | - @Override |
---|
40 | | - public double getValue(Field field) { |
---|
41 | | - return (Double)data.get(field.getName()); |
---|
42 | | - } |
---|
43 | | - |
---|
44 | | - public void setValue(Field field, double value) |
---|
45 | | - { |
---|
46 | | - data.put(field.getName(), value); |
---|
47 | | - } |
---|
| 20 | + @Override |
---|
| 21 | + public String getString(Field field) |
---|
| 22 | + { |
---|
| 23 | + Object s = data.get(field.getName()); |
---|
| 24 | + if (s == null) |
---|
| 25 | + return null; |
---|
| 26 | + return s.toString(); |
---|
| 27 | + } |
---|
48 | 28 | |
---|
49 | | - @Override |
---|
50 | | - public Object get(Field field) { |
---|
51 | | - return data.get(field.getName()); |
---|
52 | | - } |
---|
| 29 | + public void setText(Field field, String text) |
---|
| 30 | + { |
---|
| 31 | + data.put(field.getName(), text); |
---|
| 32 | + } |
---|
53 | 33 | |
---|
54 | | - @Override |
---|
55 | | - public ActDB getDB() { |
---|
56 | | - return db; |
---|
57 | | - } |
---|
| 34 | + @Override |
---|
| 35 | + public String[] getTextList(Field field) |
---|
| 36 | + { |
---|
| 37 | + return (String[]) data.get(field.getName()); |
---|
| 38 | + } |
---|
58 | 39 | |
---|
59 | | - @Override |
---|
60 | | - public void set(Field field, Object value) { |
---|
61 | | - data.put(field.getName(), value); |
---|
62 | | - } |
---|
| 40 | + public void setTextList(Field field, String[] list) |
---|
| 41 | + { |
---|
| 42 | + data.put(field.getName(), list); |
---|
| 43 | + } |
---|
63 | 44 | |
---|
| 45 | + @Override |
---|
| 46 | + public double getValue(Field field) |
---|
| 47 | + { |
---|
| 48 | + return (Double) data.get(field.getName()); |
---|
| 49 | + } |
---|
64 | 50 | |
---|
65 | | - @Override |
---|
66 | | - public RoughTime getTime(Field field) { |
---|
67 | | - return (RoughTime)data.get(field.getName()); |
---|
68 | | - } |
---|
| 51 | + public void setValue(Field field, double value) |
---|
| 52 | + { |
---|
| 53 | + data.put(field.getName(), value); |
---|
| 54 | + } |
---|
69 | 55 | |
---|
| 56 | + @Override |
---|
| 57 | + public Object get(Field field) |
---|
| 58 | + { |
---|
| 59 | + return data.get(field.getName()); |
---|
| 60 | + } |
---|
70 | 61 | |
---|
71 | | - @Override |
---|
72 | | - public void setTime(Field field, RoughTime time) { |
---|
73 | | - data.put(field.getName(), time); |
---|
74 | | - |
---|
75 | | - } |
---|
| 62 | + @Override |
---|
| 63 | + public ActDB getDB() |
---|
| 64 | + { |
---|
| 65 | + return db; |
---|
| 66 | + } |
---|
76 | 67 | |
---|
| 68 | + @Override |
---|
| 69 | + public void set(Field field, Object value) |
---|
| 70 | + { |
---|
| 71 | + data.put(field.getName(), value); |
---|
| 72 | + } |
---|
77 | 73 | |
---|
78 | | - @Override |
---|
79 | | - public URL getURL(Field field) { |
---|
80 | | - return (URL)data.get(field.getName()); |
---|
81 | | - } |
---|
| 74 | + @Override |
---|
| 75 | + public RoughTime getTime(Field field) |
---|
| 76 | + { |
---|
| 77 | + return (RoughTime) data.get(field.getName()); |
---|
| 78 | + } |
---|
82 | 79 | |
---|
| 80 | + @Override |
---|
| 81 | + public void setTime(Field field, RoughTime time) |
---|
| 82 | + { |
---|
| 83 | + data.put(field.getName(), time); |
---|
83 | 84 | |
---|
84 | | - @Override |
---|
85 | | - public void setURL(Field field, URL url) { |
---|
86 | | - data.put(field.getName(), url); |
---|
87 | | - } |
---|
| 85 | + } |
---|
88 | 86 | |
---|
| 87 | + @Override |
---|
| 88 | + public URL getURL(Field field) |
---|
| 89 | + { |
---|
| 90 | + return (URL) data.get(field.getName()); |
---|
| 91 | + } |
---|
| 92 | + |
---|
| 93 | + @Override |
---|
| 94 | + public void setURL(Field field, URL url) |
---|
| 95 | + { |
---|
| 96 | + data.put(field.getName(), url); |
---|
| 97 | + } |
---|
89 | 98 | } |
---|
.. | .. |
---|
106 | 106 | public String format() |
---|
107 | 107 | { |
---|
108 | 108 | //return units.formatFull(time); |
---|
109 | | - return TimeUnit.SECOND.formatFull(time); |
---|
| 109 | + String format = TimeUnit.REALTIME.formatFull(time); |
---|
| 110 | + |
---|
| 111 | + if (format.equals("00:00:00:00")) |
---|
| 112 | + { |
---|
| 113 | + format = TimeUnit.DAY.formatFull(time); |
---|
| 114 | + } |
---|
| 115 | + |
---|
| 116 | + return format; |
---|
110 | 117 | } |
---|
111 | 118 | |
---|
112 | 119 | public static int compare(RoughTime t1, RoughTime t2) |
---|
.. | .. |
---|
13 | 13 | public static final TimeUnit HOUR = new TimeUnit("Hours", Calendar.HOUR_OF_DAY, 60 * 60 * 1000L, "HH:mm", "MMM d yyyy HH:mm"); |
---|
14 | 14 | public static final TimeUnit MINUTE = new TimeUnit("Minutes", Calendar.MINUTE, 60 * 1000L, ":mm", "MMM d yyyy HH:mm"); |
---|
15 | 15 | public static final TimeUnit SECOND = new TimeUnit("Seconds", Calendar.SECOND, 1000L, ":ss", "MMM d yyyy HH:mm:ss"); |
---|
16 | | - public static final TimeUnit REALTIME = new TimeUnit("Realtime", Calendar.MILLISECOND, 8L, ":SSS", "MMM d yyyy HH:mm:ss:SSS"); |
---|
| 16 | + public static final TimeUnit REALTIME = new TimeUnit("Realtime", Calendar.MILLISECOND, 1L, ":SS", "HH:mm:ss.SS"); |
---|
17 | 17 | |
---|
18 | 18 | public static final TimeUnit DECADE = multipleYears(10); |
---|
19 | 19 | public static final TimeUnit CENTURY = multipleYears(100); |
---|
.. | .. |
---|
101 | 101 | } |
---|
102 | 102 | private static final int[] calendarUnits = |
---|
103 | 103 | { |
---|
104 | | - Calendar.SECOND, Calendar.MINUTE, Calendar.HOUR_OF_DAY, Calendar.DAY_OF_MONTH, Calendar.MONTH, Calendar.YEAR |
---|
| 104 | + Calendar.MILLISECOND, Calendar.SECOND, Calendar.MINUTE, Calendar.HOUR_OF_DAY, Calendar.DAY_OF_MONTH, Calendar.MONTH, Calendar.YEAR |
---|
105 | 105 | }; |
---|
106 | 106 | |
---|
107 | 107 | public RoughTime round(long timestamp, boolean up) |
---|
.. | .. |
---|
128 | 128 | } |
---|
129 | 129 | if (i == calendarUnits.length - 1) |
---|
130 | 130 | { |
---|
131 | | - throw new IllegalArgumentException("Unsupported Calendar Unit: " + calendarCode); |
---|
| 131 | + //throw new IllegalArgumentException("Unsupported Calendar Unit: " + calendarCode); |
---|
132 | 132 | } |
---|
133 | 133 | c.set(calendarUnits[i], c.getMinimum(calendarUnits[i])); |
---|
134 | 134 | } |
---|
.. | .. |
---|
44 | 44 | // because then the guesser succeeds before it has a chance to try parsing days. |
---|
45 | 45 | static |
---|
46 | 46 | { |
---|
47 | | - parsers.add(new DateTimeParser("yyyy-MM-ddzzzzzzzzzz", TimeUnit.DAY)); |
---|
48 | | - parsers.add(new DateTimeParser("MMM dd yyyy HH:mm", TimeUnit.SECOND)); |
---|
49 | | - parsers.add(new DateTimeParser("MMM/dd/yyyy HH:mm", TimeUnit.SECOND)); |
---|
50 | | - parsers.add(new DateTimeParser("MM/dd/yy HH:mm", TimeUnit.SECOND)); |
---|
51 | | - parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss", TimeUnit.SECOND)); |
---|
52 | | - parsers.add(new DateTimeParser("MM/dd/yyyy HH:mm:ss", TimeUnit.SECOND)); |
---|
53 | | - parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss zzzzzzzz", TimeUnit.SECOND)); |
---|
54 | | - parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND)); |
---|
55 | | - parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND)); |
---|
56 | | - parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY)); |
---|
57 | | - parsers.add(new DateTimeParser("yyyy-MM-dd", TimeUnit.DAY)); |
---|
58 | | - parsers.add(new DateTimeParser("yyyyMMdd", TimeUnit.DAY)); |
---|
59 | | - parsers.add(new DateTimeParser("MM-dd-yy", TimeUnit.DAY)); |
---|
60 | | - parsers.add(new DateTimeParser("dd-MMM-yy", TimeUnit.DAY)); |
---|
61 | | - parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY)); |
---|
62 | | - parsers.add(new DateTimeParser("MM/dd/yy", TimeUnit.DAY)); |
---|
63 | | - parsers.add(new DateTimeParser("MM/dd/yyyy", TimeUnit.DAY)); |
---|
64 | | - parsers.add(new DateTimeParser("dd MMM yyyy", TimeUnit.DAY)); |
---|
65 | | - parsers.add(new DateTimeParser("dd MMM, yyyy", TimeUnit.DAY)); |
---|
| 47 | +// parsers.add(new DateTimeParser("yyyy-MM-ddzzzzzzzzzz", TimeUnit.DAY)); |
---|
| 48 | +// parsers.add(new DateTimeParser("MMM dd yyyy HH:mm", TimeUnit.SECOND)); |
---|
| 49 | +// parsers.add(new DateTimeParser("MMM/dd/yyyy HH:mm", TimeUnit.SECOND)); |
---|
| 50 | +// parsers.add(new DateTimeParser("MM/dd/yy HH:mm", TimeUnit.SECOND)); |
---|
| 51 | +// parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss", TimeUnit.SECOND)); |
---|
| 52 | + parsers.add(new DateTimeParser("HH:mm:ss:SS", TimeUnit.REALTIME)); |
---|
| 53 | +// parsers.add(new DateTimeParser("MM/dd/yyyy HH:mm:ss", TimeUnit.SECOND)); |
---|
| 54 | +// parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss zzzzzzzz", TimeUnit.SECOND)); |
---|
| 55 | +// parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND)); |
---|
| 56 | +// parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND)); |
---|
| 57 | +// parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY)); |
---|
| 58 | +// parsers.add(new DateTimeParser("yyyy-MM-dd", TimeUnit.DAY)); |
---|
| 59 | +// parsers.add(new DateTimeParser("yyyyMMdd", TimeUnit.DAY)); |
---|
| 60 | +// parsers.add(new DateTimeParser("MM-dd-yy", TimeUnit.DAY)); |
---|
| 61 | +// parsers.add(new DateTimeParser("dd-MMM-yy", TimeUnit.DAY)); |
---|
| 62 | +// parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY)); |
---|
| 63 | +// parsers.add(new DateTimeParser("MM/dd/yy", TimeUnit.DAY)); |
---|
| 64 | +// parsers.add(new DateTimeParser("MM/dd/yyyy", TimeUnit.DAY)); |
---|
| 65 | +// parsers.add(new DateTimeParser("dd MMM yyyy", TimeUnit.DAY)); |
---|
| 66 | +// parsers.add(new DateTimeParser("dd MMM, yyyy", TimeUnit.DAY)); |
---|
66 | 67 | parsers.add(new DateTimeParser("MMM dd yyyy", TimeUnit.DAY)); |
---|
67 | | - parsers.add(new DateTimeParser("MMM dd, yyyy", TimeUnit.DAY)); |
---|
68 | | - parsers.add(new DateTimeParser("EEE MMM dd zzzzzzzz yyyy", TimeUnit.DAY)); |
---|
69 | | - parsers.add(new DateTimeParser("EEE MMM dd yyyy", TimeUnit.DAY)); |
---|
70 | | - parsers.add(new DateTimeParser("MMM-yy", TimeUnit.MONTH)); |
---|
71 | | - parsers.add(new DateTimeParser("MMM yy", TimeUnit.MONTH)); |
---|
72 | | - parsers.add(new DateTimeParser("MMM/yy", TimeUnit.MONTH)); |
---|
73 | | - parsers.add(new DateTimeParser("yyyy", TimeUnit.YEAR)); |
---|
74 | | - parsers.add(new DateTimeParser("yyyy GG", TimeUnit.YEAR)); |
---|
| 68 | +// parsers.add(new DateTimeParser("MMM dd, yyyy", TimeUnit.DAY)); |
---|
| 69 | +// parsers.add(new DateTimeParser("EEE MMM dd zzzzzzzz yyyy", TimeUnit.DAY)); |
---|
| 70 | +// parsers.add(new DateTimeParser("EEE MMM dd yyyy", TimeUnit.DAY)); |
---|
| 71 | +// parsers.add(new DateTimeParser("MMM-yy", TimeUnit.MONTH)); |
---|
| 72 | +// parsers.add(new DateTimeParser("MMM yy", TimeUnit.MONTH)); |
---|
| 73 | +// parsers.add(new DateTimeParser("MMM/yy", TimeUnit.MONTH)); |
---|
| 74 | +// parsers.add(new DateTimeParser("yyyy", TimeUnit.YEAR)); |
---|
| 75 | +// parsers.add(new DateTimeParser("yyyy GG", TimeUnit.YEAR)); |
---|
| 76 | + parsers.add(new DateTimeParser("S", TimeUnit.REALTIME)); |
---|
75 | 77 | } |
---|
76 | 78 | |
---|
77 | 79 | public DateTimeParser getLastGoodFormat() |
---|
.. | .. |
---|
10 | 10 | public List<Long> tics; |
---|
11 | 11 | private static final TimeUnit[] units = |
---|
12 | 12 | { |
---|
13 | | - TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.DAY, TimeUnit.HOUR, TimeUnit.MINUTE, TimeUnit.SECOND |
---|
| 13 | + TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.DAY, TimeUnit.HOUR, TimeUnit.MINUTE, TimeUnit.SECOND, TimeUnit.REALTIME |
---|
14 | 14 | }; |
---|
15 | 15 | private static final TimeUnit[] histUnits = |
---|
16 | 16 | { |
---|
.. | .. |
---|
20 | 20 | TimeUnit.WEEK, TimeUnit.DAY.times(2), TimeUnit.DAY, |
---|
21 | 21 | TimeUnit.HOUR, |
---|
22 | 22 | TimeUnit.MINUTE, |
---|
23 | | - TimeUnit.SECOND |
---|
| 23 | + TimeUnit.SECOND, |
---|
| 24 | + TimeUnit.REALTIME |
---|
24 | 25 | }; |
---|
25 | 26 | |
---|
26 | 27 | public AxisTicMarks(TimeUnit unit, long start, long end) |
---|
.. | .. |
---|
48 | 49 | |
---|
49 | 50 | public static AxisTicMarks histoTics(long start, long end) |
---|
50 | 51 | { |
---|
51 | | - for (int i = histUnits.length - 1; i >= 0; i--) |
---|
| 52 | + for (int i = histUnits.length; --i >= 0;) |
---|
52 | 53 | { |
---|
53 | 54 | TimeUnit u = histUnits[i]; |
---|
54 | 55 | long estimate = u.approxNumInRange(start, end); |
---|
55 | 56 | if (estimate < 200 || i == 0) |
---|
56 | 57 | { |
---|
| 58 | + if (i == 17) |
---|
| 59 | + i = 17; |
---|
| 60 | + |
---|
57 | 61 | AxisTicMarks t = new AxisTicMarks(u, start, end); |
---|
58 | 62 | return t; |
---|
59 | 63 | } |
---|
.. | .. |
---|
15 | 15 | |
---|
16 | 16 | public class TimelineSlider extends ModelPanel |
---|
17 | 17 | { |
---|
18 | | - |
---|
19 | 18 | TimelineVisuals visuals; |
---|
20 | 19 | Interval original; |
---|
21 | 20 | long minRange; |
---|
.. | .. |
---|
30 | 29 | |
---|
31 | 30 | START, END, POSITION, NONE |
---|
32 | 31 | }; |
---|
| 32 | + |
---|
33 | 33 | Modify change = Modify.NONE; |
---|
34 | 34 | Rectangle startRect = new Rectangle(-1, -1, 0, 0); |
---|
35 | 35 | Rectangle endRect = new Rectangle(-1, -1, 0, 0); |
---|
.. | .. |
---|
165 | 165 | scale.setDateRange(visuals.getGlobalInterval()); |
---|
166 | 166 | scale.setNumberRange(ew, w - ew); |
---|
167 | 167 | |
---|
168 | | - |
---|
169 | 168 | // draw the area for the central "thumb". |
---|
170 | 169 | int lx = scale.toInt(window().start); |
---|
171 | 170 | int rx = scale.toInt(window().end); |
---|
.. | .. |
---|
194 | 193 | mostInSlot = Math.max(mostInSlot, slots[s]); |
---|
195 | 194 | } |
---|
196 | 195 | } |
---|
| 196 | + |
---|
197 | 197 | if (mostInSlot > 30) |
---|
198 | 198 | { |
---|
199 | 199 | g.setColor(Color.gray); |
---|