diff --git a/.github/workflows/testbeds.yml b/.github/workflows/testbeds.yml index 0d3369bff..f720a942d 100644 --- a/.github/workflows/testbeds.yml +++ b/.github/workflows/testbeds.yml @@ -13,15 +13,15 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '8' distribution: 'adopt' - name: Run Maven install run: mvn --batch-mode --update-snapshots -P ESA -DskipTests clean install - name: Cache Maven local repository - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-services-java-${{ steps.get-date.outputs.date }} @@ -34,15 +34,15 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'adopt' - name: Run Maven install run: mvn --batch-mode --update-snapshots -P ESA -DskipTests clean install - name: Cache Maven local repository - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-services-java-${{ steps.get-date.outputs.date }} @@ -55,15 +55,15 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - name: Run Maven install run: mvn --batch-mode --update-snapshots -P ESA -DskipTests clean install - name: Cache Maven local repository - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-services-java-${{ steps.get-date.outputs.date }} @@ -76,15 +76,15 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '21' distribution: 'adopt' - name: Run Maven install run: mvn --batch-mode --update-snapshots -P ESA -DskipTests install - name: Cache Maven local repository - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-services-java-${{ steps.get-date.outputs.date }} @@ -98,13 +98,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '8' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-services-java-${{ steps.get-date.outputs.date }} @@ -112,7 +112,7 @@ jobs: run: mvn --batch-mode --update-snapshots -pl '!testbed-malspp-framework,!testbed-malspp' -P ESA -DskipTests clean install # disable malspp for now working-directory: testbeds - name: Cache Maven local repository - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -126,13 +126,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-services-java-${{ steps.get-date.outputs.date }} @@ -140,7 +140,7 @@ jobs: run: mvn --batch-mode --update-snapshots -pl '!testbed-malspp-framework,!testbed-malspp' -P ESA -DskipTests clean install # disable malspp for now working-directory: testbeds - name: Cache Maven local repository - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -154,13 +154,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-services-java-${{ steps.get-date.outputs.date }} @@ -168,7 +168,7 @@ jobs: run: mvn --batch-mode --update-snapshots -pl '!testbed-malspp-framework,!testbed-malspp' -P ESA -DskipTests clean install # disable malspp for now working-directory: testbeds - name: Cache Maven local repository - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -182,13 +182,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '21' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-services-java-${{ steps.get-date.outputs.date }} @@ -196,7 +196,7 @@ jobs: run: mvn --batch-mode --update-snapshots -pl '!testbed-malspp-framework,!testbed-malspp' -P ESA -DskipTests install # disable malspp for now working-directory: testbeds - name: Cache Maven local repository - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -210,13 +210,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '8' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -225,9 +225,9 @@ jobs: working-directory: testbeds/testbed-mal - name: Upload report for MAL testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-mal-report + name: testbed-mal-jdk8-report path: testbeds/testbed-mal/target/surefire-reports/ testbed-mal-jdk11: @@ -239,13 +239,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -254,9 +254,9 @@ jobs: working-directory: testbeds/testbed-mal - name: Upload report for MAL testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-mal-report + name: testbed-mal-jdk11-report path: testbeds/testbed-mal/target/surefire-reports/ testbed-mal-jdk11-tcpip: @@ -268,13 +268,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -283,9 +283,9 @@ jobs: working-directory: testbeds/testbed-mal - name: Upload report for MAL testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-mal-report-tcpip + name: testbed-mal-jdk11-report-tcpip path: testbeds/testbed-mal/target/surefire-reports/ testbed-mal-jdk8-http: @@ -297,13 +297,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '8' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -312,9 +312,9 @@ jobs: working-directory: testbeds/testbed-mal - name: Upload report for MAL testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-mal-report-http + name: testbed-mal-jdk8-report-http path: testbeds/testbed-mal/target/surefire-reports/ testbed-mal-jdk11-zmtp: @@ -326,13 +326,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -341,9 +341,9 @@ jobs: working-directory: testbeds/testbed-mal - name: Upload report for MAL testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-mal-report-zmtp + name: testbed-mal-jdk11-report-zmtp path: testbeds/testbed-mal/target/surefire-reports/ testbed-mal-jdk17: @@ -355,13 +355,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -370,9 +370,9 @@ jobs: working-directory: testbeds/testbed-mal - name: Upload report for MAL testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-mal-report + name: testbed-mal-jdk17-report path: testbeds/testbed-mal/target/surefire-reports/ testbed-mal-jdk21: @@ -385,13 +385,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '21' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -400,9 +400,9 @@ jobs: working-directory: testbeds/testbed-mal - name: Upload report for MAL testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-mal-report + name: testbed-mal-jdk21-report path: testbeds/testbed-mal/target/surefire-reports/ testbed-com-jdk8: @@ -414,13 +414,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '8' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -429,9 +429,9 @@ jobs: working-directory: testbeds/testbed-com - name: Upload report for COM testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-com-report + name: testbed-com-jdk8-report path: testbeds/testbed-com/target/surefire-reports/ testbed-com-jdk11: @@ -443,13 +443,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -458,9 +458,9 @@ jobs: working-directory: testbeds/testbed-com - name: Upload report for COM testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-com-report + name: testbed-com-jdk11-report path: testbeds/testbed-com/target/surefire-reports/ testbed-com-jdk17: @@ -472,13 +472,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -487,9 +487,9 @@ jobs: working-directory: testbeds/testbed-com - name: Upload report for COM testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-com-report + name: testbed-com-jdk17-report path: testbeds/testbed-com/target/surefire-reports/ testbed-com-jdk21: @@ -502,13 +502,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '21' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -517,9 +517,9 @@ jobs: working-directory: testbeds/testbed-com - name: Upload report for COM testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-com-report + name: testbed-com-jdk21-report path: testbeds/testbed-com/target/surefire-reports/ testbed-malspp-jdk8: @@ -532,13 +532,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '8' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -547,9 +547,9 @@ jobs: working-directory: testbeds/testbed-malspp - name: Upload report for MAL/SPP testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-malspp-report + name: testbed-malspp-jdk8-report path: testbeds/testbed-malspp/target/surefire-reports/ testbed-malspp-jdk11: @@ -562,13 +562,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -577,9 +577,9 @@ jobs: working-directory: testbeds/testbed-malspp - name: Upload report for MAL/SPP testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-malspp-report + name: testbed-malspp-jdk11-report path: testbeds/testbed-malspp/target/surefire-reports/ testbed-malspp-jdk17: @@ -592,13 +592,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -607,9 +607,9 @@ jobs: working-directory: testbeds/testbed-malspp - name: Upload report for MAL/SPP testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-malspp-report + name: testbed-malspp-jdk17-report path: testbeds/testbed-malspp/target/surefire-reports/ testbed-malspp-jdk21: @@ -622,13 +622,13 @@ jobs: run: | echo "::set-output name=date::$(/bin/date -u "+%Y-week-%U")" shell: bash - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: '21' distribution: 'adopt' - name: Restore Maven local repository from cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-mo-testbeds-${{ steps.get-date.outputs.date }} @@ -637,7 +637,7 @@ jobs: working-directory: testbeds/testbed-malspp - name: Upload report for MAL/SPP testbed if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: testbed-malspp-report + name: testbed-malspp-jdk21-report path: testbeds/testbed-malspp/target/surefire-reports/ \ No newline at end of file diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index df3b5004e..9e3363d6d 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -4,7 +4,15 @@ ESA CCSDS MO services - Release Notes These Release Notes include a short summary of the updates done for each version. The different versions and respective updates are the following: -### Version 11.1 (TBD) +### Version 11.2 (2025) +* Fixes the MAL Broker bug that did not allow multiple PUB-SUB operations within the same service +* MPD specification - Updates to include many of the RIDs found during implementation +* Word API Generator: Supports the new "Requirements" section on operations. These are obtained from the XML file of the specs +* Word API Generator: Supports the new "Type Signature" section on operations +* Updated the Hybrid XSD to be closer to the latest version. Also, testbed XML specs had to be updated for compliance to the Hybrid XSD +* Adds more tests to the MPD Testbed + +### Version 11.1 (05 December 2024) * Adds dedicated yaml workflows for testing the MAL with tcpip, http, and zmtp * Merges the xml-jaxb project into the generator-interfaces project * Improves the Enumerations auto-generated code diff --git a/RELEASING.md b/RELEASING.md index ef90122e8..21790a42b 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -69,6 +69,12 @@ mvn clean deploy -P release 6. Create a GitHub release in: https://github.com/esa/mo-services-java/releases +7. Create a new branch from master: +``` +git checkout master +git pull +git checkout -b vAA.B +``` Extra ------------- diff --git a/api-generator/api-generator-maven-plugin/pom.xml b/api-generator/api-generator-maven-plugin/pom.xml index f58a9aa4d..fe974218b 100644 --- a/api-generator/api-generator-maven-plugin/pom.xml +++ b/api-generator/api-generator-maven-plugin/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml api-generator-maven-plugin - 11.1 + 11.2 maven-plugin ESA MO API Generator - Maven Plugin diff --git a/api-generator/generator-docs/pom.xml b/api-generator/generator-docs/pom.xml index e10e23a28..4376156d1 100644 --- a/api-generator/generator-docs/pom.xml +++ b/api-generator/generator-docs/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml generator-docs - 11.1 + 11.2 jar ESA MO API Generator - Documentation diff --git a/api-generator/generator-docs/src/main/java/esa/mo/tools/stubgen/GeneratorDocx.java b/api-generator/generator-docs/src/main/java/esa/mo/tools/stubgen/GeneratorDocx.java index fa5bcef79..18fa4224c 100644 --- a/api-generator/generator-docs/src/main/java/esa/mo/tools/stubgen/GeneratorDocx.java +++ b/api-generator/generator-docs/src/main/java/esa/mo/tools/stubgen/GeneratorDocx.java @@ -61,7 +61,7 @@ public class GeneratorDocx extends GeneratorDocument { 2200, 1700, 800, 4300 }; private static final int[] OPERATION_ERROR_TABLE_WIDTHS = new int[]{ - 1500, 1500, 2500, 3500 + 1500, 1000, 2500, 4000 }; private static final int[] ERROR_TABLE_WIDTHS = new int[]{ 2302, 1430, 5268 @@ -145,16 +145,13 @@ public void generate(String destFolderName, XmlSpecification xml, //StubUtils.createResource(folder, "styles", ext, ""); // Times New Roman Style //StubUtils.createResource(folder, "styles", ext, ""); - // Times New Roman Style + MO Table style //StubUtils.createResource(folder, "styles", ext, ""); - // Times New Roman Style with size 12 + MO Table style StubUtils.createResource(folder, "styles", ext, ""); // Pure CCSDS //StubUtils.createResource(folder, "styles", ext, ""); - // Modified CCSDS style /* StringBuilder stylesStr = new StringBuilder(); @@ -218,12 +215,14 @@ public void generate(String destFolderName, XmlSpecification xml, for (CapabilitySetType cSet : service.getCapabilitySet()) { for (OperationType op : cSet.getSendIPOrSubmitIPOrRequestIP()) { docxServiceFile.addPageBreak(); - docxServiceFile.addTitle(3, "OPERATION: ", op.getName(), "OPERATION_" + service.getName(), true); + // The name of the bookmark cannot be too long, otherwise it gets cut and the + // link won't work! Therefore, the "service number" is used instead of the name + docxServiceFile.addTitle(3, "Operation: ", op.getName(), "OPERATION_" + service.getNumber(), true); docxServiceFile.addTitle(4, "Overview"); docxServiceFile.addComment(op.getComment()); drawOperationTable(docxServiceFile, area, service, op); addOperationStructureDetails(docxServiceFile, op); - addOperationErrorDetails(docxServiceFile, area, service, op); + addOperationMOErrorDetails(docxServiceFile, area, service, op); } } } @@ -406,7 +405,8 @@ private void drawServiceCapabilitySet(DocxBaseWriter docxFile, ServiceType servi for (OperationType op : cSet.getSendIPOrSubmitIPOrRequestIP()) { docxFile.startRow(); docxFile.addCell(0, SERVICE_OVERVIEW_TABLE_WIDTHS, operationType(op), colour); - docxFile.addCellWithHyperlink(1, SERVICE_OVERVIEW_TABLE_WIDTHS, op.getName(), colour, "OPERATION_" + service.getName() + "_" + op.getName(), 2); + String linkTo = "OPERATION_" + service.getNumber() + "_" + op.getName(); + docxFile.addCellWithHyperlink(1, SERVICE_OVERVIEW_TABLE_WIDTHS, op.getName(), colour, linkTo, 2); docxFile.addCell(3, SERVICE_OVERVIEW_TABLE_WIDTHS, String.valueOf(op.getNumber()), colour); docxFile.addCell(4, SERVICE_OVERVIEW_TABLE_WIDTHS, String.valueOf(cSet.getNumber()), colour, true, firstRow); docxFile.endRow(); @@ -627,50 +627,50 @@ private void drawOperationTable(DocxBaseWriter docxFile, AreaType area, ServiceT drawOperationPattern(docxFile, "SEND"); drawOperationMessageHeader(docxFile); drawOperationMessageDetails(docxFile, area, service, true, "SEND", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getSend().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getSend().getField())); } else if (op instanceof SubmitOperationType) { SubmitOperationType lop = (SubmitOperationType) op; drawOperationPattern(docxFile, "SUBMIT"); drawOperationMessageHeader(docxFile); drawOperationMessageDetails(docxFile, area, service, true, "SUBMIT", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getSubmit().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getSubmit().getField())); } else if (op instanceof RequestOperationType) { RequestOperationType lop = (RequestOperationType) op; drawOperationPattern(docxFile, "REQUEST"); drawOperationMessageHeader(docxFile); drawOperationMessageDetails(docxFile, area, service, true, "REQUEST", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getRequest().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getRequest().getField())); drawOperationMessageDetails(docxFile, area, service, false, "RESPONSE", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getResponse().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getResponse().getField())); } else if (op instanceof InvokeOperationType) { InvokeOperationType lop = (InvokeOperationType) op; drawOperationPattern(docxFile, "INVOKE"); drawOperationMessageHeader(docxFile); drawOperationMessageDetails(docxFile, area, service, true, "INVOKE", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getInvoke().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getInvoke().getField())); drawOperationMessageDetails(docxFile, area, service, false, "ACK", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getAcknowledgement().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getAcknowledgement().getField())); drawOperationMessageDetails(docxFile, area, service, false, "RESPONSE", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getResponse().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getResponse().getField())); } else if (op instanceof ProgressOperationType) { ProgressOperationType lop = (ProgressOperationType) op; drawOperationPattern(docxFile, "PROGRESS"); drawOperationMessageHeader(docxFile); drawOperationMessageDetails(docxFile, area, service, true, "PROGRESS", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getProgress().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getProgress().getField())); drawOperationMessageDetails(docxFile, area, service, false, "ACK", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getAcknowledgement().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getAcknowledgement().getField())); drawOperationMessageDetails(docxFile, area, service, false, "UPDATE", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getUpdate().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getUpdate().getField())); drawOperationMessageDetails(docxFile, area, service, false, "RESPONSE", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getResponse().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getResponse().getField())); } else if (op instanceof PubSubOperationType) { PubSubOperationType lop = (PubSubOperationType) op; drawOperationPattern(docxFile, "PUBLISH-SUBSCRIBE"); - AnyTypeReference subKeys = lop.getMessages().getSubscriptionKeys(); + MessageBodyType subKeys = lop.getMessages().getSubscriptionKeys(); if (subKeys != null) { drawOperationPubSubKeys(docxFile, area, service, - TypeUtils.getTypeListViaXSDAny(subKeys.getAny())); + TypeUtils.getTypeListViaField(subKeys.getField())); } drawOperationMessageHeader(docxFile); // Probably looks cooler like this: @@ -678,7 +678,7 @@ private void drawOperationTable(DocxBaseWriter docxFile, AreaType area, ServiceT //drawOperationMessageDetails(docxFile, area, service, true, "SUBSCRIPTION KEYS", TypeUtils.getTypeListViaXSDAny(subKeys.getAny())); } drawOperationMessageDetails(docxFile, area, service, false, "PUBLISH", - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getPublishNotify().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getPublishNotify().getField())); } docxFile.endTable(); @@ -731,7 +731,7 @@ private void drawOperationMessageDetails(DocxBaseWriter docxFile, AreaType area, } private void addOperationStructureDetails(DocxBaseWriter docxFile, OperationType op) throws IOException { - List msgs = new LinkedList<>(); + List msgs = new LinkedList<>(); if (op instanceof SendOperationType) { SendOperationType lop = (SendOperationType) op; @@ -756,6 +756,7 @@ private void addOperationStructureDetails(DocxBaseWriter docxFile, OperationType msgs.add(lop.getMessages().getResponse()); } else if (op instanceof PubSubOperationType) { PubSubOperationType lop = (PubSubOperationType) op; + msgs.add(lop.getMessages().getSubscriptionKeys()); msgs.add(lop.getMessages().getPublishNotify()); } @@ -767,35 +768,35 @@ private void addOperationStructureDetails(DocxBaseWriter docxFile, OperationType docxFile.addTitle(4, "Requirements"); - if (!msgs.isEmpty()) { - addRequirementsDetails(docxFile, msgs); + if (op.getDocumentation() != null) { + addRequirementsDetails(docxFile, op.getDocumentation()); } } - private void addTypeSignatureDetails(DocxBaseWriter docxFile, List msgs) throws IOException { - List signatureDetails = null; - for (AnyTypeReference msg : msgs) { - List refs = TypeUtils.getTypeListViaXSDAny(msg.getAny()); + private void addTypeSignatureDetails(DocxBaseWriter docxFile, List msgs) throws IOException { + for (MessageBodyType msg : msgs) { + List refs = TypeUtils.getTypeListViaField(msg.getField()); for (TypeRef typeRef : refs) { if (typeRef.isField()) { - signatureDetails = GeneratorUtils.addSplitStrings(signatureDetails, typeRef.getFieldRef().getComment()); + String fieldName = typeRef.getFieldRef().getName(); + String fieldComment = typeRef.getFieldRef().getComment(); + docxFile.addSingleTypeSignature(fieldName, fieldComment); } } } - - docxFile.addNumberedComment(signatureDetails); } - private void addRequirementsDetails(DocxBaseWriter docxFile, List msgs) throws IOException { + private void addRequirementsDetails(DocxBaseWriter docxFile, List docs) throws IOException { List requirements = null; - for (AnyTypeReference msg : msgs) { - requirements = GeneratorUtils.addSplitStrings(requirements, msg.getComment()); + for (DocumentationType doc : docs) { + requirements = GeneratorUtils.addSplitStrings(requirements, doc.getContent()); } docxFile.addNumberedComment(requirements); } - private void addOperationErrorDetails(DocxBaseWriter docxFile, AreaType area, ServiceType service, OperationType op) throws IOException { + private void addOperationMOErrorDetails(DocxBaseWriter docxFile, AreaType area, + ServiceType service, OperationType op) throws IOException { docxFile.addTitle(4, "MO Errors"); if (op instanceof SendOperationType) { @@ -908,29 +909,33 @@ public int compare(String o1, String o2) { } } + ArrayList allMOErrors = new ArrayList<>(); + for (String key : m.navigableKeySet()) { for (Object[] err : m.get(key)) { List listErrors = (List) err[1]; if (listErrors.isEmpty()) { ArrayList list = new ArrayList<>(); list.add((String) err[0] + ": Not described"); - docxFile.addNumberedComment(list); + allMOErrors.addAll(list); } if (listErrors.size() == 1) { ArrayList list = new ArrayList<>(); list.add((String) err[0] + ": " + listErrors.get(0)); - docxFile.addNumberedComment(list); + allMOErrors.addAll(list); } if (listErrors.size() > 1) { ArrayList list = new ArrayList<>(); for (String txt : (List) err[1]) { list.add((String) err[0] + ": " + txt); } - docxFile.addNumberedComment(list); + allMOErrors.addAll(list); } } } + docxFile.addNumberedComment(allMOErrors); + docxFile.startTable(OPERATION_ERROR_TABLE_WIDTHS); docxFile.startRow(); docxFile.addCell(0, OPERATION_ERROR_TABLE_WIDTHS, "Error", HEADER_COLOUR); @@ -976,7 +981,6 @@ private void addErrorDefinitions(List errors, OperationErro private void createFundamentalClass(DocxBaseWriter docxFile, FundamentalType fundamental) throws IOException { String fundName = fundamental.getName(); - logger.info("Creating fundamental class " + fundName); docxFile.addTitle(3, "Fundamental: ", fundName, "DATATYPE", true); @@ -988,7 +992,6 @@ private void createFundamentalClass(DocxBaseWriter docxFile, FundamentalType fun private void createAttributeClass(DocxBaseWriter docxFile, AttributeType attribute) throws IOException { String attrName = attribute.getName(); - logger.info("Creating attribute class " + attrName); docxFile.addTitle(3, "Attribute: ", attrName, "DATATYPE", true); @@ -1019,10 +1022,9 @@ private void createAttributeClass(DocxBaseWriter docxFile, AttributeType attribu private void createEnumerationClass(DocxBaseWriter docxFile, EnumerationType enumeration) throws IOException { String enumName = enumeration.getName(); - logger.info("Creating enumeration class " + enumName); - docxFile.addTitle(3, "ENUMERATION: ", enumName, "DATATYPE", true); + docxFile.addTitle(3, "Enumeration: ", enumName, "DATATYPE", true); if ((null != enumeration.getComment()) && (0 < enumeration.getComment().length())) { docxFile.addComment(enumeration.getComment()); @@ -1060,10 +1062,14 @@ private void createEnumerationClass(DocxBaseWriter docxFile, EnumerationType enu private void createCompositeClass(DocxBaseWriter docxFile, AreaType area, ServiceType service, CompositeType composite) throws IOException { String compName = composite.getName(); - logger.info("Creating composite class " + compName); - docxFile.addTitle(3, "Composite: ", compName, "DATATYPE", true); + // Check if it is an "MO Object" + String extendsName = composite.getExtends().getType().getName(); + boolean isMOObject = extendsName.equals("Object"); + + String prefixSection = isMOObject ? "MO Object: " : "Composite: "; + docxFile.addTitle(3, prefixSection, compName, "DATATYPE", true); if ((null != composite.getComment()) && (0 < composite.getComment().length())) { docxFile.addComment(composite.getComment()); diff --git a/api-generator/generator-docs/src/main/java/esa/mo/tools/stubgen/docx/DocxBaseWriter.java b/api-generator/generator-docs/src/main/java/esa/mo/tools/stubgen/docx/DocxBaseWriter.java index 69c150397..0d97d1307 100644 --- a/api-generator/generator-docs/src/main/java/esa/mo/tools/stubgen/docx/DocxBaseWriter.java +++ b/api-generator/generator-docs/src/main/java/esa/mo/tools/stubgen/docx/DocxBaseWriter.java @@ -74,7 +74,7 @@ public void startTable(int[] widths) throws IOException { } public void startTable(int[] widths, String caption) throws IOException { - if (null != caption) { + if (caption != null) { buffer.append(makeLine(2, "")); buffer.append(makeLine(3, "Table ")); buffer.append(makeLine(3, "")); @@ -85,8 +85,8 @@ public void startTable(int[] widths, String caption) throws IOException { buffer.append(makeLine(3, "\"")); buffer.append(makeLine(3, ": " + caption + "")); buffer.append(makeLine(2, "")); - } + buffer.append(makeLine(2, "")); buffer.append(makeLine(3, "")); buffer.append(makeLine(4, "")); @@ -100,7 +100,7 @@ public void startTable(int[] widths, String caption) throws IOException { buffer.append(makeLine(4, "")); buffer.append(makeLine(3, "")); - if (null != widths) { + if (widths != null) { buffer.append(makeLine(3, "")); for (int i : widths) { buffer.append(makeLine(4, "")); @@ -273,7 +273,8 @@ public void addTitle(int level, String name) throws IOException { public void addTitle(int level, String section, String name, String bookmarkSection, boolean bookmark) throws IOException { buffer.append(makeLine(2, "")); if (bookmark) { - buffer.append(makeLine(3, "")); + String linkTo = bookmarkSection + "_" + name; + buffer.append(makeLine(3, "")); } buffer.append(makeLine(3, "" + section + name + "")); buffer.append(makeLine(2, "")); @@ -287,28 +288,19 @@ public void addNumberedComment(List strings) throws IOException { } addNumberedComment(instance, 0, strings.iterator()); - /* - if (strings.size() == 1) { - addComment(strings.get(0)); - } else { - int instance = 0; - if (null != this.numberWriter) { - instance = this.numberWriter.getNextNumberingInstance(); - } - - addNumberedComment(instance, 0, strings.iterator()); - } - */ } } - public void addNumberedComment(int instance, int level, Iterator iterator) throws IOException { - while (iterator.hasNext()) { - String text = iterator.next(); + public void addNumberedComment(int instance, int level, Iterator lines) throws IOException { + while (lines.hasNext()) { + String text = lines.next(); if (text != null) { + if (text.trim().isEmpty()) { // Jump over empty lines + continue; + } if ("
    ".equalsIgnoreCase(text)) { - addNumberedComment(instance, level + 1, iterator); + addNumberedComment(instance, level + 1, lines); } else if ("
