├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── trace-bug.md │ └── trace-story.md ├── argo │ └── argo_config.sh ├── codeql │ └── codeql-config.yml ├── dependabot.yml └── workflows │ ├── .trivyignore │ ├── argo.yml │ ├── codeql.yml │ ├── dependencies.yaml │ ├── dependency-check.yml │ ├── docker-image-branch_frontend.yml │ ├── docker-image-main_backend.yml │ ├── docker-image-main_frontend.yml │ ├── docker-image-tag-release.yaml │ ├── e2e-tests-xray_frontend.yml │ ├── eclipse-dash.yml │ ├── helm-chart-release.yaml │ ├── helm-test-backwards-compatability.yaml │ ├── helm-test.yaml │ ├── helm-upgrade.yaml │ ├── jira-publish-release.yaml │ ├── kics.yml │ ├── publish-docker-image.yaml │ ├── publish-documentation.yaml │ ├── publish-swagger-hub.yml │ ├── pull-request_backend.yml │ ├── pull_request_issue.yml │ ├── quality-checks.yaml │ ├── release.yaml │ ├── sonar-scan-backend.yml │ ├── sonar-scan-frontend.yml │ ├── spotbugs.yml │ ├── testdata-upload.yaml │ ├── trivy.yml │ ├── trufflehog-secret-scan.yml │ ├── unit-test_frontend.yml │ ├── update-helm-environment.yml │ ├── update-openapi-spec.yml │ ├── xray-cucumber-association.yaml │ └── xray-cucumber.yaml ├── .gitignore ├── .tractusx ├── AUTHORS.md ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── COMPATIBILITY_MATRIX.md ├── CONTRIBUTING.md ├── DEPENDENCIES_BACKEND ├── DEPENDENCIES_FRONTEND ├── DOCKER_NOTICE.md ├── Dockerfile ├── INSTALL.md ├── LICENSE ├── LICENSE_non-code ├── NOTICE.md ├── README.md ├── SECURITY.md ├── charts └── traceability-foss │ ├── .helmignore │ ├── CHANGELOG.md │ ├── Chart.yaml │ ├── LICENSE │ ├── README.md │ ├── charts │ ├── backend │ │ ├── .helmignore │ │ ├── Chart.yaml │ │ ├── LICENSE │ │ ├── README.md │ │ ├── templates │ │ │ ├── NOTES.txt │ │ │ ├── _helpers.tpl │ │ │ ├── deployment.yaml │ │ │ ├── imagepullsecret.yaml │ │ │ ├── ingress.yaml │ │ │ ├── service.yaml │ │ │ ├── serviceaccount.yaml │ │ │ └── tests │ │ │ │ └── test-connection.yaml │ │ └── values.yaml │ └── frontend │ │ ├── .helmignore │ │ ├── Chart.yaml │ │ ├── LICENSE │ │ ├── README.md │ │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── deployment.yaml │ │ ├── ingress.yaml │ │ ├── service.yaml │ │ ├── serviceaccount.yaml │ │ └── tests │ │ │ └── test-connection.yaml │ │ └── values.yaml │ └── values.yaml ├── ci └── spotbugs-excludes.xml ├── dependency_check └── suppressions.xml ├── dev ├── README.md ├── commit-msg └── example.sql ├── docs ├── .markdownlint.yaml ├── RELEASE.md ├── SECURITY.md ├── api │ └── traceability-foss-backend.json ├── catena-x-logo.svg ├── concept │ ├── #000-concept-name-template │ │ ├── #000-concept-name-template.md │ │ └── _concept.template.md │ ├── #1108-policy-management-enhancement │ │ ├── #1108-policy-management-enhancement.md │ │ ├── notification-policy-modal.svg │ │ ├── notification-policy.puml │ │ ├── notification-policy.svg │ │ ├── policy-update.json │ │ ├── policy-update.puml │ │ └── policy-update.svg │ ├── #203-identification-of-new-twins │ │ ├── TRX-203-concept.adoc │ │ ├── TRX-203-concept2.adoc │ │ ├── TRX-203-twin-lookup-component.puml │ │ ├── TRX-203-twin-lookup-process-streaming.puml │ │ └── TRX-203-twin-lookup-process.puml │ ├── #353-sync-configurable │ │ ├── TRX-353-concept.adoc │ │ ├── TRX-353-get-parts-based-on-order-details-from-irs.puml │ │ ├── TRX-353-registering-orders-component.puml │ │ └── TRX-353-registering-orders.puml │ ├── #435-display-aspect-models-connected-to-twin-generic │ │ ├── #435-display-aspect-models-connected-to-twin-generic.md │ │ ├── DetailView_With_Code_Viewer_Active.svg │ │ ├── Detail_View_Json_Code_Viewer.svg │ │ ├── Detail_View_Json_Graph_Viewer.svg │ │ ├── Detail_View_Json_Tree_Viewer.svg │ │ ├── Error_View.svg │ │ └── Viewer_Full_screen_mode.svg │ ├── #436-intermediate-status-handling │ │ ├── #436-intermediate-status-handling.md │ │ └── Intermediate-status-handling.svg │ ├── #437-adapt-to-changes-of-industry-core │ │ ├── #437-adapt-to-changes-industry-core.md │ │ └── DetailViewWithPartSiteInformation.svg │ ├── #521-revoked-notification-handling │ │ ├── #521-revoked-notification-handling.md │ │ ├── Notification-Status-Flow.svg │ │ ├── UsagePolicyExpiredException-Mockup.svg │ │ └── UsagePolicyPermissionException-Mockup.svg │ ├── #568-policy-management │ │ ├── #568-policy-management.md │ │ ├── send-notification-policy-verification.puml │ │ └── send-notification-policy-verification.svg │ ├── #578-consistent-null-values │ │ ├── #578-consistent-null-values.md │ │ ├── example-values-backend.svg │ │ ├── example-values-frontend.svg │ │ ├── null-value-display.svg │ │ ├── null-value-filter.svg │ │ ├── null-value-input-leading-and-trailing.svg │ │ └── null-value-input-only-spaces.svg │ ├── #621-edit-parts-in-notifications │ │ └── #621-edit-parts-in-notifications.md │ ├── #638-contractagreement-admin-view │ │ ├── #638-contractagreement-admin-view.md │ │ ├── contractagreement-admin-view-bpmn.svg │ │ ├── contractagreement-admin-view-frontend.svg │ │ ├── contractagreement-database-storage.svg │ │ ├── get-all-contracts-sequenceflow.svg │ │ ├── get-contract-sequenceflow.puml │ │ └── get-contract-sequenceflow.svg │ ├── #737-contract-parts-link │ │ ├── #737-contract-parts-link.md │ │ ├── contracts-table-new-action.svg │ │ ├── parts-tables-contract-column-filtered.svg │ │ └── parts-tables-contract-column.svg │ ├── #774-messages-to-multiple-bpns │ │ ├── #774-messages-to-multiple-bpns.md │ │ ├── frontend-create-notification.svg │ │ ├── frontend-notification-detail-view-recipient.svg │ │ └── frontend-notification-detail-view-sender.svg │ ├── #831-notification-data-model │ │ └── #831-notification-data-model.md │ ├── #849-notifications-to-multiple-bpns │ │ ├── #849-notifications-to-multiple-bpns.md │ │ ├── case-label.svg │ │ ├── multiple-bpns-modals.svg │ │ └── notification-creation-bpn-selection.svg │ ├── TRACEFOSS-993 │ │ ├── dataspace-contract-nego-auditor-sequence.puml │ │ └── sending-notifications-collect-artifacts-sequence.puml │ ├── TRACEX-159-concept-handle-duplicated-connector-registrations │ │ └── TRACEX-159-concept-handle-duplicated-connector-registrations.md │ ├── [TRACEFOSS-1019]-data-import-interface │ │ ├── data-import-interface-squence.puml │ │ ├── import-format-input-validation.puml │ │ └── tracex-twin-import-format.puml │ └── [TRACEX-357]-concept-BPDM-lookup-handling │ │ └── [TRACEX-357]-concept-BPDM-lookup-handling.md ├── images │ ├── architecture.svg │ ├── catena-x.svg │ ├── data_flow.svg │ ├── github-flow-branching-model.svg │ └── modular_design.svg ├── pom.xml ├── src │ ├── diagram-replacer │ │ ├── extract.js │ │ └── replace.js │ ├── docs │ │ ├── administration │ │ │ ├── administration-guide.adoc │ │ │ ├── backend-configuration.adoc │ │ │ ├── configuration.adoc │ │ │ ├── frontend-configuration.adoc │ │ │ ├── installation.adoc │ │ │ ├── portal-configuration.adoc │ │ │ ├── system-overview.adoc │ │ │ └── troubleshooting.adoc │ │ ├── api-specification │ │ │ ├── api-specification.adoc │ │ │ ├── api.adoc │ │ │ └── index.html │ │ ├── arc42 │ │ │ ├── architecture-constraints │ │ │ │ └── index.adoc │ │ │ ├── building-block-view │ │ │ │ ├── blackbox-overall.adoc │ │ │ │ ├── full.adoc │ │ │ │ ├── index.adoc │ │ │ │ └── level-1.adoc │ │ │ ├── cross-cutting │ │ │ │ ├── api-endpoints.adoc │ │ │ │ ├── architecture-design-patterns.adoc │ │ │ │ ├── development-concepts.adoc │ │ │ │ ├── domain-concepts.adoc │ │ │ │ ├── entity-relationship-model.adoc │ │ │ │ ├── full.adoc │ │ │ │ ├── index.adoc │ │ │ │ ├── operational-concepts.adoc │ │ │ │ ├── safety-security.adoc │ │ │ │ ├── under-the-hood.adoc │ │ │ │ └── user-experience.adoc │ │ │ ├── deployment-view │ │ │ │ ├── 0_index.adoc │ │ │ │ ├── 1_full-overview.adoc │ │ │ │ └── 2-reverse-proxy.adoc │ │ │ ├── full.adoc │ │ │ ├── glossary.adoc │ │ │ ├── index.adoc │ │ │ ├── introduction-goals │ │ │ │ ├── index.adoc │ │ │ │ ├── quality-goals.adoc │ │ │ │ ├── requirements.adoc │ │ │ │ └── stakeholder.adoc │ │ │ ├── quality │ │ │ │ ├── index.adoc │ │ │ │ ├── quality-scenarios.adoc │ │ │ │ └── quality-tree.adoc │ │ │ ├── runtime-view │ │ │ │ ├── assets.adoc │ │ │ │ ├── assets │ │ │ │ │ ├── return-all-assets.adoc │ │ │ │ │ └── return-specific-assets.adoc │ │ │ │ ├── data-cleanup.adoc │ │ │ │ ├── data-consumption.adoc │ │ │ │ ├── data-provisioning.adoc │ │ │ │ ├── data-provisioning │ │ │ │ │ ├── publish-assets-error.adoc │ │ │ │ │ ├── publish-assets.adoc │ │ │ │ │ └── return-import-report.adoc │ │ │ │ ├── data-sovereignty.adoc │ │ │ │ ├── data-sovereignty │ │ │ │ │ ├── policy-management.adoc │ │ │ │ │ └── return-asset-contracts.adoc │ │ │ │ ├── discovery-flow │ │ │ │ │ └── discovery-handling.adoc │ │ │ │ ├── full.adoc │ │ │ │ ├── notifications.adoc │ │ │ │ ├── notifications │ │ │ │ │ ├── quality-investigation-receive.adoc │ │ │ │ │ └── quality-investigation-send.adoc │ │ │ │ ├── policies.adoc │ │ │ │ ├── scheduler.adoc │ │ │ │ └── scheduler │ │ │ │ │ └── scheduler.adoc │ │ │ ├── scope-context │ │ │ │ ├── business-context.adoc │ │ │ │ ├── index.adoc │ │ │ │ └── technical-context.adoc │ │ │ ├── solution-strategy │ │ │ │ ├── index.adoc │ │ │ │ ├── introduction.adoc │ │ │ │ ├── structure.adoc │ │ │ │ └── technology.adoc │ │ │ └── trace-x-data-import-interface │ │ │ │ └── data-import-interface.adoc │ │ ├── index.adoc │ │ └── user │ │ │ └── user-manual.adoc │ ├── images │ │ ├── arc42 │ │ │ ├── cross-cutting │ │ │ │ ├── given-when-then-pattern.svg │ │ │ │ ├── unit-test-naming.svg │ │ │ │ ├── user-experience │ │ │ │ │ ├── table-action-menus.svg │ │ │ │ │ ├── table-actions.svg │ │ │ │ │ ├── table-column-settings.svg │ │ │ │ │ ├── table-data-only.svg │ │ │ │ │ ├── table-design.svg │ │ │ │ │ ├── table-filter-date.svg │ │ │ │ │ ├── table-filter.svg │ │ │ │ │ ├── table-multi-select-box.svg │ │ │ │ │ ├── table-page-controls.svg │ │ │ │ │ ├── table-page-size-selector.svg │ │ │ │ │ ├── table-small.svg │ │ │ │ │ ├── table-sorting-ascending.svg │ │ │ │ │ ├── table-sorting-descending.svg │ │ │ │ │ └── table-sorting-tooltip.svg │ │ │ │ └── vulnerability-level.svg │ │ │ └── runtime-view │ │ │ │ └── data-sovereignty │ │ │ │ ├── step-1-1.svg │ │ │ │ ├── step-1.svg │ │ │ │ ├── step-2-1.svg │ │ │ │ ├── step-2-2.svg │ │ │ │ ├── step-2.svg │ │ │ │ ├── step-3.svg │ │ │ │ ├── step-4.svg │ │ │ │ ├── step-5-1.svg │ │ │ │ ├── step-5.svg │ │ │ │ └── step-6.svg │ │ ├── concepts │ │ │ └── TRX-353-sync-job-configurable │ │ │ │ ├── screen-mockup.svg │ │ │ │ └── screen-mockup2.svg │ │ └── user-manual │ │ │ ├── general-information │ │ │ ├── app-roles.svg │ │ │ ├── assign-app-roles.svg │ │ │ └── cx-portal-roles.svg │ │ │ ├── navigation │ │ │ ├── admin-contract-detailed-view.svg │ │ │ ├── admin-contract-view.svg │ │ │ ├── admin-upload-file.svg │ │ │ ├── bpn-edc-configuration.svg │ │ │ ├── dashboard.svg │ │ │ ├── language-icon.svg │ │ │ └── navigation-overview.svg │ │ │ ├── parts │ │ │ ├── customer-parts-list-detailed-view.svg │ │ │ ├── open-new-tab.svg │ │ │ ├── other-parts-autosuggestion-filtering.svg │ │ │ ├── other-parts-list-view.svg │ │ │ ├── other-parts-table-settings-dialog.svg │ │ │ ├── parts-autosuggestion-filtering.svg │ │ │ ├── parts-list-detailed-view.svg │ │ │ ├── parts-list-view.svg │ │ │ ├── parts-table-settings-dialog.svg │ │ │ ├── publish-assets-button.svg │ │ │ ├── publish-assets-view.svg │ │ │ └── supplier-parts-list-detailed-view.svg │ │ │ ├── policy-management │ │ │ ├── delete-policies-dialog.svg │ │ │ ├── policies-list-view.svg │ │ │ ├── policy-constraints.svg │ │ │ ├── policy-create.svg │ │ │ └── policy-editor.svg │ │ │ └── quality-notifications │ │ │ ├── alert-context-action-modal.svg │ │ │ ├── alert-detail-view.svg │ │ │ ├── alerts-autosuggestion-filtering.svg │ │ │ ├── alerts-list-view.svg │ │ │ ├── inbox-multiselect-actions.svg │ │ │ ├── investigation-context-action-modal.svg │ │ │ ├── investigation-create-view.svg │ │ │ ├── investigation-detail-view.svg │ │ │ ├── investigations-autosuggestion-filtering.svg │ │ │ ├── investigations-list-view.svg │ │ │ ├── notification-context-action.svg │ │ │ ├── notification-drafts.svg │ │ │ ├── notification-send.svg │ │ │ └── notificationstatemodel.svg │ ├── post-processing │ │ ├── fix_headers.js │ │ ├── fix_https_links.js │ │ ├── fix_no_emphasis.js │ │ └── fix_relative_links.js │ └── uml-diagrams │ │ ├── arc42 │ │ ├── building-block-view │ │ │ ├── building-block-view.puml │ │ │ └── whitebox_overall.puml │ │ ├── cross-cutting │ │ │ ├── domain-model │ │ │ │ ├── data-model.puml │ │ │ │ ├── domain-model-quality-notifications.puml │ │ │ │ └── domain-model.puml │ │ │ └── erm-trace-x.puml │ │ ├── deployment-view │ │ │ ├── 1_overview.puml │ │ │ └── 2_reverse-proxy.puml │ │ ├── quality │ │ │ └── quality-tree.puml │ │ ├── runtime-view │ │ │ ├── assets │ │ │ │ ├── get-country-information-for-assets.puml │ │ │ │ ├── get-specific-information-for-assets.puml │ │ │ │ ├── return-all-assets.puml │ │ │ │ └── return-specific-assets.puml │ │ │ ├── data-cleanup │ │ │ │ └── data-cleanup.puml │ │ │ ├── data-consumption-process.puml │ │ │ ├── data-consumption-process_part1_tracex_scaling.puml │ │ │ ├── data-consumption │ │ │ │ ├── data-consumption-step-1-lookup.puml │ │ │ │ └── data-consumption-step-2-sync-irs.puml │ │ │ ├── data-provisioning │ │ │ │ ├── import-report-receive.puml │ │ │ │ ├── publish-assets-error.puml │ │ │ │ ├── publish-assets.puml │ │ │ │ ├── trace-x-data-import-interface-modul1-sequence.puml │ │ │ │ ├── trace-x-data-import-interface-modul2-sequence.puml │ │ │ │ └── trace-x-data-import-interface-modul3-sequence.puml │ │ │ ├── data-sovereignty │ │ │ │ ├── data-sovereignty-notifications-policy-change.puml │ │ │ │ ├── data-sovereignty-notifications-policy-expired.puml │ │ │ │ ├── data-sovereignty-notifications.puml │ │ │ │ ├── data-sovereignty-publishing-assets.puml │ │ │ │ └── get-all-contracts-sequenceflow.puml │ │ │ ├── discovery-flow │ │ │ │ └── discovery-handling.puml │ │ │ ├── policies │ │ │ │ ├── policy-assets.puml │ │ │ │ ├── policy-crud-notification-contract.puml │ │ │ │ ├── policy-notifications.puml │ │ │ │ ├── policy-startup-configuration.puml │ │ │ │ └── policy-startup-notification-contract.puml │ │ │ ├── quality-investigation-receive.puml │ │ │ └── quality-investigation-send.puml │ │ └── scope-context │ │ │ ├── business-context │ │ │ ├── business-context-2.puml │ │ │ └── business-context.puml │ │ │ └── technical-context │ │ │ ├── aas-api-view.puml │ │ │ ├── edc-api-view.puml │ │ │ ├── irs-api-view.puml │ │ │ └── portal-api-view.puml │ │ └── user-manual │ │ └── bpn-edc-configuration.puml └── trace-x-logo.svg ├── frontend ├── .dockerignore ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .husky │ └── .gitignore ├── .lintstagedrc ├── .prettierrc ├── .stylelintrc.json ├── ARCHITECTURE.md ├── AUTHENTICATION.md ├── DOCKER_NOTICE.md ├── Dockerfile ├── GUIDELINES.md ├── TESTING.md ├── angular.json ├── browserslist ├── build │ ├── nginx.conf │ └── security-headers.conf ├── cypress.config.ts ├── cypress │ ├── .dockerignore │ ├── Dockerfile │ ├── cucumber-json-formatter │ ├── docker-compose.yml │ ├── integration │ │ └── pages │ │ │ ├── AdminPage.ts │ │ │ ├── DashboardPage.ts │ │ │ └── QualityInvestigationsPage.ts │ └── support │ │ ├── commands.ts │ │ ├── e2e.ts │ │ └── step_definitions │ │ ├── admin-contracts.ts │ │ ├── dashboard.ts │ │ ├── login.ts │ │ ├── menu.ts │ │ └── quality-investigations.ts ├── docker-compose.yml ├── int.proxy.conf.json ├── karma.conf.js ├── package.json ├── scripts │ ├── LICENSE_HEADER │ ├── add-license-header.js │ ├── custom-injector.sh │ ├── download │ │ └── org.eclipse.dash.licenses-0.0.1-SNAPSHOT.jar │ ├── eclipse_dash.sh │ ├── inject-dynamic-env.js │ └── replace-base-href.js ├── sonar-project.properties ├── src │ ├── app │ │ ├── mocks │ │ │ ├── mock.ts │ │ │ └── services │ │ │ │ ├── admin-mock │ │ │ │ ├── admin.handler.ts │ │ │ │ └── admin.model.ts │ │ │ │ ├── alerts-mock │ │ │ │ ├── alerts.handler.ts │ │ │ │ ├── alerts.model.ts │ │ │ │ └── alerts.test.model.ts │ │ │ │ ├── dashboard-mock │ │ │ │ ├── dashboard.handler.ts │ │ │ │ └── dashboard.model.ts │ │ │ │ ├── error-mock │ │ │ │ ├── error.handler.ts │ │ │ │ └── error.model.ts │ │ │ │ ├── index.ts │ │ │ │ ├── investigations-mock │ │ │ │ └── investigations.test.model.ts │ │ │ │ ├── otherParts-mock │ │ │ │ ├── customerPartsAsPlanned.model.ts │ │ │ │ ├── otherParts.handler.ts │ │ │ │ ├── otherParts.model.ts │ │ │ │ ├── otherParts.test.model.ts │ │ │ │ └── supplierPartsAsPlanned.model.ts │ │ │ │ ├── pagination.helper.ts │ │ │ │ ├── parts-mock │ │ │ │ ├── partsAsBuilt │ │ │ │ │ ├── partsAsBuilt.handler.ts │ │ │ │ │ ├── partsAsBuilt.model.ts │ │ │ │ │ └── partsAsBuilt.test.model.ts │ │ │ │ └── partsAsPlanned │ │ │ │ │ ├── partsAsPlanned.handler.ts │ │ │ │ │ ├── partsAsPlanned.model.ts │ │ │ │ │ └── partsAsPlanned.test.model.ts │ │ │ │ ├── policy-mock │ │ │ │ ├── policy.handler.ts │ │ │ │ ├── policy.model.spec.ts │ │ │ │ └── policy.model.ts │ │ │ │ └── text-generator.helper.ts │ │ └── modules │ │ │ ├── core │ │ │ ├── api │ │ │ │ ├── api.interceptor.ts │ │ │ │ ├── api.service.ts │ │ │ │ ├── http-error-interceptor.spec.ts │ │ │ │ └── http-error.interceptor.ts │ │ │ ├── app │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.scss │ │ │ │ └── app.component.ts │ │ │ ├── auth │ │ │ │ ├── auth.guard.ts │ │ │ │ ├── auth.service.ts │ │ │ │ ├── keycloak.helper.ts │ │ │ │ └── mocked-keycloak.service.ts │ │ │ ├── core.module.ts │ │ │ ├── core.routing.ts │ │ │ ├── i18n │ │ │ │ ├── global-i18n.providers.ts │ │ │ │ ├── index.ts │ │ │ │ └── local-i18n.provider.ts │ │ │ ├── known-route.ts │ │ │ ├── layout │ │ │ │ ├── header │ │ │ │ │ ├── header.component.html │ │ │ │ │ ├── header.component.scss │ │ │ │ │ ├── header.component.spec.ts │ │ │ │ │ ├── header.component.ts │ │ │ │ │ └── user-navigation │ │ │ │ │ │ ├── user-menu.component.html │ │ │ │ │ │ ├── user-menu.component.scss │ │ │ │ │ │ ├── user-menu.component.spec.ts │ │ │ │ │ │ └── user-menu.component.ts │ │ │ │ ├── layout.module.ts │ │ │ │ ├── layout.routing.ts │ │ │ │ ├── layout │ │ │ │ │ ├── layout.component.html │ │ │ │ │ ├── layout.component.scss │ │ │ │ │ ├── layout.component.spec.ts │ │ │ │ │ └── layout.component.ts │ │ │ │ ├── sidenav │ │ │ │ │ ├── sidenav.component.html │ │ │ │ │ ├── sidenav.component.scss │ │ │ │ │ ├── sidenav.component.spec.ts │ │ │ │ │ ├── sidenav.component.ts │ │ │ │ │ └── sidenav.service.ts │ │ │ │ └── spinner-overlay │ │ │ │ │ ├── spinner-overlay.component.html │ │ │ │ │ ├── spinner-overlay.component.scss │ │ │ │ │ ├── spinner-overlay.component.ts │ │ │ │ │ └── spinner-overlay.service.ts │ │ │ ├── model │ │ │ │ ├── calendar-date.model.ts │ │ │ │ └── pagination.model.ts │ │ │ ├── pagination │ │ │ │ ├── pagination.assembler.ts │ │ │ │ └── pagination.model.ts │ │ │ └── user │ │ │ │ ├── role.guard.ts │ │ │ │ ├── role.model.ts │ │ │ │ ├── role.service.ts │ │ │ │ ├── table-settings.model.ts │ │ │ │ ├── table-settings.service.spec.ts │ │ │ │ ├── table-settings.service.ts │ │ │ │ └── user.service.ts │ │ │ ├── page │ │ │ ├── about │ │ │ │ ├── about.module.ts │ │ │ │ ├── about.routing.ts │ │ │ │ └── presentation │ │ │ │ │ ├── about.component.html │ │ │ │ │ ├── about.component.scss │ │ │ │ │ ├── about.component.spec.ts │ │ │ │ │ └── about.component.ts │ │ │ ├── admin │ │ │ │ ├── admin.module.ts │ │ │ │ ├── admin.routing.ts │ │ │ │ ├── core │ │ │ │ │ ├── admin.assembler.ts │ │ │ │ │ ├── admin.facade.ts │ │ │ │ │ ├── admin.model.ts │ │ │ │ │ ├── admin.service.spec.ts │ │ │ │ │ └── admin.service.ts │ │ │ │ └── presentation │ │ │ │ │ ├── admin.component.html │ │ │ │ │ ├── admin.component.scss │ │ │ │ │ ├── admin.component.ts │ │ │ │ │ ├── bpn-configuration │ │ │ │ │ ├── bpn-configuration.component.html │ │ │ │ │ ├── bpn-configuration.component.scss │ │ │ │ │ ├── bpn-configuration.component.spec.ts │ │ │ │ │ ├── bpn-configuration.component.ts │ │ │ │ │ ├── bpn-configuration.model.ts │ │ │ │ │ └── save-modal │ │ │ │ │ │ ├── save-modal.component.html │ │ │ │ │ │ ├── save-modal.component.scss │ │ │ │ │ │ ├── save-modal.component.spec.ts │ │ │ │ │ │ └── save-modal.component.ts │ │ │ │ │ ├── contracts │ │ │ │ │ ├── contract-detail │ │ │ │ │ │ ├── contract-detail.component.html │ │ │ │ │ │ ├── contract-detail.component.scss │ │ │ │ │ │ ├── contract-detail.component.spec.ts │ │ │ │ │ │ └── contract-detail.component.ts │ │ │ │ │ ├── contracts.component.html │ │ │ │ │ ├── contracts.component.spec.ts │ │ │ │ │ ├── contracts.component.ts │ │ │ │ │ ├── contracts.facade.ts │ │ │ │ │ └── contracts.state.ts │ │ │ │ │ ├── import-json │ │ │ │ │ ├── import-json.component.html │ │ │ │ │ ├── import-json.component.scss │ │ │ │ │ ├── import-json.component.spec.ts │ │ │ │ │ └── import-json.component.ts │ │ │ │ │ └── policy-management │ │ │ │ │ ├── deletion-dialog │ │ │ │ │ ├── deletion-dialog.component.html │ │ │ │ │ ├── deletion-dialog.component.scss │ │ │ │ │ ├── deletion-dialog.component.spec.ts │ │ │ │ │ └── deletion-dialog.component.ts │ │ │ │ │ ├── policies │ │ │ │ │ ├── policies.assembler.spec.ts │ │ │ │ │ ├── policies.component.html │ │ │ │ │ ├── policies.component.spec.ts │ │ │ │ │ ├── policies.component.ts │ │ │ │ │ ├── policies.facade.spec.ts │ │ │ │ │ ├── policies.facade.ts │ │ │ │ │ ├── policies.state.spec.ts │ │ │ │ │ ├── policies.state.ts │ │ │ │ │ └── policy.assembler.ts │ │ │ │ │ └── policy-editor │ │ │ │ │ ├── policy-data.ts │ │ │ │ │ ├── policy-editor.component.html │ │ │ │ │ ├── policy-editor.component.scss │ │ │ │ │ ├── policy-editor.component.spec.ts │ │ │ │ │ └── policy-editor.component.ts │ │ │ ├── dashboard │ │ │ │ ├── abstraction │ │ │ │ │ └── dashboard.facade.ts │ │ │ │ ├── core │ │ │ │ │ ├── dashboard.assembler.spec.ts │ │ │ │ │ ├── dashboard.assembler.ts │ │ │ │ │ ├── dashboard.service.ts │ │ │ │ │ └── dashboard.state.ts │ │ │ │ ├── dashboard.module.ts │ │ │ │ ├── dashboard.routing.ts │ │ │ │ ├── model │ │ │ │ │ └── dashboard.model.ts │ │ │ │ └── presentation │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ ├── dashboard.component.spec.ts │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ └── dashboard.model.ts │ │ │ ├── digital-twin-part │ │ │ │ ├── core │ │ │ │ │ ├── digital-twin-part.facade.spec.ts │ │ │ │ │ ├── digital-twin-part.facade.ts │ │ │ │ │ ├── digital-twin-part.state.spec.ts │ │ │ │ │ └── digital-twin-part.state.ts │ │ │ │ ├── detail │ │ │ │ │ ├── digital-twin-part-detail.component.html │ │ │ │ │ ├── digital-twin-part-detail.component.scss │ │ │ │ │ ├── digital-twin-part-detail.component.spec.ts │ │ │ │ │ └── digital-twin-part-detail.component.ts │ │ │ │ ├── digital-twin-part.module.ts │ │ │ │ ├── model │ │ │ │ │ ├── digitalTwinPart.model.ts │ │ │ │ │ └── digitalTwinType.enum.ts │ │ │ │ └── presentation │ │ │ │ │ ├── configuration-dialog │ │ │ │ │ ├── configuration-dialog.component.html │ │ │ │ │ ├── configuration-dialog.component.scss │ │ │ │ │ ├── configuration-dialog.component.spec.ts │ │ │ │ │ ├── configuration-dialog.component.ts │ │ │ │ │ └── model │ │ │ │ │ │ └── configuration.model.ts │ │ │ │ │ ├── digital-twin-part.component.html │ │ │ │ │ ├── digital-twin-part.component.scss │ │ │ │ │ ├── digital-twin-part.component.spec.ts │ │ │ │ │ └── digital-twin-part.component.ts │ │ │ ├── error-page │ │ │ │ ├── error-page.module.ts │ │ │ │ ├── error-page.routing.ts │ │ │ │ ├── model │ │ │ │ │ └── error-page.model.ts │ │ │ │ └── presentation │ │ │ │ │ ├── error-page.component.html │ │ │ │ │ ├── error-page.component.scss │ │ │ │ │ ├── error-page.component.spec.ts │ │ │ │ │ └── error-page.component.ts │ │ │ ├── notifications │ │ │ │ ├── core │ │ │ │ │ ├── notification-detail.facade.spec.ts │ │ │ │ │ ├── notification-detail.facade.ts │ │ │ │ │ ├── notification-detail.state.ts │ │ │ │ │ ├── notification-helper.service.ts │ │ │ │ │ ├── notifications.facade.ts │ │ │ │ │ └── notifications.state.ts │ │ │ │ ├── detail │ │ │ │ │ ├── edit │ │ │ │ │ │ ├── notification-edit.component.html │ │ │ │ │ │ ├── notification-edit.component.scss │ │ │ │ │ │ ├── notification-edit.component.spec.ts │ │ │ │ │ │ ├── notification-edit.component.ts │ │ │ │ │ │ ├── shared-part.service.spec.ts │ │ │ │ │ │ └── shared-part.service.ts │ │ │ │ │ ├── notification-detail.component.html │ │ │ │ │ ├── notification-detail.component.scss │ │ │ │ │ ├── notification-detail.component.spec.ts │ │ │ │ │ └── notification-detail.component.ts │ │ │ │ ├── notifications.module.ts │ │ │ │ ├── notifications.routing.ts │ │ │ │ └── presentation │ │ │ │ │ ├── notifications.component.html │ │ │ │ │ ├── notifications.component.spec.ts │ │ │ │ │ └── notifications.component.ts │ │ │ ├── parts │ │ │ │ ├── core │ │ │ │ │ ├── parts.facade.spec.ts │ │ │ │ │ ├── parts.facade.ts │ │ │ │ │ ├── parts.helper.spec.ts │ │ │ │ │ ├── parts.helper.ts │ │ │ │ │ └── parts.state.ts │ │ │ │ ├── detail │ │ │ │ │ ├── parts-detail.component.html │ │ │ │ │ ├── parts-detail.component.scss │ │ │ │ │ ├── parts-detail.component.spec.ts │ │ │ │ │ ├── parts-detail.component.ts │ │ │ │ │ └── parts-detail.module.ts │ │ │ │ ├── model │ │ │ │ │ ├── aspectModels.model.ts │ │ │ │ │ ├── detailAspectModel.model.ts │ │ │ │ │ ├── mainAspectType.enum.ts │ │ │ │ │ ├── owner.enum.ts │ │ │ │ │ ├── partReloadOperation.enum.ts │ │ │ │ │ └── parts.model.ts │ │ │ │ ├── parts.module.ts │ │ │ │ ├── parts.routing.ts │ │ │ │ └── presentation │ │ │ │ │ ├── parts.component.html │ │ │ │ │ ├── parts.component.scss │ │ │ │ │ ├── parts.component.spec.ts │ │ │ │ │ ├── parts.component.ts │ │ │ │ │ └── relation │ │ │ │ │ ├── relation.component.html │ │ │ │ │ └── relation.component.ts │ │ │ └── policies │ │ │ │ └── model │ │ │ │ └── policy.model.ts │ │ │ └── shared │ │ │ ├── abstraction │ │ │ ├── baseInput │ │ │ │ ├── baseInput.component.ts │ │ │ │ └── baseInput.helper.ts │ │ │ ├── baseInputFilter │ │ │ │ └── baseInputFilter.component.ts │ │ │ └── layout-facade.ts │ │ │ ├── assembler │ │ │ ├── digital-twin-part.assembler.spec.ts │ │ │ ├── digital-twin-part.assembler.ts │ │ │ ├── notification-action-helper.service.ts │ │ │ ├── notification.assembler.spec.ts │ │ │ ├── notification.assembler.ts │ │ │ ├── notificationMenuActions.assembler.spec.ts │ │ │ ├── notificationMenuActions.assembler.ts │ │ │ ├── parts.assembler.spec.ts │ │ │ └── parts.assembler.ts │ │ │ ├── components │ │ │ ├── advanced-table-filter │ │ │ │ ├── advanced-table-filter.component.html │ │ │ │ ├── advanced-table-filter.component.scss │ │ │ │ ├── advanced-table-filter.component.spec.ts │ │ │ │ └── advanced-table-filter.component.ts │ │ │ ├── asset-publisher │ │ │ │ ├── asset-publisher.component.html │ │ │ │ ├── asset-publisher.component.scss │ │ │ │ ├── asset-publisher.component.spec.ts │ │ │ │ └── asset-publisher.component.ts │ │ │ ├── autocomplete-chip-input │ │ │ │ ├── autocomplete-chip-input.component.html │ │ │ │ ├── autocomplete-chip-input.component.scss │ │ │ │ ├── autocomplete-chip-input.component.spec.ts │ │ │ │ └── autocomplete-chip-input.component.ts │ │ │ ├── autocomplete-input │ │ │ │ ├── autocomplete-input.component.html │ │ │ │ ├── autocomplete-input.component.scss │ │ │ │ ├── autocomplete-input.component.spec.ts │ │ │ │ └── autocomplete-input.component.ts │ │ │ ├── avatar │ │ │ │ ├── avatar.component.html │ │ │ │ ├── avatar.component.scss │ │ │ │ └── avatar.component.ts │ │ │ ├── bom-lifecycle-activator │ │ │ │ └── bom-lifecycle-activator.model.ts │ │ │ ├── breadcrumb │ │ │ │ ├── breadcrumb.component.html │ │ │ │ ├── breadcrumb.component.scss │ │ │ │ ├── breadcrumb.component.spec.ts │ │ │ │ └── breadcrumb.component.ts │ │ │ ├── button │ │ │ │ ├── button.component.html │ │ │ │ ├── button.component.spec.ts │ │ │ │ └── button.component.ts │ │ │ ├── card-icon │ │ │ │ ├── card-icon.component.html │ │ │ │ ├── card-icon.component.scss │ │ │ │ ├── card-icon.component.spec.ts │ │ │ │ └── card-icon.component.ts │ │ │ ├── card-list │ │ │ │ ├── card-list.component.html │ │ │ │ ├── card-list.component.scss │ │ │ │ ├── card-list.component.spec.ts │ │ │ │ ├── card-list.component.ts │ │ │ │ ├── card-list.pipe.spec.ts │ │ │ │ └── card-list.pipe.ts │ │ │ ├── card-metric │ │ │ │ ├── card-metric.component.html │ │ │ │ ├── card-metric.component.scss │ │ │ │ ├── card-metric.component.spec.ts │ │ │ │ └── card-metric.component.ts │ │ │ ├── chip │ │ │ │ ├── chip.component.html │ │ │ │ ├── chip.component.scss │ │ │ │ ├── chip.component.spec.ts │ │ │ │ └── chip.component.ts │ │ │ ├── contracts-quick-filter │ │ │ │ ├── contracts-quick-filter.component.html │ │ │ │ ├── contracts-quick-filter.component.scss │ │ │ │ ├── contracts-quick-filter.component.spec.ts │ │ │ │ └── contracts-quick-filter.component.ts │ │ │ ├── country-flag-generator │ │ │ │ ├── country-flag-generator.component.html │ │ │ │ ├── country-flag-generator.component.spec.ts │ │ │ │ ├── country-flag-generator.component.ts │ │ │ │ └── sass │ │ │ │ │ ├── _flag-icon-base.scss │ │ │ │ │ ├── _flag-icon-list.scss │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── flag-css.scss │ │ │ ├── csv-upload │ │ │ │ ├── csv-upload.component.html │ │ │ │ ├── csv-upload.component.scss │ │ │ │ ├── csv-upload.component.spec.ts │ │ │ │ └── csv-upload.component.ts │ │ │ ├── data-loading-error │ │ │ │ ├── data-loading-error.component.html │ │ │ │ └── data-loading-error.component.ts │ │ │ ├── dateTime │ │ │ │ ├── dateTime.component.html │ │ │ │ ├── dateTime.component.spec.ts │ │ │ │ ├── dateTime.component.ts │ │ │ │ └── dateValidators.model.ts │ │ │ ├── datepicker-input │ │ │ │ ├── datepicker-input.component.html │ │ │ │ ├── datepicker-input.component.scss │ │ │ │ ├── datepicker-input.component.spec.ts │ │ │ │ └── datepicker-input.component.ts │ │ │ ├── formErrorMessage │ │ │ │ ├── formErrorMessage.component.html │ │ │ │ ├── formErrorMessage.component.spec.ts │ │ │ │ └── formErrorMessage.component.ts │ │ │ ├── input │ │ │ │ ├── input.component.html │ │ │ │ ├── input.component.scss │ │ │ │ ├── input.component.spec.ts │ │ │ │ └── input.component.ts │ │ │ ├── language-selector │ │ │ │ ├── language-selector.component.html │ │ │ │ ├── language-selector.component.scss │ │ │ │ ├── language-selector.component.spec.ts │ │ │ │ └── language-selector.component.ts │ │ │ ├── multi-select-autocomplete │ │ │ │ ├── autocomplete-strategy.spec.ts │ │ │ │ ├── autocomplete-strategy.ts │ │ │ │ ├── multi-select-autocomplete.component.html │ │ │ │ ├── multi-select-autocomplete.component.scss │ │ │ │ ├── multi-select-autocomplete.component.spec.ts │ │ │ │ ├── multi-select-autocomplete.component.ts │ │ │ │ └── table-type.model.ts │ │ │ ├── notification-common-modal │ │ │ │ ├── notification-common-modal.component.html │ │ │ │ └── notification-common-modal.component.ts │ │ │ ├── notification-overview │ │ │ │ ├── notification-overview.component.html │ │ │ │ ├── notification-overview.component.scss │ │ │ │ └── notification-overview.component.ts │ │ │ ├── notification-reason │ │ │ │ ├── notification-reason.component.html │ │ │ │ ├── notification-reason.component.scss │ │ │ │ ├── notification-reason.component.spec.ts │ │ │ │ └── notification-reason.component.ts │ │ │ ├── notification-type │ │ │ │ ├── notification-type.component.html │ │ │ │ ├── notification-type.component.scss │ │ │ │ ├── notification-type.component.spec.ts │ │ │ │ └── notification-type.component.ts │ │ │ ├── pagination │ │ │ │ ├── paginator-intl.service.spec.ts │ │ │ │ └── paginator-intl.service.ts │ │ │ ├── parts-table │ │ │ │ ├── digital-twin-parts-configuration.model.ts │ │ │ │ ├── notifications-received-configuration.model.ts │ │ │ │ ├── notifications-sent-configuration.model.ts │ │ │ │ ├── parts-as-built-configuration.model.ts │ │ │ │ ├── parts-as-planned-configuration.model.ts │ │ │ │ ├── parts-config.model.ts │ │ │ │ ├── parts-table-config.utils.ts │ │ │ │ ├── parts-table.component.html │ │ │ │ ├── parts-table.component.scss │ │ │ │ ├── parts-table.component.spec.ts │ │ │ │ ├── parts-table.component.ts │ │ │ │ ├── policies-configuration.model.ts │ │ │ │ └── table-view-config.model.ts │ │ │ ├── quality-type │ │ │ │ ├── quality-type.component.html │ │ │ │ ├── quality-type.component.scss │ │ │ │ ├── quality-type.component.spec.ts │ │ │ │ └── quality-type.component.ts │ │ │ ├── request-notification-new │ │ │ │ ├── index.ts │ │ │ │ ├── notification-new-request.component.html │ │ │ │ ├── notification-new-request.component.spec.ts │ │ │ │ └── notification-new-request.component.ts │ │ │ ├── select │ │ │ │ ├── select.component.html │ │ │ │ ├── select.component.scss │ │ │ │ ├── select.component.spec.ts │ │ │ │ ├── select.component.ts │ │ │ │ └── valueToLable.pipe.ts │ │ │ ├── severity-select │ │ │ │ ├── severity-select.component.html │ │ │ │ ├── severity-select.component.spec.ts │ │ │ │ └── severity-select.component.ts │ │ │ ├── severity │ │ │ │ ├── severity.component.html │ │ │ │ ├── severity.component.scss │ │ │ │ ├── severity.component.spec.ts │ │ │ │ └── severity.component.ts │ │ │ ├── sidenav │ │ │ │ ├── sidenav-wrapper.component.html │ │ │ │ └── sidenav-wrapper.component.ts │ │ │ ├── table-settings │ │ │ │ ├── table-settings.component.html │ │ │ │ ├── table-settings.component.scss │ │ │ │ ├── table-settings.component.spec.ts │ │ │ │ └── table-settings.component.ts │ │ │ ├── table │ │ │ │ ├── table-sorting.util.ts │ │ │ │ ├── table.component.html │ │ │ │ ├── table.component.scss │ │ │ │ ├── table.component.spec.ts │ │ │ │ ├── table.component.ts │ │ │ │ └── table.model.ts │ │ │ ├── text-with-icon │ │ │ │ ├── text-with-icon.component.html │ │ │ │ ├── text-with-icon.component.spec.ts │ │ │ │ └── text-with-icon.component.ts │ │ │ ├── textarea │ │ │ │ ├── textarea.component.html │ │ │ │ ├── textarea.component.scss │ │ │ │ ├── textarea.component.spec.ts │ │ │ │ └── textarea.component.ts │ │ │ ├── toasts │ │ │ │ ├── toast-container │ │ │ │ │ ├── animation.ts │ │ │ │ │ ├── toast-container.component.html │ │ │ │ │ ├── toast-container.component.scss │ │ │ │ │ └── toast-container.component.ts │ │ │ │ ├── toast-message │ │ │ │ │ ├── toast-message.component.html │ │ │ │ │ ├── toast-message.component.scss │ │ │ │ │ ├── toast-message.component.spec.ts │ │ │ │ │ ├── toast-message.component.ts │ │ │ │ │ └── toast-message.model.ts │ │ │ │ ├── toast.service.ts │ │ │ │ └── toast.spec.ts │ │ │ ├── type-select │ │ │ │ ├── type-select.component.html │ │ │ │ ├── type-select.component.spec.ts │ │ │ │ └── type-select.component.ts │ │ │ ├── unscoped-styles.scss │ │ │ └── view-selector │ │ │ │ ├── view-selector.component.html │ │ │ │ ├── view-selector.component.scss │ │ │ │ ├── view-selector.component.spec.ts │ │ │ │ └── view-selector.component.ts │ │ │ ├── directives │ │ │ ├── role.directive.ts │ │ │ ├── tabs │ │ │ │ ├── tab-as-panel.directive.scss │ │ │ │ └── tab-as-panel.directive.ts │ │ │ ├── tooltip.directive.ts │ │ │ └── view-container.directive.ts │ │ │ ├── helper │ │ │ ├── filter-helper.spec.ts │ │ │ ├── filter-helper.ts │ │ │ ├── notification-helper.spec.ts │ │ │ ├── notification-helper.ts │ │ │ └── table-helper.ts │ │ │ ├── index.ts │ │ │ ├── model │ │ │ ├── deeplink.model.ts │ │ │ ├── filter.model.ts │ │ │ ├── i18n-message.ts │ │ │ ├── notification-tab-information.ts │ │ │ ├── notification.model.ts │ │ │ ├── page-route.model.ts │ │ │ ├── severity.model.ts │ │ │ ├── state.ts │ │ │ ├── translation-context.model.ts │ │ │ ├── view-context.model.ts │ │ │ └── view.model.ts │ │ │ ├── modules │ │ │ ├── modal │ │ │ │ ├── component │ │ │ │ │ ├── modal.component.html │ │ │ │ │ ├── modal.component.scss │ │ │ │ │ ├── modal.component.spec.ts │ │ │ │ │ └── modal.component.ts │ │ │ │ ├── core │ │ │ │ │ ├── modal.model.ts │ │ │ │ │ └── modal.service.ts │ │ │ │ └── modal.module.ts │ │ │ ├── notification │ │ │ │ ├── modal │ │ │ │ │ ├── actions │ │ │ │ │ │ ├── notification-action-modal.component.html │ │ │ │ │ │ ├── notification-action-modal.component.spec.ts │ │ │ │ │ │ └── notification-action-modal.component.ts │ │ │ │ │ └── content │ │ │ │ │ │ ├── notification-modal-content.component.html │ │ │ │ │ │ └── notification-modal-content.component.ts │ │ │ │ ├── notification-action.enum.ts │ │ │ │ ├── notification-tab │ │ │ │ │ ├── notification-tab.component.html │ │ │ │ │ ├── notification-tab.component.scss │ │ │ │ │ ├── notification-tab.component.spec.ts │ │ │ │ │ └── notification-tab.component.ts │ │ │ │ ├── notification.module.ts │ │ │ │ └── presentation │ │ │ │ │ ├── notification.component.html │ │ │ │ │ ├── notification.component.spec.ts │ │ │ │ │ └── notification.component.ts │ │ │ ├── part-details │ │ │ │ ├── core │ │ │ │ │ ├── partDetails.facade.ts │ │ │ │ │ └── partDetails.state.ts │ │ │ │ └── presentation │ │ │ │ │ └── related-parts-table │ │ │ │ │ ├── related-parts-table.component.html │ │ │ │ │ ├── related-parts-table.component.scss │ │ │ │ │ ├── related-parts-table.component.spec.ts │ │ │ │ │ └── related-parts-table.component.ts │ │ │ └── relations │ │ │ │ ├── RELATIONS.md │ │ │ │ ├── core │ │ │ │ ├── component.state.ts │ │ │ │ ├── loaded-elements.facade.ts │ │ │ │ ├── loaded-elements.state.ts │ │ │ │ ├── relations.assembler.spec.ts │ │ │ │ ├── relations.assembler.ts │ │ │ │ ├── relations.facade.spec.ts │ │ │ │ └── relations.facade.ts │ │ │ │ ├── model │ │ │ │ └── relations.model.ts │ │ │ │ ├── presentation │ │ │ │ ├── helper │ │ │ │ │ ├── d3.render.helper.ts │ │ │ │ │ ├── helper.d3.spec.ts │ │ │ │ │ └── helper.d3.ts │ │ │ │ ├── minimap │ │ │ │ │ ├── minimap.d3.spec.ts │ │ │ │ │ └── minimap.d3.ts │ │ │ │ ├── model.d3.ts │ │ │ │ ├── part-relation.component.html │ │ │ │ ├── part-relation.component.scss │ │ │ │ ├── part-relation.component.ts │ │ │ │ ├── tree.component.ts │ │ │ │ └── tree │ │ │ │ │ ├── tree.d3.spec.ts │ │ │ │ │ ├── tree.d3.test.data.ts │ │ │ │ │ └── tree.d3.ts │ │ │ │ └── relations.module.ts │ │ │ ├── pipes │ │ │ ├── abbreviate-number.pipe.spec.ts │ │ │ ├── abbreviate-number.pipe.ts │ │ │ ├── auto-format.pipe.spec.ts │ │ │ ├── auto-format.pipe.ts │ │ │ ├── error-message.pipe.spec.ts │ │ │ ├── error-message.pipe.ts │ │ │ ├── flatten-object.pipe.ts │ │ │ ├── format-date.pipe.spec.ts │ │ │ ├── format-date.pipe.ts │ │ │ ├── format-pagination-semantic-data-model-to-camelcase.pipe.spec.ts │ │ │ ├── format-pagination-semantic-data-model-to-camelcase.pipe.ts │ │ │ ├── format-part-semantic-data-model-to-camelcase.pipe.spec.ts │ │ │ ├── format-part-semantic-data-model-to-camelcase.pipe.ts │ │ │ ├── format-partlist-semantic-data-model-to-camelcase.pipe.spec.ts │ │ │ ├── format-partlist-semantic-data-model-to-camelcase.pipe.ts │ │ │ ├── i18n.pipe.spec.ts │ │ │ └── i18n.pipe.ts │ │ │ ├── resolver │ │ │ └── .gitKeep │ │ │ ├── service │ │ │ ├── bom-lifecycle-settings.service.spec.ts │ │ │ ├── bom-lifecycle-settings.service.ts │ │ │ ├── configuration.service.spec.ts │ │ │ ├── configuration.service.ts │ │ │ ├── csv-filter.service.spec.ts │ │ │ ├── csv-filter.service.ts │ │ │ ├── deeplink.service.spec.ts │ │ │ ├── deeplink.service.ts │ │ │ ├── digital-twin-part.service.spec.ts │ │ │ ├── digitalTwinPart.service.ts │ │ │ ├── filter.service.spec.ts │ │ │ ├── filter.service.ts │ │ │ ├── layout.state.ts │ │ │ ├── notification-processing.service.spec.ts │ │ │ ├── notification-processing.service.ts │ │ │ ├── notification.service.spec.ts │ │ │ ├── notification.service.ts │ │ │ ├── parts.service.spec.ts │ │ │ ├── parts.service.ts │ │ │ ├── policy.service.spec.ts │ │ │ ├── policy.service.ts │ │ │ ├── quickfilter.service.spec.ts │ │ │ ├── quickfilter.service.ts │ │ │ └── staticId.service.ts │ │ │ ├── shared.module.ts │ │ │ └── template.module.ts │ ├── assets │ │ ├── fonts │ │ │ ├── LibreFranklin-Italic-VariableFont_wght.ttf │ │ │ ├── LibreFranklin-VariableFont_wght.ttf │ │ │ ├── karbon-medium.woff2 │ │ │ ├── karbon-regular.woff2 │ │ │ └── karbon-semibold.woff2 │ │ ├── images │ │ │ ├── add_files.svg │ │ │ ├── as-built.svg │ │ │ ├── as-planned.svg │ │ │ ├── catena-x.svg │ │ │ ├── error_page.svg │ │ │ ├── flags │ │ │ │ └── 4x3 │ │ │ │ │ ├── ad.svg │ │ │ │ │ ├── ae.svg │ │ │ │ │ ├── af.svg │ │ │ │ │ ├── ag.svg │ │ │ │ │ ├── ai.svg │ │ │ │ │ ├── al.svg │ │ │ │ │ ├── am.svg │ │ │ │ │ ├── ao.svg │ │ │ │ │ ├── aq.svg │ │ │ │ │ ├── ar.svg │ │ │ │ │ ├── as.svg │ │ │ │ │ ├── at.svg │ │ │ │ │ ├── au.svg │ │ │ │ │ ├── aw.svg │ │ │ │ │ ├── ax.svg │ │ │ │ │ ├── az.svg │ │ │ │ │ ├── ba.svg │ │ │ │ │ ├── bb.svg │ │ │ │ │ ├── bd.svg │ │ │ │ │ ├── be.svg │ │ │ │ │ ├── bf.svg │ │ │ │ │ ├── bg.svg │ │ │ │ │ ├── bh.svg │ │ │ │ │ ├── bi.svg │ │ │ │ │ ├── bj.svg │ │ │ │ │ ├── bl.svg │ │ │ │ │ ├── bm.svg │ │ │ │ │ ├── bn.svg │ │ │ │ │ ├── bo.svg │ │ │ │ │ ├── bq.svg │ │ │ │ │ ├── br.svg │ │ │ │ │ ├── bs.svg │ │ │ │ │ ├── bt.svg │ │ │ │ │ ├── bv.svg │ │ │ │ │ ├── bw.svg │ │ │ │ │ ├── by.svg │ │ │ │ │ ├── bz.svg │ │ │ │ │ ├── ca.svg │ │ │ │ │ ├── cc.svg │ │ │ │ │ ├── cd.svg │ │ │ │ │ ├── cf.svg │ │ │ │ │ ├── cg.svg │ │ │ │ │ ├── ch.svg │ │ │ │ │ ├── ci.svg │ │ │ │ │ ├── ck.svg │ │ │ │ │ ├── cl.svg │ │ │ │ │ ├── cm.svg │ │ │ │ │ ├── cn.svg │ │ │ │ │ ├── co.svg │ │ │ │ │ ├── cr.svg │ │ │ │ │ ├── cu.svg │ │ │ │ │ ├── cv.svg │ │ │ │ │ ├── cw.svg │ │ │ │ │ ├── cx.svg │ │ │ │ │ ├── cy.svg │ │ │ │ │ ├── cz.svg │ │ │ │ │ ├── de.svg │ │ │ │ │ ├── dj.svg │ │ │ │ │ ├── dk.svg │ │ │ │ │ ├── dm.svg │ │ │ │ │ ├── do.svg │ │ │ │ │ ├── dz.svg │ │ │ │ │ ├── ec.svg │ │ │ │ │ ├── ee.svg │ │ │ │ │ ├── eg.svg │ │ │ │ │ ├── eh.svg │ │ │ │ │ ├── er.svg │ │ │ │ │ ├── es-ca.svg │ │ │ │ │ ├── es.svg │ │ │ │ │ ├── et.svg │ │ │ │ │ ├── eu.svg │ │ │ │ │ ├── fi.svg │ │ │ │ │ ├── fj.svg │ │ │ │ │ ├── fk.svg │ │ │ │ │ ├── fm.svg │ │ │ │ │ ├── fo.svg │ │ │ │ │ ├── fr.svg │ │ │ │ │ ├── ga.svg │ │ │ │ │ ├── gb-eng.svg │ │ │ │ │ ├── gb-nir.svg │ │ │ │ │ ├── gb-sct.svg │ │ │ │ │ ├── gb-wls.svg │ │ │ │ │ ├── gb.svg │ │ │ │ │ ├── gd.svg │ │ │ │ │ ├── ge.svg │ │ │ │ │ ├── gf.svg │ │ │ │ │ ├── gg.svg │ │ │ │ │ ├── gh.svg │ │ │ │ │ ├── gi.svg │ │ │ │ │ ├── gl.svg │ │ │ │ │ ├── gm.svg │ │ │ │ │ ├── gn.svg │ │ │ │ │ ├── gp.svg │ │ │ │ │ ├── gq.svg │ │ │ │ │ ├── gr.svg │ │ │ │ │ ├── gs.svg │ │ │ │ │ ├── gt.svg │ │ │ │ │ ├── gu.svg │ │ │ │ │ ├── gw.svg │ │ │ │ │ ├── gy.svg │ │ │ │ │ ├── hk.svg │ │ │ │ │ ├── hm.svg │ │ │ │ │ ├── hn.svg │ │ │ │ │ ├── hr.svg │ │ │ │ │ ├── ht.svg │ │ │ │ │ ├── hu.svg │ │ │ │ │ ├── id.svg │ │ │ │ │ ├── ie.svg │ │ │ │ │ ├── il.svg │ │ │ │ │ ├── im.svg │ │ │ │ │ ├── in.svg │ │ │ │ │ ├── io.svg │ │ │ │ │ ├── iq.svg │ │ │ │ │ ├── ir.svg │ │ │ │ │ ├── is.svg │ │ │ │ │ ├── it.svg │ │ │ │ │ ├── je.svg │ │ │ │ │ ├── jm.svg │ │ │ │ │ ├── jo.svg │ │ │ │ │ ├── jp.svg │ │ │ │ │ ├── ke.svg │ │ │ │ │ ├── kg.svg │ │ │ │ │ ├── kh.svg │ │ │ │ │ ├── ki.svg │ │ │ │ │ ├── km.svg │ │ │ │ │ ├── kn.svg │ │ │ │ │ ├── kp.svg │ │ │ │ │ ├── kr.svg │ │ │ │ │ ├── kw.svg │ │ │ │ │ ├── ky.svg │ │ │ │ │ ├── kz.svg │ │ │ │ │ ├── la.svg │ │ │ │ │ ├── lb.svg │ │ │ │ │ ├── lc.svg │ │ │ │ │ ├── li.svg │ │ │ │ │ ├── lk.svg │ │ │ │ │ ├── lr.svg │ │ │ │ │ ├── ls.svg │ │ │ │ │ ├── lt.svg │ │ │ │ │ ├── lu.svg │ │ │ │ │ ├── lv.svg │ │ │ │ │ ├── ly.svg │ │ │ │ │ ├── ma.svg │ │ │ │ │ ├── mc.svg │ │ │ │ │ ├── md.svg │ │ │ │ │ ├── me.svg │ │ │ │ │ ├── mf.svg │ │ │ │ │ ├── mg.svg │ │ │ │ │ ├── mh.svg │ │ │ │ │ ├── mk.svg │ │ │ │ │ ├── ml.svg │ │ │ │ │ ├── mm.svg │ │ │ │ │ ├── mn.svg │ │ │ │ │ ├── mo.svg │ │ │ │ │ ├── mp.svg │ │ │ │ │ ├── mq.svg │ │ │ │ │ ├── mr.svg │ │ │ │ │ ├── ms.svg │ │ │ │ │ ├── mt.svg │ │ │ │ │ ├── mu.svg │ │ │ │ │ ├── mv.svg │ │ │ │ │ ├── mw.svg │ │ │ │ │ ├── mx.svg │ │ │ │ │ ├── my.svg │ │ │ │ │ ├── mz.svg │ │ │ │ │ ├── na.svg │ │ │ │ │ ├── nc.svg │ │ │ │ │ ├── ne.svg │ │ │ │ │ ├── nf.svg │ │ │ │ │ ├── ng.svg │ │ │ │ │ ├── ni.svg │ │ │ │ │ ├── nl.svg │ │ │ │ │ ├── no.svg │ │ │ │ │ ├── np.svg │ │ │ │ │ ├── nr.svg │ │ │ │ │ ├── nu.svg │ │ │ │ │ ├── nz.svg │ │ │ │ │ ├── om.svg │ │ │ │ │ ├── pa.svg │ │ │ │ │ ├── pe.svg │ │ │ │ │ ├── pf.svg │ │ │ │ │ ├── pg.svg │ │ │ │ │ ├── ph.svg │ │ │ │ │ ├── pk.svg │ │ │ │ │ ├── pl.svg │ │ │ │ │ ├── pm.svg │ │ │ │ │ ├── pn.svg │ │ │ │ │ ├── pr.svg │ │ │ │ │ ├── ps.svg │ │ │ │ │ ├── pt.svg │ │ │ │ │ ├── pw.svg │ │ │ │ │ ├── py.svg │ │ │ │ │ ├── qa.svg │ │ │ │ │ ├── re.svg │ │ │ │ │ ├── ro.svg │ │ │ │ │ ├── rs.svg │ │ │ │ │ ├── ru.svg │ │ │ │ │ ├── rw.svg │ │ │ │ │ ├── sa.svg │ │ │ │ │ ├── sb.svg │ │ │ │ │ ├── sc.svg │ │ │ │ │ ├── sd.svg │ │ │ │ │ ├── se.svg │ │ │ │ │ ├── sg.svg │ │ │ │ │ ├── sh.svg │ │ │ │ │ ├── si.svg │ │ │ │ │ ├── sj.svg │ │ │ │ │ ├── sk.svg │ │ │ │ │ ├── sl.svg │ │ │ │ │ ├── sm.svg │ │ │ │ │ ├── sn.svg │ │ │ │ │ ├── so.svg │ │ │ │ │ ├── sr.svg │ │ │ │ │ ├── ss.svg │ │ │ │ │ ├── st.svg │ │ │ │ │ ├── sv.svg │ │ │ │ │ ├── sx.svg │ │ │ │ │ ├── sy.svg │ │ │ │ │ ├── sz.svg │ │ │ │ │ ├── tc.svg │ │ │ │ │ ├── td.svg │ │ │ │ │ ├── tf.svg │ │ │ │ │ ├── tg.svg │ │ │ │ │ ├── th.svg │ │ │ │ │ ├── tj.svg │ │ │ │ │ ├── tk.svg │ │ │ │ │ ├── tl.svg │ │ │ │ │ ├── tm.svg │ │ │ │ │ ├── tn.svg │ │ │ │ │ ├── to.svg │ │ │ │ │ ├── tr.svg │ │ │ │ │ ├── tt.svg │ │ │ │ │ ├── tv.svg │ │ │ │ │ ├── tw.svg │ │ │ │ │ ├── tz.svg │ │ │ │ │ ├── ua.svg │ │ │ │ │ ├── ug.svg │ │ │ │ │ ├── um.svg │ │ │ │ │ ├── un.svg │ │ │ │ │ ├── us.svg │ │ │ │ │ ├── uy.svg │ │ │ │ │ ├── uz.svg │ │ │ │ │ ├── va.svg │ │ │ │ │ ├── vc.svg │ │ │ │ │ ├── ve.svg │ │ │ │ │ ├── vg.svg │ │ │ │ │ ├── vi.svg │ │ │ │ │ ├── vn.svg │ │ │ │ │ ├── vu.svg │ │ │ │ │ ├── wf.svg │ │ │ │ │ ├── ws.svg │ │ │ │ │ ├── xk.svg │ │ │ │ │ ├── ye.svg │ │ │ │ │ ├── yt.svg │ │ │ │ │ ├── za.svg │ │ │ │ │ ├── zm.svg │ │ │ │ │ └── zw.svg │ │ │ ├── header-subtract.png │ │ │ ├── invite_orgs.svg │ │ │ ├── layer-icon.svg │ │ │ ├── logo.png │ │ │ ├── logo.svg │ │ │ ├── no_data_illustration.svg │ │ │ ├── relax.svg │ │ │ ├── sec_on.svg │ │ │ ├── undraw_pie_chart.svg │ │ │ ├── undraw_report.svg │ │ │ ├── undraw_server_down_s4lk.svg │ │ │ └── undraw_visual_data.svg │ │ └── locales │ │ │ ├── de │ │ │ ├── common.json │ │ │ ├── page.about.json │ │ │ ├── page.admin.json │ │ │ ├── page.alert.json │ │ │ ├── page.dashboard.json │ │ │ ├── page.error-page.json │ │ │ ├── page.investigation.json │ │ │ ├── page.otherParts.json │ │ │ ├── page.parts.json │ │ │ └── partDetail.json │ │ │ └── en │ │ │ ├── _test.json │ │ │ ├── common.json │ │ │ ├── page.about.json │ │ │ ├── page.admin.json │ │ │ ├── page.alert.json │ │ │ ├── page.dashboard.json │ │ │ ├── page.error-page.json │ │ │ ├── page.investigation.json │ │ │ ├── page.otherParts.json │ │ │ ├── page.parts.json │ │ │ └── partDetail.json │ ├── catena-x-theme │ │ ├── base.scss │ │ ├── fonts.scss │ │ └── material-theme.scss │ ├── cofinity-x-theme │ │ ├── base.scss │ │ ├── fonts.scss │ │ └── material-theme.scss │ ├── environments │ │ ├── _environment.base.ts │ │ ├── environment.auth.ts │ │ ├── environment.authDev.ts │ │ ├── environment.authE2eA.ts │ │ ├── environment.authE2eB.ts │ │ ├── environment.authLocal.ts │ │ ├── environment.authMock.ts │ │ ├── environment.authTest.ts │ │ ├── environment.dev.ts │ │ ├── environment.localBackend.ts │ │ ├── environment.localBackendNoAuth.ts │ │ ├── environment.localBackendTractusX.ts │ │ ├── environment.production.ts │ │ └── environment.ts │ ├── favicon │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon.png │ │ ├── browserconfig.xml │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── mstile-150x150.png │ │ └── safari-pinned-tab.svg │ ├── index.html │ ├── main.ts │ ├── manifest.json │ ├── mockServiceWorker.js │ ├── polyfills.ts │ ├── styles.catenax.css │ ├── styles.catenax.scss │ ├── styles.cofinityx.css │ ├── styles.cofinityx.scss │ ├── styles.css │ ├── styles.scss │ ├── test.ts │ ├── tests │ │ ├── mock-test-server.ts │ │ └── test-render.utils.ts │ ├── theme │ │ ├── base.scss │ │ ├── fonts.scss │ │ └── material-theme.scss │ ├── tsconfig.app.json │ └── tsconfig.spec.json ├── tailwind.config.base.js ├── tailwind.config.catenax.js ├── tailwind.config.cofinityx.js ├── tailwind.config.js ├── tsconfig.json ├── webpack.config.js └── yarn.lock ├── lombok.config ├── pom.xml ├── settings.xml ├── tx-backend ├── .mvn │ └── wrapper │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── TESTING.md ├── collection │ ├── README.md │ ├── cfx-collection │ │ ├── Insomnia_TRX_Filter_API.json │ │ └── Insomnia_TRX_Notification-Journey.json │ └── tracex.json ├── config │ └── checkstyle │ │ ├── REGEXPR_HEADER.txt │ │ ├── checkstyle.xml │ │ └── suppressions.xml ├── docker │ ├── cx_keycloak_realm │ │ └── cx-realm.json │ ├── db-init │ │ └── create_db.sql │ ├── docker-compose.yml │ └── wiremock │ │ ├── __files │ │ ├── dtr │ │ │ └── dtr_registry_shell-descriptors_respond_AssetAdministrationShell__GET__SUCCESS.json │ │ ├── edc │ │ │ ├── edc_api_v2_catalog_request_response__POST__SUCCESS.json │ │ │ ├── edc_api_v2_contractnegotiations_id-value_response__GET__SUCCESS.json │ │ │ ├── edc_api_v2_transferprocesses_response__GET__SUCCESS.json │ │ │ └── edc_api_v2_transferprocesses_response__POST__SUCCESS.json │ │ └── irs │ │ │ ├── irs_jobs_response__GET__SUCCESS.json │ │ │ ├── irs_policies_response__GET__SUCCESS.json │ │ │ └── irs_policies_response__POST__SUCCESS.json │ │ └── mappings │ │ ├── discoveryfinder │ │ └── discoveryfinder_administration_connectors_discovery_search_bpn__POST__SUCCESS.json │ │ ├── dtr │ │ ├── dtr_lookup_shells__GET__SUCCESS.json │ │ └── dtr_registry_shell-descriptors__GET__SUCCESS.json │ │ ├── edc │ │ ├── edc__POST__SUCCESS.json │ │ ├── edc_api_v2_catalog_request__POST__SUCCESS.json │ │ ├── edc_api_v2_contractnegotiations__POST__SUCCESS.json │ │ ├── edc_api_v2_contractnegotiations_id-value__GET__SUCCESS.json │ │ ├── edc_api_v2_contractnegotiations_state__GET__SUCCESS.json │ │ ├── edc_api_v2_transferprocesses__GET__SUCCESS.json │ │ ├── edc_api_v2_transferprocesses__POST__SUCCESS.json │ │ ├── edc_api_v2_transferprocesses_state__GET__SUCCESS.json │ │ ├── edc_management_v2_assets__DELETE__SUCCESS.json │ │ ├── edc_management_v2_assets__POST__SUCCESS.json │ │ ├── edc_management_v2_contractdefinitions__POST__CONFLICT__ObjectExists.json │ │ ├── edc_management_v2_contractdefinitions__POST__SUCCESS.json │ │ ├── edc_management_v2_policydefinitions_GET_SUCCESS.json │ │ ├── edc_management_v2_policydefinitions__DELETE__SUCCESS.json │ │ ├── edc_management_v2_policydefinitions__POST__CONFLICT__ObjectExists.json │ │ ├── edc_management_v2_policydefinitions__POST__SUCCESS.json │ │ └── edc_management_v3_assets__POST__SUCCESS.json │ │ ├── edcdiscovery │ │ └── edcdiscovery_administration_connectors_discovery__POST__SUCCESS.json │ │ └── irs │ │ ├── irs_jobs__GET__SUCCESS.json │ │ ├── irs_jobs__POST__SUCCESS.json │ │ ├── irs_policies__DELETE__SUCCESS.json │ │ ├── irs_policies__GET__SUCCESS.json │ │ └── irs_policies__POST__CREATED.json ├── mvnw ├── mvnw.cmd ├── pom.xml ├── scripts │ ├── LICENSE_HEADER │ └── add-license-header.js ├── src │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── eclipse │ │ │ │ └── tractusx │ │ │ │ └── traceability │ │ │ │ ├── TraceabilityApplication.java │ │ │ │ ├── aas │ │ │ │ ├── application │ │ │ │ │ ├── rest │ │ │ │ │ │ └── AASController.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── AASService.java │ │ │ │ │ │ └── DTRService.java │ │ │ │ ├── domain │ │ │ │ │ ├── model │ │ │ │ │ │ ├── AAS.java │ │ │ │ │ │ ├── Actor.java │ │ │ │ │ │ ├── DTR.java │ │ │ │ │ │ └── TwinType.java │ │ │ │ │ ├── repository │ │ │ │ │ │ ├── AASRepository.java │ │ │ │ │ │ └── DTRRepository.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── AASServiceImpl.java │ │ │ │ │ │ └── DTRServiceImpl.java │ │ │ │ └── infrastructure │ │ │ │ │ ├── model │ │ │ │ │ ├── AASEntity.java │ │ │ │ │ └── DigitalTwinType.java │ │ │ │ │ └── repository │ │ │ │ │ ├── AASRepositoryImpl.java │ │ │ │ │ ├── DTRRepositoryImpl.java │ │ │ │ │ └── JpaAASRepository.java │ │ │ │ ├── assets │ │ │ │ ├── application │ │ │ │ │ ├── asbuilt │ │ │ │ │ │ ├── mapper │ │ │ │ │ │ │ ├── AssetAsBuiltFieldMapper.java │ │ │ │ │ │ │ ├── AssetAsBuiltResponseMapper.java │ │ │ │ │ │ │ └── QualityTypeMapper.java │ │ │ │ │ │ └── rest │ │ │ │ │ │ │ └── AssetAsBuiltController.java │ │ │ │ │ ├── asplanned │ │ │ │ │ │ ├── mapper │ │ │ │ │ │ │ ├── AssetAsPlannedFieldMapper.java │ │ │ │ │ │ │ └── AssetAsPlannedResponseMapper.java │ │ │ │ │ │ └── rest │ │ │ │ │ │ │ └── AssetAsPlannedController.java │ │ │ │ │ ├── base │ │ │ │ │ │ ├── mapper │ │ │ │ │ │ │ ├── AssetBaseResponseMapper.java │ │ │ │ │ │ │ └── OwnerTypeMapper.java │ │ │ │ │ │ ├── request │ │ │ │ │ │ │ ├── GetDetailInformationRequest.java │ │ │ │ │ │ │ └── SyncAssetsRequest.java │ │ │ │ │ │ └── service │ │ │ │ │ │ │ └── AssetBaseService.java │ │ │ │ │ ├── dashboard │ │ │ │ │ │ ├── mapper │ │ │ │ │ │ │ └── DashboardResponseMapper.java │ │ │ │ │ │ ├── rest │ │ │ │ │ │ │ └── DashboardController.java │ │ │ │ │ │ └── service │ │ │ │ │ │ │ └── DashboardService.java │ │ │ │ │ ├── importpoc │ │ │ │ │ │ ├── ImportService.java │ │ │ │ │ │ ├── PublishService.java │ │ │ │ │ │ ├── PublishServiceAsync.java │ │ │ │ │ │ ├── mapper │ │ │ │ │ │ │ └── ImportJobResponseMapper.java │ │ │ │ │ │ ├── rest │ │ │ │ │ │ │ └── ImportController.java │ │ │ │ │ │ └── validation │ │ │ │ │ │ │ ├── JsonFileValidator.java │ │ │ │ │ │ │ └── exception │ │ │ │ │ │ │ ├── JsonFileProcessingException.java │ │ │ │ │ │ │ └── NotSupportedSchemaException.java │ │ │ │ │ └── order │ │ │ │ │ │ └── rest │ │ │ │ │ │ └── OrderController.java │ │ │ │ ├── domain │ │ │ │ │ ├── asbuilt │ │ │ │ │ │ ├── exception │ │ │ │ │ │ │ └── AssetNotFoundException.java │ │ │ │ │ │ ├── model │ │ │ │ │ │ │ └── aspect │ │ │ │ │ │ │ │ ├── DetailAspectDataAsBuilt.java │ │ │ │ │ │ │ │ └── DetailAspectDataTractionBatteryCode.java │ │ │ │ │ │ ├── repository │ │ │ │ │ │ │ ├── AssetAsBuiltRepository.java │ │ │ │ │ │ │ └── AssetAsBuiltViewRepository.java │ │ │ │ │ │ └── service │ │ │ │ │ │ │ └── AssetAsBuiltServiceImpl.java │ │ │ │ │ ├── asplanned │ │ │ │ │ │ ├── model │ │ │ │ │ │ │ └── aspect │ │ │ │ │ │ │ │ ├── DetailAspectDataAsPlanned.java │ │ │ │ │ │ │ │ └── DetailAspectDataPartSiteInformationAsPlanned.java │ │ │ │ │ │ ├── repository │ │ │ │ │ │ │ └── AssetAsPlannedRepository.java │ │ │ │ │ │ └── service │ │ │ │ │ │ │ └── AssetAsPlannedServiceImpl.java │ │ │ │ │ ├── base │ │ │ │ │ │ ├── AssetRepository.java │ │ │ │ │ │ ├── OrderRepository.java │ │ │ │ │ │ ├── model │ │ │ │ │ │ │ ├── AssetBase.java │ │ │ │ │ │ │ ├── Descriptions.java │ │ │ │ │ │ │ ├── ImportNote.java │ │ │ │ │ │ │ ├── ImportState.java │ │ │ │ │ │ │ ├── Owner.java │ │ │ │ │ │ │ ├── QualityType.java │ │ │ │ │ │ │ ├── SemanticDataModel.java │ │ │ │ │ │ │ └── aspect │ │ │ │ │ │ │ │ ├── DetailAspectData.java │ │ │ │ │ │ │ │ ├── DetailAspectModel.java │ │ │ │ │ │ │ │ └── DetailAspectType.java │ │ │ │ │ │ └── service │ │ │ │ │ │ │ └── AbstractAssetBaseService.java │ │ │ │ │ ├── dashboard │ │ │ │ │ │ ├── model │ │ │ │ │ │ │ └── Dashboard.java │ │ │ │ │ │ └── service │ │ │ │ │ │ │ └── DashboardServiceImpl.java │ │ │ │ │ └── importpoc │ │ │ │ │ │ ├── exception │ │ │ │ │ │ ├── ImportException.java │ │ │ │ │ │ ├── ImportJobNotFoundException.java │ │ │ │ │ │ ├── PolicyBadRequestException.java │ │ │ │ │ │ ├── PolicyNotFoundException.java │ │ │ │ │ │ └── PublishAssetException.java │ │ │ │ │ │ ├── model │ │ │ │ │ │ ├── AssetMetaInfoRequest.java │ │ │ │ │ │ ├── ImportJob.java │ │ │ │ │ │ ├── ImportJobStatus.java │ │ │ │ │ │ └── ImportRequest.java │ │ │ │ │ │ ├── repository │ │ │ │ │ │ ├── ImportJobRepository.java │ │ │ │ │ │ └── SubmodelPayloadRepository.java │ │ │ │ │ │ └── service │ │ │ │ │ │ ├── DtrService.java │ │ │ │ │ │ ├── EdcAssetCreationService.java │ │ │ │ │ │ ├── ImportServiceImpl.java │ │ │ │ │ │ ├── PublishServiceAsyncImpl.java │ │ │ │ │ │ └── PublishServiceImpl.java │ │ │ │ └── infrastructure │ │ │ │ │ ├── asbuilt │ │ │ │ │ ├── model │ │ │ │ │ │ ├── AssetAsBuiltEntity.java │ │ │ │ │ │ ├── AssetAsBuiltViewEntity.java │ │ │ │ │ │ ├── ManufacturingInfo.java │ │ │ │ │ │ └── TractionBatteryCode.java │ │ │ │ │ └── repository │ │ │ │ │ │ ├── AssetAsBuiltRepositoryImpl.java │ │ │ │ │ │ ├── AssetAsBuiltViewRepositoryImpl.java │ │ │ │ │ │ ├── AssetAsBuiltViewSpecification.java │ │ │ │ │ │ ├── JpaAssetAsBuiltRepository.java │ │ │ │ │ │ └── JpaAssetAsBuiltViewRepository.java │ │ │ │ │ ├── asplanned │ │ │ │ │ ├── model │ │ │ │ │ │ ├── AsPlannedInfo.java │ │ │ │ │ │ └── AssetAsPlannedEntity.java │ │ │ │ │ └── repository │ │ │ │ │ │ ├── AssetAsPlannedRepositoryImpl.java │ │ │ │ │ │ ├── AssetAsPlannedSpecification.java │ │ │ │ │ │ └── JpaAssetAsPlannedRepository.java │ │ │ │ │ ├── base │ │ │ │ │ ├── irs │ │ │ │ │ │ ├── IrsCallbackController.java │ │ │ │ │ │ ├── JobClient.java │ │ │ │ │ │ ├── OrderClient.java │ │ │ │ │ │ ├── OrderRepositoryImpl.java │ │ │ │ │ │ ├── exception │ │ │ │ │ │ │ └── IrsException.java │ │ │ │ │ │ ├── mapper │ │ │ │ │ │ │ └── TombstoneMapper.java │ │ │ │ │ │ └── model │ │ │ │ │ │ │ ├── exception │ │ │ │ │ │ │ └── InputIdIsNullException.java │ │ │ │ │ │ │ ├── request │ │ │ │ │ │ │ ├── BatchStrategy.java │ │ │ │ │ │ │ ├── BomLifecycle.java │ │ │ │ │ │ │ └── RegisterOrderRequest.java │ │ │ │ │ │ │ └── response │ │ │ │ │ │ │ ├── Direction.java │ │ │ │ │ │ │ ├── IRSResponse.java │ │ │ │ │ │ │ ├── IrsBatchResponse.java │ │ │ │ │ │ │ ├── IrsSubmodel.java │ │ │ │ │ │ │ ├── JobStatus.java │ │ │ │ │ │ │ ├── Parameter.java │ │ │ │ │ │ │ ├── RegisterOrderResponse.java │ │ │ │ │ │ │ ├── Shell.java │ │ │ │ │ │ │ ├── factory │ │ │ │ │ │ │ ├── AssetBaseMapperProvider.java │ │ │ │ │ │ │ ├── ImportAssetMapper.java │ │ │ │ │ │ │ └── IrsResponseAssetMapper.java │ │ │ │ │ │ │ ├── mapping │ │ │ │ │ │ │ ├── AssetBaseMappers.java │ │ │ │ │ │ │ ├── asbuilt │ │ │ │ │ │ │ │ └── AsBuiltDetailMapper.java │ │ │ │ │ │ │ ├── asplanned │ │ │ │ │ │ │ │ └── AsPlannedDetailMapper.java │ │ │ │ │ │ │ ├── relationship │ │ │ │ │ │ │ │ ├── RelationshipMapper.java │ │ │ │ │ │ │ │ ├── SingleLevelBomAsBuiltMapper.java │ │ │ │ │ │ │ │ ├── SingleLevelBomAsPlannedMapper.java │ │ │ │ │ │ │ │ └── SingleLevelUsageAsBuiltMapper.java │ │ │ │ │ │ │ └── submodel │ │ │ │ │ │ │ │ ├── BatchMapper.java │ │ │ │ │ │ │ │ ├── JustInSequenceMapper.java │ │ │ │ │ │ │ │ ├── MapperHelper.java │ │ │ │ │ │ │ │ ├── PartAsPlannedMapper.java │ │ │ │ │ │ │ │ ├── PartSiteInformationAsPlannedMapper.java │ │ │ │ │ │ │ │ ├── SerialPartMapper.java │ │ │ │ │ │ │ │ ├── SubmodelMapper.java │ │ │ │ │ │ │ │ ├── TractionBatteryCodeMapper.java │ │ │ │ │ │ │ │ └── relationship │ │ │ │ │ │ │ │ ├── SingleLevelBomAsBuiltSubmodelMapper.java │ │ │ │ │ │ │ │ ├── SingleLevelBomAsPlannedSubmodelMapper.java │ │ │ │ │ │ │ │ ├── SingleLevelUsageAsBuiltSubmodelMapper.java │ │ │ │ │ │ │ │ └── SubmodelRelationshipMapper.java │ │ │ │ │ │ │ ├── relationship │ │ │ │ │ │ │ └── Aspect.java │ │ │ │ │ │ │ └── semanticdatamodel │ │ │ │ │ │ │ ├── LocalId.java │ │ │ │ │ │ │ ├── LocalIdKey.java │ │ │ │ │ │ │ ├── ManufacturingInformation.java │ │ │ │ │ │ │ ├── MeasurementUnit.java │ │ │ │ │ │ │ ├── PartTypeInformation.java │ │ │ │ │ │ │ ├── SemanticDataModel.java │ │ │ │ │ │ │ ├── Site.java │ │ │ │ │ │ │ └── ValidityPeriod.java │ │ │ │ │ └── model │ │ │ │ │ │ ├── AssetBaseEntity.java │ │ │ │ │ │ ├── IrsPolicy.java │ │ │ │ │ │ ├── JobState.java │ │ │ │ │ │ ├── ProcessingState.java │ │ │ │ │ │ └── SemanticDataModelEntity.java │ │ │ │ │ └── importJob │ │ │ │ │ ├── model │ │ │ │ │ └── ImportJobEntity.java │ │ │ │ │ └── repository │ │ │ │ │ ├── ImportJobRepositoryImpl.java │ │ │ │ │ └── JpaImportJobRepository.java │ │ │ │ ├── bpn │ │ │ │ ├── application │ │ │ │ │ ├── mapper │ │ │ │ │ │ └── BpnMapper.java │ │ │ │ │ └── rest │ │ │ │ │ │ └── BpnMappingController.java │ │ │ │ ├── domain │ │ │ │ │ ├── model │ │ │ │ │ │ ├── BpdmRequest.java │ │ │ │ │ │ ├── BpnEdcMapping.java │ │ │ │ │ │ └── BpnNotFoundException.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── BpnEdcFacade.java │ │ │ │ │ │ ├── BpnService.java │ │ │ │ │ │ └── BpnServiceImpl.java │ │ │ │ └── infrastructure │ │ │ │ │ ├── client │ │ │ │ │ └── BpdmEdcClient.java │ │ │ │ │ ├── model │ │ │ │ │ ├── BpnEntity.java │ │ │ │ │ ├── BusinessPartnerResponse.java │ │ │ │ │ └── NameResponse.java │ │ │ │ │ └── repository │ │ │ │ │ ├── BpnRepository.java │ │ │ │ │ ├── BpnRepositoryImpl.java │ │ │ │ │ └── JpaBpnRepository.java │ │ │ │ ├── common │ │ │ │ ├── config │ │ │ │ │ ├── ApplicationConfig.java │ │ │ │ │ ├── ApplicationProfiles.java │ │ │ │ │ ├── ApplicationStartupConfig.java │ │ │ │ │ ├── AssetsAsyncConfig.java │ │ │ │ │ ├── CronjobStartupConfig.java │ │ │ │ │ ├── EdcConfiguration.java │ │ │ │ │ ├── ErrorHandlingConfig.java │ │ │ │ │ ├── JacksonConfig.java │ │ │ │ │ ├── JsonLdConfigurationTraceX.java │ │ │ │ │ ├── OAuthClientCredentialsRestTemplateInterceptor.java │ │ │ │ │ ├── OpenApiConfig.java │ │ │ │ │ ├── PolicyStartUpConfig.java │ │ │ │ │ ├── RestTemplateConfiguration.java │ │ │ │ │ ├── SchedulerConfig.java │ │ │ │ │ ├── SecurityConfig.java │ │ │ │ │ ├── StringToStringListConverter.java │ │ │ │ │ ├── TimeConfig.java │ │ │ │ │ ├── TrustedEndpointsFilter.java │ │ │ │ │ ├── TrustedPortConfiguration.java │ │ │ │ │ └── WebConfig.java │ │ │ │ ├── date │ │ │ │ │ ├── CustomOffSetDateTimeNullOnException.java │ │ │ │ │ └── DateUtil.java │ │ │ │ ├── domain │ │ │ │ │ ├── EnumFieldUtils.java │ │ │ │ │ └── ParseLocalDateException.java │ │ │ │ ├── mapper │ │ │ │ │ ├── NotificationMapper.java │ │ │ │ │ └── NotificationMessageMapper.java │ │ │ │ ├── model │ │ │ │ │ ├── BPN.java │ │ │ │ │ ├── BaseRequestFieldMapper.java │ │ │ │ │ ├── CustomMultiPartFile.java │ │ │ │ │ ├── PageResult.java │ │ │ │ │ ├── SearchCriteria.java │ │ │ │ │ ├── SearchCriteriaFilter.java │ │ │ │ │ ├── SearchCriteriaOperator.java │ │ │ │ │ ├── SearchCriteriaStrategy.java │ │ │ │ │ ├── SecurityUtils.java │ │ │ │ │ └── UnsupportedSearchCriteriaFieldException.java │ │ │ │ ├── properties │ │ │ │ │ ├── BpdmProperties.java │ │ │ │ │ ├── EdcProperties.java │ │ │ │ │ ├── FeignDefaultProperties.java │ │ │ │ │ ├── FeignProperties.java │ │ │ │ │ ├── RegistryProperties.java │ │ │ │ │ ├── SubmodelProperties.java │ │ │ │ │ └── TraceabilityProperties.java │ │ │ │ ├── repository │ │ │ │ │ ├── BaseSpecification.java │ │ │ │ │ ├── CriteriaUtility.java │ │ │ │ │ ├── EntityNameMapper.java │ │ │ │ │ └── FieldOperatorMap.java │ │ │ │ ├── request │ │ │ │ │ ├── OwnPageable.java │ │ │ │ │ ├── SearchCriteriaMapper.java │ │ │ │ │ ├── SearchCriteriaRequestParam.java │ │ │ │ │ ├── UrlUtils.java │ │ │ │ │ └── exception │ │ │ │ │ │ ├── InvalidFilterException.java │ │ │ │ │ │ └── InvalidSortException.java │ │ │ │ └── security │ │ │ │ │ ├── InjectedJwtAuthentication.java │ │ │ │ │ ├── InjectedJwtAuthenticationHandler.java │ │ │ │ │ ├── JwtAuthentication.java │ │ │ │ │ ├── JwtAuthenticationTokenConverter.java │ │ │ │ │ ├── JwtRole.java │ │ │ │ │ ├── JwtRolesExtractor.java │ │ │ │ │ ├── Sanitizer.java │ │ │ │ │ ├── TechnicalServiceApiKeyAspect.java │ │ │ │ │ ├── TechnicalServiceApiKeyValidator.java │ │ │ │ │ ├── TechnicalUserAuthorizationException.java │ │ │ │ │ ├── apikey │ │ │ │ │ ├── ApiKeyAuthentication.java │ │ │ │ │ ├── ApiKeyAuthenticationFilter.java │ │ │ │ │ ├── ApiKeyEnabled.java │ │ │ │ │ └── ApiKeyFeatureService.java │ │ │ │ │ └── exception │ │ │ │ │ └── InvalidApiKeyException.java │ │ │ │ ├── configuration │ │ │ │ ├── application │ │ │ │ │ ├── mapper │ │ │ │ │ │ ├── OrderConfigurationResponseMapper.java │ │ │ │ │ │ └── TriggerConfigurationResponseMapper.java │ │ │ │ │ ├── rest │ │ │ │ │ │ └── ConfigurationController.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── ConfigurationService.java │ │ │ │ │ │ └── OrderService.java │ │ │ │ ├── domain │ │ │ │ │ ├── model │ │ │ │ │ │ ├── Batch.java │ │ │ │ │ │ ├── Order.java │ │ │ │ │ │ ├── OrderConfiguration.java │ │ │ │ │ │ └── TriggerConfiguration.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── ConfigurationServiceImpl.java │ │ │ │ │ │ └── OrderServiceImpl.java │ │ │ │ └── infrastructure │ │ │ │ │ ├── model │ │ │ │ │ ├── BatchEntity.java │ │ │ │ │ ├── ConfigurationEntity.java │ │ │ │ │ ├── OrderConfigurationEntity.java │ │ │ │ │ ├── OrderEntity.java │ │ │ │ │ └── TriggerConfigurationEntity.java │ │ │ │ │ ├── repository │ │ │ │ │ ├── OrderConfigurationJPARepository.java │ │ │ │ │ ├── OrderConfigurationRepository.java │ │ │ │ │ ├── OrderJPARepository.java │ │ │ │ │ ├── TriggerConfigurationJPARepository.java │ │ │ │ │ └── TriggerConfigurationRepository.java │ │ │ │ │ └── service │ │ │ │ │ ├── OrderConfigurationRepositoryImpl.java │ │ │ │ │ └── TriggerConfigurationRepositoryImpl.java │ │ │ │ ├── contracts │ │ │ │ ├── application │ │ │ │ │ ├── mapper │ │ │ │ │ │ ├── ContractFieldMapper.java │ │ │ │ │ │ └── ContractResponseMapper.java │ │ │ │ │ ├── rest │ │ │ │ │ │ └── ContractsController.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── ContractService.java │ │ │ │ │ │ └── ContractServiceReadOnly.java │ │ │ │ ├── domain │ │ │ │ │ ├── exception │ │ │ │ │ │ └── ContractException.java │ │ │ │ │ ├── model │ │ │ │ │ │ ├── Contract.java │ │ │ │ │ │ ├── ContractAgreement.java │ │ │ │ │ │ └── ContractType.java │ │ │ │ │ ├── repository │ │ │ │ │ │ ├── ContractRepository.java │ │ │ │ │ │ └── ContractRepositoryReadOnly.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── ContractNotificationServiceImpl.java │ │ │ │ │ │ └── ContractViewServiceImpl.java │ │ │ │ └── infrastructure │ │ │ │ │ ├── model │ │ │ │ │ ├── ContractAgreementAsBuiltEntity.java │ │ │ │ │ ├── ContractAgreementAsPlannedEntity.java │ │ │ │ │ ├── ContractAgreementBaseEntity.java │ │ │ │ │ ├── ContractAgreementNotificationEntity.java │ │ │ │ │ └── ContractAgreementViewEntity.java │ │ │ │ │ └── repository │ │ │ │ │ ├── ContractAgreementViewSpecification.java │ │ │ │ │ ├── ContractNotificationRepositoryImpl.java │ │ │ │ │ ├── ContractRepositoryImplBase.java │ │ │ │ │ ├── ContractViewRepositoryImpl.java │ │ │ │ │ ├── JpaContractAgreementAsBuiltRepository.java │ │ │ │ │ ├── JpaContractAgreementAsPlannedRepository.java │ │ │ │ │ ├── JpaContractAgreementNotificationRepository.java │ │ │ │ │ └── JpaContractAgreementViewRepository.java │ │ │ │ ├── cron │ │ │ │ ├── application │ │ │ │ │ ├── CronJobRegistration.java │ │ │ │ │ └── CronJobRegistrationService.java │ │ │ │ └── domain │ │ │ │ │ ├── AASCleanupJobRegistration.java │ │ │ │ │ ├── AASLookupJobRegistration.java │ │ │ │ │ ├── Config.java │ │ │ │ │ ├── CronJobRegistrationException.java │ │ │ │ │ ├── CronJobRegistrationServiceImpl.java │ │ │ │ │ ├── MapCompletedOrdersJobRegistration.java │ │ │ │ │ ├── PublishAssetJobRegistration.java │ │ │ │ │ └── RegisterOrderJobRegistration.java │ │ │ │ ├── digitaltwinpart │ │ │ │ ├── application │ │ │ │ │ ├── mapper │ │ │ │ │ │ ├── DigitalTwinPartDetailResponseMapper.java │ │ │ │ │ │ ├── DigitalTwinPartFieldMapper.java │ │ │ │ │ │ └── DigitalTwinPartResponseMapper.java │ │ │ │ │ ├── rest │ │ │ │ │ │ └── DigitalTwinPartController.java │ │ │ │ │ └── service │ │ │ │ │ │ └── DigitalTwinPartService.java │ │ │ │ ├── domain │ │ │ │ │ ├── DigitalTwinPartNotFoundException.java │ │ │ │ │ ├── model │ │ │ │ │ │ ├── DigitalTwinPart.java │ │ │ │ │ │ └── DigitalTwinPartDetail.java │ │ │ │ │ ├── repository │ │ │ │ │ │ └── DigitalTwinPartRepository.java │ │ │ │ │ └── service │ │ │ │ │ │ └── DigitalTwinPartServiceImpl.java │ │ │ │ └── infrastructure │ │ │ │ │ ├── model │ │ │ │ │ └── DigitalTwinPartEntity.java │ │ │ │ │ └── repository │ │ │ │ │ ├── DigitalTwinPartJPARepository.java │ │ │ │ │ ├── DigitalTwinPartRepositoryImpl.java │ │ │ │ │ └── DigitalTwinPartSpecification.java │ │ │ │ ├── discovery │ │ │ │ ├── domain │ │ │ │ │ ├── model │ │ │ │ │ │ └── Discovery.java │ │ │ │ │ ├── repository │ │ │ │ │ │ └── DiscoveryRepository.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── DiscoveryService.java │ │ │ │ │ │ └── DiscoveryServiceImpl.java │ │ │ │ └── infrastructure │ │ │ │ │ ├── exception │ │ │ │ │ └── DiscoveryFinderException.java │ │ │ │ │ ├── model │ │ │ │ │ └── ConnectorDiscoveryMappingResponse.java │ │ │ │ │ └── repository │ │ │ │ │ └── FeignDiscoveryRepositoryImpl.java │ │ │ │ ├── notification │ │ │ │ ├── application │ │ │ │ │ ├── contract │ │ │ │ │ │ ├── EdcNotificationContractController.java │ │ │ │ │ │ └── model │ │ │ │ │ │ │ ├── CreateNotificationContractException.java │ │ │ │ │ │ │ ├── CreateNotificationContractRequest.java │ │ │ │ │ │ │ ├── CreateNotificationContractResponse.java │ │ │ │ │ │ │ ├── NotificationMethod.java │ │ │ │ │ │ │ └── NotificationType.java │ │ │ │ │ └── notification │ │ │ │ │ │ ├── mapper │ │ │ │ │ │ ├── NotificationFieldMapper.java │ │ │ │ │ │ ├── NotificationMessageMapper.java │ │ │ │ │ │ └── NotificationResponseMapper.java │ │ │ │ │ │ ├── rest │ │ │ │ │ │ └── NotificationController.java │ │ │ │ │ │ ├── service │ │ │ │ │ │ └── NotificationService.java │ │ │ │ │ │ └── validation │ │ │ │ │ │ ├── UpdateNotificationValidationException.java │ │ │ │ │ │ └── UpdateNotificationValidator.java │ │ │ │ ├── base │ │ │ │ │ └── mapper │ │ │ │ │ │ └── NotificationSideTypeMapper.java │ │ │ │ ├── domain │ │ │ │ │ ├── base │ │ │ │ │ │ ├── exception │ │ │ │ │ │ │ ├── BadRequestException.java │ │ │ │ │ │ │ ├── CatalogItemPolicyMismatchException.java │ │ │ │ │ │ │ ├── ContractNegotiationException.java │ │ │ │ │ │ │ ├── NoCatalogItemException.java │ │ │ │ │ │ │ ├── NoEndpointDataReferenceException.java │ │ │ │ │ │ │ └── SendNotificationException.java │ │ │ │ │ │ ├── model │ │ │ │ │ │ │ ├── Notification.java │ │ │ │ │ │ │ ├── NotificationAffectedPart.java │ │ │ │ │ │ │ ├── NotificationId.java │ │ │ │ │ │ │ ├── NotificationMessage.java │ │ │ │ │ │ │ ├── NotificationSeverity.java │ │ │ │ │ │ │ ├── NotificationSide.java │ │ │ │ │ │ │ ├── NotificationStatus.java │ │ │ │ │ │ │ ├── NotificationType.java │ │ │ │ │ │ │ └── exception │ │ │ │ │ │ │ │ └── NotificationIllegalUpdate.java │ │ │ │ │ │ └── service │ │ │ │ │ │ │ ├── AbstractNotificationReceiverService.java │ │ │ │ │ │ │ ├── AbstractNotificationService.java │ │ │ │ │ │ │ ├── EdcNotificationRequest.java │ │ │ │ │ │ │ ├── EdcNotificationService.java │ │ │ │ │ │ │ ├── EdcNotificationServiceImpl.java │ │ │ │ │ │ │ ├── NotificationPublisherService.java │ │ │ │ │ │ │ ├── NotificationReceiverService.java │ │ │ │ │ │ │ └── NotificationsEDCFacade.java │ │ │ │ │ ├── contract │ │ │ │ │ │ └── EdcNotificationContractService.java │ │ │ │ │ └── notification │ │ │ │ │ │ ├── exception │ │ │ │ │ │ ├── InvestigationIllegalUpdate.java │ │ │ │ │ │ ├── InvestigationNotFoundException.java │ │ │ │ │ │ ├── InvestigationReceiverBpnMismatchException.java │ │ │ │ │ │ ├── InvestigationStatusTransitionNotAllowed.java │ │ │ │ │ │ ├── NotificationIllegalUpdate.java │ │ │ │ │ │ ├── NotificationNotFoundException.java │ │ │ │ │ │ ├── NotificationNotSupportedException.java │ │ │ │ │ │ ├── NotificationSenderAndReceiverBPNEqualException.java │ │ │ │ │ │ └── NotificationStatusTransitionNotAllowed.java │ │ │ │ │ │ ├── model │ │ │ │ │ │ ├── EditNotification.java │ │ │ │ │ │ └── StartNotification.java │ │ │ │ │ │ ├── repository │ │ │ │ │ │ └── NotificationRepository.java │ │ │ │ │ │ └── service │ │ │ │ │ │ ├── NotificationReceiverService.java │ │ │ │ │ │ └── NotificationServiceImpl.java │ │ │ │ └── infrastructure │ │ │ │ │ ├── edc │ │ │ │ │ ├── EDCNotificationValidator.java │ │ │ │ │ ├── EdcController.java │ │ │ │ │ ├── ValidEDCNotification.java │ │ │ │ │ └── model │ │ │ │ │ │ ├── EDCNotification.java │ │ │ │ │ │ ├── EDCNotificationContent.java │ │ │ │ │ │ ├── EDCNotificationFactory.java │ │ │ │ │ │ ├── EDCNotificationHeader.java │ │ │ │ │ │ └── NotificationType.java │ │ │ │ │ └── notification │ │ │ │ │ ├── model │ │ │ │ │ ├── NotificationBaseEntity.java │ │ │ │ │ ├── NotificationEntity.java │ │ │ │ │ ├── NotificationMessageBaseEntity.java │ │ │ │ │ ├── NotificationMessageEntity.java │ │ │ │ │ ├── NotificationSeverityBaseEntity.java │ │ │ │ │ ├── NotificationSideBaseEntity.java │ │ │ │ │ ├── NotificationStatusBaseEntity.java │ │ │ │ │ └── NotificationTypeEntity.java │ │ │ │ │ └── repository │ │ │ │ │ ├── JpaNotificationMessageRepository.java │ │ │ │ │ ├── JpaNotificationRepository.java │ │ │ │ │ ├── NotificationRepositoryImpl.java │ │ │ │ │ └── NotificationSpecification.java │ │ │ │ ├── policies │ │ │ │ ├── application │ │ │ │ │ ├── mapper │ │ │ │ │ │ └── PolicyMapper.java │ │ │ │ │ ├── rest │ │ │ │ │ │ └── PolicyController.java │ │ │ │ │ └── service │ │ │ │ │ │ └── PolicyService.java │ │ │ │ ├── domain │ │ │ │ │ ├── PolicyRepository.java │ │ │ │ │ └── PolicyServiceImpl.java │ │ │ │ └── infrastructure │ │ │ │ │ ├── PolicyClient.java │ │ │ │ │ └── PolicyRepositoryImpl.java │ │ │ │ ├── shelldescriptor │ │ │ │ ├── application │ │ │ │ │ ├── DecentralRegistryService.java │ │ │ │ │ └── RegistryController.java │ │ │ │ └── domain │ │ │ │ │ ├── exception │ │ │ │ │ ├── BpnDoesNotMatchException.java │ │ │ │ │ ├── DigitalTwinTypeNotFoundException.java │ │ │ │ │ └── NotOwnPartException.java │ │ │ │ │ └── service │ │ │ │ │ └── DecentralRegistryServiceImpl.java │ │ │ │ └── submodel │ │ │ │ ├── domain │ │ │ │ ├── model │ │ │ │ │ └── SubmodelCreateRequest.java │ │ │ │ └── repository │ │ │ │ │ └── SubmodelServerRepository.java │ │ │ │ └── infrastructure │ │ │ │ ├── model │ │ │ │ ├── SubmodelPayloadEntity.java │ │ │ │ └── SubmodelRequest.java │ │ │ │ └── repository │ │ │ │ ├── JpaSubmodelPayloadRepository.java │ │ │ │ ├── SubmodelClient.java │ │ │ │ ├── SubmodelClientImpl.java │ │ │ │ ├── SubmodelPayloadRepositoryImpl.java │ │ │ │ ├── SubmodelServerClientImpl.java │ │ │ │ ├── SubmodelUtil.java │ │ │ │ └── custom │ │ │ │ ├── SubmodelClientCustomImpl.java │ │ │ │ └── SubmodelServerClientCustomImpl.java │ │ └── resources │ │ │ ├── application-dev.yml │ │ │ ├── application-int.yml │ │ │ ├── application-integration-spring-boot.yml │ │ │ ├── application-localenv.yml │ │ │ ├── application-stable.yml │ │ │ ├── application-testdata-trial.yml │ │ │ ├── application-testdata-truncate.yml │ │ │ ├── application.yml │ │ │ ├── banner.txt │ │ │ ├── data │ │ │ ├── irs_assets_as_planned_v4.json │ │ │ ├── irs_assets_tractionbatterycode.json │ │ │ └── irs_assets_v4.json │ │ │ ├── db │ │ │ ├── migration │ │ │ │ ├── R__cleanup_notifications.sql │ │ │ │ ├── R__create_asset_as_built_testdata_bmw.sql │ │ │ │ ├── R__create_asset_as_built_testdata_txa.sql │ │ │ │ ├── R__create_asset_as_built_view.sql │ │ │ │ ├── R__create_contract_agreement_view.sql │ │ │ │ ├── R__create_digital_twin_part_view.sql │ │ │ │ ├── V10__remove_active_notifications.sql │ │ │ │ ├── V11__add_policy_column_to_assets.sql │ │ │ │ ├── V12__add_import_report.sql │ │ │ │ ├── V13__remove_investigation_alert_asset-as-planned.sql │ │ │ │ ├── V14__add_tombstone_to_assets.sql │ │ │ │ ├── V15__add_contract_agreement_id_and_created_timestamp_to_asset.sql │ │ │ │ ├── V16__move_errormessage_to_notifications.sql │ │ │ │ ├── V17__set_30_chars_for_import_state.sql │ │ │ │ ├── V18__remove_fields_from_notificationmessage.sql │ │ │ │ ├── V19__remove_shedlock_table.sql │ │ │ │ ├── V1__base_sql_configuration.sql │ │ │ │ ├── V20__merge_alert_and_notification_tables.sql │ │ │ │ ├── V21__remove_notification_connection_from_as_planned.sql │ │ │ │ ├── V22__add_asset_as_built_fk_to_tractionbatterycode.sql │ │ │ │ ├── V23__change_notification_model.sql │ │ │ │ ├── V24__change_notification_model.sql │ │ │ │ ├── V25__create_contract_agreements.sql │ │ │ │ ├── V26__create_contract_agreements_notification.sql │ │ │ │ ├── V27__add_contract_agreements_to_ref_tables.sql │ │ │ │ ├── V28__add_digital_twin_type_to_asset_base.sql │ │ │ │ ├── V29__add_digital_twin_type_to_existing_assets.sql │ │ │ │ ├── V2__changing_all_date_fields.sql │ │ │ │ ├── V30__cascading_delete_importJob_assetAsBuilt.sql │ │ │ │ ├── V31__cascading_delete_asset_references.sql │ │ │ │ ├── V32__clean_up_and_refactor_contractAgreementIds.sql │ │ │ │ ├── V33__drop_submodel_table.sql │ │ │ │ ├── V34__create_aas_entity_table.sql │ │ │ │ ├── V35__add_order_table.sql │ │ │ │ ├── V36__add_order_configuration.sql │ │ │ │ ├── V37__add_trigger_configuration.sql │ │ │ │ ├── V38__change_order_id_type.sql │ │ │ │ ├── V39__move_fkeys_between_orders_and_orders_configuration.sql │ │ │ │ ├── V3__change_notification_severity_to_varchar.sql │ │ │ │ ├── V40__change_default_order_configuration.sql │ │ │ │ ├── V41__extend_trigger_configuration.sql │ │ │ │ ├── V42__insert_new_fields_trigger_configuration.sql │ │ │ │ ├── V43__create_new_fields_trigger_configuration_publish_cron.sql │ │ │ │ ├── V44__add_order_id_to_assets.sql │ │ │ │ ├── V45__change_default_cron_expressions.sql │ │ │ │ ├── V46__change_default_latest_cron_expressions.sql │ │ │ │ ├── V47__create_batches_entity.sql │ │ │ │ ├── V48__remove_fks_constraints_from_aas_table.sql │ │ │ │ ├── V49__add_fetch_limit_to_trigger_config.sql │ │ │ │ ├── V4__add_manufacturer_id_to_assets_as_planned.sql │ │ │ │ ├── V5__add_assetState_to_assets.sql │ │ │ │ ├── V6__create_submodelPayload_table.sql │ │ │ │ ├── V7__add_view_for_as_built_assets.sql │ │ │ │ ├── V8__change_submodelPayload.sql │ │ │ │ └── V9__remove_shell_descriptors.sql │ │ │ ├── testdata-trial │ │ │ │ ├── afterMigrate__001_truncate.sql │ │ │ │ ├── afterMigrate__010_asset_as_built.sql │ │ │ │ ├── afterMigrate__011_asset_as_built_childs.sql │ │ │ │ ├── afterMigrate__012_asset_as_built_parents.sql │ │ │ │ ├── afterMigrate__020_asset_as_planned.sql │ │ │ │ ├── afterMigrate__021_asset_as_planned_childs.sql │ │ │ │ ├── afterMigrate__030_received_alert_on_as_built_received.sql │ │ │ │ ├── afterMigrate__031_received_alert_on_as_built_acknowledged.sql │ │ │ │ ├── afterMigrate__032_received_alert_on_as_built_accepted.sql │ │ │ │ ├── afterMigrate__033_received_alert_on_as_built_declined.sql │ │ │ │ ├── afterMigrate__034_received_alert_on_as_built_closed.sql │ │ │ │ ├── afterMigrate__040_sent_alert_on_as_built_created.sql │ │ │ │ ├── afterMigrate__041_sent_alert_on_as_built_sent.sql │ │ │ │ ├── afterMigrate__042_sent_alert_on_as_built_acknowledged.sql │ │ │ │ ├── afterMigrate__043_sent_alert_on_as_built_accepted.sql │ │ │ │ ├── afterMigrate__044_sent_alert_on_as_built_declined.sql │ │ │ │ ├── afterMigrate__045_sent_alert_on_as_built_canceled.sql │ │ │ │ ├── afterMigrate__046_sent_alert_on_as_built_closed.sql │ │ │ │ ├── afterMigrate__050_received_investigation_on_as_built_received.sql │ │ │ │ ├── afterMigrate__051_received_investigation_on_as_built_acknowledged.sql │ │ │ │ ├── afterMigrate__052_received_investigation_on_as_built_accepted.sql │ │ │ │ ├── afterMigrate__053_received_investigation_on_as_built_declined.sql │ │ │ │ ├── afterMigrate__054_received_investigation_on_as_built_closed.sql │ │ │ │ ├── afterMigrate__060_sent_investigation_on_as_built_created.sql │ │ │ │ ├── afterMigrate__061_sent_investigation_on_as_built_sent.sql │ │ │ │ ├── afterMigrate__062_sent_investigation_on_as_built_acknowledged.sql │ │ │ │ ├── afterMigrate__063_sent_investigation_on_as_built_accepted.sql │ │ │ │ ├── afterMigrate__064_sent_investigation_on_as_built_declined.sql │ │ │ │ ├── afterMigrate__065_sent_investigation_on_as_built_canceled.sql │ │ │ │ └── afterMigrate__066_sent_investigation_on_as_built_closed.sql │ │ │ └── testdata-truncate │ │ │ │ └── afterMigrate__001_truncate.sql │ │ │ ├── schema │ │ │ ├── semantichub │ │ │ │ ├── Batch_3.0.0-schema.json │ │ │ │ ├── JustInSequencePart_3.0.0-schema.json │ │ │ │ ├── PartAsPlanned_2.0.0-schema.json │ │ │ │ ├── PartSiteInformationAsPlanned_1.0.0-schema.json │ │ │ │ ├── SerialPart_3.0.0-schema.json │ │ │ │ ├── SingleLevelBomAsBuilt_3.0.0-schema.json │ │ │ │ ├── SingleLevelBomAsPlanned_3.0.0-schema.json │ │ │ │ ├── SingleLevelUsageAsBuilt_3.0.0-schema.json │ │ │ │ └── TractionBatteryCode_2.0.0-schema.json │ │ │ └── tracex │ │ │ │ └── schema_V1.json │ │ │ └── swagger.yml │ └── test │ │ ├── java │ │ └── org │ │ │ └── eclipse │ │ │ └── tractusx │ │ │ └── traceability │ │ │ ├── CleanArchitectureTest.java │ │ │ ├── JsonSchemaTest.java │ │ │ ├── aas │ │ │ ├── domain │ │ │ │ ├── model │ │ │ │ │ ├── AASTest.java │ │ │ │ │ └── DTRTest.java │ │ │ │ └── service │ │ │ │ │ └── AASServiceImplTest.java │ │ │ └── infrastructure │ │ │ │ ├── model │ │ │ │ └── AASEntityTest.java │ │ │ │ └── repository │ │ │ │ └── AASRepositoryImplTest.java │ │ │ ├── assets │ │ │ ├── application │ │ │ │ └── rest │ │ │ │ │ ├── AssetAsBuiltControllerTest.java │ │ │ │ │ ├── AssetAsPlannedControllerTest.java │ │ │ │ │ ├── DashboardControllerTest.java │ │ │ │ │ ├── RegistryControllerTest.java │ │ │ │ │ └── response │ │ │ │ │ └── DescriptionsResponseTest.java │ │ │ ├── domain │ │ │ │ ├── base │ │ │ │ │ └── service │ │ │ │ │ │ └── AbstractAssetBaseServiceTest.java │ │ │ │ ├── importpoc │ │ │ │ │ ├── ImportRequestTest.java │ │ │ │ │ ├── repository │ │ │ │ │ │ └── SubmodelPayloadRepositoryIT.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── DtrServiceTest.java │ │ │ │ │ │ ├── ImportServiceImplTest.java │ │ │ │ │ │ └── PublishServiceImplTest.java │ │ │ │ └── service │ │ │ │ │ ├── AssetAsBuiltServiceImplTest.java │ │ │ │ │ └── AssetAsPlannedServiceImplTest.java │ │ │ └── infrastructure │ │ │ │ ├── base │ │ │ │ └── irs │ │ │ │ │ ├── OrderRepositoryImplTest.java │ │ │ │ │ ├── mapper │ │ │ │ │ └── TombstoneMapperTest.java │ │ │ │ │ └── model │ │ │ │ │ └── response │ │ │ │ │ └── semanticdatamodel │ │ │ │ │ └── SemanticDataModelTest.java │ │ │ │ └── repository │ │ │ │ └── jpa │ │ │ │ └── PersistentAssetsAsBuiltRepositoryTest.java │ │ │ ├── bpn │ │ │ └── domain │ │ │ │ └── service │ │ │ │ └── BpnEdcFacadeTest.java │ │ │ ├── common │ │ │ ├── config │ │ │ │ └── ErrorHandlingConfigTest.java │ │ │ ├── date │ │ │ │ ├── CustomOffSetDateTimeNullOnExceptionTest.java │ │ │ │ └── DateUtilTest.java │ │ │ ├── mapper │ │ │ │ ├── NotificationMapperTest.java │ │ │ │ └── NotificationMessageMapperTest.java │ │ │ ├── properties │ │ │ │ ├── RegistryPropertiesTest.java │ │ │ │ ├── SubmodelPropertiesTest.java │ │ │ │ └── TraceabilityPropertiesTest.java │ │ │ ├── request │ │ │ │ ├── AssetRequestTest.java │ │ │ │ └── UrlUtilsTest.java │ │ │ └── security │ │ │ │ ├── JwtRolesExtractorTest.java │ │ │ │ └── apikey │ │ │ │ └── ApiKeyFeatureServiceTest.java │ │ │ ├── configuration │ │ │ └── service │ │ │ │ └── ConfigurationServiceImplTest.java │ │ │ ├── cron │ │ │ └── domain │ │ │ │ ├── AASCleanupJobRegistrationTest.java │ │ │ │ ├── AASLookupJobRegistrationTest.java │ │ │ │ ├── CronJobRegistrationServiceImplTest.java │ │ │ │ ├── PublishAssetJobRegistrationTest.java │ │ │ │ └── RegisterOrderJobRegistrarTest.java │ │ │ ├── digitaltwinpart │ │ │ ├── application │ │ │ │ └── mapper │ │ │ │ │ └── DigitalTwinPartDetailResponseMapperTest.java │ │ │ └── domain │ │ │ │ └── service │ │ │ │ └── DigitalTwinPartServiceImplTest.java │ │ │ ├── discovery │ │ │ ├── domain │ │ │ │ ├── model │ │ │ │ │ └── DiscoveryTest.java │ │ │ │ └── service │ │ │ │ │ └── DiscoveryServiceImplTest.java │ │ │ └── infrastructure │ │ │ │ └── repository │ │ │ │ └── FeignDiscoveryRepositoryImplTest.java │ │ │ ├── infrastructure │ │ │ ├── edc │ │ │ │ ├── blackbox │ │ │ │ │ ├── BadRequestExceptionTest.java │ │ │ │ │ ├── ContractNegotiationExceptionTest.java │ │ │ │ │ ├── NotificationsEDCFacadeTest.java │ │ │ │ │ └── validators │ │ │ │ │ │ └── EDCNotificationValidatorTest.java │ │ │ │ ├── model │ │ │ │ │ └── EdcNotificationModelTest.java │ │ │ │ └── notificationcontract │ │ │ │ │ ├── configuration │ │ │ │ │ └── OAuthClientCredentialsRestTemplateInterceptorTest.java │ │ │ │ │ └── service │ │ │ │ │ └── EdcNotificationContractServiceTest.java │ │ │ └── jpa │ │ │ │ └── bpn_edc │ │ │ │ ├── BpnRepositoryImplTest.java │ │ │ │ └── BpnServiceImplTest.java │ │ │ ├── integration │ │ │ ├── IntegrationTestSpecification.java │ │ │ ├── aas │ │ │ │ ├── AASCleanupIT.java │ │ │ │ └── AASLookupIT.java │ │ │ ├── actuator │ │ │ │ └── ActuatorIT.java │ │ │ ├── assets │ │ │ │ ├── AssetAsBuiltControllerAllIT.java │ │ │ │ ├── AssetAsBuiltControllerAuthorizationIT.java │ │ │ │ ├── AssetAsBuiltControllerByIdIT.java │ │ │ │ ├── AssetAsBuiltControllerCountriesIT.java │ │ │ │ ├── AssetAsBuiltControllerDeleteByIdIT.java │ │ │ │ ├── AssetAsBuiltControllerDetailInformationIT.java │ │ │ │ ├── AssetAsBuiltControllerFilterValuesIT.java │ │ │ │ ├── AssetAsBuiltControllerFilteringIT.java │ │ │ │ ├── AssetAsBuiltControllerSearchValuesIT.java │ │ │ │ ├── AssetAsBuiltControllerSortByAlertsAndInvestigationsCountIT.java │ │ │ │ ├── AssetAsBuiltControllerSyncIT.java │ │ │ │ ├── AssetAsPlannedControllerAllIT.java │ │ │ │ ├── AssetAsPlannedControllerAuthorizationIT.java │ │ │ │ ├── AssetAsPlannedControllerByIdIT.java │ │ │ │ ├── AssetAsPlannedControllerDeleteByIdIT.java │ │ │ │ ├── AssetAsPlannedControllerDetailInformationIT.java │ │ │ │ ├── AssetAsPlannedControllerFilterValuesIT.java │ │ │ │ ├── AssetAsPlannedControllerFilteringIT.java │ │ │ │ ├── AssetAsPlannedControllerSearchValuesIT.java │ │ │ │ ├── AssetAsPlannedControllerSortAndFilterValuesIT.java │ │ │ │ ├── AssetAsPlannedControllerSortValuesIT.java │ │ │ │ ├── AssetAsPlannedControllerSyncIT.java │ │ │ │ ├── DashboardControllerAuthorizationIT.java │ │ │ │ ├── DashboardControllerIT.java │ │ │ │ ├── asbuilt │ │ │ │ │ └── infrastructure │ │ │ │ │ │ └── repository │ │ │ │ │ │ └── AssetAsBuiltRepositoryIT.java │ │ │ │ ├── asplanned │ │ │ │ │ └── infrastructure │ │ │ │ │ │ └── repository │ │ │ │ │ │ └── AssetAsPlannedRepositoryIT.java │ │ │ │ └── infrastructure │ │ │ │ │ └── base │ │ │ │ │ └── IrsCallbackControllerIT.java │ │ │ ├── bpn │ │ │ │ └── mapping │ │ │ │ │ ├── BpnMappingControllerAuthorizationIT.java │ │ │ │ │ └── BpnMappingControllerIT.java │ │ │ ├── common │ │ │ │ ├── config │ │ │ │ │ ├── PostgreSQLConfig.java │ │ │ │ │ ├── RestAssuredConfig.java │ │ │ │ │ └── RestitoConfig.java │ │ │ │ └── support │ │ │ │ │ ├── AASDatabaseSupport.java │ │ │ │ │ ├── AlertNotificationsSupport.java │ │ │ │ │ ├── AlertsSupport.java │ │ │ │ │ ├── AssetRepositoryProvider.java │ │ │ │ │ ├── AssetTestData.java │ │ │ │ │ ├── AssetsApiSupport.java │ │ │ │ │ ├── AssetsSupport.java │ │ │ │ │ ├── BpnEdcMappingSupport.java │ │ │ │ │ ├── BpnSupport.java │ │ │ │ │ ├── ConfigurationSupport.java │ │ │ │ │ ├── ContractsSupport.java │ │ │ │ │ ├── DatabaseSupport.java │ │ │ │ │ ├── DiscoveryFinderSupport.java │ │ │ │ │ ├── DtrApiSupport.java │ │ │ │ │ ├── EdcSupport.java │ │ │ │ │ ├── ForbiddenMatcher.java │ │ │ │ │ ├── ISO8601DateTimeMatcher.java │ │ │ │ │ ├── InvestigationNotificationsSupport.java │ │ │ │ │ ├── InvestigationsRepositoryProvider.java │ │ │ │ │ ├── InvestigationsSupport.java │ │ │ │ │ ├── IrsApiSupport.java │ │ │ │ │ ├── JsonWebSignatureBuilder.java │ │ │ │ │ ├── NotificationApiSupport.java │ │ │ │ │ ├── NotificationMessageSupport.java │ │ │ │ │ ├── NotificationSupport.java │ │ │ │ │ ├── OAuth2ApiSupport.java │ │ │ │ │ ├── OAuth2Support.java │ │ │ │ │ ├── RestitoProvider.java │ │ │ │ │ ├── RoleSupport.java │ │ │ │ │ ├── RsaJsonWebKeyProvider.java │ │ │ │ │ ├── SubmodelSupport.java │ │ │ │ │ └── repository │ │ │ │ │ ├── AssetAsBuiltSupportRepository.java │ │ │ │ │ └── BpnSupportRepository.java │ │ │ ├── configuration │ │ │ │ └── ConfigurationControllerIT.java │ │ │ ├── contracts │ │ │ │ └── ContractsControllerIT.java │ │ │ ├── digitaltwinpart │ │ │ │ └── DigitalTwinPartsControllerIT.java │ │ │ ├── edc │ │ │ │ ├── blackbox │ │ │ │ │ ├── EdcControllerAuthorizationIT.java │ │ │ │ │ ├── EdcControllerIT.java │ │ │ │ │ └── EdcNotificationModelIT.java │ │ │ │ └── notificationcontract │ │ │ │ │ ├── EdcNotificationContractControllerAuthorizationIT.java │ │ │ │ │ └── EdcNotificationContractsControllerIT.java │ │ │ ├── importdata │ │ │ │ └── ImportControllerIT.java │ │ │ ├── notification │ │ │ │ ├── EditNotificationIT.java │ │ │ │ ├── alert │ │ │ │ │ ├── AlertControllerAuthorizationIT.java │ │ │ │ │ ├── AlertControllerFilterIT.java │ │ │ │ │ ├── AlertControllerSearchValuesIT.java │ │ │ │ │ ├── AlertsRepositoryIT.java │ │ │ │ │ ├── PublisherAlertsControllerIT.java │ │ │ │ │ ├── ReadAlertsAndTestAllPagesIT.java │ │ │ │ │ ├── ReadAlertsControllerIT.java │ │ │ │ │ ├── ReadCreatedAlertsInSortedOrderControllerIT.java │ │ │ │ │ ├── ReadCreatedAlertsSortedWithSearchCriteriaIT.java │ │ │ │ │ ├── ReadCreatedAlertsWithSearchCriteriaControllerIT.java │ │ │ │ │ ├── ReadReceivedAlertsInSortedOrderControllerIT.java │ │ │ │ │ ├── ReadReceivedAlertsSortedWithSearchCriteriaIT.java │ │ │ │ │ ├── ReadReceivedAlertsWithSearchCriteriaControllerIT.java │ │ │ │ │ └── ReceiverAlertsControllerIT.java │ │ │ │ └── investigation │ │ │ │ │ ├── InvestigationControllerFilterIT.java │ │ │ │ │ ├── InvestigationControllerSearchValuesIT.java │ │ │ │ │ ├── InvestigationPolicyExpirationIT.java │ │ │ │ │ ├── InvestigationPolicyNotSupportedIT.java │ │ │ │ │ ├── InvestigationsControllerAuthorizationIT.java │ │ │ │ │ ├── PublisherInvestigationsControllerIT.java │ │ │ │ │ ├── ReadCreatedInvestigationsInSortedOrderControllerIT.java │ │ │ │ │ ├── ReadCreatedInvestigationsSortedWithSearchCriteriaIT.java │ │ │ │ │ ├── ReadCreatedInvestigationsWithSearchCriteriaControllerIT.java │ │ │ │ │ ├── ReadInvestigationsAndTestAllPagesIT.java │ │ │ │ │ ├── ReadInvestigationsControllerIT.java │ │ │ │ │ ├── ReadReceivedInvestigationsInSortedOrderControllerIT.java │ │ │ │ │ ├── ReadReceivedInvestigationsSortedWithSearchCriteriaIT.java │ │ │ │ │ ├── ReadReceivedInvestigationsWithSearchCriteriaControllerIT.java │ │ │ │ │ └── ReceiverInvestigationsControllerIT.java │ │ │ ├── openapi │ │ │ │ └── OpenApiDocumentationIT.java │ │ │ ├── orders │ │ │ │ └── OrderControllerIT.java │ │ │ ├── policy │ │ │ │ └── PolicyControllerIT.java │ │ │ └── shelldescriptor │ │ │ │ ├── DecentralRegistryServiceImplIT.java │ │ │ │ └── RegistryControllerAuthorizationIT.java │ │ │ ├── notification │ │ │ ├── application │ │ │ │ ├── alert │ │ │ │ │ ├── response │ │ │ │ │ │ └── AlertResponseTest.java │ │ │ │ │ └── rest │ │ │ │ │ │ └── NotificationControllerTest.java │ │ │ │ ├── request │ │ │ │ │ └── NotificationSeverityRequestTest.java │ │ │ │ └── response │ │ │ │ │ └── NotificationSeverityResponseTest.java │ │ │ ├── domain │ │ │ │ ├── base │ │ │ │ │ └── model │ │ │ │ │ │ └── NotificationMessageTest.java │ │ │ │ ├── investigation │ │ │ │ │ └── service │ │ │ │ │ │ └── InvestigationServiceImplTest.java │ │ │ │ ├── model │ │ │ │ │ ├── NotificationTest.java │ │ │ │ │ └── investigation │ │ │ │ │ │ └── InvestigationTest.java │ │ │ │ └── service │ │ │ │ │ ├── EdcNotificationServiceImplTest.java │ │ │ │ │ ├── InvestigationsReceiverServiceTest.java │ │ │ │ │ └── NotificationPublisherServiceTest.java │ │ │ ├── infrastructure │ │ │ │ └── investigation │ │ │ │ │ └── repository │ │ │ │ │ ├── InvestigationsRepositoryImplTest.java │ │ │ │ │ └── NotificationRepositoryImplTest.java │ │ │ └── investigation │ │ │ │ └── rest │ │ │ │ ├── model │ │ │ │ └── EditNotificationStatusTest.java │ │ │ │ └── validation │ │ │ │ └── EditNotificationValidatorTest.java │ │ │ ├── policies │ │ │ └── domain │ │ │ │ └── PolicyServiceImplTest.java │ │ │ └── testdata │ │ │ ├── AlertTestDataFactory.java │ │ │ ├── AssetTestDataFactory.java │ │ │ ├── CatalogTestDataFactory.java │ │ │ ├── InvestigationTestDataFactory.java │ │ │ ├── NotificationTestDataFactory.java │ │ │ └── PolicyTestDataFactory.java │ │ └── resources │ │ ├── banner.txt │ │ ├── stubs │ │ ├── bpdm │ │ │ └── response_200.json │ │ ├── discovery.post.data │ │ │ ├── discovery_finder_connector_response_200.json │ │ │ ├── discovery_finder_connector_response_200_AXS3.json │ │ │ └── discovery_finder_response_200.json │ │ ├── edc │ │ │ └── post │ │ │ │ └── data │ │ │ │ ├── contractagreements │ │ │ │ ├── all_contractagreements_response_200.json │ │ │ │ ├── catalog_response_200.json │ │ │ │ ├── catalog_response_bpdm_200.json │ │ │ │ ├── catalog_response_registryasset_200.json │ │ │ │ ├── contractagreement_negotiation_response_200.json │ │ │ │ ├── contractnegotiation_response_200.json │ │ │ │ ├── contractnegotiationonlystate_response_200.json │ │ │ │ ├── contractnegotiationstate_response_200.json │ │ │ │ ├── first_page_contractagreements_response_200.json │ │ │ │ ├── lookupshells_response_200.json │ │ │ │ ├── one_contractagreement_response_200.json │ │ │ │ ├── second_page_contractagreements_response_200.json │ │ │ │ ├── transferprocesses_response_200.json │ │ │ │ ├── transferprocessesonlystate_response_200.json │ │ │ │ └── transferprocessesstate_response_200.json │ │ │ │ └── contractdefinitions │ │ │ │ └── contractdefinitions_response_200.json │ │ ├── irs │ │ │ ├── get │ │ │ │ └── jobs │ │ │ │ │ └── id │ │ │ │ │ ├── response_200.json │ │ │ │ │ ├── response_200_downward_asPlanned.json │ │ │ │ │ ├── response_with_aas_identifier_200.json │ │ │ │ │ └── running_job_response_200.json │ │ │ ├── order │ │ │ │ ├── response_200.json │ │ │ │ ├── response_200_asplanned.json │ │ │ │ └── response_200_asplanned_nojobs.json │ │ │ ├── policies │ │ │ │ ├── request_create_policy.json │ │ │ │ ├── response_200_createPolicy.json │ │ │ │ ├── response_200_get_policies.json │ │ │ │ ├── response_200_get_policies_CONSTRAINTS_MISMATCHING.json │ │ │ │ ├── response_200_get_policies_EXPIRED.json │ │ │ │ ├── response_200_get_policies_bpdm.json │ │ │ │ ├── response_200_get_policyById.json │ │ │ │ ├── response_400_createPolicy.json │ │ │ │ ├── response_400_get_policyById.json │ │ │ │ └── response_404_get_policyById.json │ │ │ └── post │ │ │ │ └── jobs │ │ │ │ └── response_200.json │ │ └── oauth │ │ │ └── post │ │ │ └── auth │ │ │ └── realms │ │ │ └── CX-Central │ │ │ └── protocol │ │ │ └── openid-connect │ │ │ └── token │ │ │ ├── response_200.json │ │ │ └── response_401.json │ │ └── testdata │ │ ├── edc_alert_okay.json │ │ ├── edc_alert_okay_update.json │ │ ├── edc_notification_classification_unsupported.json │ │ ├── edc_notification_okay.json │ │ ├── edc_notification_okay_update.json │ │ ├── edc_notification_with_unknown_fields.json │ │ ├── edc_notification_wrong_bpn.json │ │ ├── import-request.json │ │ ├── importfiles │ │ ├── invalidExtensionFile.xml │ │ ├── invalidImportFile-notSupportedAspect.json │ │ ├── invalidImportFile.json │ │ ├── invalidImportFileBadStructure.json │ │ ├── validImportFile-onlyAsBuiltAsset.json │ │ ├── validImportFile-onlyAsPlannedAsset.json │ │ └── validImportFile.json │ │ ├── irs_assets_as_built_1_v4.json │ │ ├── irs_assets_as_built_2_v4.json │ │ ├── irs_assets_as_planned_v4.json │ │ ├── irs_assets_as_planned_v4_long_list.json │ │ ├── irs_assets_as_planned_v4_long_list_distinct_catenaxsiteid.json │ │ ├── irs_assets_tractionbatterycode.json │ │ └── irs_assets_v3_singleUsageAsBuilt.json ├── testdata │ ├── CHANGELOG.md │ ├── CX_Testdata_MessagingTest_v0.0.1.json │ ├── CX_Testdata_MessagingTest_v0.0.10.json │ ├── CX_Testdata_MessagingTest_v0.0.11.json │ ├── CX_Testdata_MessagingTest_v0.0.12.json │ ├── CX_Testdata_MessagingTest_v0.0.13.json │ ├── CX_Testdata_MessagingTest_v0.0.14-ev.json │ ├── CX_Testdata_MessagingTest_v0.0.14.json │ ├── CX_Testdata_MessagingTest_v0.0.2.json │ ├── CX_Testdata_MessagingTest_v0.0.3.json │ ├── CX_Testdata_MessagingTest_v0.0.4.json │ ├── CX_Testdata_MessagingTest_v0.0.5.json │ ├── CX_Testdata_MessagingTest_v0.0.6.json │ ├── CX_Testdata_MessagingTest_v0.0.7.json │ ├── CX_Testdata_MessagingTest_v0.0.8.json │ ├── CX_Testdata_MessagingTest_v0.0.9.json │ ├── database_dumps │ │ ├── README.md │ │ ├── database_dump_a │ │ └── database_dump_b │ ├── import-test-data-0DWF_v0.0.14.json │ ├── import-test-data-0ISY_PREPROD_v1.0.0.json │ ├── import-test-data-0UKM_v0.0.14.json │ ├── import-test-data-2BR4-single-asset_v1.0.1.json │ ├── import-test-data-2BR4_v1.0.0.json │ ├── import-test-data-2BR4_v1.0.1.json │ ├── import-test-data-2CS4-single-asset_v1.0.1.json │ ├── import-test-data-2CS4_v1.0.0.json │ ├── import-test-data-2CS4_v1.0.1.json │ ├── import-test-data-CML1_v0.0.12.json │ ├── import-test-data-CML1_v0.0.13.json │ ├── import-test-data-CML1_v0.0.14.json │ ├── import-test-data-CNKC_v0.0.12.json │ ├── import-test-data-CNKC_v0.0.13.json │ ├── import-test-data-CNKC_v0.0.14.json │ └── import-test-data-EZFA_PREPROD_v1.0.0.json └── trace-x-logo.svg ├── tx-coverage └── pom.xml ├── tx-cucumber-tests ├── README.md ├── pom.xml ├── report.json └── src │ └── test │ ├── java │ └── org │ │ └── eclipse │ │ └── tractusx │ │ └── traceability │ │ ├── RunCucumberTest.java │ │ └── test │ │ ├── TraceabilityTestStepDefinition.java │ │ ├── exception │ │ └── MissingStepDefinitionException.java │ │ ├── tooling │ │ ├── EnvVariablesResolver.java │ │ ├── NotificationTypeEnum.java │ │ ├── TraceXEnvironmentEnum.java │ │ └── rest │ │ │ ├── Authentication.java │ │ │ └── RestProvider.java │ │ └── validator │ │ ├── NotificationValidator.java │ │ └── TestUtils.java │ └── resources │ ├── application.yml │ └── features │ └── 1_CXTM-301,CXTM-300,CXTM-299,CXTM-298(+15).feature ├── tx-gatling-tests ├── pom.xml └── src │ └── test │ ├── java │ └── simulation │ │ ├── DashboardSimulation.java │ │ ├── NotificationSimulation.java │ │ └── SynchonizationSimulation.java │ └── resources │ ├── logback.xml │ └── requests │ ├── post_asset_synchronization.json │ └── post_notifications.json ├── tx-models ├── pom.xml └── src │ ├── main │ └── java │ │ ├── assets │ │ ├── importpoc │ │ │ ├── ErrorResponse.java │ │ │ ├── IRSErrorResponse.java │ │ │ ├── ImportJobStatusResponse.java │ │ │ ├── ImportReportResponse.java │ │ │ ├── ImportResponse.java │ │ │ ├── ImportStateMessage.java │ │ │ ├── ImportStateResponse.java │ │ │ ├── ValidationResponse.java │ │ │ └── request │ │ │ │ └── RegisterAssetRequest.java │ │ ├── request │ │ │ ├── AssetFilter.java │ │ │ ├── AssetRequest.java │ │ │ ├── PartChainIdentificationKey.java │ │ │ └── SearchableAssetsRequest.java │ │ └── response │ │ │ ├── DashboardResponse.java │ │ │ ├── asbuilt │ │ │ ├── AssetAsBuiltResponse.java │ │ │ ├── DetailAspectDataAsBuiltResponse.java │ │ │ └── DetailAspectDataTractionBatteryCodeResponse.java │ │ │ ├── asplanned │ │ │ ├── AssetAsPlannedResponse.java │ │ │ ├── DetailAspectDataAsPlannedResponse.java │ │ │ └── PartSiteInformationAsPlannedResponse.java │ │ │ └── base │ │ │ ├── OwnerType.java │ │ │ ├── request │ │ │ ├── QualityTypeRequest.java │ │ │ └── UpdateAssetRequest.java │ │ │ └── response │ │ │ ├── AssetBaseResponse.java │ │ │ ├── DescriptionsResponse.java │ │ │ ├── DetailAspectDataResponse.java │ │ │ ├── DetailAspectModelResponse.java │ │ │ ├── DetailAspectTypeResponse.java │ │ │ ├── ImportStateResponse.java │ │ │ ├── OwnerResponse.java │ │ │ ├── QualityTypeResponse.java │ │ │ └── SemanticDataModelResponse.java │ │ ├── bpn │ │ ├── request │ │ │ ├── BpnMappingRequest.java │ │ │ ├── BpnValidator.java │ │ │ └── ValidBPN.java │ │ └── response │ │ │ └── BpnEdcMappingResponse.java │ │ ├── common │ │ ├── CustomOffsetDateTimeSerializer.java │ │ ├── FilterAttribute.java │ │ ├── FilterValue.java │ │ └── PageResult.java │ │ ├── configuration │ │ ├── request │ │ │ ├── OrderConfigurationRequest.java │ │ │ └── TriggerConfigurationRequest.java │ │ ├── response │ │ │ ├── OrderConfigurationResponse.java │ │ │ └── TriggerConfigurationResponse.java │ │ └── util │ │ │ ├── BatchSizeValidator.java │ │ │ ├── CronValidator.java │ │ │ ├── ValidBatchSize.java │ │ │ └── ValidCron.java │ │ ├── contract │ │ ├── request │ │ │ ├── ContractFilter.java │ │ │ └── ContractRequest.java │ │ └── response │ │ │ ├── ContractResponse.java │ │ │ └── ContractTypeResponse.java │ │ ├── digitaltwinpart │ │ ├── ActorResponse.java │ │ ├── CustomPageResponse.java │ │ ├── DigitalTwinPartDetailRequest.java │ │ ├── DigitalTwinPartDetailResponse.java │ │ ├── DigitalTwinPartFilter.java │ │ ├── DigitalTwinPartRequest.java │ │ ├── DigitalTwinPartResponse.java │ │ └── SearchableDigitalTwinPartRequest.java │ │ ├── notification │ │ ├── NotificationSideType.java │ │ ├── request │ │ │ ├── CloseNotificationRequest.java │ │ │ ├── EditNotificationRequest.java │ │ │ ├── NotificationFilter.java │ │ │ ├── NotificationRequest.java │ │ │ ├── NotificationSeverityRequest.java │ │ │ ├── NotificationSideParamRequest.java │ │ │ ├── NotificationStatusRequest.java │ │ │ ├── NotificationTypeRequest.java │ │ │ ├── SearchableNotificationsRequest.java │ │ │ ├── StartNotificationRequest.java │ │ │ ├── UpdateNotificationStatusRequest.java │ │ │ └── UpdateNotificationStatusTransitionRequest.java │ │ └── response │ │ │ ├── NotificationIdResponse.java │ │ │ ├── NotificationMessageResponse.java │ │ │ ├── NotificationResponse.java │ │ │ ├── NotificationSeverityResponse.java │ │ │ ├── NotificationSideResponse.java │ │ │ ├── NotificationStatusResponse.java │ │ │ └── NotificationTypeResponse.java │ │ ├── orders │ │ └── request │ │ │ ├── CreateOrderRequest.java │ │ │ └── CreateOrderResponse.java │ │ └── policies │ │ ├── request │ │ ├── Context.java │ │ ├── Payload.java │ │ ├── RegisterPolicyRequest.java │ │ └── UpdatePolicyRequest.java │ │ └── response │ │ ├── ConstraintResponse.java │ │ ├── ConstraintsResponse.java │ │ ├── CreatePolicyResponse.java │ │ ├── IrsPolicyResponse.java │ │ ├── OperatorTypeResponse.java │ │ ├── PermissionResponse.java │ │ ├── PolicyResponse.java │ │ └── PolicyTypeResponse.java │ └── test │ ├── common │ └── CustomOffsetDateTimeSerializerTest.java │ └── java │ ├── assets │ └── request │ │ └── SearchableAssetsRequestTest.java │ └── notification │ └── request │ └── SearchableNotificationsRequestTest.java └── tx-parent-spring-boot └── pom.xml /.github/ISSUE_TEMPLATE/trace-story.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Propose a Story 3 | about: propose a new story, new task 4 | labels: Story 5 | --- 6 | 9 | **As** ... , 10 | **I want** ... , 11 | **so that** ... . 12 | 13 | ## Hints / Details 14 | 17 | - ... 18 | 19 | ## Acceptance Criteria 20 | 23 | - ... 24 | 25 | ## Out of Scope 26 | 29 | - ... 30 | -------------------------------------------------------------------------------- /.github/workflows/.trivyignore: -------------------------------------------------------------------------------- 1 | # ref https://github.com/eclipse-tractusx/traceability-foss-backend/security/code-scanning/1419 2 | CVE-2022-25857 3 | # ref https://github.com/eclipse-tractusx/traceability-foss/security/code-scanning/6879 4 | # this is acceptable due to custom environment variable injection script which is executed upon FE container startup 5 | AVD-KSV-0014 6 | -------------------------------------------------------------------------------- /.tractusx: -------------------------------------------------------------------------------- 1 | product: "Traceability FOSS" 2 | leadingRepository: "https://github.com/eclipse-tractusx/traceability-foss" 3 | repositories: [] 4 | 5 | # section to explicitly skip certain release guideline checks 6 | skipReleaseChecks: 7 | alignedBaseImage: 8 | - "frontend/cypress/Dockerfile" 9 | -------------------------------------------------------------------------------- /DEPENDENCIES_FRONTEND: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/DEPENDENCIES_FRONTEND -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Reporting a Vulnerability 4 | 5 | Please do **not** report security vulnerabilities through public GitHub issues. 6 | 7 | Please report vulnerabilities to this repository via **GitHub security advisories** instead. 8 | 9 | __How?__ Inside affected repository --> security tab 10 | 11 | for contributor: 12 | --> Report a vulnerability 13 | 14 | for committer: 15 | --> advisories --> New draft security advisory 16 | 17 | In severe cases, you can also report a found vulnerability via mail or eclipse issue here: https://www.eclipse.org/security/ 18 | 19 | See [Eclipse Foundation Vulnerability Reporting Policy](https://www.eclipse.org/projects/handbook/#vulnerability). 20 | -------------------------------------------------------------------------------- /charts/traceability-foss/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | # Accept only values.yaml 25 | values?*.yaml 26 | values?*.yml 27 | -------------------------------------------------------------------------------- /dev/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ ! -e "$1" ]; then 4 | echo "Argument for the commit message file is missing or the file \"$1\" does not exist. Did you try to run this manually?" 5 | exit 1 6 | fi 7 | 8 | commitTitle="$(cat "$1" | head -n1)" 9 | 10 | if echo "${commitTitle}" | grep -qE "^Merge branch '.*"; then 11 | echo "Commit hook: ignoring merge commit." 12 | exit 0 13 | fi 14 | 15 | export EXPRESSION='^(chore|fix|feature)(\([A-Za-z0-9\/-]+\))?: [A-Z0-9-]+ .+$' 16 | 17 | if ! echo "${commitTitle}" | grep -qE "${EXPRESSION}"; then 18 | echo "Your commit title \"${commitTitle}\" does not follow the commit rules." 19 | echo "It has to match \"${EXPRESSION}\"." 20 | exit 1 21 | fi 22 | -------------------------------------------------------------------------------- /docs/concept/#000-concept-name-template/_concept.template.md: -------------------------------------------------------------------------------- 1 | # Overview 2 | # Problem Statement 3 | # Specification 4 | # Glossary 5 | # Requirements 6 | # Non functional requirements 7 | # Concept 8 | ## Diagram/UML/ Key Visual/BPMN 9 | ```mermaid 10 | --- 11 | title: Simple sample 12 | --- 13 | %%{init: { 'fontFamily': 'Architects daughter', 'theme': 'dark' , 'curve' : 'linear'} }%% 14 | stateDiagram-v2 15 | [*] --> Still 16 | Still --> [*] 17 | 18 | Still --> Moving 19 | Moving --> Still 20 | Moving --> Crash 21 | Crash --> [*] 22 | 23 | ``` 24 | 25 | # LOP 26 | # Decision 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/concept/#353-sync-configurable/TRX-353-get-parts-based-on-order-details-from-irs.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | title Sync Completed/Partial Orders from IRS 4 | 5 | participant CronJob 6 | participant TraceX 7 | participant IRS 8 | participant TraceXDB 9 | 10 | CronJob -> TraceX: Trigger Sync (Order State == COMPLETED or PARTIAL with time threshold) 11 | TraceX -> TraceXDB: Query Completed/Partial Orders (time threshold = updated_at distance) 12 | loop For each Completed/Partial Order (threshold met) 13 | TraceX -> IRS: Request Order Details (using OrderID) 14 | IRS --> TraceX: Return Order Details (Parts Data) 15 | TraceX -> TraceXDB: Persist Part Details (PartsAsBuilt or PartsAsPlanned) 16 | TraceX -> TraceXDB: Update TTL of each part 17 | note right of TraceXDB: TTL makes it transparent when the part should be next time synced 18 | end 19 | 20 | @enduml 21 | -------------------------------------------------------------------------------- /docs/src/docs/administration/administration-guide.adoc: -------------------------------------------------------------------------------- 1 | = Administration guide 2 | 3 | == Notice 4 | 5 | This work is licensed under the [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0). 6 | 7 | * SPDX-License-Identifier: Apache-2.0 8 | * Licence Path: https://creativecommons.org/licenses/by/4.0/legalcode 9 | * Copyright (c) 2021,2022,2023, 2024 Contributors to the Eclipse Foundation 10 | * Copyright (c) 2022, 2023 ZF Friedrichshafen AG 11 | * Copyright (c) 2022 ISTOS GmbH 12 | * Copyright (c) 2022, 2023, 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) 13 | * Copyright (c) 2022,2023 BOSCH AG 14 | 15 | * Source URL: https://github.com/eclipse-tractusx/traceability-foss 16 | 17 | :toc: 18 | 19 | include::system-overview.adoc[leveloffset=+1] 20 | include::installation.adoc[leveloffset=+1] 21 | include::configuration.adoc[leveloffset=+1] 22 | include::troubleshooting.adoc[leveloffset=+1] 23 | -------------------------------------------------------------------------------- /docs/src/docs/administration/configuration.adoc: -------------------------------------------------------------------------------- 1 | [#_configuration] 2 | = Configuration 3 | 4 | :toc: 5 | include::frontend-configuration.adoc[leveloffset=+1] 6 | include::backend-configuration.adoc[leveloffset=+1] 7 | include::portal-configuration.adoc[leveloffset=+1] 8 | -------------------------------------------------------------------------------- /docs/src/docs/administration/troubleshooting.adoc: -------------------------------------------------------------------------------- 1 | = Troubleshooting 2 | 3 | Coming soon... 4 | -------------------------------------------------------------------------------- /docs/src/docs/api-specification/api-specification.adoc: -------------------------------------------------------------------------------- 1 | = API specification 2 | 3 | ## Notice 4 | 5 | This work is licensed under the [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0). 6 | 7 | * SPDX-License-Identifier: Apache-2.0 8 | * Licence Path: https://creativecommons.org/licenses/by/4.0/legalcode 9 | * Copyright (c) 2021,2022,2023 Contributors to the Eclipse Foundation 10 | * Copyright (c) 2022, 2023 ZF Friedrichshafen AG 11 | * Copyright (c) 2022 ISTOS GmbH 12 | * Copyright (c) 2022, 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) 13 | * Copyright (c) 2022,2023 BOSCH AG 14 | 15 | * Source URL: https://github.com/eclipse-tractusx/traceability-foss 16 | 17 | :toc: 18 | 19 | include::api.adoc[leveloffset=1] 20 | -------------------------------------------------------------------------------- /docs/src/docs/api-specification/api.adoc: -------------------------------------------------------------------------------- 1 | = OpenAPI Specification 2 | 3 | ++++ 4 | include::index.html[] 5 | ++++ 6 | -------------------------------------------------------------------------------- /docs/src/docs/api-specification/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Trace-X API 5 | 6 | 7 |

