# bloomreach-forge/review-workflow architecture

> Architecture diagram of the GitHub repository bloomreach-forge/review-workflow, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bloomreach-forge/review-workflow
- Repository: https://github.com/bloomreach-forge/review-workflow

## Overview

Review/Assignment Workflow lets CMS users submit a document for review by an assigned group; authorized reviewers accept or reject, while request owners or admins can cancel, and rejected requests can be dropped. The primary path runs from the CMS workflow UI through the repository workflow into persisted review-request state. The README also documents an optional online-review path that creates preview links and sends notification email. The tree and excerpts support the main UI, workflow, and notification components; unsampled subsystem links are shown only where the README explicitly describes their role.

Main entry points: [`repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/DocumentReviewWorkflowImpl.java`](https://github.com/bloomreach-forge/review-workflow/blob/master/repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/DocumentReviewWorkflowImpl.java) (Document workflow), [`demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/NotificationsHandler.java`](https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/NotificationsHandler.java) (Notification handler), [`repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/ReviewRequest.java`](https://github.com/bloomreach-forge/review-workflow/blob/master/repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/ReviewRequest.java) (Review request), [`frontend/src/main/java/org/bloomreach/forge/reviewworkflow/cms/reviewedactions/ReviewRequestsWorkflowPlugin.java`](https://github.com/bloomreach-forge/review-workflow/blob/master/frontend/src/main/java/org/bloomreach/forge/reviewworkflow/cms/reviewedactions/ReviewRequestsWorkflowPlugin.java) (Review actions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cms["CMS review UI"]
  node_plugin["Review actions"]
  node_requestsview["Request list"]
end

subgraph group_workflow["Review workflow"]
  node_sharedworkflow["Workflow API"]
  node_workflowimpl["Document workflow"]
  node_scxml["Workflow actions"]
  node_request["Review request<br/>[ReviewRequest.java]"]
  node_schema["Request properties"]
end

subgraph group_online["Online preview"]
  node_hstservice["Preview URL service"]
end

subgraph group_notify["Notifications"]
  node_previewclient["Preview client<br/>[PreviewClient.java]"]
  node_notifications["Notification handler"]
  node_listener["Event listener"]
  node_templates["Email templates"]
  node_mailer["Mail service<br/>[MailService.java]"]
end

node_editor(("CMS user"))
node_reviewer(("Assigned reviewer"))
node_jcr[("CMS repository")]
node_smtp["SMTP server"]

node_editor -->|"selects action"| node_plugin
node_reviewer -->|"reviews request"| node_plugin
node_plugin -->|"invokes workflow"| node_sharedworkflow
node_requestsview -->|"reads hints"| node_sharedworkflow
node_sharedworkflow -->|"implemented by"| node_workflowimpl
node_workflowimpl -->|"dispatches actions"| node_scxml
node_workflowimpl -->|"creates or updates"| node_request
node_request -->|"persists request"| node_jcr
node_request -->|"uses properties"| node_schema
node_workflowimpl -.->|"emits review event"| node_listener
node_listener -.->|"handles event"| node_notifications
node_notifications -.->|"loads templates"| node_templates
node_notifications -.->|"requests preview URL"| node_previewclient
node_previewclient -.->|"fetches URL"| node_hstservice
node_hstservice -.->|"resolves document"| node_jcr
node_notifications -.->|"sends email"| node_mailer
node_mailer -.->|"delivers mail"| node_smtp

click node_plugin "https://github.com/bloomreach-forge/review-workflow/blob/master/frontend/src/main/java/org/bloomreach/forge/reviewworkflow/cms/reviewedactions/ReviewRequestsWorkflowPlugin.java"
click node_requestsview "https://github.com/bloomreach-forge/review-workflow/blob/master/frontend/src/main/java/org/bloomreach/forge/reviewworkflow/cms/reviewedactions/request/ReviewRequestView.java"
click node_sharedworkflow "https://github.com/bloomreach-forge/review-workflow/blob/master/shared/src/main/java/org/bloomreach/forge/reviewworkflow/cms/workflow/ReviewWorkflow.java"
click node_workflowimpl "https://github.com/bloomreach-forge/review-workflow/blob/master/repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/DocumentReviewWorkflowImpl.java"
click node_scxml "https://github.com/bloomreach-forge/review-workflow/blob/master/repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/scxml/RejectReviewAction.java"
click node_request "https://github.com/bloomreach-forge/review-workflow/blob/master/repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/ReviewRequest.java"
click node_schema "https://github.com/bloomreach-forge/review-workflow/blob/master/shared/src/main/java/org/bloomreach/forge/reviewworkflow/ReviewWorkflowNodeType.java"
click node_hstservice "https://github.com/bloomreach-forge/review-workflow/blob/master/hst/src/main/java/org/bloomreach/forge/reviewworkflow/hst/ExampleDocumentPreviewUrlService.java"
click node_previewclient "https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/util/PreviewClient.java"
click node_notifications "https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/NotificationsHandler.java"
click node_listener "https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/NotificationsEventsListener.java"
click node_templates "https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/email-addon/src/main/java/demo/hippo/email/FreemarkerTemplateService.java"
click node_mailer "https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/email-addon/src/main/java/demo/hippo/email/MailService.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_plugin,node_requestsview,node_editor,node_reviewer toneBlue
class node_sharedworkflow,node_workflowimpl,node_scxml,node_request,node_schema,node_jcr toneAmber
class node_hstservice,node_smtp toneMint
class node_previewclient,node_notifications,node_listener,node_templates,node_mailer toneRose
```

## Components

### CMS review UI

- [Review actions](https://github.com/bloomreach-forge/review-workflow/blob/master/frontend/src/main/java/org/bloomreach/forge/reviewworkflow/cms/reviewedactions/ReviewRequestsWorkflowPlugin.java): `frontend/src/main/java/org/bloomreach/forge/reviewworkflow/cms/reviewedactions/ReviewRequestsWorkflowPlugin.java`
- [Request list](https://github.com/bloomreach-forge/review-workflow/blob/master/frontend/src/main/java/org/bloomreach/forge/reviewworkflow/cms/reviewedactions/request/ReviewRequestView.java): `frontend/src/main/java/org/bloomreach/forge/reviewworkflow/cms/reviewedactions/request/ReviewRequestView.java`

### Review workflow

- [Workflow API](https://github.com/bloomreach-forge/review-workflow/blob/master/shared/src/main/java/org/bloomreach/forge/reviewworkflow/cms/workflow/ReviewWorkflow.java): `shared/src/main/java/org/bloomreach/forge/reviewworkflow/cms/workflow/ReviewWorkflow.java`
- [Document workflow](https://github.com/bloomreach-forge/review-workflow/blob/master/repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/DocumentReviewWorkflowImpl.java): `repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/DocumentReviewWorkflowImpl.java`
- [Workflow actions](https://github.com/bloomreach-forge/review-workflow/blob/master/repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/scxml/RejectReviewAction.java): `repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/scxml/RejectReviewAction.java`
- [Review request](https://github.com/bloomreach-forge/review-workflow/blob/master/repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/ReviewRequest.java): `repository/src/main/java/org/bloomreach/forge/reviewworkflow/repository/documentworkflow/ReviewRequest.java`
- [Request properties](https://github.com/bloomreach-forge/review-workflow/blob/master/shared/src/main/java/org/bloomreach/forge/reviewworkflow/ReviewWorkflowNodeType.java): `shared/src/main/java/org/bloomreach/forge/reviewworkflow/ReviewWorkflowNodeType.java`

### Online preview

- [Preview URL service](https://github.com/bloomreach-forge/review-workflow/blob/master/hst/src/main/java/org/bloomreach/forge/reviewworkflow/hst/ExampleDocumentPreviewUrlService.java): `hst/src/main/java/org/bloomreach/forge/reviewworkflow/hst/ExampleDocumentPreviewUrlService.java`

### Notifications

- [Preview client](https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/util/PreviewClient.java): `demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/util/PreviewClient.java`
- [Notification handler](https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/NotificationsHandler.java): `demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/NotificationsHandler.java`
- [Event listener](https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/NotificationsEventsListener.java): `demo/workflow-notifications/event-handler/src/main/java/demo/hippo/notifications/NotificationsEventsListener.java`
- [Email templates](https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/email-addon/src/main/java/demo/hippo/email/FreemarkerTemplateService.java): `demo/workflow-notifications/email-addon/src/main/java/demo/hippo/email/FreemarkerTemplateService.java`
- [Mail service](https://github.com/bloomreach-forge/review-workflow/blob/master/demo/workflow-notifications/email-addon/src/main/java/demo/hippo/email/MailService.java): `demo/workflow-notifications/email-addon/src/main/java/demo/hippo/email/MailService.java`

### Other components

- **CMS user**
- **Assigned reviewer**
- **CMS repository**
- **SMTP server**

## Connections

- CMS user → Review actions: selects action
- Assigned reviewer → Review actions: reviews request
- Review actions → Workflow API: invokes workflow
- Request list → Workflow API: reads hints
- Workflow API → Document workflow: implemented by
- Document workflow → Workflow actions: dispatches actions
- Document workflow → Review request: creates or updates
- Review request → CMS repository: persists request
- Review request → Request properties: uses properties
- Document workflow → Event listener: emits review event
- Event listener → Notification handler: handles event
- Notification handler → Email templates: loads templates
- Notification handler → Preview client: requests preview URL
- Preview client → Preview URL service: fetches URL
- Preview URL service → CMS repository: resolves document
- Notification handler → Mail service: sends email
- Mail service → SMTP server: delivers mail
