1 /*******************************************************************************
2 * Copyright (c) 2011, 2014 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Francois Chouinard - Initial API and implementation
11 * Patrick Tasse - Refactor resource change listener
12 *******************************************************************************/
14 package org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
;
16 import java
.util
.HashMap
;
19 import org
.eclipse
.core
.resources
.IFolder
;
20 import org
.eclipse
.core
.resources
.IProject
;
23 * The implementation of TMF project model element.
26 * @author Francois Chouinard
28 public class TmfProjectElement
extends TmfProjectModelElement
{
30 // ------------------------------------------------------------------------
32 // ------------------------------------------------------------------------
34 private TmfTraceFolder fTraceFolder
= null;
35 private TmfExperimentFolder fExperimentFolder
= null;
37 // ------------------------------------------------------------------------
39 // ------------------------------------------------------------------------
44 * Creates the TMF project model element.
47 * The name of the project.
49 * The project reference.
53 public TmfProjectElement(String name
, IProject project
, ITmfProjectModelElement parent
) {
54 super(name
, project
, parent
);
57 // ------------------------------------------------------------------------
58 // TmfProjectModelElement
59 // ------------------------------------------------------------------------
62 public IProject
getResource() {
63 return (IProject
) super.getResource();
67 public void addChild(ITmfProjectModelElement child
) {
68 super.addChild(child
);
69 if (child
instanceof TmfTraceFolder
) {
70 fTraceFolder
= (TmfTraceFolder
) child
;
73 if (child
instanceof TmfExperimentFolder
) {
74 fExperimentFolder
= (TmfExperimentFolder
) child
;
79 // ------------------------------------------------------------------------
81 // ------------------------------------------------------------------------
84 * Returns the containing trace folder element.
85 * @return the TMF trace folder element.
87 public TmfTraceFolder
getTracesFolder() {
92 * Returns the containing experiment folder element.
93 * @return the TMF experiment folder element.
95 public TmfExperimentFolder
getExperimentsFolder() {
96 return fExperimentFolder
;
99 // ------------------------------------------------------------------------
100 // TmfProjectModelElement
101 // ------------------------------------------------------------------------
107 protected void refreshChildren() {
108 IProject project
= getResource();
110 // Get the children from the model
111 Map
<String
, ITmfProjectModelElement
> childrenMap
= new HashMap
<>();
112 for (ITmfProjectModelElement element
: getChildren()) {
113 childrenMap
.put(element
.getResource().getName(), element
);
116 // Add the model folder if the corresponding resource exists and is not
118 IFolder folder
= project
.getFolder(TmfTracesFolder
.TRACES_FOLDER_NAME
);
119 if (folder
!= null && folder
.exists()) {
120 String name
= folder
.getName();
121 ITmfProjectModelElement element
= childrenMap
.get(name
);
122 if (element
instanceof TmfTracesFolder
) {
123 childrenMap
.remove(name
);
125 element
= new TmfTracesFolder(TmfTracesFolder
.TRACES_FOLDER_NAME
, folder
, this);
128 ((TmfTracesFolder
) element
).refreshChildren();
131 // Add the model folder if the corresponding resource exists and is not
133 folder
= project
.getFolder(TmfExperimentFolder
.EXPER_FOLDER_NAME
);
134 if (folder
!= null && folder
.exists()) {
135 String name
= folder
.getName();
136 ITmfProjectModelElement element
= childrenMap
.get(name
);
137 if (element
instanceof TmfExperimentFolder
) {
138 childrenMap
.remove(name
);
140 element
= new TmfExperimentFolder(TmfExperimentFolder
.EXPER_FOLDER_NAME
, folder
, this);
143 ((TmfExperimentFolder
) element
).refreshChildren();
146 // Cleanup dangling children from the model
147 for (ITmfProjectModelElement danglingChild
: childrenMap
.values()) {
148 removeChild(danglingChild
);
153 public TmfProjectElement
getProject() {