Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Tasse2014-09-26 14:55:05 +0000
committerPatrick Tasse2014-10-17 21:11:20 +0000
commitdafacb73e28cf41a051b994d4db47ce4138b46bc (patch)
tree00f57de68b77012f84d1becbbbed7638bf23e62c
parent1eb59156b4c4039856fba32e858898c502092c3e (diff)
downloadorg.eclipse.linuxtools-dafacb73e28cf41a051b994d4db47ce4138b46bc.tar.gz
org.eclipse.linuxtools-dafacb73e28cf41a051b994d4db47ce4138b46bc.tar.xz
org.eclipse.linuxtools-dafacb73e28cf41a051b994d4db47ce4138b46bc.zip
tmf: Add 'last modified' and 'size' properties for traces
Change-Id: I037bd0eb7f6abb91fa73bcf3ca6fae93986f0eb3 Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com> Reviewed-on: https://git.eclipse.org/r/33983 Tested-by: Hudson CI
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/META-INF/MANIFEST.MF4
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/Messages.java20
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfTraceElement.java97
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/messages.properties5
4 files changed, 124 insertions, 2 deletions
diff --git a/lttng/org.eclipse.linuxtools.tmf.ui/META-INF/MANIFEST.MF b/lttng/org.eclipse.linuxtools.tmf.ui/META-INF/MANIFEST.MF
index 00f19a3575..1ba880f0fd 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/META-INF/MANIFEST.MF
+++ b/lttng/org.eclipse.linuxtools.tmf.ui/META-INF/MANIFEST.MF
@@ -9,6 +9,7 @@ Bundle-Activator: org.eclipse.linuxtools.internal.tmf.ui.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: org.eclipse.core.expressions,
+ org.eclipse.core.filesystem,
org.eclipse.core.resources,
org.eclipse.core.runtime,
org.eclipse.linuxtools.tmf.core;bundle-version="3.1.0",
@@ -17,7 +18,8 @@ Require-Bundle: org.eclipse.core.expressions,
org.eclipse.ui.navigator,
org.eclipse.ui.navigator.resources,
org.swtchart,
- org.eclipse.cdt.core
+ org.eclipse.cdt.core,
+ com.ibm.icu
Export-Package: org.eclipse.linuxtools.internal.tmf.ui;x-friends:="org.eclipse.linuxtools.tmf.ui.tests,org.eclipse.linuxtools.tmf.ctf.ui.tests",
org.eclipse.linuxtools.internal.tmf.ui.commands;x-internal:=true,
org.eclipse.linuxtools.internal.tmf.ui.dialogs;x-internal:=true,
diff --git a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/Messages.java b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/Messages.java
index 6fe065fdd3..9d845daf01 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/Messages.java
+++ b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/Messages.java
@@ -80,6 +80,26 @@ public class Messages extends NLS {
* @since 3.2*/
public static String TmfTraceElement_TimeOffset;
+ /** The descriptor for the last modified property
+ * @since 3.2 */
+ public static String TmfTraceElement_LastModified;
+
+ /** The descriptor for the size property
+ * @since 3.2 */
+ public static String TmfTraceElement_Size;
+
+ /** The format string for the size property of a file
+ * @since 3.2 */
+ public static String TmfTraceElement_FileSizeString;
+
+ /** The format string for the size property of a folder
+ * @since 3.2 */
+ public static String TmfTraceElement_FolderSizeString;
+
+ /** The format string for the size property of a folder with too many members
+ * @since 3.2 */
+ public static String TmfTraceElement_FolderSizeOverflowString;
+
/** Trace text
* @since 3.0*/
public static String TmfTraceElement_TypeName;
diff --git a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfTraceElement.java b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfTraceElement.java
index bf1eb976d8..eaf20d7358 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfTraceElement.java
+++ b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfTraceElement.java
@@ -20,11 +20,14 @@
package org.eclipse.linuxtools.tmf.ui.project.model;
import java.util.Arrays;
+import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileInfo;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
@@ -53,11 +56,15 @@ import org.eclipse.linuxtools.tmf.core.trace.TmfTrace;
import org.eclipse.linuxtools.tmf.core.trace.TmfTraceManager;
import org.eclipse.linuxtools.tmf.ui.editors.TmfEventsEditor;
import org.eclipse.linuxtools.tmf.ui.properties.ReadOnlyTextPropertyDescriptor;
+import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IActionFilter;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource2;
+import com.ibm.icu.text.DateFormat;
+import com.ibm.icu.text.NumberFormat;
+
/**
* Implementation of trace model element representing a trace. It provides
* methods to instantiate <code>ITmfTrace</code> and <code>ITmfEvent</code> as
@@ -91,6 +98,8 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
private static final String sfIsLinked = Messages.TmfTraceElement_IsLinked;
private static final String sfSourceLocation = Messages.TmfTraceElement_SourceLocation;
private static final String sfTimeOffset = Messages.TmfTraceElement_TimeOffset;
+ private static final String sfLastModified = Messages.TmfTraceElement_LastModified;
+ private static final String sfSize = Messages.TmfTraceElement_Size;
private static final String sfTracePropertiesCategory = Messages.TmfTraceElement_TraceProperties;
private static final ReadOnlyTextPropertyDescriptor sfNameDescriptor = new ReadOnlyTextPropertyDescriptor(sfName, sfName);
@@ -100,10 +109,12 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
private static final ReadOnlyTextPropertyDescriptor sfIsLinkedDescriptor = new ReadOnlyTextPropertyDescriptor(sfIsLinked, sfIsLinked);
private static final ReadOnlyTextPropertyDescriptor sfSourceLocationDescriptor = new ReadOnlyTextPropertyDescriptor(sfSourceLocation, sfSourceLocation);
private static final ReadOnlyTextPropertyDescriptor sfTimeOffsetDescriptor = new ReadOnlyTextPropertyDescriptor(sfTimeOffset, sfTimeOffset);
+ private static final ReadOnlyTextPropertyDescriptor sfLastModifiedDescriptor = new ReadOnlyTextPropertyDescriptor(sfLastModified, sfLastModified);
+ private static final ReadOnlyTextPropertyDescriptor sfSizeDescriptor = new ReadOnlyTextPropertyDescriptor(sfSize, sfSize);
private static final IPropertyDescriptor[] sfDescriptors = { sfNameDescriptor, sfPathDescriptor, sfLocationDescriptor,
sfTypeDescriptor, sfIsLinkedDescriptor, sfSourceLocationDescriptor,
- sfTimeOffsetDescriptor};
+ sfTimeOffsetDescriptor, sfLastModifiedDescriptor, sfSizeDescriptor };
static {
sfNameDescriptor.setCategory(sfResourcePropertiesCategory);
@@ -113,10 +124,14 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
sfIsLinkedDescriptor.setCategory(sfResourcePropertiesCategory);
sfSourceLocationDescriptor.setCategory(sfResourcePropertiesCategory);
sfTimeOffsetDescriptor.setCategory(sfResourcePropertiesCategory);
+ sfLastModifiedDescriptor.setCategory(sfResourcePropertiesCategory);
+ sfSizeDescriptor.setCategory(sfResourcePropertiesCategory);
}
private static final TmfTimestampFormat OFFSET_FORMAT = new TmfTimestampFormat("T.SSS SSS SSS s"); //$NON-NLS-1$
+ private static final int FOLDER_MAX_COUNT = 1024;
+
// ------------------------------------------------------------------------
// Static initialization
// ------------------------------------------------------------------------
@@ -163,6 +178,22 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
}
// ------------------------------------------------------------------------
+ // Classes
+ // ------------------------------------------------------------------------
+
+ private class FileInfo {
+ long lastModified;
+ long size;
+ int count;
+ }
+
+ // ------------------------------------------------------------------------
+ // Attributes
+ // ------------------------------------------------------------------------
+
+ private FileInfo fFileInfo;
+
+ // ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
@@ -457,6 +488,32 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
return ""; //$NON-NLS-1$
}
+ if (sfLastModified.equals(id)) {
+ FileInfo fileInfo = getFileInfo();
+ if (fileInfo == null) {
+ return ""; //$NON-NLS-1$
+ }
+ long date = fileInfo.lastModified;
+ DateFormat format = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.MEDIUM);
+ return format.format(new Date(date));
+ }
+
+ if (sfSize.equals(id)) {
+ FileInfo fileInfo = getFileInfo();
+ if (fileInfo == null) {
+ return ""; //$NON-NLS-1$
+ }
+ if (getResource() instanceof IFolder) {
+ if (fileInfo.count <= FOLDER_MAX_COUNT) {
+ return NLS.bind(Messages.TmfTraceElement_FolderSizeString,
+ NumberFormat.getInstance().format(fileInfo.size), fileInfo.count);
+ }
+ return NLS.bind(Messages.TmfTraceElement_FolderSizeOverflowString,
+ NumberFormat.getInstance().format(fileInfo.size), FOLDER_MAX_COUNT);
+ }
+ return NLS.bind(Messages.TmfTraceElement_FileSizeString, NumberFormat.getInstance().format(fileInfo.size));
+ }
+
if (sfTraceType.equals(id)) {
if (getTraceType() != null) {
TraceTypeHelper helper = TmfTraceType.getTraceType(getTraceType());
@@ -486,6 +543,44 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
return null;
}
+ private FileInfo getFileInfo() {
+ /* FileInfo is needed for both 'last modified' and 'size' properties.
+ * It is freshly computed for one, and reused for the other, then
+ * cleared so that the information can be refreshed the next time.
+ */
+ FileInfo fileInfo;
+ if (fFileInfo == null) {
+ try {
+ fileInfo = computeFileInfo(new FileInfo(), getResource());
+ } catch (CoreException e) {
+ return null;
+ }
+ fFileInfo = fileInfo;
+ } else {
+ fileInfo = fFileInfo;
+ fFileInfo = null;
+ }
+ return fileInfo;
+ }
+
+ private FileInfo computeFileInfo(FileInfo fileInfo, IResource resource) throws CoreException {
+ if (fileInfo == null || fileInfo.count > FOLDER_MAX_COUNT) {
+ return fileInfo;
+ }
+ if (resource instanceof IFolder) {
+ IFolder folder = (IFolder) resource;
+ for (IResource member : folder.members()) {
+ computeFileInfo(fileInfo, member);
+ }
+ return fileInfo;
+ }
+ IFileInfo info = EFS.getStore(resource.getLocationURI()).fetchInfo();
+ fileInfo.lastModified = Math.max(fileInfo.lastModified, info.getLastModified());
+ fileInfo.size += info.getLength();
+ fileInfo.count++;
+ return fileInfo;
+ }
+
@Override
public void resetPropertyValue(Object id) {
}
diff --git a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/messages.properties b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/messages.properties
index 419252873d..f931a19a6f 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/messages.properties
+++ b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/messages.properties
@@ -28,6 +28,11 @@ TmfTraceElement_EventType = type
TmfTraceElement_IsLinked = linked
TmfTraceElement_SourceLocation = source location
TmfTraceElement_TimeOffset = time offset
+TmfTraceElement_LastModified = last modified
+TmfTraceElement_Size = size
+TmfTraceElement_FileSizeString={0} bytes
+TmfTraceElement_FolderSizeString={0} bytes in {1} files
+TmfTraceElement_FolderSizeOverflowString=At least {0} bytes in more than {1} files
TmfTraceElement_TypeName=Trace
TmfTraceType_SelectTraceType=Select Trace Type

Back to the top