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