Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java')
-rw-r--r--tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java146
1 files changed, 146 insertions, 0 deletions
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java
new file mode 100644
index 0000000000..45cfcb4aea
--- /dev/null
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectElement.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * 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.tracecompass.tmf.ui.project.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+
+/**
+ * The implementation of TMF project model element.
+ *
+ * @version 1.0
+ * @author Francois Chouinard
+ */
+public class TmfProjectElement extends TmfProjectModelElement {
+
+ // ------------------------------------------------------------------------
+ // Attributes
+ // ------------------------------------------------------------------------
+
+ private TmfTraceFolder fTraceFolder = null;
+ private TmfExperimentFolder fExperimentFolder = null;
+
+ // ------------------------------------------------------------------------
+ // Constructor
+ // ------------------------------------------------------------------------
+ /**
+ * Constructor.
+ *
+ * Creates the TMF project model element.
+ * @param name The name of the project.
+ * @param project The project reference.
+ * @param parent The parent element
+ */
+ public TmfProjectElement(String name, IProject project, ITmfProjectModelElement parent) {
+ super(name, project, parent);
+ }
+
+ // ------------------------------------------------------------------------
+ // TmfProjectModelElement
+ // ------------------------------------------------------------------------
+
+ @Override
+ public IProject getResource() {
+ return (IProject) fResource;
+ }
+
+ @Override
+ public void addChild(ITmfProjectModelElement child) {
+ super.addChild(child);
+ if (child instanceof TmfTraceFolder) {
+ fTraceFolder = (TmfTraceFolder) child;
+ return;
+ }
+ if (child instanceof TmfExperimentFolder) {
+ fExperimentFolder = (TmfExperimentFolder) child;
+ return;
+ }
+ }
+
+ // ------------------------------------------------------------------------
+ // Accessors
+ // ------------------------------------------------------------------------
+
+ /**
+ * Returns the containing trace folder element.
+ * @return the TMF trace folder element.
+ */
+ public TmfTraceFolder getTracesFolder() {
+ return fTraceFolder;
+ }
+
+ /**
+ * Returns the containing experiment folder element.
+ * @return the TMF experiment folder element.
+ */
+ public TmfExperimentFolder getExperimentsFolder() {
+ return fExperimentFolder;
+ }
+
+ // ------------------------------------------------------------------------
+ // TmfProjectModelElement
+ // ------------------------------------------------------------------------
+
+ @Override
+ void refreshChildren() {
+ IProject project = getResource();
+
+ // 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);
+ }
+ }
+
+ @Override
+ public TmfProjectElement getProject() {
+ return this;
+ }
+}

Back to the top