|
11 | 11 | import com.gooddata.sdk.model.executeafm.Execution;
|
12 | 12 | import com.gooddata.sdk.model.executeafm.afm.Afm;
|
13 | 13 | import com.gooddata.sdk.model.executeafm.afm.AttributeItem;
|
| 14 | +import com.gooddata.sdk.model.executeafm.afm.NativeTotalItem; |
14 | 15 | import com.gooddata.sdk.model.executeafm.afm.filter.CompatibilityFilter;
|
15 | 16 | import com.gooddata.sdk.model.executeafm.afm.filter.DateFilter;
|
16 | 17 | import com.gooddata.sdk.model.executeafm.afm.filter.ExtendedFilter;
|
|
25 | 26 | import com.gooddata.sdk.model.executeafm.resultspec.ResultSpec;
|
26 | 27 | import com.gooddata.sdk.model.executeafm.resultspec.SortItem;
|
27 | 28 | import com.gooddata.sdk.model.executeafm.resultspec.TotalItem;
|
| 29 | +import com.gooddata.sdk.model.md.report.Total; |
28 | 30 |
|
29 | 31 | import java.util.ArrayList;
|
30 | 32 | import java.util.HashSet;
|
@@ -88,8 +90,9 @@ public static Afm convertToAfm(final VisualizationObject visualizationObject) {
|
88 | 90 | final List<AttributeItem> attributes = convertAttributes(visualizationObject.getAttributes());
|
89 | 91 | final List<CompatibilityFilter> filters = convertFilters(visualizationObject.getFilters());
|
90 | 92 | final List<MeasureItem> measures = convertMeasures(visualizationObject.getMeasures());
|
| 93 | + final List<NativeTotalItem> totals = convertNativeTotals(visualizationObject); |
91 | 94 |
|
92 |
| - return new Afm(attributes, filters, measures, null); |
| 95 | + return new Afm(attributes, filters, measures, totals); |
93 | 96 | }
|
94 | 97 |
|
95 | 98 | /**
|
@@ -322,4 +325,42 @@ private static <T> List<T> removeIrrelevantFilters(final List<T> filters) {
|
322 | 325 | })
|
323 | 326 | .collect(Collectors.toList());
|
324 | 327 | }
|
| 328 | + |
| 329 | + private static List<NativeTotalItem> convertNativeTotals(final VisualizationObject visualizationObject) { |
| 330 | + final List<Bucket> attributeBuckets = getAttributeBuckets(visualizationObject); |
| 331 | + final List<String> attributeIds = getIdsFromAttributeBuckets(attributeBuckets); |
| 332 | + return attributeBuckets.stream() |
| 333 | + .flatMap(bucket -> bucket.getTotals().stream()) |
| 334 | + .filter(totalItem -> isNativeTotal(totalItem) && attributeIds.contains(totalItem.getAttributeIdentifier())) |
| 335 | + .map(totalItem -> convertToNativeTotalItem(totalItem, attributeIds)) |
| 336 | + .collect(toList()); |
| 337 | + } |
| 338 | + |
| 339 | + private static NativeTotalItem convertToNativeTotalItem(TotalItem totalItem, List<String> attributeIds) { |
| 340 | + final int attributeIdx = attributeIds.indexOf(totalItem.getAttributeIdentifier()); |
| 341 | + return new NativeTotalItem( |
| 342 | + totalItem.getMeasureIdentifier(), |
| 343 | + new ArrayList<>(attributeIds.subList(0, attributeIdx)) |
| 344 | + ); |
| 345 | + } |
| 346 | + |
| 347 | + private static List<Bucket> getAttributeBuckets(final VisualizationObject visualizationObject) { |
| 348 | + return visualizationObject.getBuckets().stream() |
| 349 | + .filter(bucket -> bucket.getItems().stream().allMatch(AttributeItem.class::isInstance)) |
| 350 | + .collect(toList()); |
| 351 | + } |
| 352 | + |
| 353 | + private static List<String> getIdsFromAttributeBuckets(final List<Bucket> attributeBuckets) { |
| 354 | + return attributeBuckets.stream() |
| 355 | + .flatMap(bucket -> |
| 356 | + bucket.getItems().stream() |
| 357 | + .map(AttributeItem.class::cast) |
| 358 | + .map(AttributeItem::getLocalIdentifier) |
| 359 | + ) |
| 360 | + .collect(toList()); |
| 361 | + } |
| 362 | + |
| 363 | + private static boolean isNativeTotal(TotalItem totalItem) { |
| 364 | + return totalItem.getType() != null && Total.NAT.name().equals(totalItem.getType().toUpperCase()); |
| 365 | + } |
325 | 366 | }
|
0 commit comments