Trace-X API

8 |

This will be automatically generated when workflow "publish-documentation.yaml" is executed.

9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/building-block-view/full.adoc: -------------------------------------------------------------------------------- 1 | = Building block view 2 | 3 | include::blackbox-overall.adoc[leveloffset=+1] 4 | include::level-1.adoc[leveloffset=+1] 5 | 6 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/building-block-view/index.adoc: -------------------------------------------------------------------------------- 1 | = Building block view 2 | 3 | == Chapters 4 | 5 | - xref:blackbox-overall.adoc[Blackbox overall system] 6 | - xref:level-1.adoc[Level 1] 7 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/cross-cutting/domain-concepts.adoc: -------------------------------------------------------------------------------- 1 | = Domain concepts 2 | 3 | == API model 4 | 5 | For detailed information about the API model, please refer to the link:https://eclipse-tractusx.github.io/traceability-foss/docs/api-specification/api-specification.html[API specification]. 6 | 7 | == Domain models 8 | 9 | === Assets 10 | [plantuml, target=level-1, format=svg] 11 | .... 12 | include::../../../uml-diagrams/arc42/cross-cutting/domain-model/domain-model.puml[] 13 | .... 14 | 15 | === Quality notifications 16 | [plantuml, target=level-2, format=svg] 17 | .... 18 | include::../../../uml-diagrams/arc42/cross-cutting/domain-model/domain-model-quality-notifications.puml[] 19 | .... 20 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/cross-cutting/entity-relationship-model.adoc: -------------------------------------------------------------------------------- 1 | = Entity-relationship model 2 | 3 | Please be informed that the 'as-planned' version currently lacks the database relations. 4 | 5 | [plantuml, format=svg] 6 | .... 7 | include::../../../uml-diagrams/arc42/cross-cutting/erm-trace-x.puml[] 8 | .... 9 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/cross-cutting/full.adoc: -------------------------------------------------------------------------------- 1 | = Cross-cutting concepts 2 | 3 | include::entity-relationship-model.adoc[leveloffset=+1] 4 | include::domain-concepts.adoc[leveloffset=+1] 5 | include::safety-security.adoc[leveloffset=+1] 6 | include::architecture-design-patterns.adoc[leveloffset=+1] 7 | include::under-the-hood.adoc[leveloffset=+1] 8 | include::development-concepts.adoc[leveloffset=+1] 9 | include::operational-concepts.adoc[leveloffset=+1] 10 | include::user-experience.adoc[leveloffset=+1] 11 | include::api-endpoints.adoc[leveloffset=+1] 12 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/cross-cutting/index.adoc: -------------------------------------------------------------------------------- 1 | = Cross-cutting concepts 2 | 3 | - xref:entity-relationship-model.adoc[Entity-relationship model] 4 | - xref:domain-concepts.adoc[Domain concepts] 5 | - xref:safety-security.adoc[Safety and security concepts] 6 | - xref:architecture-design-patterns.adoc[Architecture and design patterns] 7 | - xref:under-the-hood.adoc["Under-the-hood" concepts] 8 | - xref:development-concepts.adoc[Development concepts] 9 | - xref:operational-concepts.adoc[Operational concepts] 10 | - xref:user-experience.adoc[User experience] 11 | - xref:api-endpoints.adoc[API Endpoints] 12 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/deployment-view/0_index.adoc: -------------------------------------------------------------------------------- 1 | = Deployment view 2 | 3 | include::1_full-overview.adoc[leveloffset=+1] 4 | include::2-reverse-proxy.adoc[leveloffset=+1] 5 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/deployment-view/1_full-overview.adoc: -------------------------------------------------------------------------------- 1 | = Overview 2 | 3 | [plantuml, format=svg] 4 | .... 5 | include::../../../uml-diagrams/arc42/deployment-view/1_overview.puml[] 6 | .... 7 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/deployment-view/2-reverse-proxy.adoc: -------------------------------------------------------------------------------- 1 | = Proxy Setup 2 | 3 | [plantuml, format=svg] 4 | .... 5 | include::../../../uml-diagrams/arc42/deployment-view/2_reverse-proxy.puml[] 6 | .... 7 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/index.adoc: -------------------------------------------------------------------------------- 1 | = Architecture documentation (arc42) 2 | 3 | - xref:introduction-goals/index.adoc[Introduction and goals] 4 | - xref:architecture-constraints/index.adoc[Architecture constraints] 5 | - xref:scope-context/index.adoc[System scope and context] 6 | - xref:solution-strategy/index.adoc[Solution strategy] 7 | - xref:building-block-view/index.adoc[Building block view] 8 | - xref:runtime-view/full.adoc[Runtime view] 9 | - xref:deployment-view/index.adoc[Deployment view] 10 | - xref:cross-cutting/index.adoc[Cross-cutting concepts] 11 | - xref:quality/index.adoc[Quality requirements] 12 | - xref:glossary.adoc[Glossary] 13 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/introduction-goals/index.adoc: -------------------------------------------------------------------------------- 1 | = Introduction and goals 2 | 3 | This chapter gives you an overview about the goals of the service, in which context the service runs and which stakeholders are involved. 4 | 5 | include::requirements.adoc[leveloffset=+1] 6 | include::quality-goals.adoc[leveloffset=+1] 7 | include::stakeholder.adoc[leveloffset=+1] 8 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/quality/index.adoc: -------------------------------------------------------------------------------- 1 | = Quality requirements 2 | 3 | This section includes concrete quality scenarios to better capture the key quality objectives but also other required quality attributes. 4 | 5 | include::quality-tree.adoc[leveloffset=+1] 6 | include::quality-scenarios.adoc[leveloffset=+1] 7 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/quality/quality-tree.adoc: -------------------------------------------------------------------------------- 1 | = Quality tree 2 | 3 | The tree structure provides an overview for a sometimes large number of quality requirements. 4 | 5 | [plantuml, target=business-context-2, format=svg] 6 | .... 7 | include::../../../uml-diagrams/arc42/quality/quality-tree.puml[] 8 | .... 9 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/assets.adoc: -------------------------------------------------------------------------------- 1 | = Assets 2 | 3 | include::assets/return-all-assets.adoc[leveloffset=+1] 4 | include::assets/return-specific-assets.adoc[leveloffset=+1] 5 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/assets/return-all-assets.adoc: -------------------------------------------------------------------------------- 1 | = Scenario 1: Return assets 2 | 3 | This section describes what happens when users list stored assets. 4 | In this example, the user requests as-built assets. 5 | The same can be done with as-planned assets. 6 | 7 | [plantuml, target=return-all-assets, format=svg] 8 | .... 9 | include::../../../../uml-diagrams/arc42/runtime-view/assets/return-all-assets.puml[] 10 | .... 11 | 12 | == Overview 13 | 14 | When a user requests stored assets, Trace-X checks if the user has an adequate role ('ROLE_ADMIN', 'ROLE_SUPERVISOR', 'ROLE_USER'). 15 | If yes, then the endpoint returns a pageable result of assets. 16 | 17 | The returned result can be empty if no suitable asset has been found. 18 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/assets/return-specific-assets.adoc: -------------------------------------------------------------------------------- 1 | = Scenario 2: Return specific assets 2 | 3 | This section describes what happens when users search for a specific asset. 4 | This example shows the request of one as-built asset. 5 | The same can be done with as-planned assets. 6 | 7 | [plantuml, target=return-specific-assets, format=svg] 8 | .... 9 | include::../../../../uml-diagrams/arc42/runtime-view/assets/return-specific-assets.puml[] 10 | .... 11 | 12 | == Overview 13 | 14 | When a user requests a specific asset, Trace-X checks if the user has an adequate role ('ROLE_ADMIN', 'ROLE_SUPERVISOR', 'ROLE_USER'). If yes, then the endpoint returns the asset for the given assetId, if it is found. 15 | 16 | If no asset has been found for the given ID, an AssetNotFoundException is thrown. 17 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/data-provisioning/publish-assets-error.adoc: -------------------------------------------------------------------------------- 1 | = Scenario 3: Publish assets - error on EDC or DTR 2 | 3 | This section describes the user interaction when publishing assets fails due to an EDC or DTR error (for example when the services are unavailable). 4 | 5 | [plantuml,target=publish-assets-error,format=svg] 6 | .... 7 | include::../../../../uml-diagrams/arc42/runtime-view/data-provisioning/publish-assets-error.puml[] 8 | .... 9 | 10 | == Overview 11 | 12 | When a user publishes assets, Trace-X checks if the user has an adequate role ('ROLE_ADMIN'). 13 | If yes, the endpoint starts to publish assets to network. 14 | If any of the required services are not available or return an error response upon executing, the included assets are set to ERROR state and the user can retry publishing them at any time when services are available again. 15 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/data-provisioning/publish-assets.adoc: -------------------------------------------------------------------------------- 1 | = Scenario 2: Publish assets 2 | 3 | This section describes the user interaction when publishing assets 4 | 5 | [plantuml,target=publish-assets,format=svg] 6 | .... 7 | include::../../../../uml-diagrams/arc42/runtime-view/data-provisioning/publish-assets.puml[] 8 | .... 9 | 10 | == Overview 11 | 12 | When a user publishes assets, Trace-X checks if the user has an adequate role ('ROLE_ADMIN'). 13 | If yes, the endpoint starts to publish assets to the network. 14 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/data-provisioning/return-import-report.adoc: -------------------------------------------------------------------------------- 1 | = Scenario 1: Receive import report 2 | 3 | This section describes what happens when the user wants to get a report of the imported assets associated with a importJobId. 4 | In this example, the user requests an import report. 5 | 6 | [plantuml,target=import-report-receive,format=svg] 7 | .... 8 | include::../../../../uml-diagrams/arc42/runtime-view/data-provisioning/import-report-receive.puml[] 9 | .... 10 | 11 | == Overview 12 | 13 | When a user requests an import report, Trace-X checks if the user has an adequate role ('ROLE_ADMIN', 'ROLE_SUPERVISOR'). 14 | If yes, the endpoint returns the import report of the given importJobId. 15 | 16 | If the importJobId is not known to Trace-X, an HTTP 404 error is returned. 17 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/data-sovereignty.adoc: -------------------------------------------------------------------------------- 1 | = Data sovereignty 2 | 3 | include::data-sovereignty/return-asset-contracts.adoc[leveloffset=+1] 4 | include::data-sovereignty/policy-management.adoc[leveloffset=+1] 5 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/full.adoc: -------------------------------------------------------------------------------- 1 | = Runtime view 2 | 3 | This section describes the different functionalities of the Trace-X application. 4 | 5 | include::assets.adoc[leveloffset=+1] 6 | include::notifications.adoc[leveloffset=+1] 7 | include::data-consumption.adoc[leveloffset=+1] 8 | include::data-provisioning.adoc[leveloffset=+1] 9 | include::data-sovereignty.adoc[leveloffset=+1] 10 | include::policies.adoc[leveloffset=+1] 11 | include::scheduler.adoc[leveloffset=+1] 12 | include::discovery-flow/discovery-handling.adoc[leveloffset=+1] 13 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/notifications.adoc: -------------------------------------------------------------------------------- 1 | = Notifications 2 | 3 | include::notifications/quality-investigation-receive.adoc[leveloffset=+1] 4 | include::notifications/quality-investigation-send.adoc[leveloffset=+1] 5 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/scheduler.adoc: -------------------------------------------------------------------------------- 1 | = Scheduler 2 | 3 | include::scheduler/scheduler.adoc[leveloffset=+1] 4 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/runtime-view/scheduler/scheduler.adoc: -------------------------------------------------------------------------------- 1 | An overview of the scheduler tasks configured in the system. 2 | 3 | [options="header"] 4 | |=== 5 | |Scheduler name | Execution interval | Description 6 | |PublishAssetsJob | Every hour at 30min | Publishes assets in IN_SYNCHRONIZATION state to core services. The process combines as-built and as-planned assets and initiates their publication for synchronization in the traceability system. 7 | |AssetsRefreshJob | Every 2 hours | Invokes the synchronization of asset shell descriptors with the decentralized registry. It ensures the latest asset information is fetched and updated in the system from external sources. 8 | |=== 9 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/scope-context/index.adoc: -------------------------------------------------------------------------------- 1 | = System scope and context 2 | 3 | Trace-X is an end-user application to visualize and utilize data provided to the Catena-X network. This includes the traceability of manufactured parts and batches as well as the shipped and supplied components. To utilize the CX open ecosystem, it is necessary to exchange information on serialized parts and batches with supply chain partners in a standardized, data-sovereign and interoperable way. This section describes the environment of Trace-X, its intended users and which systems and components it interacts with. 4 | 5 | include::business-context.adoc[leveloffset=+1] 6 | 7 | include::technical-context.adoc[leveloffset=+1] 8 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/solution-strategy/index.adoc: -------------------------------------------------------------------------------- 1 | = Solution strategy 2 | 3 | This section contains a summarized architectural overview, a comparison of the most important goals and the corresponding solution approaches. 4 | 5 | include::introduction.adoc[leveloffset=+1] 6 | include::technology.adoc[leveloffset=+1] 7 | include::structure.adoc[leveloffset=+1] 8 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/solution-strategy/technology.adoc: -------------------------------------------------------------------------------- 1 | = Technology 2 | 3 | Trace-X is developed using Java and the Spring Boot framework for the backend and Typescript based on the Angular framework for the frontend. This decision was taken due to the support of the frameworks as well as technical knowledge of the team members. 4 | 5 | The application can be hosted using Docker and Kubernetes. This is commonly used and widespread. With this the application has no vendor lock in regarding the hosting provider. 6 | 7 | The communication between frontend and backend is done using REST APIs. This is the standard method in the Catena-X landscape and makes the application components easy to use for any third party client. 8 | 9 | For the database PostgreSQL is used. 10 | -------------------------------------------------------------------------------- /docs/src/docs/arc42/trace-x-data-import-interface/data-import-interface.adoc: -------------------------------------------------------------------------------- 1 | = Concept for Trace-X data import interface (data provider) 2 | 3 | == Module 1 4 | 5 | [plantuml, target=modul1-sequence, format=svg] 6 | .... 7 | include::../../../uml-diagrams/arc42/runtime-view/data-provisioning/trace-x-data-import-interface-modul1-sequence.puml[] 8 | .... 9 | 10 | == Module 2 11 | 12 | [plantuml, target=modul2-sequence, format=svg] 13 | .... 14 | include::../../../uml-diagrams/arc42/runtime-view/data-provisioning/trace-x-data-import-interface-modul2-sequence.puml[] 15 | .... 16 | 17 | == Module 3 18 | 19 | [plantuml, target=modul3-sequence, format=svg] 20 | .... 21 | include::../../../uml-diagrams/arc42/runtime-view/data-provisioning/trace-x-data-import-interface-modul3-sequence.puml[] 22 | .... 23 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/cross-cutting/domain-model/data-model.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam monochrome true 3 | skinparam shadowing false 4 | skinparam linetype ortho 5 | skinparam defaultFontName "Architects daughter" 6 | 7 | entity ImportJobs { 8 | importId 9 | jobImportStatus 10 | startedOn 11 | completedOn 12 | } 13 | 14 | entity ImportedAsset{ 15 | assetImportId 16 | assetImportStatus 17 | importMessage 18 | importedOn 19 | catenaXId 20 | } 21 | 22 | entity Asset { 23 | catenaXId 24 | } 25 | 26 | ImportedAsset "1 .. 10k" -- " 1 " ImportJobs 27 | Asset " 1 " -- " 1 " ImportedAsset 28 | 29 | 30 | @enduml 31 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/quality/quality-tree.puml: -------------------------------------------------------------------------------- 1 | @startmindmap 2 | * Quality 3 | ** Interoperability 4 | ***_ I01 5 | ** Maintainability 6 | ***_ Analyzability 7 | ****_ M01 8 | ****_ M02 9 | ***_ Extensibility 10 | ****_ M03 11 | ***_ Modifiability 12 | ****_ M04 13 | ** Functional suitability 14 | ***_ Correctness 15 | ****_ F01 16 | ***_ Notifications 17 | ****_ F02 18 | ****_ F04 19 | ***_ Role as enabler 20 | ****_ F03 21 | ** Efficiency 22 | ***_ E01 23 | @endmindmap 24 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/runtime-view/data-cleanup/data-cleanup.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 'autonumber 3 | 4 | actor Cron as "Scheduled Task" 5 | participant TraceX 6 | participant "TraceXDB" as DB 7 | 8 | Cron -> TraceX: Trigger cleanExpiredEntries() 9 | TraceX -> DB: findExpiredEntries() 10 | DB --> TraceX: List 11 | 12 | alt expired entries found 13 | TraceX -> DB: deleteAll(expiredEntries) 14 | TraceX -> TraceX: log "Deleted {count} expired AAS entries." 15 | else no expired entries 16 | TraceX -> TraceX: log "No expired AAS entries found." 17 | end 18 | 19 | @enduml 20 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/runtime-view/data-provisioning/publish-assets-error.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | autonumber "[00]" 3 | skinparam monochrome true 4 | skinparam shadowing false 5 | skinparam defaultFontName "Architects daughter" 6 | skinparam linetype ortho 7 | 8 | actor TraceXApiConsumer 9 | activate TraceXApiConsumer 10 | 11 | box "Trace-X FOSS" #LightGrey 12 | participant TraceX 13 | activate TraceX 14 | 15 | TraceXApiConsumer -> TraceX : POST /assets/publish 16 | TraceX -> TraceX : Module 2 fails to create EDC Assets or DTR shells 17 | TraceXApiConsumer -> TraceXApiConsumer : GET /assets 18 | TraceXApiConsumer -> TraceX : POST /assets/publish 19 | TraceX -> TraceX : Module 2 process successfully 20 | TraceXApiConsumer -> TraceXApiConsumer : GET /assets 21 | 22 | 23 | 24 | 25 | @enduml 26 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/runtime-view/data-provisioning/publish-assets.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | autonumber "[00]" 3 | skinparam monochrome true 4 | skinparam shadowing false 5 | skinparam defaultFontName "Architects daughter" 6 | skinparam linetype ortho 7 | 8 | actor TraceXApiConsumer 9 | activate TraceXApiConsumer 10 | 11 | box "Trace-X FOSS" #LightGrey 12 | participant TraceX 13 | activate TraceX 14 | 15 | TraceXApiConsumer -> TraceX : POST /assets/publish 16 | TraceX -> TraceX : Module 2 17 | TraceXApiConsumer -> TraceXApiConsumer : GET /assets 18 | 19 | 20 | 21 | 22 | 23 | @enduml 24 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/runtime-view/data-provisioning/trace-x-data-import-interface-modul2-sequence.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | autonumber "[00]" 3 | skinparam monochrome true 4 | skinparam shadowing false 5 | skinparam defaultFontName "Architects daughter" 6 | skinparam linetype ortho 7 | 8 | participant FE 9 | participant BE 10 | 11 | FE -> BE: request assets: GET/assetsAsxxx 12 | BE --> FE: return assets_as_built OR assets_as_planned 13 | FE -> FE: present assets 14 | FE -> BE: select assets to synchronize: GET/policies 15 | BE --> FE: return policies 16 | FE -> FE: open detailview & assign policy (via dropdown) 17 | FE -> BE: register assets for publishing: POST/assets/publish 18 | BE -> BE: update asset state to IN_SYNC 19 | BE -> BE: trigger 'publish AAS Workflow' (Job scheduler) 20 | BE -> BE: trigger 'data consumption process' 21 | FE -> FE: refresh of FE view 22 | @enduml 23 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/runtime-view/policies/policy-assets.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam monochrome true 3 | skinparam shadowing false 4 | skinparam defaultFontName "Architects daughter" 5 | 6 | title Sequence diagram: Policy handling on asset provisioning flow 7 | participant "Trace-X" as TraceX 8 | participant "EDC Provider (other)" as EdcProvider 9 | 10 | activate TraceX 11 | TraceX -> TraceX: Publish asset to core services 12 | TraceX -> EdcProvider: Register policy 13 | EdcProvider --> TraceX: Ok 14 | TraceX -> TraceX: Reuse policy for contract definition creation 15 | @enduml 16 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/scope-context/business-context/business-context-2.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | actor "User" as User 3 | component [**Trace-X**] <> as Trace 4 | component [**IRS**] <> as IRS 5 | node "Catena-X Network" as CX 6 | component [**Any other Traceability App**] <> as Traceapp 7 | 8 | User --> Trace 9 | Trace --> IRS 10 | Trace --> CX 11 | IRS --> CX 12 | Trace <--> Traceapp 13 | @enduml 14 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/scope-context/business-context/business-context.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam monochrome true 3 | skinparam shadowing false 4 | 5 | actor User 6 | actor Supervisor 7 | actor Admin 8 | frame "Trace-X"{ 9 | interface RESTInterface 10 | node [Trace-X Frontend] 11 | node [Trace-X Backend] 12 | database "PostgreSQL" { 13 | [Trace-X Backend] --> [Database] 14 | } 15 | 16 | } 17 | node "ItemRelationshipService" as IRS 18 | node "Catena-X Network" as CX 19 | node "EDC" as EDC 20 | 21 | Supervisor --> [Trace-X Frontend] 22 | 23 | Admin --> [Trace-X Frontend] 24 | User --> [Trace-X Frontend] 25 | [Trace-X Frontend] --( RESTInterface 26 | RESTInterface -- [Trace-X Backend] 27 | [Trace-X Backend] --> IRS : Receive ItemGraph 28 | [Trace-X Backend] <-> EDC : Notifications 29 | IRS --> CX 30 | 31 | 32 | 33 | 34 | @enduml 35 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/scope-context/technical-context/aas-api-view.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam monochrome true 3 | skinparam shadowing false 4 | skinparam nodesep 100 5 | skinparam ranksep 20 6 | 7 | actor "User" as User 8 | component [**Trace-X**] <> as Trace 9 | 10 | node "Eclipse Dataspace Connector" { 11 | [**EDC**] <> as EDC 12 | } 13 | 14 | node "Digital Twin Registry" { 15 | [**AAS Registry**] <> as AASR 16 | } 17 | 18 | node "IAM" { 19 | [**Keycloak**] <> as KIAM 20 | } 21 | 22 | interface "TRACE API" as TAPI 23 | interface "EDC API" as EAPI 24 | interface "OIDC" as IAMAPI 25 | interface "Registry API" as IRAPI 26 | 27 | User -( TAPI 28 | TAPI - Trace 29 | Trace --( EAPI 30 | IRAPI -- AASR 31 | Trace --down( IAMAPI 32 | AASR --( IAMAPI 33 | KIAM -- IAMAPI 34 | EAPI -- EDC 35 | EDC --( IRAPI 36 | @enduml 37 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/scope-context/technical-context/edc-api-view.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam monochrome true 3 | skinparam shadowing false 4 | skinparam nodesep 100 5 | skinparam ranksep 20 6 | 7 | actor "User" as User 8 | component [**Trace-X**] <> as Trace 9 | 10 | 11 | node "Group of EDC Endpoints" { 12 | [**EDC**] <> as EDC_ENDPOINTS 13 | } 14 | 15 | interface "TRACE API" as TAPI 16 | interface "EDC API" as EAPI 17 | 18 | User -( TAPI 19 | TAPI - Trace 20 | Trace --right( EAPI 21 | EAPI - EDC_ENDPOINTS 22 | 23 | @enduml 24 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/scope-context/technical-context/irs-api-view.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam monochrome true 3 | skinparam shadowing false 4 | skinparam nodesep 100 5 | skinparam ranksep 20 6 | 7 | actor "User" as User 8 | component [**Trace-X**] <> as Trace 9 | 10 | node "Item relationship service" { 11 | [**Item relationship**] <> as ITEM_RELATIONSHIP 12 | } 13 | 14 | node "IAM" { 15 | [**Keycloak**] <> as KIAM 16 | } 17 | 18 | interface "TRACE API" as TAPI 19 | interface "OIDC" as IAMAPI 20 | interface "IRS API" as IAPI 21 | 22 | User -( TAPI 23 | TAPI - Trace 24 | Trace --( IAPI 25 | IAPI -- ITEM_RELATIONSHIP 26 | Trace --down( IAMAPI 27 | ITEM_RELATIONSHIP --( IAMAPI 28 | KIAM -- IAMAPI 29 | @enduml 30 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/arc42/scope-context/technical-context/portal-api-view.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam monochrome true 3 | skinparam shadowing false 4 | skinparam nodesep 100 5 | skinparam ranksep 20 6 | 7 | actor "User" as User 8 | component [**Trace-X**] <> as Trace 9 | 10 | node "Portal" { 11 | [**Portal**] <> as PORTAL 12 | } 13 | 14 | node "IAM" { 15 | [**Keycloak**] <> as KIAM 16 | } 17 | 18 | interface "TRACE API" as TAPI 19 | interface "OIDC" as IAMAPI 20 | interface "Portal API" as PAPI 21 | 22 | User -( TAPI 23 | TAPI - Trace 24 | Trace --( PAPI 25 | PAPI -- PORTAL 26 | Trace --right( IAMAPI 27 | PORTAL --( IAMAPI 28 | KIAM -- IAMAPI 29 | @enduml 30 | -------------------------------------------------------------------------------- /docs/src/uml-diagrams/user-manual/bpn-edc-configuration.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | skinparam monochrome true 3 | skinparam shadowing false 4 | skinparam defaultFontName "Architects daughter" 5 | autonumber "[00]" 6 | 7 | title Receive EDC URLs 8 | participant "Trace-X" as TX 9 | participant "BPN-EDC configuration" as BEC 10 | participant "DiscoveryFinder" as DF 11 | 12 | activate TX 13 | TX -> BEC: Look up URLs for configured BPN 14 | activate BEC 15 | autonumber stop 16 | BEC --> TX: URLs 17 | deactivate BEC 18 | autonumber resume 19 | TX -> DF: Look up URLs for configured BPN 20 | activate DF 21 | autonumber stop 22 | DF --> TX: URLs 23 | deactivate DF 24 | autonumber resume 25 | TX -> TX: Merge URLs into list (no duplicates) 26 | @enduml 27 | -------------------------------------------------------------------------------- /frontend/.dockerignore: -------------------------------------------------------------------------------- 1 | **/node_modules/ 2 | **/dist 3 | .git 4 | -------------------------------------------------------------------------------- /frontend/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | 4 | src/main.ts 5 | src/polyfills.ts 6 | -------------------------------------------------------------------------------- /frontend/.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /frontend/.lintstagedrc: -------------------------------------------------------------------------------- 1 | { 2 | "*.(js|ts|json|md|css|scss|html)": ["npm run format", "npm run lint"] 3 | } 4 | -------------------------------------------------------------------------------- /frontend/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "trailingComma": "all", 4 | "singleQuote": true, 5 | "printWidth": 120, 6 | "tabWidth": 2, 7 | "arrowParens": "avoid" 8 | } 9 | -------------------------------------------------------------------------------- /frontend/.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "stylelint-config-standard-scss" 3 | } 4 | -------------------------------------------------------------------------------- /frontend/browserslist: -------------------------------------------------------------------------------- 1 | # This file is currently used by autoprefixer to adjust CSS to support the below specified browsers 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | # 5 | # For IE 9-11 support, please remove 'not' from the last line of the file and adjust as needed 6 | 7 | # You can see what browsers were selected by your queries by running: 8 | # npx browserslist 9 | 10 | last 1 Chrome version 11 | last 1 Firefox version 12 | last 2 Edge major versions 13 | last 2 Safari major versions 14 | last 2 iOS major versions 15 | Firefox ESR 16 | not dead 17 | not IE 9-11 18 | -------------------------------------------------------------------------------- /frontend/build/security-headers.conf: -------------------------------------------------------------------------------- 1 | add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; 2 | add_header Content-Security-Policy "default-src 'self' https://*.{backendDomain}; object-src 'none'; script-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com 'self' blob:; script-src-elem 'self'; base-uri 'self'; style-src 'self' 'unsafe-inline' fonts.googleapis.com; block-all-mixed-content; font-src 'self' https: data:; frame-ancestors 'self'; img-src 'self' data:; upgrade-insecure-requests;" always; 3 | add_header X-Frame-Options "DENY" always; 4 | add_header X-Content-Type-Options "nosniff" always; 5 | add_header Referrer-Policy "strict-origin" always; 6 | add_header Feature-Policy "microphone 'none'; geolocation 'none'; camera 'none'" always; 7 | -------------------------------------------------------------------------------- /frontend/cypress/.dockerignore: -------------------------------------------------------------------------------- 1 | **/node_modules/ 2 | **/dist 3 | .git 4 | -------------------------------------------------------------------------------- /frontend/cypress/cucumber-json-formatter: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/cypress/cucumber-json-formatter -------------------------------------------------------------------------------- /frontend/int.proxy.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "/api/*": { 3 | "target": "https://traceability.int.demo.catena-x.net", 4 | "secure": false, 5 | "logLevel": "debug", 6 | "changeOrigin": true 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /frontend/scripts/LICENSE_HEADER: -------------------------------------------------------------------------------- 1 | Copyright (c) 2023 Contributors to the Eclipse Foundation 2 | 3 | See the NOTICE file(s) distributed with this work for additional 4 | information regarding copyright ownership. 5 | 6 | This program and the accompanying materials are made available under the 7 | terms of the Apache License, Version 2.0 which is available at 8 | https://www.apache.org/licenses/LICENSE-2.0. 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | License for the specific language governing permissions and limitations 14 | under the License. 15 | 16 | SPDX-License-Identifier: Apache-2.0 17 | -------------------------------------------------------------------------------- /frontend/scripts/custom-injector.sh: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2023 Contributors to the Eclipse Foundation 2 | # 3 | # See the NOTICE file(s) distributed with this work for additional 4 | # information regarding copyright ownership. 5 | # 6 | # This program and the accompanying materials are made available under the 7 | # terms of the Apache License, Version 2.0 which is available at 8 | # https://www.apache.org/licenses/LICENSE-2.0. * 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 | # License for the specific language governing permissions and limitations 13 | # under the License. 14 | # 15 | # * SPDX-License-Identifier: Apache-2.0 16 | 17 | node /docker-entrypoint.d/inject-dynamic-env.js 18 | node /docker-entrypoint.d/replace-base-href.js 19 | -------------------------------------------------------------------------------- /frontend/scripts/download/org.eclipse.dash.licenses-0.0.1-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/scripts/download/org.eclipse.dash.licenses-0.0.1-SNAPSHOT.jar -------------------------------------------------------------------------------- /frontend/src/app/modules/page/admin/presentation/contracts/contract-detail/contract-detail.component.scss: -------------------------------------------------------------------------------- 1 | .policy--content--container { 2 | background-color: #fafafa; 3 | } 4 | 5 | .cards-container { 6 | display: grid; 7 | grid-template-columns: repeat(2, 1fr); 8 | gap: 25px 25px; 9 | height: 70vh; 10 | 11 | .cards-container-info-card { 12 | grid-column: span 1; 13 | grid-row: span 1; 14 | max-width: 100%; 15 | } 16 | 17 | .cards-container-json-card { 18 | grid-column: span 1; 19 | grid-row: span 1; 20 | max-width: 100%; 21 | overflow: auto; 22 | } 23 | 24 | } 25 | 26 | @media(max-width: 1023px) { 27 | .cards-container { 28 | grid-template-columns: repeat(1,1fr); 29 | } 30 | } 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /frontend/src/app/modules/page/admin/presentation/contracts/contract-detail/contract-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { AdminModule } from '@page/admin/admin.module'; 2 | import { ContractsFacade } from '@page/admin/presentation/contracts/contracts.facade'; 3 | import { renderComponent } from '@tests/test-render.utils'; 4 | 5 | import { ContractDetailComponent } from './contract-detail.component'; 6 | 7 | describe('ContractDetailComponent', () => { 8 | 9 | const renderContractDetailedComponent = () => renderComponent(ContractDetailComponent, {imports: [AdminModule], providers: [ContractsFacade]}) 10 | 11 | it('should create', async() => { 12 | const {fixture} = await renderContractDetailedComponent(); 13 | const {componentInstance} = fixture; 14 | expect(componentInstance).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /frontend/src/app/modules/page/admin/presentation/policy-management/deletion-dialog/deletion-dialog.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject } from '@angular/core'; 2 | import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; 3 | 4 | @Component({ 5 | selector: 'app-deletion-dialog', 6 | templateUrl: './deletion-dialog.component.html', 7 | styleUrls: [ './deletion-dialog.component.scss' ], 8 | }) 9 | export class DeletionDialogComponent { 10 | policyIds: string[]; 11 | title: string; 12 | 13 | constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any) { 14 | this.policyIds = data?.policyIds; 15 | this.title = data?.title; 16 | } 17 | 18 | 19 | save() { 20 | this.dialogRef.close(true); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /frontend/src/app/modules/page/dashboard/presentation/dashboard.model.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from 'rxjs'; 2 | 3 | export interface MetricData { 4 | metricName: string, 5 | value: Observable, 6 | metricUnit: string, 7 | } 8 | -------------------------------------------------------------------------------- /frontend/src/app/modules/page/notifications/detail/edit/shared-part.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { SharedPartService } from './shared-part.service'; 4 | 5 | describe('SharedAssetIdService', () => { 6 | let service: SharedPartService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(SharedPartService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /frontend/src/app/modules/page/notifications/detail/edit/shared-part.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Part } from '@page/parts/model/parts.model'; 3 | 4 | @Injectable({ 5 | providedIn: 'root' 6 | }) 7 | export class SharedPartService { 8 | affectedParts: Part[] 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/asset-publisher/asset-publisher.component.scss: -------------------------------------------------------------------------------- 1 | .header { 2 | margin-bottom: 30px; 3 | } 4 | 5 | .container { 6 | display: flex; 7 | gap: 10px; 8 | flex-wrap: wrap; 9 | 10 | } 11 | 12 | .policies-label { 13 | padding-bottom: 8px; 14 | } 15 | 16 | .action-container { 17 | display: flex; 18 | flex-direction: column; 19 | gap: 10px; 20 | } 21 | 22 | .publish-action-container { 23 | display: flex; 24 | justify-content: center; 25 | margin-top: 16px; 26 | } 27 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/breadcrumb/breadcrumb.component.html: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/breadcrumb/breadcrumb.component.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb-wrapper { 2 | display: flex; 3 | align-items: center; 4 | font-size: 10px; 5 | color: #4b5563; 6 | } 7 | 8 | .breadcrumb-link { 9 | 10 | transition: color 1s; 11 | 12 | &:hover { 13 | text-decoration: underline; 14 | color: #374151; 15 | } 16 | 17 | } 18 | 19 | .breadcrumb-separator { 20 | margin: 0 8px; 21 | color: #9ca3af; 22 | } 23 | 24 | .breadcrumb-current { 25 | color: #4b5563; 26 | } 27 | 28 | .breadcrumb-uuid { 29 | color: #9ca3af; 30 | margin-left: 4px; 31 | } 32 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/breadcrumb/breadcrumb.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BreadcrumbComponent } from './breadcrumb.component'; 4 | 5 | describe('BreadcrumbComponent', () => { 6 | let component: BreadcrumbComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [BreadcrumbComponent] 12 | }); 13 | fixture = TestBed.createComponent(BreadcrumbComponent); 14 | component = fixture.componentInstance; 15 | fixture.detectChanges(); 16 | }); 17 | 18 | it('should create', () => { 19 | expect(component).toBeTruthy(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/breadcrumb/breadcrumb.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-breadcrumb', 5 | templateUrl: './breadcrumb.component.html', 6 | styleUrls: ['./breadcrumb.component.scss'] 7 | }) 8 | export class BreadcrumbComponent { 9 | @Input() variant: 'As built' | 'As planned' = 'As built'; 10 | @Input() partName: string = ''; 11 | @Input() uuid: string = ''; 12 | } 13 | 14 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/card-metric/card-metric.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

