/*******************************************************************************
- * 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
*/
// ------------------------------------------------------------------------
/**
* 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
// 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);
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
+
/**
- * Returns the containing trace folder element.
+ * Returns the containing trace folder element.
* @return the TMF trace folder element.
*/
public TmfTraceFolder getTracesFolder() {
}
// ------------------------------------------------------------------------
- // 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;