├── .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 | = 1000000 && value <= 99999999">{{'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 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ag.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/am.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/at.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ax.svg:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/az.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bb.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bd.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/be.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bf.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bg.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bh.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bj.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bl.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bq.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bs.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bv.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/bw.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ca.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/cd.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/cf.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/cg.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ch.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ci.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/cl.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/cn.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/co.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/cr.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/cu.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/cw.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/cz.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/de.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/dj.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/dk.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/dz.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ee.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/es-ca.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/fi.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/fm.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/fo.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/fr.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ga.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gb-eng.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gb-sct.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gb.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gf.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gg.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gh.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gl.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gm.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gn.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gp.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/gy.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/hu.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/id.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ie.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/is.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/it.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/jm.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/jo.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/jp.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/kw.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/la.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/lc.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/lr.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/lt.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/lu.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/lv.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ly.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ma.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/mc.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/mf.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/mg.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/mh.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/mk.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ml.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/mq.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/mr.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/mu.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/mv.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ne.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ng.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/nl.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/no.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/nr.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/pa.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/pk.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/pl.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/pm.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/pr.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ps.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/pw.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/qa.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/re.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ro.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ru.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/rw.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/sc.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/sd.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/se.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/sj.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/sl.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/sn.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/so.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/sr.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ss.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/sy.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/td.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/tg.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/th.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/tk.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/tl.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/tn.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/to.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/tr.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/tt.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/tz.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ua.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/vc.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/vn.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/wf.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ws.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/ye.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/frontend/src/assets/images/flags/4x3/yt.svg:
--------------------------------------------------------------------------------
1 |
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 extends Payload>[] 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 extends Payload>[] 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 |
--------------------------------------------------------------------------------