Finished the construction of the new queries

This commit is contained in:
Lennart Hensler
2014-06-05 11:06:02 +02:00
parent 379b04f124
commit c9fae07ada
5 changed files with 75 additions and 8 deletions
@@ -1,12 +1,16 @@
package com.sap.sailing.datamining.factories;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ThreadPoolExecutor;
import com.sap.sailing.datamining.data.HasGPSFixContext;
import com.sap.sailing.datamining.data.HasTrackedLegContext;
import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext;
import com.sap.sailing.datamining.impl.DeprecatedToFunctionConverter;
import com.sap.sailing.datamining.impl.components.GPSFixRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.LeaderboardGroupRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.RegattaLeaderboardFilteringRetrievalProcessor;
@@ -21,7 +25,12 @@ import com.sap.sailing.server.RacingEventService;
import com.sap.sse.datamining.components.FilterCriteria;
import com.sap.sse.datamining.components.ParallelDataRetriever;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.functions.Function;
import com.sap.sse.datamining.impl.DataMiningActivator;
import com.sap.sse.datamining.impl.criterias.AndCompoundFilterCriteria;
import com.sap.sse.datamining.impl.criterias.CompoundFilterCriteria;
import com.sap.sse.datamining.impl.criterias.NonFilteringFilterCriteria;
import com.sap.sse.datamining.impl.criterias.NullaryFunctionValuesFilterCriteria;
import com.sap.sse.datamining.shared.dto.FunctionDTO;
import com.sap.sse.datamining.workers.DataRetrievalWorker;
import com.sap.sse.datamining.workers.WorkerBuilder;
@@ -76,8 +85,22 @@ public final class DataRetrieverFactory {
private static <BaseDataType> FilterCriteria<BaseDataType> getFilterCriteriaForBaseDataType(Class<BaseDataType> baseDataType,
Map<FunctionDTO, Iterable<?>> filterSelection) {
// TODO Auto-generated method stub
return null;
CompoundFilterCriteria<BaseDataType> criteria = null;
for (Entry<FunctionDTO, Iterable<?>> filterSelectionEntry : filterSelection.entrySet()) {
Function<?> function = DeprecatedToFunctionConverter.getFunctionFor(filterSelectionEntry.getKey());
if (baseDataType.equals(function.getDeclaringType())) {
if (criteria == null) {
criteria = new AndCompoundFilterCriteria<>();
}
Collection<Object> filterValues = new ArrayList<>();
for (Object filterValue : filterSelectionEntry.getValue()) {
filterValues.add(filterValue);
}
criteria.addCriteria(new NullaryFunctionValuesFilterCriteria<BaseDataType>(function, filterValues));
}
}
return criteria != null ? criteria : new NonFilteringFilterCriteria<BaseDataType>();
}
/**
@@ -0,0 +1,16 @@
package com.sap.sse.datamining.shared.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface BaseDataType {
public String groupKey();
public int level();
}
@@ -0,0 +1,16 @@
package com.sap.sse.datamining.shared.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DataRetriever {
public String groupKey();
public int level();
}
@@ -0,0 +1,12 @@
package com.sap.sse.datamining.impl.criterias;
import com.sap.sse.datamining.components.FilterCriteria;
public class NonFilteringFilterCriteria<T> implements FilterCriteria<T> {
@Override
public boolean matches(T element) {
return true;
}
}
@@ -7,21 +7,21 @@ import java.util.Objects;
import com.sap.sse.datamining.components.FilterCriteria;
import com.sap.sse.datamining.functions.Function;
public class NullaryFunctionValuesFilterCriteria<DataType, ValueType> implements FilterCriteria<DataType> {
public class NullaryFunctionValuesFilterCriteria<DataType> implements FilterCriteria<DataType> {
private Function<ValueType> function;
private Collection<ValueType> valuesToMatch;
private Function<?> function;
private Collection<?> valuesToMatch;
public NullaryFunctionValuesFilterCriteria(Function<ValueType> function, Collection<ValueType> valuesToMatch) {
public NullaryFunctionValuesFilterCriteria(Function<?> function, Collection<?> valuesToMatch) {
this.function = function;
this.valuesToMatch = new HashSet<>(valuesToMatch);
}
@Override
public boolean matches(DataType dataEntry) {
ValueType value = function.tryToInvoke(dataEntry);
Object value = function.tryToInvoke(dataEntry);
for (ValueType valueToMatch : valuesToMatch) {
for (Object valueToMatch : valuesToMatch) {
if (Objects.equals(value, valueToMatch)) {
return true;
}