Skip to content

Commit bfd33a1

Browse files
authored
fix: Add AnalyticsIndicatorType (#465)
1 parent 88f569a commit bfd33a1

3 files changed

Lines changed: 108 additions & 1 deletion

File tree

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright (c) 2004-2025, University of Oslo
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are met:
7+
* Redistributions of source code must retain the above copyright notice, this
8+
* list of conditions and the following disclaimer.
9+
*
10+
* Redistributions in binary form must reproduce the above copyright notice,
11+
* this list of conditions and the following disclaimer in the documentation
12+
* and/or other materials provided with the distribution.
13+
* Neither the name of the HISP project nor the names of its contributors may
14+
* be used to endorse or promote products derived from this software without
15+
* specific prior written permission.
16+
*
17+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
21+
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
24+
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27+
*/
28+
package org.hisp.dhis.model.analytics;
29+
30+
import com.fasterxml.jackson.annotation.JsonProperty;
31+
import java.io.Serializable;
32+
import lombok.Getter;
33+
import lombok.NoArgsConstructor;
34+
import lombok.Setter;
35+
import lombok.ToString;
36+
37+
@Getter
38+
@Setter
39+
@ToString
40+
@NoArgsConstructor
41+
public class AnalyticsIndicatorType implements Serializable {
42+
@JsonProperty private String name;
43+
44+
@JsonProperty private Integer factor;
45+
46+
@JsonProperty private Boolean number;
47+
}

src/main/java/org/hisp/dhis/model/analytics/MetaDataItem.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public class MetaDataItem implements Serializable {
6363

6464
@JsonProperty private String aggregationType;
6565

66+
@JsonProperty private AnalyticsIndicatorType indicatorType;
67+
6668
/**
6769
* Constructor.
6870
*

src/test/java/org/hisp/dhis/analytics/AnalyticsDataApiTest.java

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,12 @@
2727
*/
2828
package org.hisp.dhis.analytics;
2929

30+
import static org.hisp.dhis.support.Assertions.assertContainsExactly;
31+
import static org.hisp.dhis.support.Assertions.assertNotBlank;
3032
import static org.hisp.dhis.support.Assertions.assertNotEmpty;
3133
import static org.hisp.dhis.support.Assertions.assertSize;
3234
import static org.junit.jupiter.api.Assertions.assertEquals;
35+
import static org.junit.jupiter.api.Assertions.assertFalse;
3336
import static org.junit.jupiter.api.Assertions.assertNotNull;
3437
import static org.junit.jupiter.api.Assertions.assertTrue;
3538

@@ -40,9 +43,12 @@
4043
import org.hisp.dhis.TestFixture;
4144
import org.hisp.dhis.model.ValueType;
4245
import org.hisp.dhis.model.analytics.AnalyticsData;
46+
import org.hisp.dhis.model.analytics.AnalyticsDimension;
4347
import org.hisp.dhis.model.analytics.AnalyticsHeader;
48+
import org.hisp.dhis.model.analytics.AnalyticsIndicatorType;
4449
import org.hisp.dhis.model.analytics.AnalyticsMetaData;
4550
import org.hisp.dhis.model.analytics.MetaDataItem;
51+
import org.hisp.dhis.model.dimension.DimensionItemType;
4652
import org.hisp.dhis.query.analytics.AnalyticsQuery;
4753
import org.hisp.dhis.support.TestTags;
4854
import org.junit.jupiter.api.Tag;
@@ -130,7 +136,7 @@ void testGetAnalyticsDataWithDimensionAndNoItems() {
130136

131137
AnalyticsData data = dhis2.getAnalyticsData(query);
132138

133-
log.info(data.toString());
139+
log.debug(data.toString());
134140

135141
assertEquals(4, data.getWidth());
136142
assertSize(4, data.getHeaders());
@@ -140,4 +146,56 @@ void testGetAnalyticsDataWithDimensionAndNoItems() {
140146

141147
assertSize(4, firstRow);
142148
}
149+
150+
@Test
151+
void testGetAnalyticsDataIndicatorAndMetadataDetails() {
152+
Dhis2 dhis2 = new Dhis2(TestFixture.DEFAULT_CONFIG);
153+
154+
AnalyticsQuery query =
155+
AnalyticsQuery.instance()
156+
// "ANC 1 Coverage"
157+
.addDataDimension(List.of("Uvn6LCg7dVU"))
158+
.addPeriodDimension(List.of("THIS_YEAR"))
159+
// "Sierra Leone"
160+
.addOrgUnitFilter(List.of("ImspTQPwCqd"))
161+
.setSkipData(true)
162+
.setSkipMeta(false)
163+
.setIncludeMetadataDetails(true);
164+
165+
AnalyticsData data = dhis2.getAnalyticsData(query);
166+
167+
AnalyticsMetaData metadata = data.getMetaData();
168+
169+
log.info(metadata.toString());
170+
171+
Map<String, List<String>> dimensions = metadata.getDimensions();
172+
173+
assertContainsExactly(dimensions.get(AnalyticsDimension.DATA_X), "Uvn6LCg7dVU");
174+
assertContainsExactly(dimensions.get(AnalyticsDimension.ORG_UNIT), "ImspTQPwCqd");
175+
176+
Map<String, MetaDataItem> items = metadata.getItems();
177+
178+
MetaDataItem indicator = items.get("Uvn6LCg7dVU");
179+
180+
assertNotNull(indicator);
181+
assertEquals("Uvn6LCg7dVU", indicator.getUid());
182+
assertNotBlank(indicator.getName());
183+
assertNotNull(indicator.getIndicatorType());
184+
assertEquals(DimensionItemType.INDICATOR, indicator.getDimensionItemType());
185+
assertEquals(ValueType.NUMBER, indicator.getValueType());
186+
187+
AnalyticsIndicatorType indicatorType = indicator.getIndicatorType();
188+
189+
assertNotNull(indicatorType);
190+
191+
assertNotBlank(indicatorType.getName());
192+
assertEquals(100, indicatorType.getFactor());
193+
assertFalse(indicatorType.getNumber());
194+
195+
MetaDataItem orgUnit = items.get("ImspTQPwCqd");
196+
197+
assertNotNull(orgUnit);
198+
assertEquals("ImspTQPwCqd", orgUnit.getUid());
199+
assertNotBlank(orgUnit.getName());
200+
}
143201
}

0 commit comments

Comments
 (0)