2010-10-26 Francois Chouinard <fchouinard@gmail.com> Contribution for Bug309042
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / project / model / TmfProjectNode.java
1 /*******************************************************************************
2 * Copyright (c) 2009, 2010 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 *******************************************************************************/
12
13 package org.eclipse.linuxtools.tmf.ui.views.project.model;
14
15 import java.util.ArrayList;
16 import java.util.List;
17
18 import org.eclipse.core.resources.IFolder;
19 import org.eclipse.core.resources.IProject;
20 import org.eclipse.core.resources.IResource;
21 import org.eclipse.core.runtime.CoreException;
22 import org.eclipse.linuxtools.tmf.ui.views.project.TmfProjectNature;
23
24 /**
25 * <b><u>TmfProjectNode</u></b>
26 * <p>
27 * TODO: Implement me. Please.
28 */
29 public class TmfProjectNode extends TmfProjectTreeNode {
30
31 public static final String TRACE_FOLDER_NAME = "Traces";
32 public static final String EXPER_FOLDER_NAME = "Experiments";
33
34 private final IProject fProject;
35 private boolean fIsTmfProject;
36 private boolean fIsOpen;
37 private TmfTraceFolderNode fTracesFolder;
38 private TmfExperimentFolderNode fExperimentsFolder;
39
40 // ------------------------------------------------------------------------
41 // Constructors
42 // ------------------------------------------------------------------------
43
44 public TmfProjectNode(IProject project) {
45 this(null, project);
46 }
47
48 public TmfProjectNode(ITmfProjectTreeNode parent, IProject project) {
49 super(parent);
50 fProject = project;
51 updateState();
52 }
53
54 // ------------------------------------------------------------------------
55 // TmfProjectTreeNode
56 // ------------------------------------------------------------------------
57
58 @Override
59 public String getName() {
60 return fProject.getName();
61 }
62
63 @Override
64 public void refreshChildren() {
65
66 if (!(fIsOpen && fIsTmfProject))
67 return;
68
69 try {
70 IResource[] resources = fProject.members();
71 for (IResource resource : resources) {
72 if (resource.getType() == IResource.FOLDER) {
73 String name = resource.getName();
74 if (name.equals(TRACE_FOLDER_NAME) && !isIncluded(true, name, fChildren)) {
75 fTracesFolder = new TmfTraceFolderNode(this, (IFolder) resource);
76 fChildren.add(fTracesFolder);
77 } else
78 if (name.equals(EXPER_FOLDER_NAME) && !isIncluded(false, name, fChildren)) {
79 fExperimentsFolder = new TmfExperimentFolderNode(this, (IFolder) resource);
80 fChildren.add(fExperimentsFolder);
81 }
82 }
83 }
84 List<ITmfProjectTreeNode> toRemove = new ArrayList<ITmfProjectTreeNode>();
85 for (ITmfProjectTreeNode node : fChildren) {
86 if (exists(node.getName(), resources)) {
87 node.refreshChildren();
88 }
89 else {
90 toRemove.add(node);
91 }
92 }
93 for (ITmfProjectTreeNode node : toRemove) {
94 fChildren.remove(node);
95 }
96
97 } catch (CoreException e) {
98 }
99 }
100
101 private boolean isIncluded(boolean isTraces, String name, List<ITmfProjectTreeNode> list) {
102 boolean found = false;
103 for (ITmfProjectTreeNode node : list) {
104 if (node instanceof TmfTraceFolderNode && isTraces) {
105 found |= node.getName().equals(name);
106 } else
107 if (node instanceof TmfExperimentFolderNode && !isTraces) {
108 found |= node.getName().equals(name);
109 }
110 }
111 return found;
112 }
113
114 private boolean exists(String name, IResource[] resources) {
115 for (IResource resource : resources) {
116 if (resource.getName().equals(name))
117 return true;
118 }
119 return false;
120 }
121
122 // ------------------------------------------------------------------------
123 // Modifiers
124 // ------------------------------------------------------------------------
125
126 public void openProject() {
127 try {
128 fProject.open(null);
129 updateState();
130 refreshChildren();
131 } catch (CoreException e) {
132 e.printStackTrace();
133 }
134 }
135
136 public void closeProject() {
137 try {
138 fProject.close(null);
139 updateState();
140 removeChildren();
141 } catch (CoreException e) {
142 e.printStackTrace();
143 }
144 }
145
146 private boolean isTmfProject(IProject project) {
147 boolean result = false;
148 if (project != null && project.isAccessible()) {
149 try {
150 result = project.hasNature(TmfProjectNature.ID);
151 } catch (CoreException e) {
152 }
153 }
154 return result;
155 }
156
157 public void updateState() {
158 fIsOpen = (fProject != null) ? fProject.isAccessible() : false;
159 if (!fIsOpen) {
160 removeChildren();
161 }
162 fIsTmfProject = isTmfProject(fProject);
163 }
164
165 // ------------------------------------------------------------------------
166 // Accessors
167 // ------------------------------------------------------------------------
168
169 /**
170 * @return
171 */
172 public boolean isTmfProject() {
173 return fIsTmfProject;
174 }
175
176 /**
177 * @return
178 */
179 public boolean isOpen() {
180 return fIsOpen;
181 }
182
183 /**
184 * @return
185 */
186 public IProject getProject() {
187 return fProject;
188 }
189
190 /**
191 * @return
192 */
193 public TmfTraceFolderNode getTracesFolder() {
194 return fTracesFolder;
195 }
196
197 /**
198 * @return
199 */
200 public TmfExperimentFolderNode getExperimentsFolder() {
201 return fExperimentsFolder;
202 }
203
204 }
This page took 0.034147 seconds and 5 git commands to generate.