96b360b96444248ffcbd0adc60044e12f37f4419
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / project / model / TmfProjectElement.java
1 /*******************************************************************************
2 * Copyright (c) 2011, 2014 Ericsson
3 *
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
8 *
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 * Patrick Tasse - Refactor resource change listener
12 *******************************************************************************/
13
14 package org.eclipse.tracecompass.tmf.ui.project.model;
15
16 import java.util.HashMap;
17 import java.util.Map;
18
19 import org.eclipse.core.resources.IFolder;
20 import org.eclipse.core.resources.IProject;
21
22 /**
23 * The implementation of TMF project model element.
24 *
25 * @version 1.0
26 * @author Francois Chouinard
27 */
28 public class TmfProjectElement extends TmfProjectModelElement {
29
30 // ------------------------------------------------------------------------
31 // Attributes
32 // ------------------------------------------------------------------------
33
34 private TmfTraceFolder fTraceFolder = null;
35 private TmfExperimentFolder fExperimentFolder = null;
36
37 // ------------------------------------------------------------------------
38 // Constructor
39 // ------------------------------------------------------------------------
40
41 /**
42 * Constructor.
43 *
44 * Creates the TMF project model element.
45 *
46 * @param name
47 * The name of the project.
48 * @param project
49 * The project reference.
50 * @param parent
51 * The parent element
52 */
53 public TmfProjectElement(String name, IProject project, ITmfProjectModelElement parent) {
54 super(name, project, parent);
55 }
56
57 // ------------------------------------------------------------------------
58 // TmfProjectModelElement
59 // ------------------------------------------------------------------------
60
61 @Override
62 public IProject getResource() {
63 return (IProject) super.getResource();
64 }
65
66 @Override
67 public void addChild(ITmfProjectModelElement child) {
68 super.addChild(child);
69 if (child instanceof TmfTraceFolder) {
70 fTraceFolder = (TmfTraceFolder) child;
71 return;
72 }
73 if (child instanceof TmfExperimentFolder) {
74 fExperimentFolder = (TmfExperimentFolder) child;
75 return;
76 }
77 }
78
79 // ------------------------------------------------------------------------
80 // Accessors
81 // ------------------------------------------------------------------------
82
83 /**
84 * Returns the containing trace folder element.
85 * @return the TMF trace folder element.
86 */
87 public TmfTraceFolder getTracesFolder() {
88 return fTraceFolder;
89 }
90
91 /**
92 * Returns the containing experiment folder element.
93 * @return the TMF experiment folder element.
94 */
95 public TmfExperimentFolder getExperimentsFolder() {
96 return fExperimentFolder;
97 }
98
99 // ------------------------------------------------------------------------
100 // TmfProjectModelElement
101 // ------------------------------------------------------------------------
102
103 /**
104 * @since 2.0
105 */
106 @Override
107 protected void refreshChildren() {
108 IProject project = getResource();
109
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);
114 }
115
116 // Add the model folder if the corresponding resource exists and is not
117 // accounted for
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);
124 } else {
125 element = new TmfTracesFolder(TmfTracesFolder.TRACES_FOLDER_NAME, folder, this);
126 addChild(element);
127 }
128 ((TmfTracesFolder) element).refreshChildren();
129 }
130
131 // Add the model folder if the corresponding resource exists and is not
132 // accounted for
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);
139 } else {
140 element = new TmfExperimentFolder(TmfExperimentFolder.EXPER_FOLDER_NAME, folder, this);
141 addChild(element);
142 }
143 ((TmfExperimentFolder) element).refreshChildren();
144 }
145
146 // Cleanup dangling children from the model
147 for (ITmfProjectModelElement danglingChild : childrenMap.values()) {
148 removeChild(danglingChild);
149 }
150 }
151
152 @Override
153 public TmfProjectElement getProject() {
154 return this;
155 }
156 }
This page took 0.033492 seconds and 4 git commands to generate.