From 677a60e1d92e53af6b56683bbbb390af14c7185a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Thu, 1 May 2025 22:30:03 +0200 Subject: [PATCH 01/13] fix: Update code --- pom.xml | 6 ++++ src/main/java/org/hisp/dhis/BaseDhis2.java | 23 ++++++++++--- .../dhis/query/analytics/AnalyticsQuery.java | 26 +++++++++++++++ .../dhis/{Dhis2Test.java => QueryTest.java} | 33 ++++++++++++------- 4 files changed, 73 insertions(+), 15 deletions(-) rename src/test/java/org/hisp/dhis/{Dhis2Test.java => QueryTest.java} (89%) diff --git a/pom.xml b/pom.xml index 2f3e9a2b..e92f8ecc 100644 --- a/pom.xml +++ b/pom.xml @@ -70,6 +70,7 @@ 3.5.2 2.18.0 3.17.0 + 4.5.0 2.44.3 @@ -89,6 +90,11 @@ commons-lang3 ${commons-lang3.version} + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + org.slf4j slf4j-api diff --git a/src/main/java/org/hisp/dhis/BaseDhis2.java b/src/main/java/org/hisp/dhis/BaseDhis2.java index 061ac3d8..2e5235e6 100644 --- a/src/main/java/org/hisp/dhis/BaseDhis2.java +++ b/src/main/java/org/hisp/dhis/BaseDhis2.java @@ -114,6 +114,8 @@ public class BaseDhis2 { protected static final String NAME_FIELDS = String.format("%s,shortName,description", ID_FIELDS); + private static final String SEP_DIM = ";"; + /** Option set fields. */ protected static final String OPTION_SET_FIELDS = String.format("%s,valueType,version", ID_FIELDS); @@ -170,7 +172,9 @@ public class BaseDhis2 { /** Indicator fields. */ protected static final String INDICATOR_FIELDS = String.format( - "%1$s,annualized,numerator,numeratorDescription,denominator,denominatorDescription,url,indicatorType[%2$s]", + """ + %1$s,annualized,numerator,numeratorDescription,\ + denominator,denominatorDescription,url,indicatorType[%2$s]""", NAME_FIELDS, INDICATOR_TYPE_FIELDS); /** Indicator group set fields. */ @@ -234,7 +238,9 @@ public class BaseDhis2 { /** Me / current user fields. */ protected static final String ME_FIELDS = String.format( - "%1$s,username,surname,firstName,email,settings,programs,dataSets,authorities,organisationUnits[%2$s]", + """ + %1$s,username,surname,firstName,email,settings,programs,\ + dataSets,authorities,organisationUnits[%2$s]""", ID_FIELDS, ORG_UNIT_FIELDS); /** Log level system property. */ @@ -259,8 +265,8 @@ public class BaseDhis2 { protected static final String VALIDATION_RULE_FIELDS = String.format( """ - %1$s,dimensionItem,instruction,importance,periodType,displayDescription,displayInstruction,displayName,\ - leftSide[%2$s],operator,rightSide[%2$s],skipFormValidation,legendSets""", + %1$s,dimensionItem,instruction,importance,periodType,displayDescription,displayInstruction,\ + displayName,leftSide[%2$s],operator,rightSide[%2$s],skipFormValidation,legendSets""", NAME_FIELDS, VALIDATION_SIDE_FIELDS); protected static final String DATA_SET_VALIDATION_FIELDS = @@ -439,6 +445,7 @@ protected URI getAnalyticsQuery(URIBuilder uriBuilder, AnalyticsQuery query) { addParameter(uriBuilder, "skipData", query.getSkipData()); addParameter(uriBuilder, "skipRounding", query.getSkipRounding()); addParameter(uriBuilder, "ignoreLimit", query.getIgnoreLimit()); + addParameter(uriBuilder, "tableLayout", query.getTableLayout()); addParameter(uriBuilder, "showHierarchy", query.getShowHierarchy()); addParameter(uriBuilder, "includeNumDen", query.getIncludeNumDen()); addParameter(uriBuilder, "includeMetadataDetails", query.getIncludeMetadataDetails()); @@ -447,6 +454,14 @@ protected URI getAnalyticsQuery(URIBuilder uriBuilder, AnalyticsQuery query) { addParameter(uriBuilder, "outputDataElementIdScheme", query.getOutputDataElementIdScheme()); addParameter(uriBuilder, "inputIdScheme", query.getInputIdScheme()); + if (query.hasColumns()) { + addParameter(uriBuilder, "columns", String.join(SEP_DIM, query.getColumns())); + } + + if (query.hasRows()) { + addParameter(uriBuilder, "rows", String.join(SEP_DIM, query.getRows())); + } + return HttpUtils.build(uriBuilder); } 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 9e7faa54..50e2bc6e 100644 --- a/src/main/java/org/hisp/dhis/query/analytics/AnalyticsQuery.java +++ b/src/main/java/org/hisp/dhis/query/analytics/AnalyticsQuery.java @@ -27,6 +27,8 @@ */ package org.hisp.dhis.query.analytics; +import static org.apache.commons.collections4.CollectionUtils.isNotEmpty; + import java.util.ArrayList; import java.util.List; import lombok.Getter; @@ -58,6 +60,8 @@ public class AnalyticsQuery { private Boolean ignoreLimit; + private Boolean tableLayout; + private Boolean showHierarchy; private Boolean includeNumDen; @@ -72,6 +76,10 @@ public class AnalyticsQuery { private IdScheme inputIdScheme; + private List columns = new ArrayList<>(); + + private List rows = new ArrayList<>(); + private AnalyticsQuery() {} /** @@ -186,4 +194,22 @@ public AnalyticsQuery addPeriodFilter(List items) { public AnalyticsQuery addOrgUnitFilter(List items) { return addFilter(new Dimension(Dimension.DIMENSION_OU, items)); } + + /** + * Indicates whether any columns exist. + * + * @return true if any columns exist. + */ + public boolean hasColumns() { + return isNotEmpty(columns); + } + + /** + * Indicates whether any rows exist. + * + * @return true if any rows exist. + */ + public boolean hasRows() { + return isNotEmpty(rows); + } } diff --git a/src/test/java/org/hisp/dhis/Dhis2Test.java b/src/test/java/org/hisp/dhis/QueryTest.java similarity index 89% rename from src/test/java/org/hisp/dhis/Dhis2Test.java rename to src/test/java/org/hisp/dhis/QueryTest.java index 53b7c007..cbec3eb2 100644 --- a/src/test/java/org/hisp/dhis/Dhis2Test.java +++ b/src/test/java/org/hisp/dhis/QueryTest.java @@ -31,6 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.net.URI; +import java.util.List; import org.apache.hc.core5.net.URIBuilder; import org.hisp.dhis.model.AggregationType; import org.hisp.dhis.model.IdScheme; @@ -47,7 +48,7 @@ import org.junit.jupiter.api.Test; @Tag(TestTags.UNIT) -class Dhis2Test { +class QueryTest { @Test void testGetDhis2() { Dhis2Config config = getDhis2Config(); @@ -127,8 +128,10 @@ void testGetObjectQueryC() { URI uri = dhis2.getObjectQuery(uriBuilder, query); String expected = - "https://dhis2.org/api/dataSets?" - + "filter=name%3Alike%3AANC&page=1&pageSize=50&order=id%3Aasc"; + """ + https://dhis2.org/api/dataSets?\ + filter=name%3Alike%3AANC\ + &page=1&pageSize=50&order=id%3Aasc"""; assertEquals(expected, uri.toString()); } @@ -151,8 +154,10 @@ void testGetDataValueSetImportQuery() { URI uri = dhis2.getDataValueSetImportQuery(uriBuilder, options); String expected = - "https://dhis2.org/api/dataValueSets?" - + "async=true&dataElementIdScheme=code&dryRun=true&preheatCache=true&skipAudit=true"; + """ + https://dhis2.org/api/dataValueSets?\ + async=true&dataElementIdScheme=code&\ + dryRun=true&preheatCache=true&skipAudit=true"""; assertEquals(expected, uri.toString()); } @@ -170,7 +175,8 @@ void testGetAnalyticsQuery() { .setAggregationType(AggregationType.AVERAGE) .setIgnoreLimit(true) .setInputIdScheme(IdScheme.CODE) - .setOutputIdScheme(IdScheme.UID); + .setOutputIdScheme(IdScheme.UID) + .setColumns(List.of("dx", "pe")); URI uri = dhis2.getAnalyticsQuery(uriBuilder, query); @@ -180,7 +186,8 @@ void testGetAnalyticsQuery() { aggregationType=AVERAGE\ &ignoreLimit=true\ &outputIdScheme=uid\ - &inputIdScheme=code"""; + &inputIdScheme=code\ + &columns=dx%3Bpe"""; assertEquals(expected, uri.toString()); } @@ -204,8 +211,10 @@ void testGetEventsQuery() { URI uri = dhis2.getEventsQuery(uriBuilder, query); String expected = - "https://dhis2.org/api/tracker/events?" - + "program=hJhgt5cDs7j&programStatus=ACTIVE&followUp=true&idScheme=code"; + """ + https://dhis2.org/api/tracker/events?\ + program=hJhgt5cDs7j&programStatus=ACTIVE\ + &followUp=true&idScheme=code"""; assertEquals(expected, uri.toString()); } @@ -226,8 +235,10 @@ void testGetDataValueSetQuery() { .setChildren(true); String expected = - "https://dhis2.org/api/dataValueSets.json?" - + "dataElement=N9vniUuCcqY&orgUnit=ImspTQPwCqd&period=202211&children=true"; + """ + https://dhis2.org/api/dataValueSets.json?\ + dataElement=N9vniUuCcqY&orgUnit=ImspTQPwCqd\ + &period=202211&children=true"""; URI uri = dhis2.getDataValueSetQuery(uriBuilder, query); From 59bd52c05d5093efb17c309dd477a4f43ef374d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Fri, 2 May 2025 13:00:14 +0200 Subject: [PATCH 02/13] fix: Update code --- src/test/java/org/hisp/dhis/util/UidUtilsTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java index 5f249fa3..995226fe 100644 --- a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java +++ b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java @@ -32,7 +32,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; - import java.util.stream.IntStream; import org.hisp.dhis.support.TestTags; import org.junit.jupiter.api.Tag; @@ -92,7 +91,7 @@ void testToUidDeterminisism() { /** * Asserts that the method generates a valid UID based on the given identifier. * - * @param uid + * @param input the input string. */ private void assertToUid(String input) { String output = UidUtils.toUid(input); From ca8d9923ef36be4818ba71fe3f01343a26d16396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Fri, 2 May 2025 13:02:02 +0200 Subject: [PATCH 03/13] fix: Update code --- .../java/org/hisp/dhis/query/analytics/AnalyticsQuery.java | 6 +++++- src/main/java/org/hisp/dhis/query/analytics/Dimension.java | 5 +++++ .../CompleteDataSetRegistrationQuery.java | 1 + src/test/java/org/hisp/dhis/util/UidUtilsTest.java | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) 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 50e2bc6e..f7865e2b 100644 --- a/src/main/java/org/hisp/dhis/query/analytics/AnalyticsQuery.java +++ b/src/main/java/org/hisp/dhis/query/analytics/AnalyticsQuery.java @@ -37,7 +37,11 @@ import org.hisp.dhis.model.AggregationType; import org.hisp.dhis.model.IdScheme; -/** Analytics data query. */ +/** + * Analytics data query. + * + * @author Lars Helge Overland + */ @Getter @Setter @Accessors(chain = true) diff --git a/src/main/java/org/hisp/dhis/query/analytics/Dimension.java b/src/main/java/org/hisp/dhis/query/analytics/Dimension.java index 050df566..14d33a7a 100644 --- a/src/main/java/org/hisp/dhis/query/analytics/Dimension.java +++ b/src/main/java/org/hisp/dhis/query/analytics/Dimension.java @@ -33,6 +33,11 @@ import lombok.Setter; import org.apache.commons.lang3.StringUtils; +/** + * Analytics dimension. + * + * @author Lars Helge Overland + */ @Getter @Setter @RequiredArgsConstructor diff --git a/src/main/java/org/hisp/dhis/query/completedatasetregistration/CompleteDataSetRegistrationQuery.java b/src/main/java/org/hisp/dhis/query/completedatasetregistration/CompleteDataSetRegistrationQuery.java index 3d3832e8..6edb4e0a 100644 --- a/src/main/java/org/hisp/dhis/query/completedatasetregistration/CompleteDataSetRegistrationQuery.java +++ b/src/main/java/org/hisp/dhis/query/completedatasetregistration/CompleteDataSetRegistrationQuery.java @@ -35,6 +35,7 @@ import lombok.experimental.Accessors; import org.hisp.dhis.model.IdScheme; +/** Complete data set registration. */ @Getter @Setter @Accessors(chain = true) diff --git a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java index 995226fe..668f7d6c 100644 --- a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java +++ b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java @@ -32,6 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; + import java.util.stream.IntStream; import org.hisp.dhis.support.TestTags; import org.junit.jupiter.api.Tag; From aba06afcf1419f1f10d219baa1148181afd99ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Fri, 2 May 2025 16:00:07 +0200 Subject: [PATCH 04/13] fix: Update code --- src/main/java/org/hisp/dhis/util/UidUtils.java | 16 +++++++++++++++- .../java/org/hisp/dhis/util/UidUtilsTest.java | 8 ++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/hisp/dhis/util/UidUtils.java b/src/main/java/org/hisp/dhis/util/UidUtils.java index f907663a..2e275c36 100644 --- a/src/main/java/org/hisp/dhis/util/UidUtils.java +++ b/src/main/java/org/hisp/dhis/util/UidUtils.java @@ -31,11 +31,13 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.List; import java.util.concurrent.ThreadLocalRandom; import java.util.regex.Pattern; +import java.util.stream.IntStream; +import org.apache.commons.lang3.StringUtils; import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.commons.lang3.StringUtils; /** Utilities for DHIS2 UID generation. */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -63,6 +65,18 @@ public class UidUtils { public static String generateUid() { return generateCode(UID_LENGTH); } + + /** + * Generates the given number of DHIS2 UIDs. + * + * @param n the number of UIDs to generate. + * @return a list of DHIS2 UID strings. + */ + public static List generateUids(int n) { + return IntStream.range(0, n) + .mapToObj(i -> generateUid()) + .toList(); + } /** * Tests whether the given code is a valid UID. diff --git a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java index 668f7d6c..59f98979 100644 --- a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java +++ b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java @@ -32,7 +32,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; - import java.util.stream.IntStream; import org.hisp.dhis.support.TestTags; import org.junit.jupiter.api.Tag; @@ -41,12 +40,17 @@ @Tag(TestTags.UNIT) class UidUtilsTest { @Test - void testGetUid() { + void testGenerateUid() { String uid = UidUtils.generateUid(); assertNotNull(uid); assertEquals(11, uid.length()); } + + @Test + void testGenerateUids() { + assertEquals(3, UidUtils.generateUids(3).size()); + } @Test void testUidIsValid() { From e8f2a5526e4fddf4c455f54c318cdda29cb7f28e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Fri, 2 May 2025 16:09:14 +0200 Subject: [PATCH 05/13] fix: Update code --- src/main/java/org/hisp/dhis/util/UidUtils.java | 10 ++++------ src/test/java/org/hisp/dhis/util/UidUtilsTest.java | 3 ++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/hisp/dhis/util/UidUtils.java b/src/main/java/org/hisp/dhis/util/UidUtils.java index 2e275c36..48d26f84 100644 --- a/src/main/java/org/hisp/dhis/util/UidUtils.java +++ b/src/main/java/org/hisp/dhis/util/UidUtils.java @@ -35,9 +35,9 @@ import java.util.concurrent.ThreadLocalRandom; import java.util.regex.Pattern; import java.util.stream.IntStream; -import org.apache.commons.lang3.StringUtils; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; /** Utilities for DHIS2 UID generation. */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -65,17 +65,15 @@ public class UidUtils { public static String generateUid() { return generateCode(UID_LENGTH); } - + /** * Generates the given number of DHIS2 UIDs. - * + * * @param n the number of UIDs to generate. * @return a list of DHIS2 UID strings. */ public static List generateUids(int n) { - return IntStream.range(0, n) - .mapToObj(i -> generateUid()) - .toList(); + return IntStream.range(0, n).mapToObj(i -> generateUid()).toList(); } /** diff --git a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java index 59f98979..be311d03 100644 --- a/src/test/java/org/hisp/dhis/util/UidUtilsTest.java +++ b/src/test/java/org/hisp/dhis/util/UidUtilsTest.java @@ -32,6 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; + import java.util.stream.IntStream; import org.hisp.dhis.support.TestTags; import org.junit.jupiter.api.Tag; @@ -46,7 +47,7 @@ void testGenerateUid() { assertNotNull(uid); assertEquals(11, uid.length()); } - + @Test void testGenerateUids() { assertEquals(3, UidUtils.generateUids(3).size()); From e8d343c187352cc90731274a3a608e3bedeee073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Fri, 2 May 2025 18:28:57 +0200 Subject: [PATCH 06/13] fix: Update code --- src/test/java/org/hisp/dhis/util/ConfigUtilsTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/org/hisp/dhis/util/ConfigUtilsTest.java b/src/test/java/org/hisp/dhis/util/ConfigUtilsTest.java index 3c946cd6..be742a75 100644 --- a/src/test/java/org/hisp/dhis/util/ConfigUtilsTest.java +++ b/src/test/java/org/hisp/dhis/util/ConfigUtilsTest.java @@ -28,13 +28,12 @@ package org.hisp.dhis.util; import static org.junit.jupiter.api.Assertions.assertEquals; - import java.util.List; import org.junit.jupiter.api.Test; public class ConfigUtilsTest { @Test - void testGetAsListA() { + void testGetAsList() { List expected = List.of("http://localhost", "http://localhost:3000", "https://localhost:3000"); From b821b1caa38a9faa7b58755cba1205e2045038e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Thu, 8 May 2025 15:12:05 +0200 Subject: [PATCH 07/13] fix: Update code --- src/main/java/org/hisp/dhis/BaseDhis2.java | 9 ++-- .../java/org/hisp/dhis/model/Program.java | 34 ++++++++----- .../org/hisp/dhis/model/ProgramStage.java | 7 +-- .../hisp/dhis/model/ProgramStageSection.java | 25 ++++++++++ .../java/org/hisp/dhis/ProgramApiTest.java | 50 +++++++++++++++++-- .../org/hisp/dhis/util/ConfigUtilsTest.java | 1 + 6 files changed, 104 insertions(+), 22 deletions(-) create mode 100644 src/main/java/org/hisp/dhis/model/ProgramStageSection.java diff --git a/src/main/java/org/hisp/dhis/BaseDhis2.java b/src/main/java/org/hisp/dhis/BaseDhis2.java index 2e5235e6..11acb5f8 100644 --- a/src/main/java/org/hisp/dhis/BaseDhis2.java +++ b/src/main/java/org/hisp/dhis/BaseDhis2.java @@ -33,8 +33,6 @@ import static org.apache.hc.core5.http.HttpStatus.SC_UNAUTHORIZED; import static org.hisp.dhis.util.CollectionUtils.asList; import static org.hisp.dhis.util.HttpUtils.getUriAsString; - -import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -47,7 +45,6 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.hc.client5.http.HttpResponseException; @@ -100,6 +97,8 @@ import org.hisp.dhis.response.objects.ObjectsResponse; import org.hisp.dhis.util.HttpUtils; import org.hisp.dhis.util.JacksonUtils; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; /** * @author Lars Helge Overland @@ -224,7 +223,9 @@ public class BaseDhis2 { String.format( """ %1$s,programType,trackedEntityType[%2$s],categoryCombo[%1$s,categories[%3$s]],\ - programStages[%1$s,programStageDataElements[%4$s]],\ + programStages[%1$s,\ + programStageDataElements[%4$s],\ + programStageSections[%1$s,formName,sortOrder,programStage[%1$s],dataElements[%1$s],programIndicators[%1$s]]],\ programTrackedEntityAttributes[id,code,name,trackedEntityAttribute[%5$s]]""", NAME_FIELDS, TRACKED_ENTITY_TYPE_FIELDS, diff --git a/src/main/java/org/hisp/dhis/model/Program.java b/src/main/java/org/hisp/dhis/model/Program.java index 99508fad..375d0c2b 100644 --- a/src/main/java/org/hisp/dhis/model/Program.java +++ b/src/main/java/org/hisp/dhis/model/Program.java @@ -28,19 +28,18 @@ package org.hisp.dhis.model; import static org.hisp.dhis.util.CollectionUtils.notEmpty; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; import org.hisp.dhis.model.trackedentity.ProgramTrackedEntityAttribute; import org.hisp.dhis.model.trackedentity.TrackedEntityAttribute; import org.hisp.dhis.model.trackedentity.TrackedEntityType; import org.hisp.dhis.model.trackedentity.TrackedEntityTypeAttribute; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; @Getter @Setter @@ -79,7 +78,7 @@ public List getTrackedEntityTypeAttributes() { return trackedEntityType.getTrackedEntityTypeAttributes().stream() .map(TrackedEntityTypeAttribute::getTrackedEntityAttribute) - .collect(Collectors.toUnmodifiableList()); + .toList(); } /** @@ -108,7 +107,7 @@ public List getNonConfidentialTrackedEntityTypeAttribute public List getTrackedEntityAttributes() { return programTrackedEntityAttributes.stream() .map(ProgramTrackedEntityAttribute::getTrackedEntityAttribute) - .collect(Collectors.toUnmodifiableList()); + .toList(); } /** @@ -121,7 +120,7 @@ public List getNonConfidentialTrackedEntityAttributes() return programTrackedEntityAttributes.stream() .map(ProgramTrackedEntityAttribute::getTrackedEntityAttribute) .filter(tea -> !tea.isConfidentialNullSafe()) - .collect(Collectors.toUnmodifiableList()); + .toList(); } /** @@ -134,7 +133,7 @@ public List getDataElements() { return programStages.stream() .flatMap(ps -> ps.getDataElements().stream()) .distinct() - .collect(Collectors.toUnmodifiableList()); + .toList(); } /** @@ -147,7 +146,7 @@ public List getAnalyticsDataElements() { return programStages.stream() .flatMap(ps -> ps.getAnalyticsDataElements().stream()) .distinct() - .collect(Collectors.toUnmodifiableList()); + .toList(); } /** @@ -162,7 +161,18 @@ public List getAnalyticsDataElementsWithLegendSet() { .flatMap(ps -> ps.getAnalyticsDataElements().stream()) .filter(de -> notEmpty(de.getLegendSets()) && de.getValueType().isNumeric()) .distinct() - .collect(Collectors.toUnmodifiableList()); + .toList(); + } + + /** + * Returns program stage sections which are part of the stages of this program. + * + * @return an immutable set of {@link ProgramStageSection}. + */ + public List getProgramStageSections() { + return programStages.stream() + .flatMap(ps -> ps.getProgramStageSections().stream()) + .toList(); } /** diff --git a/src/main/java/org/hisp/dhis/model/ProgramStage.java b/src/main/java/org/hisp/dhis/model/ProgramStage.java index a25a3005..0d874578 100644 --- a/src/main/java/org/hisp/dhis/model/ProgramStage.java +++ b/src/main/java/org/hisp/dhis/model/ProgramStage.java @@ -28,12 +28,11 @@ package org.hisp.dhis.model; import static org.apache.commons.lang3.BooleanUtils.isFalse; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -43,6 +42,8 @@ @NoArgsConstructor public class ProgramStage extends NameableObject { @JsonProperty private List programStageDataElements = new ArrayList<>(); + + @JsonProperty private List programStageSections = new ArrayList<>(); public ProgramStage(String id, String name) { this.id = id; diff --git a/src/main/java/org/hisp/dhis/model/ProgramStageSection.java b/src/main/java/org/hisp/dhis/model/ProgramStageSection.java new file mode 100644 index 00000000..eaa973b3 --- /dev/null +++ b/src/main/java/org/hisp/dhis/model/ProgramStageSection.java @@ -0,0 +1,25 @@ +package org.hisp.dhis.model; + +import java.util.ArrayList; +import java.util.List; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +public class ProgramStageSection extends NameableObject { + @JsonProperty private String description; + + @JsonProperty private String formName; + + @JsonProperty private Integer sortOrder; + + @JsonProperty private ProgramStage programStage; + + @JsonProperty private List dataElements = new ArrayList<>(); + + @JsonProperty private List programIndicators = new ArrayList<>(); +} diff --git a/src/test/java/org/hisp/dhis/ProgramApiTest.java b/src/test/java/org/hisp/dhis/ProgramApiTest.java index feb546e6..7c40bcec 100644 --- a/src/test/java/org/hisp/dhis/ProgramApiTest.java +++ b/src/test/java/org/hisp/dhis/ProgramApiTest.java @@ -32,12 +32,13 @@ import static org.hisp.dhis.support.Assertions.assertSize; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; - import java.util.List; import org.hisp.dhis.model.DataElement; import org.hisp.dhis.model.Program; +import org.hisp.dhis.model.ProgramIndicator; import org.hisp.dhis.model.ProgramStage; import org.hisp.dhis.model.ProgramStageDataElement; +import org.hisp.dhis.model.ProgramStageSection; import org.hisp.dhis.model.ProgramType; import org.hisp.dhis.model.trackedentity.ProgramTrackedEntityAttribute; import org.hisp.dhis.model.trackedentity.TrackedEntityAttribute; @@ -53,15 +54,15 @@ @Tag(TestTags.INTEGRATION) public class ProgramApiTest { @Test - void testGetProgram() { + void testGetProgramChildProgram() { Dhis2 dhis2 = new Dhis2(TestFixture.DEFAULT_CONFIG); Program pr = dhis2.getProgram("IpHINAT79UW"); assertNotNull(pr); assertEquals("IpHINAT79UW", pr.getId()); - assertNotBlank(pr.getShortName()); assertNotBlank(pr.getName()); + assertNotBlank(pr.getShortName()); assertNotNull(pr.getCreated()); assertNotNull(pr.getLastUpdated()); assertEquals(ProgramType.WITH_REGISTRATION, pr.getProgramType()); @@ -130,6 +131,49 @@ void testGetProgram() { assertNotEmpty(pr.getAnalyticsDataElements()); } + @Test + void testGetProgramInpatientCase() { + Dhis2 dhis2 = new Dhis2(TestFixture.DEFAULT_CONFIG); + + Program pr = dhis2.getProgram("eBAyeGv0exc"); + + assertNotNull(pr); + assertEquals("eBAyeGv0exc", pr.getId()); + assertNotBlank(pr.getName()); + assertNotBlank(pr.getShortName()); + assertNotNull(pr.getProgramStages()); + + ProgramStage ps = pr.getProgramStages().get(0); + + assertNotNull(ps); + assertEquals("Zj7UnCAulEk", ps.getId()); + assertNotNull(ps.getProgramStageSections()); + + ProgramStageSection pss = ps.getProgramStageSections().get(0); + + assertNotNull(pss); + assertEquals("d7ZILSbPgYh", pss.getId()); + assertNotBlank(pss.getName()); + assertNotBlank(pss.getDescription()); + assertNotNull(pss.getSortOrder()); + assertNotNull(pss.getDataElements()); + assertNotNull(pss.getProgramIndicators()); + + DataElement de = pss.getDataElements().get(0); + + assertNotNull(de); + assertEquals("oZg33kd9taw", de.getId()); + assertNotBlank(de.getName()); + assertNotBlank(de.getShortName()); + + ProgramIndicator pi = pss.getProgramIndicators().get(0); + + assertNotNull(pi); + assertEquals("x7PaHGvgWY2", pi.getId()); + assertNotBlank(pi.getName()); + assertNotBlank(pi.getShortName()); + } + @Test void testGetPrograms() { Dhis2 dhis2 = new Dhis2(TestFixture.DEFAULT_CONFIG); diff --git a/src/test/java/org/hisp/dhis/util/ConfigUtilsTest.java b/src/test/java/org/hisp/dhis/util/ConfigUtilsTest.java index be742a75..01da7ed0 100644 --- a/src/test/java/org/hisp/dhis/util/ConfigUtilsTest.java +++ b/src/test/java/org/hisp/dhis/util/ConfigUtilsTest.java @@ -28,6 +28,7 @@ package org.hisp.dhis.util; import static org.junit.jupiter.api.Assertions.assertEquals; + import java.util.List; import org.junit.jupiter.api.Test; From 4b0b9ef9fa6a7f4a23f5bef2e3a09cea6a7ab46c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Thu, 8 May 2025 15:33:28 +0200 Subject: [PATCH 08/13] fix: Update code --- src/main/java/org/hisp/dhis/BaseDhis2.java | 5 ++-- .../java/org/hisp/dhis/model/Program.java | 14 ++++----- .../org/hisp/dhis/model/ProgramStage.java | 7 +++-- .../hisp/dhis/model/ProgramStageSection.java | 29 +++++++++++++++++-- .../java/org/hisp/dhis/ProgramApiTest.java | 23 ++++++++------- 5 files changed, 52 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/hisp/dhis/BaseDhis2.java b/src/main/java/org/hisp/dhis/BaseDhis2.java index 11acb5f8..6c3640df 100644 --- a/src/main/java/org/hisp/dhis/BaseDhis2.java +++ b/src/main/java/org/hisp/dhis/BaseDhis2.java @@ -33,6 +33,8 @@ import static org.apache.hc.core5.http.HttpStatus.SC_UNAUTHORIZED; import static org.hisp.dhis.util.CollectionUtils.asList; import static org.hisp.dhis.util.HttpUtils.getUriAsString; + +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -45,6 +47,7 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.hc.client5.http.HttpResponseException; @@ -97,8 +100,6 @@ import org.hisp.dhis.response.objects.ObjectsResponse; import org.hisp.dhis.util.HttpUtils; import org.hisp.dhis.util.JacksonUtils; -import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.extern.slf4j.Slf4j; /** * @author Lars Helge Overland diff --git a/src/main/java/org/hisp/dhis/model/Program.java b/src/main/java/org/hisp/dhis/model/Program.java index 375d0c2b..541c2efd 100644 --- a/src/main/java/org/hisp/dhis/model/Program.java +++ b/src/main/java/org/hisp/dhis/model/Program.java @@ -130,10 +130,7 @@ public List getNonConfidentialTrackedEntityAttributes() */ @JsonIgnore public List getDataElements() { - return programStages.stream() - .flatMap(ps -> ps.getDataElements().stream()) - .distinct() - .toList(); + return programStages.stream().flatMap(ps -> ps.getDataElements().stream()).distinct().toList(); } /** @@ -163,16 +160,15 @@ public List getAnalyticsDataElementsWithLegendSet() { .distinct() .toList(); } - + /** * Returns program stage sections which are part of the stages of this program. - * + * * @return an immutable set of {@link ProgramStageSection}. */ + @JsonIgnore public List getProgramStageSections() { - return programStages.stream() - .flatMap(ps -> ps.getProgramStageSections().stream()) - .toList(); + return programStages.stream().flatMap(ps -> ps.getProgramStageSections().stream()).toList(); } /** diff --git a/src/main/java/org/hisp/dhis/model/ProgramStage.java b/src/main/java/org/hisp/dhis/model/ProgramStage.java index 0d874578..67713121 100644 --- a/src/main/java/org/hisp/dhis/model/ProgramStage.java +++ b/src/main/java/org/hisp/dhis/model/ProgramStage.java @@ -28,11 +28,12 @@ package org.hisp.dhis.model; import static org.apache.commons.lang3.BooleanUtils.isFalse; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -42,7 +43,7 @@ @NoArgsConstructor public class ProgramStage extends NameableObject { @JsonProperty private List programStageDataElements = new ArrayList<>(); - + @JsonProperty private List programStageSections = new ArrayList<>(); public ProgramStage(String id, String name) { diff --git a/src/main/java/org/hisp/dhis/model/ProgramStageSection.java b/src/main/java/org/hisp/dhis/model/ProgramStageSection.java index eaa973b3..99882ef0 100644 --- a/src/main/java/org/hisp/dhis/model/ProgramStageSection.java +++ b/src/main/java/org/hisp/dhis/model/ProgramStageSection.java @@ -1,3 +1,30 @@ +/* + * 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.model; import java.util.ArrayList; @@ -11,8 +38,6 @@ @Setter @NoArgsConstructor public class ProgramStageSection extends NameableObject { - @JsonProperty private String description; - @JsonProperty private String formName; @JsonProperty private Integer sortOrder; diff --git a/src/test/java/org/hisp/dhis/ProgramApiTest.java b/src/test/java/org/hisp/dhis/ProgramApiTest.java index 7c40bcec..ae127f75 100644 --- a/src/test/java/org/hisp/dhis/ProgramApiTest.java +++ b/src/test/java/org/hisp/dhis/ProgramApiTest.java @@ -31,6 +31,7 @@ import static org.hisp.dhis.support.Assertions.assertNotEmpty; import static org.hisp.dhis.support.Assertions.assertSize; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import java.util.List; import org.hisp.dhis.model.DataElement; @@ -140,17 +141,19 @@ void testGetProgramInpatientCase() { assertNotNull(pr); assertEquals("eBAyeGv0exc", pr.getId()); assertNotBlank(pr.getName()); - assertNotBlank(pr.getShortName()); + assertNotBlank(pr.getShortName()); assertNotNull(pr.getProgramStages()); - + assertNotNull(pr.getProgramStageSections()); + assertFalse(pr.getProgramStageSections().isEmpty()); + ProgramStage ps = pr.getProgramStages().get(0); - + assertNotNull(ps); assertEquals("Zj7UnCAulEk", ps.getId()); assertNotNull(ps.getProgramStageSections()); - + ProgramStageSection pss = ps.getProgramStageSections().get(0); - + assertNotNull(pss); assertEquals("d7ZILSbPgYh", pss.getId()); assertNotBlank(pss.getName()); @@ -158,22 +161,22 @@ void testGetProgramInpatientCase() { assertNotNull(pss.getSortOrder()); assertNotNull(pss.getDataElements()); assertNotNull(pss.getProgramIndicators()); - + DataElement de = pss.getDataElements().get(0); - + assertNotNull(de); assertEquals("oZg33kd9taw", de.getId()); assertNotBlank(de.getName()); assertNotBlank(de.getShortName()); - + ProgramIndicator pi = pss.getProgramIndicators().get(0); - + assertNotNull(pi); assertEquals("x7PaHGvgWY2", pi.getId()); assertNotBlank(pi.getName()); assertNotBlank(pi.getShortName()); } - + @Test void testGetPrograms() { Dhis2 dhis2 = new Dhis2(TestFixture.DEFAULT_CONFIG); From 08691eebb3f5f7a23566fb631545cba04bad61e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Thu, 8 May 2025 15:37:59 +0200 Subject: [PATCH 09/13] fix: Update code --- src/main/java/org/hisp/dhis/model/Program.java | 11 ++++++----- .../java/org/hisp/dhis/model/ProgramStageSection.java | 2 +- src/test/java/org/hisp/dhis/ProgramApiTest.java | 1 + 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/hisp/dhis/model/Program.java b/src/main/java/org/hisp/dhis/model/Program.java index 541c2efd..14b939c2 100644 --- a/src/main/java/org/hisp/dhis/model/Program.java +++ b/src/main/java/org/hisp/dhis/model/Program.java @@ -28,18 +28,19 @@ package org.hisp.dhis.model; import static org.hisp.dhis.util.CollectionUtils.notEmpty; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.hisp.dhis.model.trackedentity.ProgramTrackedEntityAttribute; import org.hisp.dhis.model.trackedentity.TrackedEntityAttribute; import org.hisp.dhis.model.trackedentity.TrackedEntityType; import org.hisp.dhis.model.trackedentity.TrackedEntityTypeAttribute; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; @Getter @Setter diff --git a/src/main/java/org/hisp/dhis/model/ProgramStageSection.java b/src/main/java/org/hisp/dhis/model/ProgramStageSection.java index 99882ef0..aaa49d8c 100644 --- a/src/main/java/org/hisp/dhis/model/ProgramStageSection.java +++ b/src/main/java/org/hisp/dhis/model/ProgramStageSection.java @@ -27,9 +27,9 @@ */ package org.hisp.dhis.model; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.List; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; diff --git a/src/test/java/org/hisp/dhis/ProgramApiTest.java b/src/test/java/org/hisp/dhis/ProgramApiTest.java index ae127f75..5816f974 100644 --- a/src/test/java/org/hisp/dhis/ProgramApiTest.java +++ b/src/test/java/org/hisp/dhis/ProgramApiTest.java @@ -33,6 +33,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; + import java.util.List; import org.hisp.dhis.model.DataElement; import org.hisp.dhis.model.Program; From 6dbf15db8a2e4a2e4d3c4419bdcbc35eb904b928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Thu, 8 May 2025 15:39:24 +0200 Subject: [PATCH 10/13] fix: Update code --- src/main/java/org/hisp/dhis/Dhis2AsyncRequest.java | 5 +++-- src/main/java/org/hisp/dhis/model/Program.java | 11 ++++++----- .../java/org/hisp/dhis/model/ProgramStageSection.java | 2 +- src/main/java/org/hisp/dhis/response/Response.java | 2 +- src/test/java/org/hisp/dhis/ProgramApiTest.java | 1 + 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/hisp/dhis/Dhis2AsyncRequest.java b/src/main/java/org/hisp/dhis/Dhis2AsyncRequest.java index 529b2315..d0628a68 100644 --- a/src/main/java/org/hisp/dhis/Dhis2AsyncRequest.java +++ b/src/main/java/org/hisp/dhis/Dhis2AsyncRequest.java @@ -115,12 +115,13 @@ public T postEvent(HttpPost request, Class klass return getJobSummary(klass, message, jobInfo); } - private T getJobSummary(Class klass, JobInfoResponse message, JobInfo jobInfo) { + private T getJobSummary( + Class klass, JobInfoResponse message, JobInfo jobInfo) { log.info( "Push response: '{}', '{}', job: '{}'", message.getHttpStatus(), message.getMessage(), - jobInfo); + jobInfo); JobNotification notification = waitForCompletion(jobInfo); diff --git a/src/main/java/org/hisp/dhis/model/Program.java b/src/main/java/org/hisp/dhis/model/Program.java index 541c2efd..14b939c2 100644 --- a/src/main/java/org/hisp/dhis/model/Program.java +++ b/src/main/java/org/hisp/dhis/model/Program.java @@ -28,18 +28,19 @@ package org.hisp.dhis.model; import static org.hisp.dhis.util.CollectionUtils.notEmpty; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.hisp.dhis.model.trackedentity.ProgramTrackedEntityAttribute; import org.hisp.dhis.model.trackedentity.TrackedEntityAttribute; import org.hisp.dhis.model.trackedentity.TrackedEntityType; import org.hisp.dhis.model.trackedentity.TrackedEntityTypeAttribute; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; @Getter @Setter diff --git a/src/main/java/org/hisp/dhis/model/ProgramStageSection.java b/src/main/java/org/hisp/dhis/model/ProgramStageSection.java index 99882ef0..aaa49d8c 100644 --- a/src/main/java/org/hisp/dhis/model/ProgramStageSection.java +++ b/src/main/java/org/hisp/dhis/model/ProgramStageSection.java @@ -27,9 +27,9 @@ */ package org.hisp.dhis.model; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.List; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; diff --git a/src/main/java/org/hisp/dhis/response/Response.java b/src/main/java/org/hisp/dhis/response/Response.java index c2052df3..061d29dc 100644 --- a/src/main/java/org/hisp/dhis/response/Response.java +++ b/src/main/java/org/hisp/dhis/response/Response.java @@ -68,7 +68,7 @@ public Response(Status status, Integer httpStatusCode, String message, String er } public HttpStatus getHttpStatus() { - if (httpStatusCode != null){ + if (httpStatusCode != null) { return HttpStatus.valueOf(httpStatusCode); } diff --git a/src/test/java/org/hisp/dhis/ProgramApiTest.java b/src/test/java/org/hisp/dhis/ProgramApiTest.java index ae127f75..5816f974 100644 --- a/src/test/java/org/hisp/dhis/ProgramApiTest.java +++ b/src/test/java/org/hisp/dhis/ProgramApiTest.java @@ -33,6 +33,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; + import java.util.List; import org.hisp.dhis.model.DataElement; import org.hisp.dhis.model.Program; From 8929d422b40494d29f616ef01062c3baaa9bb5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Thu, 8 May 2025 15:41:36 +0200 Subject: [PATCH 11/13] fix: Update code --- src/test/java/org/hisp/dhis/ProgramApiTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/org/hisp/dhis/ProgramApiTest.java b/src/test/java/org/hisp/dhis/ProgramApiTest.java index 5816f974..38a91139 100644 --- a/src/test/java/org/hisp/dhis/ProgramApiTest.java +++ b/src/test/java/org/hisp/dhis/ProgramApiTest.java @@ -33,7 +33,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; - import java.util.List; import org.hisp.dhis.model.DataElement; import org.hisp.dhis.model.Program; @@ -145,7 +144,7 @@ void testGetProgramInpatientCase() { assertNotBlank(pr.getShortName()); assertNotNull(pr.getProgramStages()); assertNotNull(pr.getProgramStageSections()); - assertFalse(pr.getProgramStageSections().isEmpty()); + assertFalse (pr.getProgramStageSections().isEmpty()); ProgramStage ps = pr.getProgramStages().get(0); From c6f6d64e4cb517a87d18c067f6730c98dd955540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Thu, 8 May 2025 15:41:42 +0200 Subject: [PATCH 12/13] fix: Update code --- src/test/java/org/hisp/dhis/ProgramApiTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/hisp/dhis/ProgramApiTest.java b/src/test/java/org/hisp/dhis/ProgramApiTest.java index 38a91139..5816f974 100644 --- a/src/test/java/org/hisp/dhis/ProgramApiTest.java +++ b/src/test/java/org/hisp/dhis/ProgramApiTest.java @@ -33,6 +33,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; + import java.util.List; import org.hisp.dhis.model.DataElement; import org.hisp.dhis.model.Program; @@ -144,7 +145,7 @@ void testGetProgramInpatientCase() { assertNotBlank(pr.getShortName()); assertNotNull(pr.getProgramStages()); assertNotNull(pr.getProgramStageSections()); - assertFalse (pr.getProgramStageSections().isEmpty()); + assertFalse(pr.getProgramStageSections().isEmpty()); ProgramStage ps = pr.getProgramStages().get(0); From c57efdd92d7da048412dee052c430af6af1af455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Helge=20=C3=98verland?= Date: Thu, 8 May 2025 15:49:26 +0200 Subject: [PATCH 13/13] fix: Update code --- src/main/java/org/hisp/dhis/model/Dhis2Objects.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/hisp/dhis/model/Dhis2Objects.java b/src/main/java/org/hisp/dhis/model/Dhis2Objects.java index 6dff170c..fad3beaf 100644 --- a/src/main/java/org/hisp/dhis/model/Dhis2Objects.java +++ b/src/main/java/org/hisp/dhis/model/Dhis2Objects.java @@ -87,6 +87,10 @@ public class Dhis2Objects { @JsonProperty private List programs = new ArrayList<>(); + @JsonProperty private List programStages = new ArrayList<>(); + + @JsonProperty private List programStageSections = new ArrayList<>(); + @JsonProperty private List programIndicators = new ArrayList<>(); @JsonProperty private List trackedEntityTypes = new ArrayList<>();