Commit | Line | Data |
---|---|---|
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 | ||
13 | package org.eclipse.linuxtools.lttng.ui.views.project.model; | |
14 | ||
15 | import java.lang.reflect.Array; | |
16 | ||
17 | import org.eclipse.core.resources.IFolder; | |
18 | import org.eclipse.core.resources.IResource; | |
19 | import org.eclipse.core.runtime.CoreException; | |
20 | ||
21 | /** | |
22 | * <b><u>LTTngExperimentFolderNode</u></b> | |
23 | * <p> | |
24 | * TODO: Implement me. Please. | |
25 | */ | |
26 | public class LTTngExperimentFolderNode extends LTTngProjectTreeNode { | |
27 | ||
28 | private final IFolder fExperimentFolder; | |
29 | ||
30 | // ------------------------------------------------------------------------ | |
31 | // Constructors | |
32 | // ------------------------------------------------------------------------ | |
33 | ||
34 | public LTTngExperimentFolderNode(IFolder folder) { | |
35 | this(null, folder); | |
36 | } | |
37 | ||
38 | public LTTngExperimentFolderNode(ILTTngProjectTreeNode parent, IFolder folder) { | |
39 | super(parent); | |
40 | fExperimentFolder = folder; | |
41 | } | |
42 | ||
43 | // ------------------------------------------------------------------------ | |
44 | // LTTngProjectTreeNode | |
45 | // ------------------------------------------------------------------------ | |
46 | ||
d4011df2 | 47 | @Override |
6e512b93 ASL |
48 | public String getName() { |
49 | return fExperimentFolder.getName(); | |
50 | } | |
51 | ||
52 | @Override | |
53 | public void refreshChildren() { | |
54 | try { | |
55 | IResource[] resources = fExperimentFolder.members(); | |
56 | for (IResource resource : resources) { | |
57 | if (resource instanceof IFolder) { | |
58 | LTTngExperimentNode node = find(resource.getName()); | |
59 | if (node == null) { | |
60 | node = new LTTngExperimentNode(this, (IFolder) resource); | |
61 | fChildren.add(node); | |
62 | } | |
63 | } | |
64 | } | |
65 | for (ILTTngProjectTreeNode node : fChildren) { | |
66 | if (exists(node.getName(), resources)) { | |
67 | node.refreshChildren(); | |
68 | } | |
69 | else { | |
70 | fChildren.remove(node); | |
71 | } | |
72 | } | |
73 | } catch (CoreException e) { | |
74 | } | |
75 | } | |
76 | ||
77 | private LTTngExperimentNode find(String name) { | |
78 | for (ILTTngProjectTreeNode node : fChildren) { | |
79 | if (node instanceof LTTngExperimentNode && node.getName().equals(name)) { | |
80 | return (LTTngExperimentNode) node; | |
81 | } | |
82 | } | |
83 | return null; | |
84 | } | |
85 | ||
86 | private boolean exists(String name, IResource[] resources) { | |
87 | for (IResource resource : resources) { | |
88 | if (resource.getName().equals(name)) | |
89 | return true; | |
90 | } | |
91 | return false; | |
92 | } | |
93 | ||
94 | // ------------------------------------------------------------------------ | |
95 | // Accessors | |
96 | // ------------------------------------------------------------------------ | |
97 | ||
98 | /** | |
99 | * @return | |
100 | */ | |
101 | public LTTngProjectNode getProject() { | |
102 | return (LTTngProjectNode) getParent(); | |
103 | } | |
104 | ||
105 | /** | |
106 | * @return | |
107 | */ | |
108 | public IFolder getFolder() { | |
109 | return fExperimentFolder; | |
110 | } | |
111 | ||
112 | /** | |
113 | * @return | |
114 | */ | |
115 | public LTTngExperimentNode[] getExperiments() { | |
116 | LTTngExperimentNode[] result = (LTTngExperimentNode[]) Array.newInstance(LTTngExperimentNode.class, fChildren.size()); | |
117 | return fChildren.toArray(result); | |
118 | } | |
119 | ||
120 | // ------------------------------------------------------------------------ | |
121 | // Modifiers | |
122 | // ------------------------------------------------------------------------ | |
123 | ||
124 | // No longer needed: handled by the IResourceChangeListener in the View | |
125 | public void addExperiment(IFolder experiment) { | |
126 | // LTTngExperimentNode node = new LTTngExperimentNode(this, experiment); | |
127 | // fChildren.add(node); | |
128 | // refresh(); | |
129 | } | |
130 | ||
131 | } |