tmf: Support folders in tracing projects
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / project / model / TmfProjectElement.java
index 652fab786e81e611a47db6854e751f710f0502e1..29265e4a0990c98d2e12464c38cd3e6f9d1f1430 100644 (file)
@@ -1,32 +1,27 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2012 Ericsson
- * 
+ * Copyright (c) 2011, 2014 Ericsson
+ *
  * 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
- * 
+ *
  * Contributors:
  *   Francois Chouinard - Initial API and implementation
+ *   Patrick Tasse - Refactor resource change listener
  *******************************************************************************/
 
 package org.eclipse.linuxtools.tmf.ui.project.model;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IViewReference;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.navigator.CommonNavigator;
-import org.eclipse.ui.navigator.CommonViewer;
 
 /**
- * The implementation of TMF project model element. 
- * 
+ * The implementation of TMF project model element.
+ *
  * @version 1.0
  * @author Francois Chouinard
  */
@@ -44,8 +39,8 @@ public class TmfProjectElement extends TmfProjectModelElement {
     // ------------------------------------------------------------------------
     /**
      * Constructor.
-     * 
-     * Creates the TMF project model element. 
+     *
+     * Creates the TMF project model element.
      * @param name The name of the project.
      * @param project The project reference.
      * @param parent The parent element
@@ -58,19 +53,11 @@ public class TmfProjectElement extends TmfProjectModelElement {
     // TmfProjectModelElement
     // ------------------------------------------------------------------------
 
-    /*
-     * (non-Javadoc)
-     * @see org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectModelElement#getResource()
-     */
     @Override
     public IProject getResource() {
         return (IProject) fResource;
     }
 
-    /*
-     * (non-Javadoc)
-     * @see org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectModelElement#addChild(org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement)
-     */
     @Override
     public void addChild(ITmfProjectModelElement child) {
         super.addChild(child);
@@ -87,8 +74,9 @@ public class TmfProjectElement extends TmfProjectModelElement {
     // ------------------------------------------------------------------------
     // Accessors
     // ------------------------------------------------------------------------
+
     /**
-     * Returns the containing trace folder element. 
+     * Returns the containing trace folder element.
      * @return the TMF trace folder element.
      */
     public TmfTraceFolder getTracesFolder() {
@@ -104,49 +92,53 @@ public class TmfProjectElement extends TmfProjectModelElement {
     }
 
     // ------------------------------------------------------------------------
-    // TmfProjectElement
+    // TmfProjectModelElement
     // ------------------------------------------------------------------------
 
-    /*
-     * (non-Javadoc)
-     * @see org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectModelElement#refresh()
-     */
     @Override
-    public void refresh() {
-        Display.getDefault().asyncExec(new Runnable(){
-            @Override
-            public void run() {
-                IWorkbench wb = PlatformUI.getWorkbench();
-                IWorkbenchWindow wbWindow = wb.getActiveWorkbenchWindow();
-                if (wbWindow == null) {
-                    return;
-                }
-                IWorkbenchPage activePage = wbWindow.getActivePage();
-                for (IViewReference viewReference : activePage.getViewReferences()) {
-                    IViewPart viewPart = viewReference.getView(false);
-                    if (viewPart instanceof CommonNavigator) {
-                        CommonViewer commonViewer = ((CommonNavigator) viewPart).getCommonViewer();
-                        commonViewer.refresh();
-                    }
-                }
-            }});
-    }
+    void refreshChildren() {
+        IProject project = getResource();
 
-    /*
-     * (non-Javadoc)
-     * @see org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectModelElement#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
-     */
-    @Override
-    public void resourceChanged(IResourceChangeEvent event) {
-        if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
-            refresh();
+        // Get the children from the model
+        Map<String, ITmfProjectModelElement> childrenMap = new HashMap<>();
+        for (ITmfProjectModelElement element : getChildren()) {
+            childrenMap.put(element.getResource().getName(), element);
+        }
+
+        // Add the model folder if the corresponding resource exists and is not
+        // accounted for
+        IFolder folder = project.getFolder(TmfTracesFolder.TRACES_FOLDER_NAME);
+        if (folder != null && folder.exists()) {
+            String name = folder.getName();
+            ITmfProjectModelElement element = childrenMap.get(name);
+            if (element instanceof TmfTracesFolder) {
+                childrenMap.remove(name);
+            } else {
+                element = new TmfTracesFolder(TmfTracesFolder.TRACES_FOLDER_NAME, folder, this);
+            }
+            ((TmfTracesFolder) element).refreshChildren();
+        }
+
+        // Add the model folder if the corresponding resource exists and is not
+        // accounted for
+        folder = project.getFolder(TmfExperimentFolder.EXPER_FOLDER_NAME);
+        if (folder != null && folder.exists()) {
+            String name = folder.getName();
+            ITmfProjectModelElement element = childrenMap.get(name);
+            if (element instanceof TmfExperimentFolder) {
+                childrenMap.remove(name);
+            } else {
+                element = new TmfExperimentFolder(TmfExperimentFolder.EXPER_FOLDER_NAME, folder, this);
+            }
+            ((TmfExperimentFolder) element).refreshChildren();
+        }
+
+        // Cleanup dangling children from the model
+        for (ITmfProjectModelElement danglingChild : childrenMap.values()) {
+            removeChild(danglingChild);
         }
     }
 
-    /*
-     * (non-Javadoc)
-     * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#getProject()
-     */
     @Override
     public TmfProjectElement getProject() {
         return this;
This page took 0.027952 seconds and 5 git commands to generate.