1 /*******************************************************************************
2 * Copyright (c) 2011, 2014 Ericsson
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
10 * Francois Chouinard - Initial API and implementation
11 * Patrick Tasse - Add support for folder elements
12 *******************************************************************************/
14 package org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
;
16 import java
.util
.ArrayList
;
17 import java
.util
.Arrays
;
18 import java
.util
.HashMap
;
19 import java
.util
.List
;
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
;
31 * Implementation of trace folder model element representing a trace folder in
35 * @author Francois Chouinard
37 public class TmfTraceFolder
extends TmfProjectModelElement
implements IPropertySource2
{
39 // ------------------------------------------------------------------------
41 // ------------------------------------------------------------------------
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$
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
);
52 private static final IPropertyDescriptor
[] sfDescriptors
= { sfNameDescriptor
, sfPathDescriptor
,
53 sfLocationDescriptor
};
56 sfNameDescriptor
.setCategory(sfInfoCategory
);
57 sfPathDescriptor
.setCategory(sfInfoCategory
);
58 sfLocationDescriptor
.setCategory(sfInfoCategory
);
61 // ------------------------------------------------------------------------
63 // ------------------------------------------------------------------------
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).
72 public TmfTraceFolder(String name
, IFolder resource
, TmfProjectElement parent
) {
73 super(name
, resource
, parent
);
74 parent
.addChild(this);
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).
84 public TmfTraceFolder(String name
, IFolder resource
, TmfTraceFolder parent
) {
85 super(name
, resource
, parent
);
86 parent
.addChild(this);
89 // ------------------------------------------------------------------------
90 // TmfProjectModelElement
91 // ------------------------------------------------------------------------
94 public IFolder
getResource() {
95 return (IFolder
) fResource
;
99 void refreshChildren() {
100 IFolder folder
= getResource();
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
);
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);
119 element
= new TmfTraceFolder(name
, (IFolder
) resource
, this);
121 } else if (!isFolder
&& !(element
instanceof TmfTraceElement
)) {
122 element
= new TmfTraceElement(name
, resource
, this);
124 childrenMap
.remove(name
);
126 ((TmfProjectModelElement
) element
).refreshChildren();
128 } catch (CoreException e
) {
131 // Cleanup dangling children from the model
132 for (ITmfProjectModelElement danglingChild
: childrenMap
.values()) {
133 removeChild(danglingChild
);
137 // ------------------------------------------------------------------------
139 // ------------------------------------------------------------------------
142 * Returns a list of trace elements under the folder element, recursively.
143 * @return list of trace model elements
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());
158 // ------------------------------------------------------------------------
160 // ------------------------------------------------------------------------
163 public Object
getEditableValue() {
168 public IPropertyDescriptor
[] getPropertyDescriptors() {
169 return Arrays
.copyOf(sfDescriptors
, sfDescriptors
.length
);
173 public Object
getPropertyValue(Object id
) {
175 if (sfName
.equals(id
)) {
179 if (sfPath
.equals(id
)) {
180 return getPath().toString();
183 if (sfLocation
.equals(id
)) {
184 return getLocation().toString();
191 public void resetPropertyValue(Object id
) {
195 public void setPropertyValue(Object id
, Object value
) {
199 public boolean isPropertyResettable(Object id
) {
204 public boolean isPropertySet(Object id
) {