/*******************************************************************************
* Copyright (c) 2016 Ericsson
*
* 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.analysis.timing.core.tests.segmentstore.statistics;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.analysis.timing.core.segmentstore.IAnalysisProgressListener;
import org.eclipse.tracecompass.analysis.timing.core.segmentstore.ISegmentStoreProvider;
import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.AbstractSegmentStatisticsAnalysis;
import org.eclipse.tracecompass.segmentstore.core.BasicSegment;
import org.eclipse.tracecompass.segmentstore.core.ISegment;
import org.eclipse.tracecompass.segmentstore.core.ISegmentStore;
import org.eclipse.tracecompass.segmentstore.core.SegmentStoreFactory;
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
import org.eclipse.tracecompass.tmf.core.segment.ISegmentAspect;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestAnalysis;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStub;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
/**
* Test stuf for statistics analysis
*
* @author Matthew Khouzam
*
*/
class StubSegmentStatisticsAnalysis extends AbstractSegmentStatisticsAnalysis {
private final class StubProvider extends TestAnalysis implements ISegmentStoreProvider {
private final ISegmentStore<@NonNull ISegment> ifFixture;
public StubProvider(ISegmentStore<@NonNull ISegment> fixture) {
ifFixture = fixture;
}
@Override
public void removeListener(@NonNull IAnalysisProgressListener listener) {
// nothing
}
@Override
public @Nullable ISegmentStore<@NonNull ISegment> getSegmentStore() {
return ifFixture;
}
@Override
public @NonNull Iterable<@NonNull ISegmentAspect> getSegmentAspects() {
return Collections.emptyList();
}
@Override
public void addListener(@NonNull IAnalysisProgressListener listener) {
// nothing
}
}
public static final int SIZE = 65535;
private final List<@NonNull ISegment> fPreFixture;
private final ISegmentStore<@NonNull ISegment> fFixture = SegmentStoreFactory.createSegmentStore();
private @NonNull StubProvider fSegmentStoreProvider;
public StubSegmentStatisticsAnalysis() {
ImmutableList.Builder<@NonNull ISegment> builder = new Builder<>();
for (int i = 0; i < SIZE; i++) {
ISegment seg = new BasicSegment(i, i + i);
builder.add(seg);
}
fPreFixture = builder.build();
fFixture.addAll(fPreFixture);
fSegmentStoreProvider = new StubProvider(fFixture);
}
@Override
public void dispose() {
super.dispose();
fSegmentStoreProvider.dispose();
}
@Override
public boolean setTrace(@NonNull ITmfTrace trace) throws TmfAnalysisException {
if (trace instanceof TmfXmlTraceStub) {
TmfXmlTraceStub tmfXmlTraceStub = (TmfXmlTraceStub) trace;
tmfXmlTraceStub.addAnalysisModule(this);
tmfXmlTraceStub.addAnalysisModule(fSegmentStoreProvider);
}
return super.setTrace(trace);
}
@Override
protected @Nullable String getSegmentType(@NonNull ISegment segment) {
return segment.getLength() % 2 == 0 ? "even" : "odd";
}
@Override
protected @Nullable ISegmentStoreProvider getSegmentProviderAnalysis(@NonNull ITmfTrace trace) {
return fSegmentStoreProvider;
}
// visibility change
@Override
public boolean executeAnalysis(@NonNull IProgressMonitor monitor) throws TmfAnalysisException {
return super.executeAnalysis(monitor);
}
// visibility change
@Override
public @NonNull Iterable<@NonNull IAnalysisModule> getDependentAnalyses() {
return super.getDependentAnalyses();
}
}