blob: 12ed4a8327707b9c7ef02f9ef38b10a4a9638fbb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 École Polytechnique de Montréal
*
* 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.tmf.chart.core.tests.stubs;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.common.core.NonNullUtils;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.descriptor.DataChartNumericalDescriptor;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.descriptor.DataChartStringDescriptor;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.descriptor.IDataChartDescriptor;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.resolver.AbstractDoubleResolver;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.resolver.AbstractLongResolver;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.resolver.INumericalResolver;
import org.eclipse.tracecompass.internal.provisional.tmf.chart.core.resolver.IStringResolver;
import org.eclipse.tracecompass.tmf.chart.core.model.IDataChartProvider;
/**
* A chart provider that will return a few long values
*
* @author Geneviève Bastien
*/
@NonNullByDefault
public class StubChartProvider implements IDataChartProvider<StubObject> {
/**
* Name of this chart provider
*/
public static final String NAME = "Long Chart Provider";
/**
* Name of the String descriptor
*/
public static final String STRING_DESCRIPTOR = "String";
/**
* Name of the Integer descriptor
*/
public static final String INTEGER_DESCRIPTOR = "Integer";
/**
* Name of the Long descriptor
*/
public static final String LONG_DESCRIPTOR = "Long";
/**
* Name of the Double descriptor
*/
public static final String DOUBLE_DESCRIPTOR = "Double";
private final List<StubObject> fSource = new ArrayList<>();
private @Nullable List<IDataChartDescriptor<StubObject, ?>> fDescriptors = null;
@Override
public String getName() {
return NAME;
}
@Override
public Stream<StubObject> getSource() {
return NonNullUtils.checkNotNull(fSource.stream());
}
/**
* Adds an object to this provider's source. It will be returned with the
* stream
*
* @param obj
* an object to add to the data stream
*/
public void addData(StubObject obj) {
fSource.add(obj);
}
@Override
public Collection<IDataChartDescriptor<StubObject, ?>> getDataDescriptors() {
List<IDataChartDescriptor<StubObject, ?>> list = fDescriptors;
if (list == null) {
list = new ArrayList<>();
list.add(new DataChartStringDescriptor<>(STRING_DESCRIPTOR, new IStringResolver<StubObject>() {
@Override
public Function<StubObject, @Nullable String> getMapper() {
return o -> o.getString();
}
}));
list.add(new DataChartNumericalDescriptor<>(INTEGER_DESCRIPTOR, new INumericalResolver<StubObject, Integer>() {
@Override
public Function<StubObject, @Nullable Integer> getMapper() {
return o -> o.getInt();
}
@Override
public Comparator<Integer> getComparator() {
return NonNullUtils.checkNotNull(Comparator.naturalOrder());
}
@Override
public Integer getMinValue() {
return Integer.MIN_VALUE;
}
@Override
public Integer getMaxValue() {
return Integer.MAX_VALUE;
}
@Override
public Integer getZeroValue() {
return 0;
}
}));
list.add(new DataChartNumericalDescriptor<>(LONG_DESCRIPTOR, new AbstractLongResolver<StubObject>() {
@Override
public Function<StubObject, @Nullable Long> getMapper() {
return o -> o.getLong();
}
}));
list.add(new DataChartNumericalDescriptor<>(DOUBLE_DESCRIPTOR, new AbstractDoubleResolver<StubObject>() {
@Override
public Function<StubObject, @Nullable Double> getMapper() {
return o -> o.getDbl();
}
}));
fDescriptors = list;
}
return list;
}
/**
* Get a descriptor with the specified name
*
* @param name
* The name of the desired descriptor
* @return The descriptor
*/
public IDataChartDescriptor<StubObject, ?> getDataDescriptor(String name) {
return getDataDescriptors().stream().filter(d -> d.getName().equals(name))
.findFirst().get();
}
}