blob: dfe1254a8e2d3cf8d94af1490f75fdb46e16d955 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2019 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.tracecompass.internal.tmf.core.model.filters;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.internal.provisional.tmf.core.model.filters.VirtualTableQueryFilter;
import org.eclipse.tracecompass.tmf.core.dataprovider.DataProviderParameterUtils;
import org.eclipse.tracecompass.tmf.core.model.filters.FilterTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.SelectionTimeQueryFilter;
import org.eclipse.tracecompass.tmf.core.model.filters.TimeQueryFilter;
/**
* Utility class to deal with data providers parameters. It can be use to create
* parameters map from the old filter's API or create filters with a map.
*
* @author Simon Delisle
*/
public class FetchParametersUtils {
private FetchParametersUtils() {
// Default constructor
}
/**
* Create a {@link TimeQueryFilter} with the given map of parameters
*
* @param parameters
* Map of parameters
* @return A {@link TimeQueryFilter} or null if the parameters are invalid
*/
public static @Nullable TimeQueryFilter createTimeQuery(Map<String, Object> parameters) {
List<Long> timeRequested = DataProviderParameterUtils.extractTimeRequested(parameters);
return timeRequested == null ? null : new TimeQueryFilter(timeRequested);
}
/**
* Create a {@link SelectionTimeQueryFilter} with the given map of parameters
*
* @param parameters
* Map of parameters
* @return A {@link SelectionTimeQueryFilter} or null if the parameters are invalid
*/
public static @Nullable SelectionTimeQueryFilter createSelectionTimeQuery(Map<String, Object> parameters) {
List<Long> timeRequested = DataProviderParameterUtils.extractTimeRequested(parameters);
List<Long> selectedItems = DataProviderParameterUtils.extractSelectedItems(parameters);
return (timeRequested == null || selectedItems == null) ? null : new SelectionTimeQueryFilter(timeRequested, selectedItems);
}
/**
* Create a {@link VirtualTableQueryFilter} with the given map of parameters
*
* @param parameters
* Map of parameters
* @return A {@link VirtualTableQueryFilter} or null if the parameters are invalid
*/
public static @Nullable VirtualTableQueryFilter createVirtualTableQueryFilter(Map<String, Object> parameters) {
List<Long> columnRequested = DataProviderParameterUtils.extractLongList(parameters, DataProviderParameterUtils.REQUESTED_COLUMN_IDS_KEY);
if (columnRequested == null) {
return null;
}
Object indexObject = parameters.get(DataProviderParameterUtils.REQUESTED_TABLE_INDEX_KEY);
if (!(indexObject instanceof Long) && !(indexObject instanceof Integer)) {
return null;
}
long index = indexObject instanceof Long ? (long) indexObject : ((Integer) indexObject).longValue();
Object countObject = parameters.get(DataProviderParameterUtils.REQUESTED_TABLE_COUNT_KEY);
if (!(countObject instanceof Integer)) {
return null;
}
return new VirtualTableQueryFilter(columnRequested, index, (int) countObject);
}
/**
* Convert a given {@link TimeQueryFilter} into a map of parameters
*
* @param queryFilter
* The query filter
* @return A map of parameters
*/
public static Map<String, Object> timeQueryToMap(TimeQueryFilter queryFilter) {
Map<String, Object> map = new HashMap<>();
long[] timesRequested = queryFilter.getTimesRequested();
List<Long> longList = new ArrayList<>();
for (long time : timesRequested) {
longList.add(time);
}
map.put(DataProviderParameterUtils.REQUESTED_TIME_KEY, longList);
return map;
}
/**
* Convert a given {@link SelectionTimeQueryFilter} into a map of parameters
*
* @param queryFilter
* The query filter
* @return A map of parameters
*/
public static Map<String, Object> selectionTimeQueryToMap(SelectionTimeQueryFilter queryFilter) {
Map<String, Object> map = new HashMap<>();
long[] timesRequested = queryFilter.getTimesRequested();
Collection<Long> selectedItems = queryFilter.getSelectedItems();
List<Long> longList = new ArrayList<>();
for (long time : timesRequested) {
longList.add(time);
}
map.put(DataProviderParameterUtils.REQUESTED_TIME_KEY, longList);
map.put(DataProviderParameterUtils.REQUESTED_ITEMS_KEY, selectedItems);
return map;
}
/**
* Convert a given {@link VirtualTableQueryFilter} into a map of parameters
*
* @param queryFilter
* The query filter
* @return A map of parameters
*/
public static Map<String, Object> virtualTableQueryToMap(VirtualTableQueryFilter queryFilter) {
Map<String, Object> map = new HashMap<>();
List<Long> columnsId = queryFilter.getColumnsId();
long index = queryFilter.getIndex();
int count = queryFilter.getCount();
map.put(DataProviderParameterUtils.REQUESTED_COLUMN_IDS_KEY, columnsId);
map.put(DataProviderParameterUtils.REQUESTED_TABLE_INDEX_KEY, index);
map.put(DataProviderParameterUtils.REQUESTED_TABLE_COUNT_KEY, count);
return map;
}
/**
* Convert a given {@link FilterTimeQueryFilter} into a map of parameters
*
* @param queryFilter
* The query filter
* @return A map of parameters
*/
public static Map<String, Object> filteredTimeQueryToMap(FilterTimeQueryFilter queryFilter) {
Map<String, Object> map = new HashMap<>();
long[] timesRequested = queryFilter.getTimesRequested();
boolean filtered = queryFilter.isFiltered();
List<Long> longList = new ArrayList<>();
for (long time : timesRequested) {
longList.add(time);
}
map.put(DataProviderParameterUtils.REQUESTED_TIME_KEY, longList);
map.put(DataProviderParameterUtils.FILTERED_KEY, filtered);
return map;
}
}