2010-10-26 Francois Chouinard <fchouinard@gmail.com> Contribution for Bug309042
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / project / model / LTTngProjectNode.java
CommitLineData
6e512b93
ASL
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
13package org.eclipse.linuxtools.lttng.ui.views.project.model;
14
15import java.util.ArrayList;
16import java.util.List;
17
18import org.eclipse.core.resources.IFolder;
19import org.eclipse.core.resources.IProject;
20import org.eclipse.core.resources.IResource;
21import org.eclipse.core.runtime.CoreException;
22import org.eclipse.linuxtools.lttng.ui.views.project.LTTngProjectNature;
23
24/**
25 * <b><u>LTTngProjectNode</u></b>
26 * <p>
27 * TODO: Implement me. Please.
28 */
29public class LTTngProjectNode extends LTTngProjectTreeNode {
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 fIsLTTngProject;
36 private boolean fIsOpen;
37 private LTTngTraceFolderNode fTracesFolder;
38 private LTTngExperimentFolderNode fExperimentsFolder;
39
40 // ------------------------------------------------------------------------
41 // Constructors
42 // ------------------------------------------------------------------------
43
44 public LTTngProjectNode(IProject project) {
45 this(null, project);
46 }
47
48 public LTTngProjectNode(ILTTngProjectTreeNode parent, IProject project) {
49 super(parent);
50 fProject = project;
51 updateState();
52 }
53
54 // ------------------------------------------------------------------------
55 // LTTngProjectTreeNode
56 // ------------------------------------------------------------------------
57
d4011df2 58 @Override
6e512b93
ASL
59 public String getName() {
60 return fProject.getName();
61 }
62
63 @Override
64 public void refreshChildren() {
65
66 if (!(fIsOpen && fIsLTTngProject))
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 LTTngTraceFolderNode(this, (IFolder) resource);
76 fChildren.add(fTracesFolder);
77 } else
78 if (name.equals(EXPER_FOLDER_NAME) && !isIncluded(false, name, fChildren)) {
79 fExperimentsFolder = new LTTngExperimentFolderNode(this, (IFolder) resource);
80 fChildren.add(fExperimentsFolder);
81 }
82 }
83 }
84 List<ILTTngProjectTreeNode> toRemove = new ArrayList<ILTTngProjectTreeNode>();
85 for (ILTTngProjectTreeNode node : fChildren) {
86 if (exists(node.getName(), resources)) {
87 node.refreshChildren();
88 }
89 else {
90 toRemove.add(node);
91 }
92 }
93 for (ILTTngProjectTreeNode node : toRemove) {
94 fChildren.remove(node);
95 }
96
97 } catch (CoreException e) {
98 }
99 }
100
101 private boolean isIncluded(boolean isTraces, String name, List<ILTTngProjectTreeNode> list) {
102 boolean found = false;
103 for (ILTTngProjectTreeNode node : list) {
104 if (node instanceof LTTngTraceFolderNode && isTraces) {
105 found |= node.getName().equals(name);
106 } else
107 if (node instanceof LTTngExperimentFolderNode && !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 isLTTngProject(IProject project) {
147 boolean result = false;
148 if (project != null && project.isAccessible()) {
149 try {
150 result = project.hasNature(LTTngProjectNature.ID);
151 } catch (CoreException e) {
152 }
153 }
154 return result;
155 }
156
157 public void updateState() {
158 fIsOpen = (fProject != null) ? fProject.isAccessible() : false;
159 fIsLTTngProject = isLTTngProject(fProject);
160 }
161
162 // ------------------------------------------------------------------------
163 // Accessors
164 // ------------------------------------------------------------------------
165
166 /**
167 * @return
168 */
169 public boolean isLTTngProject() {
170 return fIsLTTngProject;
171 }
172
173 /**
174 * @return
175 */
176 public boolean isOpen() {
177 return fIsOpen;
178 }
179
180 /**
181 * @return
182 */
183 public IProject getProject() {
184 return fProject;
185 }
186
187 /**
188 * @return
189 */
190 public LTTngTraceFolderNode getTracesFolder() {
191 return fTracesFolder;
192 }
193
194 /**
195 * @return
196 */
197 public LTTngExperimentFolderNode getExperimentsFolder() {
198 return fExperimentsFolder;
199 }
200
201}
This page took 0.033346 seconds and 5 git commands to generate.