tmf: Clean up tmf.ui.project.model
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / project / model / TmfProjectElement.java
CommitLineData
12c155f5 1/*******************************************************************************
60ae41e1 2 * Copyright (c) 2011, 2014 Ericsson
f28d404e 3 *
12c155f5
FC
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
f28d404e 8 *
12c155f5
FC
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
f537c959 11 * Patrick Tasse - Refactor resource change listener
12c155f5
FC
12 *******************************************************************************/
13
2bdf0193 14package org.eclipse.tracecompass.tmf.ui.project.model;
12c155f5 15
f537c959
PT
16import java.util.HashMap;
17import java.util.Map;
18
19import org.eclipse.core.resources.IFolder;
12c155f5 20import org.eclipse.core.resources.IProject;
12c155f5
FC
21
22/**
f28d404e
AM
23 * The implementation of TMF project model element.
24 *
b544077e
BH
25 * @version 1.0
26 * @author Francois Chouinard
12c155f5
FC
27 */
28public class TmfProjectElement extends TmfProjectModelElement {
29
30 // ------------------------------------------------------------------------
31 // Attributes
32 // ------------------------------------------------------------------------
33
b544077e
BH
34 private TmfTraceFolder fTraceFolder = null;
35 private TmfExperimentFolder fExperimentFolder = null;
12c155f5
FC
36
37 // ------------------------------------------------------------------------
38 // Constructor
39 // ------------------------------------------------------------------------
b3e4798c 40
b544077e
BH
41 /**
42 * Constructor.
f28d404e
AM
43 *
44 * Creates the TMF project model element.
b3e4798c
AM
45 *
46 * @param name
47 * The name of the project.
48 * @param project
49 * The project reference.
50 * @param parent
51 * The parent element
b544077e 52 */
12c155f5
FC
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() {
b3e4798c 63 return (IProject) super.getResource();
12c155f5
FC
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 // ------------------------------------------------------------------------
11252342 82
b544077e 83 /**
f28d404e 84 * Returns the containing trace folder element.
b544077e
BH
85 * @return the TMF trace folder element.
86 */
12c155f5
FC
87 public TmfTraceFolder getTracesFolder() {
88 return fTraceFolder;
89 }
90
b544077e
BH
91 /**
92 * Returns the containing experiment folder element.
93 * @return the TMF experiment folder element.
94 */
12c155f5
FC
95 public TmfExperimentFolder getExperimentsFolder() {
96 return fExperimentFolder;
97 }
98
99 // ------------------------------------------------------------------------
f537c959 100 // TmfProjectModelElement
12c155f5
FC
101 // ------------------------------------------------------------------------
102
b3e4798c
AM
103 /**
104 * @since 2.0
105 */
12c155f5 106 @Override
b3e4798c 107 protected void refreshChildren() {
f537c959 108 IProject project = getResource();
12c155f5 109
f537c959
PT
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
339d539c 118 IFolder folder = project.getFolder(TmfTracesFolder.TRACES_FOLDER_NAME);
f537c959
PT
119 if (folder != null && folder.exists()) {
120 String name = folder.getName();
121 ITmfProjectModelElement element = childrenMap.get(name);
339d539c 122 if (element instanceof TmfTracesFolder) {
f537c959
PT
123 childrenMap.remove(name);
124 } else {
339d539c 125 element = new TmfTracesFolder(TmfTracesFolder.TRACES_FOLDER_NAME, folder, this);
b3e4798c 126 addChild(element);
f537c959 127 }
339d539c 128 ((TmfTracesFolder) element).refreshChildren();
f537c959
PT
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);
b3e4798c 141 addChild(element);
f537c959
PT
142 }
143 ((TmfExperimentFolder) element).refreshChildren();
144 }
145
146 // Cleanup dangling children from the model
147 for (ITmfProjectModelElement danglingChild : childrenMap.values()) {
148 removeChild(danglingChild);
12c155f5
FC
149 }
150 }
151
152 @Override
153 public TmfProjectElement getProject() {
154 return this;
155 }
12c155f5 156}
This page took 0.11903 seconds and 5 git commands to generate.