= Apache Causeway
:toc:
:toc-title: pass:[<h3>Contents</h3>]
:toc-placement!:

image:https://maven-badges.herokuapp.com/maven-central/org.apache.causeway.core/causeway-applib/badge.svg[]
image:https://github.com/apache/causeway/workflows/Build%20and%20Test%20(w/%20Maven)/badge.svg[]
image:https://sonarcloud.io/api/project_badges/measure?project=apache_isis&metric=alert_status[link="https://sonarcloud.io/dashboard?id=apache_causeway"]
image:https://github.com/apache-causeway-committers/causeway-nightly/actions/workflows/apache-causeway-ci-nightly.yml/badge.svg[link="https://github.com/apache-causeway-committers/causeway-nightly/actions/workflows/apache-causeway-ci-nightly.yml"]

_https://causeway.apache.org[Apache Causeway] software is a framework for rapidly developing domain-driven apps in Java. Write your business logic in entities, domain services and repositories, and the framework dynamically generates a representation of that domain model as a webapp or a RESTful API._

Start learning about Apache Causeway using the https://github.com/apache/causeway-app-helloworld["Hello World"] starter app.
Explore features with our daily built demo docker image https://github.com/apache/causeway/blob/master/examples/demo/domain/src/main/adoc/modules/demo/pages/about.adoc["DemoApp"].
Build your own apps using our https://github.com/apache/causeway-app-simpleapp["SimpleApp"] starter app.

For help and support, join our https://causeway.apache.org/docs/2.0.0-M9/support/slack-channel.html[Slack channel] or https://causeway.apache.org/docs/2.0.0-M7/support/mailing-list.html[mailing list].

toc::[]


== Core Features

Apache Causeway automatically generates the UI from the domain classes.

=== Sign-in

Apache Causeway integrates with http://shiro.apache.org[Apache Shiro] as well as link:https://spring.io/projects/spring-security[Spring Security] and link:https://www.keycloak.org/[Keycloak].
When using Shiro, the core framework supports file-based realms, while the __SecMan__ extension provides a well-featured subdomain of users, roles and permissions against features derived from the Apache Causeway metamodel.

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/010-login.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/010-login.png"]


=== Install Fixtures

Apache Causeway has lots of features to help you prototype and then fully test your application.
One such are fixture scripts, which allow pre-canned data to be installed in the running application.
This is great to act as the starting point for identifying new stories; later on when the feature is being implemented, the same fixture script can be re-used within that feature's integration tests.
(More on tests later).

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/020-install-fixtures.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/020-install-fixtures.png"]

=== Dashboard and View Models

Most of the time the end-user interacts with representations of persistent domain entities, but Causeway also supports view models which can aggregate data from multiple sources.
The todoapp example uses a "dashboard" view model to list todo items not yet done vs those completed.

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/030-dashboard-view-model.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/030-dashboard-view-model.png"]

In general we recommend to initially focus only on domain entities; this will help drive out a good domain model.
Later on view models can be introduced in support of specific use cases.

=== Domain Entity

The screenshot below is of the todoapp's `ToDoItem` domain entity.
Like all web pages, this UI is generated at runtime, directly from the domain object itself.
There are no controllers or HTML to write.

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/040-domain-entity.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/"]

In addition to the domain entity, Apache Causeway allows layout metadata hints to be provided, for example to specify the grouping of properties, the positioning of those groups into columns, the association of actions (the buttons) with properties or collections, the icons on the buttons, and so on.
This metadata can be specified either as annotations or in JSON form; the benefit of the latter is that it can be updated (and the UI redrawn) without restarting the app.

Any production-ready app will require this metadata but (like the view models discussed above) this metadata can be added gradually on top of the core domain model.

=== Edit properties

By default properties on domain entities are editable, meaning they can be changed directly.
In the todoapp example, the `ToDoItem`'s description is one such editable property:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/050-edit-property.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/050-edit-property.png"]

