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