139cff30e47099b2ff42f25d5c7fd4f4feee0ea8
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.core / src / org / eclipse / tracecompass / tmf / core / trace / TmfTraceContext.java
1 /*******************************************************************************
2 * Copyright (c) 2013, 2016 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 * Alexandre Montplaisir - Initial API and implementation
11 * Patrick Tasse - Support selection range
12 * Xavier Raynaud - Support filters tracking
13 *******************************************************************************/
14
15 package org.eclipse.tracecompass.tmf.core.trace;
16
17 import java.util.HashMap;
18 import java.util.Map;
19
20 import org.eclipse.core.resources.IFile;
21 import org.eclipse.jdt.annotation.NonNull;
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.eclipse.jdt.annotation.Nullable;
24 import org.eclipse.tracecompass.tmf.core.filter.ITmfFilter;
25 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
26 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
27
28 import com.google.common.collect.ImmutableMap;
29
30 /**
31 * Context of a trace, which is the representation of the "view" the user
32 * currently has on this trace (window time range, selected time or time range).
33 *
34 * TODO could be extended to support the notion of current location too.
35 *
36 * FIXME Is this really the right place for the Editor File ?
37 *
38 * @author Alexandre Montplaisir
39 * @since 1.0
40 */
41 @NonNullByDefault
42 public class TmfTraceContext implements ITraceContextSignalHandler {
43
44 static final TmfTraceContext NULL_CONTEXT = new TmfTraceContext(new TmfTimeRange(TmfTimestamp.BIG_CRUNCH, TmfTimestamp.BIG_CRUNCH),
45 TmfTimeRange.NULL_RANGE, null, null);
46
47 private final TmfTimeRange fSelection;
48 private final TmfTimeRange fWindowRange;
49 private final @Nullable IFile fEditorFile;
50 private final @Nullable ITmfFilter fFilter;
51 private final Map<@NonNull String, @NonNull Object> fData;
52
53 /**
54 * Build a new trace context.
55 *
56 * @param selection
57 * The selected time range
58 * @param windowRange
59 * The visible window's time range
60 * @param editorFile
61 * The file representing the selected editor
62 * @param filter
63 * The currently applied filter. 'null' for none.
64 */
65 public TmfTraceContext(TmfTimeRange selection, TmfTimeRange windowRange,
66 @Nullable IFile editorFile, @Nullable ITmfFilter filter) {
67 fSelection = selection;
68 fWindowRange = windowRange;
69 fEditorFile = editorFile;
70 fFilter = filter;
71 fData = new HashMap<>();
72 }
73
74 /**
75 * Constructs a new trace context with data taken from a builder.
76 *
77 * @param builder
78 * the builder
79 * @since 2.3
80 */
81 public TmfTraceContext(Builder builder) {
82 fSelection = builder.selection;
83 fWindowRange = builder.windowRange;
84 fEditorFile = builder.editorFile;
85 fFilter = builder.filter;
86 fData = new HashMap<>(builder.data);
87 }
88
89 /**
90 * Return the time range representing the current active selection.
91 *
92 * @return The selected time range
93 */
94 public TmfTimeRange getSelectionRange() {
95 return fSelection;
96 }
97
98 /**
99 * Return the current window time range.
100 *
101 * @return The current window time range
102 */
103 public TmfTimeRange getWindowRange() {
104 return fWindowRange;
105 }
106
107 /**
108 * Get the editor's file
109 *
110 * @return The editor file
111 */
112 public @Nullable IFile getEditorFile() {
113 return fEditorFile;
114 }
115
116 /**
117 * Gets the filter applied to the current trace
118 *
119 * @return The current filter, or <code>null</code> if there is none
120 */
121 public @Nullable ITmfFilter getFilter() {
122 return fFilter;
123 }
124
125 /**
126 * Store a data for the trace
127 *
128 * @param key
129 * The id of the data
130 * @param value
131 * The value of the data
132 * @since 2.1
133 */
134 public synchronized void setData(String key, Object value) {
135 fData.put(key, value);
136 }
137
138 /**
139 * Copy data into the data map
140 *
141 * @param data
142 * The map of data to copy
143 * @since 2.1
144 */
145 public synchronized void setData(Map<String, Object> data) {
146 fData.putAll(data);
147 }
148
149 /**
150 * Get the data for the specific key
151 *
152 * @param key
153 * The id of the data
154 * @return The data or null if the key do not exist
155 * @since 2.1
156 */
157 public synchronized @Nullable Object getData(String key) {
158 return fData.get(key);
159 }
160
161 /**
162 * Get a copy of the data map
163 *
164 * @return The data map copy
165 * @since 2.1
166 */
167 public synchronized Map<String, Object> getData() {
168 return ImmutableMap.copyOf(fData);
169 }
170
171 /**
172 * Returns a new builder that is initialized with the data from this trace
173 * context.
174 *
175 * @return the builder
176 * @since 2.3
177 */
178 public Builder builder() {
179 return new Builder(this);
180 }
181
182 /**
183 * A builder for creating trace context instances.
184 *
185 * @since 2.3
186 */
187 public class Builder {
188 private TmfTimeRange selection;
189 private TmfTimeRange windowRange;
190 private @Nullable IFile editorFile;
191 private @Nullable ITmfFilter filter;
192 private Map<String, Object> data;
193
194 /**
195 * Constructor
196 *
197 * @param ctx
198 * the trace context used to initialize the builder
199 */
200 public Builder(TmfTraceContext ctx) {
201 this.selection = ctx.fSelection;
202 this.windowRange = ctx.fWindowRange;
203 this.editorFile = ctx.fEditorFile;
204 this.filter = ctx.fFilter;
205 this.data = new HashMap<>(ctx.fData);
206 }
207
208 /**
209 * Build the trace context.
210 *
211 * @return a trace context
212 */
213 public TmfTraceContext build() {
214 return new TmfTraceContext(this);
215 }
216
217 /**
218 * Sets the selected time range.
219 *
220 * @param selection
221 * the selected time range
222 * @return this {@code Builder} object
223 */
224 public Builder setSelection(TmfTimeRange selection) {
225 this.selection = selection;
226 return this;
227 }
228
229 /**
230 * Sets the window range.
231 *
232 * @param windowRange
233 * the window range
234 * @return this {@code Builder} object
235 */
236 public Builder setWindowRange(TmfTimeRange windowRange) {
237 this.windowRange = windowRange;
238 return this;
239 }
240
241 /**
242 * Sets the current filter.
243 *
244 * @param filter
245 * the current filter
246 * @return this {@code Builder} object
247 */
248 public Builder setFilter(@Nullable ITmfFilter filter) {
249 this.filter = filter;
250 return this;
251 }
252 }
253
254 @Override
255 public String toString() {
256 return getClass().getSimpleName() + "[fSelection=" + fSelection + //$NON-NLS-1$
257 ", fWindowRange=" + fWindowRange + ']'; //$NON-NLS-1$
258 }
259
260 }
This page took 0.034771 seconds and 4 git commands to generate.