Note that some of the properties are read-only even in edit mode; individual properties can be made non-editable.
It is also possible to make all properties disabled and thus enforce changes only through actions (below).

=== Actions

The other way to modify an entity is to an invoke an action.
In the screenshot below the `ToDoItem`'s category and subcategory can be updated together using an action:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/060-invoke-action.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/060-invoke-action.png"]

There are no limitations on what an action can do; it might just update a single object, it could update multiple objects.
Or, it might not update any objects at all, but could instead perform some other activity, such as sending out email or printing a document.

In general though, all actions are associated with some object, and are (at least initially) also implemented by that object: good old-fashioned encapsulation.
We sometimes use the term "behaviourally complete" for such domain objects.

=== Mixins

As an alternative to placing actions (business logic) on a domain object, it can instead be placed inside a mixin object.
When an object is rendered by Apache Causeway, the mixin "contributes" its behaviour to the domain object (similar to aspect-oriented traits).

In the screenshot below the highlighted "export as xml" action, the "relative priority" property (and "previous" and "next" actions) the "similar to" collection and the two "as DTO" actions are all contributed by mixins:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/065-contributions.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/065-contributions.png"]

The code snippet below shows how this works for the "as DTO v1.0" action:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/067-contributed-action.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/067-contributed-action.png"]




== Extensible Views

The Apache Causeway viewer is implemented using http://wicket.apache.org[Apache Wicket], and has been architected to be extensible.
For example, when a collection of objects is rendered, this is just one several views, as shown in the selector drop-down:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/070-pluggable-views.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/070-pluggable-views.png"]

// The __gmap3__ extension will render any domain entity (such as `ToDoItem`) that implements its `Locatable` interface:
//
// image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/080-gmap3-view.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/080-gmap3-view.png"]

Thus, the __fullcalendar2__ extension will render any domain entity (such as `ToDoItem`) that implements its `Calendarable` interface:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/090-fullcalendar2-view.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/090-fullcalendar2-view.png"]


Yet another "view" (though this one is rather simpler) is the __exceldownload__ extension.
This provides a download button to the table as a spreadsheet:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/100-excel-view-and-docx.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/100-excel-view-and-docx.png"]

The screenshot above also shows an "export to Word" action.
This is _not_ a view but instead is a (contributed) action that uses the (non-ASF) link:https://platform.incode.org/modules/lib/docx/lib-docx.html[docx library] module to perform a "mail-merge":

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/110-docx.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/110-docx.png"]




== Security, Auditing and other Services

As well as providing extensions to the UI, the framework has a rich set of extensions to support various cross-cutting concerns.

Under the activity menu are four sets of services which provide support for _user session logging/auditing_, _command profiling_, _(object change) auditing_ (shown) and (inter-system) _event publishing_:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/120-auditing.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/120-auditing.png"]

In the security menu is access to the rich set of functionality provided by the SecMan extension:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/130-security.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/130-security.png"]

In the prototyping menu is the ability to download a GNU gettext `.po` file for translation.
This file can then be translated into multiple languages so that your app can support different locales. Note that this feature is part of Apache Causeway core:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/140-i18n.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/140-i18n.png"]

The framework also provides an extension module for managing _application and user settings_.
Most apps (the todoapp example included) won't expose these services directly, but will usually wrap them in their own app-specific settings service that trivially delegates to the settings module's services:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/150-appsettings.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/150-appsettings.png"]

=== Multi-tenancy support

One significant feature of the __SecMan__ extension the ability to associate users and objects with a "tenancy" (string) token.
An SPI is provided as the mechanism to interpret this token, so this is highly configurable.

The todoapp uses this feature so that different users' list of todo items are kept separate from one another.
A user with administrator is able to switch their own "tenancy" to the tenancy of some other user, in order to access the objects in that tenancy:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/160-switch-tenancy.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/160-switch-tenancy.png"]


