Implemented a workflow to enrich the result with additional data

This was problematic, because a processor can have multiple result
receivers and every result receiver could add additional data. So I
implemented an additional result data builder, that handles the conflicts,
when a member of the additional data is set multiple times.
There's a remaining problem with the StringMessagesForTests, because it
isn't as rich as the string messages used in the productive environment.
When this is resolved, the query tests should be successful.
This commit is contained in:
Lennart Hensler committed 2014-03-07 14:46:51 +01:00
1 parent 4c7a1706d6
commit 0350a54dec
34 files changed
+426 -81

No files matched your search

@@ -0,0 +1,17 @@
package com.sap.sse.datamining.shared;
public interface AdditionalResultData {
public int getRetrievedDataAmount();
public int getFilteredDataAmount();
public double getCalculationTimeInSeconds();
public String getResultSignifier();
public Unit getUnit();
public int getValueDecimals();
}
@@ -4,7 +4,7 @@ import java.io.Serializable;
import java.util.Map;
public interface QueryResult<AggregatedType> extends Serializable {
int getRetrievedDataAmount();
public int getFilteredDataAmount();
public double getCalculationTimeInSeconds();
@@ -0,0 +1,55 @@
package com.sap.sse.datamining.shared.impl;
import com.sap.sse.datamining.shared.AdditionalResultData;
import com.sap.sse.datamining.shared.Unit;
public class AdditionalResultDataImpl implements AdditionalResultData {
private final int retrievedDataAmount;
private int filteredDataAmount;
private String resultSignifier;
private Unit unit;
private int valueDecimals;
private long calculationTimeInNanos;
public AdditionalResultDataImpl(int retrievedDataAmount, int filteredDataAmount, String resultSignifier, Unit unit, int valueDecimals,
long calculationTimeInNanos) {
this.retrievedDataAmount = retrievedDataAmount;
this.filteredDataAmount = filteredDataAmount;
this.resultSignifier = resultSignifier;
this.unit = unit;
this.valueDecimals = valueDecimals;
this.calculationTimeInNanos = calculationTimeInNanos;
}
@Override
public int getRetrievedDataAmount() {
return retrievedDataAmount;
}
@Override
public int getFilteredDataAmount() {
return filteredDataAmount;
}
@Override
public double getCalculationTimeInSeconds() {
return calculationTimeInNanos;
}
@Override
public String getResultSignifier() {
return resultSignifier;
}
@Override
public Unit getUnit() {
return unit;
}
@Override
public int getValueDecimals() {
return valueDecimals;
}
}
@@ -3,6 +3,7 @@ package com.sap.sse.datamining.shared.impl;
import java.util.HashMap;
import java.util.Map;
import com.sap.sse.datamining.shared.AdditionalResultData;
import com.sap.sse.datamining.shared.GroupKey;
import com.sap.sse.datamining.shared.QueryResult;
import com.sap.sse.datamining.shared.Unit;
@@ -10,15 +11,8 @@ import com.sap.sse.datamining.shared.Unit;
public class QueryResultImpl<AggregatedType> implements QueryResult<AggregatedType> {
private static final long serialVersionUID = -8347731622150585715L;
private int retrievedDataAmount;
private int filteredDataAmount;
private long calculationTimeInNanos;
private String resultSignifier;
private Unit unit;
private int valueDecimals;
private Map<GroupKey, AggregatedType> results;
private AdditionalResultData additionalData;
/**
* Constructor for the GWT-Serialization. Don't use this!
@@ -26,32 +20,24 @@ public class QueryResultImpl<AggregatedType> implements QueryResult<AggregatedTy
@Deprecated
QueryResultImpl() { }
public QueryResultImpl(int retrievedDataAmount, int filteredDataAmount, String resultSiginifier, Unit unit, int valueDecimals) {
this.retrievedDataAmount = retrievedDataAmount;
this.filteredDataAmount = filteredDataAmount;
results = new HashMap<GroupKey, AggregatedType>();
this.resultSignifier = resultSiginifier;
this.unit = unit;
this.valueDecimals = valueDecimals;
public QueryResultImpl(Map<GroupKey, AggregatedType> results, AdditionalResultData additionalData) {
this.results = new HashMap<GroupKey, AggregatedType>(results);
this.additionalData = additionalData;
}
@Override
public int getRetrievedDataAmount() {
return retrievedDataAmount;
return additionalData.getRetrievedDataAmount();
}
@Override
public int getFilteredDataAmount() {
return filteredDataAmount;
return additionalData.getFilteredDataAmount();
}
@Override
public double getCalculationTimeInSeconds() {
return calculationTimeInNanos / 1000000000.0;
}
public void setCalculationTimeInNanos(long calculationTimeInNanos) {
this.calculationTimeInNanos = calculationTimeInNanos;
return additionalData.getCalculationTimeInSeconds();
}
@Override
@@ -61,17 +47,17 @@ public class QueryResultImpl<AggregatedType> implements QueryResult<AggregatedTy
@Override
public String getResultSignifier() {
return resultSignifier;
return additionalData.getResultSignifier();
}
@Override
public Unit getUnit() {
return unit;
return additionalData.getUnit();
}
@Override
public int getValueDecimals() {
return valueDecimals;
return additionalData.getValueDecimals();
}
@Override