--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2016 EfficiOS Inc., Alexandre Montplaisir
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.internal.provisional.tmf.core.views.timegraph2;
+
+import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jdt.annotation.Nullable;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+public abstract class TimeGraphModelRenderProvider implements ITimeGraphModelRenderProvider {
+
+ protected static final SortingMode DEFAULT_SORTING_MODE = new SortingMode(nullToEmptyString(Messages.DefaultSortingModeName));
+
+ private final List<SortingMode> fSortingModes;
+ private final List<FilterMode> fFilterModes;
+
+ private SortingMode fCurrentSortingMode;
+ private Set<FilterMode> fActiveFilterModes = new HashSet<>();
+
+ private long fConfiguredTimeRangeStart = 0L;
+ private long fConfiguredTimeRangeEnd = Long.MAX_VALUE;
+
+ protected TimeGraphModelRenderProvider(@Nullable List<SortingMode> sortingModes,
+ @Nullable List<FilterMode> filterModes) {
+ if (sortingModes == null || sortingModes.isEmpty()) {
+ fSortingModes = ImmutableList.of(DEFAULT_SORTING_MODE);
+ } else {
+ fSortingModes = ImmutableList.copyOf(sortingModes);
+
+ }
+ fCurrentSortingMode = fSortingModes.get(0);
+
+ if (filterModes == null || filterModes.isEmpty()) {
+ fFilterModes = ImmutableList.of();
+ } else {
+ fFilterModes = ImmutableList.copyOf(filterModes);
+ }
+ }
+
+ // ------------------------------------------------------------------------
+ // Sorting modes
+ // ------------------------------------------------------------------------
+
+ @Override
+ public List<SortingMode> getSortingModes() {
+ return fSortingModes;
+ }
+
+ @Override
+ public SortingMode getCurrentSortingMode() {
+ return fCurrentSortingMode;
+ }
+
+ @Override
+ public void setCurrentSortingMode(int index) {
+ fCurrentSortingMode = fSortingModes.get(index);
+ }
+
+ // ------------------------------------------------------------------------
+ // Filter modes
+ // ------------------------------------------------------------------------
+
+ @Override
+ public List<FilterMode> getFilterModes() {
+ return fFilterModes;
+ }
+
+ @Override
+ public void enableFilterMode(int index) {
+ fActiveFilterModes.add(fFilterModes.get(index));
+ }
+
+ @Override
+ public void disableFilterMode(int index) {
+ fActiveFilterModes.remove(fFilterModes.get(index));
+ }
+
+ @Override
+ public Set<FilterMode> getActiveFilterModes() {
+ return ImmutableSet.copyOf(fActiveFilterModes);
+ }
+
+ // ------------------------------------------------------------------------
+ // Other configuration options
+ // ------------------------------------------------------------------------
+
+ public long getConfiguredTimeRangeStart() {
+ return fConfiguredTimeRangeStart;
+ }
+
+ public long getConfiguredTimeRangeEnd() {
+ return fConfiguredTimeRangeEnd;
+ }
+
+ @Override
+ public void setConfiguredTimeRange(long start, long end) {
+ if (start < 0 || start > end) {
+ throw new IllegalArgumentException();
+ }
+ fConfiguredTimeRangeStart = start;
+ fConfiguredTimeRangeEnd = end;
+ }
+}