# prakhar2275/sw360 architecture

> Architecture diagram of the GitHub repository prakhar2275/sw360, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/prakhar2275/sw360
- Repository: https://github.com/prakhar2275/sw360

## Overview

SW360 is a software component catalogue for managing projects, products, components, releases, and their metadata. A typical integration enters through the REST API, which exposes project and release services and delegates backend operations to Thrift services; backend data is stored in CouchDB. The repository also contains distinct license/SPDX, vulnerability, moderation, attachment, and identity capabilities. The graph uses README-level architecture statements and the sampled source/index; several feature-level runtime connections are therefore omitted rather than inferred.

Main entry points: [`rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver`](https://github.com/prakhar2275/sw360/tree/main/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver) (REST API), [`libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/cloudantclient/DatabaseConnectorCloudant.java`](https://github.com/prakhar2275/sw360/blob/main/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/cloudantclient/DatabaseConnectorCloudant.java) (CouchDB), [`rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java`](https://github.com/prakhar2275/sw360/blob/main/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java) (Project service), [`rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/release/Sw360ReleaseService.java`](https://github.com/prakhar2275/sw360/blob/main/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/release/Sw360ReleaseService.java) (Release service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and services"]
  node_rest["REST API"]
  node_project_service["Project service"]
  node_release_service["Release service"]
  node_thrift["Thrift services"]
end

subgraph group_catalog["Catalogue management"]
  node_components["Components"]
  node_projects["Projects"]
  node_packages["Packages"]
  node_attachments["Attachments"]
end

subgraph group_governance["Licensing and governance"]
  node_license_info["License information"]
  node_spdx["SPDX documents"]
  node_vulnerabilities["Vulnerabilities"]
  node_moderation["Moderation"]
end

subgraph group_platform["Shared data and identity"]
  node_database[("CouchDB")]
  node_search["Search<br/>[SearchHandler.java]"]
  node_permissions["Permissions"]
  node_keycloak_users["Keycloak user access"]
end

node_external(("External integrator"))
node_external_cve["CVE search service"]

node_external -->|"calls API"| node_rest
node_rest -.->|"exposes projects"| node_project_service
node_rest -.->|"exposes releases"| node_release_service
node_project_service -->|"uses Thrift"| node_thrift
node_release_service -->|"uses Thrift"| node_thrift
node_thrift -.->|"stores metadata"| node_database
node_keycloak_users -->|"reads users"| node_database
node_external -->|"calls services"| node_thrift
node_external -->|"data persisted"| node_database
node_thrift -.->|"serves catalogue"| node_components
node_thrift -.->|"serves projects"| node_projects
node_thrift -.->|"serves packages"| node_packages
node_thrift -.->|"serves attachments"| node_attachments
node_thrift -.->|"serves license data"| node_license_info
node_thrift -.->|"serves SPDX"| node_spdx
node_thrift -.->|"serves vulnerability data"| node_vulnerabilities
node_thrift -.->|"serves moderation"| node_moderation
node_thrift -.->|"serves search"| node_search
node_thrift -.->|"checks access"| node_permissions
node_vulnerabilities -.->|"queries CVEs"| node_external_cve

click node_rest "https://github.com/prakhar2275/sw360/tree/main/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver"
click node_project_service "https://github.com/prakhar2275/sw360/blob/main/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java"
click node_release_service "https://github.com/prakhar2275/sw360/blob/main/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/release/Sw360ReleaseService.java"
click node_components "https://github.com/prakhar2275/sw360/blob/main/backend/components/src/main/java/org/eclipse/sw360/components/ComponentHandler.java"
click node_projects "https://github.com/prakhar2275/sw360/blob/main/backend/projects/src/main/java/org/eclipse/sw360/projects/ProjectHandler.java"
click node_packages "https://github.com/prakhar2275/sw360/blob/main/backend/packages/src/main/java/org/eclipse/sw360/packages/PackageHandler.java"
click node_attachments "https://github.com/prakhar2275/sw360/blob/main/backend/attachments/src/main/java/org/eclipse/sw360/attachments/AttachmentHandler.java"
click node_license_info "https://github.com/prakhar2275/sw360/blob/main/backend/licenseinfo/src/main/java/org/eclipse/sw360/licenseinfo/LicenseInfoHandler.java"
click node_spdx "https://github.com/prakhar2275/sw360/blob/main/backend/spdxdocument/src/main/java/org/eclipse/sw360/spdxdocument/SPDXDocumentHandler.java"
click node_vulnerabilities "https://github.com/prakhar2275/sw360/blob/main/backend/vulnerabilities/src/main/java/org/eclipse/sw360/vulnerabilities/VulnerabilityHandler.java"
click node_moderation "https://github.com/prakhar2275/sw360/blob/main/backend/moderation/src/main/java/org/eclipse/sw360/moderation/ModerationHandler.java"
click node_database "https://github.com/prakhar2275/sw360/blob/main/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/cloudantclient/DatabaseConnectorCloudant.java"
click node_search "https://github.com/prakhar2275/sw360/blob/main/backend/search/src/main/java/org/eclipse/sw360/search/SearchHandler.java"
click node_permissions "https://github.com/prakhar2275/sw360/blob/main/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/permissions/PermissionUtils.java"
click node_keycloak_users "https://github.com/prakhar2275/sw360/blob/main/keycloak/sw360-keycloak-common/src/main/java/org/eclipse/sw360/keycloak/common/Sw360UserService.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_rest,node_project_service,node_release_service,node_thrift toneBlue
class node_components,node_projects,node_packages,node_attachments toneAmber
class node_license_info,node_spdx,node_vulnerabilities,node_moderation toneMint
class node_database,node_search,node_permissions,node_keycloak_users toneRose
class node_external,node_external_cve toneIndigo
```

## Components

### API and services

- [REST API](https://github.com/prakhar2275/sw360/tree/main/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver): `rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver`
- [Project service](https://github.com/prakhar2275/sw360/blob/main/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java): `rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java`
- [Release service](https://github.com/prakhar2275/sw360/blob/main/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/release/Sw360ReleaseService.java): `rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/release/Sw360ReleaseService.java`
- **Thrift services**

### Catalogue management

- [Components](https://github.com/prakhar2275/sw360/blob/main/backend/components/src/main/java/org/eclipse/sw360/components/ComponentHandler.java): `backend/components/src/main/java/org/eclipse/sw360/components/ComponentHandler.java`
- [Projects](https://github.com/prakhar2275/sw360/blob/main/backend/projects/src/main/java/org/eclipse/sw360/projects/ProjectHandler.java): `backend/projects/src/main/java/org/eclipse/sw360/projects/ProjectHandler.java`
- [Packages](https://github.com/prakhar2275/sw360/blob/main/backend/packages/src/main/java/org/eclipse/sw360/packages/PackageHandler.java): `backend/packages/src/main/java/org/eclipse/sw360/packages/PackageHandler.java`
- [Attachments](https://github.com/prakhar2275/sw360/blob/main/backend/attachments/src/main/java/org/eclipse/sw360/attachments/AttachmentHandler.java): `backend/attachments/src/main/java/org/eclipse/sw360/attachments/AttachmentHandler.java`

### Licensing and governance

- [License information](https://github.com/prakhar2275/sw360/blob/main/backend/licenseinfo/src/main/java/org/eclipse/sw360/licenseinfo/LicenseInfoHandler.java): `backend/licenseinfo/src/main/java/org/eclipse/sw360/licenseinfo/LicenseInfoHandler.java`
- [SPDX documents](https://github.com/prakhar2275/sw360/blob/main/backend/spdxdocument/src/main/java/org/eclipse/sw360/spdxdocument/SPDXDocumentHandler.java): `backend/spdxdocument/src/main/java/org/eclipse/sw360/spdxdocument/SPDXDocumentHandler.java`
- [Vulnerabilities](https://github.com/prakhar2275/sw360/blob/main/backend/vulnerabilities/src/main/java/org/eclipse/sw360/vulnerabilities/VulnerabilityHandler.java): `backend/vulnerabilities/src/main/java/org/eclipse/sw360/vulnerabilities/VulnerabilityHandler.java`
- [Moderation](https://github.com/prakhar2275/sw360/blob/main/backend/moderation/src/main/java/org/eclipse/sw360/moderation/ModerationHandler.java): `backend/moderation/src/main/java/org/eclipse/sw360/moderation/ModerationHandler.java`

### Shared data and identity

- [CouchDB](https://github.com/prakhar2275/sw360/blob/main/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/cloudantclient/DatabaseConnectorCloudant.java): `libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/cloudantclient/DatabaseConnectorCloudant.java`
- [Search](https://github.com/prakhar2275/sw360/blob/main/backend/search/src/main/java/org/eclipse/sw360/search/SearchHandler.java): `backend/search/src/main/java/org/eclipse/sw360/search/SearchHandler.java`
- [Permissions](https://github.com/prakhar2275/sw360/blob/main/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/permissions/PermissionUtils.java): `libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/permissions/PermissionUtils.java`
- [Keycloak user access](https://github.com/prakhar2275/sw360/blob/main/keycloak/sw360-keycloak-common/src/main/java/org/eclipse/sw360/keycloak/common/Sw360UserService.java): `keycloak/sw360-keycloak-common/src/main/java/org/eclipse/sw360/keycloak/common/Sw360UserService.java`

### Other components

- **External integrator**
- **CVE search service**

## Connections

- External integrator → REST API: calls API (evidence: `README.md`)
- REST API → Project service: exposes projects (evidence: `rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/release/Sw360ReleaseService.java`)
- REST API → Release service: exposes releases (evidence: `rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java`)
- Project service → Thrift services: uses Thrift (evidence: `rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java`)
- Release service → Thrift services: uses Thrift (evidence: `rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/release/Sw360ReleaseService.java`)
- Thrift services → CouchDB: stores metadata (evidence: `README.md`)
- Keycloak user access → CouchDB: reads users (evidence: `keycloak/sw360-keycloak-common/src/main/java/org/eclipse/sw360/keycloak/common/Sw360UserService.java`)
- External integrator → Thrift services: calls services (evidence: `README.md`)
- External integrator → CouchDB: data persisted (evidence: `README.md`)
- Thrift services → Components: serves catalogue
- Thrift services → Projects: serves projects
- Thrift services → Packages: serves packages
- Thrift services → Attachments: serves attachments
- Thrift services → License information: serves license data
- Thrift services → SPDX documents: serves SPDX
- Thrift services → Vulnerabilities: serves vulnerability data
- Thrift services → Moderation: serves moderation
- Thrift services → Search: serves search
- Thrift services → Permissions: checks access
- Vulnerabilities → CVE search service: queries CVEs