".equalsIgnoreCase(text)) { return; } else { @@ -342,7 +334,7 @@ public void addComment(String text) throws IOException { } for (String str : strings) { - if (null != str) { + if (str != null) { buffer.append(makeLine(2, str)); } } @@ -369,7 +361,15 @@ private void addNumberedComment(int instance, int level, String text) throws IOE addNumberedComment(instance, level, str); } } else { + // Case when strings.size() == 1 String str = strings.get(0); + + // Exceptional case when it has a "Note:" + if (text.toLowerCase().contains("note:")) { + addNote(text); + return; + } + if (str != null && str.length() > 0) { buffer.append(makeLine(2, "" @@ -379,6 +379,30 @@ private void addNumberedComment(int instance, int level, String text) throws IOE } } + public void addSingleTypeSignature(String fieldName, String fieldComment) throws IOException { + int instance = 1; + int level = 0; + + buffer.append(makeLine(2, "" + + "" + escape(fieldName) + + "" + + " - " + escape(fieldComment) + "")); + } + + public void addNote(String noteText) throws IOException { + // Fix the text by removing the "Note: " and "NOTE: " strings + noteText = noteText.replace("Note: ", ""); + noteText = noteText.replace("NOTE: ", ""); + + buffer.append(makeLine(2, "")); + buffer.append(makeLine(3, "")); + buffer.append(makeLine(3, "NOTE")); + buffer.append(makeLine(3, "")); + buffer.append(makeLine(3, "" + noteText + "")); + buffer.append(makeLine(2, "")); + } + private String createTypeHyperLink(boolean includeMessageFieldNames, boolean oldStyle, AreaType area, ServiceType service, TypeRef ref) throws IOException { String prefix = ""; @@ -440,7 +464,6 @@ public String createHyperLink(String prefix, String typeName, String postfix, String temp = linkTo.replace("ObjectRef<", "").replace(">", ""); String objectRefRemoved = temp.replace("ObjectRef(", "").replace(")", ""); - buf.append(""); if (withHyperlink) { diff --git a/api-generator/generator-interfaces/pom.xml b/api-generator/generator-interfaces/pom.xml index 027c49b01..554391b61 100644 --- a/api-generator/generator-interfaces/pom.xml +++ b/api-generator/generator-interfaces/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml generator-interfaces - 11.1 + 11.2 jar ESA MO API Generator - Interfaces @@ -65,12 +65,12 @@ int.esa.ccsds.mo xml-ccsds-mo-prototypes - 11.1 + 11.2 int.esa.ccsds.mo xml-ccsds-mo-standards - 11.1 + 11.2 @@ -142,7 +142,7 @@ xalan xalan - 2.7.1 + 2.7.2 diff --git a/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/GeneratorBase.java b/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/GeneratorBase.java index ef24571e5..21c81df49 100644 --- a/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/GeneratorBase.java +++ b/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/GeneratorBase.java @@ -613,7 +613,7 @@ private OperationSummary extractOperationSummary(OperationType op, int capNum) { SendOperationType lop = (SendOperationType) op; return new OperationSummary(InteractionPatternEnum.SEND_OP, op, capNum, TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getSend().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getSend().getField())), lop.getMessages().getSend().getComment(), null, "", null, "", @@ -622,7 +622,7 @@ private OperationSummary extractOperationSummary(OperationType op, int capNum) { SubmitOperationType lop = (SubmitOperationType) op; return new OperationSummary(InteractionPatternEnum.SUBMIT_OP, op, capNum, TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getSubmit().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getSubmit().getField())), lop.getMessages().getSubmit().getComment(), null, "", null, "", @@ -631,48 +631,48 @@ private OperationSummary extractOperationSummary(OperationType op, int capNum) { RequestOperationType lop = (RequestOperationType) op; return new OperationSummary(InteractionPatternEnum.REQUEST_OP, op, capNum, TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getRequest().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getRequest().getField())), lop.getMessages().getRequest().getComment(), null, "", null, "", TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getResponse().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getResponse().getField())), lop.getMessages().getResponse().getComment()); } else if (op instanceof InvokeOperationType) { InvokeOperationType lop = (InvokeOperationType) op; return new OperationSummary(InteractionPatternEnum.INVOKE_OP, op, capNum, TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getInvoke().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getInvoke().getField())), lop.getMessages().getInvoke().getComment(), TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getAcknowledgement().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getAcknowledgement().getField())), lop.getMessages().getAcknowledgement().getComment(), null, "", TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getResponse().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getResponse().getField())), lop.getMessages().getResponse().getComment()); } else if (op instanceof ProgressOperationType) { ProgressOperationType lop = (ProgressOperationType) op; return new OperationSummary(InteractionPatternEnum.PROGRESS_OP, op, capNum, TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getProgress().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getProgress().getField())), lop.getMessages().getProgress().getComment(), TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getAcknowledgement().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getAcknowledgement().getField())), lop.getMessages().getAcknowledgement().getComment(), TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getUpdate().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getUpdate().getField())), lop.getMessages().getUpdate().getComment(), TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getResponse().getAny())), + TypeUtils.getTypeListViaField(lop.getMessages().getResponse().getField())), lop.getMessages().getResponse().getComment()); } else if (op instanceof PubSubOperationType) { PubSubOperationType lop = (PubSubOperationType) op; - AnyTypeReference subs = lop.getMessages().getSubscriptionKeys(); + MessageBodyType subs = lop.getMessages().getSubscriptionKeys(); List subKeysList = (subs == null) ? null - : TypeUtils.convertTypeReferences(this, TypeUtils.getTypeListViaXSDAny(subs.getAny())); + : TypeUtils.convertTypeReferences(this, TypeUtils.getTypeListViaField(subs.getField())); List riList = TypeUtils.convertTypeReferences(this, - TypeUtils.getTypeListViaXSDAny(lop.getMessages().getPublishNotify().getAny())); + TypeUtils.getTypeListViaField(lop.getMessages().getPublishNotify().getField())); return new OperationSummary(InteractionPatternEnum.PUBSUB_OP, op, capNum, subKeysList, "", diff --git a/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/specification/OperationSummary.java b/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/specification/OperationSummary.java index 2e3c6e22a..3b232660c 100644 --- a/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/specification/OperationSummary.java +++ b/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/specification/OperationSummary.java @@ -20,7 +20,7 @@ */ package esa.mo.tools.stubgen.specification; -import esa.mo.xsd.AnyTypeReference; +import esa.mo.xsd.MessageBodyType; import esa.mo.xsd.OperationType; import esa.mo.xsd.PubSubOperationType; import java.util.List; @@ -220,7 +220,7 @@ public String getRetComment() { return retComment; } - public AnyTypeReference getSubscriptionKeys() { + public MessageBodyType getSubscriptionKeys() { PubSubOperationType lop = (PubSubOperationType) originalOp; return lop.getMessages().getSubscriptionKeys(); } diff --git a/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/specification/TypeUtils.java b/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/specification/TypeUtils.java index bb5cd9bec..59de564c3 100644 --- a/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/specification/TypeUtils.java +++ b/api-generator/generator-interfaces/src/main/java/esa/mo/tools/stubgen/specification/TypeUtils.java @@ -226,6 +226,23 @@ public static String getTypeShortForm(TypeInformation tiSource, return tiSource.convertToNamespace(targetType + ".SHORT_FORM"); } + public static List getTypeListViaField(List any) { + if (any == null) { + return null; + } + + if (any instanceof List) { + ArrayList list = new ArrayList<>(any.size()); + for (NamedElementReferenceWithCommentType e : any) { + list.add(getTypeFromValue(e)); + } + return list; + } else { + throw new IllegalArgumentException( + "Unexpected type in message body of : " + any.getClass().getSimpleName()); + } + } + /** * Converts an XML any field into a list of types. * @@ -250,6 +267,25 @@ public static List getTypeListViaXSDAny(Object any) { } } + /** + * Converts an NamedElementReferenceWithCommentType field into a type reference. + * + * @param any the XML any field. + * @return the converted type. + */ + public static TypeRef getTypeFromValue(NamedElementReferenceWithCommentType any) { + if (any == null) { + return null; + } + + if (any instanceof NamedElementReferenceWithCommentType) { + return new TypeRef((NamedElementReferenceWithCommentType) any); + } else { + throw new IllegalArgumentException( + "Unexpected type in message body of : " + any.getClass().getSimpleName()); + } + } + /** * Converts an XML any field into a type reference. * diff --git a/api-generator/generator-interfaces/src/main/java/esa/mo/xsd/util/XmlSpecification.java b/api-generator/generator-interfaces/src/main/java/esa/mo/xsd/util/XmlSpecification.java index ac2d1aac2..833e6bb09 100644 --- a/api-generator/generator-interfaces/src/main/java/esa/mo/xsd/util/XmlSpecification.java +++ b/api-generator/generator-interfaces/src/main/java/esa/mo/xsd/util/XmlSpecification.java @@ -66,14 +66,29 @@ public XmlSpecification(File file, JAXBElement rootElement, SpecificationType sp this.specType = specType; } + /** + * Returns the XML file. + * + * @return the XML file. + */ public File getFile() { return file; } + /** + * Returns the Root Element. + * + * @return the Root Element. + */ public JAXBElement getRootElement() { return rootElement; } + /** + * Returns the Specification Type. + * + * @return the Specification Type. + */ public SpecificationType getSpecType() { return specType; } diff --git a/api-generator/generator-interfaces/src/main/java/esa/mo/xsd/util/XsdSpecification.java b/api-generator/generator-interfaces/src/main/java/esa/mo/xsd/util/XsdSpecification.java index a65ceb197..c777c7be6 100644 --- a/api-generator/generator-interfaces/src/main/java/esa/mo/xsd/util/XsdSpecification.java +++ b/api-generator/generator-interfaces/src/main/java/esa/mo/xsd/util/XsdSpecification.java @@ -49,10 +49,20 @@ public XsdSpecification(File file, Schema schema) { this.schema = schema; } + /** + * Returns the XSD file. + * + * @return the XSD file. + */ public File getFile() { return file; } + /** + * Returns the XSD Schema. + * + * @return the XSD Schema. + */ public Schema getSchema() { return schema; } diff --git a/api-generator/generator-java/pom.xml b/api-generator/generator-java/pom.xml index 6bfca7153..60e5bba01 100644 --- a/api-generator/generator-java/pom.xml +++ b/api-generator/generator-java/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml generator-java - 11.1 + 11.2 jar ESA MO API Generator - Java diff --git a/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/GeneratorJava.java b/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/GeneratorJava.java index a834eba4c..bce6e5065 100644 --- a/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/GeneratorJava.java +++ b/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/GeneratorJava.java @@ -33,8 +33,8 @@ import esa.mo.tools.stubgen.writers.LanguageWriter; import esa.mo.tools.stubgen.writers.MethodWriter; import esa.mo.tools.stubgen.writers.TargetWriter; -import esa.mo.xsd.AnyTypeReference; import esa.mo.xsd.AreaType; +import esa.mo.xsd.MessageBodyType; import esa.mo.xsd.NamedElementReferenceWithCommentType; import esa.mo.xsd.ServiceType; import esa.mo.xsd.TypeReference; @@ -45,7 +45,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import javax.xml.bind.JAXBElement; /** * Generates stubs and skeletons for CCSDS MO Service specifications for the @@ -203,14 +202,12 @@ public void createRequiredPublisher(String destinationFolderName, String fqPubli method.addLine("org.ccsds.moims.mo.mal.structures.AttributeTypeList keyTypes = new org.ccsds.moims.mo.mal.structures.AttributeTypeList()"); if (publisher.getOperation() != null) { - AnyTypeReference keys = publisher.getOperation().getSubscriptionKeys(); + MessageBodyType keys = publisher.getOperation().getSubscriptionKeys(); if (keys != null) { - for (Object key : keys.getAny()) { - JAXBElement jaxbElement = (JAXBElement) key; - NamedElementReferenceWithCommentType aaa = (NamedElementReferenceWithCommentType) jaxbElement.getValue(); - method.addLine("keyNames.add(new org.ccsds.moims.mo.mal.structures.Identifier(\"" + aaa.getName() + "\"))"); - method.addLine("keyTypes.add(org.ccsds.moims.mo.mal.structures.AttributeType." + aaa.getType().getName().toUpperCase() + ")"); + for (NamedElementReferenceWithCommentType key : keys.getField()) { + method.addLine("keyNames.add(new org.ccsds.moims.mo.mal.structures.Identifier(\"" + key.getName() + "\"))"); + method.addLine("keyTypes.add(org.ccsds.moims.mo.mal.structures.AttributeType." + key.getType().getName().toUpperCase() + ")"); } } } @@ -284,7 +281,7 @@ public void createRequiredPublisher(String destinationFolderName, String fqPubli @Override public void createListClass(File folder, AreaType area, ServiceType service, - String srcTypeName, boolean isAbstract, Long shortFormPart) throws IOException { + String srcTypeName, boolean isAbstract, Integer shortFormPart) throws IOException { JavaLists javaLists = new JavaLists(this); String listName = srcTypeName + "List"; diff --git a/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/GeneratorLangs.java b/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/GeneratorLangs.java index c8776b153..3c8a56a1d 100644 --- a/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/GeneratorLangs.java +++ b/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/GeneratorLangs.java @@ -1639,7 +1639,8 @@ protected void createCompositeClass(File folder, AreaType area, ServiceType serv createListClass(folder, area, service, className, abstractComposite, composite.getShortFormPart()); } - public abstract void createListClass(File folder, AreaType area, ServiceType service, String srcTypeName, boolean isAbstract, Long shortFormPart) throws IOException; + public abstract void createListClass(File folder, AreaType area, ServiceType service, + String srcTypeName, boolean isAbstract, Integer shortFormPart) throws IOException; protected final void createMultiReturnType(String destinationFolderName, String returnTypeFqName, MultiReturnType returnTypeInfo) throws IOException { logger.info(" > Creating multiple return class class " + returnTypeFqName); diff --git a/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/java/JavaLists.java b/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/java/JavaLists.java index 55f4c4d58..20a7335f9 100644 --- a/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/java/JavaLists.java +++ b/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/java/JavaLists.java @@ -108,7 +108,7 @@ public void createHeterogeneousListClass(File folder, String area, * @throws IOException if there is a problem writing the file. */ public void createHomogeneousListClass(File folder, AreaType area, ServiceType service, - String srcTypeName, Long shortFormPart) throws IOException { + String srcTypeName, Integer shortFormPart) throws IOException { String listName = srcTypeName + "List"; TypeReference srcType = new TypeReference(); diff --git a/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/java/JavaServiceInfo.java b/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/java/JavaServiceInfo.java index ae0d3eb05..104aaa9d0 100644 --- a/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/java/JavaServiceInfo.java +++ b/api-generator/generator-java/src/main/java/esa/mo/tools/stubgen/java/JavaServiceInfo.java @@ -31,11 +31,11 @@ import esa.mo.tools.stubgen.specification.TypeUtils; import esa.mo.tools.stubgen.writers.ClassWriter; import esa.mo.tools.stubgen.writers.MethodWriter; -import esa.mo.xsd.AnyTypeReference; import esa.mo.xsd.AreaType; import esa.mo.xsd.CompositeType; import esa.mo.xsd.EnumerationType; import esa.mo.xsd.ExtendedServiceType; +import esa.mo.xsd.MessageBodyType; import esa.mo.xsd.ModelObjectType; import esa.mo.xsd.NamedElementReferenceWithCommentType; import esa.mo.xsd.ServiceType; @@ -126,10 +126,10 @@ public void createServiceInfoClass(File serviceFolder, AreaType area, if (op.getPattern() == InteractionPatternEnum.PUBSUB_OP) { StringBuilder arrayList = new StringBuilder("{"); - AnyTypeReference subsKeys = op.getSubscriptionKeys(); + MessageBodyType subsKeys = op.getSubscriptionKeys(); if (subsKeys != null) { - List types = TypeUtils.getTypeListViaXSDAny(subsKeys.getAny()); + List types = TypeUtils.getTypeListViaField(subsKeys.getField()); if (types != null && !types.isEmpty()) { String prefix = ""; for (TypeRef type : types) { diff --git a/api-generator/pom.xml b/api-generator/pom.xml index bfced13cf..3d2ebbd63 100644 --- a/api-generator/pom.xml +++ b/api-generator/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../parent/pom.xml api-generator - 11.1 + 11.2 pom ESA MO API Generator diff --git a/apis/api-area001-v003-mal/pom.xml b/apis/api-area001-v003-mal/pom.xml index 123349516..05ac90289 100644 --- a/apis/api-area001-v003-mal/pom.xml +++ b/apis/api-area001-v003-mal/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml api-area001-v003-mal - 11.1 + 11.2 jar ESA MO API - MAL v003 diff --git a/apis/api-area001-v003-mal/src/main/java/org/ccsds/moims/mo/mal/structures/Time.java b/apis/api-area001-v003-mal/src/main/java/org/ccsds/moims/mo/mal/structures/Time.java index 771b5dac7..c3be44ec4 100644 --- a/apis/api-area001-v003-mal/src/main/java/org/ccsds/moims/mo/mal/structures/Time.java +++ b/apis/api-area001-v003-mal/src/main/java/org/ccsds/moims/mo/mal/structures/Time.java @@ -20,6 +20,7 @@ */ package org.ccsds.moims.mo.mal.structures; +import java.util.Calendar; import org.ccsds.moims.mo.mal.MALDecoder; import org.ccsds.moims.mo.mal.MALEncoder; import org.ccsds.moims.mo.mal.MALException; @@ -84,6 +85,12 @@ public FineTime toFineTime() { return new FineTime(value * ONE_MILLION); } + public static Time generateTime(int year, int month, int day) { + Calendar calendar = Calendar.getInstance(); + calendar.set(year, month, day, 12, 0, 0); + return new Time(calendar.getTime().getTime()); + } + @Override public TypeId getTypeId() { return new TypeId(Attribute.TIME_SHORT_FORM); diff --git a/apis/api-area002-v001-com/pom.xml b/apis/api-area002-v001-com/pom.xml index 70aba1024..7f3136f80 100644 --- a/apis/api-area002-v001-com/pom.xml +++ b/apis/api-area002-v001-com/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml api-area002-v001-com - 11.1 + 11.2 jar ESA MO API - COM v001 diff --git a/apis/api-area003-v001-common/pom.xml b/apis/api-area003-v001-common/pom.xml index f50cf908a..eb88b240e 100644 --- a/apis/api-area003-v001-common/pom.xml +++ b/apis/api-area003-v001-common/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml api-area003-v001-common - 11.1 + 11.2 jar ESA MO API - Common v001 diff --git a/apis/api-area004-v001-mc/pom.xml b/apis/api-area004-v001-mc/pom.xml index e14473860..ee68ace24 100644 --- a/apis/api-area004-v001-mc/pom.xml +++ b/apis/api-area004-v001-mc/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml api-area004-v001-mc - 11.1 + 11.2 jar ESA MO API - MC v001 diff --git a/apis/api-area004-v002-mc/pom.xml b/apis/api-area004-v002-mc/pom.xml index aa201069e..6e2810a77 100644 --- a/apis/api-area004-v002-mc/pom.xml +++ b/apis/api-area004-v002-mc/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml api-area004-v002-mc - 11.1 + 11.2 jar ESA MO API - MC v002 diff --git a/apis/api-area005-v001-mps/pom.xml b/apis/api-area005-v001-mps/pom.xml index 94de2fd04..5157268f5 100644 --- a/apis/api-area005-v001-mps/pom.xml +++ b/apis/api-area005-v001-mps/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml api-area005-v001-mps - 11.1 + 11.2 jar ESA MO API - MPS v001 diff --git a/apis/api-area009-v001-mpd/pom.xml b/apis/api-area009-v001-mpd/pom.xml index fc268b4a6..547518f66 100644 --- a/apis/api-area009-v001-mpd/pom.xml +++ b/apis/api-area009-v001-mpd/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml api-area009-v001-mpd - 11.1 + 11.2 jar ESA MO API - MPD v001 diff --git a/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/Dataset.java b/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/Dataset.java new file mode 100644 index 000000000..e00c7b586 --- /dev/null +++ b/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/Dataset.java @@ -0,0 +1,91 @@ +/* ---------------------------------------------------------------------------- + * Copyright (C) 2024 European Space Agency + * European Space Operations Centre + * Darmstadt + * Germany + * ---------------------------------------------------------------------------- + * System : ESA CCSDS MO Services + * ---------------------------------------------------------------------------- + * Licensed under European Space Agency Public License (ESA-PL) Weak Copyleft – v2.4 + * You may not use this file except in compliance with the License. + * + * Except as expressly set forth in this License, the Software is provided to + * You on an "as is" basis and without warranties of any kind, including without + * limitation merchantability, fitness for a particular purpose, absence of + * defects or errors, accuracy or non-infringement of intellectual property rights. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * ---------------------------------------------------------------------------- + */ +package org.ccsds.moims.mo.mpd; + +import java.util.HashMap; +import org.ccsds.moims.mo.mal.structures.Blob; +import org.ccsds.moims.mo.mal.structures.ObjectIdentity; +import org.ccsds.moims.mo.mal.structures.ObjectRef; +import org.ccsds.moims.mo.mpd.backends.ProductRetrievalBackend; +import org.ccsds.moims.mo.mpd.structures.Product; +import org.ccsds.moims.mo.mpd.structures.ProductMetadata; +import org.ccsds.moims.mo.mpd.structures.ProductMetadataList; + +/** + * A abstract class for all backend Datasets. + */ +public abstract class Dataset implements ProductRetrievalBackend { + + private final HashMap productBodies = new HashMap(); + private final HashMap metadatas = new HashMap(); + private ProductMetadataList allMetadatas = null; + private NewProductAddedListener listener = null; + + @Override + public ProductMetadataList getMetadataFromAllProducts() { + if (allMetadatas == null || metadatas.size() != allMetadatas.size()) { + allMetadatas = new ProductMetadataList(); + + for (ProductMetadata metadata : metadatas.values()) { + allMetadatas.add(metadata); + } + } + return allMetadatas; + } + + @Override + public Product getProduct(ObjectRef productRef) { + ProductMetadata metadata = getMetadata(productRef); + Blob productBody = productBodies.get(productRef); + ObjectIdentity objId = new ObjectIdentity(productRef.getDomain(), + productRef.getKey(), productRef.getObjectVersion()); + + return new Product( + objId, + metadata.getProductType(), + metadata.getCreationDate(), + metadata.getSource(), + metadata.getContentDate(), + metadata.getAttributes(), + metadata.getDescription(), + productBody + ); + } + + @Override + public ProductMetadata getMetadata(ObjectRef productRef) { + return metadatas.get(productRef); + } + + @Override + public void setNewProductAddedListener(NewProductAddedListener listener) { + this.listener = listener; + } + + public void addNewProduct(ObjectRef ref, Blob productBody, ProductMetadata metadata) { + productBodies.put(ref, productBody); + metadatas.put(ref, metadata); + + if (listener != null) { + listener.onNewProductAdded(ref, metadata); + } + } +} diff --git a/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/NewProductAddedListener.java b/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/NewProductAddedListener.java new file mode 100644 index 000000000..650f8f7ea --- /dev/null +++ b/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/NewProductAddedListener.java @@ -0,0 +1,33 @@ +/* ---------------------------------------------------------------------------- + * Copyright (C) 2024 European Space Agency + * European Space Operations Centre + * Darmstadt + * Germany + * ---------------------------------------------------------------------------- + * System : ESA CCSDS MO Services + * ---------------------------------------------------------------------------- + * Licensed under European Space Agency Public License (ESA-PL) Weak Copyleft – v2.4 + * You may not use this file except in compliance with the License. + * + * Except as expressly set forth in this License, the Software is provided to + * You on an "as is" basis and without warranties of any kind, including without + * limitation merchantability, fitness for a particular purpose, absence of + * defects or errors, accuracy or non-infringement of intellectual property rights. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * ---------------------------------------------------------------------------- + */ +package org.ccsds.moims.mo.mpd; + +import org.ccsds.moims.mo.mal.structures.ObjectRef; +import org.ccsds.moims.mo.mpd.structures.Product; +import org.ccsds.moims.mo.mpd.structures.ProductMetadata; + +/** + * Interface to know when a new Product is added on the backend. + */ +public interface NewProductAddedListener { + + public void onNewProductAdded(ObjectRef ref, ProductMetadata metadata); +} diff --git a/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/backends/ProductRetrievalBackend.java b/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/backends/ProductRetrievalBackend.java index b5bd31b66..c29e44ab2 100644 --- a/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/backends/ProductRetrievalBackend.java +++ b/apis/api-area009-v001-mpd/src/main/java/org/ccsds/moims/mo/mpd/backends/ProductRetrievalBackend.java @@ -21,9 +21,10 @@ package org.ccsds.moims.mo.mpd.backends; import org.ccsds.moims.mo.mal.structures.ObjectRef; +import org.ccsds.moims.mo.mpd.NewProductAddedListener; import org.ccsds.moims.mo.mpd.structures.Product; -import org.ccsds.moims.mo.mpd.structures.ProductSummary; -import org.ccsds.moims.mo.mpd.structures.ProductSummaryList; +import org.ccsds.moims.mo.mpd.structures.ProductMetadata; +import org.ccsds.moims.mo.mpd.structures.ProductMetadataList; /** * The Backend interface to the Product Retrieval service. @@ -35,7 +36,7 @@ public interface ProductRetrievalBackend { * * @return The metadata from all available products. */ - public ProductSummaryList getMetadataFromAllProducts(); + public ProductMetadataList getMetadataFromAllProducts(); /** * Returns the corresponding product for the given productRef or NULL if not @@ -53,6 +54,12 @@ public interface ProductRetrievalBackend { * @param productRef The product reference. * @return The Metadata or NULL if not found. */ - public ProductSummary getMetadata(ObjectRef productRef); + public ProductMetadata getMetadata(ObjectRef productRef); + /** + * Sets the listener for the notifications of when new products are added. + * + * @param listener The listener. + */ + public void setNewProductAddedListener(NewProductAddedListener listener); } diff --git a/apis/pom.xml b/apis/pom.xml index aeeef258a..5c4f1c28d 100644 --- a/apis/pom.xml +++ b/apis/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../parent/pom.xml apis - 11.1 + 11.2 pom ESA MO APIs diff --git a/encodings/encoding-binary/pom.xml b/encodings/encoding-binary/pom.xml index 9c3ba4f4c..76c5816f0 100644 --- a/encodings/encoding-binary/pom.xml +++ b/encodings/encoding-binary/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml encoding-binary jar - 11.1 + 11.2 ESA MO Encoder - Binary A simple Java binary encoder for the CCSDS MAL diff --git a/encodings/encoding-string/pom.xml b/encodings/encoding-string/pom.xml index 514c5264c..466fe5b52 100644 --- a/encodings/encoding-string/pom.xml +++ b/encodings/encoding-string/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml encoding-string jar - 11.1 + 11.2 ESA MO Encoder - String A simple Java String based encoder for the CCSDS MAL diff --git a/encodings/encoding-xml/pom.xml b/encodings/encoding-xml/pom.xml index b3cdd79d6..05b9953e9 100644 --- a/encodings/encoding-xml/pom.xml +++ b/encodings/encoding-xml/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml encoding-xml jar - 11.1 + 11.2 ESA MO Encoder - XML A simple Java String based encoder for the CCSDS MAL diff --git a/encodings/pom.xml b/encodings/pom.xml index c05fb4e95..d749a3798 100644 --- a/encodings/pom.xml +++ b/encodings/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../parent/pom.xml encodings - 11.1 + 11.2 pom ESA MO Encodings diff --git a/mal-impl/pom.xml b/mal-impl/pom.xml index 15613a281..3ace80952 100644 --- a/mal-impl/pom.xml +++ b/mal-impl/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../parent/pom.xml mal-impl jar - 11.1 + 11.2 ESA MO MAL Java Implementation The ESA implementation of the CCSDS MAL in Java diff --git a/mal-impl/src/main/java/esa/mo/mal/impl/broker/MALBrokerHandlerImpl.java b/mal-impl/src/main/java/esa/mo/mal/impl/broker/MALBrokerHandlerImpl.java index 08757d91e..15f74e1d7 100644 --- a/mal-impl/src/main/java/esa/mo/mal/impl/broker/MALBrokerHandlerImpl.java +++ b/mal-impl/src/main/java/esa/mo/mal/impl/broker/MALBrokerHandlerImpl.java @@ -325,12 +325,12 @@ private Map getProviderRegistrations(final String provi private PublisherSource getPublisherSource(final String providerKey, final MALMessageHeader hdr, final boolean create) { final Map subs = this.getProviderRegistrations(providerKey); - String uriFrom = hdr.getFrom().getValue(); - PublisherSource publisher = subs.get(uriFrom); + String key = hdr.getFrom().getValue() + "_" + hdr.getOperation().getValue(); + PublisherSource publisher = subs.get(key); if ((publisher == null) && create) { - publisher = new PublisherSource(uriFrom); - subs.put(uriFrom, publisher); + publisher = new PublisherSource(key); + subs.put(key, publisher); MALBrokerImpl.LOGGER.log(Level.FINE, "New publisher registering: {0}", hdr); } diff --git a/parent/pom.xml b/parent/pom.xml index 4fe298358..fa4b6d7e9 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -17,7 +17,7 @@ 4.0.0 int.esa.ccsds.mo parent - 11.1 + 11.2 pom ESA MO POM @@ -74,7 +74,7 @@ UTF-8 - 11.1 + 11.2 ${esa.mo.version} ${esa.mo.version} ${esa.mo.version} diff --git a/pom.xml b/pom.xml index 5694fce67..1591e6155 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 parent/pom.xml diff --git a/services-impl/pom.xml b/services-impl/pom.xml index edc884572..951a26aed 100644 --- a/services-impl/pom.xml +++ b/services-impl/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../parent/pom.xml services-impl - 11.1 + 11.2 pom ESA MO Services Implementations diff --git a/services-impl/services-area003-v001-common/pom.xml b/services-impl/services-area003-v001-common/pom.xml index 5b9042f73..0ca8f0c66 100644 --- a/services-impl/services-area003-v001-common/pom.xml +++ b/services-impl/services-area003-v001-common/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml services-area003-v001-common - 11.1 + 11.2 jar ESA MO Services - Common Services diff --git a/services-impl/services-area009-v001-mpd/pom.xml b/services-impl/services-area009-v001-mpd/pom.xml index 01416be14..e06253a41 100644 --- a/services-impl/services-area009-v001-mpd/pom.xml +++ b/services-impl/services-area009-v001-mpd/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml services-area009-v001-mpd - 11.1 + 11.2 jar ESA MO Services - MPD Services diff --git a/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/OrderManagementProviderServiceImpl.java b/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/OrderManagementProviderServiceImpl.java index 3d81b176c..beccd041c 100644 --- a/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/OrderManagementProviderServiceImpl.java +++ b/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/OrderManagementProviderServiceImpl.java @@ -88,13 +88,13 @@ public StandingOrderList listStandingOrders(Identifier user, IdentifierList doma } @Override - public Identifier submitStandingOrder(StandingOrder orderDetails, + public Long submitStandingOrder(StandingOrder orderDetails, MALInteraction interaction) throws MALInteractionException, MALException { - return new Identifier("Hello World!"); + return 1L; } @Override - public void cancelStandingOrder(Identifier orderRef, + public void cancelStandingOrder(Long orderID, MALInteraction interaction) throws MALInteractionException, MALException { throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody } diff --git a/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/ProductOrderDeliveryProviderServiceImpl.java b/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/ProductOrderDeliveryProviderServiceImpl.java index 22e091b1e..d0a5e2a3a 100644 --- a/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/ProductOrderDeliveryProviderServiceImpl.java +++ b/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/ProductOrderDeliveryProviderServiceImpl.java @@ -32,7 +32,6 @@ import org.ccsds.moims.mo.mal.structures.IdentifierList; import org.ccsds.moims.mo.mal.structures.NullableAttributeList; import org.ccsds.moims.mo.mal.structures.ObjectIdentity; -import org.ccsds.moims.mo.mal.structures.ObjectRef; import org.ccsds.moims.mo.mal.structures.QoSLevel; import org.ccsds.moims.mo.mal.structures.SessionType; import org.ccsds.moims.mo.mal.structures.Time; @@ -126,11 +125,11 @@ public void run() { connection.getConnectionDetails().getDomain(), keyValues); ObjectIdentity id = new ObjectIdentity(new IdentifierList(), new Identifier("key"), new UInteger(1L)); - ObjectRef productType = new ObjectRef<>(); + ProductType productType = new ProductType(new Identifier("type")); byte[] byteArray = new byte[]{(byte) counter}; counter++; Product product = new Product(id, productType, Time.now(), - new TimeWindow(Time.now(), Time.now()), "description", new Blob(byteArray)); + new TimeWindow(Time.now(), Time.now()), new Blob(byteArray)); publisher.publish(updateHeader, product); } catch (InterruptedException ex) { Logger.getLogger(ProductOrderDeliveryProviderServiceImpl.class.getName()).log( diff --git a/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/ProductRetrievalProviderServiceImpl.java b/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/ProductRetrievalProviderServiceImpl.java index d57c07714..7ae964d58 100644 --- a/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/ProductRetrievalProviderServiceImpl.java +++ b/services-impl/services-area009-v001-mpd/src/main/java/esa/mo/services/mpd/provider/ProductRetrievalProviderServiceImpl.java @@ -34,7 +34,7 @@ import org.ccsds.moims.mo.mpd.productretrieval.provider.GetProductsInteraction; import org.ccsds.moims.mo.mpd.productretrieval.provider.ProductRetrievalInheritanceSkeleton; import org.ccsds.moims.mo.mpd.structures.ProductFilter; -import org.ccsds.moims.mo.mpd.structures.ProductSummaryList; +import org.ccsds.moims.mo.mpd.structures.ProductMetadataList; import org.ccsds.moims.mo.mpd.structures.TimeWindow; /** @@ -86,7 +86,7 @@ public ConnectionProvider getConnection() { } @Override - public ProductSummaryList listProducts(ProductFilter productFilter, TimeWindow creationDate, TimeWindow timeWindow, MALInteraction interaction) throws MALInteractionException, MALException { + public ProductMetadataList listProducts(ProductFilter productFilter, TimeWindow creationDate, TimeWindow timeWindow, MALInteraction interaction) throws MALInteractionException, MALException { throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody } diff --git a/testbeds/pom.xml b/testbeds/pom.xml index 6b9ad3d28..470ccf122 100644 --- a/testbeds/pom.xml +++ b/testbeds/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../parent/pom.xml testbeds - 11.1 + 11.2 pom ESA CCSDS Testbed reactor build diff --git a/testbeds/test-apis/pom.xml b/testbeds/test-apis/pom.xml index 9cdc1be1b..3a749106a 100644 --- a/testbeds/test-apis/pom.xml +++ b/testbeds/test-apis/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml test-apis - 11.1 + 11.2 pom CCSDS MOIMS MO Testbed APIs diff --git a/testbeds/test-apis/test-api-com/pom.xml b/testbeds/test-apis/test-api-com/pom.xml index 03735152a..5789d8ac5 100644 --- a/testbeds/test-apis/test-api-com/pom.xml +++ b/testbeds/test-apis/test-api-com/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../../testbed-pom/pom.xml api-com-test - 11.1 + 11.2 jar CCSDS MOIMS MO Testbed API - COM diff --git a/testbeds/test-apis/test-api-mal/pom.xml b/testbeds/test-apis/test-api-mal/pom.xml index 2046edef4..b891c6999 100644 --- a/testbeds/test-apis/test-api-mal/pom.xml +++ b/testbeds/test-apis/test-api-mal/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../../testbed-pom/pom.xml api-mal-test - 11.1 + 11.2 jar CCSDS MOIMS MO Testbed API - MAL diff --git a/testbeds/test-apis/test-api-mc/pom.xml b/testbeds/test-apis/test-api-mc/pom.xml index ea9ee2d18..ec1a17d24 100644 --- a/testbeds/test-apis/test-api-mc/pom.xml +++ b/testbeds/test-apis/test-api-mc/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../../testbed-pom/pom.xml api-mc-test - 11.1 + 11.2 jar CCSDS MOIMS MO Testbed API - MC diff --git a/testbeds/testbed-com-framework/pom.xml b/testbeds/testbed-com-framework/pom.xml index 2fc9dd17d..3c2ee4fae 100644 --- a/testbeds/testbed-com-framework/pom.xml +++ b/testbeds/testbed-com-framework/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml testbed-com-framework jar - 11.1 + 11.2 CCSDS MOIMS MO Testbed COM - Harness @@ -79,7 +79,7 @@ - 11.1 + 11.2 ${cnes.version} diff --git a/testbeds/testbed-com-provider-esa/pom.xml b/testbeds/testbed-com-provider-esa/pom.xml index 0d2ad690c..cbb084c61 100644 --- a/testbeds/testbed-com-provider-esa/pom.xml +++ b/testbeds/testbed-com-provider-esa/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml testbed-com-provider-esa - 11.1 + 11.2 jar CCSDS MOIMS MO Testbed COM - Provider Impl @@ -69,8 +69,8 @@ - 11.1 - 11.1 + 11.2 + 11.2 diff --git a/testbeds/testbed-com/pom.xml b/testbeds/testbed-com/pom.xml index 61ce7a498..72da51daa 100644 --- a/testbeds/testbed-com/pom.xml +++ b/testbeds/testbed-com/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml testbed-com jar - 11.1 + 11.2 CCSDS MOIMS MO Testbed for COM @@ -80,9 +80,9 @@ ComTests - 11.1 - 11.1 - 11.1 + 11.2 + 11.2 + 11.2 ${cnes.version} 0.4 diff --git a/testbeds/testbed-mal/pom.xml b/testbeds/testbed-mal/pom.xml index 46166e9a7..1b0a1f399 100644 --- a/testbeds/testbed-mal/pom.xml +++ b/testbeds/testbed-mal/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml testbed-mal jar - 11.1 + 11.2 CCSDS MOIMS MO Testbed for MAL @@ -89,7 +89,7 @@ MalTests - 11.1 + 11.2 ${cnes.version} diff --git a/testbeds/testbed-mal/src/main/java/org/ccsds/moims/mo/mal/test/datatype/DataTypeScenario.java b/testbeds/testbed-mal/src/main/java/org/ccsds/moims/mo/mal/test/datatype/DataTypeScenario.java index b88a13136..9509931dc 100644 --- a/testbeds/testbed-mal/src/main/java/org/ccsds/moims/mo/mal/test/datatype/DataTypeScenario.java +++ b/testbeds/testbed-mal/src/main/java/org/ccsds/moims/mo/mal/test/datatype/DataTypeScenario.java @@ -481,14 +481,14 @@ public String abstractMultiReturnWorks() throws MALInteractionException, MALExce TestAbstractMultiReturnResponse tv = getDataTestStub().testAbstractMultiReturn( TestData.testUOctet, TestData.testUShort, TestData.testUInteger, TestData.testULong); - rv = subMultiTest(TestData.testMultiReturnAbstract.get_UOctet0(), - tv.get_UOctet0(), rv, "abstract Multi return part 1"); - rv = subMultiTest(TestData.testMultiReturnAbstract.get_UShort1(), - tv.get_UShort1(), rv, "abstract Multi return part 2"); - rv = subMultiTest(TestData.testMultiReturnAbstract.get_UInteger2(), - tv.get_UInteger2(), rv, "abstract Multi return part 3"); - rv = subMultiTest(TestData.testMultiReturnAbstract.get_Element3(), - tv.get_Element3(), rv, "abstract Multi return part 4"); + rv = subMultiTest(TestData.testMultiReturnAbstract.getOut1(), + tv.getOut1(), rv, "abstract Multi return part 1"); + rv = subMultiTest(TestData.testMultiReturnAbstract.getOut2(), + tv.getOut2(), rv, "abstract Multi return part 2"); + rv = subMultiTest(TestData.testMultiReturnAbstract.getOut3(), + tv.getOut3(), rv, "abstract Multi return part 3"); + rv = subMultiTest(TestData.testMultiReturnAbstract.getOut4(), + tv.getOut4(), rv, "abstract Multi return part 4"); } catch (MALInteractionException ex) { rv = subMultiTestExceptionHandler(ex, rv, "abstract Multi return"); } @@ -505,14 +505,14 @@ public String innerAbstractMultiReturnWorks() throws MALInteractionException, MA TestInnerAbstractMultiReturnResponse tv = getDataTestStub().testInnerAbstractMultiReturn( TestData.testUOctet, TestData.testULong, TestData.testUShort, TestData.testUInteger); - rv = subMultiTest(TestData.testMultiReturnInnerAbstract.get_UOctet0(), - tv.get_UOctet0(), rv, "inner abstract Multi return part 1"); - rv = subMultiTest(TestData.testMultiReturnInnerAbstract.get_Element1(), - tv.get_Element1(), rv, "inner abstract Multi return part 2"); - rv = subMultiTest(TestData.testMultiReturnInnerAbstract.get_Element2(), - tv.get_Element2(), rv, "inner abstract Multi return part 3"); - rv = subMultiTest(TestData.testMultiReturnInnerAbstract.get_UInteger3(), - tv.get_UInteger3(), rv, "inner abstract Multi return part 4"); + rv = subMultiTest(TestData.testMultiReturnInnerAbstract.getOut1(), + tv.getOut1(), rv, "inner abstract Multi return part 1"); + rv = subMultiTest(TestData.testMultiReturnInnerAbstract.getOut2(), + tv.getOut2(), rv, "inner abstract Multi return part 2"); + rv = subMultiTest(TestData.testMultiReturnInnerAbstract.getOut3(), + tv.getOut3(), rv, "inner abstract Multi return part 3"); + rv = subMultiTest(TestData.testMultiReturnInnerAbstract.getOut4(), + tv.getOut4(), rv, "inner abstract Multi return part 4"); } catch (MALInteractionException ex) { rv = subMultiTestExceptionHandler(ex, rv, "inner abstract Multi return"); } @@ -683,13 +683,13 @@ public String polymorphicObjectRefTypesWork() throws MALInteractionException, MA TestData.testGarage.getCarsAsObjects()); rv = subMultiTest(TestData.testGarage, - res.get_Garage0(), rv, "polymorphicObjectRefTypesWork param 1"); + res.getOutput1(), rv, "polymorphicObjectRefTypesWork param 1"); rv = subMultiTest(TestData.testGarage.getCarsAsPorsches(), - res.get_ObjectRefList1(), rv, "polymorphicObjectRefTypesWork param 2"); + res.getOutput2(), rv, "polymorphicObjectRefTypesWork param 2"); rv = subMultiTest(TestData.testGarage.getCarsAsAutos(), - res.get_ObjectRefList2(), rv, "polymorphicObjectRefTypesWork param 3"); + res.getOutput3(), rv, "polymorphicObjectRefTypesWork param 3"); rv = subMultiTest(TestData.testGarage.getCarsAsObjects(), - res.get_ObjectRefList3(), rv, "polymorphicObjectRefTypesWork param 4"); + res.getOutput4(), rv, "polymorphicObjectRefTypesWork param 4"); } catch (MALInteractionException ex) { rv = subMultiTestExceptionHandler(ex, rv, "polymorphicObjectRefTypesWork"); } diff --git a/testbeds/testbed-mal/src/main/java/org/ccsds/moims/mo/mal/test/patterns/IPTestHandlerImpl.java b/testbeds/testbed-mal/src/main/java/org/ccsds/moims/mo/mal/test/patterns/IPTestHandlerImpl.java index f6c2dac59..c12655fb1 100644 --- a/testbeds/testbed-mal/src/main/java/org/ccsds/moims/mo/mal/test/patterns/IPTestHandlerImpl.java +++ b/testbeds/testbed-mal/src/main/java/org/ccsds/moims/mo/mal/test/patterns/IPTestHandlerImpl.java @@ -777,7 +777,7 @@ public InvokeMultiToInvokeInteractionMapper(InvokeMultiInteraction interaction) @Override public MALMessage sendAcknowledgement(String _String0) throws MALInteractionException, MALException { - return interaction.sendAcknowledgement(_String0, null); + return interaction.sendAcknowledgement(_String0, null); } @Override diff --git a/testbeds/testbed-malspp-framework/pom.xml b/testbeds/testbed-malspp-framework/pom.xml index 64a8bcfdb..25ea1c79c 100644 --- a/testbeds/testbed-malspp-framework/pom.xml +++ b/testbeds/testbed-malspp-framework/pom.xml @@ -40,14 +40,14 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml int.esa.ccsds.mo testbed-malspp-framework jar - 11.1 + 11.2 CCSDS MOIMS MO Testbed Framework for MAL/SPP Binding @@ -95,9 +95,9 @@ - 11.1 - 11.1 - 11.1 + 11.2 + 11.2 + 11.2 ${cnes.version} 6.1 5.2.0 diff --git a/testbeds/testbed-malspp/pom.xml b/testbeds/testbed-malspp/pom.xml index ecf2ce5e7..16269c047 100644 --- a/testbeds/testbed-malspp/pom.xml +++ b/testbeds/testbed-malspp/pom.xml @@ -40,14 +40,14 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml int.esa.ccsds.mo testbed-malspp jar - 11.1 + 11.2 CCSDS MOIMS MO Testbed for MAL/SPP Binding @@ -97,8 +97,8 @@ MalSppTests UTF-8 - 11.1 - 11.1 + 11.2 + 11.2 ${cnes.version} diff --git a/testbeds/testbed-mpd/pom.xml b/testbeds/testbed-mpd/pom.xml index ec276dbf6..479c65a18 100644 --- a/testbeds/testbed-mpd/pom.xml +++ b/testbeds/testbed-mpd/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml testbed-mpd jar - 11.1 + 11.2 CCSDS MOIMS MO Testbed MPD @@ -127,7 +127,7 @@ int.esa.ccsds.mo services-area009-v001-mpd - 11.1 + 11.2 @@ -155,7 +155,7 @@ int.esa.ccsds.mo services-area009-v001-mpd - 11.1 + 11.2 gov.nasa.mo @@ -174,7 +174,7 @@ int.esa.ccsds.mo services-area009-v001-mpd - 11.1 + 11.2 gov.nasa.mo diff --git a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/SetUpProvidersAndConsumers.java b/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/SetUpProvidersAndConsumers.java index c6e2f00a6..d348e0792 100644 --- a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/SetUpProvidersAndConsumers.java +++ b/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/SetUpProvidersAndConsumers.java @@ -151,8 +151,14 @@ public ProductRetrievalStub getProductRetrievalConsumer() { } public void tearDown() throws IOException { + if (productOrderDeliveryProviderService != null) { + productOrderDeliveryProviderService.getConnection().closeAll(); + } if (orderManagementProviderService != null) { orderManagementProviderService.getConnection().closeAll(); } + if (productRetrievalProviderService != null) { + productRetrievalProviderService.getConnection().closeAll(); + } } } diff --git a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/Dataset.java b/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/Dataset.java deleted file mode 100644 index c0f58f865..000000000 --- a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/Dataset.java +++ /dev/null @@ -1,63 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Copyright (C) 2024 European Space Agency - * European Space Operations Centre - * Darmstadt - * Germany - * ---------------------------------------------------------------------------- - * System : ESA CCSDS MO Services - * ---------------------------------------------------------------------------- - * Licensed under European Space Agency Public License (ESA-PL) Weak Copyleft – v2.4 - * You may not use this file except in compliance with the License. - * - * Except as expressly set forth in this License, the Software is provided to - * You on an "as is" basis and without warranties of any kind, including without - * limitation merchantability, fitness for a particular purpose, absence of - * defects or errors, accuracy or non-infringement of intellectual property rights. - * - * See the License for the specific language governing permissions and - * limitations under the License. - * ---------------------------------------------------------------------------- - */ -package org.ccsds.mo.mpd.testbed.backends; - -import java.util.HashMap; -import org.ccsds.moims.mo.mal.structures.ObjectRef; -import org.ccsds.moims.mo.mpd.backends.ProductRetrievalBackend; -import org.ccsds.moims.mo.mpd.structures.Product; -import org.ccsds.moims.mo.mpd.structures.ProductSummary; -import org.ccsds.moims.mo.mpd.structures.ProductSummaryList; -import org.ccsds.moims.mo.mpd.structures.ProductType; - -/** - * A abstract class for all Datasets. - */ -public abstract class Dataset implements ProductRetrievalBackend { - - protected final HashMap productTypes = new HashMap(); - protected final HashMap products = new HashMap(); - protected final HashMap metadatas = new HashMap(); - private ProductSummaryList allMetadatas = null; - - @Override - public ProductSummaryList getMetadataFromAllProducts() { - if (allMetadatas == null) { - allMetadatas = new ProductSummaryList(); - - for (ProductSummary metadata : metadatas.values()) { - allMetadatas.add(metadata); - } - } - return allMetadatas; - } - - @Override - public Product getProduct(ObjectRef productRef) { - return products.get(productRef); - } - - @Override - public ProductSummary getMetadata(ObjectRef productRef) { - return metadatas.get(productRef); - } - -} diff --git a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/ImagesDataset.java b/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/ImagesDataset.java index 87615dfc6..1955ccc71 100644 --- a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/ImagesDataset.java +++ b/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/ImagesDataset.java @@ -20,21 +20,21 @@ */ package org.ccsds.mo.mpd.testbed.backends; +import org.ccsds.moims.mo.mpd.Dataset; import org.ccsds.moims.mo.mal.structures.AttributeType; import org.ccsds.moims.mo.mal.structures.Blob; import org.ccsds.moims.mo.mal.structures.Identifier; import org.ccsds.moims.mo.mal.structures.IdentifierList; import org.ccsds.moims.mo.mal.structures.NamedValue; import org.ccsds.moims.mo.mal.structures.NamedValueList; -import org.ccsds.moims.mo.mal.structures.ObjectIdentity; import org.ccsds.moims.mo.mal.structures.ObjectRef; import org.ccsds.moims.mo.mal.structures.Time; import org.ccsds.moims.mo.mal.structures.UInteger; import org.ccsds.moims.mo.mal.structures.Union; -import org.ccsds.moims.mo.mpd.structures.ParameterDef; -import org.ccsds.moims.mo.mpd.structures.ParameterDefList; +import org.ccsds.moims.mo.mpd.structures.AttributeDef; +import org.ccsds.moims.mo.mpd.structures.AttributeDefList; import org.ccsds.moims.mo.mpd.structures.Product; -import org.ccsds.moims.mo.mpd.structures.ProductSummary; +import org.ccsds.moims.mo.mpd.structures.ProductMetadata; import org.ccsds.moims.mo.mpd.structures.ProductType; import org.ccsds.moims.mo.mpd.structures.TimeWindow; @@ -50,13 +50,10 @@ public ImagesDataset() { // --------------------------------------------------- // Product Types // --------------------------------------------------- - ObjectIdentity typeId1 = new ObjectIdentity(domain, new Identifier("Image"), new UInteger(1)); - ParameterDefList parameterDefs = new ParameterDefList(); - parameterDefs.add(new ParameterDef(new Identifier("ImageSubject"), AttributeType.STRING)); - parameterDefs.add(new ParameterDef(new Identifier("imageType"), AttributeType.STRING)); - ProductType typeImage = new ProductType(typeId1, "An Image type", parameterDefs); - ObjectRef productTypeRef1 = typeImage.getObjectRef(); - productTypes.put(productTypeRef1, typeImage); + AttributeDefList attributeDefs = new AttributeDefList(); + attributeDefs.add(new AttributeDef(new Identifier("ImageSubject"), AttributeType.STRING)); + attributeDefs.add(new AttributeDef(new Identifier("imageType"), AttributeType.STRING)); + ProductType typeImage = new ProductType(new Identifier("typeImageSource"), "An Image type", attributeDefs); // --------------------------------------------------- // Products @@ -64,29 +61,23 @@ public ImagesDataset() { TimeWindow timeWindow = new TimeWindow(Time.now(), Time.now()); // product1 - NamedValueList parameters1 = new NamedValueList(); - parameters1.add(new NamedValue(new Identifier("ImageSubject"), new Union("Earth"))); - parameters1.add(new NamedValue(new Identifier("imageType"), new Union("visible"))); - ObjectIdentity productId1 = new ObjectIdentity(domain, new Identifier("imageData1"), new UInteger(1)); - Product product1 = new Product(productId1, productTypeRef1, - Time.now(), null, timeWindow, parameters1, "description", - new Blob(new byte[]{0x01, 0x02, 0x03})); - ObjectRef ref1 = product1.getObjectRef(); - ProductSummary metadata1 = new ProductSummary(productTypeRef1, ref1, Time.now(), null, timeWindow, parameters1, "description"); - products.put(ref1, product1); - metadatas.put(ref1, metadata1); + NamedValueList attributes1 = new NamedValueList(); + attributes1.add(new NamedValue(new Identifier("ImageSubject"), new Union("Earth"))); + attributes1.add(new NamedValue(new Identifier("imageType"), new Union("visible"))); + Blob productBody1 = new Blob(new byte[]{0x01, 0x02, 0x03}); + ObjectRef ref1 = new ObjectRef(domain, Product.TYPE_ID.getTypeId(), new Identifier("imageData1"), new UInteger(1)); + ProductMetadata metadata1 = new ProductMetadata(typeImage, ref1, Time.now(), + null, null, timeWindow, attributes1, "description"); + super.addNewProduct(ref1, productBody1, metadata1); // product2 - NamedValueList parameters2 = new NamedValueList(); - parameters2.add(new NamedValue(new Identifier("ImageSubject"), new Union("Earth"))); - parameters2.add(new NamedValue(new Identifier("imageType"), new Union("infrared"))); - ObjectIdentity productId2 = new ObjectIdentity(domain, new Identifier("imageData2"), new UInteger(1)); - Product product2 = new Product(productId2, productTypeRef1, - Time.now(), null, timeWindow, parameters1, "description", - new Blob(new byte[]{0x09, 0x08, 0x07})); - ObjectRef ref2 = product2.getObjectRef(); - ProductSummary metadata2 = new ProductSummary(productTypeRef1, ref2, Time.now(), null, timeWindow, parameters2, "description"); - products.put(ref2, product2); - metadatas.put(ref2, metadata2); + NamedValueList attributes2 = new NamedValueList(); + attributes2.add(new NamedValue(new Identifier("ImageSubject"), new Union("Earth"))); + attributes2.add(new NamedValue(new Identifier("imageType"), new Union("infrared"))); + ObjectRef ref2 = new ObjectRef(domain, Product.TYPE_ID.getTypeId(), new Identifier("imageData2"), new UInteger(1)); + Blob productBody2 = new Blob(new byte[]{0x09, 0x08, 0x07}); + ProductMetadata metadata2 = new ProductMetadata(typeImage, ref2, Time.now(), + null, null, timeWindow, attributes2, "description"); + super.addNewProduct(ref2, productBody2, metadata2); } } diff --git a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/OneProductDataset.java b/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/OneProductDataset.java index d017ff8d0..a4ee637ac 100644 --- a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/OneProductDataset.java +++ b/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/OneProductDataset.java @@ -20,15 +20,15 @@ */ package org.ccsds.mo.mpd.testbed.backends; +import org.ccsds.moims.mo.mpd.Dataset; import org.ccsds.moims.mo.mal.structures.Blob; import org.ccsds.moims.mo.mal.structures.Identifier; import org.ccsds.moims.mo.mal.structures.IdentifierList; -import org.ccsds.moims.mo.mal.structures.ObjectIdentity; import org.ccsds.moims.mo.mal.structures.ObjectRef; import org.ccsds.moims.mo.mal.structures.Time; import org.ccsds.moims.mo.mal.structures.UInteger; import org.ccsds.moims.mo.mpd.structures.Product; -import org.ccsds.moims.mo.mpd.structures.ProductSummary; +import org.ccsds.moims.mo.mpd.structures.ProductMetadata; import org.ccsds.moims.mo.mpd.structures.ProductType; import org.ccsds.moims.mo.mpd.structures.TimeWindow; @@ -44,22 +44,17 @@ public OneProductDataset() { // --------------------------------------------------- // Product Types // --------------------------------------------------- - ObjectIdentity typeId1 = new ObjectIdentity(domain, new Identifier("image.eo.rgb"), new UInteger(1)); - ProductType type1 = new ProductType(typeId1, "An Earth Observation RGB image."); - ObjectRef productTypeRef1 = type1.getObjectRef(); - productTypes.put(productTypeRef1, type1); + ProductType type1 = new ProductType(new Identifier("type1")); // --------------------------------------------------- // Products // --------------------------------------------------- TimeWindow timeWindow = new TimeWindow(Time.now(), Time.now()); - ObjectIdentity productId = new ObjectIdentity(domain, new Identifier("key1"), new UInteger(1)); - Product product = new Product(productId, productTypeRef1, - Time.now(), timeWindow, "description", new Blob()); - ObjectRef ref = product.getObjectRef(); - ProductSummary metadata = new ProductSummary(); + ObjectRef ref = new ObjectRef(domain, Product.TYPE_ID.getTypeId(), new Identifier("key1"), new UInteger(1)); + Blob productBody = new Blob(); + ProductMetadata metadata = new ProductMetadata(type1, ref, + Time.now(), timeWindow, "description"); - products.put(ref, product); - metadatas.put(ref, metadata); + super.addNewProduct(ref, productBody, metadata); } } diff --git a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/TMPacketsDataset.java b/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/TMPacketsDataset.java index c1fd8d26c..9176016f8 100644 --- a/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/TMPacketsDataset.java +++ b/testbeds/testbed-mpd/src/main/java/org/ccsds/mo/mpd/testbed/backends/TMPacketsDataset.java @@ -20,33 +20,35 @@ */ package org.ccsds.mo.mpd.testbed.backends; +import org.ccsds.moims.mo.mpd.Dataset; import org.ccsds.moims.mo.mal.structures.AttributeType; import org.ccsds.moims.mo.mal.structures.Blob; import org.ccsds.moims.mo.mal.structures.Identifier; import org.ccsds.moims.mo.mal.structures.IdentifierList; import org.ccsds.moims.mo.mal.structures.NamedValue; import org.ccsds.moims.mo.mal.structures.NamedValueList; -import org.ccsds.moims.mo.mal.structures.ObjectIdentity; import org.ccsds.moims.mo.mal.structures.ObjectRef; import org.ccsds.moims.mo.mal.structures.Time; import org.ccsds.moims.mo.mal.structures.UInteger; -import org.ccsds.moims.mo.mpd.structures.ParameterDef; -import org.ccsds.moims.mo.mpd.structures.ParameterDefList; +import org.ccsds.moims.mo.mpd.structures.AttributeDef; +import org.ccsds.moims.mo.mpd.structures.AttributeDefList; import org.ccsds.moims.mo.mpd.structures.Product; -import org.ccsds.moims.mo.mpd.structures.ProductSummary; +import org.ccsds.moims.mo.mpd.structures.ProductMetadata; import org.ccsds.moims.mo.mpd.structures.ProductType; import org.ccsds.moims.mo.mpd.structures.TimeWindow; /** - * A dummy backend in order to try out the provider. + * The TMPacketsDataset backend contains data similar to a set of TM Packets. */ public class TMPacketsDataset extends Dataset { - public final static Time APID100_TIME_START = Time.now(); - public final static Time APID100_TIME_END = Time.now(); - public final static Time APID200_TIME_START = Time.now(); - public final static Time APID200_TIME_END = Time.now(); - private final ObjectRef productTypeRefTM; + public final static Time APID100_TIME_START = Time.generateTime(2010, 1, 1); + public final static Time APID100_TIME_END = Time.generateTime(2010, 12, 31); + public final static Time APID200_TIME_START = Time.generateTime(2020, 1, 1); + public final static Time APID200_TIME_END = Time.generateTime(2020, 12, 31); + public final static TimeWindow timeWindowAPID100 = new TimeWindow(APID100_TIME_START, APID100_TIME_END); + public final static TimeWindow timeWindowAPID200 = new TimeWindow(APID200_TIME_START, APID200_TIME_END); + public final ProductType typeTMPacketDailyExtract; public TMPacketsDataset() { IdentifierList domain = new IdentifierList(); @@ -55,45 +57,34 @@ public TMPacketsDataset() { // --------------------------------------------------- // Product Types // --------------------------------------------------- - ObjectIdentity typeId1 = new ObjectIdentity(domain, new Identifier("tmPacketDailyExtract"), new UInteger(1)); - ParameterDefList parameterDefs = new ParameterDefList(); - parameterDefs.add(new ParameterDef(new Identifier("APID"), AttributeType.UINTEGER)); - ProductType typeTMPacketDailyExtract = new ProductType(typeId1, "A TM Packet Daily Extract type", parameterDefs); - productTypeRefTM = typeTMPacketDailyExtract.getObjectRef(); - productTypes.put(productTypeRefTM, typeTMPacketDailyExtract); + Identifier name = new Identifier("typeTMPacketDailyExtract"); + AttributeDefList attributeDefs = new AttributeDefList(); + attributeDefs.add(new AttributeDef(new Identifier("APID"), AttributeType.UINTEGER)); + typeTMPacketDailyExtract = new ProductType(name, "A TM Packet Daily Extract type", attributeDefs); // --------------------------------------------------- // Products // --------------------------------------------------- - TimeWindow timeWindow = new TimeWindow(Time.now(), Time.now()); - // product1 - NamedValueList parameters1 = new NamedValueList(); - parameters1.add(new NamedValue(new Identifier("APID"), new UInteger(100))); - ObjectIdentity productId1 = new ObjectIdentity(domain, new Identifier("tmData1"), new UInteger(1)); - Product product1 = new Product(productId1, productTypeRefTM, - Time.now(), null, timeWindow, parameters1, "description", - new Blob(new byte[]{0x01, 0x02, 0x03})); - ObjectRef ref1 = product1.getObjectRef(); - ProductSummary metadata1 = new ProductSummary(productTypeRefTM, ref1, Time.now(), null, timeWindow, parameters1, "description"); - products.put(ref1, product1); - metadatas.put(ref1, metadata1); + NamedValueList attributes1 = new NamedValueList(); + attributes1.add(new NamedValue(new Identifier("APID"), new UInteger(100))); + ObjectRef ref1 = new ObjectRef(domain, Product.TYPE_ID.getTypeId(), new Identifier("tmData1"), new UInteger(1)); + Blob productBody1 = new Blob(new byte[]{0x01, 0x02, 0x03}); + ProductMetadata metadata1 = new ProductMetadata(typeTMPacketDailyExtract, ref1, Time.now(), + null, null, timeWindowAPID100, attributes1, "description"); + super.addNewProduct(ref1, productBody1, metadata1); // product2 - NamedValueList parameters2 = new NamedValueList(); - parameters2.add(new NamedValue(new Identifier("APID"), new UInteger(200))); - ObjectIdentity productId2 = new ObjectIdentity(domain, new Identifier("tmData2"), new UInteger(1)); - Product product2 = new Product(productId2, productTypeRefTM, - Time.now(), null, timeWindow, parameters2, "description", - new Blob(new byte[]{0x09, 0x08, 0x07})); - ObjectRef ref2 = product2.getObjectRef(); - ProductSummary metadata2 = new ProductSummary(productTypeRefTM, ref2, Time.now(), null, timeWindow, parameters2, "description"); - products.put(ref2, product2); - metadatas.put(ref2, metadata2); + NamedValueList attributes2 = new NamedValueList(); + attributes2.add(new NamedValue(new Identifier("APID"), new UInteger(200))); + ObjectRef ref2 = new ObjectRef(domain, Product.TYPE_ID.getTypeId(), new Identifier("tmData2"), new UInteger(1)); + Blob productBody2 = new Blob(new byte[]{0x09, 0x08, 0x07}); + ProductMetadata metadata2 = new ProductMetadata(typeTMPacketDailyExtract, ref2, Time.now(), + null, null, timeWindowAPID200, attributes2, "description"); + super.addNewProduct(ref2, productBody2, metadata2); } - public ObjectRef getTMPacketsProductRef() { - return productTypeRefTM; - + public ProductType getProductType() { + return typeTMPacketDailyExtract; } } diff --git a/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/MPDTest.java b/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/MPDTest.java new file mode 100644 index 000000000..feba14320 --- /dev/null +++ b/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/MPDTest.java @@ -0,0 +1,86 @@ +/* ---------------------------------------------------------------------------- + * Copyright (C) 2024 European Space Agency + * European Space Operations Centre + * Darmstadt + * Germany + * ---------------------------------------------------------------------------- + * System : CCSDS MO Testbed - MPD + * ---------------------------------------------------------------------------- + * Licensed under the European Space Agency Public License, Version 2.0 + * You may not use this file except in compliance with the License. + * + * Except as expressly set forth in this License, the Software is provided to + * You on an "as is" basis and without warranties of any kind, including without + * limitation merchantability, fitness for a particular purpose, absence of + * defects or errors, accuracy or non-infringement of intellectual property rights. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * ---------------------------------------------------------------------------- + */ +package org.ccsds.mo.mpd.testbed; + +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.ccsds.moims.mo.mpd.ordermanagement.consumer.OrderManagementStub; +import org.ccsds.moims.mo.mpd.ordermanagement.provider.OrderManagementInheritanceSkeleton; +import org.ccsds.moims.mo.mpd.productorderdelivery.consumer.ProductOrderDeliveryStub; +import org.ccsds.moims.mo.mpd.productorderdelivery.provider.ProductOrderDeliveryInheritanceSkeleton; +import org.ccsds.moims.mo.mpd.productretrieval.consumer.ProductRetrievalStub; +import org.ccsds.moims.mo.mpd.productretrieval.provider.ProductRetrievalInheritanceSkeleton; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; + +/** + * The abstract class for all MPD Tests. + * + * @author Cesar.Coelho + */ +public abstract class MPDTest { + + protected static final int TIMEOUT = 500; // In milliseconds + protected static final String TEST_START = "-------- Running New Test --------"; + protected static final String TEST_END = "Test is completed!"; + protected static final String TEST_SET_UP_CLASS_1 = "-----------------------------------------------------------------------"; + protected static final String TEST_SET_UP_CLASS_2 = "Entered: setUpClass() - The Provider and Consumer will be started here!"; + protected static final SetUpProvidersAndConsumers setUp = new SetUpProvidersAndConsumers(); + + protected static OrderManagementInheritanceSkeleton providerOM = null; + protected static OrderManagementStub consumerOM = null; + protected static ProductOrderDeliveryInheritanceSkeleton providerPOD = null; + protected static ProductOrderDeliveryStub consumerPOD = null; + protected static ProductRetrievalInheritanceSkeleton providerPR = null; + protected static ProductRetrievalStub consumerPR = null; + + @AfterClass + public static void tearDownClass() { + System.out.println("Entered: tearDownClass()"); + System.out.println("The Provider and Consumer are being closed!"); + + try { + setUp.tearDown(); // Close all the services + } catch (IOException ex) { + Logger.getLogger(MPDTest.class.getName()).log(Level.SEVERE, + "The tearDown() operation failed!", ex); + } + } + + @Before + public void setUp() { + System.out.println(TEST_START); // Right before running a test + providerOM = setUp.getOrderManagementProvider(); + consumerOM = setUp.getOrderManagementConsumer(); + providerPOD = setUp.getProductOrderDeliveryProvider(); + consumerPOD = setUp.getProductOrderConsumer(); + providerPR = setUp.getProductRetrievalProvider(); + consumerPR = setUp.getProductRetrievalConsumer(); + } + + @After + public void tearDown() { + System.out.println(TEST_END); + } + +} diff --git a/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/OrderManagementScenario1Test.java b/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/OrderManagementScenario1Test.java index 85412af3d..ed48daa97 100644 --- a/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/OrderManagementScenario1Test.java +++ b/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/OrderManagementScenario1Test.java @@ -28,14 +28,9 @@ import org.ccsds.moims.mo.mal.MALInteractionException; import org.ccsds.moims.mo.mal.structures.Identifier; import org.ccsds.moims.mo.mal.structures.IdentifierList; -import org.ccsds.moims.mo.mpd.ordermanagement.consumer.OrderManagementStub; -import org.ccsds.moims.mo.mpd.ordermanagement.provider.OrderManagementInheritanceSkeleton; import org.ccsds.moims.mo.mpd.structures.DeliveryMethodEnum; import org.ccsds.moims.mo.mpd.structures.StandingOrder; import org.ccsds.moims.mo.mpd.structures.StandingOrderList; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; @@ -43,47 +38,13 @@ /** * */ -public class OrderManagementScenario1Test { - - private static SetUpProvidersAndConsumers setUp = new SetUpProvidersAndConsumers(); - private static OrderManagementInheritanceSkeleton providerService; - private static OrderManagementStub consumerStub; - - public OrderManagementScenario1Test() { - } +public class OrderManagementScenario1Test extends MPDTest { @BeforeClass public static void setUpClass() throws IOException { - System.out.println("-----------------------------------------------------------------------------"); - System.out.println("Entered: setUpClass() - The Provider and Consumer will be started here!"); - + System.out.println(TEST_SET_UP_CLASS_1); + System.out.println(TEST_SET_UP_CLASS_2); setUp.setUp(new OneProductDataset(), true, true, false); - providerService = setUp.getOrderManagementProvider(); - consumerStub = setUp.getOrderManagementConsumer(); - } - - @AfterClass - public static void tearDownClass() { - System.out.println("Entered: tearDownClass()"); - System.out.println("The Provider and Consumer need to be closed here!"); - - try { - // Initialize the Order Management service - setUp.tearDown(); - } catch (IOException ex) { - Logger.getLogger(OrderManagementScenario1Test.class.getName()).log( - Level.SEVERE, "The tearDown() operation failed!", ex); - } - } - - @Before - public void setUp() { - System.out.println("Entered: setUp()"); - } - - @After - public void tearDown() { - System.out.println("Entered: tearDown()"); } /** @@ -99,7 +60,7 @@ public void testCase_1() { domain.add(new Identifier("*")); try { - StandingOrderList standingOrders = consumerStub.listStandingOrders(user, domain); + StandingOrderList standingOrders = consumerOM.listStandingOrders(user, domain); int size = standingOrders.size(); assertEquals(0, size); } catch (MALInteractionException ex) { @@ -123,21 +84,20 @@ public void testCase_2() { // Input Data Identifier user = new Identifier("User"); - DeliveryMethodEnum dMethod = DeliveryMethodEnum.SERVICE; - String comments = "A comment"; - StandingOrder orderDetails = new StandingOrder(user, dMethod, comments); + DeliveryMethodEnum dMethod = DeliveryMethodEnum.SERVICE_COMPLETE; + StandingOrder orderDetails = new StandingOrder(user, dMethod); // Submit a Standing Order - Identifier id = consumerStub.submitStandingOrder(orderDetails); + Long id = consumerOM.submitStandingOrder(orderDetails); assertNotEquals(null, id); Logger.getLogger(OrderManagementScenario1Test.class.getName()).log(Level.INFO, - "The returned Identifier is: {0}", id.getValue()); + "The returned Identifier is: {0}", id); // Request the list of standing orders IdentifierList domain = new IdentifierList(); domain.add(new Identifier("*")); - StandingOrderList standingOrders = consumerStub.listStandingOrders(new Identifier("*"), domain); + StandingOrderList standingOrders = consumerOM.listStandingOrders(new Identifier("*"), domain); Logger.getLogger(OrderManagementScenario1Test.class.getName()).log(Level.INFO, "The returned list of standing orders is: {0}", standingOrders.toString()); @@ -146,7 +106,6 @@ public void testCase_2() { StandingOrder standingOrder = standingOrders.get(0); assertEquals(user, standingOrder.getUser()); - assertEquals(comments, standingOrder.getComments()); assertEquals(dMethod, standingOrder.getDeliveryMethod()); } catch (MALInteractionException ex) { Logger.getLogger(OrderManagementScenario1Test.class.getName()).log(Level.SEVERE, null, ex); diff --git a/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/UC1Test.java b/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/UC1_Ex1_Test.java similarity index 65% rename from testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/UC1Test.java rename to testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/UC1_Ex1_Test.java index a094cb9bf..16b32244f 100644 --- a/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/UC1Test.java +++ b/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/UC1_Ex1_Test.java @@ -34,29 +34,20 @@ import org.ccsds.moims.mo.mal.structures.IdentifierList; import org.ccsds.moims.mo.mal.structures.NamedValue; import org.ccsds.moims.mo.mal.structures.NamedValueList; -import org.ccsds.moims.mo.mal.structures.ObjectRef; import org.ccsds.moims.mo.mal.structures.ObjectRefList; +import org.ccsds.moims.mo.mal.structures.Time; import org.ccsds.moims.mo.mal.structures.UInteger; import org.ccsds.moims.mo.mal.transport.MALMessageHeader; -import org.ccsds.moims.mo.mpd.ordermanagement.consumer.OrderManagementStub; -import org.ccsds.moims.mo.mpd.ordermanagement.provider.OrderManagementInheritanceSkeleton; -import org.ccsds.moims.mo.mpd.productorderdelivery.consumer.ProductOrderDeliveryStub; -import org.ccsds.moims.mo.mpd.productorderdelivery.provider.ProductOrderDeliveryInheritanceSkeleton; import org.ccsds.moims.mo.mpd.productretrieval.consumer.ProductRetrievalAdapter; -import org.ccsds.moims.mo.mpd.productretrieval.consumer.ProductRetrievalStub; -import org.ccsds.moims.mo.mpd.productretrieval.provider.ProductRetrievalInheritanceSkeleton; -import org.ccsds.moims.mo.mpd.structures.ParameterFilterList; +import org.ccsds.moims.mo.mpd.structures.AttributeFilterList; import org.ccsds.moims.mo.mpd.structures.Product; import org.ccsds.moims.mo.mpd.structures.ProductFilter; import org.ccsds.moims.mo.mpd.structures.ProductList; -import org.ccsds.moims.mo.mpd.structures.ProductSummary; -import org.ccsds.moims.mo.mpd.structures.ProductSummaryList; +import org.ccsds.moims.mo.mpd.structures.ProductMetadata; +import org.ccsds.moims.mo.mpd.structures.ProductMetadataList; import org.ccsds.moims.mo.mpd.structures.ProductType; import org.ccsds.moims.mo.mpd.structures.TimeWindow; import org.ccsds.moims.mo.mpd.structures.ValueSet; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; @@ -64,59 +55,15 @@ /** * */ -public class UC1Test { - - private static final int TIMEOUT = 1000; // In milliseconds - private static final String BUMPER = "-------- Running New Test --------"; - private static final SetUpProvidersAndConsumers setUp = new SetUpProvidersAndConsumers(); - private static TMPacketsDataset backend = null; - private static OrderManagementInheritanceSkeleton providerOM; - private static OrderManagementStub consumerOM; - private static ProductOrderDeliveryInheritanceSkeleton providerPOD = null; - private static ProductOrderDeliveryStub consumerPOD = null; - private static ProductRetrievalInheritanceSkeleton providerPR = null; - private static ProductRetrievalStub consumerPR = null; - - public UC1Test() { - } +public class UC1_Ex1_Test extends MPDTest { + + private static final TMPacketsDataset backend = new TMPacketsDataset(); @BeforeClass public static void setUpClass() throws IOException { - System.out.println("-----------------------------------------------------------------------------"); - System.out.println("Entered: setUpClass() - The Provider and Consumer will be started here!"); - backend = new TMPacketsDataset(); + System.out.println(TEST_SET_UP_CLASS_1); + System.out.println(TEST_SET_UP_CLASS_2); setUp.setUp(backend, true, true, true); - providerOM = setUp.getOrderManagementProvider(); - consumerOM = setUp.getOrderManagementConsumer(); - providerPOD = setUp.getProductOrderDeliveryProvider(); - consumerPOD = setUp.getProductOrderConsumer(); - providerPR = setUp.getProductRetrievalProvider(); - consumerPR = setUp.getProductRetrievalConsumer(); - } - - @AfterClass - public static void tearDownClass() { - System.out.println("Entered: tearDownClass()"); - System.out.println("The Provider and Consumer need to be closed here!"); - - try { - // Initialize the Order Management service - setUp.tearDown(); - } catch (IOException ex) { - Logger.getLogger(UC1Test.class.getName()).log( - Level.SEVERE, "The tearDown() operation failed!", ex); - } - } - - @Before - public void setUp() { - System.out.println(BUMPER); - System.out.println("Entered: setUp()"); - } - - @After - public void tearDown() { - System.out.println("Entered: tearDown()"); } /** @@ -150,7 +97,7 @@ public void testCase_3() { } /** - * Test Case 4 - parameterFilter = NULL. + * Test Case 4 - attributeFilter = NULL. */ @Test public void testCase_4() { @@ -160,52 +107,94 @@ public void testCase_4() { } /** - * Test Case 5 - Match APID = 100 and timeWindow = [APID100_TIME_START, - * APID100_TIME_END]. + * Test Case 5 - Match APID = 100 and Date. With: timeWindow = + * [APID100_TIME_START, APID100_TIME_END]. */ @Test public void testCase_5() { System.out.println("Running: testCase_5()"); - // TBD - /* UInteger apidValue = new UInteger(100); - TimeWindow timeWindow = new TimeWindow(TMPacketsDataset.APID100_TIME_START, TMPacketsDataset.APID100_TIME_END); - testWithTimeWindow(apidValue, 1, timeWindow); - */ + TimeWindow contentDate = new TimeWindow(TMPacketsDataset.APID100_TIME_START, TMPacketsDataset.APID100_TIME_END); + testWithTimeWindow(apidValue, 1, contentDate); + } + + /** + * Test Case 6 - Match APID = 100 and NOT Date. With: timeWindow = + * [1970-01-01, 1970-12-31]. + */ + @Test + public void testCase_6() { + System.out.println("Running: testCase_6()"); + UInteger apidValue = new UInteger(100); + TimeWindow contentDate = new TimeWindow(Time.generateTime(1970, 1, 1), Time.generateTime(1970, 12, 31)); + testWithTimeWindow(apidValue, 0, contentDate); + } + + /** + * Test Case 7 - Match NOT APID = 200 and Date. With: timeWindow = + * [APID100_TIME_START, APID100_TIME_END]. + */ + @Test + public void testCase_7() { + System.out.println("Running: testCase_7()"); + UInteger apidValue = new UInteger(200); + TimeWindow contentDate = new TimeWindow(TMPacketsDataset.APID100_TIME_START, TMPacketsDataset.APID100_TIME_END); + testWithTimeWindow(apidValue, 0, contentDate); + } + + /** + * Test Case 8 - With timeWindow = [1970-01-01, 1970-12-31]. + */ + @Test + public void testCase_8() { + System.out.println("Running: testCase_8()"); + TimeWindow contentDate = new TimeWindow(Time.generateTime(1970, 1, 1), Time.generateTime(1970, 12, 31)); + testWithTimeWindow(null, 0, contentDate); + } + + /** + * Test Case 9 - With timeWindow = [APID100_TIME_START, APID200_TIME_END]. + */ + @Test + public void testCase_9() { + System.out.println("Running: testCase_9()"); + TimeWindow contentDate = new TimeWindow(TMPacketsDataset.APID100_TIME_START, TMPacketsDataset.APID200_TIME_END); + testWithTimeWindow(null, 2, contentDate); } private void test(UInteger apidValue, int expectedNumberOfResults) { testWithTimeWindow(apidValue, expectedNumberOfResults, null); } - private void testWithTimeWindow(UInteger apidValue, int expectedNumberOfResults, TimeWindow timeWindow) { - ObjectRef productType = backend.getTMPacketsProductRef(); // productType=typeTMPacket + private void testWithTimeWindow(UInteger apidValue, int expectedNumberOfResults, TimeWindow contentDate) { + ProductType productType = backend.typeTMPacketDailyExtract; // productType=typeTMPacket IdentifierList domain = new IdentifierList(); domain.add(new Identifier("myDomain")); - ParameterFilterList parameterFilter = null; + AttributeFilterList attributeFilter = null; // When the apidValue is NULL, then the filtering is off! if (apidValue != null) { - parameterFilter = new ParameterFilterList(); + attributeFilter = new AttributeFilterList(); AttributeList values = new AttributeList(); values.add(apidValue); - parameterFilter.add(new ValueSet(new Identifier("APID"), true, values)); + attributeFilter.add(new ValueSet(new Identifier("APID"), true, values)); } - ProductFilter productFilter = new ProductFilter(productType, domain, null, parameterFilter); - ProductSummaryList list = null; + ProductFilter productFilter = new ProductFilter(productType.getName(), domain, null, attributeFilter); + ProductMetadataList list = null; try { TimeWindow creationDate = null; - list = consumerPR.listProducts(productFilter, creationDate, timeWindow); + list = consumerPR.listProducts(productFilter, creationDate, contentDate); int size = list.size(); + System.out.println("Number of listed products returned: " + size); assertEquals(expectedNumberOfResults, size); } catch (MALInteractionException ex) { - Logger.getLogger(UC1Test.class.getName()).log(Level.SEVERE, null, ex); + Logger.getLogger(UC1_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); fail(ex.toString()); } catch (MALException ex) { - Logger.getLogger(UC1Test.class.getName()).log(Level.SEVERE, null, ex); + Logger.getLogger(UC1_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); fail(ex.toString()); } @@ -217,7 +206,7 @@ private void testWithTimeWindow(UInteger apidValue, int expectedNumberOfResults, // Prepare the ObjectRefList with the returned data from the previous step ObjectRefList productRefs = new ObjectRefList(); - for (ProductSummary metadata : list) { + for (ProductMetadata metadata : list) { productRefs.add(metadata.getProduct()); } @@ -250,7 +239,7 @@ public void getProductsResponseReceived(MALMessageHeader msgHeader, Map qosPrope @Override public void getProductsAckErrorReceived(MALMessageHeader msgHeader, MOErrorException error, Map qosProperties) { - Logger.getLogger(UC1Test.class.getName()).log(Level.SEVERE, + Logger.getLogger(UC1_Ex1_Test.class.getName()).log(Level.SEVERE, "Something went wrong...", error); fail(error.toString()); } @@ -258,7 +247,7 @@ public void getProductsAckErrorReceived(MALMessageHeader msgHeader, @Override public void getProductsUpdateErrorReceived(MALMessageHeader msgHeader, MOErrorException error, Map qosProperties) { - Logger.getLogger(UC1Test.class.getName()).log(Level.SEVERE, + Logger.getLogger(UC1_Ex1_Test.class.getName()).log(Level.SEVERE, "Something went wrong...", error); fail(error.toString()); } @@ -266,7 +255,7 @@ public void getProductsUpdateErrorReceived(MALMessageHeader msgHeader, @Override public void getProductsResponseErrorReceived(MALMessageHeader msgHeader, MOErrorException error, Map qosProperties) { - Logger.getLogger(UC1Test.class.getName()).log(Level.SEVERE, + Logger.getLogger(UC1_Ex1_Test.class.getName()).log(Level.SEVERE, "Something went wrong...", error); fail(error.toString()); } @@ -282,7 +271,8 @@ public void getProductsResponseErrorReceived(MALMessageHeader msgHeader, } if (!ackReceived.get()) { - Logger.getLogger(UC1Test.class.getName()).log(Level.SEVERE, "The ACK was not received!"); + Logger.getLogger(UC1_Ex1_Test.class.getName()).log( + Level.SEVERE, "The ACK was not received!"); fail("The ACK was not received!"); } @@ -295,7 +285,7 @@ public void getProductsResponseErrorReceived(MALMessageHeader msgHeader, } if (!rspReceived.get()) { - Logger.getLogger(UC1Test.class.getName()).log(Level.SEVERE, "The RESPONSE was not received!"); + Logger.getLogger(UC1_Ex1_Test.class.getName()).log(Level.SEVERE, "The RESPONSE was not received!"); fail("The RESPONSE was not received!"); } @@ -304,15 +294,36 @@ public void getProductsResponseErrorReceived(MALMessageHeader msgHeader, System.out.println("Number of products returned: " + size); assertEquals(expectedNumberOfResults, size); - // Finish the test if there's nothing else to check + // Finish the test if nothing was returned.. (there's nothing else to check) if (size == 0) { return; } + // Check the timeWindows for all the received products, if one was selected + if (contentDate != null) { + for (Product p : returnedProducts) { + TimeWindow receivedTW = p.getContentDate(); + + if (receivedTW.getStart().getValue() > contentDate.getEnd().getValue()) { + fail("The received TimeWindow start time is after the requested TimeWindow end time!"); + } + if (receivedTW.getEnd().getValue() < contentDate.getStart().getValue()) { + fail("The received TimeWindow end time is before the requested TimeWindow start time!"); + } + } + } + + // Check that the productType matches + for (Product p : returnedProducts) { + if (!p.getProductType().equals(productType)) { + fail("The productType isnot the same! For product: " + p.toString()); + } + } + // If there is only one entry, then check if the APID matches if (size == 1) { Product product = returnedProducts.get(0); - NamedValueList attributes = product.getParameters(); + NamedValueList attributes = product.getAttributes(); // Find the Attribute with the APID and check: for (NamedValue att : attributes) { @@ -322,10 +333,10 @@ public void getProductsResponseErrorReceived(MALMessageHeader msgHeader, } } } catch (MALInteractionException ex) { - Logger.getLogger(UC1Test.class.getName()).log(Level.SEVERE, null, ex); + Logger.getLogger(UC1_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); fail(ex.toString()); } catch (MALException ex) { - Logger.getLogger(UC1Test.class.getName()).log(Level.SEVERE, null, ex); + Logger.getLogger(UC1_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); fail(ex.toString()); } } diff --git a/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/UC3_Ex1_Test.java b/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/UC3_Ex1_Test.java new file mode 100644 index 000000000..ad9db47ce --- /dev/null +++ b/testbeds/testbed-mpd/src/test/java/org/ccsds/mo/mpd/testbed/UC3_Ex1_Test.java @@ -0,0 +1,408 @@ +/* ---------------------------------------------------------------------------- + * Copyright (C) 2024 European Space Agency + * European Space Operations Centre + * Darmstadt + * Germany + * ---------------------------------------------------------------------------- + * System : CCSDS MO Testbed - MPD + * ---------------------------------------------------------------------------- + * Licensed under the European Space Agency Public License, Version 2.0 + * You may not use this file except in compliance with the License. + * + * Except as expressly set forth in this License, the Software is provided to + * You on an "as is" basis and without warranties of any kind, including without + * limitation merchantability, fitness for a particular purpose, absence of + * defects or errors, accuracy or non-infringement of intellectual property rights. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * ---------------------------------------------------------------------------- + */ +package org.ccsds.mo.mpd.testbed; + +import java.io.IOException; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; +import java.util.logging.Logger; +import static org.ccsds.mo.mpd.testbed.MPDTest.consumerOM; +import org.ccsds.mo.mpd.testbed.backends.TMPacketsDataset; +import org.ccsds.moims.mo.mal.MALException; +import org.ccsds.moims.mo.mal.MALInteractionException; +import org.ccsds.moims.mo.mal.structures.AttributeList; +import org.ccsds.moims.mo.mal.structures.Blob; +import org.ccsds.moims.mo.mal.structures.Identifier; +import org.ccsds.moims.mo.mal.structures.IdentifierList; +import org.ccsds.moims.mo.mal.structures.ObjectRef; +import org.ccsds.moims.mo.mal.structures.Subscription; +import org.ccsds.moims.mo.mal.structures.SubscriptionFilter; +import org.ccsds.moims.mo.mal.structures.SubscriptionFilterList; +import org.ccsds.moims.mo.mal.structures.Time; +import org.ccsds.moims.mo.mal.structures.UInteger; +import org.ccsds.moims.mo.mpd.productorderdelivery.consumer.ProductOrderDeliveryAdapter; +import org.ccsds.moims.mo.mpd.structures.DeliveryMethodEnum; +import org.ccsds.moims.mo.mpd.structures.Product; +import org.ccsds.moims.mo.mpd.structures.ProductFilter; +import org.ccsds.moims.mo.mpd.structures.ProductList; +import org.ccsds.moims.mo.mpd.structures.ProductMetadata; +import org.ccsds.moims.mo.mpd.structures.StandingOrder; +import org.ccsds.moims.mo.mpd.structures.StandingOrderList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * + */ +public class UC3_Ex1_Test extends MPDTest { + + private static final TMPacketsDataset backend = new TMPacketsDataset(); + + @BeforeClass + public static void setUpClass() throws IOException { + System.out.println(TEST_SET_UP_CLASS_1); + System.out.println(TEST_SET_UP_CLASS_2); + setUp.setUp(backend, true, true, true); + } + + /** + * Test Case 1. + */ + @Test + public void testCase_1() { + System.out.println("Running: testCase_1()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = null; + Identifier productType = null; + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 1); + } + + /** + * Test Case 2. + */ + @Test + public void testCase_2() { + System.out.println("Running: testCase_2()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = null; + Identifier productType = null; + test(user, domain, DeliveryMethodEnum.FILETRANSFER, productType, 0); + } + + /** + * Test Case 3. + */ + @Test + public void testCase_3() { + System.out.println("Running: testCase_3()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = null; + Identifier productType = new Identifier("typeTMPacketDailyExtract"); + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 1); + } + + /** + * Test Case 4. + */ + @Test + public void testCase_4() { + System.out.println("Running: testCase_4()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = null; + Identifier productType = new Identifier("typeImage"); + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 0); + } + + /** + * Test Case 5. + */ + @Test + public void testCase_5() { + System.out.println("Running: testCase_5()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = null; + Identifier productType = new Identifier("*"); + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 0); + } + + /** + * Test Case 6. + */ + @Test + public void testCase_6() { + System.out.println("Running: testCase_6()"); + Identifier user = null; + IdentifierList domain = null; + Identifier productType = null; + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 1); + } + + /** + * Test Case 7. + */ + @Test + public void testCase_7() { + System.out.println("Running: testCase_7()"); + Identifier user = new Identifier("bill.gates"); + IdentifierList domain = null; + Identifier productType = null; + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 0); + } + + /** + * Test Case 8. + */ + @Test + public void testCase_8() { + System.out.println("Running: testCase_8()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = new IdentifierList(); + domain.add(new Identifier("*")); + Identifier productType = null; + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 1); + } + + /** + * Test Case 9. + */ + @Test + public void testCase_9() { + System.out.println("Running: testCase_9()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = new IdentifierList(); + domain.add(new Identifier("esa")); + domain.add(new Identifier("juice")); + Identifier productType = null; + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 0); + } + + /** + * Test Case 10. + */ + @Test + public void testCase_10() { + System.out.println("Running: testCase_10()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = new IdentifierList(); + domain.add(new Identifier("nasa")); + domain.add(new Identifier("dart")); + Identifier productType = null; + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 0); + } + + /** + * Test Case 11. + */ + @Test + public void testCase_11() { + System.out.println("Running: testCase_11()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = new IdentifierList(); + domain.add(new Identifier("nasa")); + domain.add(new Identifier("*")); + Identifier productType = null; + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 1); + } + + /** + * Test Case 12. + */ + @Test + public void testCase_12() { + System.out.println("Running: testCase_12()"); + Identifier user = new Identifier("john.doe"); + IdentifierList domain = new IdentifierList(); + domain.add(new Identifier("nasa")); + domain.add(new Identifier("hubble")); + Identifier productType = null; + test(user, domain, DeliveryMethodEnum.SERVICE_COMPLETE, productType, 1); + } + + private void test(Identifier user, IdentifierList domain, + DeliveryMethodEnum deliveryMethod, Identifier productType, int expectedNumberOfProducts) { + try { + StandingOrderList standingOrders = consumerOM.listStandingOrders(user, domain); + int size = standingOrders.size(); + System.out.println("Standing Orders returned size: " + size); + assertEquals(0, size); + } catch (MALInteractionException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + fail(ex.toString()); + } catch (MALException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + fail(ex.toString()); + } + + Identifier orderUser = new Identifier("john.doe"); + Long orderID = null; + try { + ProductFilter productFilter = new ProductFilter(productType, domain, null, null); + StandingOrder orderDetails = new StandingOrder(null, orderUser, productFilter, null, deliveryMethod, null, null); + orderID = consumerOM.submitStandingOrder(orderDetails); + System.out.println("The returned orderID is: " + orderID); + assertNotNull(orderID); + } catch (MALInteractionException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + fail(ex.toString()); + } catch (MALException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + fail(ex.toString()); + } + + try { + StandingOrderList standingOrders = consumerOM.listStandingOrders(new Identifier("*"), domain); + int size = standingOrders.size(); + System.out.println("Standing Orders returned size: " + size); + assertEquals(1, size); + + // If there is at least one: + if (!standingOrders.isEmpty()) { + StandingOrder receivedOrder = standingOrders.get(0); + assertEquals(orderUser.getValue(), receivedOrder.getUser().getValue()); + assertEquals(deliveryMethod.getNumericValue(), receivedOrder.getDeliveryMethod().getNumericValue()); + } + } catch (MALInteractionException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + fail(ex.toString()); + } catch (MALException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + fail(ex.toString()); + } + + try { + ProductList returnedProducts = new ProductList(); + long startTime = System.currentTimeMillis(); + final AtomicBoolean ackReceived = new AtomicBoolean(false); + final AtomicBoolean notifyReceived = new AtomicBoolean(false); + SubscriptionFilterList filters = null; + if (user != null) { + filters = new SubscriptionFilterList(); + AttributeList values = new AttributeList(); + values.add(user); + filters.add(new SubscriptionFilter(new Identifier("user"), values)); + } + + Subscription subscription = new Subscription(new Identifier("myTestKey"), null, null, filters); + consumerPOD.asyncDeliverProductsRegister(subscription, new ProductOrderDeliveryAdapter() { + @Override + public void deliverProductsRegisterAckReceived( + org.ccsds.moims.mo.mal.transport.MALMessageHeader msgHeader, + java.util.Map qosProperties) { + System.out.println("Reached: deliverProductsRegisterAckReceived()"); + ackReceived.set(true); + } + + @Override + public void deliverProductsRegisterErrorReceived( + org.ccsds.moims.mo.mal.transport.MALMessageHeader msgHeader, + org.ccsds.moims.mo.mal.MOErrorException error, + java.util.Map qosProperties) { + System.out.println("Reached: deliverProductsRegisterErrorReceived()"); + fail(error.toString()); + } + + @Override + public void deliverProductsDeregisterAckReceived( + org.ccsds.moims.mo.mal.transport.MALMessageHeader msgHeader, + java.util.Map qosProperties) { + System.out.println("Reached: deliverProductsDeregisterAckReceived()"); + } + + @Override + public void deliverProductsNotifyReceived( + org.ccsds.moims.mo.mal.transport.MALMessageHeader msgHeader, + org.ccsds.moims.mo.mal.structures.Identifier subscriptionId, + org.ccsds.moims.mo.mal.structures.UpdateHeader updateHeader, + org.ccsds.moims.mo.mpd.structures.Product product, + java.util.Map qosProperties) { + System.out.println("Reached: deliverProductsNotifyReceived()"); + long duration = System.currentTimeMillis() - startTime; + System.out.println("NOTIFY received in: " + duration + " ms"); + notifyReceived.set(true); + returnedProducts.add(product); + } + + @Override + public void deliverProductsNotifyErrorReceived( + org.ccsds.moims.mo.mal.transport.MALMessageHeader msgHeader, + org.ccsds.moims.mo.mal.MOErrorException error, + java.util.Map qosProperties) { + System.out.println("Reached: deliverProductsNotifyErrorReceived()"); + fail(error.toString()); + } + }); + + // Provider pushes a new Product (on the backend) + IdentifierList productDomain = new IdentifierList(); + productDomain.add(new Identifier("nasa")); + productDomain.add(new Identifier("hubble")); + ObjectRef ref = new ObjectRef(productDomain, Product.TYPE_ID.getTypeId(), new Identifier("tmData1"), new UInteger(1)); + Blob productBody = new Blob(new byte[]{0x01, 0x02, 0x03}); + ProductMetadata metadata = new ProductMetadata(backend.typeTMPacketDailyExtract, ref, Time.now(), + null, null, TMPacketsDataset.timeWindowAPID100, null, "description"); + backend.addNewProduct(ref, productBody, metadata); + + // ------------------------------------------------------------------------ + // Wait while ACK has not been received and 1 second has not passed yet... + long timeSinceInteractionStarted = System.currentTimeMillis() - startTime; + while (!ackReceived.get() && timeSinceInteractionStarted < TIMEOUT) { + // Recalculate it + timeSinceInteractionStarted = System.currentTimeMillis() - startTime; + } + + if (!ackReceived.get()) { + Logger.getLogger(UC1_Ex1_Test.class.getName()).log( + Level.SEVERE, "The ACK was not received!"); + fail("The ACK was not received!"); + } + + // ------------------------------------------------------------------------ + // Wait while NOTIFY has not been received and 1 second has not passed yet... + timeSinceInteractionStarted = System.currentTimeMillis() - startTime; + while (!notifyReceived.get() && timeSinceInteractionStarted < TIMEOUT) { + // Recalculate it + timeSinceInteractionStarted = System.currentTimeMillis() - startTime; + } + + // Were we expecting to receive at least one product? + if (!notifyReceived.get() && expectedNumberOfProducts != 0) { + Logger.getLogger(UC1_Ex1_Test.class.getName()).log( + Level.SEVERE, "The NOTIFY was not received!"); + fail("The NOTIFY was not received!"); + } + + try { + consumerOM.cancelStandingOrder(orderID); + } catch (MALInteractionException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + fail(ex.toString()); + } catch (MALException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + fail(ex.toString()); + } + + // Did we receive the product(s)? + assertNotNull(returnedProducts); + int size = returnedProducts.size(); + System.out.println("Number of products returned: " + size); + assertEquals(expectedNumberOfProducts, size); + + // Finish the test if nothing was returned.. (there's nothing else to check) + if (size == 0) { + return; + } + + // Check that the ProductType matches! + Product returnedProduct = returnedProducts.get(0); + // Don't check if it is set to null + if (productType != null) { + assertEquals(productType, returnedProduct.getProductType().getName()); + } + } catch (MALInteractionException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + } catch (MALException ex) { + Logger.getLogger(UC3_Ex1_Test.class.getName()).log(Level.SEVERE, null, ex); + } + } +} diff --git a/testbeds/testbed-pom/pom.xml b/testbeds/testbed-pom/pom.xml index dd95c82e8..733577ac6 100644 --- a/testbeds/testbed-pom/pom.xml +++ b/testbeds/testbed-pom/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml testbed-pom pom - 11.1 + 11.2 CCSDS MOIMS MO Testbed POM @@ -74,13 +74,11 @@ 1.7 - 1.8.1 - 1.8.0 20201213 0.8.10 4.13.2 ${project.build.directory}/surefire-reports - 11.1 + 11.2 3.2.2-SNAPSHOT 5.9.0 @@ -369,17 +367,17 @@ org.apache.ant ant - ${ant.version} + 1.9.16 org.apache.ant ant-nodeps - ${ant.version} + 1.8.1 org.apache.ant ant-trax - ${ant.trax.version} + 1.8.0 org.jacoco diff --git a/testbeds/testbed-util-spp/pom.xml b/testbeds/testbed-util-spp/pom.xml index 6f846ef0d..9000feaa9 100644 --- a/testbeds/testbed-util-spp/pom.xml +++ b/testbeds/testbed-util-spp/pom.xml @@ -40,14 +40,14 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml int.esa.ccsds.mo testbed-util-spp jar - 11.1 + 11.2 CCSDS MOIMS MO Testbed utilities for the Space Packet Protocol diff --git a/testbeds/testbed-util/pom.xml b/testbeds/testbed-util/pom.xml index dd84777c6..9e87f583b 100644 --- a/testbeds/testbed-util/pom.xml +++ b/testbeds/testbed-util/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo testbed-pom - 11.1 + 11.2 ../testbed-pom/pom.xml testbed-util jar - 11.1 + 11.2 CCSDS MOIMS MO Testbed utilities diff --git a/testbeds/xml-tests/pom.xml b/testbeds/xml-tests/pom.xml index 2a7f0fb22..a6aed8c1b 100644 --- a/testbeds/xml-tests/pom.xml +++ b/testbeds/xml-tests/pom.xml @@ -18,7 +18,7 @@ int.esa.ccsds.mo xml-tests - 11.1 + 11.2 jar CCSDS MOIMS MO Testbed XML diff --git a/testbeds/xml-tests/src/main/resources/COMPrototype.xml b/testbeds/xml-tests/src/main/resources/COMPrototype.xml index 63985c878..748f16f89 100644 --- a/testbeds/xml-tests/src/main/resources/COMPrototype.xml +++ b/testbeds/xml-tests/src/main/resources/COMPrototype.xml @@ -18,7 +18,9 @@ comment="Resets the EventTest service provider."> - + + + @@ -27,13 +29,23 @@ comment="Creates an instance of one of the test objects: TestObject A or Test Object B Arg 1 - ObjectNumber (identifies object to be created) Arg 2 Domain Arg 3 Description Arg 4 parent instanceIdentifier returns object instance identifier. The provider will publish a TestObjectCreation event reporting the deletion"> - - - - + + + + + + + + + + + + - + + + @@ -43,9 +55,15 @@ comment="deletes a test object instance."> - - - + + + + + + + + + @@ -55,10 +73,18 @@ comment="Updates a number of fields on an instance of a test object. The provider will publish a TestObjectUpdate event reporting the updated attributes "> - - - - + + + + + + + + + + + + @@ -68,31 +94,33 @@ comment="Updates the composite field on a instance of a test object. The provider will publish a TestObjectUpdate event reporting the updated attributes "> - - - - + + + + + + + + + + + + - - - - - - + + + + + + - - - + + @@ -195,9 +223,7 @@ - + - + - + + + - - + - + + + @@ -239,14 +266,17 @@ - + - + + + - + + + @@ -255,17 +285,22 @@ - + - + + + - + + + - + + + @@ -278,16 +313,24 @@ comment=""> - + + + - + + + - + + + - + + + @@ -315,8 +358,12 @@ comment="Create a new relay node that supports the Activity and ActivityTest services."> - - + + + + + + @@ -337,40 +384,31 @@ - + - + - + - + - + - + - - + + - + @@ -417,7 +455,6 @@ - @@ -429,7 +466,6 @@ - diff --git a/testbeds/xml-tests/src/main/resources/MALPrototype.xml b/testbeds/xml-tests/src/main/resources/MALPrototype.xml index 640ee4fd5..2e159aab3 100755 --- a/testbeds/xml-tests/src/main/resources/MALPrototype.xml +++ b/testbeds/xml-tests/src/main/resources/MALPrototype.xml @@ -1,9 +1,9 @@ - - + - - - + - - - - - + + + + + + + - - + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + - - - - + + + - - - - - - - - + + + + + + + + - - - - - + + + + + + + - - + - - - - - + + + + + + + - - + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + - - + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + - - + - - - - - - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + - - - - - - - - + + + + + + + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - + + + + + - - + - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - + + + + + + + + + + + + - - + + - - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - + + + + + + + - - + - - - - - + + + + + + + - - + - - - - - + + + + + + + - - + - - - - - + + + + + + + - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + - - - - + + + - - - - - - - - - - + + + + + + + + + - - - + + - - - + + - - - - - - + + + + + - - - + + - - - + + - - - + + - - - + + - - - + - - - - + + + - - - - - + + + + - - + - - - - + + + - - - - - - - + + + + + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + - - - + + - - - + + - - - - + + + - - + - - + - - - - + + + - - + - - + - - - + - - - + - - - + + - - - + + - - - + + - - - - + + + - - - - - + + + - - - - - - - + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + - - - + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + - - - - - - - + + + + + + + + - - - - - + + + + - - - - - - - + + + + + + + + - - - - - - - + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tooling/basic-demo/pom.xml b/tooling/basic-demo/pom.xml index cfe371ab7..25331b356 100644 --- a/tooling/basic-demo/pom.xml +++ b/tooling/basic-demo/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml basic-demo jar - 11.1 + 11.2 ESA MO Java Demo A Demo Java application for the CCSDS MAL diff --git a/tooling/basic-demo/src/main/resources/MALDemo.xml b/tooling/basic-demo/src/main/resources/MALDemo.xml index 82dc278a3..6ffaf4418 100644 --- a/tooling/basic-demo/src/main/resources/MALDemo.xml +++ b/tooling/basic-demo/src/main/resources/MALDemo.xml @@ -1,156 +1,188 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file +* (C) 2011 European Space Agency +* European Space Operations Centre +* Darmstadt Germany +* ____________________________________________________________________________ +* System : CCSDS MO MAL Demo Application +* Author : Sam Cooper +* ____________________________________________________________________________ +* +--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tooling/mo-navigator/pom.xml b/tooling/mo-navigator/pom.xml index f78bd176d..0b0cd190b 100644 --- a/tooling/mo-navigator/pom.xml +++ b/tooling/mo-navigator/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml int.esa.ccsds.mo mo-navigator - 11.1 + 11.2 jar ESA MO Navigator @@ -81,12 +81,12 @@ int.esa.ccsds.mo generator-docs - 11.1 + 11.2 int.esa.ccsds.mo generator-java - 11.1 + 11.2 com.sun.xml.bind diff --git a/tooling/mo-navigator/src/main/java/esa/mo/navigator/MiddlePanel.java b/tooling/mo-navigator/src/main/java/esa/mo/navigator/MiddlePanel.java index 31ea7ed95..f24194884 100644 --- a/tooling/mo-navigator/src/main/java/esa/mo/navigator/MiddlePanel.java +++ b/tooling/mo-navigator/src/main/java/esa/mo/navigator/MiddlePanel.java @@ -47,7 +47,9 @@ public class MiddlePanel extends javax.swing.JPanel { /** * Creates new form MiddlePanel + * * @param statusBar The status bar to report status information. + * @param xmlDirs The directory with the xml files to be loaded. */ public MiddlePanel(JLabel statusBar, File xmlDirs) { this.statusBar = statusBar; diff --git a/tooling/pom.xml b/tooling/pom.xml index 912ab2136..9c755fea5 100644 --- a/tooling/pom.xml +++ b/tooling/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../parent/pom.xml tooling - 11.1 + 11.2 pom ESA MO Tooling diff --git a/tooling/simple-mo-consumer/pom.xml b/tooling/simple-mo-consumer/pom.xml index 9606824b9..358c92734 100644 --- a/tooling/simple-mo-consumer/pom.xml +++ b/tooling/simple-mo-consumer/pom.xml @@ -7,12 +7,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml simple-mo-consumer - 11.1 + 11.2 jar Simple MO Consumer @@ -47,12 +47,12 @@ int.esa.ccsds.mo services-area003-v001-common - 11.1 + 11.2 int.esa.ccsds.mo services-area009-v001-mpd - 11.1 + 11.2 int.esa.ccsds.mo diff --git a/tooling/simple-mo-consumer/src/main/java/esa/mo/consumer/AppCLI.java b/tooling/simple-mo-consumer/src/main/java/esa/mo/consumer/AppCLI.java index 5496c75e8..099b83255 100644 --- a/tooling/simple-mo-consumer/src/main/java/esa/mo/consumer/AppCLI.java +++ b/tooling/simple-mo-consumer/src/main/java/esa/mo/consumer/AppCLI.java @@ -53,12 +53,11 @@ public static void main(String[] args) { consumer.init(); OrderManagementConsumerServiceImpl orderManagement = consumer.getMPDServices().getOrderManagementService(); - StandingOrder orderDetails = new StandingOrder(new Identifier("User"), - DeliveryMethodEnum.SERVICE, "A comment"); - Identifier id = orderManagement.getOrderManagementStub().submitStandingOrder(orderDetails); + StandingOrder orderDetails = new StandingOrder(new Identifier("User"), DeliveryMethodEnum.SERVICE_COMPLETE); + Long id = orderManagement.getOrderManagementStub().submitStandingOrder(orderDetails); Logger.getLogger(AppCLI.class.getName()).log(Level.INFO, - "The returned Identifier is: {0}", id.getValue()); + "The returned Identifier is: {0}", id); Logger.getLogger(AppCLI.class.getName()).log(Level.INFO, "Registering in the Broker for service: Product Order Delivery..."); @@ -68,7 +67,6 @@ public static void main(String[] args) { pod.getProductOrderDeliveryStub().deliverProductsRegister(subscription, new PODAdapter()); Logger.getLogger(AppCLI.class.getName()).log(Level.INFO, "Registered!"); - } catch (MALException ex) { Logger.getLogger(AppCLI.class.getName()).log(Level.SEVERE, null, ex); } catch (MalformedURLException ex) { diff --git a/tooling/simple-mo-consumer/src/main/java/esa/mo/consumer/AppWithDirectory.java b/tooling/simple-mo-consumer/src/main/java/esa/mo/consumer/AppWithDirectory.java index 996ffa0ee..d6b656143 100644 --- a/tooling/simple-mo-consumer/src/main/java/esa/mo/consumer/AppWithDirectory.java +++ b/tooling/simple-mo-consumer/src/main/java/esa/mo/consumer/AppWithDirectory.java @@ -67,15 +67,14 @@ public static void main(String[] args) { Logger.getLogger(AppWithDirectory.class.getName()).log(Level.INFO, "Registered!"); // Submit a Standing Order - StandingOrder orderDetails = new StandingOrder(new Identifier("User"), - DeliveryMethodEnum.SERVICE, "A comment"); + StandingOrder orderDetails = new StandingOrder(new Identifier("User"), DeliveryMethodEnum.SERVICE_COMPLETE); OrderManagementConsumerServiceImpl orderManagement = consumer.getMPDServices().getOrderManagementService(); OrderManagementStub stub = orderManagement.getOrderManagementStub(); - Identifier id = stub.submitStandingOrder(orderDetails); + Long id = stub.submitStandingOrder(orderDetails); Logger.getLogger(AppWithDirectory.class.getName()).log(Level.INFO, - "The returned Identifier is: {0}", id.getValue()); + "The returned Identifier is: {0}", id); // Request the list of standing orders IdentifierList domain = new IdentifierList(); @@ -96,7 +95,7 @@ public static void main(String[] args) { stub.cancelStandingOrder(id); Logger.getLogger(AppWithDirectory.class.getName()).log(Level.INFO, - "The following order was cancelled: {0}", id.toString()); + "The following order was cancelled: {0}", id); } catch (MALException ex) { Logger.getLogger(AppWithDirectory.class.getName()).log(Level.SEVERE, null, ex); } catch (MalformedURLException ex) { diff --git a/tooling/simple-mo-provider/pom.xml b/tooling/simple-mo-provider/pom.xml index e2ece1f2f..49eca5ca7 100644 --- a/tooling/simple-mo-provider/pom.xml +++ b/tooling/simple-mo-provider/pom.xml @@ -7,12 +7,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml simple-mo-provider - 11.1 + 11.2 jar Simple MO Provider @@ -47,12 +47,12 @@ int.esa.ccsds.mo services-area003-v001-common - 11.1 + 11.2 int.esa.ccsds.mo services-area009-v001-mpd - 11.1 + 11.2 int.esa.ccsds.mo diff --git a/tooling/simple-mo-provider/src/main/java/esa/mo/provider/DummyProductsBackend.java b/tooling/simple-mo-provider/src/main/java/esa/mo/provider/DummyProductsBackend.java index 3ca74339d..3ad333487 100644 --- a/tooling/simple-mo-provider/src/main/java/esa/mo/provider/DummyProductsBackend.java +++ b/tooling/simple-mo-provider/src/main/java/esa/mo/provider/DummyProductsBackend.java @@ -20,7 +20,6 @@ */ package esa.mo.provider; -import java.util.HashMap; import org.ccsds.moims.mo.mal.structures.Blob; import org.ccsds.moims.mo.mal.structures.Identifier; import org.ccsds.moims.mo.mal.structures.IdentifierList; @@ -28,22 +27,16 @@ import org.ccsds.moims.mo.mal.structures.ObjectRef; import org.ccsds.moims.mo.mal.structures.Time; import org.ccsds.moims.mo.mal.structures.UInteger; -import org.ccsds.moims.mo.mpd.backends.ProductRetrievalBackend; +import org.ccsds.moims.mo.mpd.Dataset; import org.ccsds.moims.mo.mpd.structures.Product; -import org.ccsds.moims.mo.mpd.structures.ProductSummary; -import org.ccsds.moims.mo.mpd.structures.ProductSummaryList; +import org.ccsds.moims.mo.mpd.structures.ProductMetadata; import org.ccsds.moims.mo.mpd.structures.ProductType; import org.ccsds.moims.mo.mpd.structures.TimeWindow; /** * A dummy backend in order to try out the provider. */ -public class DummyProductsBackend implements ProductRetrievalBackend { - - private final HashMap productTypes = new HashMap(); - private final HashMap products = new HashMap(); - private final HashMap metadatas = new HashMap(); - private final ProductSummaryList allMetadatas = new ProductSummaryList(); +public class DummyProductsBackend extends Dataset { public DummyProductsBackend() { IdentifierList domain = new IdentifierList(); @@ -52,39 +45,19 @@ public DummyProductsBackend() { // --------------------------------------------------- // Product Types // --------------------------------------------------- - ObjectIdentity typeId1 = new ObjectIdentity(domain, new Identifier("image.eo.rgb"), new UInteger(1)); - ProductType type1 = new ProductType(typeId1, "An Earth Observation RGB image."); - ObjectRef productTypeRef1 = type1.getObjectRef(); - productTypes.put(productTypeRef1, type1); + Identifier name = new Identifier("image.eo.rgb"); + ProductType type1 = new ProductType(name, "An Earth Observation RGB image.", null); // --------------------------------------------------- // Products // --------------------------------------------------- TimeWindow timeWindow = new TimeWindow(Time.now(), Time.now()); ObjectIdentity productId = new ObjectIdentity(domain, new Identifier("key1"), new UInteger(1)); - Product product = new Product(productId, productTypeRef1, - Time.now(), timeWindow, "description", new Blob()); + Blob productBody = new Blob(); + Product product = new Product(productId, type1, Time.now(), timeWindow, productBody); ObjectRef ref = product.getObjectRef(); - ProductSummary metadata = new ProductSummary(); - - products.put(ref, product); - metadatas.put(ref, metadata); - allMetadatas.add(metadata); - } - - @Override - public ProductSummaryList getMetadataFromAllProducts() { - return allMetadatas; - } - - @Override - public Product getProduct(ObjectRef productRef) { - return products.get(productRef); - } - - @Override - public ProductSummary getMetadata(ObjectRef productRef) { - return metadatas.get(productRef); + ProductMetadata metadata = new ProductMetadata(); + super.addNewProduct(ref, productBody, metadata); } } diff --git a/tooling/transport-bridge/pom.xml b/tooling/transport-bridge/pom.xml index f99f8b6d8..07fbf9c2a 100644 --- a/tooling/transport-bridge/pom.xml +++ b/tooling/transport-bridge/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-bridge - 11.1 + 11.2 jar ESA MO Transport Bridge diff --git a/transports/pom.xml b/transports/pom.xml index 5cd409200..36f747d88 100644 --- a/transports/pom.xml +++ b/transports/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../parent/pom.xml transports - 11.1 + 11.2 pom ESA MO Transports diff --git a/transports/transport-activemq/pom.xml b/transports/transport-activemq/pom.xml index 618cf6e53..24aaf7b3a 100644 --- a/transports/transport-activemq/pom.xml +++ b/transports/transport-activemq/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-activemq jar - 11.1 + 11.2 ESA MO Transport - ActiveMQ JMS A Java JMS transport for CCSDS MAL based on Apache ActiveMQ @@ -80,7 +80,7 @@ org.apache.activemq activemq-client - 5.15.9 + 5.15.16 diff --git a/transports/transport-file/pom.xml b/transports/transport-file/pom.xml index 611db02a6..1163adf18 100644 --- a/transports/transport-file/pom.xml +++ b/transports/transport-file/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-file jar - 11.1 + 11.2 ESA MO Transport - File A Java File based transport for CCSDS MAL diff --git a/transports/transport-generic/pom.xml b/transports/transport-generic/pom.xml index d05e35765..2995a3451 100644 --- a/transports/transport-generic/pom.xml +++ b/transports/transport-generic/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-generic jar - 11.1 + 11.2 ESA MO Transport - Generic Framework A base Java framework for CCSDS MAL transports diff --git a/transports/transport-http/pom.xml b/transports/transport-http/pom.xml index 8cd9a1f20..209c86440 100644 --- a/transports/transport-http/pom.xml +++ b/transports/transport-http/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-http jar - 11.1 + 11.2 ESA MO Transport - HTTP A Java HTTP transport for CCSDS MAL diff --git a/transports/transport-jms/pom.xml b/transports/transport-jms/pom.xml index c28735f73..ad19fa95a 100644 --- a/transports/transport-jms/pom.xml +++ b/transports/transport-jms/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-jms jar - 11.1 + 11.2 ESA MO Transport - JMS A Java JMS transport framework for CCSDS MAL diff --git a/transports/transport-jms/src/main/java/esa/mo/mal/transport/jms/JMSQueueHandler.java b/transports/transport-jms/src/main/java/esa/mo/mal/transport/jms/JMSQueueHandler.java index 636bbf4f5..78a63230d 100644 --- a/transports/transport-jms/src/main/java/esa/mo/mal/transport/jms/JMSQueueHandler.java +++ b/transports/transport-jms/src/main/java/esa/mo/mal/transport/jms/JMSQueueHandler.java @@ -110,7 +110,7 @@ public void onMessage(Message msg) { } else { JMSTransport.RLOGGER.log(Level.WARNING, "JMS received bad message format: {0}", - objMsg.getObject().getClass().getName()); + data.getClass().getName()); } } else { JMSTransport.RLOGGER.log(Level.WARNING, diff --git a/transports/transport-rmi/pom.xml b/transports/transport-rmi/pom.xml index d006b9297..43af9150a 100644 --- a/transports/transport-rmi/pom.xml +++ b/transports/transport-rmi/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-rmi jar - 11.1 + 11.2 ESA MO Transport - RMI A Java RMI transport for CCSDS MAL diff --git a/transports/transport-spp/pom.xml b/transports/transport-spp/pom.xml index 73b3166a4..a44da0f9b 100644 --- a/transports/transport-spp/pom.xml +++ b/transports/transport-spp/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-spp jar - 11.1 + 11.2 ESA MO Transport - SPP A Java SPP transport for CCSDS MAL diff --git a/transports/transport-tcpip/pom.xml b/transports/transport-tcpip/pom.xml index 33b9580f3..004b4be19 100644 --- a/transports/transport-tcpip/pom.xml +++ b/transports/transport-tcpip/pom.xml @@ -19,12 +19,12 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-tcpip - 11.1 + 11.2 jar ESA MO Transport - TCP/IP diff --git a/transports/transport-zmtp/pom.xml b/transports/transport-zmtp/pom.xml index c760fd8d9..0362102d0 100644 --- a/transports/transport-zmtp/pom.xml +++ b/transports/transport-zmtp/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml transport-zmtp jar - 11.1 + 11.2 ESA MO Transport - ZMTP A Java ZeroMQ Transport Protocol binding for CCSDS MAL diff --git a/xml-service-specifications/pom.xml b/xml-service-specifications/pom.xml index 6bff2458f..cb4152332 100644 --- a/xml-service-specifications/pom.xml +++ b/xml-service-specifications/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../parent/pom.xml int.esa.ccsds.mo xml-service-specifications - 11.1 + 11.2 pom ESA MO XML Service Specifications diff --git a/xml-service-specifications/xml-ccsds-mo-prototypes/pom.xml b/xml-service-specifications/xml-ccsds-mo-prototypes/pom.xml index 0d541e218..28ccc118c 100644 --- a/xml-service-specifications/xml-ccsds-mo-prototypes/pom.xml +++ b/xml-service-specifications/xml-ccsds-mo-prototypes/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml int.esa.ccsds.mo xml-ccsds-mo-prototypes - 11.1 + 11.2 jar ESA MO XML services - MO Prototypes diff --git a/xml-service-specifications/xml-ccsds-mo-prototypes/src/main/resources/xml/area009-v001-Mission-Product-Distribution.xml b/xml-service-specifications/xml-ccsds-mo-prototypes/src/main/resources/xml/area009-v001-Mission-Product-Distribution.xml index 6339b07b3..48a90946b 100644 --- a/xml-service-specifications/xml-ccsds-mo-prototypes/src/main/resources/xml/area009-v001-Mission-Product-Distribution.xml +++ b/xml-service-specifications/xml-ccsds-mo-prototypes/src/main/resources/xml/area009-v001-Mission-Product-Distribution.xml @@ -8,41 +8,47 @@ xmlns:mal = "http://www.ccsds.org/schema/ServiceSchema" xmlns:svg = "http://www.w3.org/2000/svg" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" comment=""> - + - - - 3.2.3.1 The following set of mission data product configuration data shall be available to both provider and consumers in any deployment of the product retrieval service: - - - 3.2.4.1 In response to a listProducts operation, the service provider shall compile a list of Products that satisfy the specified criteria and return this list (as object references) to the service consumer. - Note: it is implementation dependent whether the Products listed are restricted to those already available or may also be generated on-the-fly in response to the listProducts operation. - 3.2.4.2 In response to a getProduct operation, the service provider shall return each referenced product to the service consumer in a separate Update message, the final, empty Response message signalling that all products have been returned. + + + TBD - + + + The service provider shall return a list of Product Metadatas that satisfy the specified input filter criteria defined by the product filter, the creation date, and the content creation date. To pass the filter a product must match all the individual filter criteria. + Note: It is implementation dependent whether the Products listed are restricted to those already available or may also be generated on-the-fly in response to the listProducts operation. + + + The product filter shall optionally specify the product type and required filters by source and metadata attribute. + + + If the creationDate is NULL, then the service provider shall not filter the products based on the creationDate. + + + If the contentDate is NULL, then the service provider shall not filter the products based on the creationDate. + - + - + - + - - + + - + @@ -50,18 +56,27 @@ The response consists of a list of ProductSummaries that pass the specified filt - + + + A consumer shall send the list of one or more product references (as ObjectRefs) to the service provider of the products intended to be retrieved. + Note: The product reference may be known through an out-of-band agreement or may have been determined through the listProducts operation. + + + The service provider shall return each referenced product to the service consumer in a separate Update message. + + + The final Response message shall be empty, and it indicates to the consumer that all products have been returned. + - + - + @@ -69,47 +84,55 @@ Each requested product is then returned in a separate Update message, with the f - - - - + + + + - + + + A consumer shall send a list of one or more product references (as ObjectRefs) to the service provider of the products intended to be transferred. + Note: The product reference may be known through an out-of-band agreement or may have been determined through the listProducts operation. The message also contains the file delivery address as a URI. + + + The provider shall transfer the referenced mission data products to the selected deliverTo URI. + + + After each referenced product has been delivered by file transfer, a separate Update message shall be returned containing the product metadata and the respective filename. + + + The final Response message shall be empty, and it indicates to the consumer that all products have been delivered. + - + - + - - + + - + - - - - - - - + + + + @@ -122,138 +145,155 @@ After each requested product has been delivered by file transfer, a separate Upd - - - 3.3.3.1 The following set of mission data product configuration data shall be available to both provider and consumers in a any deployment of the product order management service: - - - 3.3.4.1 In response to a listStandingOrders operation, the service provider shall compile a list of standing orders that satisfy the specified criteria and return this list (as StandingOrder data structures) to the service consumer. - Note: depending on any mission specific confidentiality policy, the list of standing orders may be restricted to those belonging to the user associated with the service consumer. - 3.3.4.2 On receipt of a Standing Order through a submitStandingOrder operation that has an empty orderID, the service provider shall create a new standing order, assign a unique orderID to this and return the orderID to the service consumer. - 3.3.4.3 On receipt of a Standing Order through a submitStandingOrder operation that has an specified orderID, the service provider shall verify the uniqueness of this orderID, before creating a new standing order. If the orderID already exists, an error is returned to the service consumer. - 3.3.4.4 Following successful creation of a new standing order in response to a submitStandingOrder operation, the delivery of requested products shall be automatically commenced by the service provider from the start of the specified validity window. Where the specified delivery method is by file transfer, the delivery proceeds without further intervention from the service consumer. Where the specified delivery method is by service, delivery is subject to the operations of the ProductDelivery service. - 3.3.4.5 If the end of the specified validity window is reached, the service provider shall cease delivery of products associated with the standing order. + + + TBD - + + + The response shall contain a list of standing orders that match the specified user and domain. + Note: Depending on any mission-specific confidentiality policy, the list of standing orders may be restricted to those belonging to the user associated with the service consumer. + + + If the user is NULL, then the service provider shall not filter the standing orders based on the user. + + + If the domain is NULL, then the service provider shall not filter the standing orders based on the domain of the products. + + + The domain field shall refer to the domain of the products to which the standing order relates. The standing order itself is not associated with a domain. + - + - + - + - + - + - + + + The service provider shall ignore the received value in the orderID field of the orderDetails, and always assign a unique id to the submitted order. + + + The service provider shall create a new standing order, then assign a unique ID for the standing order, and return it to the consumer in the Response message. + + + Following successful creation of a new standing order, the service provider shall initiate the delivery of requested products following the specified validity window of the standing order. + + + When the end of the specified validity window is reached, the service provider shall cease delivery of products associated with the standing order. + + + If the specified delivery method is by file transfer, then the delivery occurs outside the service interface. If the specified delivery method is by service, then the delivery is performed through the operations of the ProductDelivery service. + - + - - + + - + - - - - - - - + + + The service consumer shall send the orderID of the standing order to be cancelled to the service provider. + + + Note: The authorization aspects of who is allowed to cancel which standing orders is not in the scope of this service specification, as this service specifies only the interface of a product distribution system. In a full system implementation, the authorization is either handled by the implementation of respective rules in the Access Control element of MAL or as part of the service provider software implementation. + - - + + - + - - + + - - - 3.4.3.1 The following set of mission data product configuration data shall be available to both provider and consumers in a any deployment of the product order delivery service: - a) Product definitions (as ProductType objects [§4.2.2] ) - - - 3.4.4.1 In response to subscription using the notifyProductDelivery operation, the service provider shall forward delivery notifications to the service consumer following the successful transfer of each product file that is associated with the specified standing order, or all standing orders associated with the specified user. - Note: The provision of delivery notifications continues until the service consumer deregisters or the service session is terminated. It is implementation dependent whether notifications relating to product deliveries that occur when the service consumer is not subscribed are queued awaiting subscription or discarded. - 3.4.4.2 In response to subscription using the deliverProducts operation, the service provider shall forward products associated with the specified standing order, or all standing orders associated with the specified user, to the service consumer as they become available + + + TBD - + + + Upon successful file transfer of a mission data product that is associated with a standing order, the service provider shall publish a delivery notification. + + + The service provider shall publish the delivery notification together with subscription keys corresponding to the associated user and orderID. + + + A service consumer may subscribe to notifications for a specific user, or for all users with the use of the wildcard in the user field. + + + A service consumer may subscribe to notifications for a specific standing order, or for all standing orders with the use of the wildcard in the orderID field. + + + The published message shall contain the metadata, filename, and delivered location of the mission data product that was delivered. + - + - - + + - - + + - + - + - + @@ -265,101 +305,102 @@ The service consumer then receives a notification, in the form of a productSumma - - - - - - - + + + Upon the creation (or availability) of a new mission data product that matches a certain standing order, the service provider shall publish this mission data product via the service interface. + + + The service provider shall publish the mission data product together with subscription keys corresponding to the associated user and orderID. + + + A service consumer may subscribe to mission data products for a specific user, or for all users with the use of the wildcard in the user field. + + + A service consumer may subscribe to mission data products for a specific standing order, or for all standing orders with the use of the wildcard in the orderID field. + - + - - + + - + - + - - - - - - - - - - - - - - - - - - - - + - - + + - + - - + + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + @@ -368,153 +409,155 @@ Note that the ProductTypes are not contained within the service messages of any - + - + - + - - + + - + - + - - + + + + + - + - + - + - + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + + - - - - - - - + + + + + + + - + diff --git a/xml-service-specifications/xml-ccsds-mo-prototypes/src/main/resources/xsd/ServiceSchema-v003-backwards-compatible-hybrid.xsd b/xml-service-specifications/xml-ccsds-mo-prototypes/src/main/resources/xsd/ServiceSchema-v003-backwards-compatible-hybrid.xsd index c9ce90f41..a8efec795 100644 --- a/xml-service-specifications/xml-ccsds-mo-prototypes/src/main/resources/xsd/ServiceSchema-v003-backwards-compatible-hybrid.xsd +++ b/xml-service-specifications/xml-ccsds-mo-prototypes/src/main/resources/xsd/ServiceSchema-v003-backwards-compatible-hybrid.xsd @@ -121,7 +121,7 @@ - Element represents a Service specification inside an Area. May also optionally include data type and error definitions. + Element represents a Service specification inside an Area. @@ -173,7 +173,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -212,8 +212,8 @@ - - + + @@ -225,7 +225,7 @@ - Element represents a INVOKE operation. + Element represents an INVOKE operation. @@ -233,9 +233,9 @@ - - - + + + @@ -255,10 +255,10 @@ - - - - + + + + @@ -278,8 +278,8 @@ - - + + @@ -293,10 +293,14 @@ Base type that the operations extend, defines the common aspects of all operations. - - - - + + + + + + + + @@ -371,7 +375,7 @@ - Represents that list of Errors that an operation may raise, these may reference existing error definitions or define new ones. + Represents the list of Errors that an operation may raise, these reference existing error definitions. @@ -399,7 +403,7 @@ - + @@ -484,6 +488,13 @@ + + + + + + + @@ -509,13 +520,13 @@ - Allows another element in the specification to be referenced, if the area or the service attributes are missing then the area and/or service of the refering element shall be assumed. + Allows another element in the specification to be referenced. - + @@ -558,9 +569,9 @@ - + - + diff --git a/xml-service-specifications/xml-ccsds-mo-standards/pom.xml b/xml-service-specifications/xml-ccsds-mo-standards/pom.xml index b5ff4fcf1..c3d83d4a7 100644 --- a/xml-service-specifications/xml-ccsds-mo-standards/pom.xml +++ b/xml-service-specifications/xml-ccsds-mo-standards/pom.xml @@ -19,13 +19,13 @@ int.esa.ccsds.mo parent - 11.1 + 11.2 ../../parent/pom.xml int.esa.ccsds.mo xml-ccsds-mo-standards - 11.1 + 11.2 jar ESA MO XML services - MO Standards