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
;
21 import org
.eclipse
.swt
.graphics
.Image
;
24 * The implementation of TMF project model element.
27 * @author Francois Chouinard
29 public class TmfProjectElement
extends TmfProjectModelElement
{
31 // ------------------------------------------------------------------------
33 // ------------------------------------------------------------------------
35 private TmfTraceFolder fTraceFolder
= null;
36 private TmfExperimentFolder fExperimentFolder
= null;
38 // ------------------------------------------------------------------------
40 // ------------------------------------------------------------------------
45 * Creates the TMF project model element.
48 * The name of the project.
50 * The project reference.
54 public TmfProjectElement(String name
, IProject project
, ITmfProjectModelElement parent
) {
55 super(name
, project
, parent
);
58 // ------------------------------------------------------------------------
59 // TmfProjectModelElement
60 // ------------------------------------------------------------------------
63 public IProject
getResource() {
64 return (IProject
) super.getResource();
68 public void addChild(ITmfProjectModelElement child
) {
69 super.addChild(child
);
70 if (child
instanceof TmfTraceFolder
) {
71 fTraceFolder
= (TmfTraceFolder
) child
;
74 if (child
instanceof TmfExperimentFolder
) {
75 fExperimentFolder
= (TmfExperimentFolder
) child
;
80 // ------------------------------------------------------------------------
82 // ------------------------------------------------------------------------
85 * Returns the containing trace folder element.
86 * @return the TMF trace folder element.
88 public TmfTraceFolder
getTracesFolder() {
93 * Returns the containing experiment folder element.
94 * @return the TMF experiment folder element.
96 public TmfExperimentFolder
getExperimentsFolder() {
97 return fExperimentFolder
;
100 // ------------------------------------------------------------------------
101 // TmfProjectModelElement
102 // ------------------------------------------------------------------------
108 protected void refreshChildren() {
109 IProject project
= getResource();
111 // Get the children from the model
112 Map
<String
, ITmfProjectModelElement
> childrenMap
= new HashMap
<>();
113 for (ITmfProjectModelElement element
: getChildren()) {
114 childrenMap
.put(element
.getResource().getName(), element
);
117 // Add the model folder if the corresponding resource exists and is not
119 IFolder folder
= project
.getFolder(TmfTracesFolder
.TRACES_FOLDER_NAME
);
120 if (folder
!= null && folder
.exists()) {
121 String name
= folder
.getName();
122 ITmfProjectModelElement element
= childrenMap
.get(name
);
123 if (element
instanceof TmfTracesFolder
) {
124 childrenMap
.remove(name
);
126 element
= new TmfTracesFolder(TmfTracesFolder
.TRACES_FOLDER_NAME
, folder
, this);
129 ((TmfTracesFolder
) element
).refreshChildren();
132 // Add the model folder if the corresponding resource exists and is not
134 folder
= project
.getFolder(TmfExperimentFolder
.EXPER_FOLDER_NAME
);
135 if (folder
!= null && folder
.exists()) {
136 String name
= folder
.getName();
137 ITmfProjectModelElement element
= childrenMap
.get(name
);
138 if (element
instanceof TmfExperimentFolder
) {
139 childrenMap
.remove(name
);
141 element
= new TmfExperimentFolder(TmfExperimentFolder
.EXPER_FOLDER_NAME
, folder
, this);
144 ((TmfExperimentFolder
) element
).refreshChildren();
147 // Cleanup dangling children from the model
148 for (ITmfProjectModelElement danglingChild
: childrenMap
.values()) {
149 removeChild(danglingChild
);
154 public TmfProjectElement
getProject() {
162 public Image
getIcon() {