diff --git a/src/main/java/org/hisp/dhis/BaseDhis2.java b/src/main/java/org/hisp/dhis/BaseDhis2.java index a5d836de..00399914 100644 --- a/src/main/java/org/hisp/dhis/BaseDhis2.java +++ b/src/main/java/org/hisp/dhis/BaseDhis2.java @@ -98,7 +98,7 @@ import org.hisp.dhis.query.Query; import org.hisp.dhis.query.RootJunction; import org.hisp.dhis.query.analytics.AnalyticsQuery; -import org.hisp.dhis.query.analytics.Dimension; +import org.hisp.dhis.query.analytics.QueryDimension; import org.hisp.dhis.query.completedatasetregistration.CompleteDataSetRegistrationQuery; import org.hisp.dhis.query.datavalue.DataValueQuery; import org.hisp.dhis.query.datavalue.DataValueSetQuery; @@ -426,11 +426,11 @@ protected T getAnalyticsResponse(URIBuilder uriBuilder, AnalyticsQuery query * @return a {@link URI}. */ protected URI withAnalyticsQueryParams(URIBuilder uriBuilder, AnalyticsQuery query) { - for (Dimension dimension : query.getDimensions()) { + for (QueryDimension dimension : query.getDimensions()) { addParameter(uriBuilder, "dimension", dimension.getDimensionValue()); } - for (Dimension filter : query.getFilters()) { + for (QueryDimension filter : query.getFilters()) { addParameter(uriBuilder, "filter", filter.getDimensionValue()); } diff --git a/src/main/java/org/hisp/dhis/model/analytics/AnalyticsData.java b/src/main/java/org/hisp/dhis/model/analytics/AnalyticsData.java index 85d5f2eb..e6c2fc10 100644 --- a/src/main/java/org/hisp/dhis/model/analytics/AnalyticsData.java +++ b/src/main/java/org/hisp/dhis/model/analytics/AnalyticsData.java @@ -207,7 +207,8 @@ public List getRow(int index) { } /** - * Truncates the data rows to the specified maximum number of rows. + * Truncates the data rows to the specified maximum number of rows. The data rows are left + * unchanged if the max rows is equal or greater than the number of data rows. * * @param maxRows the maximum number of rows to retain. */ diff --git a/src/main/java/org/hisp/dhis/model/dimension/Dimension.java b/src/main/java/org/hisp/dhis/model/dimension/Dimension.java index 415be9d9..d68ff860 100644 --- a/src/main/java/org/hisp/dhis/model/dimension/Dimension.java +++ b/src/main/java/org/hisp/dhis/model/dimension/Dimension.java @@ -44,4 +44,17 @@ public class Dimension extends NameableObject { @JsonProperty private DataDimensionType dataDimensionType; @JsonProperty private List items = new ArrayList<>(); + + /** + * Constructor. + * + * @param id the identifier. + * @param dimensionType the {@link DimensionType}. + * @param items the list of {@link DimensionItem}. + */ + public Dimension(String id, DimensionType dimensionType, List items) { + super(id, id, id); + this.dimensionType = dimensionType; + this.items = items; + } } diff --git a/src/main/java/org/hisp/dhis/model/dimension/DimensionItem.java b/src/main/java/org/hisp/dhis/model/dimension/DimensionItem.java index 0e2c5bf2..98a3f880 100644 --- a/src/main/java/org/hisp/dhis/model/dimension/DimensionItem.java +++ b/src/main/java/org/hisp/dhis/model/dimension/DimensionItem.java @@ -73,4 +73,14 @@ public DimensionItem(String id, String code, String name, DimensionItemType dime public DimensionItemType getDimensionItemType() { return dimensionItemType; } + + /** + * Checks if the dimension item is of the given type. + * + * @param type the {@link DimensionItemType}. + * @return true if the dimension item is of the given type. + */ + public boolean isDimensionItemType(DimensionItemType type) { + return this.dimensionItemType == type; + } } diff --git a/src/main/java/org/hisp/dhis/query/analytics/AnalyticsQuery.java b/src/main/java/org/hisp/dhis/query/analytics/AnalyticsQuery.java index 8c805e91..2773dbcc 100644 --- a/src/main/java/org/hisp/dhis/query/analytics/AnalyticsQuery.java +++ b/src/main/java/org/hisp/dhis/query/analytics/AnalyticsQuery.java @@ -55,9 +55,9 @@ @Accessors(chain = true) @NoArgsConstructor(access = AccessLevel.PRIVATE) public class AnalyticsQuery { - private final List dimensions = new ArrayList<>(); + private final List dimensions = new ArrayList<>(); - private final List filters = new ArrayList<>(); + private final List filters = new ArrayList<>(); private AggregationType aggregationType; @@ -105,10 +105,10 @@ public static AnalyticsQuery instance() { /** * Adds a dimension to this query. * - * @param dimension the {@link Dimension}. + * @param dimension the {@link QueryDimension}. * @return this {@link AnalyticsQuery}. */ - public AnalyticsQuery addDimension(Dimension dimension) { + public AnalyticsQuery addDimension(QueryDimension dimension) { this.dimensions.add(dimension); return this; } @@ -121,7 +121,7 @@ public AnalyticsQuery addDimension(Dimension dimension) { * @return this {@link AnalyticsQuery}. */ public AnalyticsQuery addDimension(String dimension, List items) { - return addDimension(new Dimension(dimension, items)); + return addDimension(new QueryDimension(dimension, items)); } /** @@ -157,10 +157,10 @@ public AnalyticsQuery addOrgUnitDimension(List orgUnits) { /** * Adds a filter to this query. * - * @param filter the {@link Dimension}. + * @param filter the {@link QueryDimension}. * @return this {@link AnalyticsQuery}. */ - public AnalyticsQuery addFilter(Dimension filter) { + public AnalyticsQuery addFilter(QueryDimension filter) { this.filters.add(filter); return this; } @@ -173,7 +173,7 @@ public AnalyticsQuery addFilter(Dimension filter) { * @return this {@link AnalyticsQuery}. */ public AnalyticsQuery addFilter(String filter, List items) { - return addFilter(new Dimension(filter, items)); + return addFilter(new QueryDimension(filter, items)); } /** @@ -183,7 +183,7 @@ public AnalyticsQuery addFilter(String filter, List items) { * @return this {@link AnalyticsQuery}. */ public AnalyticsQuery addDataFilter(List dataItems) { - return addFilter(new Dimension(AnalyticsDimension.DATA_X, dataItems)); + return addFilter(new QueryDimension(AnalyticsDimension.DATA_X, dataItems)); } /** @@ -193,7 +193,7 @@ public AnalyticsQuery addDataFilter(List dataItems) { * @return this {@link AnalyticsQuery}. */ public AnalyticsQuery addPeriodFilter(List periods) { - return addFilter(new Dimension(AnalyticsDimension.PERIOD, periods)); + return addFilter(new QueryDimension(AnalyticsDimension.PERIOD, periods)); } /** @@ -203,7 +203,7 @@ public AnalyticsQuery addPeriodFilter(List periods) { * @return this {@link AnalyticsQuery}. */ public AnalyticsQuery addOrgUnitFilter(List orgUnits) { - return addFilter(new Dimension(AnalyticsDimension.ORG_UNIT, orgUnits)); + return addFilter(new QueryDimension(AnalyticsDimension.ORG_UNIT, orgUnits)); } /** diff --git a/src/main/java/org/hisp/dhis/query/analytics/Dimension.java b/src/main/java/org/hisp/dhis/query/analytics/QueryDimension.java similarity index 96% rename from src/main/java/org/hisp/dhis/query/analytics/Dimension.java rename to src/main/java/org/hisp/dhis/query/analytics/QueryDimension.java index 2638be0b..60e3e962 100644 --- a/src/main/java/org/hisp/dhis/query/analytics/Dimension.java +++ b/src/main/java/org/hisp/dhis/query/analytics/QueryDimension.java @@ -33,11 +33,11 @@ import lombok.Setter; import org.apache.commons.lang3.StringUtils; -/** Analytics dimension. */ +/** Analytics query dimension. */ @Getter @Setter @RequiredArgsConstructor -public class Dimension { +public class QueryDimension { private final String dimension; private final List items; diff --git a/src/test/java/org/hisp/dhis/query/analytics/QueryDimensionTest.java b/src/test/java/org/hisp/dhis/query/analytics/QueryDimensionTest.java new file mode 100644 index 00000000..fc74d9d4 --- /dev/null +++ b/src/test/java/org/hisp/dhis/query/analytics/QueryDimensionTest.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2004-2025, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.hisp.dhis.query.analytics; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import org.hisp.dhis.model.analytics.AnalyticsDimension; +import org.hisp.dhis.support.TestTags; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +@Tag(TestTags.UNIT) +class QueryDimensionTest { + @Test + void testGetDimensionValue() { + QueryDimension dimension = + new QueryDimension( + AnalyticsDimension.DATA_X, List.of("fbfJHSPpUQD", "cYeuwXTCPkU", "Jtf34kNZhzP")); + + String expected = "dx:fbfJHSPpUQD;cYeuwXTCPkU;Jtf34kNZhzP"; + + assertEquals(expected, dimension.getDimensionValue()); + } +}