mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-25 21:43:49 +00:00
Implemented and tested the AbstractFilteringRetrievalProcessor
This commit is contained in:
1 parent
0e272885ac
commit
eab7f79427
5 files changed
+148
-4
No files matched your search
+6
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sse.datamining.impl.components;
|
||||
package com.sap.sse.datamining.impl;
|
||||
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
@@ -25,6 +25,11 @@ import com.sap.sse.datamining.components.Processor;
|
||||
import com.sap.sse.datamining.factories.FunctionFactory;
|
||||
import com.sap.sse.datamining.functions.Function;
|
||||
import com.sap.sse.datamining.i18n.DataMiningStringMessages;
|
||||
import com.sap.sse.datamining.impl.ProcessorQuery;
|
||||
import com.sap.sse.datamining.impl.components.AbstractSimpleParallelProcessor;
|
||||
import com.sap.sse.datamining.impl.components.GroupedDataEntry;
|
||||
import com.sap.sse.datamining.impl.components.ParallelGroupedElementsValueExtractionProcessor;
|
||||
import com.sap.sse.datamining.impl.components.ParallelMultiDimensionalGroupingProcessor;
|
||||
import com.sap.sse.datamining.impl.components.aggregators.ParallelGroupedDoubleDataSumAggregationProcessor;
|
||||
import com.sap.sse.datamining.shared.GroupKey;
|
||||
import com.sap.sse.datamining.shared.QueryResult;
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
package com.sap.sse.datamining.impl.components;
|
||||
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sse.datamining.AdditionalResultDataBuilder;
|
||||
import com.sap.sse.datamining.components.FilterCriteria;
|
||||
import com.sap.sse.datamining.components.Processor;
|
||||
import com.sap.sse.datamining.test.util.ConcurrencyTestsUtil;
|
||||
|
||||
public class TestAbstractFilteringRetrievalProcessor {
|
||||
|
||||
private Processor<Iterable<Integer>> filteringRetrievalProcessor;
|
||||
private Collection<Integer> dataSource;
|
||||
|
||||
private Collection<Integer> receivedResults = new ArrayList<>();
|
||||
|
||||
@Test
|
||||
public void testFiltration() throws InterruptedException {
|
||||
filteringRetrievalProcessor.onElement(dataSource);
|
||||
filteringRetrievalProcessor.finish();
|
||||
ConcurrencyTestsUtil.sleepFor(500); //Giving the processor time to finish
|
||||
|
||||
Collection<Integer> expectedResults = Arrays.asList(0, 1, 2);
|
||||
assertThat(receivedResults, is(expectedResults));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProvidedAdditionalData() throws InterruptedException {
|
||||
filteringRetrievalProcessor.onElement(dataSource);
|
||||
filteringRetrievalProcessor.finish();
|
||||
ConcurrencyTestsUtil.sleepFor(500); //Giving the processor time to finish
|
||||
|
||||
int expectedRetrievedDataAmount = 5;
|
||||
int expectedFilteredDataAmount = 3;
|
||||
|
||||
SumBuildingAndOverwritingResultDataBuilder resultDataBuilder = new SumBuildingAndOverwritingResultDataBuilder();
|
||||
filteringRetrievalProcessor.getAdditionalResultData(resultDataBuilder);
|
||||
assertThat(resultDataBuilder.getRetrievedDataAmount(), is(expectedRetrievedDataAmount));
|
||||
assertThat(resultDataBuilder.getFilteredDataAmount(), is(expectedFilteredDataAmount));
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUpResultReceiverAndProcessor() {
|
||||
Processor<Integer> resultReceiver = new Processor<Integer>() {
|
||||
@Override
|
||||
public void onElement(Integer element) {
|
||||
synchronized (receivedResults) {
|
||||
receivedResults.add(element);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void finish() throws InterruptedException {
|
||||
}
|
||||
@Override
|
||||
public void abort() {
|
||||
}
|
||||
@Override
|
||||
public AdditionalResultDataBuilder getAdditionalResultData(AdditionalResultDataBuilder additionalDataBuilder) {
|
||||
return additionalDataBuilder;
|
||||
}
|
||||
};
|
||||
|
||||
FilterCriteria<Integer> filterCriteria = new FilterCriteria<Integer>() {
|
||||
@Override
|
||||
public boolean matches(Integer element) {
|
||||
return element >= 0;
|
||||
}
|
||||
};
|
||||
filteringRetrievalProcessor = new AbstractFilteringRetrievalProcessor<Iterable<Integer>, Integer, Integer>(ConcurrencyTestsUtil.getExecutor(), Arrays.asList(resultReceiver), filterCriteria) {
|
||||
@Override
|
||||
protected Iterable<Integer> retrieveData(Iterable<Integer> element) {
|
||||
return element;
|
||||
}
|
||||
@Override
|
||||
protected Callable<Integer> createInstruction(final Integer filteredPartialElement) {
|
||||
return new Callable<Integer>() {
|
||||
@Override
|
||||
public Integer call() throws Exception {
|
||||
return filteredPartialElement;
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUpDataSource() {
|
||||
dataSource = Arrays.asList(-2, -1, 0, 1, 2);
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.sap.sse.datamining.impl.components;
|
||||
package com.sap.sse.datamining.impl;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
@@ -14,7 +14,7 @@ import com.sap.sse.datamining.AdditionalResultDataBuilder;
|
||||
import com.sap.sse.datamining.Query;
|
||||
import com.sap.sse.datamining.components.Processor;
|
||||
import com.sap.sse.datamining.i18n.DataMiningStringMessages;
|
||||
import com.sap.sse.datamining.impl.SumBuildingAndOverwritingResultDataBuilder;
|
||||
import com.sap.sse.datamining.impl.components.SumBuildingAndOverwritingResultDataBuilder;
|
||||
import com.sap.sse.datamining.shared.GroupKey;
|
||||
import com.sap.sse.datamining.shared.QueryResult;
|
||||
import com.sap.sse.datamining.shared.impl.QueryResultImpl;
|
||||
+12
@@ -5,6 +5,7 @@ import java.util.Collection;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
import com.sap.sse.datamining.AdditionalResultDataBuilder;
|
||||
import com.sap.sse.datamining.components.FilterCriteria;
|
||||
import com.sap.sse.datamining.components.Processor;
|
||||
|
||||
@@ -12,6 +13,9 @@ public abstract class AbstractFilteringRetrievalProcessor<InputType, WorkingType
|
||||
extends AbstractPartitioningParallelProcessor<InputType, WorkingType, ResultType> {
|
||||
|
||||
private final FilterCriteria<WorkingType> criteria;
|
||||
|
||||
private int retrievedDataAmount;
|
||||
private int filteredDataAmount;
|
||||
|
||||
public AbstractFilteringRetrievalProcessor(ExecutorService executor, Collection<Processor<ResultType>> resultReceivers, FilterCriteria<WorkingType> criteria) {
|
||||
super(executor, resultReceivers);
|
||||
@@ -24,10 +28,12 @@ public abstract class AbstractFilteringRetrievalProcessor<InputType, WorkingType
|
||||
|
||||
Iterable<WorkingType> retrievedData = retrieveData(element);
|
||||
for (WorkingType retrievedDataEntry : retrievedData) {
|
||||
retrievedDataAmount++;
|
||||
if (criteria.matches(retrievedDataEntry)) {
|
||||
filteredData.add(retrievedDataEntry);
|
||||
}
|
||||
}
|
||||
filteredDataAmount = filteredData.size();
|
||||
return filteredData;
|
||||
}
|
||||
|
||||
@@ -37,5 +43,11 @@ public abstract class AbstractFilteringRetrievalProcessor<InputType, WorkingType
|
||||
//This makes the implementation of sub classes more fluent.
|
||||
@Override
|
||||
protected abstract Callable<ResultType> createInstruction(WorkingType filteredPartialElement);
|
||||
|
||||
@Override
|
||||
protected void setAdditionalData(AdditionalResultDataBuilder additionalDataBuilder) {
|
||||
additionalDataBuilder.setRetrievedDataAmount(retrievedDataAmount);
|
||||
additionalDataBuilder.setFilteredDataAmount(filteredDataAmount);
|
||||
}
|
||||
|
||||
}
|
||||
+25
-1
@@ -1,4 +1,4 @@
|
||||
package com.sap.sse.datamining.impl;
|
||||
package com.sap.sse.datamining.impl.components;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@@ -74,4 +74,28 @@ public class SumBuildingAndOverwritingResultDataBuilder implements AdditionalRes
|
||||
this.aggregationNameMessageKey = aggregationNameMessageKey;
|
||||
}
|
||||
|
||||
protected int getRetrievedDataAmount() {
|
||||
return retrievedDataAmount;
|
||||
}
|
||||
|
||||
protected int getFilteredDataAmount() {
|
||||
return filteredDataAmount;
|
||||
}
|
||||
|
||||
protected Function<?> getExtractionFunction() {
|
||||
return extractionFunction;
|
||||
}
|
||||
|
||||
protected String getAggregationNameMessageKey() {
|
||||
return aggregationNameMessageKey;
|
||||
}
|
||||
|
||||
protected Unit getUnit() {
|
||||
return unit;
|
||||
}
|
||||
|
||||
protected int getResultDecimals() {
|
||||
return resultDecimals;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user