tmf: Clean up tmf.ui.project.model
[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;
2bdf0193
AM
26import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
27import org.eclipse.tracecompass.tmf.ui.properties.ReadOnlyTextPropertyDescriptor;
12c155f5
FC
28import org.eclipse.ui.views.properties.IPropertyDescriptor;
29import 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 */
38public 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}
This page took 0.125083 seconds and 5 git commands to generate.