[Minor] Extended GenericReport to allow overriding column value extraction
This commit is contained in:
parent
358c37b9eb
commit
d1007371d0
|
@ -11,7 +11,6 @@ public class ReportElement {
|
||||||
private final Function<String, String> columnGetter;
|
private final Function<String, String> columnGetter;
|
||||||
|
|
||||||
public ReportElement(List<String> columnKeys, Function<String, String> columnGetter) {
|
public ReportElement(List<String> columnKeys, Function<String, String> columnGetter) {
|
||||||
super();
|
|
||||||
this.columnGetter = columnGetter;
|
this.columnGetter = columnGetter;
|
||||||
this.columnKeys = columnKeys;
|
this.columnKeys = columnKeys;
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,7 +142,9 @@ public class GenericReport extends ReportPolicy {
|
||||||
if (this.reportRes.hasParameterBag(BAG_ORDERING)) {
|
if (this.reportRes.hasParameterBag(BAG_ORDERING)) {
|
||||||
ParameterBag orderingBag = this.reportRes.getParameterBag(BAG_ORDERING, true);
|
ParameterBag orderingBag = this.reportRes.getParameterBag(BAG_ORDERING, true);
|
||||||
if (orderingBag.hasParameters()) {
|
if (orderingBag.hasParameters()) {
|
||||||
this.orderingParams = orderingBag.getParameters().stream().map(e -> (StringParameter) e)
|
this.orderingParams = orderingBag.getParameters()
|
||||||
|
.stream()
|
||||||
|
.map(e -> (StringParameter) e)
|
||||||
.collect(toList());
|
.collect(toList());
|
||||||
this.orderingParams.sort(comparingInt(AbstractParameter::getIndex));
|
this.orderingParams.sort(comparingInt(AbstractParameter::getIndex));
|
||||||
}
|
}
|
||||||
|
@ -493,17 +495,24 @@ public class GenericReport extends ReportPolicy {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Stream<ReportElement> doReport() {
|
public Stream<ReportElement> doReport() {
|
||||||
return buildStream().map(e -> new ReportElement(this.columnIds, columnId -> {
|
return buildStream().map(e -> new ReportElement(this.columnIds, columnId -> formatColumn(e, columnId)));
|
||||||
StringParameter columnDefP = this.columnsBag.getParameter(columnId, true);
|
}
|
||||||
Object value = evaluateColumnValue(columnDefP, e, false);
|
|
||||||
if (value instanceof ZonedDateTime)
|
protected String formatColumn(Map<String, StrolchRootElement> row, String columnId) {
|
||||||
return ISO8601.toString((ZonedDateTime) value);
|
StringParameter columnDefP = this.columnsBag.getParameter(columnId, true);
|
||||||
if (value instanceof Date)
|
Object value = evaluateColumnValue(columnDefP, row, false);
|
||||||
return ISO8601.toString((Date) value);
|
if (value instanceof ZonedDateTime) {
|
||||||
if (value instanceof Parameter)
|
return ISO8601.toString((ZonedDateTime) value);
|
||||||
return ((Parameter<?>) value).getValueAsString();
|
} else if (value instanceof Date) {
|
||||||
|
return ISO8601.toString((Date) value);
|
||||||
|
} else if (value instanceof Parameter) {
|
||||||
|
return formatColumn((Parameter<?>) value);
|
||||||
|
} else
|
||||||
return value.toString();
|
return value.toString();
|
||||||
}));
|
}
|
||||||
|
|
||||||
|
protected String formatColumn(Parameter<?> param) {
|
||||||
|
return param.getValueAsString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -584,20 +593,14 @@ public class GenericReport extends ReportPolicy {
|
||||||
if (!this.directCriteria.contains(type))
|
if (!this.directCriteria.contains(type))
|
||||||
return;
|
return;
|
||||||
StringParameter filterCriteriaP = this.filterCriteriaParams.get(type);
|
StringParameter filterCriteriaP = this.filterCriteriaParams.get(type);
|
||||||
Stream<? extends StrolchRootElement> stream;
|
Stream<? extends StrolchRootElement> stream = switch (filterCriteriaP.getInterpretation()) {
|
||||||
switch (filterCriteriaP.getInterpretation()) {
|
case INTERPRETATION_RESOURCE_REF -> tx().streamResources(filterCriteriaP.getUom());
|
||||||
case INTERPRETATION_RESOURCE_REF:
|
case INTERPRETATION_ORDER_REF -> tx().streamOrders(filterCriteriaP.getUom());
|
||||||
stream = tx().streamResources(filterCriteriaP.getUom());
|
case INTERPRETATION_ACTIVITY_REF -> tx().streamActivities(filterCriteriaP.getUom());
|
||||||
break;
|
default -> throw new IllegalArgumentException(
|
||||||
case INTERPRETATION_ORDER_REF:
|
"Unhandled filter criteria interpretation " + filterCriteriaP.getInterpretation() + " for "
|
||||||
stream = tx().streamOrders(filterCriteriaP.getUom());
|
+ filterCriteriaP.getLocator());
|
||||||
break;
|
};
|
||||||
case INTERPRETATION_ACTIVITY_REF:
|
|
||||||
stream = tx().streamActivities(filterCriteriaP.getUom());
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new IllegalArgumentException("Unhandled element type " + filterCriteriaP.getInterpretation());
|
|
||||||
}
|
|
||||||
|
|
||||||
stream = stream.map(this::mapFilterCriteria).filter(this::filterDirectCriteria);
|
stream = stream.map(this::mapFilterCriteria).filter(this::filterDirectCriteria);
|
||||||
|
|
||||||
|
@ -628,8 +631,10 @@ public class GenericReport extends ReportPolicy {
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop if we have enough data
|
// stop if we have enough data
|
||||||
if (result.stream().filter(e -> !this.directCriteria.contains(e.getKey()))
|
if (result.stream()
|
||||||
.mapToInt(e -> e.getValue().size()).allMatch(v -> v >= maxFacetValues))
|
.filter(e -> !this.directCriteria.contains(e.getKey()))
|
||||||
|
.mapToInt(e -> e.getValue().size())
|
||||||
|
.allMatch(v -> v >= maxFacetValues))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -705,8 +710,8 @@ public class GenericReport extends ReportPolicy {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements a sorting of the given two rows. This implementation using the ordering as is defined in {@link
|
* Implements a sorting of the given two rows. This implementation using the ordering as is defined in
|
||||||
* ReportConstants#BAG_ORDERING}
|
* {@link ReportConstants#BAG_ORDERING}
|
||||||
*
|
*
|
||||||
* @param row1
|
* @param row1
|
||||||
* the left side
|
* the left side
|
||||||
|
@ -767,8 +772,8 @@ public class GenericReport extends ReportPolicy {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if a filter is defined, i.e. {@link ParameterBag ParameterBags} of type {@link
|
* Returns true if a filter is defined, i.e. {@link ParameterBag ParameterBags} of type
|
||||||
* ReportConstants#TYPE_FILTER}, a date range
|
* {@link ReportConstants#TYPE_FILTER}, a date range
|
||||||
*
|
*
|
||||||
* @return true if a filter is defined
|
* @return true if a filter is defined
|
||||||
*/
|
*/
|
||||||
|
@ -934,7 +939,7 @@ public class GenericReport extends ReportPolicy {
|
||||||
columnValue = parameter;
|
columnValue = parameter;
|
||||||
} else {
|
} else {
|
||||||
columnValue = lookupParameter(columnDefP, column, allowNull) //
|
columnValue = lookupParameter(columnDefP, column, allowNull) //
|
||||||
.orElseGet(() -> allowNull ? null : new StringParameter());
|
.orElseGet(() -> allowNull ? null : new StringParameter(columnDefP.getValue(), columnDef, ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
return columnValue;
|
return columnValue;
|
||||||
|
@ -1129,7 +1134,9 @@ public class GenericReport extends ReportPolicy {
|
||||||
+ dependency.getLocator() + " has no ParameterBag " + BAG_RELATIONS);
|
+ dependency.getLocator() + " has no ParameterBag " + BAG_RELATIONS);
|
||||||
|
|
||||||
List<Parameter<?>> relationParams = relationsBag.getParametersByInterpretationAndUom(interpretation, joinType)
|
List<Parameter<?>> relationParams = relationsBag.getParametersByInterpretationAndUom(interpretation, joinType)
|
||||||
.stream().filter(p -> p.getValueType() == StrolchValueType.STRING).collect(toList());
|
.stream()
|
||||||
|
.filter(p -> p.getValueType() == StrolchValueType.STRING)
|
||||||
|
.collect(toList());
|
||||||
|
|
||||||
if (relationParams.isEmpty())
|
if (relationParams.isEmpty())
|
||||||
throw new IllegalStateException("Found no relation parameters with UOM " + joinType + " of type "
|
throw new IllegalStateException("Found no relation parameters with UOM " + joinType + " of type "
|
||||||
|
|
Loading…
Reference in New Issue