=== Me

Most of the security module's domain services are on the "security" menu, which would normally be accessible only to administrators.
Kept separate is the "me" action:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/170-me.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/170-me.png"]

Assuming they have been granted permissions, this allows a user to access an entity representing their own user account:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/180-app-user-entity.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/180-app-user-entity.png"]

If not all of these properties are required, then they can be hidden either using security or though Causeway' internal event bus (described below).
Conversely, additional properties can be "grafted onto" the user using the contributed properties/collections discussed previously.

=== Themes

Apache Causeway' Wicket viewer uses link:http://getbootstrap.com[Twitter Bootstrap], which means that it can be themed.
If more than one theme has been configured for the app, then the viewer allows the end-user to switch their theme:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/190-switch-theme.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/190-switch-theme.png"]



== REST API

In addition to Causeway' Wicket viewer, it also provides a fully fledged REST API, as an implementation of the http://restfulobjects.org[Restful Objects] specification.
The screenshot below shows accessing this REST API using a Chrome plugin:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/200-rest-api.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/200-rest-api.png"]

Like the Wicket viewer, the REST API is generated automatically from the domain objects (entities and view models).



== Integration Testing Support

Earlier on we noted that Apache Causeway allows fixtures to be installed through the UI.
These same fixture scripts can be reused within integration tests.
For example, the code snippet below shows how the `FixtureScripts` service injected into an integration test can then be used to set up data:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/210-fixture-scripts.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/210-fixture-scripts.png"]

The tests themselves are run in junit.
While these are integration tests (so talking to a real database), they are no more complex than a regular unit test:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/220-testing-happy-case.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/220-testing-happy-case.png"]


To simulate the business rules enforced by Apache Causeway, the domain object can be "wrapped" in a proxy.
For example, if using the Wicket viewer then Apache Causeway will enforce the rule (implemented in the `ToDoItem` class itself) that a completed item cannot have the "completed" action invoked upon it.
The wrapper simulates this by throwing an appropriate exception:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/230-testing-wrapper-factory.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/230-testing-wrapper-factory.png"]




== Internal Event Bus

Contributions, discussed earlier, are an important tool in ensuring that the packages within your Apache Causeway application are decoupled; by extracting out actions the order of dependency between packages can effectively be reversed.

Another important tool to ensure your codebase remains maintainable is Causeway' internal event bus.
It is probably best explained by example; the code below says that the "complete" action should emit a `ToDoItem.Completed` event:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/240-domain-events.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/240-domain-events.png"]

Domain service (application-scoped, stateless) can then subscribe to this event:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/250-domain-event-subscriber.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/250-domain-event-subscriber.png"]

And this test verifies that completing an action causes the subscriber to be called:

image::https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/260-domain-event-test.png[link="https://raw.githubusercontent.com/apache/causeway/master/antora/components/docs/modules/ROOT/images/what-is-apache-causeway/causeway-in-pictures/260-domain-event-test.png"]

In fact, the domain event is fired not once, but (up to) 5 times.
It is called 3 times prior to execution, to check that the action is visible, enabled and that arguments are valid.
It is then additionally called prior to execution, and also called after execution.
What this means is that a subscriber can in either veto access to an action of some publishing object, and/or it can perform cascading updates if the action is allowed to proceed.

Moreover, domain events are fired for all properties and collections, not just actions.
Thus, subscribers can therefore switch on or switch off different parts of an application.
Indeed, the example todoapp demonstrates this.




== Learning More

The Apache Causeway https://causeway.apache.org[website] has lots of useful information and is being continually updated.

Or, you can just start coding using the https://github.com/apache/causeway-app-simpleapp[SimpleApp] starter app.

And if you need help or support, join our https://cwiki.apache.org/confluence/display/CAUSEWAY/Signing+up+to+Slack[ASF Slack channel] or our https://causeway.apache.org/support.html[mailing list].


