tmf: Move plugins to their own sub-directory
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / project / model / TmfTraceFolder.java
1 /*******************************************************************************
2 * Copyright (c) 2011, 2014 Ericsson
3 *
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
8 *
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 * Patrick Tasse - Add support for folder elements
12 *******************************************************************************/
13
14 package org.eclipse.tracecompass.tmf.ui.project.model;
15
16 import java.util.ArrayList;
17 import java.util.Arrays;
18 import java.util.HashMap;
19 import java.util.List;
20 import java.util.Map;
21
22 import org.eclipse.core.resources.IFolder;
23 import org.eclipse.core.resources.IResource;
24 import org.eclipse.core.runtime.CoreException;
25 import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
26 import org.eclipse.tracecompass.tmf.ui.properties.ReadOnlyTextPropertyDescriptor;
27 import org.eclipse.ui.views.properties.IPropertyDescriptor;
28 import org.eclipse.ui.views.properties.IPropertySource2;
29
30 /**
31 * Implementation of trace folder model element representing a trace folder in
32 * the project.
33 * <p>
34 * @version 1.0
35 * @author Francois Chouinard
36 */
37 public class TmfTraceFolder extends TmfProjectModelElement implements IPropertySource2 {
38
39 // ------------------------------------------------------------------------
40 // Constants
41 // ------------------------------------------------------------------------
42
43 private static final String sfInfoCategory = "Info"; //$NON-NLS-1$
44 private static final String sfName = "name"; //$NON-NLS-1$
45 private static final String sfPath = "path"; //$NON-NLS-1$
46 private static final String sfLocation = "location"; //$NON-NLS-1$
47
48 private static final ReadOnlyTextPropertyDescriptor sfNameDescriptor = new ReadOnlyTextPropertyDescriptor(sfName, sfName);
49 private static final ReadOnlyTextPropertyDescriptor sfPathDescriptor = new ReadOnlyTextPropertyDescriptor(sfPath, sfPath);
50 private static final ReadOnlyTextPropertyDescriptor sfLocationDescriptor = new ReadOnlyTextPropertyDescriptor(sfLocation, sfLocation);
51
52 private static final IPropertyDescriptor[] sfDescriptors = { sfNameDescriptor, sfPathDescriptor,
53 sfLocationDescriptor };
54
55 static {
56 sfNameDescriptor.setCategory(sfInfoCategory);
57 sfPathDescriptor.setCategory(sfInfoCategory);
58 sfLocationDescriptor.setCategory(sfInfoCategory);
59 }
60
61 // ------------------------------------------------------------------------
62 // Constructor
63 // ------------------------------------------------------------------------
64
65 /**
66 * Constructor.
67 * Creates folder model element under the project.
68 * @param name The name of trace folder.
69 * @param resource The folder resource.
70 * @param parent The parent element (project).
71 */
72 public TmfTraceFolder(String name, IFolder resource, TmfProjectElement parent) {
73 super(name, resource, parent);
74 parent.addChild(this);
75 }
76
77 /**
78 * Constructor.
79 * Creates folder model element under another folder.
80 * @param name The name of trace folder.
81 * @param resource The folder resource.
82 * @param parent The parent element (folder).
83 */
84 public TmfTraceFolder(String name, IFolder resource, TmfTraceFolder parent) {
85 super(name, resource, parent);
86 parent.addChild(this);
87 }
88
89 // ------------------------------------------------------------------------
90 // TmfProjectModelElement
91 // ------------------------------------------------------------------------
92
93 @Override
94 public IFolder getResource() {
95 return (IFolder) fResource;
96 }
97
98 @Override
99 void refreshChildren() {
100 IFolder folder = getResource();
101
102 // Get the children from the model
103 Map<String, ITmfProjectModelElement> childrenMap = new HashMap<>();
104 for (ITmfProjectModelElement element : getChildren()) {
105 childrenMap.put(element.getResource().getName(), element);
106 }
107
108 try {
109 IResource[] members = folder.members();
110 for (IResource resource : members) {
111 String name = resource.getName();
112 boolean isFolder = resource instanceof IFolder &&
113 (TmfTraceType.getTraceTypeId(resource) == null);
114 ITmfProjectModelElement element = childrenMap.get(name);
115 if (isFolder && !(element instanceof TmfTraceFolder) && !(element instanceof TmfTraceElement)) {
116 if (TmfTraceType.isDirectoryTrace(resource.getLocationURI().getPath())) {
117 element = new TmfTraceElement(name, resource, this);
118 } else {
119 element = new TmfTraceFolder(name, (IFolder) resource, this);
120 }
121 } else if (!isFolder && !(element instanceof TmfTraceElement)) {
122 element = new TmfTraceElement(name, resource, this);
123 } else {
124 childrenMap.remove(name);
125 }
126 ((TmfProjectModelElement) element).refreshChildren();
127 }
128 } catch (CoreException e) {
129 }
130
131 // Cleanup dangling children from the model
132 for (ITmfProjectModelElement danglingChild : childrenMap.values()) {
133 removeChild(danglingChild);
134 }
135 }
136
137 // ------------------------------------------------------------------------
138 // Operations
139 // ------------------------------------------------------------------------
140
141 /**
142 * Returns a list of trace elements under the folder element, recursively.
143 * @return list of trace model elements
144 */
145 public List<TmfTraceElement> getTraces() {
146 List<ITmfProjectModelElement> children = getChildren();
147 List<TmfTraceElement> traces = new ArrayList<>();
148 for (ITmfProjectModelElement child : children) {
149 if (child instanceof TmfTraceElement) {
150 traces.add((TmfTraceElement) child);
151 } else if (child instanceof TmfTraceFolder) {
152 traces.addAll(((TmfTraceFolder) child).getTraces());
153 }
154 }
155 return traces;
156 }
157
158 // ------------------------------------------------------------------------
159 // IPropertySource2
160 // ------------------------------------------------------------------------
161
162 @Override
163 public Object getEditableValue() {
164 return null;
165 }
166
167 @Override
168 public IPropertyDescriptor[] getPropertyDescriptors() {
169 return Arrays.copyOf(sfDescriptors, sfDescriptors.length);
170 }
171
172 @Override
173 public Object getPropertyValue(Object id) {
174
175 if (sfName.equals(id)) {
176 return getName();
177 }
178
179 if (sfPath.equals(id)) {
180 return getPath().toString();
181 }
182
183 if (sfLocation.equals(id)) {
184 return getLocation().toString();
185 }
186
187 return null;
188 }
189
190 @Override
191 public void resetPropertyValue(Object id) {
192 }
193
194 @Override
195 public void setPropertyValue(Object id, Object value) {
196 }
197
198 @Override
199 public boolean isPropertyResettable(Object id) {
200 return false;
201 }
202
203 @Override
204 public boolean isPropertySet(Object id) {
205 return false;
206 }
207
208 }
This page took 0.035447 seconds and 5 git commands to generate.