Adapt views plugins to TMF
[deliverable/tracecompass.git] / tmf / org.lttng.scope.tmf2.views.core / src / org / lttng / scope / tmf2 / views / core / timegraph / model / provider / TimeGraphModelProvider.java
CommitLineData
735b1ca2
AM
1/*******************************************************************************
2 * Copyright (c) 2016 EfficiOS Inc., Alexandre Montplaisir
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
10package org.lttng.scope.tmf2.views.core.timegraph.model.provider;
11
a2fb04cd 12import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
735b1ca2
AM
13
14import java.util.HashSet;
15import java.util.List;
16import java.util.Set;
17
18import org.eclipse.jdt.annotation.Nullable;
19import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
20import org.lttng.scope.tmf2.views.core.timegraph.model.provider.arrows.ITimeGraphModelArrowProvider;
21import org.lttng.scope.tmf2.views.core.timegraph.model.provider.states.ITimeGraphModelStateProvider;
22import org.lttng.scope.tmf2.views.core.timegraph.model.render.tree.TimeGraphTreeRender;
23
24import com.google.common.collect.ImmutableList;
25import com.google.common.collect.ImmutableSet;
26
27import javafx.beans.property.ObjectProperty;
28import javafx.beans.property.SimpleObjectProperty;
29
30/**
31 * Base implementation of {@link ITimeGraphModelProvider}.
32 *
33 * @author Alexandre Montplaisir
34 */
35public abstract class TimeGraphModelProvider implements ITimeGraphModelProvider {
36
37 /**
38 * A "default" sorting mode, for use when only one is needed.
39 */
40 protected static final SortingMode DEFAULT_SORTING_MODE = new SortingMode(nullToEmptyString(Messages.DefaultSortingModeName));
41
42 private final String fName;
43 private final List<SortingMode> fSortingModes;
44 private final List<FilterMode> fFilterModes;
45
46 private final ITimeGraphModelStateProvider fStateProvider;
47 private final List<ITimeGraphModelArrowProvider> fArrowProviders;
48
49 private final Set<FilterMode> fActiveFilterModes = new HashSet<>();
50 private SortingMode fCurrentSortingMode;
51
52 private final ObjectProperty<@Nullable ITmfTrace> fTraceProperty = new SimpleObjectProperty<>();
53
54 /**
55 * Constructor
56 *
57 * @param name
58 * The name of this provider
59 * @param sortingModes
60 * The available sorting modes
61 * @param filterModes
62 * The available filter modes
63 * @param stateProvider
64 * The state provider part of this model provider
65 * @param arrowProviders
66 * The arrow provider(s) supplied by this model provider
67 */
68 public TimeGraphModelProvider(String name,
69 @Nullable List<SortingMode> sortingModes,
70 @Nullable List<FilterMode> filterModes,
71 ITimeGraphModelStateProvider stateProvider,
72 @Nullable List<ITimeGraphModelArrowProvider> arrowProviders) {
73 fName = name;
74
75 fStateProvider = stateProvider;
76 stateProvider.traceProperty().bind(fTraceProperty);
77
78 if (sortingModes == null || sortingModes.isEmpty()) {
79 fSortingModes = ImmutableList.of(DEFAULT_SORTING_MODE);
80 } else {
81 fSortingModes = ImmutableList.copyOf(sortingModes);
82
83 }
84 fCurrentSortingMode = fSortingModes.get(0);
85
86 if (filterModes == null || filterModes.isEmpty()) {
87 fFilterModes = ImmutableList.of();
88 } else {
89 fFilterModes = ImmutableList.copyOf(filterModes);
90 }
91
92 if (arrowProviders == null || arrowProviders.isEmpty()) {
93 fArrowProviders = ImmutableList.of();
94 } else {
95 fArrowProviders = ImmutableList.copyOf(arrowProviders);
96 }
97 fArrowProviders.forEach(ap -> ap.traceProperty().bind(fTraceProperty));
98 }
99
100 @Override
101 public final String getName() {
102 return fName;
103 }
104
105 @Override
106 public final void setTrace(@Nullable ITmfTrace trace) {
107 fTraceProperty.set(trace);
108 }
109
110 @Override
111 public final @Nullable ITmfTrace getTrace() {
112 return fTraceProperty.get();
113 }
114
115 @Override
116 public final ObjectProperty<@Nullable ITmfTrace> traceProperty() {
117 return fTraceProperty;
118 }
119
120 @Override
121 public final ITimeGraphModelStateProvider getStateProvider() {
122 return fStateProvider;
123 }
124
125 @Override
126 public final List<ITimeGraphModelArrowProvider> getArrowProviders() {
127 return fArrowProviders;
128 }
129
130 // ------------------------------------------------------------------------
131 // Render generation methods. Implementation left to subclasses.
132 // ------------------------------------------------------------------------
133
134 @Override
135 public abstract TimeGraphTreeRender getTreeRender();
136
137 // ------------------------------------------------------------------------
138 // Sorting modes
139 // ------------------------------------------------------------------------
140
141 @Override
142 public final List<SortingMode> getSortingModes() {
143 return fSortingModes;
144 }
145
146 @Override
147 public final SortingMode getCurrentSortingMode() {
148 return fCurrentSortingMode;
149 }
150
151 @Override
152 public final void setCurrentSortingMode(int index) {
153 fCurrentSortingMode = fSortingModes.get(index);
154 }
155
156 // ------------------------------------------------------------------------
157 // Filter modes
158 // ------------------------------------------------------------------------
159
160 @Override
161 public final List<FilterMode> getFilterModes() {
162 return fFilterModes;
163 }
164
165 @Override
166 public final void enableFilterMode(int index) {
167 fActiveFilterModes.add(fFilterModes.get(index));
168 }
169
170 @Override
171 public final void disableFilterMode(int index) {
172 fActiveFilterModes.remove(fFilterModes.get(index));
173 }
174
175 @Override
176 public final Set<FilterMode> getActiveFilterModes() {
177 return ImmutableSet.copyOf(fActiveFilterModes);
178 }
179
180}
This page took 0.030125 seconds and 5 git commands to generate.