tmf: Support folders in tracing projects
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / project / model / TmfAnalysisElement.java
index 559a655f469d52eee6701734c017759766249e11..c697266c9bb2e22d6c6f5f8f91745cc59e7dc57c 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 École Polytechnique de Montréal
+ * Copyright (c) 2013, 2014 École Polytechnique de Montréal
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -8,12 +8,15 @@
  *
  * Contributors:
  *   Geneviève Bastien - Initial API and implementation
+ *   Patrick Tasse - Add support for folder elements
  *******************************************************************************/
 
 package org.eclipse.linuxtools.tmf.ui.project.model;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IResource;
@@ -51,33 +54,25 @@ public class TmfAnalysisElement extends TmfProjectModelElement {
     protected TmfAnalysisElement(String name, IResource resource, ITmfProjectModelElement parent, String id) {
         super(name, resource, parent);
         fAnalysisId = id;
-        refreshOutputs();
+        parent.addChild(this);
     }
 
-    private void refreshOutputs() {
-        List<TmfAnalysisOutputElement> outputs = getAvailableOutputs();
+    // ------------------------------------------------------------------------
+    // TmfProjectModelElement
+    // ------------------------------------------------------------------------
 
-        /* Remove children */
-        getChildren().clear();
-
-        /* Add the children again */
-        for (TmfAnalysisOutputElement module : outputs) {
-            addChild(module);
+    @Override
+    void refreshChildren() {
+        /* Refresh the outputs of this analysis */
+        Map<String, TmfAnalysisOutputElement> childrenMap = new HashMap<>();
+        for (TmfAnalysisOutputElement output : getAvailableOutputs()) {
+            childrenMap.put(output.getName(), output);
         }
 
-    }
-
-    /**
-     * Get the list of analysis elements
-     *
-     * @return Array of analysis elements
-     */
-    public List<TmfAnalysisOutputElement> getAvailableOutputs() {
-        List<TmfAnalysisOutputElement> list = new ArrayList<TmfAnalysisOutputElement>();
-
         IAnalysisModuleHelper helper = TmfAnalysisManager.getAnalysisModule(fAnalysisId);
         if (helper == null) {
-            return list;
+            deleteOutputs();
+            return;
         }
 
         /** Get base path for resource */
@@ -86,33 +81,57 @@ public class TmfAnalysisElement extends TmfProjectModelElement {
             path = ((IFolder) fResource).getFullPath();
         }
 
-        /* We can get a list of available outputs once the analysis is instantiated when the trace is opened */
+        /*
+         * We can get a list of available outputs once the analysis is
+         * instantiated when the trace is opened
+         */
         ITmfProjectModelElement parent = getParent();
-        if (parent instanceof TmfTraceElement) {
-            ITmfTrace trace = ((TmfTraceElement) parent).getTrace();
+        if (parent instanceof TmfCommonProjectElement) {
+            ITmfTrace trace = ((TmfCommonProjectElement) parent).getTrace();
             if (trace == null) {
-                return list;
+                deleteOutputs();
+                return;
             }
 
             IAnalysisModule module = trace.getAnalysisModule(fAnalysisId);
             if (module == null) {
-                return list;
+                deleteOutputs();
+                return;
             }
 
             for (IAnalysisOutput output : module.getOutputs()) {
-                if (fResource instanceof IFolder) {
+                TmfAnalysisOutputElement outputElement = childrenMap.remove(output.getName());
+                if (outputElement == null) {
                     IFolder newresource = ResourcesPlugin.getWorkspace().getRoot().getFolder(path.append(output.getName()));
-                    TmfAnalysisOutputElement out = new TmfAnalysisOutputElement(output.getName(), newresource, this, output);
-                    list.add(out);
+                    outputElement = new TmfAnalysisOutputElement(output.getName(), newresource, this, output);
                 }
+                outputElement.refreshChildren();
             }
         }
-        return list;
+        /* Remove outputs that are not children of this analysis anymore */
+        for (TmfAnalysisOutputElement output : childrenMap.values()) {
+            removeChild(output);
+        }
     }
 
-    @Override
-    public TmfProjectElement getProject() {
-        return getParent().getProject();
+    // ------------------------------------------------------------------------
+    // Operations
+    // ------------------------------------------------------------------------
+
+    /**
+     * Get the list of analysis output model elements under this analysis
+     *
+     * @return Array of analysis output elements
+     */
+    public List<TmfAnalysisOutputElement> getAvailableOutputs() {
+        List<ITmfProjectModelElement> children = getChildren();
+        List<TmfAnalysisOutputElement> outputs = new ArrayList<>();
+        for (ITmfProjectModelElement child : children) {
+            if (child instanceof TmfAnalysisOutputElement) {
+                outputs.add((TmfAnalysisOutputElement) child);
+            }
+        }
+        return outputs;
     }
 
     /**
@@ -130,6 +149,19 @@ public class TmfAnalysisElement extends TmfProjectModelElement {
      * @return The help message
      */
     public String getHelpMessage() {
+        ITmfProjectModelElement parent = getParent();
+
+        if (parent instanceof TmfTraceElement) {
+            TmfTraceElement traceElement = (TmfTraceElement) parent;
+            ITmfTrace trace = traceElement.getTrace();
+            if (trace != null) {
+                IAnalysisModule module = trace.getAnalysisModule(fAnalysisId);
+                if (module != null) {
+                    return module.getHelpText();
+                }
+            }
+        }
+
         IAnalysisModuleHelper helper = TmfAnalysisManager.getAnalysisModule(fAnalysisId);
         if (helper == null) {
             return new String();
@@ -164,8 +196,16 @@ public class TmfAnalysisElement extends TmfProjectModelElement {
         return helper.getBundle();
     }
 
+    /** Delete all outputs under this analysis element */
+    private void deleteOutputs() {
+        for (TmfAnalysisOutputElement output : getAvailableOutputs()) {
+            removeChild(output);
+        }
+    }
+
     /**
-     * Make sure the trace this analysis is associated to is the currently selected one
+     * Make sure the trace this analysis is associated to is the currently
+     * selected one
      */
     public void activateParent() {
         ITmfProjectModelElement parent = getParent();
This page took 0.026088 seconds and 5 git commands to generate.