Bug 135633 LogView sort is extremely slow especially that it uses the SimpleDateFormat
- now storing a formatted date string
diff --git a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/EventDetailsDialog.java b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/EventDetailsDialog.java
index cd4eeb4..afbdd7c 100644
--- a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/EventDetailsDialog.java
+++ b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/EventDetailsDialog.java
@@ -49,8 +49,6 @@
import org.eclipse.ui.PlatformUI;
import com.ibm.icu.text.Collator;
-import com.ibm.icu.text.DateFormat;
-import com.ibm.icu.text.SimpleDateFormat;
public class EventDetailsDialog extends TrayDialog {
private LogEntry entry, parentEntry;
@@ -353,13 +351,7 @@
resetTotalElementCount();
- Date date = entry.getDate();
- String strDate = null;
- if (date != null) {
- DateFormat formatter = new SimpleDateFormat(LogEntry.F_DATE_FORMAT);
- strDate = formatter.format(date);
- }
- dateLabel.setText(strDate != null ? strDate : ""); //$NON-NLS-1$
+ dateLabel.setText(entry.getFormattedDate());
severityImageLabel.setImage(labelProvider.getColumnImage(entry, 0));
severityLabel.setText(entry.getSeverityText());
msgText.setText(entry.getMessage() != null ? entry.getMessage() : ""); //$NON-NLS-1$
diff --git a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/LogEntry.java b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/LogEntry.java
index 659e183..698ae98 100644
--- a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/LogEntry.java
+++ b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/LogEntry.java
@@ -12,9 +12,6 @@
import java.io.PrintWriter;
import java.io.StringWriter;
-import com.ibm.icu.text.DateFormat;
-import com.ibm.icu.text.SimpleDateFormat;
-
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
@@ -26,9 +23,12 @@
import org.eclipse.pde.internal.runtime.PDERuntimeMessages;
import org.eclipse.ui.model.IWorkbenchAdapter;
+import com.ibm.icu.text.SimpleDateFormat;
+
public class LogEntry extends PlatformObject implements IWorkbenchAdapter {
public static final String F_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; //$NON-NLS-1$
+ private static final SimpleDateFormat F_SDF = new SimpleDateFormat(F_DATE_FORMAT);
private ArrayList children;
private LogEntry parent;
@@ -36,6 +36,7 @@
private int severity;
private int code;
private Date fDate;
+ private String fDateString;
private String message;
private String stack;
private LogSession session;
@@ -78,6 +79,11 @@
fDate = new Date(0); // unknown date - return epoch
return fDate;
}
+ public String getFormattedDate() {
+ if (fDateString == null)
+ fDateString = F_SDF.format(getDate());
+ return fDateString;
+ }
public String getSeverityText() {
return getSeverityText(severity);
}
@@ -180,11 +186,12 @@
dateBuffer.append(token);
}
}
- DateFormat formatter = new SimpleDateFormat(F_DATE_FORMAT);
try {
- Date date = formatter.parse(dateBuffer.toString());
- if (date != null)
- fDate = date;
+ Date date = F_SDF.parse(dateBuffer.toString());
+ if (date != null) {
+ fDate = date;
+ fDateString = F_SDF.format(fDate);
+ }
} catch (ParseException e) {
}
}
@@ -232,11 +239,12 @@
dateBuffer.append(token);
}
}
- DateFormat formatter = new SimpleDateFormat(F_DATE_FORMAT);
try {
- Date date = formatter.parse(dateBuffer.toString());
- if (date != null)
- fDate = date;
+ Date date = F_SDF.parse(dateBuffer.toString());
+ if (date != null) {
+ fDate = date;
+ fDateString = F_SDF.format(fDate);
+ }
} catch (ParseException e) {
}
return depth;
@@ -262,6 +270,7 @@
severity = status.getSeverity();
code = status.getCode();
fDate = new Date();
+ fDateString = F_SDF.format(fDate);
message = status.getMessage();
Throwable throwable = status.getException();
if (throwable != null) {
diff --git a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/LogViewLabelProvider.java b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/LogViewLabelProvider.java
index d9bfc19..e377302 100644
--- a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/LogViewLabelProvider.java
+++ b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/logview/LogViewLabelProvider.java
@@ -19,9 +19,6 @@
import org.eclipse.pde.internal.runtime.PDERuntimePluginImages;
import org.eclipse.swt.graphics.Image;
-import com.ibm.icu.text.DateFormat;
-import com.ibm.icu.text.SimpleDateFormat;
-
public class LogViewLabelProvider
extends LabelProvider
implements ITableLabelProvider {
@@ -87,10 +84,7 @@
if (entry.getPluginId() != null)
return entry.getPluginId();
case 2:
- if (entry.getDate() != null) {
- DateFormat formatter = new SimpleDateFormat(LogEntry.F_DATE_FORMAT);
- return formatter.format(entry.getDate());
- }
+ return entry.getFormattedDate();
}
return ""; //$NON-NLS-1$
}