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