{{headerLabelKey}}

4 |
5 | 6 |

{{(value | number) | abbreviateNumber}} 7 | {{'pageDashboard.million' | i18n}}

8 |
9 |
10 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/card-metric/card-metric.component.scss: -------------------------------------------------------------------------------- 1 | .metric-card-container { 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: space-between; 5 | width: 160px; 6 | height: 110px; 7 | padding: 8px; 8 | } 9 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/card-metric/card-metric.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { SharedModule } from '@shared/shared.module'; 3 | 4 | import { CardMetricComponent } from './card-metric.component'; 5 | 6 | describe('CardMetricComponent', () => { 7 | let component: CardMetricComponent; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async () => { 11 | await TestBed.configureTestingModule({ 12 | declarations: [ CardMetricComponent ], 13 | imports: [ SharedModule ], 14 | }) 15 | .compileComponents(); 16 | 17 | fixture = TestBed.createComponent(CardMetricComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/card-metric/card-metric.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-card-metric', 5 | templateUrl: './card-metric.component.html', 6 | styleUrls: [ './card-metric.component.scss' ], 7 | }) 8 | export class CardMetricComponent { 9 | @Input() headerLabelKey: string; 10 | @Input() value: number; 11 | @Input() footerLabelKey: string; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/chip/chip.component.html: -------------------------------------------------------------------------------- 1 |
2 | {{("importState." + chipTextContent) | i18n}} 3 |
4 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/chip/chip.component.scss: -------------------------------------------------------------------------------- 1 | .chip-container { 2 | padding: 0.25rem 0.75rem 0.25rem 0.75rem; 3 | width: 161px; 4 | background-color: currentColor; 5 | display: flex; 6 | justify-content: center; 7 | align-items: center; 8 | border-radius: 9999px; 9 | font-size: 0.75rem; 10 | 11 | @apply font-bold; 12 | 13 | &__PERSISTENT { 14 | background-color: rgb(226,246,199); 15 | 16 | } 17 | 18 | &__TRANSIENT { 19 | background-color: rgb(242,243,251); 20 | } 21 | 22 | &__IN_SYNCHRONIZATION { 23 | background-color: rgb(255,236,189); 24 | } 25 | 26 | &__PUBLISHED_TO_CORE_SERVICES { 27 | background-color: rgb(218, 245, 255); 28 | } 29 | 30 | &__ERROR { 31 | background-color: rgb(254,231,226); 32 | } 33 | 34 | &__UNSET { 35 | background-color: grey; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/chip/chip.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { SharedModule } from '@shared/shared.module'; 2 | import { renderComponent } from '@tests/test-render.utils'; 3 | 4 | import { ChipComponent } from './chip.component'; 5 | 6 | describe('ChipComponent', () => { 7 | 8 | const renderChipComponent = () => { 9 | return renderComponent(ChipComponent, { 10 | imports: [SharedModule], 11 | 12 | }) 13 | } 14 | 15 | it('should create', async () => { 16 | const { fixture} = await renderChipComponent(); 17 | const { componentInstance } = fixture; 18 | expect(componentInstance).toBeTruthy(); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/chip/chip.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-chip', 5 | templateUrl: './chip.component.html', 6 | styleUrls: ['./chip.component.scss'] 7 | }) 8 | export class ChipComponent { 9 | @Input() chipTextContent: string = "NOT_PROVIDED"; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/country-flag-generator/country-flag-generator.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/country-flag-generator/country-flag-generator.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-country-flag-generator', 5 | templateUrl: './country-flag-generator.component.html', 6 | styleUrls: [ './sass/flag-css.scss' ], 7 | }) 8 | export class CountryFlagGeneratorComponent { 9 | @Input() countryCode: string = ''; 10 | } 11 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/country-flag-generator/sass/_flag-icon-list.scss: -------------------------------------------------------------------------------- 1 | @include flag-css-default(); 2 | 3 | @if variable-exists(include) { 4 | @each $country in $include { 5 | @include flag-css($country); 6 | } 7 | } @else { 8 | @each $country in $countries { 9 | @include flag-css($country); 10 | } 11 | } -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/country-flag-generator/sass/flag-css.scss: -------------------------------------------------------------------------------- 1 | @import './_variables.scss'; 2 | @import './_flag-icon-base.scss'; 3 | @import './_flag-icon-list.scss'; 4 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/csv-upload/csv-upload.component.html: -------------------------------------------------------------------------------- 1 |
2 |

Search for parts via csv file

3 | 4 | 5 | upload_file 6 | 7 | 13 | 14 | 15 | 16 | 17 | Close 18 | 19 |
20 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/parts-table/notifications-received-configuration.model.ts: -------------------------------------------------------------------------------- 1 | import { TableFilterConfiguration } from '@shared/components/parts-table/parts-config.model'; 2 | 3 | export class NotificationsReceivedConfigurationModel extends TableFilterConfiguration { 4 | constructor() { 5 | const sortableColumns = { 6 | select: false, 7 | createdBy: true, 8 | createdByName: true, 9 | createdDate: true, 10 | description: true, 11 | severity: true, 12 | status: true, 13 | title: true, 14 | type: true, 15 | menu: false, 16 | }; 17 | 18 | const dateFields = [ 'createdDate' ]; 19 | const singleSearchFields = []; 20 | super(sortableColumns, dateFields, singleSearchFields, true); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/parts-table/notifications-sent-configuration.model.ts: -------------------------------------------------------------------------------- 1 | import { TableFilterConfiguration } from '@shared/components/parts-table/parts-config.model'; 2 | 3 | export class NotificationsSentConfigurationModel extends TableFilterConfiguration { 4 | constructor() { 5 | const sortableColumns = { 6 | select: false, 7 | description: true, 8 | title: true, 9 | status: true, 10 | createdDate: true, 11 | severity: true, 12 | sendTo: true, 13 | sendToName: true, 14 | type: true, 15 | menu: false, 16 | }; 17 | 18 | const dateFields = [ 'createdDate' ]; 19 | const singleSearchFields = []; 20 | super(sortableColumns, dateFields, singleSearchFields, true); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/components/parts-table/policies-configuration.model.ts: -------------------------------------------------------------------------------- 1 | import { TableFilterConfiguration } from '@shared/components/parts-table/parts-config.model'; 2 | 3 | export class PoliciesConfigurationModel extends TableFilterConfiguration { 4 | constructor() { 5 | const sortableColumns = { 6 | select: false, 7 | bpn: false, 8 | policyName: false, 9 | policyId: false, 10 | accessType: false, 11 | createdOn: false, 12 | validUntil: false, 13 | constraints: false, 14 | menu: false, 15 | }; 16 | 17 | const dateFields = [ 'createdOn', 'validUntil' ]; 18 | const singleSearchFields = []; 19 | super(sortableColumns, dateFields, singleSearchFields, true); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/pipes/abbreviate-number.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | 3 | @Pipe({ name: 'abbreviateNumber', pure: false }) 4 | export class AbbreviateNumberPipe implements PipeTransform { 5 | 6 | transform(value: string): string { 7 | if (!value) { 8 | return; 9 | } 10 | // Convert value to a number f.ex. 1.000 to 1000 11 | const numericValue = parseFloat(value.replace(/[,.]/g, '')); 12 | 13 | if (numericValue > 9999999) { 14 | return 'Out of Range'; 15 | } 16 | 17 | if (numericValue >= 1000000) { 18 | return (numericValue / 1000000).toFixed(1); 19 | } else { 20 | return String(value); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /frontend/src/app/modules/shared/resolver/.gitKeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /frontend/src/assets/fonts/LibreFranklin-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/assets/fonts/LibreFranklin-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /frontend/src/assets/fonts/LibreFranklin-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/assets/fonts/LibreFranklin-VariableFont_wght.ttf -------------------------------------------------------------------------------- /frontend/src/assets/fonts/karbon-medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/assets/fonts/karbon-medium.woff2 -------------------------------------------------------------------------------- /frontend/src/assets/fonts/karbon-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/assets/fonts/karbon-regular.woff2 -------------------------------------------------------------------------------- /frontend/src/assets/fonts/karbon-semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/assets/fonts/karbon-semibold.woff2 -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ae.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ag.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/am.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/at.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ax.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/az.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bb.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/be.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/bw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ca.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/cd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/cf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/cg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ci.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/cl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/cn.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/co.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/cr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/cu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/cw.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/cz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/de.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/dj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/dk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/dz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/es-ca.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/fi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/fm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/fo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/fr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ga.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gb-eng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gb-sct.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gg.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/gy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/hu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/id.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ie.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/is.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/it.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/jm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/jo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/jp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/kw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/la.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/lc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/lr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/lt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/lu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/lv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ma.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/mc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/mf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/mg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/mh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/mk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ml.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/mq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/mr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/mu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/mv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ne.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/nl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/no.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/nr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/pa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/pk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/pl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/pm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/pr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ps.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/pw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/qa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/re.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ro.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ru.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/rw.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/sc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/sd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/se.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/sj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/sl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/sn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/so.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/sr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ss.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/sy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/td.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/tg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/th.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/tk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/tl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/tn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/to.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/tr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/tt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/tz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ua.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/vc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/vn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/wf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ws.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/ye.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/flags/4x3/yt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/assets/images/header-subtract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/assets/images/header-subtract.png -------------------------------------------------------------------------------- /frontend/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/assets/images/logo.png -------------------------------------------------------------------------------- /frontend/src/assets/locales/de/page.alert.json: -------------------------------------------------------------------------------- 1 | { 2 | "pageAlert": { 3 | "info": "Übersicht", 4 | "reason": "Nachrichtenverlauf", 5 | "selectedParts_one": "{{count}} Produkt für diese Seite ausgewählt.", 6 | "selectedParts_other": "{{count}} Produkte für diese Seite ausgewählt.", 7 | "selectPartsAction": "Warnung starten", 8 | 9 | "subHeadline": { 10 | "affectedParts": "Betroffene Produkte", 11 | "supplierParts": "Betroffene Produkte" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/de/page.dashboard.json: -------------------------------------------------------------------------------- 1 | { 2 | "pageDashboard": { 3 | "totalInvestigations": { 4 | "label": "Qualitätsuntersuchungen" 5 | }, 6 | "totalAlerts": { 7 | "label": "Qualitätswarnungen" 8 | }, 9 | "totalOfParts": { 10 | "label": "Produkte" 11 | }, 12 | "totalOfOtherParts": { 13 | "label": "Andere Produkte" 14 | }, 15 | "totalAmount": "Gesamtanzahl", 16 | "parts": "Produkte", 17 | "investigations": "Untersuchungen", 18 | "alerts": "Warnungen", 19 | "amountReceived": "Anzahl zugewiesen", 20 | "amountCreated": "Anzahl erstellt", 21 | "million": "Mio." 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/de/page.error-page.json: -------------------------------------------------------------------------------- 1 | { 2 | "errorPage": { 3 | "title": "Unerwarteter Fehler", 4 | "message": "Etwas scheint schief gelaufen zu sein." 5 | }, 6 | "pageNotFound": { 7 | "title": "Die Seite wurde nicht gefunden", 8 | "message": "Die von Ihnen aufgerufene Seite konnte nicht gefunden werden." 9 | }, 10 | "noPermissions": { 11 | "title": "Sie haben keinen Zugriff", 12 | "message": "Sie haben keinen Zugriff auf diese Seite. Bitte wenden Sie sich an Ihren Administrator." 13 | }, 14 | "actions": { 15 | "homepage": "Dashboard" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/de/page.investigation.json: -------------------------------------------------------------------------------- 1 | { 2 | "pageInvestigation": { 3 | "info": "Übersicht", 4 | "reason": "Nachrichtenverlauf", 5 | "selectedParts_one": "{{count}} Produkt für diese Seite ausgewählt.", 6 | "selectedParts_other": "{{count}} Produkte für diese Seite ausgewählt.", 7 | "selectPartsAction": "Untersuchung starten", 8 | 9 | "subHeadline": { 10 | "affectedParts": "Betroffene Produkte", 11 | "supplierParts": "Betroffene Produkte" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/de/page.parts.json: -------------------------------------------------------------------------------- 1 | { 2 | "relation": { 3 | "increase": "Hiermit vergrößern Sie den Baum", 4 | "decrease": "Hiermit verkleinern Sie den Baum" 5 | }, 6 | "page": { 7 | "asBuiltParts": "AsBuilt Lebenszyklus", 8 | "asPlannedParts": "AsPlanned Lebenszyklus", 9 | "selectedParts": { 10 | "info_one": "{{count}} Produkt für diese Seite ausgewählt.", 11 | "info_other": "{{count}} Produkte für diese Seite ausgewählt.", 12 | "action": "Qualitätswarnung erstellen" 13 | }, 14 | "childInvestigation": { 15 | "action": "Untersuchung starten" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/en/_test.json: -------------------------------------------------------------------------------- 1 | { 2 | "_hint": "Translation file used for testing", 3 | "routing": { 4 | "home": "Home_Test", 5 | "test": "Test", 6 | "path": "Path" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/en/page.alert.json: -------------------------------------------------------------------------------- 1 | { 2 | "pageAlert": { 3 | "info": "Overview", 4 | "reason": "Message history", 5 | "selectedParts_one": "{{count}} Part selected for this page.", 6 | "selectedParts_other": "{{count}} Parts selected for this page.", 7 | "selectPartsAction": "Start alert", 8 | 9 | "subHeadline": { 10 | "affectedParts": "Affected parts", 11 | "supplierParts": "Affected parts" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/en/page.dashboard.json: -------------------------------------------------------------------------------- 1 | { 2 | "pageDashboard": { 3 | "totalInvestigations": { 4 | "label": "Investigations" 5 | }, 6 | "totalAlerts": { 7 | "label": "Alerts" 8 | }, 9 | "totalOfParts": { 10 | "label": "Parts" 11 | }, 12 | "totalOfOtherParts": { 13 | "label": "Other Parts" 14 | }, 15 | "totalAmount": "Total Amount", 16 | "parts": "Parts", 17 | "investigations": "Investigations", 18 | "alerts": "Alerts", 19 | "amountReceived": "Amount Received", 20 | "amountCreated": "Amount Created", 21 | "million": "M." 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/en/page.error-page.json: -------------------------------------------------------------------------------- 1 | { 2 | "errorPage": { 3 | "title": "Error page", 4 | "message": "Something went wrong." 5 | }, 6 | "pageNotFound": { 7 | "title": "Page not found", 8 | "message": "The page you requested could not be found" 9 | }, 10 | "noPermissions": { 11 | "title": "No permissions", 12 | "message": "You don't have access to this page. Please contact with your admin." 13 | }, 14 | "actions": { 15 | "homepage": "Dashboard" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/en/page.investigation.json: -------------------------------------------------------------------------------- 1 | { 2 | "pageInvestigation": { 3 | "info": "Overview", 4 | "reason": "Message history", 5 | "selectedParts_one": "{{count}} Part selected for this page.", 6 | "selectedParts_other": "{{count}} Parts selected for this page.", 7 | "selectPartsAction": "Start investigation", 8 | 9 | "subHeadline": { 10 | "affectedParts": "Affected parts", 11 | "supplierParts": "Affected parts" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/assets/locales/en/page.parts.json: -------------------------------------------------------------------------------- 1 | { 2 | "pageParts": {}, 3 | "relation": { 4 | "increase": "Used to zoom into the tree", 5 | "decrease": "Used to zoom out of the tree" 6 | }, 7 | "page": { 8 | "asBuiltParts": "AsBuilt Lifecycle", 9 | "asPlannedParts": "AsPlanned Lifecycle", 10 | "selectedParts": { 11 | "info_one": "{{count}} Part selected for this page.", 12 | "info_other": "{{count}} Parts selected for this page.", 13 | "action": "Create alert" 14 | }, 15 | "childInvestigation": { 16 | "action": "Start investigation" 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /frontend/src/favicon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/favicon/android-chrome-192x192.png -------------------------------------------------------------------------------- /frontend/src/favicon/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/favicon/android-chrome-512x512.png -------------------------------------------------------------------------------- /frontend/src/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /frontend/src/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /frontend/src/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /frontend/src/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/favicon/favicon.ico -------------------------------------------------------------------------------- /frontend/src/favicon/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/frontend/src/favicon/mstile-150x150.png -------------------------------------------------------------------------------- /frontend/src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Part Traceability UI", 3 | "short_name": "Part Traceability", 4 | "description": "Part Traceability", 5 | "start_url": "/", 6 | "background_color": "#5b86cc", 7 | "theme_color": "#5b86cc", 8 | "display": "fullscreen", 9 | "orientation": "portrait", 10 | "icons": [ 11 | { 12 | "src": "/favicon/android-chrome-192x192.png", 13 | "sizes": "192x192", 14 | "type": "image/png" 15 | }, 16 | { 17 | "src": "/favicon/android-chrome-512x512.png", 18 | "sizes": "512x512", 19 | "type": "image/png" 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /frontend/src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "types": [] 6 | }, 7 | "files": ["main.ts", "polyfills.ts"], 8 | "include": ["src/**/*.d.ts", "app/mocks/**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "esModuleInterop": true, 5 | "types": ["node", "jasmine", "@testing-library/jasmine-dom"], 6 | "paths": { 7 | "@core/*": ["src/app/modules/core/*"], 8 | "@layout/*": ["src/app/modules/core/layout/*"], 9 | "@page/*": ["src/app/modules/page/*"], 10 | "@shared/*": ["src/app/modules/shared/*"], 11 | "@env": ["src/environments/environment"], 12 | "@tests/*": ["src/tests/*"] 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /frontend/tailwind.config.base.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | theme: { 3 | extend: { 4 | // Your base configurations 5 | }, 6 | }, 7 | }; 8 | -------------------------------------------------------------------------------- /frontend/tailwind.config.js: -------------------------------------------------------------------------------- 1 | // tailwind.config.js 2 | const cofinityxConfig = require('./tailwind.config.cofinityx.js'); 3 | const catenaxConfig = require('./tailwind.config.catenax.js'); 4 | const theme = process.env.THEME; 5 | 6 | module.exports = theme === 'cofinityx' ? cofinityxConfig : catenaxConfig; 7 | -------------------------------------------------------------------------------- /lombok.config: -------------------------------------------------------------------------------- 1 | # Add @Generated annotation to generated code, so that it is skipped by JaCoCo 2 | lombok.addLombokGeneratedAnnotation = true 3 | # Copy the Qualifier annotation from the instance variables to the constructor 4 | # see https://github.com/rzwitserloot/lombok/issues/745 5 | lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier 6 | lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Value 7 | -------------------------------------------------------------------------------- /settings.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | github 7 | ${PACKAGES_ACCESS_USERNAME} 8 | ${PACKAGES_ACCESS_TOKEN} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /tx-backend/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/tx-backend/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /tx-backend/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar 3 | -------------------------------------------------------------------------------- /tx-backend/collection/README.md: -------------------------------------------------------------------------------- 1 | # Insomnia Collection 2 | 3 | 1) Receive password secured zip file by team 4 | 2) Unzip with password from keepass 5 | 3) Open Insomnia 6 | 4) Click on Application -> Preferences -> Data 7 | 5) Import from file 8 | 6) On the top left you will see all environments of trace-x 9 | 7) Then you can simply request the api (auth will be automatically done by insomnia) 10 | 11 | ## How to update the collection 12 | 13 | 1) Open Insomnia 14 | 2) Click on Application -> Preferences -> Data 15 | 3) Export Trace-X collection 16 | 4) Choose insomnia v4 file format 17 | 5) Click YES on Export Private ENV 18 | 6) Zip and give it the password saved into keepass 19 | 7) Share by mail to all devs / product owners 20 | 21 | -------------------------------------------------------------------------------- /tx-backend/docker/db-init/create_db.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE trace; 2 | GRANT ALL PRIVILEGES ON DATABASE trace TO postgres; 3 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/__files/edc/edc_api_v2_contractnegotiations_id-value_response__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "edc": "https://w3id.org/edc/v0.0.1/ns/" 4 | }, 5 | "@type": "https://w3id.org/edc/v0.0.1/ns/ContractNegotiation", 6 | "@id": "negotiation-id", 7 | "edc:type": "PROVIDER", 8 | "edc:protocol": "dataspace-protocol-http", 9 | "edc:counterPartyId": "counter-party-id", 10 | "edc:counterPartyAddress": "http://counter/party/address", 11 | "edc:state": "VERIFIED", 12 | "edc:contractAgreementId": "contractAgreementId", 13 | "edc:errorDetail": "eventual-error-detail", 14 | "createdAt": 1688465655, 15 | "edc:callbackAddresses": [ 16 | "http://callback/url" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/__files/edc/edc_api_v2_transferprocesses_response__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "edc": "https://w3id.org/edc/v0.0.1/ns/" 4 | }, 5 | "@type": "https://w3id.org/edc/v0.0.1/ns/TransferProcess", 6 | "@id": "process-id", 7 | "correlationId": "correlation-id", 8 | "type": "PROVIDER", 9 | "state": "STARTED", 10 | "stateTimestamp": 1688465655, 11 | "assetId": "asset-id", 12 | "connectorId": "connectorId", 13 | "contractId": "contractId", 14 | "dataDestination": { 15 | "type": "data-destination-type" 16 | }, 17 | "privateProperties": { 18 | "private-key": "private-value" 19 | }, 20 | "errorDetail": "eventual-error-detail", 21 | "createdAt": 1688465655, 22 | "callbackAddresses": [ 23 | "http://callback/url" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/__files/edc/edc_api_v2_transferprocesses_response__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "edc": "https://w3id.org/edc/v0.0.1/ns/" 4 | }, 5 | "@id": "transfer-id", 6 | "@type": "https://w3id.org/edc/v0.0.1/ns/TransferRequest", 7 | "protocol": "dataspace-protocol-http", 8 | "connectorAddress": "http://provider-address", 9 | "connectorId": "provider-id", 10 | "contractId": "contract-id", 11 | "assetId": "asset-id", 12 | "dataDestination": { 13 | "type": "data-destination-type" 14 | }, 15 | "privateProperties": { 16 | "private-key": "private-value" 17 | }, 18 | "callbackAddresses": [ 19 | "http://callback/url" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/__files/irs/irs_policies_response__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "policyId": "ad4d81de-3799-46f3-991d-dbe525ab62af" 3 | } 4 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/dtr/dtr_lookup_shells__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "GET", 4 | "urlPattern": "/dtr/lookup/shells\\?.*" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | }, 11 | "jsonBody": { 12 | "pagingMetadata": {}, 13 | "result": [ 14 | "urn:uuid:46e51326-0c00-4eae-85ea-d8a505b432e9" 15 | ] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/dtr/dtr_registry_shell-descriptors__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request" : { 3 | "method" : "GET", 4 | "urlPathPattern" : "/dtr/registry/shell-descriptors/.*" 5 | }, 6 | "response" : { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | }, 11 | "bodyFileName": "dtr/dtr_registry_shell-descriptors_respond_AssetAdministrationShell__GET__SUCCESS.json" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "POST", 4 | "urlPath": "/edc" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_api_v2_contractnegotiations__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "POST", 4 | "urlPath": "/edc/api/v2/contractnegotiations" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | }, 11 | "jsonBody": { 12 | "@context": { 13 | "edc": "https://w3id.org/edc/v0.0.1/ns/" 14 | }, 15 | "@id": "id-value", 16 | "createdAt": 1688465655 17 | }, 18 | "transformers": [ 19 | "response-template" 20 | ] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_api_v2_contractnegotiations_id-value__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "GET", 4 | "urlPath": "/edc/api/v2/contractnegotiations/id-value" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | }, 11 | "bodyFileName": "edc/edc_api_v2_contractnegotiations_id-value_response__GET__SUCCESS.json", 12 | "transformers": [ 13 | "response-template" 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_api_v2_contractnegotiations_state__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "GET", 4 | "urlPath": "/edc/api/v2/contractnegotiations/id-value/state" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | }, 11 | "jsonBody": { 12 | "@context": { 13 | "edc": "https://w3id.org/edc/v0.0.1/ns/" 14 | }, 15 | "@type": "https://w3id.org/edc/v0.0.1/ns/NegotiationState", 16 | "edc:state": "FINALIZED" 17 | }, 18 | "transformers": [ 19 | "response-template" 20 | ] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_api_v2_transferprocesses__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "GET", 4 | "urlPath": "/edc/api/v2/transferprocesses/transfer-id" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | }, 11 | "bodyFileName": "edc/edc_api_v2_transferprocesses_response__GET__SUCCESS.json", 12 | "transformers": [ 13 | "response-template" 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_api_v2_transferprocesses__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "POST", 4 | "urlPath": "/edc/api/v2/transferprocesses" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | }, 11 | "bodyFileName" : "edc/edc_api_v2_transferprocesses_response__POST__SUCCESS.json", 12 | "transformers": [ 13 | "response-template" 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_api_v2_transferprocesses_state__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "GET", 4 | "urlPath": "/edc/api/v2/transferprocesses/transfer-id/state" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | }, 11 | "jsonBody": { 12 | "@context": { 13 | "edc": "https://w3id.org/edc/v0.0.1/ns/" 14 | }, 15 | "@type": "https://w3id.org/edc/v0.0.1/ns/TransferState", 16 | "edc:state": "COMPLETED" 17 | }, 18 | "transformers": [ 19 | "response-template" 20 | ] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_management_v2_assets__DELETE__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "priority": 1, 3 | "request": { 4 | "method": "DELETE", 5 | "urlPathPattern": "/edc/management/v3/assets/.*" 6 | }, 7 | "response": { 8 | "status": 200 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_management_v2_assets__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "priority": 10, 3 | "request": { 4 | "method": "POST", 5 | "urlPath": "/edc/management/v3/assets" 6 | }, 7 | "response": { 8 | "status": 200 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_management_v2_contractdefinitions__POST__CONFLICT__ObjectExists.json: -------------------------------------------------------------------------------- 1 | { 2 | "priority": 1, 3 | "request": { 4 | "method": "POST", 5 | "urlPath": "/edc/management/v3/contractdefinitions", 6 | "bodyPatterns": [ 7 | { 8 | "matchesJsonPath": "$.[?(@.@id == 'definition-id-already-exists')]" 9 | } 10 | ] 11 | }, 12 | "response": { 13 | "status": 409, 14 | "jsonBody": [ 15 | { 16 | "message": "Object of type ContractDefinition already exists with ID = {{jsonPath request.body '$.@id'}}", 17 | "type": "ObjectExists", 18 | "path": null, 19 | "invalidValue": null 20 | } 21 | ], 22 | "headers": { 23 | "Content-Type": "application/json" 24 | }, 25 | "transformers": [ 26 | "response-template" 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_management_v2_contractdefinitions__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "priority": 10, 3 | "request": { 4 | "method": "POST", 5 | "urlPath": "/edc/management/v3/contractdefinitions"}, 6 | "response": { 7 | "status": 200, 8 | "jsonBody": { 9 | "@context": { 10 | "edc": "https://w3id.org/edc/v0.0.1/ns/" 11 | }, 12 | "@id": "{{jsonPath request.body '$.@id'}}", 13 | "createdAt": 1688465655 14 | }, 15 | "headers": { 16 | "Content-Type": "application/json" 17 | }, 18 | "transformers": [ 19 | "response-template" 20 | ] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_management_v2_policydefinitions__DELETE__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "priority": 1, 3 | "request": { 4 | "method": "DELETE", 5 | "urlPathPattern": "/edc/management/v3/policydefinitions/.*" 6 | }, 7 | "response": { 8 | "status": 200 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_management_v2_policydefinitions__POST__CONFLICT__ObjectExists.json: -------------------------------------------------------------------------------- 1 | { 2 | "priority": 1, 3 | "request": { 4 | "method": "POST", 5 | "urlPath": "/edc/management/v3/policydefinitions", 6 | "bodyPatterns": [ 7 | { 8 | "matchesJsonPath": "$.[?(@.@id == 'definition-id-already-exists')]" 9 | } 10 | ] 11 | }, 12 | "response": { 13 | "status": 409, 14 | "headers": { 15 | "Content-Type": "application/json" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_management_v2_policydefinitions__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "priority": 10, 3 | "request": { 4 | "method": "POST", 5 | "urlPath": "/edc/management/v3/policydefinitions" 6 | }, 7 | "response": { 8 | "status": 200, 9 | "jsonBody": { 10 | "@context": { 11 | "edc": "https://w3id.org/edc/v0.0.1/ns/" 12 | }, 13 | "@id": "{{jsonPath request.body '$.@id'}}", 14 | "createdAt": 1688465655 15 | }, 16 | "headers": { 17 | "Content-Type": "application/json" 18 | }, 19 | "transformers": [ 20 | "response-template" 21 | ] 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edc/edc_management_v3_assets__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "priority": 10, 3 | "request": { 4 | "method": "POST", 5 | "urlPath": "/edc/management/v3/assets" 6 | }, 7 | "response": { 8 | "status": 200 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/edcdiscovery/edcdiscovery_administration_connectors_discovery__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "POST", 4 | "urlPath": "/EDCDiscovery/administration/connectors/discovery" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "headers": { 9 | "Content-Type": "application/json" 10 | }, 11 | "jsonBody": [ 12 | { 13 | "bpn": "{{jsonPath request.body '$.[0]'}}", 14 | "connectorEndpoint": [ 15 | "{{request.scheme}}://{{request.host}}:{{request.port}}/edc/" 16 | ] 17 | } 18 | ], 19 | "transformers": [ 20 | "response-template" 21 | ] 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/irs/irs_jobs__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "GET", 4 | "urlPathPattern": "/irs/irs/jobs/.*" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "bodyFileName": "irs/irs_jobs_response__GET__SUCCESS.json" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/irs/irs_jobs__POST__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "POST", 4 | "urlPath": "/irs/irs/jobs" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "jsonBody": { 9 | "id": "ebb79c45-7bba-4169-bf17-3e719989ab54" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/irs/irs_policies__DELETE__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "DELETE", 4 | "urlPathPattern": "/irs/irs/policies/([a-zA-Z\\.0-9%]*)" 5 | }, 6 | "response": { 7 | "status": 200 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/irs/irs_policies__GET__SUCCESS.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "GET", 4 | "url": "/irs/irs/policies" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "bodyFileName": "irs/irs_policies_response__GET__SUCCESS.json", 9 | "headers": { 10 | "Content-Type": "application/json" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tx-backend/docker/wiremock/mappings/irs/irs_policies__POST__CREATED.json: -------------------------------------------------------------------------------- 1 | { 2 | "request": { 3 | "method": "POST", 4 | "urlPath": "/irs/irs/policies" 5 | }, 6 | "response": { 7 | "status": 200, 8 | "bodyFileName": "irs/irs_policies_response__POST__SUCCESS.json", 9 | "headers": { 10 | "Content-Type": "application/json" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tx-backend/scripts/LICENSE_HEADER: -------------------------------------------------------------------------------- 1 | Copyright (c) 2023 Contributors to the Eclipse Foundation 2 | 3 | See the NOTICE file(s) distributed with this work for additional 4 | information regarding copyright ownership. 5 | 6 | This program and the accompanying materials are made available under the 7 | terms of the Apache License, Version 2.0 which is available at 8 | https://www.apache.org/licenses/LICENSE-2.0. 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | License for the specific language governing permissions and limitations 14 | under the License. 15 | 16 | SPDX-License-Identifier: Apache-2.0 17 | -------------------------------------------------------------------------------- /tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/model/ImportRequest.java: -------------------------------------------------------------------------------- 1 | package org.eclipse.tractusx.traceability.assets.domain.importpoc.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsSubmodel; 5 | 6 | import java.util.List; 7 | 8 | public record ImportRequest(@JsonProperty("assets") List assets) { 9 | public record AssetImportRequest(@JsonProperty("assetMetaInfo") AssetMetaInfoRequest assetMetaInfoRequest, 10 | @JsonProperty("submodels") List submodels) { 11 | } 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/exception/IrsException.java: -------------------------------------------------------------------------------- 1 | package org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.exception; 2 | 3 | public class IrsException extends RuntimeException { 4 | 5 | public IrsException(String message) { 6 | super(message); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/mapping/AssetBaseMappers.java: -------------------------------------------------------------------------------- 1 | package org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.mapping; 2 | 3 | import org.eclipse.tractusx.traceability.assets.domain.base.model.AssetBase; 4 | 5 | import java.util.List; 6 | 7 | public interface AssetBaseMappers { 8 | List toAssetBaseList(T input); 9 | } 10 | -------------------------------------------------------------------------------- /tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/properties/RegistryProperties.java: -------------------------------------------------------------------------------- 1 | package org.eclipse.tractusx.traceability.common.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | @Configuration 8 | @Data 9 | @ConfigurationProperties("provisioning.registry") 10 | public class RegistryProperties { 11 | private String urlWithPathInternal; 12 | private String urlWithPathExternal; 13 | private String shellDescriptorUrl; 14 | private String allowedBpns; 15 | private String clientId; 16 | private String clientSecret; 17 | private String tokenUrl; 18 | private String oauthProviderRegistrationId; 19 | private String edcAssetId; 20 | private Boolean oauthEnabled; 21 | } 22 | -------------------------------------------------------------------------------- /tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/properties/SubmodelProperties.java: -------------------------------------------------------------------------------- 1 | package org.eclipse.tractusx.traceability.common.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | @Configuration 8 | @Data 9 | @ConfigurationProperties("provisioning.submodel") 10 | public class SubmodelProperties { 11 | private String baseInternal; 12 | private String baseExternal; 13 | private String path; 14 | private String clientId; 15 | private String clientSecret; 16 | private String tokenUrl; 17 | private String oauthProviderRegistrationId; 18 | private Boolean useCustomImplementation; 19 | } 20 | -------------------------------------------------------------------------------- /tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/security/exception/InvalidApiKeyException.java: -------------------------------------------------------------------------------- 1 | package org.eclipse.tractusx.traceability.common.security.exception; 2 | 3 | import org.springframework.http.HttpStatus; 4 | import org.springframework.web.bind.annotation.ResponseStatus; 5 | 6 | @ResponseStatus(HttpStatus.UNAUTHORIZED) 7 | public class InvalidApiKeyException extends RuntimeException { 8 | public InvalidApiKeyException(String message) { 9 | super(message); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/ContractType.java: -------------------------------------------------------------------------------- 1 | package org.eclipse.tractusx.traceability.contracts.domain.model; 2 | 3 | public enum ContractType { 4 | ASSET_AS_PLANNED, ASSET_AS_BUILT, NOTIFICATION; 5 | } 6 | -------------------------------------------------------------------------------- /tx-backend/src/main/java/org/eclipse/tractusx/traceability/cron/domain/Config.java: -------------------------------------------------------------------------------- 1 | package org.eclipse.tractusx.traceability.cron.domain; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | import org.eclipse.tractusx.traceability.configuration.domain.model.OrderConfiguration; 6 | import org.eclipse.tractusx.traceability.configuration.domain.model.TriggerConfiguration; 7 | 8 | @Data 9 | @Builder 10 | public class Config { 11 | private TriggerConfiguration triggerConfiguration; 12 | private OrderConfiguration orderConfiguration; 13 | } 14 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | ,--. ,--. ,--.,--.,--. ,--. 2 | ,-' '-.,--.--.,--,--.,---. ,---. ,--,--.| |-. `--'| |`--',-' '-.,--. ,--. 3 | '-. .-'| .--' ,-. | .--'| .-. :' ,-. || .-. ',--.| |,--.'-. .-' \ ' / 4 | | | | | \ '-' \ `--.\ --.\ '-' || `-' || || || | | | \ ' 5 | `--' `--' `--`--'`---' `----' `--`--' `---' `--'`--'`--' `--' .-' / 6 | `---' 7 | Powered by Spring Boot ${spring-boot.version} 8 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/R__cleanup_notifications.sql: -------------------------------------------------------------------------------- 1 | -- REMOVED AS NO LONGER NEEDED 2 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V10__remove_active_notifications.sql: -------------------------------------------------------------------------------- 1 | /* Delete View with relations to removed fields */ 2 | DROP VIEW assets_as_built_view; 3 | 4 | /* Remove fields which are not needed anymore */ 5 | ALTER TABLE public.assets_as_built DROP COLUMN IF EXISTS active_alert; 6 | ALTER TABLE public.assets_as_built DROP COLUMN IF EXISTS in_investigation; 7 | 8 | ALTER TABLE public.assets_as_planned DROP COLUMN IF EXISTS active_alert; 9 | ALTER TABLE public.assets_as_planned DROP COLUMN IF EXISTS in_investigation; 10 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V11__add_policy_column_to_assets.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE public.assets_as_planned ADD COLUMN "policy_id" varchar(100); 2 | ALTER TABLE public.assets_as_built ADD COLUMN "policy_id" varchar(100); 3 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V13__remove_investigation_alert_asset-as-planned.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE public.asset_as_planned_alert_notifications; 2 | DROP TABLE public.assets_as_planned_alerts; 3 | DROP TABLE public.assets_as_planned_investigations; 4 | DROP TABLE public.assets_as_planned_notifications; 5 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V14__add_tombstone_to_assets.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE assets_as_planned 2 | ADD COLUMN "tombstone" varchar NULL; 3 | ALTER TABLE assets_as_built 4 | ADD COLUMN "tombstone" varchar NULL; 5 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V15__add_contract_agreement_id_and_created_timestamp_to_asset.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE assets_as_planned 2 | ADD COLUMN "contract_agreement_id" varchar(255) NULL; 3 | ALTER TABLE assets_as_built 4 | ADD COLUMN "contract_agreement_id" varchar(255) NULL; 5 | 6 | ALTER TABLE assets_as_planned 7 | ADD COLUMN "created" timestamptz NULL DEFAULT now(); 8 | ALTER TABLE assets_as_built 9 | ADD COLUMN "created" timestamptz NULL DEFAULT now(); 10 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V16__move_errormessage_to_notifications.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE investigation_notification ADD COLUMN error_message varchar; 2 | ALTER TABLE alert_notification ADD COLUMN error_message varchar; 3 | 4 | ALTER TABLE alert DROP COLUMN error_message; 5 | ALTER TABLE investigation DROP COLUMN error_message; 6 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V17__set_30_chars_for_import_state.sql: -------------------------------------------------------------------------------- 1 | DROP VIEW IF EXISTS assets_as_built_view; 2 | ALTER TABLE assets_as_planned ALTER COLUMN import_state TYPE VARCHAR (30); 3 | ALTER TABLE assets_as_built ALTER COLUMN import_state TYPE VARCHAR(30); 4 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V18__remove_fields_from_notificationmessage.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE investigation_notification DROP COLUMN is_initial; 2 | ALTER TABLE alert_notification DROP COLUMN is_initial; 3 | 4 | ALTER TABLE investigation_notification DROP COLUMN edc_url; 5 | ALTER TABLE alert_notification DROP COLUMN edc_url; 6 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V19__remove_shedlock_table.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE public.shedlock; 2 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V21__remove_notification_connection_from_as_planned.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE public.assets_as_planned_notifications; 2 | DROP TABLE public.assets_as_planned_notification_messages; 3 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V22__add_asset_as_built_fk_to_tractionbatterycode.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE traction_battery_code_subcomponent 2 | ADD COLUMN "asset_as_built_id" varchar(255) NULL; 3 | ALTER TABLE traction_battery_code_subcomponent 4 | ADD CONSTRAINT fk_asset_traction_battery_code_subcomponent FOREIGN KEY (asset_as_built_id) REFERENCES assets_as_built (id) on delete cascade; 5 | 6 | ALTER TABLE assets_as_built 7 | DROP COLUMN traction_battery_code CASCADE; 8 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V23__change_notification_model.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE notification 2 | DROP COLUMN IF EXISTS accept_reason, 3 | DROP COLUMN IF EXISTS decline_reason, 4 | DROP COLUMN IF EXISTS close_reason, 5 | ADD COLUMN target_date timestamp NULL, 6 | ADD COLUMN severity varchar(255) NULL; 7 | 8 | ALTER TABLE notification_message 9 | DROP COLUMN IF EXISTS target_date, 10 | DROP COLUMN IF EXISTS severity, 11 | ADD COLUMN message varchar(1000) NULL; 12 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V24__change_notification_model.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE notification 2 | ADD COLUMN initial_receiver_bpn varchar(255) NULL; 3 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V25__create_contract_agreements.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS contract_agreement ( 2 | id VARCHAR(255) PRIMARY KEY, 3 | contract_agreement_id VARCHAR(255), 4 | type VARCHAR(255), 5 | created TIMESTAMP 6 | ); 7 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V27__add_contract_agreements_to_ref_tables.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE contract_agreement_as_built 2 | ADD COLUMN global_asset_id varchar; 3 | 4 | ALTER TABLE contract_agreement_as_planned 5 | ADD COLUMN global_asset_id varchar; 6 | 7 | ALTER TABLE contract_agreement_notification 8 | ADD COLUMN global_asset_id varchar; 9 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V28__add_digital_twin_type_to_asset_base.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE assets_as_built 2 | ADD COLUMN digital_twin_type varchar; 3 | 4 | ALTER TABLE assets_as_planned 5 | ADD COLUMN digital_twin_type varchar; 6 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V29__add_digital_twin_type_to_existing_assets.sql: -------------------------------------------------------------------------------- 1 | UPDATE public.assets_as_built 2 | SET digital_twin_type = 3 | CASE 4 | WHEN semantic_data_model = 'SERIALPART' 5 | OR semantic_data_model = 'JUSTINSEQUENCE' 6 | OR semantic_data_model = 'BATCH' THEN 'partInstance' 7 | END 8 | WHERE digital_twin_type IS NULL; 9 | 10 | UPDATE public.assets_as_planned 11 | SET digital_twin_type = 12 | CASE 13 | WHEN semantic_data_model = 'PARTASPLANNED' 14 | THEN 'partType' 15 | END 16 | WHERE digital_twin_type IS NULL; 17 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V32__clean_up_and_refactor_contractAgreementIds.sql: -------------------------------------------------------------------------------- 1 | DELETE 2 | from contract_agreement_as_built 3 | WHERE contract_agreement_id is null; 4 | DELETE 5 | from contract_agreement_as_planned 6 | WHERE contract_agreement_id is null; 7 | DELETE 8 | from contract_agreement_notification 9 | WHERE contract_agreement_id is null; 10 | 11 | 12 | ALTER TABLE contract_agreement_as_built 13 | ALTER COLUMN contract_agreement_id SET NOT NULL; 14 | ALTER TABLE contract_agreement_as_planned 15 | ALTER COLUMN contract_agreement_id SET NOT NULL; 16 | ALTER TABLE contract_agreement_notification 17 | ALTER COLUMN contract_agreement_id SET NOT NULL; 18 | 19 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V33__drop_submodel_table.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE public.submodel; 2 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V35__add_order_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE public.orders 2 | ( 3 | id bigint primary key not null, 4 | status varchar(11), 5 | message text, 6 | created_at timestamptz, 7 | updated_at timestamptz 8 | ); 9 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V36__add_order_configuration.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE public.order_configuration 2 | ( 3 | id bigserial primary key not null, 4 | order_id bigint, 5 | batch_size integer, 6 | timeout_ms integer, 7 | job_timeout_ms integer, 8 | created_at timestamptz, 9 | updated_at timestamptz, 10 | constraint fk_order_configuration_order foreign key (order_id) references public.orders (id) 11 | ); 12 | 13 | insert into public.order_configuration (batch_size, timeout_ms, job_timeout_ms, created_at, updated_at) values ( 100, 1800000, 1800000, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); 14 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V38__change_order_id_type.sql: -------------------------------------------------------------------------------- 1 | alter table public.order_configuration drop constraint fk_order_configuration_order; 2 | alter table public.orders alter column id type varchar(255); 3 | alter table public.order_configuration alter column order_id type varchar(255); 4 | alter table public.order_configuration add constraint fk_order_configuration_order foreign key (order_id) references public.orders (id); 5 | 6 | delete from public.trigger_configuration; 7 | insert into public.trigger_configuration (cron_expression_register_order_ttl_reached, cron_expression_map_completed_orders, part_ttl, aas_ttl, created_at, updated_at) 8 | values ('0 */4 * * * *', '0 */4 * * * *', 2629536, 2629536, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); 9 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V39__move_fkeys_between_orders_and_orders_configuration.sql: -------------------------------------------------------------------------------- 1 | alter table public.orders add column order_configuration_id varchar(255); 2 | 3 | alter table public.order_configuration drop constraint fk_order_configuration_order; 4 | alter table public.order_configuration drop column order_id; 5 | 6 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V3__change_notification_severity_to_varchar.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE investigation_notification DROP COLUMN severity; 2 | ALTER TABLE investigation_notification ADD COLUMN severity varchar(255) NULL; 3 | ALTER TABLE alert_notification DROP COLUMN severity; 4 | ALTER TABLE alert_notification ADD COLUMN severity varchar(255) NULL; 5 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V40__change_default_order_configuration.sql: -------------------------------------------------------------------------------- 1 | update public.order_configuration set timeout_ms = 86400 where id = 1; 2 | update public.order_configuration set job_timeout_ms = 7200 where id = 1; 3 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V41__extend_trigger_configuration.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE trigger_configuration 2 | ADD COLUMN cron_expression_aas_cleanup_ttl_reached text; 3 | 4 | ALTER TABLE trigger_configuration 5 | ADD COLUMN cron_expression_aas_lookup_ttl_reached text; 6 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V42__insert_new_fields_trigger_configuration.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE trigger_configuration 2 | ADD COLUMN aas_limit integer; 3 | 4 | UPDATE public.trigger_configuration 5 | SET cron_expression_aas_cleanup_ttl_reached = '0 1 * * *', 6 | cron_expression_aas_lookup_ttl_reached = '0 3 * * *', 7 | aas_limit = 1000 8 | WHERE id = 1; 9 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V43__create_new_fields_trigger_configuration_publish_cron.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE trigger_configuration 2 | ADD COLUMN cron_expression_publish_assets text; 3 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V44__add_order_id_to_assets.sql: -------------------------------------------------------------------------------- 1 | alter table public.assets_as_built 2 | add column order_id varchar(255); 3 | 4 | alter table public.assets_as_built add constraint fk_assets_as_built_order foreign key (order_id) references public.orders (id); 5 | 6 | alter table public.assets_as_planned 7 | add column order_id varchar(255); 8 | 9 | alter table public.assets_as_built add constraint fk_assets_as_planned_order foreign key (order_id) references public.orders (id); 10 | 11 | alter table public.orders drop column order_configuration_id; 12 | alter table public.orders add column order_configuration_id bigint; 13 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V45__change_default_cron_expressions.sql: -------------------------------------------------------------------------------- 1 | UPDATE public.trigger_configuration 2 | SET cron_expression_aas_cleanup_ttl_reached = null, 3 | cron_expression_aas_lookup_ttl_reached = null, 4 | cron_expression_map_completed_orders = null, 5 | cron_expression_publish_assets = null, 6 | cron_expression_register_order_ttl_reached = null 7 | WHERE id = 2; 8 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V46__change_default_latest_cron_expressions.sql: -------------------------------------------------------------------------------- 1 | UPDATE public.trigger_configuration 2 | SET cron_expression_aas_cleanup_ttl_reached = null, 3 | cron_expression_aas_lookup_ttl_reached = null, 4 | cron_expression_map_completed_orders = null, 5 | cron_expression_publish_assets = null, 6 | cron_expression_register_order_ttl_reached = null 7 | WHERE id = (SELECT last_value FROM public.trigger_configuration_id_seq); 8 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V47__create_batches_entity.sql: -------------------------------------------------------------------------------- 1 | -- V3__create_batches_table.sql 2 | 3 | CREATE TABLE public.batches ( 4 | id VARCHAR PRIMARY KEY, 5 | batch_id VARCHAR(255), 6 | status VARCHAR(50), 7 | order_id VARCHAR NOT NULL, 8 | CONSTRAINT fk_order FOREIGN KEY (order_id) REFERENCES public.orders(id) ON DELETE CASCADE 9 | ); 10 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V48__remove_fks_constraints_from_aas_table.sql: -------------------------------------------------------------------------------- 1 | alter table public.aas drop constraint fk_asset_as_built; 2 | alter table public.aas drop constraint fk_asset_as_planned; 3 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V49__add_fetch_limit_to_trigger_config.sql: -------------------------------------------------------------------------------- 1 | alter table public.trigger_configuration add column fetch_limit integer default 500; 2 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V4__add_manufacturer_id_to_assets_as_planned.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE assets_as_planned ADD COLUMN manufacturer_id varchar(255) NULL; 2 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V5__add_assetState_to_assets.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE assets_as_planned ADD COLUMN "import_state" varchar(25) NOT NULL; 2 | ALTER TABLE assets_as_built ADD COLUMN "import_state" varchar(25) NOT NULL; 3 | ALTER TABLE assets_as_planned ADD COLUMN "import_note" varchar(100); 4 | ALTER TABLE assets_as_built ADD COLUMN "import_note" varchar(100); 5 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V8__change_submodelPayload.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE public.assets_as_built_submodel_payload; 2 | DROP TABLE public.assets_as_planned_submodel_payload; 3 | Drop TABLE public.submodel_payload; 4 | 5 | -- public.submodel_payload definition 6 | 7 | -- Drop table 8 | 9 | -- Drop TABLE public.submodel_payload 10 | 11 | CREATE TABLE public.submodel_payload 12 | ( 13 | id VARCHAR(255) NOT NULL, 14 | json VARCHAR NULL, 15 | aspect_type VARCHAR(255), 16 | asset_as_built_id VARCHAR(255) NULL, 17 | asset_as_planned_id VARCHAR(255) NULL, 18 | CONSTRAINT submodel_payload_pkey PRIMARY KEY (id), 19 | CONSTRAINT fk_asset_as_built FOREIGN KEY (asset_as_built_id) REFERENCES public.assets_as_built (id), 20 | CONSTRAINT fk_asset_as_planned FOREIGN KEY (asset_as_planned_id) REFERENCES public.assets_as_planned (id) 21 | ); 22 | -------------------------------------------------------------------------------- /tx-backend/src/main/resources/db/migration/V9__remove_shell_descriptors.sql: -------------------------------------------------------------------------------- 1 | DROP SEQUENCE shell_descriptor_id_seq; 2 | 3 | DELETE FROM shell_descriptor; 4 | DROP TABLE shell_descriptor; 5 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/banner.txt: -------------------------------------------------------------------------------- 1 | ,--. ,--. ,--.,--.,--. ,--. ,--. ,--. 2 | ,-' '-.,--.--.,--,--.,---. ,---. ,--,--.| |-. `--'| |`--',-' '-.,--. ,--.,-----.,-' '-. ,---. ,---.,-' '-. 3 | '-. .-'| .--' ,-. | .--'| .-. :' ,-. || .-. ',--.| |,--.'-. .-' \ ' / '-----''-. .-'| .-. :( .-''-. .-' 4 | | | | | \ '-' \ `--.\ --.\ '-' || `-' || || || | | | \ ' | | \ --..-' `) | | 5 | `--' `--' `--`--'`---' `----' `--`--' `---' `--'`--'`--' `--' .-' / `--' `----'`----' `--' 6 | `---' 7 | ${application.title} ${application.version} 8 | Powered by Spring Boot ${spring-boot.version} 9 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/bpdm/response_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "bpnl" : "BPNL000000012345", 3 | "legalName" : "OEM A", 4 | "legalShortName" : "OEM A Short" 5 | } 6 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/discovery.post.data/discovery_finder_connector_response_200.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "bpn" : "BPNL00000003CNKC", 4 | "connectorEndpoint" : [ 5 | "${Placeholder}" 6 | ] 7 | } 8 | ] 9 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/discovery.post.data/discovery_finder_connector_response_200_AXS3.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "bpn" : "BPNL00000003AXS3", 4 | "connectorEndpoint" : [ 5 | "${Placeholder}" 6 | ] 7 | } 8 | ] 9 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/discovery.post.data/discovery_finder_response_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "endpoints" : [ 3 | { 4 | "type" : "bpnl", 5 | "description" : "Service to discover EDC to a particular BPN", 6 | "endpointAddress" : "${Placeholder}", 7 | "documentation" : "http://.../swagger/index.html", 8 | "resourceId" : "316417cd-0fb5-4daf-8dfa-8f68125923f1" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/edc/post/data/contractagreements/contractnegotiation_response_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type": "IdResponse", 3 | "@id": "8afcbabd-71c2-44a6-ba52-72465517f376", 4 | "createdAt": 1716296200620, 5 | "@context": { 6 | "@vocab": "https://w3id.org/edc/v0.0.1/ns/", 7 | "edc": "https://w3id.org/edc/v0.0.1/ns/", 8 | "tx": "https://w3id.org/tractusx/v0.0.1/ns/", 9 | "tx-auth": "https://w3id.org/tractusx/auth/", 10 | "cx-policy": "https://w3id.org/catenax/policy/", 11 | "odrl": "http://www.w3.org/ns/odrl/2/" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/edc/post/data/contractagreements/contractnegotiationonlystate_response_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type": "NegotiationState", 3 | "state": "FINALIZED", 4 | "@context": { 5 | "@vocab": "https://w3id.org/edc/v0.0.1/ns/", 6 | "edc": "https://w3id.org/edc/v0.0.1/ns/", 7 | "tx": "https://w3id.org/tractusx/v0.0.1/ns/", 8 | "tx-auth": "https://w3id.org/tractusx/auth/", 9 | "cx-policy": "https://w3id.org/catenax/policy/", 10 | "odrl": "http://www.w3.org/ns/odrl/2/" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/edc/post/data/contractagreements/lookupshells_response_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "result": [ 3 | "urn:uuid:9a0fdf20-f2f1-4509-9c40-d4ca9ce63bc8", 4 | "urn:uuid:c31072c5-997d-4d13-bb2d-1a6815d9e5df", 5 | "urn:uuid:6c8cb0d8-6a08-423a-b764-0eead23ef3d4", 6 | "urn:uuid:03c35da6-ad06-476b-85b8-89f69b7eb5cb", 7 | "urn:uuid:719fe1bb-9e52-4534-82b5-1dc24203e63e", 8 | "urn:uuid:70940a38-a66a-40d6-9884-534fac7a56c0", 9 | "urn:uuid:29ee8b16-19d5-40ee-9c5f-bc25cf0ee527", 10 | "urn:uuid:b6f2d4bb-ed0d-4fcf-a839-856235c0cf0f", 11 | "urn:uuid:91adaa05-f893-41b9-b5a0-d278eeba105e", 12 | "urn:uuid:4b740034-76f1-46e0-b167-3546b175fe0a", 13 | "urn:uuid:29a2375d-b545-4648-9706-c38732fe2222" 14 | ], 15 | "paging_metadata": { 16 | "cursor": "dXJuOnV1aWQ6NzczZjkyNDEtMjgxZS00NzM0LTg5MjMtMDk3ZDgyZTUwMmU5" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/edc/post/data/contractagreements/transferprocesses_response_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type": "IdResponse", 3 | "@id": "ea7e9226-e2b6-4fd0-a34e-4a9121c6e30f", 4 | "createdAt": 1716299185639, 5 | "@context": { 6 | "@vocab": "https://w3id.org/edc/v0.0.1/ns/", 7 | "edc": "https://w3id.org/edc/v0.0.1/ns/", 8 | "tx": "https://w3id.org/tractusx/v0.0.1/ns/", 9 | "tx-auth": "https://w3id.org/tractusx/auth/", 10 | "cx-policy": "https://w3id.org/catenax/policy/", 11 | "odrl": "http://www.w3.org/ns/odrl/2/" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/edc/post/data/contractagreements/transferprocessesonlystate_response_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "@type": "TransferState", 3 | "state": "STARTED", 4 | "@context": { 5 | "@vocab": "https://w3id.org/edc/v0.0.1/ns/", 6 | "edc": "https://w3id.org/edc/v0.0.1/ns/", 7 | "tx": "https://w3id.org/tractusx/v0.0.1/ns/", 8 | "tx-auth": "https://w3id.org/tractusx/auth/", 9 | "cx-policy": "https://w3id.org/catenax/policy/", 10 | "odrl": "http://www.w3.org/ns/odrl/2/" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/irs/order/response_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "batchId": "ebb79c45-7bba-4169-bf17-3e719989ab55", 3 | "batchNumber": 1, 4 | "batchProcessingState": "COMPLETED", 5 | "batchTotal": 1, 6 | "completedOn": "2024-05-29T07:56:04.716574102Z", 7 | "jobs": [ 8 | { 9 | "completedOn": "2024-05-29T07:56:04.716574102Z", 10 | "id": "ebb79c45-7bba-4169-bf17-3e719989ab54", 11 | "startedOn": "2024-05-29T07:56:04.716574102Z", 12 | "state": "COMPLETED" 13 | } 14 | ], 15 | "jobsInBatchChecksum": 1, 16 | "orderId": "ebb79c45-7bba-4169-bf17-3e719989ab54", 17 | "startedOn": "2024-05-29T07:56:04.716574102Z", 18 | "totalJobs": 1 19 | } 20 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/irs/order/response_200_asplanned.json: -------------------------------------------------------------------------------- 1 | { 2 | "batchId": "ebb79c45-7bba-4169-bf17-3e719989ab58", 3 | "batchNumber": 1, 4 | "batchProcessingState": "COMPLETED", 5 | "batchTotal": 1, 6 | "completedOn": "2024-05-29T07:56:04.716574102Z", 7 | "jobs": [ 8 | { 9 | "completedOn": "2024-05-29T07:56:04.716574102Z", 10 | "id": "ebb79c45-7bba-4169-bf17-SUCCESSFUL_AS_PLANNED", 11 | "startedOn": "2024-05-29T07:56:04.716574102Z", 12 | "state": "COMPLETED" 13 | } 14 | ], 15 | "jobsInBatchChecksum": 1, 16 | "orderId": "ebb79c45-7bba-4169-bf17-3e719989ab57", 17 | "startedOn": "2024-05-29T07:56:04.716574102Z", 18 | "totalJobs": 1 19 | } 20 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/irs/order/response_200_asplanned_nojobs.json: -------------------------------------------------------------------------------- 1 | { 2 | "batchId": "ebb79c45-7bba-4169-bf17-3e719989ab52", 3 | "batchNumber": 1, 4 | "batchProcessingState": "COMPLETED", 5 | "batchTotal": 1, 6 | "completedOn": "2024-05-29T07:56:04.716574102Z", 7 | "jobs": [], 8 | "jobsInBatchChecksum": 0, 9 | "orderId": "ebb79c45-7bba-4169-bf17-3e719989ab51", 10 | "startedOn": "2024-05-29T07:56:04.716574102Z", 11 | "totalJobs": 0 12 | } 13 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/irs/policies/response_200_createPolicy.json: -------------------------------------------------------------------------------- 1 | { 2 | "policyId": "default-policy3342" 3 | } 4 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/irs/policies/response_400_createPolicy.json: -------------------------------------------------------------------------------- 1 | { 2 | "statusCode": "BAD_REQUEST", 3 | "error": "Bad Request", 4 | "messages": [ 5 | "Policy with id 'default-policy3342' already exists!" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/irs/policies/response_400_get_policyById.json: -------------------------------------------------------------------------------- 1 | { 2 | "statusCode": "BAD_REQUEST", 3 | "error": "Bad Request", 4 | "messages": [ 5 | "Request does not contain all required fields. Missing: odrl:permission" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/irs/policies/response_404_get_policyById.json: -------------------------------------------------------------------------------- 1 | { 2 | "statusCode": "NOT_FOUND", 3 | "error": "Not Found", 4 | "messages": [ 5 | "Policy with id 'd94e46a0-2aa2-4f62-a854-a5bc7013c78b' not found" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/irs/post/jobs/response_200.json: -------------------------------------------------------------------------------- 1 | { 2 | "id" : "ebb79c45-7bba-4169-bf17-3e719989ab54" 3 | } 4 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/stubs/oauth/post/auth/realms/CX-Central/protocol/openid-connect/token/response_401.json: -------------------------------------------------------------------------------- 1 | { 2 | "error" : "unauthorized_client", 3 | "error_description" : "Invalid client secret" 4 | } 5 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/testdata/edc_alert_okay.json: -------------------------------------------------------------------------------- 1 | { 2 | "header" : { 3 | "notificationId" : "cda2d956-fa91-4a75-bb4a-8e5ba39b268a", 4 | "senderBPN" : "BPNL00000003AXS3", 5 | "senderAddress" : "https://some-url.com", 6 | "recipientBPN" : "BPNL00000003AXS3", 7 | "classification" : "QM-Alert", 8 | "severity" : "CRITICAL", 9 | "relatedNotificationId" : "", 10 | "status" : "SENT", 11 | "targetDate" : "2099-03-11T22:44:06.333826952Z" 12 | }, 13 | "content" : { 14 | "information" : "Some long description", 15 | "listOfAffectedItems" : [ 16 | "urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/testdata/edc_alert_okay_update.json: -------------------------------------------------------------------------------- 1 | { 2 | "header" : { 3 | "notificationId" : "cda2d956-fa91-4a75-bb4a-8e5ba39b268a", 4 | "senderBPN" : "BPNL00000003AXS3", 5 | "senderAddress" : "https://some-url.com", 6 | "recipientBPN" : "BPNL00000003AXS3", 7 | "classification" : "QM-Alert", 8 | "severity" : "CRITICAL", 9 | "relatedNotificationId" : "REPLACE_ME", 10 | "status" : "ACKNOWLEDGED", 11 | "targetDate" : "2099-03-11T22:44:06.333826952Z" 12 | }, 13 | "content" : { 14 | "information" : "Some long description", 15 | "listOfAffectedItems" : [ 16 | "urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/testdata/edc_notification_classification_unsupported.json: -------------------------------------------------------------------------------- 1 | { 2 | "header" : { 3 | "notificationId" : "cda2d956-fa91-4a75-bb4a-8e5ba39b268a", 4 | "senderBPN" : "BPNL00000003AXS3", 5 | "senderAddress" : "https://some-url.com", 6 | "recipientBPN" : "BPNL00000003AXS3", 7 | "classification" : "UNSUPPORTED", 8 | "severity" : "CRITICAL", 9 | "relatedNotificationId" : "", 10 | "status" : "SENT", 11 | "targetDate" : "2099-03-11T22:44:06.333826952Z" 12 | }, 13 | "content" : { 14 | "information" : "Some long description", 15 | "listOfAffectedItems" : [ 16 | "urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/testdata/edc_notification_okay.json: -------------------------------------------------------------------------------- 1 | { 2 | "header" : { 3 | "notificationId" : "cda2d956-fa91-4a75-bb4a-8e5ba39b268a", 4 | "senderBPN" : "BPNL00000003AXS3", 5 | "senderAddress" : "https://some-url.com", 6 | "recipientBPN" : "BPNL00000003AXS3", 7 | "classification" : "QM-Investigation", 8 | "severity" : "CRITICAL", 9 | "relatedNotificationId" : "", 10 | "status" : "SENT", 11 | "targetDate" : "2099-03-11T22:44:06.333826952Z" 12 | }, 13 | "content" : { 14 | "information" : "Some long description", 15 | "listOfAffectedItems" : [ 16 | "urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/testdata/edc_notification_okay_update.json: -------------------------------------------------------------------------------- 1 | { 2 | "header" : { 3 | "notificationId" : "cda2d956-fa91-4a75-bb4a-8e5ba39b268a", 4 | "senderBPN" : "BPNL00000003AXB3", 5 | "senderAddress" : "https://some-url.com", 6 | "recipientBPN" : "BPNL00000003AXS3", 7 | "severity" : "CRITICAL", 8 | "relatedNotificationId" : "REPLACE_ME", 9 | "status" : "ACKNOWLEDGED", 10 | "targetDate" : "2099-03-11T22:44:06.333826952Z" 11 | }, 12 | "content" : { 13 | "information" : "Some long description" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/testdata/edc_notification_with_unknown_fields.json: -------------------------------------------------------------------------------- 1 | { 2 | "unknown-key" : { 3 | "unknown-field-1" : "some text" 4 | }, 5 | "header" : { 6 | "notificationId" : "cda2d956-fa91-4a75-bb4a-8e5ba39b268a", 7 | "senderBPN" : "BPNL00000003AXS3", 8 | "senderAddress" : "https://some-url.com", 9 | "recipientBPN" : "BPNL00000003AXS3", 10 | "classification" : "QM-Investigation", 11 | "severity" : "CRITICAL", 12 | "relatedNotificationId" : "", 13 | "status" : "SENT", 14 | "targetDate" : "", 15 | "unknown-field-2" : "some text" 16 | }, 17 | "content" : { 18 | "unknown-field-3" : "some text", 19 | "information" : "Some long description", 20 | "listOfAffectedItems" : [ 21 | "urn:uuid:171fed54-26aa-4848-a025-81aaca557f37" 22 | ] 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tx-backend/src/test/resources/testdata/edc_notification_wrong_bpn.json: -------------------------------------------------------------------------------- 1 | { 2 | "header" : { 3 | "notificationId" : "cda2d956-fa91-4a75-bb4a-8e5ba39b268a", 4 | "senderBPN" : "NOT_OK", 5 | "senderAddress" : "https://some-url.com", 6 | "recipientBPN" : "NOT_OK", 7 | "classification" : "QM-Investigation", 8 | "severity" : "CRITICAL", 9 | "relatedNotificationId" : "", 10 | "status" : "SENT", 11 | "targetDate" : "2099-03-11T22:44:06.333826952Z" 12 | }, 13 | "content" : { 14 | "information" : "Some long description", 15 | "listOfAffectedItems" : [ 16 | "urn:uuid:d387fa8e-603c-42bd-98c3-4d87fef8d2bb" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tx-backend/testdata/database_dumps/database_dump_a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/tx-backend/testdata/database_dumps/database_dump_a -------------------------------------------------------------------------------- /tx-backend/testdata/database_dumps/database_dump_b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/4cbf377f90eb5336d3bcded5885695d311d6e80a/tx-backend/testdata/database_dumps/database_dump_b -------------------------------------------------------------------------------- /tx-cucumber-tests/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | KEYCLOAK_HOST 2 | SUPERVISOR_CLIENT_ID 3 | SUPERVISOR_PASSWORD 4 | E2E_TXA_HOST 5 | E2E_TXB_HOST 6 | -------------------------------------------------------------------------------- /tx-gatling-tests/src/test/resources/requests/post_asset_synchronization.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request" : { 4 | "globalAssetIds" : [ 5 | "urn:uuid:44347dec-21d1-47aa-b2a7-f959bf9d424b", 6 | "urn:uuid:44347dec-21d1-47aa-b2a7-f959bf9d424b" 7 | ] 8 | } 9 | }, 10 | { 11 | "request" : { 12 | "globalAssetIds" : [ 13 | "urn:uuid:44347dec-21d1-47aa-b2a7-f959bf9d424b", 14 | "urn:uuid:44347dec-21d1-47aa-b2a7-f959bf9d424b" 15 | ] 16 | } 17 | } 18 | ] 19 | -------------------------------------------------------------------------------- /tx-gatling-tests/src/test/resources/requests/post_notifications.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "request" : { 4 | "affectedPartIds" : [ 5 | "urn:uuid:4e390dab-707f-446e-bfbe-653f6f5b1f37" 6 | ], 7 | "description" : "This is autogenerated by Gatling load tests", 8 | "severity" : "MINOR", 9 | "receiverBpn" : "BPNL00000001ABC2", 10 | "type" : "ALERT", 11 | "title" : "load test notification", 12 | "targetDate" : null 13 | } 14 | } 15 | ] 16 | -------------------------------------------------------------------------------- /tx-models/src/main/java/configuration/util/BatchSizeValidator.java: -------------------------------------------------------------------------------- 1 | package configuration.util; 2 | 3 | import jakarta.validation.ConstraintValidator; 4 | import jakarta.validation.ConstraintValidatorContext; 5 | 6 | public class BatchSizeValidator implements ConstraintValidator { 7 | @Override 8 | public boolean isValid(Integer value, ConstraintValidatorContext context) { 9 | return value != null && value % 10 == 0; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tx-models/src/main/java/configuration/util/CronValidator.java: -------------------------------------------------------------------------------- 1 | package configuration.util; 2 | 3 | import jakarta.validation.ConstraintValidator; 4 | import jakarta.validation.ConstraintValidatorContext; 5 | import org.springframework.scheduling.support.CronExpression; 6 | 7 | public class CronValidator implements ConstraintValidator { 8 | @Override 9 | public boolean isValid(String value, ConstraintValidatorContext context) { 10 | return value == null || CronExpression.isValidExpression(value); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tx-models/src/main/java/configuration/util/ValidBatchSize.java: -------------------------------------------------------------------------------- 1 | package configuration.util; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | import java.lang.annotation.Documented; 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Documented 12 | @Constraint(validatedBy = BatchSizeValidator.class) 13 | @Target({ElementType.FIELD}) 14 | @Retention(RetentionPolicy.RUNTIME) 15 | public @interface ValidBatchSize { 16 | String message() default "BatchSize must be one of: 10, 20, ..., 100"; 17 | Class[] groups() default {}; 18 | Class[] payload() default {}; 19 | } 20 | -------------------------------------------------------------------------------- /tx-models/src/main/java/configuration/util/ValidCron.java: -------------------------------------------------------------------------------- 1 | package configuration.util; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | import java.lang.annotation.Documented; 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Documented 12 | @Constraint(validatedBy = CronValidator.class) 13 | @Target({ElementType.FIELD}) 14 | @Retention(RetentionPolicy.RUNTIME) 15 | public @interface ValidCron { 16 | String message() default "Cron expression is not valid."; 17 | Class[] groups() default {}; 18 | Class[] payload() default {}; 19 | } 20 | -------------------------------------------------------------------------------- /tx-models/src/main/java/contract/response/ContractTypeResponse.java: -------------------------------------------------------------------------------- 1 | package contract.response; 2 | 3 | public enum ContractTypeResponse { 4 | ASSET_AS_PLANNED, ASSET_AS_BUILT, NOTIFICATION; 5 | } 6 | -------------------------------------------------------------------------------- /tx-models/src/main/java/digitaltwinpart/SearchableDigitalTwinPartRequest.java: -------------------------------------------------------------------------------- 1 | package digitaltwinpart; 2 | 3 | import jakarta.validation.constraints.NotBlank; 4 | import jakarta.validation.constraints.NotNull; 5 | import lombok.Data; 6 | 7 | @Data 8 | public class SearchableDigitalTwinPartRequest { 9 | 10 | @NotBlank 11 | private String fieldName; 12 | 13 | private String startWith; 14 | 15 | @NotNull 16 | private Integer size; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tx-models/src/test/java/assets/request/SearchableAssetsRequestTest.java: -------------------------------------------------------------------------------- 1 | package assets.request; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import static org.assertj.core.api.Assertions.assertThat; 6 | 7 | class SearchableAssetsRequestTest { 8 | @Test 9 | void givenNoSizeGiven_whenConstructingRecord_thenHasDefaultSizeValue() { 10 | // given 11 | SearchableAssetsRequest request = new SearchableAssetsRequest("", null, null, null, null); 12 | 13 | // then 14 | assertThat(request.size()).isEqualTo(200); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tx-models/src/test/java/notification/request/SearchableNotificationsRequestTest.java: -------------------------------------------------------------------------------- 1 | package notification.request; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import static org.assertj.core.api.Assertions.assertThat; 6 | 7 | class SearchableNotificationsRequestTest { 8 | @Test 9 | void givenNoSizeGiven_whenConstructingRecord_thenHasDefaultSizeValue() { 10 | // given 11 | SearchableNotificationsRequest request = new SearchableNotificationsRequest("", null, null, null); 12 | 13 | // then 14 | assertThat(request.size()).isEqualTo(200); 15 | } 16 | } 17 | --------------------------------------------------------------------------------