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$

 	}