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
.linuxtools
.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 // ------------------------------------------------------------------------
43 * Creates the TMF project model element.
44 * @param name The name of the project.
45 * @param project The project reference.
46 * @param parent The parent element
48 public TmfProjectElement(String name
, IProject project
, ITmfProjectModelElement parent
) {
49 super(name
, project
, parent
);
52 // ------------------------------------------------------------------------
53 // TmfProjectModelElement
54 // ------------------------------------------------------------------------
57 public IProject
getResource() {
58 return (IProject
) fResource
;
62 public void addChild(ITmfProjectModelElement child
) {
63 super.addChild(child
);
64 if (child
instanceof TmfTraceFolder
) {
65 fTraceFolder
= (TmfTraceFolder
) child
;
68 if (child
instanceof TmfExperimentFolder
) {
69 fExperimentFolder
= (TmfExperimentFolder
) child
;
74 // ------------------------------------------------------------------------
76 // ------------------------------------------------------------------------
79 * Returns the containing trace folder element.
80 * @return the TMF trace folder element.
82 public TmfTraceFolder
getTracesFolder() {
87 * Returns the containing experiment folder element.
88 * @return the TMF experiment folder element.
90 public TmfExperimentFolder
getExperimentsFolder() {
91 return fExperimentFolder
;
94 // ------------------------------------------------------------------------
95 // TmfProjectModelElement
96 // ------------------------------------------------------------------------
99 void refreshChildren() {
100 IProject project
= getResource();
102 // Get the children from the model
103 Map
<String
, ITmfProjectModelElement
> childrenMap
= new HashMap
<>();
104 for (ITmfProjectModelElement element
: getChildren()) {
105 childrenMap
.put(element
.getResource().getName(), element
);
108 // Add the model folder if the corresponding resource exists and is not
110 IFolder folder
= project
.getFolder(TmfTracesFolder
.TRACES_FOLDER_NAME
);
111 if (folder
!= null && folder
.exists()) {
112 String name
= folder
.getName();
113 ITmfProjectModelElement element
= childrenMap
.get(name
);
114 if (element
instanceof TmfTracesFolder
) {
115 childrenMap
.remove(name
);
117 element
= new TmfTracesFolder(TmfTracesFolder
.TRACES_FOLDER_NAME
, folder
, this);
119 ((TmfTracesFolder
) element
).refreshChildren();
122 // Add the model folder if the corresponding resource exists and is not
124 folder
= project
.getFolder(TmfExperimentFolder
.EXPER_FOLDER_NAME
);
125 if (folder
!= null && folder
.exists()) {
126 String name
= folder
.getName();
127 ITmfProjectModelElement element
= childrenMap
.get(name
);
128 if (element
instanceof TmfExperimentFolder
) {
129 childrenMap
.remove(name
);
131 element
= new TmfExperimentFolder(TmfExperimentFolder
.EXPER_FOLDER_NAME
, folder
, this);
133 ((TmfExperimentFolder
) element
).refreshChildren();
136 // Cleanup dangling children from the model
137 for (ITmfProjectModelElement danglingChild
: childrenMap
.values()) {
138 removeChild(danglingChild
);
143 public TmfProjectElement
getProject() {