45cfcb4aea86d9f3d47332400a5e932e0a4928c1
[deliverable/tracecompass.git] / 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 * Constructor.
42 *
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
47 */
48 public TmfProjectElement(String name, IProject project, ITmfProjectModelElement parent) {
49 super(name, project, parent);
50 }
51
52 // ------------------------------------------------------------------------
53 // TmfProjectModelElement
54 // ------------------------------------------------------------------------
55
56 @Override
57 public IProject getResource() {
58 return (IProject) fResource;
59 }
60
61 @Override
62 public void addChild(ITmfProjectModelElement child) {
63 super.addChild(child);
64 if (child instanceof TmfTraceFolder) {
65 fTraceFolder = (TmfTraceFolder) child;
66 return;
67 }
68 if (child instanceof TmfExperimentFolder) {
69 fExperimentFolder = (TmfExperimentFolder) child;
70 return;
71 }
72 }
73
74 // ------------------------------------------------------------------------
75 // Accessors
76 // ------------------------------------------------------------------------
77
78 /**
79 * Returns the containing trace folder element.
80 * @return the TMF trace folder element.
81 */
82 public TmfTraceFolder getTracesFolder() {
83 return fTraceFolder;
84 }
85
86 /**
87 * Returns the containing experiment folder element.
88 * @return the TMF experiment folder element.
89 */
90 public TmfExperimentFolder getExperimentsFolder() {
91 return fExperimentFolder;
92 }
93
94 // ------------------------------------------------------------------------
95 // TmfProjectModelElement
96 // ------------------------------------------------------------------------
97
98 @Override
99 void refreshChildren() {
100 IProject project = getResource();
101
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);
106 }
107
108 // Add the model folder if the corresponding resource exists and is not
109 // accounted for
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);
116 } else {
117 element = new TmfTracesFolder(TmfTracesFolder.TRACES_FOLDER_NAME, folder, this);
118 }
119 ((TmfTracesFolder) element).refreshChildren();
120 }
121
122 // Add the model folder if the corresponding resource exists and is not
123 // accounted for
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);
130 } else {
131 element = new TmfExperimentFolder(TmfExperimentFolder.EXPER_FOLDER_NAME, folder, this);
132 }
133 ((TmfExperimentFolder) element).refreshChildren();
134 }
135
136 // Cleanup dangling children from the model
137 for (ITmfProjectModelElement danglingChild : childrenMap.values()) {
138 removeChild(danglingChild);
139 }
140 }
141
142 @Override
143 public TmfProjectElement getProject() {
144 return this;
145 }
146 }
This page took 0.032882 seconds and 4 git commands to generate.