From dcda2c5fa15e63daad67f5720a2f726e34f8cd71 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Thu, 20 Dec 2018 20:11:57 -0500
Subject: [PATCH] Fix out of memory crash with TimeUnit.
---
timeflow/app/actions/DateFieldAction.java | 21 ++--
timeflow/data/time/TimeUnit.java | 6
timeflow/vis/timeline/TimelineSlider.java | 4
timeflow/data/time/RoughTime.java | 9 +
timeflow/vis/timeline/AxisTicMarks.java | 10 +
timeflow/data/db/BasicAct.java | 139 ++++++++++++++-------------
timeflow/format/field/DateTimeGuesser.java | 56 +++++-----
7 files changed, 134 insertions(+), 111 deletions(-)
diff --git a/timeflow/app/actions/DateFieldAction.java b/timeflow/app/actions/DateFieldAction.java
index b7e8496..bf81d0b 100755
--- a/timeflow/app/actions/DateFieldAction.java
+++ b/timeflow/app/actions/DateFieldAction.java
@@ -10,15 +10,16 @@
import javax.swing.*;
import java.util.*;
-public class DateFieldAction extends TimeflowAction {
+public class DateFieldAction extends TimeflowAction
+{
+ public DateFieldAction(TimeflowApp app)
+ {
+ super(app, "Set Date Fields...", null, "Set date fields corresponding to start, end.");
+ }
- public DateFieldAction(TimeflowApp app)
- {
- super(app, "Set Date Fields...", null, "Set date fields corresponding to start, end.");
- }
-
- @Override
- public void actionPerformed(ActionEvent e) {
- DateFieldPanel.popWindow(app.model);
- }
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ DateFieldPanel.popWindow(app.model);
+ }
}
diff --git a/timeflow/data/db/BasicAct.java b/timeflow/data/db/BasicAct.java
index 48e3eb9..8473d86 100755
--- a/timeflow/data/db/BasicAct.java
+++ b/timeflow/data/db/BasicAct.java
@@ -6,84 +6,93 @@
import java.net.URL;
import java.util.*;
-public class BasicAct implements Act {
-
- private HashMap data=new HashMap();
- private ActDB db;
-
- public BasicAct(ActDB db)
- {
- this.db=db;
- }
-
+public class BasicAct implements Act
+{
- @Override
- public String getString(Field field) {
- return (String)data.get(field.getName());
- }
-
- public void setText(Field field, String text)
- {
- data.put(field.getName(), text);
- }
+ private HashMap data = new HashMap();
+ private ActDB db;
- @Override
- public String[] getTextList(Field field) {
- return (String[])data.get(field.getName());
- }
-
- public void setTextList(Field field, String[] list){
- data.put(field.getName(), list);
- }
+ public BasicAct(ActDB db)
+ {
+ this.db = db;
+ }
- @Override
- public double getValue(Field field) {
- return (Double)data.get(field.getName());
- }
-
- public void setValue(Field field, double value)
- {
- data.put(field.getName(), value);
- }
+ @Override
+ public String getString(Field field)
+ {
+ Object s = data.get(field.getName());
+ if (s == null)
+ return null;
+ return s.toString();
+ }
- @Override
- public Object get(Field field) {
- return data.get(field.getName());
- }
+ public void setText(Field field, String text)
+ {
+ data.put(field.getName(), text);
+ }
- @Override
- public ActDB getDB() {
- return db;
- }
+ @Override
+ public String[] getTextList(Field field)
+ {
+ return (String[]) data.get(field.getName());
+ }
- @Override
- public void set(Field field, Object value) {
- data.put(field.getName(), value);
- }
+ public void setTextList(Field field, String[] list)
+ {
+ data.put(field.getName(), list);
+ }
+ @Override
+ public double getValue(Field field)
+ {
+ return (Double) data.get(field.getName());
+ }
- @Override
- public RoughTime getTime(Field field) {
- return (RoughTime)data.get(field.getName());
- }
+ public void setValue(Field field, double value)
+ {
+ data.put(field.getName(), value);
+ }
+ @Override
+ public Object get(Field field)
+ {
+ return data.get(field.getName());
+ }
- @Override
- public void setTime(Field field, RoughTime time) {
- data.put(field.getName(), time);
-
- }
+ @Override
+ public ActDB getDB()
+ {
+ return db;
+ }
+ @Override
+ public void set(Field field, Object value)
+ {
+ data.put(field.getName(), value);
+ }
- @Override
- public URL getURL(Field field) {
- return (URL)data.get(field.getName());
- }
+ @Override
+ public RoughTime getTime(Field field)
+ {
+ return (RoughTime) data.get(field.getName());
+ }
+ @Override
+ public void setTime(Field field, RoughTime time)
+ {
+ data.put(field.getName(), time);
- @Override
- public void setURL(Field field, URL url) {
- data.put(field.getName(), url);
- }
+ }
+ @Override
+ public URL getURL(Field field)
+ {
+ return (URL) data.get(field.getName());
+ }
+
+ @Override
+ public void setURL(Field field, URL url)
+ {
+ data.put(field.getName(), url);
+ }
}
diff --git a/timeflow/data/time/RoughTime.java b/timeflow/data/time/RoughTime.java
index 85403f3..a3221b4 100755
--- a/timeflow/data/time/RoughTime.java
+++ b/timeflow/data/time/RoughTime.java
@@ -106,7 +106,14 @@
public String format()
{
//return units.formatFull(time);
- return TimeUnit.SECOND.formatFull(time);
+ String format = TimeUnit.REALTIME.formatFull(time);
+
+ if (format.equals("00:00:00:00"))
+ {
+ format = TimeUnit.DAY.formatFull(time);
+ }
+
+ return format;
}
public static int compare(RoughTime t1, RoughTime t2)
diff --git a/timeflow/data/time/TimeUnit.java b/timeflow/data/time/TimeUnit.java
index bbba6e1..0eb149f 100755
--- a/timeflow/data/time/TimeUnit.java
+++ b/timeflow/data/time/TimeUnit.java
@@ -13,7 +13,7 @@
public static final TimeUnit HOUR = new TimeUnit("Hours", Calendar.HOUR_OF_DAY, 60 * 60 * 1000L, "HH:mm", "MMM d yyyy HH:mm");
public static final TimeUnit MINUTE = new TimeUnit("Minutes", Calendar.MINUTE, 60 * 1000L, ":mm", "MMM d yyyy HH:mm");
public static final TimeUnit SECOND = new TimeUnit("Seconds", Calendar.SECOND, 1000L, ":ss", "MMM d yyyy HH:mm:ss");
- public static final TimeUnit REALTIME = new TimeUnit("Realtime", Calendar.MILLISECOND, 8L, ":SSS", "MMM d yyyy HH:mm:ss:SSS");
+ public static final TimeUnit REALTIME = new TimeUnit("Realtime", Calendar.MILLISECOND, 1L, ":SS", "HH:mm:ss.SS");
public static final TimeUnit DECADE = multipleYears(10);
public static final TimeUnit CENTURY = multipleYears(100);
@@ -101,7 +101,7 @@
}
private static final int[] calendarUnits =
{
- Calendar.SECOND, Calendar.MINUTE, Calendar.HOUR_OF_DAY, Calendar.DAY_OF_MONTH, Calendar.MONTH, Calendar.YEAR
+ Calendar.MILLISECOND, Calendar.SECOND, Calendar.MINUTE, Calendar.HOUR_OF_DAY, Calendar.DAY_OF_MONTH, Calendar.MONTH, Calendar.YEAR
};
public RoughTime round(long timestamp, boolean up)
@@ -128,7 +128,7 @@
}
if (i == calendarUnits.length - 1)
{
- throw new IllegalArgumentException("Unsupported Calendar Unit: " + calendarCode);
+ //throw new IllegalArgumentException("Unsupported Calendar Unit: " + calendarCode);
}
c.set(calendarUnits[i], c.getMinimum(calendarUnits[i]));
}
diff --git a/timeflow/format/field/DateTimeGuesser.java b/timeflow/format/field/DateTimeGuesser.java
index 48d05c9..3ec965c 100755
--- a/timeflow/format/field/DateTimeGuesser.java
+++ b/timeflow/format/field/DateTimeGuesser.java
@@ -44,34 +44,36 @@
// because then the guesser succeeds before it has a chance to try parsing days.
static
{
- parsers.add(new DateTimeParser("yyyy-MM-ddzzzzzzzzzz", TimeUnit.DAY));
- parsers.add(new DateTimeParser("MMM dd yyyy HH:mm", TimeUnit.SECOND));
- parsers.add(new DateTimeParser("MMM/dd/yyyy HH:mm", TimeUnit.SECOND));
- parsers.add(new DateTimeParser("MM/dd/yy HH:mm", TimeUnit.SECOND));
- parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss", TimeUnit.SECOND));
- parsers.add(new DateTimeParser("MM/dd/yyyy HH:mm:ss", TimeUnit.SECOND));
- parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss zzzzzzzz", TimeUnit.SECOND));
- parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND));
- parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND));
- parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("yyyy-MM-dd", TimeUnit.DAY));
- parsers.add(new DateTimeParser("yyyyMMdd", TimeUnit.DAY));
- parsers.add(new DateTimeParser("MM-dd-yy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("dd-MMM-yy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("MM/dd/yy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("MM/dd/yyyy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("dd MMM yyyy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("dd MMM, yyyy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("yyyy-MM-ddzzzzzzzzzz", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("MMM dd yyyy HH:mm", TimeUnit.SECOND));
+// parsers.add(new DateTimeParser("MMM/dd/yyyy HH:mm", TimeUnit.SECOND));
+// parsers.add(new DateTimeParser("MM/dd/yy HH:mm", TimeUnit.SECOND));
+// parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss", TimeUnit.SECOND));
+ parsers.add(new DateTimeParser("HH:mm:ss:SS", TimeUnit.REALTIME));
+// parsers.add(new DateTimeParser("MM/dd/yyyy HH:mm:ss", TimeUnit.SECOND));
+// parsers.add(new DateTimeParser("MMM dd yyyy HH:mm:ss zzzzzzzz", TimeUnit.SECOND));
+// parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND));
+// parsers.add(new DateTimeParser("EEE MMM dd HH:mm:ss zzzzzzzz yyyy", TimeUnit.SECOND));
+// parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("yyyy-MM-dd", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("yyyyMMdd", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("MM-dd-yy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("dd-MMM-yy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("MM-dd-yyyy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("MM/dd/yy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("MM/dd/yyyy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("dd MMM yyyy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("dd MMM, yyyy", TimeUnit.DAY));
parsers.add(new DateTimeParser("MMM dd yyyy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("MMM dd, yyyy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("EEE MMM dd zzzzzzzz yyyy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("EEE MMM dd yyyy", TimeUnit.DAY));
- parsers.add(new DateTimeParser("MMM-yy", TimeUnit.MONTH));
- parsers.add(new DateTimeParser("MMM yy", TimeUnit.MONTH));
- parsers.add(new DateTimeParser("MMM/yy", TimeUnit.MONTH));
- parsers.add(new DateTimeParser("yyyy", TimeUnit.YEAR));
- parsers.add(new DateTimeParser("yyyy GG", TimeUnit.YEAR));
+// parsers.add(new DateTimeParser("MMM dd, yyyy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("EEE MMM dd zzzzzzzz yyyy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("EEE MMM dd yyyy", TimeUnit.DAY));
+// parsers.add(new DateTimeParser("MMM-yy", TimeUnit.MONTH));
+// parsers.add(new DateTimeParser("MMM yy", TimeUnit.MONTH));
+// parsers.add(new DateTimeParser("MMM/yy", TimeUnit.MONTH));
+// parsers.add(new DateTimeParser("yyyy", TimeUnit.YEAR));
+// parsers.add(new DateTimeParser("yyyy GG", TimeUnit.YEAR));
+ parsers.add(new DateTimeParser("S", TimeUnit.REALTIME));
}
public DateTimeParser getLastGoodFormat()
diff --git a/timeflow/vis/timeline/AxisTicMarks.java b/timeflow/vis/timeline/AxisTicMarks.java
index edbd96b..2a88ab8 100755
--- a/timeflow/vis/timeline/AxisTicMarks.java
+++ b/timeflow/vis/timeline/AxisTicMarks.java
@@ -10,7 +10,7 @@
public List<Long> tics;
private static final TimeUnit[] units =
{
- TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.DAY, TimeUnit.HOUR, TimeUnit.MINUTE, TimeUnit.SECOND
+ TimeUnit.YEAR, TimeUnit.MONTH, TimeUnit.DAY, TimeUnit.HOUR, TimeUnit.MINUTE, TimeUnit.SECOND, TimeUnit.REALTIME
};
private static final TimeUnit[] histUnits =
{
@@ -20,7 +20,8 @@
TimeUnit.WEEK, TimeUnit.DAY.times(2), TimeUnit.DAY,
TimeUnit.HOUR,
TimeUnit.MINUTE,
- TimeUnit.SECOND
+ TimeUnit.SECOND,
+ TimeUnit.REALTIME
};
public AxisTicMarks(TimeUnit unit, long start, long end)
@@ -48,12 +49,15 @@
public static AxisTicMarks histoTics(long start, long end)
{
- for (int i = histUnits.length - 1; i >= 0; i--)
+ for (int i = histUnits.length; --i >= 0;)
{
TimeUnit u = histUnits[i];
long estimate = u.approxNumInRange(start, end);
if (estimate < 200 || i == 0)
{
+ if (i == 17)
+ i = 17;
+
AxisTicMarks t = new AxisTicMarks(u, start, end);
return t;
}
diff --git a/timeflow/vis/timeline/TimelineSlider.java b/timeflow/vis/timeline/TimelineSlider.java
index 005db28..def6cdb 100755
--- a/timeflow/vis/timeline/TimelineSlider.java
+++ b/timeflow/vis/timeline/TimelineSlider.java
@@ -15,7 +15,6 @@
public class TimelineSlider extends ModelPanel
{
-
TimelineVisuals visuals;
Interval original;
long minRange;
@@ -30,6 +29,7 @@
START, END, POSITION, NONE
};
+
Modify change = Modify.NONE;
Rectangle startRect = new Rectangle(-1, -1, 0, 0);
Rectangle endRect = new Rectangle(-1, -1, 0, 0);
@@ -165,7 +165,6 @@
scale.setDateRange(visuals.getGlobalInterval());
scale.setNumberRange(ew, w - ew);
-
// draw the area for the central "thumb".
int lx = scale.toInt(window().start);
int rx = scale.toInt(window().end);
@@ -194,6 +193,7 @@
mostInSlot = Math.max(mostInSlot, slots[s]);
}
}
+
if (mostInSlot > 30)
{
g.setColor(Color.gray);
--
Gitblit v1.6.2