tmf: Move icon and label text into ITmfProjectModelElement
authorAlexandre Montplaisir <alexmonthy@efficios.com>
Fri, 26 Feb 2016 03:37:00 +0000 (22:37 -0500)
committerAlexandre Montplaisir <alexmonthy@efficios.com>
Fri, 11 Mar 2016 02:13:23 +0000 (21:13 -0500)
A series of "else if (instance of ...)" checks is usually better
served by good ol' polymorphism. Move the class-aware logic present
in TmfNavigatorLabelProvider into each class and add corresponding
methods in the interface.

This aligns with the recently-added getStyler() method, which is
defined in the element classes and simply called by the label provider.

Also move everything icon-reading-related to a new class, so that
there is no circular dependencies between TmfNavigatorLabelProvider
and the project element classes.

Change-Id: I0d78dd5342b13272a42b11e7ca0619225e1beed5
Signed-off-by: Alexandre Montplaisir <alexmonthy@efficios.com>
Reviewed-on: https://git.eclipse.org/r/67694
Reviewed-by: Hudson CI
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
12 files changed:
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/ITmfProjectModelElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfAnalysisOutputElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfCommonProjectElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfExperimentFolder.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfNavigatorLabelProvider.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectModelIcons.java [new file with mode: 0644]
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTraceFolder.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfTracesFolder.java

index 991bf0aa430f50aed8b6bcba1ffee6d45316eaf5..4f073cd77032b1bd887193ee20cbc566ce762ba7 100644 (file)
@@ -17,6 +17,7 @@ import java.util.List;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.swt.graphics.Image;
 
 /**
  * The TMF project model interface.
@@ -84,6 +85,24 @@ public interface ITmfProjectModelElement {
      */
     void refresh();
 
+    /**
+     * Returns the icon of this element.
+     *
+     * @return The icon
+     * @since 2.0
+     */
+    Image getIcon();
+
+    /**
+     * Returns the text of the label of this element.
+     *
+     * @return The label text
+     * @since 2.0
+     */
+    default String getLabelText() {
+        return getName();
+    }
+
     /**
      * Returns whether this model element has children or not.
      *
index 23af28ac52df780bd0e3ed99dd276530619d64e7..7d20800a2f1e2299f367b39496f0f94ba71de681 100644 (file)
@@ -25,6 +25,7 @@ import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jface.viewers.StyledString.Styler;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.TextStyle;
 import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper;
@@ -139,6 +140,24 @@ public class TmfAnalysisElement extends TmfProjectModelElement implements ITmfSt
         }
     }
 
+    /**
+     * @since 2.0
+     */
+    @Override
+    public Image getIcon() {
+        String iconFile = getIconFile();
+        if (iconFile != null) {
+            Bundle bundle = getBundle();
+            if (bundle != null) {
+                Image icon = TmfProjectModelIcons.loadIcon(bundle, iconFile);
+                if (icon != null) {
+                    return icon;
+                }
+            }
+        }
+        return TmfProjectModelIcons.DEFAULT_ANALYSIS_ICON;
+    }
+
     // ------------------------------------------------------------------------
     // TmfProjectModelElement
     // ------------------------------------------------------------------------
index 58c74b1b9b2dd48e5c5a693d2aa53dbef3c2d89a..37c7944149afa3a8018ad496674320a253a0874d 100644 (file)
@@ -47,11 +47,7 @@ public class TmfAnalysisOutputElement extends TmfProjectModelElement {
         fOutput = output;
     }
 
