Commit | Line | Data |
---|---|---|
12c155f5 | 1 | /******************************************************************************* |
60ae41e1 | 2 | * Copyright (c) 2011, 2014 Ericsson |
013a5f1c | 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 | |
013a5f1c | 8 | * |
12c155f5 FC |
9 | * Contributors: |
10 | * Francois Chouinard - Initial API and implementation | |
339d539c | 11 | * Patrick Tasse - Add support for folder elements |
12c155f5 FC |
12 | *******************************************************************************/ |
13 | ||
2bdf0193 | 14 | package org.eclipse.tracecompass.tmf.ui.project.model; |
12c155f5 FC |
15 | |
16 | import java.util.ArrayList; | |
5a5c2fc7 | 17 | import java.util.Arrays; |
f537c959 | 18 | import java.util.HashMap; |
12c155f5 | 19 | import java.util.List; |
f537c959 | 20 | import java.util.Map; |
12c155f5 FC |
21 | |
22 | import org.eclipse.core.resources.IFolder; | |
f537c959 PT |
23 | import org.eclipse.core.resources.IResource; |
24 | import org.eclipse.core.runtime.CoreException; | |
45fc1883 | 25 | import org.eclipse.jdt.annotation.NonNull; |
2bdf0193 AM |
26 | import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType; |
27 | import org.eclipse.tracecompass.tmf.ui.properties.ReadOnlyTextPropertyDescriptor; | |
12c155f5 FC |
28 | import org.eclipse.ui.views.properties.IPropertyDescriptor; |
29 | import org.eclipse.ui.views.properties.IPropertySource2; | |
12c155f5 FC |
30 | |
31 | /** | |
339d539c PT |
32 | * Implementation of trace folder model element representing a trace folder in |
33 | * the project. | |
12c155f5 | 34 | * <p> |
b544077e BH |
35 | * @version 1.0 |
36 | * @author Francois Chouinard | |
12c155f5 FC |
37 | */ |
38 | public class TmfTraceFolder extends TmfProjectModelElement implements IPropertySource2 { | |
39 | ||
40 | // ------------------------------------------------------------------------ | |
41 | // Constants | |
42 | // ------------------------------------------------------------------------ | |
12c155f5 | 43 | |
067cd9de BH |
44 | private static final String INFO_CATEGORY = "Info"; //$NON-NLS-1$ |
45 | private static final String NAME = "name"; //$NON-NLS-1$ | |
46 | private static final String PATH = "path"; //$NON-NLS-1$ | |
47 | private static final String LOCATION = "location"; //$NON-NLS-1$ | |
12c155f5 | 48 | |
067cd9de BH |
49 | private static final ReadOnlyTextPropertyDescriptor NAME_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(NAME, NAME); |
50 | private static final ReadOnlyTextPropertyDescriptor PATH_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(PATH, PATH); | |
51 | private static final ReadOnlyTextPropertyDescriptor LOCATION_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(LOCATION, LOCATION); | |
12c155f5 | 52 | |
b3e4798c | 53 | private static final IPropertyDescriptor[] DESCRIPTORS = { NAME_DESCRIPTOR, PATH_DESCRIPTOR, LOCATION_DESCRIPTOR }; |
12c155f5 FC |
54 | |
55 | static { | |
067cd9de BH |
56 | NAME_DESCRIPTOR.setCategory(INFO_CATEGORY); |
57 | PATH_DESCRIPTOR.setCategory(INFO_CATEGORY); | |
58 | LOCATION_DESCRIPTOR.setCategory(INFO_CATEGORY); | |
12c155f5 FC |
59 | } |
60 | ||
61 | // ------------------------------------------------------------------------ | |
62 | // Constructor | |
63 | // ------------------------------------------------------------------------ | |
339d539c | 64 | |
b544077e | 65 | /** |
b3e4798c AM |
66 | * Constructor. Creates folder model element under the project. |
67 | * | |
68 | * @param name | |
69 | * The name of trace folder. | |
70 | * @param resource | |
71 | * The folder resource. | |
72 | * @param parent | |
73 | * The parent element (project). | |
b544077e | 74 | */ |
12c155f5 FC |
75 | public TmfTraceFolder(String name, IFolder resource, TmfProjectElement parent) { |
76 | super(name, resource, parent); | |
12c155f5 FC |
77 | } |
78 | ||
339d539c | 79 | /** |
b3e4798c AM |
80 | * Constructor. Creates folder model element under another folder. |
81 | * | |
82 | * @param name | |
83 | * The name of trace folder. | |
84 | * @param resource | |
85 | * The folder resource. | |
86 | * @param parent | |
87 | * The parent element (folder). | |
339d539c PT |
88 | */ |
89 | public TmfTraceFolder(String name, IFolder resource, TmfTraceFolder parent) { | |
90 | super(name, resource, parent); | |
339d539c PT |
91 | } |
92 | ||
12c155f5 FC |
93 | // ------------------------------------------------------------------------ |
94 | // TmfProjectModelElement | |
95 | // ------------------------------------------------------------------------ | |
013a5f1c | 96 | |
12c155f5 FC |
97 | @Override |
98 | public IFolder getResource() { | |
b3e4798c | 99 | return (IFolder) super.getResource(); |
12c155f5 FC |
100 | } |
101 | ||
b3e4798c AM |
102 | /** |
103 | * @since 2.0 | |
104 | */ | |
12c155f5 | 105 | @Override |
b3e4798c | 106 | protected void refreshChildren() { |
f537c959 PT |
107 | IFolder folder = getResource(); |
108 | ||
109 | // Get the children from the model | |
110 | Map<String, ITmfProjectModelElement> childrenMap = new HashMap<>(); | |
111 | for (ITmfProjectModelElement element : getChildren()) { | |
112 | childrenMap.put(element.getResource().getName(), element); | |
113 | } | |
114 | ||
115 | try { | |
116 | IResource[] members = folder.members(); | |
117 | for (IResource resource : members) { | |
118 | String name = resource.getName(); | |
339d539c | 119 | boolean isFolder = resource instanceof IFolder && |
4b3b667b | 120 | (TmfTraceType.getTraceTypeId(resource) == null); |
f537c959 | 121 | ITmfProjectModelElement element = childrenMap.get(name); |
339d539c | 122 | if (isFolder && !(element instanceof TmfTraceFolder) && !(element instanceof TmfTraceElement)) { |
a4a116c3 | 123 | if (TmfTraceType.isDirectoryTrace(resource.getLocationURI().getPath())) { |
339d539c PT |
124 | element = new TmfTraceElement(name, resource, this); |
125 | } else { | |
126 | element = new TmfTraceFolder(name, (IFolder) resource, this); | |
127 | } | |
b3e4798c | 128 | addChild(element); |
339d539c | 129 | } else if (!isFolder && !(element instanceof TmfTraceElement)) { |
f537c959 | 130 | element = new TmfTraceElement(name, resource, this); |
b3e4798c | 131 | addChild(element); |
339d539c PT |
132 | } else { |
133 | childrenMap.remove(name); | |
f537c959 | 134 | } |
202956f1 AM |
135 | if (element != null) { |
136 | ((TmfProjectModelElement) element).refreshChildren(); | |
137 | } | |
f537c959 PT |
138 | } |
139 | } catch (CoreException e) { | |
140 | } | |
141 | ||
142 | // Cleanup dangling children from the model | |
143 | for (ITmfProjectModelElement danglingChild : childrenMap.values()) { | |
144 | removeChild(danglingChild); | |
145 | } | |
12c155f5 FC |
146 | } |
147 | ||
148 | // ------------------------------------------------------------------------ | |
149 | // Operations | |
150 | // ------------------------------------------------------------------------ | |
11252342 | 151 | |
b544077e | 152 | /** |
339d539c | 153 | * Returns a list of trace elements under the folder element, recursively. |
b544077e BH |
154 | * @return list of trace model elements |
155 | */ | |
12c155f5 FC |
156 | public List<TmfTraceElement> getTraces() { |
157 | List<ITmfProjectModelElement> children = getChildren(); | |
507b1336 | 158 | List<TmfTraceElement> traces = new ArrayList<>(); |
12c155f5 FC |
159 | for (ITmfProjectModelElement child : children) { |
160 | if (child instanceof TmfTraceElement) { | |
161 | traces.add((TmfTraceElement) child); | |
339d539c PT |
162 | } else if (child instanceof TmfTraceFolder) { |
163 | traces.addAll(((TmfTraceFolder) child).getTraces()); | |
12c155f5 FC |
164 | } |
165 | } | |
166 | return traces; | |
167 | } | |
168 | ||
45fc1883 BH |
169 | /** |
170 | * Gets the traces elements under this folder containing the given resources | |
171 | * | |
172 | * @param resources | |
173 | * resources to search for | |
174 | * @return list of trace elements | |
175 | * @since 2.0 | |
176 | */ | |
177 | public @NonNull List<TmfTraceElement> getTraceElements(@NonNull List<IResource> resources) { | |
178 | List<TmfTraceElement> traceElements = new ArrayList<>(); | |
179 | List<TmfTraceElement> children = getTraces(); | |
180 | for (IResource resource : resources) { | |
181 | TmfTraceElement el = children.stream() | |
182 | .filter(traceElement -> | |
183 | ((traceElement != null) && | |
184 | traceElement.getResource().equals(resource))) | |
185 | .findFirst() | |
186 | .orElse(null); | |
187 | ||
188 | if (el != null) { | |
189 | traceElements.add(el); | |
190 | } | |
191 | } | |
192 | return traceElements; | |
193 | } | |
194 | ||
12c155f5 FC |
195 | // ------------------------------------------------------------------------ |
196 | // IPropertySource2 | |
197 | // ------------------------------------------------------------------------ | |
198 | ||
199 | @Override | |
200 | public Object getEditableValue() { | |
201 | return null; | |
202 | } | |
203 | ||
204 | @Override | |
205 | public IPropertyDescriptor[] getPropertyDescriptors() { | |
067cd9de | 206 | return Arrays.copyOf(DESCRIPTORS, DESCRIPTORS.length); |
12c155f5 FC |
207 | } |
208 | ||
209 | @Override | |
210 | public Object getPropertyValue(Object id) { | |
211 | ||
067cd9de | 212 | if (NAME.equals(id)) { |
12c155f5 | 213 | return getName(); |
013a5f1c | 214 | } |
12c155f5 | 215 | |
067cd9de | 216 | if (PATH.equals(id)) { |
12c155f5 | 217 | return getPath().toString(); |
013a5f1c | 218 | } |
12c155f5 | 219 | |
067cd9de | 220 | if (LOCATION.equals(id)) { |
12c155f5 | 221 | return getLocation().toString(); |
013a5f1c | 222 | } |
12c155f5 FC |
223 | |
224 | return null; | |
225 | } | |
226 | ||
227 | @Override | |
228 | public void resetPropertyValue(Object id) { | |
229 | } | |
230 | ||
231 | @Override | |
232 | public void setPropertyValue(Object id, Object value) { | |
233 | } | |
234 | ||
235 | @Override | |
236 | public boolean isPropertyResettable(Object id) { | |
237 | return false; | |
238 | } | |
239 | ||
240 | @Override | |
241 | public boolean isPropertySet(Object id) { | |
242 | return false; | |
243 | } | |
244 | ||
245 | } |