-    /**
-     * Gets the icon of the view, if applicable
-     *
-     * @return The view icon or null if output is not a view
-     */
+    @Override
     public Image getIcon() {
         if (fOutput instanceof TmfAnalysisViewOutput) {
             IViewDescriptor descr = PlatformUI.getWorkbench().getViewRegistry().find(
@@ -64,10 +60,12 @@ public class TmfAnalysisOutputElement extends TmfProjectModelElement {
                     icon = descr.getImageDescriptor().createImage();
                     bundle.getImageRegistry().put(key, icon);
                 }
-                return icon;
+                if (icon != null) {
+                    return icon;
+                }
             }
         }
-        return null;
+        return TmfProjectModelIcons.DEFAULT_VIEW_ICON;
     }
 
     /**
index b9870e0096b1701add705d505d4a45c371aa87e3..da97411174c30da16cc4a3f1752e858ed757c16e 100644 (file)
@@ -16,6 +16,8 @@
 
 package org.eclipse.tracecompass.tmf.ui.project.model;
 
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -29,11 +31,14 @@ import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.tracecompass.internal.tmf.ui.Activator;
 import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants;
 import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
@@ -41,6 +46,7 @@ import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper;
 import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager;
 import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
 import org.eclipse.tracecompass.tmf.core.project.model.TraceTypeHelper;
+import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType.TraceElementType;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
@@ -53,6 +59,7 @@ import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.FileEditorInput;
+import org.osgi.framework.Bundle;
 
 /**
  * Base class for tracing project elements: it implements the common behavior of
@@ -149,6 +156,39 @@ public abstract class TmfCommonProjectElement extends TmfProjectModelElement {
         }
     }
 
+    /**
+     * @since 2.0
+     */
+    @Override
+    public Image getIcon() {
+        String traceType = getTraceType();
+        if (traceType == null || TmfTraceType.getTraceType(traceType) == null) {
+            // request the label to the Eclipse platform
+            Image icon = TmfProjectModelIcons.WORKSPACE_LABEL_PROVIDER.getImage(getResource());
+            return (icon == null ? TmfProjectModelIcons.DEFAULT_TRACE_ICON : icon);
+        }
+
+        IConfigurationElement traceUIAttributes = TmfTraceTypeUIUtils.getTraceUIAttributes(traceType,
+                (this instanceof TmfTraceElement) ? TraceElementType.TRACE : TraceElementType.EXPERIMENT);
+        if (traceUIAttributes != null) {
+            String iconAttr = traceUIAttributes.getAttribute(TmfTraceTypeUIUtils.ICON_ATTR);
+            if (iconAttr != null) {
+                String name = traceUIAttributes.getContributor().getName();
+                if (name != null) {
+                    Bundle bundle = Platform.getBundle(name);
+                    if (bundle != null) {
+                        Image image = TmfProjectModelIcons.loadIcon(bundle, iconAttr);
+                        if (image != null) {
+                            return image;
+                        }
+                    }
+                }
+            }
+        }
+        /* Let subclasses specify an icon */
+        return null;
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
@@ -198,13 +238,13 @@ public abstract class TmfCommonProjectElement extends TmfProjectModelElement {
      *
      * @return The element path
      */
-    public String getElementPath() {
+    public @NonNull String getElementPath() {
         ITmfProjectModelElement parent = getParent();
         while (!(parent instanceof TmfTracesFolder || parent instanceof TmfExperimentElement || parent instanceof TmfExperimentFolder)) {
             parent = parent.getParent();
         }
         IPath path = getResource().getFullPath().makeRelativeTo(parent.getPath());
-        return path.toString();
+        return checkNotNull(path.toString());
     }
 
     /**
index 9c85d33600d2467038c043a6c2c01b8e36a09f36..09509f4cef6b721d2ec033162ecae828a4c2367d 100644 (file)
@@ -38,7 +38,9 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.InvalidRegistryObjectException;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.tracecompass.internal.tmf.ui.Activator;
 import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants;
@@ -242,6 +244,23 @@ public class TmfExperimentElement extends TmfCommonProjectElement implements IPr
         return list;
     }
 
+    /**
+     * @since 2.0
+     */
+    @Override
+    public @NonNull Image getIcon() {
+        Image icon = super.getIcon();
+        return (icon == null ? TmfProjectModelIcons.DEFAULT_EXPERIMENT_ICON : icon);
+    }
+
+    /**
+     * @since 2.0
+     */
+    @Override
+    public String getLabelText() {
+        return getName() + " [" + getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
index 4db58d274296871b9a95541a93d552acd262e588..8925cf0906aa5e7e26b62374c55f35562fe65c18 100644 (file)
@@ -24,6 +24,7 @@ import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.tracecompass.tmf.ui.properties.ReadOnlyTextPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertySource2;
@@ -128,6 +129,22 @@ public class TmfExperimentFolder extends TmfProjectModelElement implements IProp
         }
     }
 
+    /**
+     * @since 2.0
+     */
+    @Override
+    public Image getIcon() {
+        return TmfProjectModelIcons.FOLDER_ICON;
+    }
+
+    /**
+     * @since 2.0
+     */
+    @Override
+    public String getLabelText() {
+        return getName() + " [" + getChildren().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
index 3c375caa614af1096bd58d186d454bbeaf5e5351..bf25fc5435e1a099b47cefe1c1d29efa890e814e 100644 (file)
 
 package org.eclipse.tracecompass.tmf.ui.project.model;
 
-import java.net.URL;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
 import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.jface.viewers.StyledString.Styler;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.tracecompass.internal.tmf.ui.Activator;
-import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
-import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType.TraceElementType;
 import org.eclipse.ui.IMemento;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
 import org.eclipse.ui.navigator.ICommonContentExtensionSite;
 import org.eclipse.ui.navigator.ICommonLabelProvider;
-import org.osgi.framework.Bundle;
 
 /**
  * The TMF project label provider for the tree viewer in the project explorer view.
@@ -42,170 +30,23 @@ import org.osgi.framework.Bundle;
  */
 public class TmfNavigatorLabelProvider implements ICommonLabelProvider, IStyledLabelProvider {
 
-    // ------------------------------------------------------------------------
-    // Constants
-    // ------------------------------------------------------------------------
-
-    private static final Image FOLDER_ICON = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
-    private static final String TRACE_ICON_FILE = "icons/elcl16/trace.gif"; //$NON-NLS-1$
-    private static final String EXPERIMENT_ICON_FILE = "icons/elcl16/experiment.gif"; //$NON-NLS-1$
-    private static final String ANALYSIS_ICON_FILE = "icons/ovr16/experiment_folder_ovr.png"; //$NON-NLS-1$
-    private static final String VIEW_ICON_FILE = "icons/obj16/node_obj.gif"; //$NON-NLS-1$
-
-    // ------------------------------------------------------------------------
-    // Attributes
-    // ------------------------------------------------------------------------
-
-    private final Image fDefaultTraceIcon;
-    private final Image fExperimentIcon;
-    private final Image fDefaultAnalysisIcon;
-    private final Image fDefaultViewIcon;
-
-    private final WorkbenchLabelProvider fWorkspaceLabelProvider = new WorkbenchLabelProvider();
-
-    // ------------------------------------------------------------------------
-    // Constructors
-    // ------------------------------------------------------------------------
-
-    /**
-     * Constructor.
-     *
-     * Creates the TMF navigator content provider.
-     */
-    public TmfNavigatorLabelProvider() {
-        Bundle bundle = Activator.getDefault().getBundle();
-        fDefaultTraceIcon = loadIcon(bundle, TRACE_ICON_FILE);
-        fExperimentIcon = loadIcon(bundle, EXPERIMENT_ICON_FILE);
-        fDefaultAnalysisIcon = loadIcon(bundle, ANALYSIS_ICON_FILE);
-        fDefaultViewIcon = loadIcon(bundle, VIEW_ICON_FILE);
-    }
-
-    private static Image loadIcon(Bundle bundle, String url) {
-        Activator plugin = Activator.getDefault();
-        String key = bundle.getSymbolicName() + "/" + url; //$NON-NLS-1$
-        Image icon = plugin.getImageRegistry().get(key);
-        if (icon == null) {
-            URL imageURL = bundle.getResource(url);
-            ImageDescriptor descriptor = ImageDescriptor.createFromURL(imageURL);
-            if (descriptor != null) {
-                icon = descriptor.createImage();
-                plugin.getImageRegistry().put(key, icon);
-            }
-        }
-        return icon;
-    }
-
     // ------------------------------------------------------------------------
     // ICommonLabelProvider
     // ------------------------------------------------------------------------
 
     @Override
     public Image getImage(Object element) {
-
-        if (element instanceof TmfCommonProjectElement) {
-            TmfCommonProjectElement trace = (TmfCommonProjectElement) element;
-            String traceType = trace.getTraceType();
-            if (traceType == null || TmfTraceType.getTraceType(traceType) == null) {
-                // request the label to the Eclipse platform
-                return fWorkspaceLabelProvider.getImage(((TmfCommonProjectElement) element).getResource());
-            }
-
-            IConfigurationElement traceUIAttributes = TmfTraceTypeUIUtils.getTraceUIAttributes(traceType, (element instanceof TmfTraceElement) ? TraceElementType.TRACE : TraceElementType.EXPERIMENT);
-            if (traceUIAttributes != null) {
-                String iconAttr = traceUIAttributes.getAttribute(TmfTraceTypeUIUtils.ICON_ATTR);
-                if (iconAttr != null) {
-                    String name = traceUIAttributes.getContributor().getName();
-                    if (name != null) {
-                        Bundle bundle = Platform.getBundle(name);
-                        if (bundle != null) {
-                            Image image = loadIcon(bundle, iconAttr);
-                            if (image != null) {
-                                return image;
-                            }
-                        }
-                    }
-                }
-
-            }
-            if (element instanceof TmfTraceElement) {
-                return fDefaultTraceIcon;
-            }
-            return fExperimentIcon;
-        }
-
-        if (element instanceof TmfExperimentFolder) {
-            return FOLDER_ICON;
-        }
-
-        if (element instanceof TmfTraceFolder) {
-            return FOLDER_ICON;
-        }
-
-        if (element instanceof TmfAnalysisOutputElement) {
-            TmfAnalysisOutputElement output = (TmfAnalysisOutputElement) element;
-            Image icon = output.getIcon();
-            if (icon == null) {
-                return fDefaultViewIcon;
-            }
-            return icon;
-        }
-
-        if (element instanceof TmfAnalysisElement) {
-            TmfAnalysisElement analysis = (TmfAnalysisElement) element;
-            String iconFile = analysis.getIconFile();
-            if (iconFile != null) {
-                Bundle bundle = analysis.getBundle();
-                if (bundle != null) {
-                    Image icon = loadIcon(bundle, iconFile);
-                    return icon;
-                }
-            }
-            return fDefaultAnalysisIcon;
+        if (element instanceof ITmfProjectModelElement) {
+            return ((ITmfProjectModelElement) element).getIcon();
         }
-
         return null;
     }
 
     @Override
     public String getText(Object element) {
-
-        if (element instanceof TmfTracesFolder) {
-            TmfTracesFolder folder = (TmfTracesFolder) element;
-            return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
-        }
-
-        if (element instanceof TmfTraceFolder) {
-            TmfTraceFolder folder = (TmfTraceFolder) element;
-            int nbTraces = folder.getTraces().size();
-            if (nbTraces > 0) {
-                return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
-            }
-            return folder.getName();
-        }
-
-        if (element instanceof TmfTraceElement) {
-            TmfTraceElement trace = (TmfTraceElement) element;
-            if (trace.getParent() instanceof TmfExperimentElement) {
-                return trace.getElementPath();
-            }
-            return trace.getName();
-        }
-
-        if (element instanceof TmfExperimentElement) {
-            TmfExperimentElement folder = (TmfExperimentElement) element;
-            return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
-        }
-
-        if (element instanceof TmfExperimentFolder) {
-            TmfExperimentFolder folder = (TmfExperimentFolder) element;
-            return folder.getName() + " [" + folder.getChildren().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
-        }
-
-        // Catch all
         if (element instanceof ITmfProjectModelElement) {
-            return ((ITmfProjectModelElement) element).getName();
+            return ((ITmfProjectModelElement) element).getLabelText();
         }
-
         return null;
     }
 
index 96b360b96444248ffcbd0adc60044e12f37f4419..17a4f14cfd118dbbcbf23bbfafc95212dc18c70c 100644 (file)
@@ -18,6 +18,7 @@ import java.util.Map;
 
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.swt.graphics.Image;
 
 /**
  * The implementation of TMF project model element.
@@ -153,4 +154,12 @@ public class TmfProjectElement extends TmfProjectModelElement {
     public TmfProjectElement getProject() {
         return this;
     }
+
+    /**
+     * @since 2.0
+     */
+    @Override
+    public Image getIcon() {
+        return null;
+    }
 }
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectModelIcons.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectModelIcons.java
new file mode 100644 (file)
index 0000000..7282665
--- /dev/null
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2016 Ericsson, EfficiOS Inc. and others
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.ui.project.model;
+
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+
+import java.net.URL;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.tracecompass.internal.tmf.ui.Activator;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.osgi.framework.Bundle;
+
+/**
+ * Facilities to load icons used in the Project View.
+ *
+ * @author Alexandre Montplaisir
+ * @since 2.0
+ */
+final class TmfProjectModelIcons {
+
+    private TmfProjectModelIcons() {}
+
+    public static final @NonNull Image DEFAULT_TRACE_ICON;
+    public static final @NonNull Image DEFAULT_EXPERIMENT_ICON;
+    public static final @NonNull Image DEFAULT_ANALYSIS_ICON;
+    public static final @NonNull Image DEFAULT_VIEW_ICON;
+    public static final @NonNull Image FOLDER_ICON;
+
+    public static final WorkbenchLabelProvider WORKSPACE_LABEL_PROVIDER = new WorkbenchLabelProvider();
+
+    private static final String TRACE_ICON_FILE = "icons/elcl16/trace.gif"; //$NON-NLS-1$
+    private static final String EXPERIMENT_ICON_FILE = "icons/elcl16/experiment.gif"; //$NON-NLS-1$
+    private static final String ANALYSIS_ICON_FILE = "icons/ovr16/experiment_folder_ovr.png"; //$NON-NLS-1$
+    private static final String VIEW_ICON_FILE = "icons/obj16/node_obj.gif"; //$NON-NLS-1$
+
+    // ------------------------------------------------------------------------
+    // Initialization
+    // ------------------------------------------------------------------------
+
+    static {
+        FOLDER_ICON = checkNotNull(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER));
+
+        Bundle bundle = Activator.getDefault().getBundle();
+        DEFAULT_TRACE_ICON = checkNotNull(loadIcon(bundle, TRACE_ICON_FILE));
+        DEFAULT_EXPERIMENT_ICON = checkNotNull(loadIcon(bundle, EXPERIMENT_ICON_FILE));
+        DEFAULT_ANALYSIS_ICON = checkNotNull(loadIcon(bundle, ANALYSIS_ICON_FILE));
+        DEFAULT_VIEW_ICON = checkNotNull(loadIcon(bundle, VIEW_ICON_FILE));
+    }
+
+    public static @Nullable Image loadIcon(Bundle bundle, String url) {
+        Activator plugin = Activator.getDefault();
+        String key = bundle.getSymbolicName() + "/" + url; //$NON-NLS-1$
+        Image icon = plugin.getImageRegistry().get(key);
+        if (icon == null) {
+            URL imageURL = bundle.getResource(url);
+            ImageDescriptor descriptor = ImageDescriptor.createFromURL(imageURL);
+            if (descriptor != null) {
+                icon = descriptor.createImage();
+                plugin.getImageRegistry().put(key, icon);
+            }
+        }
+        return icon;
+    }
+}
index 91271eb04d6a949986f9fa11183722dbe7549992..5db6facf68878231783cbfb7d61a556958a77ec2 100644 (file)
@@ -37,7 +37,9 @@ import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.tracecompass.internal.tmf.ui.Activator;
 import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants;
@@ -228,6 +230,26 @@ public class TmfTraceElement extends TmfCommonProjectElement implements IActionF
     // Operations
     // ------------------------------------------------------------------------
 
+    /**
+     * @since 2.0
+     */
+    @Override
+    public @NonNull Image getIcon() {
+        Image icon = super.getIcon();
+        return (icon == null ? TmfProjectModelIcons.DEFAULT_TRACE_ICON : icon);
+    }
+
+    /**
+     * @since 2.0
+     */
+    @Override
+    public String getLabelText() {
+        if (getParent() instanceof TmfExperimentElement) {
+            return getElementPath();
+        }
+        return getName();
+    }
+
     /**
      * Instantiate a <code>ITmfTrace</code> object based on the trace type and
      * the corresponding extension.
index debdec07d7d74f6f55b376edb91c99500042f60e..a34538d4ba669deee8b54ab31e8d2e956209099f 100644 (file)
@@ -23,6 +23,7 @@ import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
 import org.eclipse.tracecompass.tmf.ui.properties.ReadOnlyTextPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
@@ -145,6 +146,26 @@ public class TmfTraceFolder extends TmfProjectModelElement implements IPropertyS
         }
     }
 
+    /**
+     * @since 2.0
+     */
+    @Override
+    public Image getIcon() {
+        return TmfProjectModelIcons.FOLDER_ICON;
+    }
+
+    /**
+     * @since 2.0
+     */
+    @Override
+    public String getLabelText() {
+        int nbTraces = getTraces().size();
+        if (nbTraces > 0) {
+            return (getName() + " [" + nbTraces + ']'); //$NON-NLS-1$
+        }
+        return getName();
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
index 5ac024837f398e7cdbf8e751425343f7a477736e..8c08c57a151f2a96a5bad0dfae9498860fd0116d 100644 (file)
@@ -44,4 +44,11 @@ public class TmfTracesFolder extends TmfTraceFolder {
         super(name, resource, parent);
     }
 
+    /**
+     * @since 2.0
+     */
+    @Override
+    public String getLabelText() {
+        return getName() + " [" + getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$
+    }
 }
This page took 0.034481 seconds and 5 git commands to generate.