This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch CAUSEWAY-3676 in repository https://gitbox.apache.org/repos/asf/causeway.git
commit be1895598564b48a5181c1f4fb23c08fa06f54c7 Author: danhaywood <[email protected]> AuthorDate: Sun Jan 28 14:13:48 2024 +0000 CAUSEWAY-3676: moves TypeMapper and UserMementoProvider to graphql's applib module --- .run/causeway-tooling-cli (index).run.xml | 2 +- .../modules/documentation/pages/tooling.adoc | 2 +- .../index/services/bookmark/BookmarkService.adoc | 11 + .../pages/index/services/iactn/Execution.adoc | 1 + .../index/services/metamodel/MetaModelService.adoc | 26 ++ .../services/metamodel/objgraph/ObjectGraph.adoc | 50 ++- .../commons/pages/index/collections/Can.adoc | 2 +- .../pages/index/functional/ThrowingRunnable.adoc | 48 ++- .../modules/commons/pages/index/io/DataSource.adoc | 13 + .../contributions/Object_createdByCommand.adoc} | 13 +- .../applib/dom/AuditTrailEntryRepository.adoc | 27 +- ...adoc => AuditTrailEntryRepositoryAbstract.adoc} | 30 +- .../applib/dom/CommandLogEntryRepository.adoc | 51 ++- ...adoc => CommandLogEntryRepositoryAbstract.adoc} | 50 +-- .../applib/dom/ExecutionLogEntryRepository.adoc | 35 +- ...oc => ExecutionLogEntryRepositoryAbstract.adoc} | 36 +- .../applib/dom/ExecutionOutboxEntryRepository.adoc | 11 +- ...=> ExecutionOutboxEntryRepositoryAbstract.adoc} | 12 +- .../applib/dom/SessionLogEntryRepository.adoc | 22 +- ...adoc => SessionLogEntryRepositoryAbstract.adoc} | 26 +- .../changetracking/EntityChangeTrackerDefault.adoc | 1 + .../services/userprof/UserProfileUiService.adoc | 4 + core/adoc/modules/_overview/pages/about.adoc | 433 +++++++++++---------- viewers/graphql/applib/pom.xml | 27 +- .../graphql/applib/src/main/java/module-info.java | 5 + .../graphql/applib}/auth/UserMementoProvider.java | 38 +- .../viewer/graphql/applib}/types/TypeMapper.java | 33 +- .../viewer/graphql/model/context/Context.java | 4 +- .../viewer/graphql/model/domain/GqlvAction.java | 6 +- .../graphql/model/domain/GqlvActionInvoke.java | 2 +- .../graphql/model/domain/GqlvActionParam.java | 2 +- .../model/domain/GqlvActionParamAutoComplete.java | 2 +- .../model/domain/GqlvActionParamChoices.java | 2 +- .../model/domain/GqlvActionParamDefault.java | 2 +- .../model/domain/GqlvActionParamDisabled.java | 2 +- .../model/domain/GqlvActionParamHidden.java | 2 +- .../model/domain/GqlvActionParamValidate.java | 2 +- .../graphql/model/domain/GqlvActionParams.java | 2 +- .../graphql/model/domain/GqlvActionValidity.java | 2 +- .../graphql/model/domain/GqlvCollectionGet.java | 1 - .../viewer/graphql/model/domain/GqlvProperty.java | 2 +- .../model/domain/GqlvPropertyAutoComplete.java | 1 - .../graphql/model/domain/GqlvPropertyChoices.java | 2 +- .../graphql/model/domain/GqlvPropertyGet.java | 1 - .../graphql/model/domain/GqlvPropertySet.java | 3 +- .../graphql/model/domain/GqlvPropertyValidate.java | 5 +- .../graphql/model/types/TypeMapperDefault.java | 16 +- .../graphql/viewer/src/main/java/module-info.java | 1 + .../viewer/auth/UserMementoProviderDefault.java | 22 +- ...xecutionStrategyResolvingWithinInteraction.java | 13 +- .../integration/GraphQlSourceForCauseway.java | 2 +- 51 files changed, 667 insertions(+), 441 deletions(-) diff --git a/.run/causeway-tooling-cli (index).run.xml b/.run/causeway-tooling-cli (index).run.xml index 9f5c4f0183..7845d8036a 100644 --- a/.run/causeway-tooling-cli (index).run.xml +++ b/.run/causeway-tooling-cli (index).run.xml @@ -1,6 +1,6 @@ <component name="ProjectRunConfigurationManager"> <configuration default="false" name="causeway-tooling-cli (index)" type="Application" factoryName="Application"> - <option name="ALTERNATIVE_JRE_PATH" value="C:\Program Files\OpenJDK\openjdk-11.0.7_10" /> + <option name="ALTERNATIVE_JRE_PATH" value="azul-21" /> <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" /> <option name="MAIN_CLASS_NAME" value="org.apache.causeway.tooling.cli.Cli" /> <module name="causeway-tooling-cli" /> diff --git a/antora/components/conguide/modules/documentation/pages/tooling.adoc b/antora/components/conguide/modules/documentation/pages/tooling.adoc index 7e77c59384..cd94f3dd4e 100644 --- a/antora/components/conguide/modules/documentation/pages/tooling.adoc +++ b/antora/components/conguide/modules/documentation/pages/tooling.adoc @@ -31,7 +31,7 @@ This can be found at xref:core:_overview:about.adoc[]. For more on the CLI, see xref:tooling:tooling-cli:about.adoc[tooling CLI] docs. You could also inspect the `preview.sh` script (and the various scripts it calls in turn) to see how we use the CLI in practice. -* the `causeway-toolikng-metaprog` module (in tooling/metaprog`) contains a set of test classes that are used to generate classes and files for the various datatypes showcased in the link:https://github.com/apache/causeway-app-referenceapp[reference app]. +* the `causeway-tooling-metaprog` module (in tooling/metaprog`) contains a set of test classes that are used to generate classes and files for the various datatypes showcased in the link:https://github.com/apache/causeway-app-referenceapp[reference app]. + To use, locate the `ValueTypeGenTemplateTest` class. diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/BookmarkService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/BookmarkService.adoc index 2431d1698a..a5361b71d2 100644 --- a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/BookmarkService.adoc +++ b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/BookmarkService.adoc @@ -10,6 +10,7 @@ This service provides a serializable 'bookmark' for any entity, and conversely t ---- interface BookmarkService { Optional<Bookmark> bookmarkFor(Object domainObject) // <.> + List<Bookmark> bookmarksFor(Object domainObject) // <.> Optional<Bookmark> bookmarkFor(Class<?> type, String identifier) // <.> Optional<Object> lookup(BookmarkHolder bookmarkHolder) // <.> Optional<Object> lookup(Bookmark bookmark) // <.> @@ -23,6 +24,11 @@ interface BookmarkService { -- Optionally returns the xref:refguide:applib:index/services/bookmark/Bookmark.adoc[Bookmark] for the given domain object, based on whether can create a bookmark for it. -- +<.> xref:#bookmarksFor_Object[bookmarksFor(Object)] ++ +-- +Returns all possible xref:refguide:applib:index/services/bookmark/Bookmark.adoc[Bookmark] s for the provided domain object, taking into account any aliases defined as per _DomainObject#aliased()_ or _DomainService#aliased()_ . +-- <.> xref:#bookmarkFor_Class_String[bookmarkFor(Class, String)] + -- @@ -54,6 +60,11 @@ Optionally returns the xref:refguide:applib:index/services/bookmark/Bookmark.ado *Note* : Not every domain object is bookmark-able: only entities, view models and services (NOT values or collections) +[#bookmarksFor_Object] +=== bookmarksFor(Object) + +Returns all possible xref:refguide:applib:index/services/bookmark/Bookmark.adoc[Bookmark] s for the provided domain object, taking into account any aliases defined as per _DomainObject#aliased()_ or _DomainService#aliased()_ . + [#bookmarkFor_Class_String] === bookmarkFor(Class, String) diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Execution.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Execution.adoc index b9c8d2e2a9..6603bd5c8e 100644 --- a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Execution.adoc +++ b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Execution.adoc @@ -13,6 +13,7 @@ The xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] has class Execution<T, E> { void setParent(Execution<?, ?> parent) // <.> List<Execution<?, ?>> getChildren() // <.> + E getEvent() void setEvent(E event) // <.> Timestamp start(ClockService clockService, MetricsService metricsService) void setCompletedAt(Timestamp completedAt, MetricsService metricsService) // <.> diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/MetaModelService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/MetaModelService.adoc index af5448942e..ebb239ff6c 100644 --- a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/MetaModelService.adoc +++ b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/MetaModelService.adoc @@ -10,6 +10,8 @@ This service provides a formal API into the framework's metamodel. ---- interface MetaModelService { Optional<LogicalType> lookupLogicalTypeByName(String logicalTypeName) // <.> + Can<LogicalType> logicalTypeAndAliasesFor(LogicalType logicalType) // <.> + Can<LogicalType> logicalTypeAndAliasesFor(String logicalTypeName) // <.> Optional<LogicalType> lookupLogicalTypeByClass(Class<?> domainType) // <.> void rebuild(Class<?> domainType) // <.> DomainModel getDomainModel() // <.> @@ -26,6 +28,16 @@ interface MetaModelService { -- Provides a lookup by logicalTypeName of a domain class' object type, corresponding to _Named#value()_ or _DomainService#aliased()_ or _DomainObject#aliased()_ . Will return an empty result if there is no such non-abstract class registered. (interfaces and abstract types are never added to the lookup table). -- +<.> xref:#logicalTypeAndAliasesFor_LogicalType[logicalTypeAndAliasesFor(LogicalType)] ++ +-- +Assuming that the xref:refguide:applib:index/id/LogicalType.adoc[LogicalType] passed in actually represents a domain type, then returns it along with any aliases defined as per _DomainService#aliased()_ or _DomainObject#aliased()_ . +-- +<.> xref:#logicalTypeAndAliasesFor_String[logicalTypeAndAliasesFor(String)] ++ +-- +Returns the xref:refguide:applib:index/id/LogicalType.adoc[LogicalType] of a domain class' object type, corresponding to _Named#value()_ , along with any aliases defined as per _DomainService#aliased()_ or _DomainObject#aliased()_ . +-- <.> xref:#lookupLogicalTypeByClass_Class[lookupLogicalTypeByClass(Class)] + -- @@ -74,6 +86,20 @@ Can be used to create object relation diagrams (e.g. Plantuml). Provides a lookup by logicalTypeName of a domain class' object type, corresponding to _Named#value()_ or _DomainService#aliased()_ or _DomainObject#aliased()_ . Will return an empty result if there is no such non-abstract class registered. (interfaces and abstract types are never added to the lookup table). +[#logicalTypeAndAliasesFor_LogicalType] +=== logicalTypeAndAliasesFor(LogicalType) + +Assuming that the xref:refguide:applib:index/id/LogicalType.adoc[LogicalType] passed in actually represents a domain type, then returns it along with any aliases defined as per _DomainService#aliased()_ or _DomainObject#aliased()_ . + +If there is no such domain type, then an empty xref:refguide:commons:index/collections/Can.adoc[Can] will be returned. + +[#logicalTypeAndAliasesFor_String] +=== logicalTypeAndAliasesFor(String) + +Returns the xref:refguide:applib:index/id/LogicalType.adoc[LogicalType] of a domain class' object type, corresponding to _Named#value()_ , along with any aliases defined as per _DomainService#aliased()_ or _DomainObject#aliased()_ . + +If there is no such domain type, then an empty xref:refguide:commons:index/collections/Can.adoc[Can] will be returned. + [#lookupLogicalTypeByClass_Class] === lookupLogicalTypeByClass(Class) diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/objgraph/ObjectGraph.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/objgraph/ObjectGraph.adoc index a66298e45a..8622846dc0 100644 --- a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/objgraph/ObjectGraph.adoc +++ b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/objgraph/ObjectGraph.adoc @@ -10,13 +10,34 @@ Can be used to create diagrams (e.g. Plantuml) ---- class ObjectGraph { ObjectGraph create(ObjectGraph.Factory factory) - ObjectGraph transform(ObjectGraph.Transformer transfomer) + ObjectGraph transform(ObjectGraph.Transformer transfomer) // <.> String render(ObjectGraph.Renderer renderer) + DataSource asDiagramDslSource(ObjectGraph.Renderer renderer) + void writeDiagramDsl(ObjectGraph.Renderer renderer, DataSink sink) + void writeDiagramDsl(ObjectGraph.Renderer renderer, File destinationDslFile) + ObjectGraph copy() // <.> + GraphKernel kernel(ImmutableEnumSet<GraphCharacteristic> characteristics) // <.> Map<String, List<ObjectGraph.Object>> objectsGroupedByPackage() // <.> Map<String, ObjectGraph.Object> objectById() // <.> + ObjectGraph subGraph(int[] objectIndexes) // <.> } ---- +<.> xref:#transform_ObjectGraph_Transformer[transform(ObjectGraph_Transformer)] ++ +-- +Passes a (deep clone) copy of this xref:refguide:applib:index/services/metamodel/objgraph/ObjectGraph.adoc[ObjectGraph] to given _Transformer_ and returns a transformed xref:refguide:applib:index/services/metamodel/objgraph/ObjectGraph.adoc[ObjectGraph] . +-- +<.> xref:#copy_[copy()] ++ +-- +Returns a (deep clone) copy of this xref:refguide:applib:index/services/metamodel/objgraph/ObjectGraph.adoc[ObjectGraph] . +-- +<.> xref:#kernel_ImmutableEnumSet[kernel(ImmutableEnumSet)] ++ +-- +Returns a _GraphKernel_ of given characteristics. +-- <.> xref:#objectsGroupedByPackage_[objectsGroupedByPackage()] + -- @@ -27,9 +48,31 @@ Returns objects grouped by package (as list-multimap). -- Returns a _Map_ from object.id to _Object ObjectGraph.Object_ -- +<.> xref:#subGraph_int[subGraph(int)] ++ +-- +Returns a sub-graph comprised only of object nodes as picked per zero based indexes _int[]_ . +-- == Members +[#transform_ObjectGraph_Transformer] +=== transform(ObjectGraph_Transformer) + +Passes a (deep clone) copy of this xref:refguide:applib:index/services/metamodel/objgraph/ObjectGraph.adoc[ObjectGraph] to given _Transformer_ and returns a transformed xref:refguide:applib:index/services/metamodel/objgraph/ObjectGraph.adoc[ObjectGraph] . + +Hence transformers are not required to create defensive copies. + +[#copy_] +=== copy() + +Returns a (deep clone) copy of this xref:refguide:applib:index/services/metamodel/objgraph/ObjectGraph.adoc[ObjectGraph] . + +[#kernel_ImmutableEnumSet] +=== kernel(ImmutableEnumSet) + +Returns a _GraphKernel_ of given characteristics. + [#objectsGroupedByPackage_] === objectsGroupedByPackage() @@ -39,3 +82,8 @@ Returns objects grouped by package (as list-multimap). === objectById() Returns a _Map_ from object.id to _Object ObjectGraph.Object_ + +[#subGraph_int] +=== subGraph(int) + +Returns a sub-graph comprised only of object nodes as picked per zero based indexes _int[]_ . diff --git a/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc b/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc index d8c062312a..67ff847b22 100644 --- a/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc +++ b/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc @@ -7,7 +7,7 @@ Java's _Optional_ , can be seen as a holder of element(s), that is restricted to Same idiomatic convention applies: References to xref:refguide:commons:index/collections/Can.adoc[Can] should never be initialized to _null_ . - *IMPORTANT:* A xref:refguide:commons:index/collections/Can.adoc[Can] must not contain _null_ elements. If you need to use store null, then use a different data structure, for example a regular _java.util.List java.util.List_ . + *IMPORTANT:* A xref:refguide:commons:index/collections/Can.adoc[Can] must not contain _null_ elements. If you need to store _null_ , then use a different data structure, for example a regular _java.util.List java.util.List_ . == API diff --git a/antora/components/refguide-index/modules/commons/pages/index/functional/ThrowingRunnable.adoc b/antora/components/refguide-index/modules/commons/pages/index/functional/ThrowingRunnable.adoc index 169c5ff24c..19c1b38001 100644 --- a/antora/components/refguide-index/modules/commons/pages/index/functional/ThrowingRunnable.adoc +++ b/antora/components/refguide-index/modules/commons/pages/index/functional/ThrowingRunnable.adoc @@ -10,8 +10,52 @@ Similar to a _Runnable_ , except that it can also throw a checked _Exception_ . ---- interface ThrowingRunnable { void run() - Callable<Void> toCallable(ThrowingRunnable runnable) - Try<Void> resultOf(ThrowingRunnable runnable) + void runUncatched() // <.> + Void callUncatched() // <.> + Runnable toRunnable() // <.> + Callable<Void> toCallable() // <.> } ---- +<.> xref:#runUncatched_[runUncatched()] ++ +-- +Does *not* silently swallow, wrap into RuntimeException, or otherwise modify any exceptions of the wrapped _#run()_ method. +-- +<.> xref:#callUncatched_[callUncatched()] ++ +-- +Does *not* silently swallow, wrap into RuntimeException, or otherwise modify any exceptions of the wrapped _#run()_ method. +-- +<.> xref:#toRunnable_[toRunnable()] ++ +-- +The resulting _Runnable_ does *not* silently swallow, wrap into RuntimeException, or otherwise modify any exceptions of the wrapped _#run()_ method. +-- +<.> xref:#toCallable_[toCallable()] ++ +-- +The resulting _Callable_ does *not* silently swallow, wrap into RuntimeException, or otherwise modify any exceptions of the wrapped _#run()_ method. +-- + +== Members + +[#runUncatched_] +=== runUncatched() + +Does *not* silently swallow, wrap into RuntimeException, or otherwise modify any exceptions of the wrapped _#run()_ method. + +[#callUncatched_] +=== callUncatched() + +Does *not* silently swallow, wrap into RuntimeException, or otherwise modify any exceptions of the wrapped _#run()_ method. + +[#toRunnable_] +=== toRunnable() + +The resulting _Runnable_ does *not* silently swallow, wrap into RuntimeException, or otherwise modify any exceptions of the wrapped _#run()_ method. + +[#toCallable_] +=== toCallable() + +The resulting _Callable_ does *not* silently swallow, wrap into RuntimeException, or otherwise modify any exceptions of the wrapped _#run()_ method. diff --git a/antora/components/refguide-index/modules/commons/pages/index/io/DataSource.adoc b/antora/components/refguide-index/modules/commons/pages/index/io/DataSource.adoc index d403b4da3b..74e71fe78c 100644 --- a/antora/components/refguide-index/modules/commons/pages/index/io/DataSource.adoc +++ b/antora/components/refguide-index/modules/commons/pages/index/io/DataSource.adoc @@ -25,6 +25,7 @@ interface DataSource { DataSource map(ThrowingFunction<InputStream, InputStream> inputStreamMapper) // <.> Try<Void> tryReadAndWrite(DataSink dataSink, int bufferSize) // <.> void pipe(DataSink dataSink, int bufferSize) // <.> + void pipe(DataSink dataSink) // <.> DataSource empty() // <.> DataSource ofInputStreamSupplier(ThrowingSupplier<InputStream> inputStreamSupplier) // <.> DataSource ofInputStreamEagerly(InputStream inputStream) // <.> @@ -92,6 +93,11 @@ Acts as a pipe, reading from this xref:refguide:commons:index/io/DataSource.adoc -- Acts as a pipe, reading from this xref:refguide:commons:index/io/DataSource.adoc[DataSource] and writing to given xref:refguide:commons:index/io/DataSink.adoc[DataSink] , using given bufferSize for the underlying byte data junks. -- +<.> xref:#pipe_DataSink[pipe(DataSink)] ++ +-- +Acts as a pipe, reading from this xref:refguide:commons:index/io/DataSource.adoc[DataSource] and writing to given xref:refguide:commons:index/io/DataSink.adoc[DataSink] , using default bufferSize of 16k for the underlying byte data junks. +-- <.> xref:#empty_[empty()] + -- @@ -207,6 +213,13 @@ Acts as a pipe, reading from this xref:refguide:commons:index/io/DataSource.adoc Throws if the write failed. +[#pipe_DataSink] +=== pipe(DataSink) + +Acts as a pipe, reading from this xref:refguide:commons:index/io/DataSource.adoc[DataSource] and writing to given xref:refguide:commons:index/io/DataSink.adoc[DataSink] , using default bufferSize of 16k for the underlying byte data junks. + +Throws if the write failed. + [#empty_] === empty() diff --git a/antora/components/refguide-index/modules/commons/pages/index/functional/ThrowingRunnable.adoc b/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/contributions/Object_createdByCommand.adoc similarity index 74% copy from antora/components/refguide-index/modules/commons/pages/index/functional/ThrowingRunnable.adoc copy to antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/contributions/Object_createdByCommand.adoc index 169c5ff24c..bcae3445e8 100644 --- a/antora/components/refguide-index/modules/commons/pages/index/functional/ThrowingRunnable.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/contributions/Object_createdByCommand.adoc @@ -1,17 +1,14 @@ -= ThrowingRunnable += Object_createdByCommand :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...] -Similar to a _Runnable_ , except that it can also throw a checked _Exception_ . - == API [source,java] -.ThrowingRunnable.java +.Object_createdByCommand.java ---- -interface ThrowingRunnable { - void run() - Callable<Void> toCallable(ThrowingRunnable runnable) - Try<Void> resultOf(ThrowingRunnable runnable) +class Object_createdByCommand { + Object act() + boolean hideAct() } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepository.adoc index 9e2c3765ba..06033e679b 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepository.adoc @@ -8,21 +8,20 @@ Provides supporting functionality for querying xref:refguide:extensions:index/au [source,java] .AuditTrailEntryRepository.java ---- -class AuditTrailEntryRepository<E> { - Class<E> getEntityClass() +interface AuditTrailEntryRepository { AuditTrailEntry createFor(EntityPropertyChange change) - Optional<E> findFirstByTarget(Bookmark target) - List<E> findRecentByTarget(Bookmark target) - List<E> findRecentByTargetAndPropertyId(Bookmark target, String propertyId) - List<E> findByInteractionId(UUID interactionId) - List<E> findByTargetAndFromAndTo(Bookmark target, LocalDate from, LocalDate to) - List<E> findByFromAndTo(LocalDate from, LocalDate to) - List<E> findMostRecent() - List<E> findMostRecent(int limit) - List<E> findByUsernameAndFromAndTo(String username, LocalDate from, LocalDate to) - List<E> findByUsernameAndTargetAndFromAndTo(String username, Bookmark target, LocalDate from, LocalDate to) - List<E> findRecentByUsername(String username) - List<? extends AuditTrailEntry> findAll() // <.> + Optional<AuditTrailEntry> findFirstByTarget(Bookmark target) + List<AuditTrailEntry> findRecentByTarget(Bookmark target) + List<AuditTrailEntry> findRecentByTargetAndPropertyId(Bookmark target, String propertyId) + List<AuditTrailEntry> findByInteractionId(UUID interactionId) + List<AuditTrailEntry> findByTargetAndFromAndTo(Bookmark target, LocalDate from, LocalDate to) + List<AuditTrailEntry> findByFromAndTo(LocalDate from, LocalDate to) + List<AuditTrailEntry> findMostRecent() + List<AuditTrailEntry> findMostRecent(int limit) + List<AuditTrailEntry> findByUsernameAndFromAndTo(String username, LocalDate from, LocalDate to) + List<AuditTrailEntry> findByUsernameAndTargetAndFromAndTo(String username, Bookmark target, LocalDate from, LocalDate to) + List<AuditTrailEntry> findRecentByUsername(String username) + List<AuditTrailEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepositoryAbstract.adoc similarity index 57% copy from antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepository.adoc copy to antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepositoryAbstract.adoc index 9e2c3765ba..e71c5e8d49 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/audittrail/applib/dom/AuditTrailEntryRepositoryAbstract.adoc @@ -1,4 +1,4 @@ -= AuditTrailEntryRepository += AuditTrailEntryRepositoryAbstract :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...] Provides supporting functionality for querying xref:refguide:extensions:index/audittrail/applib/dom/AuditTrailEntry.adoc[AuditTrailEntry] entities. @@ -6,23 +6,23 @@ Provides supporting functionality for querying xref:refguide:extensions:index/au == API [source,java] -.AuditTrailEntryRepository.java +.AuditTrailEntryRepositoryAbstract.java ---- -class AuditTrailEntryRepository<E> { +class AuditTrailEntryRepositoryAbstract<E> { Class<E> getEntityClass() AuditTrailEntry createFor(EntityPropertyChange change) - Optional<E> findFirstByTarget(Bookmark target) - List<E> findRecentByTarget(Bookmark target) - List<E> findRecentByTargetAndPropertyId(Bookmark target, String propertyId) - List<E> findByInteractionId(UUID interactionId) - List<E> findByTargetAndFromAndTo(Bookmark target, LocalDate from, LocalDate to) - List<E> findByFromAndTo(LocalDate from, LocalDate to) - List<E> findMostRecent() - List<E> findMostRecent(int limit) - List<E> findByUsernameAndFromAndTo(String username, LocalDate from, LocalDate to) - List<E> findByUsernameAndTargetAndFromAndTo(String username, Bookmark target, LocalDate from, LocalDate to) - List<E> findRecentByUsername(String username) - List<? extends AuditTrailEntry> findAll() // <.> + Optional<AuditTrailEntry> findFirstByTarget(Bookmark target) + List<AuditTrailEntry> findRecentByTarget(Bookmark target) + List<AuditTrailEntry> findRecentByTargetAndPropertyId(Bookmark target, String propertyId) + List<AuditTrailEntry> findByInteractionId(UUID interactionId) + List<AuditTrailEntry> findByTargetAndFromAndTo(Bookmark target, LocalDate from, LocalDate to) + List<AuditTrailEntry> findByFromAndTo(LocalDate from, LocalDate to) + List<AuditTrailEntry> findMostRecent() + List<AuditTrailEntry> findMostRecent(int limit) + List<AuditTrailEntry> findByUsernameAndFromAndTo(String username, LocalDate from, LocalDate to) + List<AuditTrailEntry> findByUsernameAndTargetAndFromAndTo(String username, Bookmark target, LocalDate from, LocalDate to) + List<AuditTrailEntry> findRecentByUsername(String username) + List<AuditTrailEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepository.adoc index b79847e2ff..368e3e9cc1 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepository.adoc @@ -8,33 +8,32 @@ Provides supporting functionality for querying xref:refguide:extensions:index/co [source,java] .CommandLogEntryRepository.java ---- -class CommandLogEntryRepository<C> { - Class<C> getEntityClass() - C createEntryAndPersist(Command command, UUID parentInteractionIdIfAny, ExecuteIn executeIn) - Optional<C> findByInteractionId(UUID interactionId) - List<C> findByParent(CommandLogEntry parent) - List<C> findByParentInteractionId(UUID parentInteractionId) - List<C> findByFromAndTo(LocalDate from, LocalDate to) - List<C> findCurrent() - List<C> findCompleted() - List<C> findByTargetAndFromAndTo(Bookmark target, LocalDate from, LocalDate to) - List<C> findMostRecent() - List<C> findMostRecent(int limit) - List<C> findRecentByUsername(String username) - List<C> findRecentByTarget(Bookmark target) - List<C> findRecentByTargetOrResult(Bookmark targetOrResult) - List<C> findSince(UUID interactionId, Integer batchSize) // <.> - List<C> findBackgroundAndNotYetStarted() // <.> - List<C> findRecentBackgroundByTarget(Bookmark target) - Optional<C> findMostRecentReplayed() // <.> - Optional<C> findMostRecentCompleted() // <.> - List<C> findNotYetReplayed() - C saveForReplay(CommandDto dto) - List<C> saveForReplay(CommandsDto commandsDto) - void persist(C commandLogEntry) +interface CommandLogEntryRepository { + CommandLogEntry createEntryAndPersist(Command command, UUID parentInteractionIdIfAny, ExecuteIn executeIn) + Optional<CommandLogEntry> findByInteractionId(UUID interactionId) + List<CommandLogEntry> findByParent(CommandLogEntry parent) + List<CommandLogEntry> findByParentInteractionId(UUID parentInteractionId) + List<CommandLogEntry> findByFromAndTo(LocalDate from, LocalDate to) + List<CommandLogEntry> findCurrent() + List<CommandLogEntry> findCompleted() + List<CommandLogEntry> findByTargetAndFromAndTo(Bookmark target, LocalDate from, LocalDate to) + List<CommandLogEntry> findMostRecent() + List<CommandLogEntry> findMostRecent(int limit) + List<CommandLogEntry> findRecentByUsername(String username) + List<CommandLogEntry> findRecentByTarget(Bookmark target) + List<CommandLogEntry> findRecentByTargetOrResult(Bookmark targetOrResult) + List<CommandLogEntry> findSince(UUID interactionId, Integer batchSize) // <.> + List<CommandLogEntry> findBackgroundAndNotYetStarted() // <.> + List<CommandLogEntry> findRecentBackgroundByTarget(Bookmark target) + Optional<CommandLogEntry> findMostRecentReplayed() // <.> + Optional<CommandLogEntry> findMostRecentCompleted() // <.> + List<CommandLogEntry> findNotYetReplayed() + CommandLogEntry saveForReplay(CommandDto dto) + List<CommandLogEntry> saveForReplay(CommandsDto commandsDto) + void persist(CommandLogEntry commandLogEntry) void truncateLog() - List<C> findCommandsOnPrimaryElseFail(UUID interactionId, Integer batchSize) - List<C> findAll() // <.> + List<CommandLogEntry> findCommandsOnPrimaryElseFail(UUID interactionId, Integer batchSize) + List<CommandLogEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepositoryAbstract.adoc similarity index 80% copy from antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepository.adoc copy to antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepositoryAbstract.adoc index b79847e2ff..19c32d237f 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/dom/CommandLogEntryRepositoryAbstract.adoc @@ -1,4 +1,4 @@ -= CommandLogEntryRepository += CommandLogEntryRepositoryAbstract :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...] Provides supporting functionality for querying xref:refguide:extensions:index/commandlog/applib/dom/CommandLogEntry.adoc[CommandLogEntry] entities. @@ -6,35 +6,35 @@ Provides supporting functionality for querying xref:refguide:extensions:index/co == API [source,java] -.CommandLogEntryRepository.java +.CommandLogEntryRepositoryAbstract.java ---- -class CommandLogEntryRepository<C> { +class CommandLogEntryRepositoryAbstract<C> { Class<C> getEntityClass() C createEntryAndPersist(Command command, UUID parentInteractionIdIfAny, ExecuteIn executeIn) - Optional<C> findByInteractionId(UUID interactionId) - List<C> findByParent(CommandLogEntry parent) - List<C> findByParentInteractionId(UUID parentInteractionId) - List<C> findByFromAndTo(LocalDate from, LocalDate to) - List<C> findCurrent() - List<C> findCompleted() - List<C> findByTargetAndFromAndTo(Bookmark target, LocalDate from, LocalDate to) - List<C> findMostRecent() - List<C> findMostRecent(int limit) - List<C> findRecentByUsername(String username) - List<C> findRecentByTarget(Bookmark target) - List<C> findRecentByTargetOrResult(Bookmark targetOrResult) - List<C> findSince(UUID interactionId, Integer batchSize) // <.> - List<C> findBackgroundAndNotYetStarted() // <.> - List<C> findRecentBackgroundByTarget(Bookmark target) - Optional<C> findMostRecentReplayed() // <.> - Optional<C> findMostRecentCompleted() // <.> - List<C> findNotYetReplayed() + Optional<CommandLogEntry> findByInteractionId(UUID interactionId) + List<CommandLogEntry> findByParent(CommandLogEntry parent) + List<CommandLogEntry> findByParentInteractionId(UUID parentInteractionId) + List<CommandLogEntry> findByFromAndTo(LocalDate from, LocalDate to) + List<CommandLogEntry> findCurrent() + List<CommandLogEntry> findCompleted() + List<CommandLogEntry> findByTargetAndFromAndTo(Bookmark target, LocalDate from, LocalDate to) + List<CommandLogEntry> findMostRecent() + List<CommandLogEntry> findMostRecent(int limit) + List<CommandLogEntry> findRecentByUsername(String username) + List<CommandLogEntry> findRecentByTarget(Bookmark target) + List<CommandLogEntry> findRecentByTargetOrResult(Bookmark targetOrResult) + List<CommandLogEntry> findSince(UUID interactionId, Integer batchSize) // <.> + List<CommandLogEntry> findBackgroundAndNotYetStarted() // <.> + List<CommandLogEntry> findRecentBackgroundByTarget(Bookmark target) + Optional<CommandLogEntry> findMostRecentReplayed() // <.> + Optional<CommandLogEntry> findMostRecentCompleted() // <.> + List<CommandLogEntry> findNotYetReplayed() C saveForReplay(CommandDto dto) - List<C> saveForReplay(CommandsDto commandsDto) - void persist(C commandLogEntry) + List<CommandLogEntry> saveForReplay(CommandsDto commandsDto) + void persist(CommandLogEntry commandLogEntry) void truncateLog() - List<C> findCommandsOnPrimaryElseFail(UUID interactionId, Integer batchSize) - List<C> findAll() // <.> + List<CommandLogEntry> findCommandsOnPrimaryElseFail(UUID interactionId, Integer batchSize) + List<CommandLogEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepository.adoc index dba37db6ce..6561df78fa 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepository.adoc @@ -8,24 +8,23 @@ Provides supporting functionality for querying and persisting xref:refguide:exte [source,java] .ExecutionLogEntryRepository.java ---- -class ExecutionLogEntryRepository<E> { - Class<E> getEntityClass() - E createEntryAndPersist(Execution execution) - List<E> findByInteractionId(UUID interactionId) - Optional<E> findByInteractionIdAndSequence(UUID interactionId, int sequence) - List<E> findByFromAndTo(LocalDate from, LocalDate to) - List<E> findMostRecent() - List<E> findMostRecent(int limit) - List<E> findByTarget(Bookmark target) - List<E> findByTargetAndTimestampAfter(Bookmark target, Timestamp timestamp) - List<E> findByTargetAndTimestampBefore(Bookmark target, Timestamp timestamp) - List<E> findByTargetAndTimestampBetween(Bookmark target, Timestamp timestampFrom, Timestamp timestampTo) - List<E> findByTimestampAfter(Timestamp timestamp) - List<E> findByTimestampBefore(Timestamp timestamp) - List<E> findByTimestampBetween(Timestamp timestampFrom, Timestamp timestampTo) - List<E> findRecentByUsername(String username) - List<E> findRecentByTarget(Bookmark target) - List<E> findAll() // <.> +interface ExecutionLogEntryRepository { + ExecutionLogEntry createEntryAndPersist(Execution execution) + List<ExecutionLogEntry> findByInteractionId(UUID interactionId) + Optional<ExecutionLogEntry> findByInteractionIdAndSequence(UUID interactionId, int sequence) + List<ExecutionLogEntry> findByFromAndTo(LocalDate from, LocalDate to) + List<ExecutionLogEntry> findMostRecent() + List<ExecutionLogEntry> findMostRecent(int limit) + List<ExecutionLogEntry> findByTarget(Bookmark target) + List<ExecutionLogEntry> findByTargetAndTimestampAfter(Bookmark target, Timestamp timestamp) + List<ExecutionLogEntry> findByTargetAndTimestampBefore(Bookmark target, Timestamp timestamp) + List<ExecutionLogEntry> findByTargetAndTimestampBetween(Bookmark target, Timestamp timestampFrom, Timestamp timestampTo) + List<ExecutionLogEntry> findByTimestampAfter(Timestamp timestamp) + List<ExecutionLogEntry> findByTimestampBefore(Timestamp timestamp) + List<ExecutionLogEntry> findByTimestampBetween(Timestamp timestampFrom, Timestamp timestampTo) + List<ExecutionLogEntry> findRecentByUsername(String username) + List<ExecutionLogEntry> findRecentByTarget(Bookmark target) + List<ExecutionLogEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepositoryAbstract.adoc similarity index 52% copy from antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepository.adoc copy to antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepositoryAbstract.adoc index dba37db6ce..0fe514fb36 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/executionlog/applib/dom/ExecutionLogEntryRepositoryAbstract.adoc @@ -1,4 +1,4 @@ -= ExecutionLogEntryRepository += ExecutionLogEntryRepositoryAbstract :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...] Provides supporting functionality for querying and persisting xref:refguide:extensions:index/executionlog/applib/dom/ExecutionLogEntry.adoc[ExecutionLogEntry] entities. @@ -6,26 +6,26 @@ Provides supporting functionality for querying and persisting xref:refguide:exte == API [source,java] -.ExecutionLogEntryRepository.java +.ExecutionLogEntryRepositoryAbstract.java ---- -class ExecutionLogEntryRepository<E> { +class ExecutionLogEntryRepositoryAbstract<E> { Class<E> getEntityClass() E createEntryAndPersist(Execution execution) - List<E> findByInteractionId(UUID interactionId) - Optional<E> findByInteractionIdAndSequence(UUID interactionId, int sequence) - List<E> findByFromAndTo(LocalDate from, LocalDate to) - List<E> findMostRecent() - List<E> findMostRecent(int limit) - List<E> findByTarget(Bookmark target) - List<E> findByTargetAndTimestampAfter(Bookmark target, Timestamp timestamp) - List<E> findByTargetAndTimestampBefore(Bookmark target, Timestamp timestamp) - List<E> findByTargetAndTimestampBetween(Bookmark target, Timestamp timestampFrom, Timestamp timestampTo) - List<E> findByTimestampAfter(Timestamp timestamp) - List<E> findByTimestampBefore(Timestamp timestamp) - List<E> findByTimestampBetween(Timestamp timestampFrom, Timestamp timestampTo) - List<E> findRecentByUsername(String username) - List<E> findRecentByTarget(Bookmark target) - List<E> findAll() // <.> + List<ExecutionLogEntry> findByInteractionId(UUID interactionId) + Optional<ExecutionLogEntry> findByInteractionIdAndSequence(UUID interactionId, int sequence) + List<ExecutionLogEntry> findByFromAndTo(LocalDate from, LocalDate to) + List<ExecutionLogEntry> findMostRecent() + List<ExecutionLogEntry> findMostRecent(int limit) + List<ExecutionLogEntry> findByTarget(Bookmark target) + List<ExecutionLogEntry> findByTargetAndTimestampAfter(Bookmark target, Timestamp timestamp) + List<ExecutionLogEntry> findByTargetAndTimestampBefore(Bookmark target, Timestamp timestamp) + List<ExecutionLogEntry> findByTargetAndTimestampBetween(Bookmark target, Timestamp timestampFrom, Timestamp timestampTo) + List<ExecutionLogEntry> findByTimestampAfter(Timestamp timestamp) + List<ExecutionLogEntry> findByTimestampBefore(Timestamp timestamp) + List<ExecutionLogEntry> findByTimestampBetween(Timestamp timestampFrom, Timestamp timestampTo) + List<ExecutionLogEntry> findRecentByUsername(String username) + List<ExecutionLogEntry> findRecentByTarget(Bookmark target) + List<ExecutionLogEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepository.adoc index 0cf15f7702..265b07046d 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepository.adoc @@ -8,16 +8,15 @@ Provides supporting functionality for querying and persisting xref:refguide:exte [source,java] .ExecutionOutboxEntryRepository.java ---- -class ExecutionOutboxEntryRepository<E> { +interface ExecutionOutboxEntryRepository { public final static String LOGICAL_TYPE_NAME; - Class<E> getEntityClass() - E createEntryAndPersist(Execution execution) - Optional<E> findByInteractionIdAndSequence(UUID interactionId, int sequence) - List<E> findOldest() + ExecutionOutboxEntry createEntryAndPersist(Execution execution) + Optional<ExecutionOutboxEntry> findByInteractionIdAndSequence(UUID interactionId, int sequence) + List<ExecutionOutboxEntry> findOldest() ExecutionOutboxEntry upsert(UUID interactionId, int sequence, ExecutionOutboxEntryType executionType, Timestamp startedAt, String username, Bookmark target, String logicalMemberIdentifier, String xml) ExecutionOutboxEntry upsert(UUID interactionId, int sequence, ExecutionOutboxEntryType executionType, Timestamp startedAt, String username, Bookmark target, String logicalMemberIdentifier, InteractionDto interactionDto) boolean deleteByInteractionIdAndSequence(UUID interactionId, int sequence) - List<E> findAll() // <.> + List<ExecutionOutboxEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepositoryAbstract.adoc similarity index 85% copy from antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepository.adoc copy to antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepositoryAbstract.adoc index 0cf15f7702..e6c49fd9f7 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/applib/dom/ExecutionOutboxEntryRepositoryAbstract.adoc @@ -1,4 +1,4 @@ -= ExecutionOutboxEntryRepository += ExecutionOutboxEntryRepositoryAbstract :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...] Provides supporting functionality for querying and persisting xref:refguide:extensions:index/executionoutbox/applib/dom/ExecutionOutboxEntry.adoc[ExecutionOutboxEntry] entities. @@ -6,18 +6,18 @@ Provides supporting functionality for querying and persisting xref:refguide:exte == API [source,java] -.ExecutionOutboxEntryRepository.java +.ExecutionOutboxEntryRepositoryAbstract.java ---- -class ExecutionOutboxEntryRepository<E> { +class ExecutionOutboxEntryRepositoryAbstract<E> { public final static String LOGICAL_TYPE_NAME; Class<E> getEntityClass() E createEntryAndPersist(Execution execution) - Optional<E> findByInteractionIdAndSequence(UUID interactionId, int sequence) - List<E> findOldest() + Optional<ExecutionOutboxEntry> findByInteractionIdAndSequence(UUID interactionId, int sequence) + List<ExecutionOutboxEntry> findOldest() ExecutionOutboxEntry upsert(UUID interactionId, int sequence, ExecutionOutboxEntryType executionType, Timestamp startedAt, String username, Bookmark target, String logicalMemberIdentifier, String xml) ExecutionOutboxEntry upsert(UUID interactionId, int sequence, ExecutionOutboxEntryType executionType, Timestamp startedAt, String username, Bookmark target, String logicalMemberIdentifier, InteractionDto interactionDto) boolean deleteByInteractionIdAndSequence(UUID interactionId, int sequence) - List<E> findAll() // <.> + List<ExecutionOutboxEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepository.adoc index 83e88b9a94..3cf1f291ac 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepository.adoc @@ -8,19 +8,19 @@ Provides supporting functionality for querying xref:refguide:extensions:index/se [source,java] .SessionLogEntryRepository.java ---- -class SessionLogEntryRepository<E> { +interface SessionLogEntryRepository { void logoutAllSessions(Timestamp logoutTimestamp) SessionLogEntry create(String username, UUID sessionGuid, String httpSessionId, SessionSubscriber.CausedBy causedBy, Timestamp timestamp) - Optional<E> findBySessionGuid(UUID sessionGuid) - Optional<E> findByHttpSessionId(String httpSessionId) - List<E> findByUsername(String username) - List<E> findByUsernameAndFromAndTo(String username, LocalDate from, LocalDate to) - List<E> findByFromAndTo(LocalDate from, LocalDate to) - List<E> findByUsernameAndStrictlyBefore(String username, Timestamp from) - List<E> findByUsernameAndStrictlyAfter(String username, Timestamp from) - List<E> findActiveSessions() - List<E> findRecentByUsername(String username) - List<E> findAll() // <.> + Optional<SessionLogEntry> findBySessionGuid(UUID sessionGuid) + Optional<SessionLogEntry> findByHttpSessionId(String httpSessionId) + List<SessionLogEntry> findByUsername(String username) + List<SessionLogEntry> findByUsernameAndFromAndTo(String username, LocalDate from, LocalDate to) + List<SessionLogEntry> findByFromAndTo(LocalDate from, LocalDate to) + List<SessionLogEntry> findByUsernameAndStrictlyBefore(String username, Timestamp from) + List<SessionLogEntry> findByUsernameAndStrictlyAfter(String username, Timestamp from) + List<SessionLogEntry> findActiveSessions() + List<SessionLogEntry> findRecentByUsername(String username) + List<SessionLogEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepository.adoc b/antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepositoryAbstract.adoc similarity index 63% copy from antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepository.adoc copy to antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepositoryAbstract.adoc index 83e88b9a94..f8578d5917 100644 --- a/antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepository.adoc +++ b/antora/components/refguide-index/modules/extensions/pages/index/sessionlog/applib/dom/SessionLogEntryRepositoryAbstract.adoc @@ -1,4 +1,4 @@ -= SessionLogEntryRepository += SessionLogEntryRepositoryAbstract :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...] Provides supporting functionality for querying xref:refguide:extensions:index/sessionlog/applib/dom/SessionLogEntry.adoc[SessionLogEntry] entities. @@ -6,21 +6,21 @@ Provides supporting functionality for querying xref:refguide:extensions:index/se == API [source,java] -.SessionLogEntryRepository.java +.SessionLogEntryRepositoryAbstract.java ---- -class SessionLogEntryRepository<E> { +class SessionLogEntryRepositoryAbstract<E> { void logoutAllSessions(Timestamp logoutTimestamp) SessionLogEntry create(String username, UUID sessionGuid, String httpSessionId, SessionSubscriber.CausedBy causedBy, Timestamp timestamp) - Optional<E> findBySessionGuid(UUID sessionGuid) - Optional<E> findByHttpSessionId(String httpSessionId) - List<E> findByUsername(String username) - List<E> findByUsernameAndFromAndTo(String username, LocalDate from, LocalDate to) - List<E> findByFromAndTo(LocalDate from, LocalDate to) - List<E> findByUsernameAndStrictlyBefore(String username, Timestamp from) - List<E> findByUsernameAndStrictlyAfter(String username, Timestamp from) - List<E> findActiveSessions() - List<E> findRecentByUsername(String username) - List<E> findAll() // <.> + Optional<SessionLogEntry> findBySessionGuid(UUID sessionGuid) + Optional<SessionLogEntry> findByHttpSessionId(String httpSessionId) + List<SessionLogEntry> findByUsername(String username) + List<SessionLogEntry> findByUsernameAndFromAndTo(String username, LocalDate from, LocalDate to) + List<SessionLogEntry> findByFromAndTo(LocalDate from, LocalDate to) + List<SessionLogEntry> findByUsernameAndStrictlyBefore(String username, Timestamp from) + List<SessionLogEntry> findByUsernameAndStrictlyAfter(String username, Timestamp from) + List<SessionLogEntry> findActiveSessions() + List<SessionLogEntry> findRecentByUsername(String username) + List<SessionLogEntry> findAll() // <.> void removeAll() // <.> } ---- diff --git a/antora/components/refguide-index/modules/persistence/pages/index/commons/integration/changetracking/EntityChangeTrackerDefault.adoc b/antora/components/refguide-index/modules/persistence/pages/index/commons/integration/changetracking/EntityChangeTrackerDefault.adoc index 6edd7e5b47..74b64c6053 100644 --- a/antora/components/refguide-index/modules/persistence/pages/index/commons/integration/changetracking/EntityChangeTrackerDefault.adoc +++ b/antora/components/refguide-index/modules/persistence/pages/index/commons/integration/changetracking/EntityChangeTrackerDefault.adoc @@ -12,6 +12,7 @@ The service is xref:refguide:applib:index/annotation/TransactionScope.adoc[Trans ---- class EntityChangeTrackerDefault { int getOrder() + void init() void destroy() Set<PropertyChangeRecord> snapshotPropertyChangeRecords() void beforeCompletion() diff --git a/antora/components/refguide-index/modules/viewer/pages/index/commons/applib/services/userprof/UserProfileUiService.adoc b/antora/components/refguide-index/modules/viewer/pages/index/commons/applib/services/userprof/UserProfileUiService.adoc index f5b796b6f6..23985f5ab6 100644 --- a/antora/components/refguide-index/modules/viewer/pages/index/commons/applib/services/userprof/UserProfileUiService.adoc +++ b/antora/components/refguide-index/modules/viewer/pages/index/commons/applib/services/userprof/UserProfileUiService.adoc @@ -27,3 +27,7 @@ A UI model to represent the currently logged in user. === userProfile() A UI model to represent the currently logged in user. + +include::hooks/UserProfileUiService_010-implementation.adoc[] + +include::hooks/UserProfileUiService_020-examples-and-usage.adoc[] diff --git a/core/adoc/modules/_overview/pages/about.adoc b/core/adoc/modules/_overview/pages/about.adoc index 5eaf115d88..1b8ee5c3d5 100644 --- a/core/adoc/modules/_overview/pages/about.adoc +++ b/core/adoc/modules/_overview/pages/about.adoc @@ -407,7 +407,6 @@ com.github.javafaker:javafaker:jar:<managed> + org.apache.causeway.commons:causeway-commons:jar:<managed> + org.apache.causeway.core:causeway-applib:jar:<managed> + org.apache.causeway.testing:causeway-testing-unittestsupport-applib:jar:<managed> + -org.projectlombok:lombok:jar:<managed> + **** .Document Index Entries @@ -1331,7 +1330,6 @@ o.a.i.core.runtimeservices.publish.LifecycleCallbackNotifier + o.a.i.core.runtimeservices.publish.ObjectLifecyclePublisherDefault + o.a.i.core.runtimeservices.recognizer.ExceptionRecognizerServiceDefault + o.a.i.core.runtimeservices.recognizer.dae.ExceptionRecognizerForDataAccessException + -o.a.i.core.runtimeservices.repository.RepositoryServiceDefault + o.a.i.core.runtimeservices.routing.RoutingServiceDefault + o.a.i.core.runtimeservices.scratchpad.ScratchpadDefault + o.a.i.core.runtimeservices.serializing.SerializingAdapterDefault + @@ -1351,11 +1349,13 @@ o.a.i.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefault + .Dependencies **** +com.sun.mail:jakarta.mail:jar:<managed> + jakarta.mail:jakarta.mail-api:jar:<managed> + org.apache.causeway.core:causeway-core-codegen-bytebuddy:jar:<managed> + org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> + org.apache.causeway.core:causeway-core-runtime:jar:<managed> + org.hsqldb:hsqldb:jar:<managed> + +org.springframework:spring-context-support:jar:<managed> + **** .Document Index Entries @@ -1536,6 +1536,7 @@ Directory: /persistence/commons **** o.a.i.persistence.commons.integration.changetracking.EntityChangeTrackerDefault + o.a.i.persistence.commons.integration.changetracking.PreAndPostValueEvaluatorServiceDefault + +o.a.i.persistence.commons.integration.repository.RepositoryServiceDefault + **** .Dependencies @@ -2472,6 +2473,165 @@ org.apache.causeway.viewer:causeway-viewer-commons-model:jar:<managed> + **** |=== +=== GraphQL + +[plantuml,GraphQL,svg] +---- +@startuml +set separator none +title GraphQL - Containers + +left to right direction + +skinparam { + arrowFontSize 10 + defaultTextAlignment center + wrapWidth 200 + maxMessageSize 100 +} + +hide stereotype + +skinparam rectangle<<GraphQL.ApacheCausewayViewerGraphQL>> { + BackgroundColor #438dd5 + FontColor #fffffe + BorderColor #2e6295 + shadowing false +} +skinparam rectangle<<GraphQL.ApacheCausewayViewerGraphQLApplib>> { + BackgroundColor #438dd5 + FontColor #fffffe + BorderColor #2e6295 + shadowing false +} +skinparam rectangle<<GraphQL.ApacheCausewayViewerGraphQLModel>> { + BackgroundColor #438dd5 + FontColor #fffffe + BorderColor #2e6295 + shadowing false +} +skinparam rectangle<<GraphQL.ApacheCausewayViewerGraphQLTest>> { + BackgroundColor #438dd5 + FontColor #fffffe + BorderColor #2e6295 + shadowing false +} +skinparam rectangle<<GraphQL.ApacheCausewayViewerGraphQLViewer>> { + BackgroundColor #438dd5 + FontColor #fffffe + BorderColor #2e6295 + shadowing false +} +skinparam rectangle<<GraphQL>> { + BorderColor #9a9a9a + FontColor #9a9a9a + shadowing false +} + +rectangle "GraphQL\n<size:10>[Software System]</size>" <<GraphQL>> { + rectangle "==Apache Causeway Viewer - GraphQL\n<size:10>[Container: packaging: pom]</size>" <<GraphQL.ApacheCausewayViewerGraphQL>> as GraphQL.ApacheCausewayViewerGraphQL + rectangle "==Apache Causeway Viewer - GraphQL (Applib)\n<size:10>[Container: packaging: jar]</size>" <<GraphQL.ApacheCausewayViewerGraphQLApplib>> as GraphQL.ApacheCausewayViewerGraphQLApplib + rectangle "==Apache Causeway Viewer - GraphQL (Model)\n<size:10>[Container: packaging: jar]</size>" <<GraphQL.ApacheCausewayViewerGraphQLModel>> as GraphQL.ApacheCausewayViewerGraphQLModel + rectangle "==Apache Causeway Viewer - GraphQL (Test)\n<size:10>[Container: packaging: jar]</size>" <<GraphQL.ApacheCausewayViewerGraphQLTest>> as GraphQL.ApacheCausewayViewerGraphQLTest + rectangle "==Apache Causeway Viewer - GraphQL (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<GraphQL.ApacheCausewayViewerGraphQLViewer>> as GraphQL.ApacheCausewayViewerGraphQLViewer +} + +GraphQL.ApacheCausewayViewerGraphQL .[#707070,thickness=2].> GraphQL.ApacheCausewayViewerGraphQLViewer : "<color:#707070>" +GraphQL.ApacheCausewayViewerGraphQL .[#707070,thickness=2].> GraphQL.ApacheCausewayViewerGraphQLApplib : "<color:#707070>" +GraphQL.ApacheCausewayViewerGraphQL .[#707070,thickness=2].> GraphQL.ApacheCausewayViewerGraphQLModel : "<color:#707070>" +GraphQL.ApacheCausewayViewerGraphQL .[#707070,thickness=2].> GraphQL.ApacheCausewayViewerGraphQLTest : "<color:#707070>" +@enduml +---- + +.Projects/Modules (GraphQL) +[cols="3a,5a", options="header"] +|=== +|Coordinates |Description + +|Apache Causeway Viewer - GraphQL +[source,yaml] +---- +Group: org.apache.causeway.viewer +Artifact: causeway-viewer-graphql +Type: pom +Directory: /viewers/graphql +---- +| + +|Apache Causeway Viewer - GraphQL (Applib) +[source,yaml] +---- +Group: org.apache.causeway.viewer +Artifact: causeway-viewer-graphql-applib +Type: jar +Directory: /viewers/graphql/applib +---- +|.Dependencies +**** +org.apache.causeway.core:causeway-applib:jar:<managed> + +org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> + +**** + +|Apache Causeway Viewer - GraphQL (Model) +[source,yaml] +---- +Group: org.apache.causeway.viewer +Artifact: causeway-viewer-graphql-model +Type: jar +Directory: /viewers/graphql/model +---- +|.Dependencies +**** +com.graphql-java:graphql-java:jar:<managed> + +org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> + +org.apache.causeway.viewer:causeway-viewer-commons-model:jar:<managed> + +org.apache.causeway.viewer:causeway-viewer-graphql-applib:jar:<managed> + +org.springframework.boot:spring-boot-autoconfigure:jar:<managed> + +org.springframework.graphql:spring-graphql:jar:<managed> + +**** + +|Apache Causeway Viewer - GraphQL (Test) +[source,yaml] +---- +Group: org.apache.causeway.viewer +Artifact: causeway-viewer-graphql-test +Type: jar +Directory: /viewers/graphql/test +---- +|.Dependencies +**** +com.approvaltests:approvaltests:jar:<managed> + +com.h2database:h2:jar:<managed> + +org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> + +org.apache.causeway.core:causeway-core-runtimeservices:jar:<managed> + +org.apache.causeway.persistence:causeway-persistence-jpa-eclipselink:jar:<managed> + +org.apache.causeway.security:causeway-security-bypass:jar:<managed> + +org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> + +org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> + +org.apache.causeway.viewer:causeway-viewer-graphql-viewer:jar:<managed> + +org.springframework:spring-context-support:jar:<managed> + +org.springframework.boot:spring-boot-test-autoconfigure:jar:<managed> + +org.springframework.graphql:spring-graphql-test:jar:1.2.4 + +**** + +|Apache Causeway Viewer - GraphQL (Viewer) +[source,yaml] +---- +Group: org.apache.causeway.viewer +Artifact: causeway-viewer-graphql-viewer +Type: jar +Directory: /viewers/graphql/viewer +---- +|.Dependencies +**** +org.apache.causeway.core:causeway-core-webapp:jar:<managed> + +org.apache.causeway.viewer:causeway-viewer-graphql-model:jar:<managed> + +org.assertj:assertj-core:jar:<managed> + +org.junit.jupiter:junit-jupiter-api:jar:<managed> + +org.springframework.boot:spring-boot-starter-websocket:jar:<managed> + +**** +|=== + === Restful Objects [plantuml,Restful Objects,svg] @@ -2880,14 +3040,7 @@ Artifact: causeway-viewer-wicket-ui Type: jar Directory: /viewers/wicket/ui ---- -|.Components -**** -o.a.i.viewer.wicket.ui.app.logout.LogoutHandlerWkt + -o.a.i.viewer.wicket.ui.components.collectioncontents.export.CollectionContentsAsExportFactory + -o.a.i.viewer.wicket.ui.components.widgets.themepicker.CausewayWicketThemeSupportDefault + -**** - -.Dependencies +|.Dependencies **** com.google.guava:guava:jar:<managed> + de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed> + @@ -2944,22 +3097,7 @@ Artifact: causeway-viewer-wicket-viewer Type: jar Directory: /viewers/wicket/viewer ---- -|.Components -**** -o.a.i.viewer.wicket.viewer.registries.components.ComponentFactoryRegistrarDefault + -o.a.i.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault + -o.a.i.viewer.wicket.viewer.registries.pages.PageClassListDefault + -o.a.i.viewer.wicket.viewer.registries.pages.PageClassRegistryDefault + -o.a.i.viewer.wicket.viewer.registries.pages.PageNavigationServiceDefault + -o.a.i.viewer.wicket.viewer.services.BookmarkUiServiceWicket + -o.a.i.viewer.wicket.viewer.services.DeepLinkServiceWicket + -o.a.i.viewer.wicket.viewer.services.HintStoreUsingWicketSession + -o.a.i.viewer.wicket.viewer.services.ImageResourceCacheClassPath + -o.a.i.viewer.wicket.viewer.webmodule.WebModuleWicket + -o.a.i.viewer.wicket.viewer.wicketapp.CausewayWicketApplication$ServiceInjectorHolder + -**** - -.Dependencies +|.Dependencies **** commons-io:commons-io:jar:<managed> + de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed> + @@ -4212,12 +4350,13 @@ o.a.i.extensions.audittrail.applib.spiimpl.EntityPropertyChangeSubscriberForAudi .Dependencies **** org.apache.causeway.core:causeway-core-runtime:jar:<managed> + +org.apache.causeway.extensions:causeway-extensions-commandlog-applib:jar:<managed> + org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> + **** .Document Index Entries **** -xref:refguide:extensions:index/audittrail/applib/app/AuditTrailMenu.adoc[AuditTrailMenu], xref:refguide:extensions:index/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.adoc[HasInteractionId_auditTrailEntries], xref:refguide:extensions:index/audittrail/applib/contributions/Object_recentAuditTrailEntries.adoc[Object_recentAuditTrailEntries], xref:refguide:extensions:index/audittrail/applib/dom/AuditTrailEntry.adoc[AuditTrailEntry], xref:refguide:extensions:index/audittr [...] +xref:refguide:extensions:index/audittrail/applib/app/AuditTrailMenu.adoc[AuditTrailMenu], xref:refguide:extensions:index/audittrail/applib/contributions/HasInteractionId_auditTrailEntries.adoc[HasInteractionId_auditTrailEntries], xref:refguide:extensions:index/audittrail/applib/contributions/Object_createdByCommand.adoc[Object_createdByCommand], xref:refguide:extensions:index/audittrail/applib/contributions/Object_recentAuditTrailEntries.adoc[Object_recentAuditTrailEntries], xref:refguid [...] **** |Apache Causeway Ext - Audit Trail Persistence (using JDO) @@ -4487,6 +4626,7 @@ o.a.i.extensions.pdfjs.metamodel.facet.PdfJsViewerFacetFromAnnotationFactory$Reg **** org.apache.causeway.core:causeway-core-metamodel:jar:<managed> + org.apache.causeway.extensions:causeway-extensions-pdfjs-applib:jar:<managed> + +org.apache.causeway.persistence:causeway-persistence-commons:jar:<managed> + org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<managed> + **** @@ -4814,7 +4954,7 @@ org.apache.causeway.testing:causeway-testing-integtestsupport-applib:jar:<manage .Document Index Entries **** -xref:refguide:extensions:index/sessionlog/applib/app/SessionLogMenu.adoc[SessionLogMenu], xref:refguide:extensions:index/sessionlog/applib/contributions/HasUsername_recentSessionsForUser.adoc[HasUsername_recentSessionsForUser], xref:refguide:extensions:index/sessionlog/applib/dom/SessionLogEntry.adoc[SessionLogEntry], xref:refguide:extensions:index/sessionlog/applib/dom/SessionLogEntryRepository.adoc[SessionLogEntryRepository], xref:refguide:extensions:index/sessionlog/applib/spiimpl/Ses [...] +xref:refguide:extensions:index/sessionlog/applib/app/SessionLogMenu.adoc[SessionLogMenu], xref:refguide:extensions:index/sessionlog/applib/contributions/HasUsername_recentSessionsForUser.adoc[HasUsername_recentSessionsForUser], xref:refguide:extensions:index/sessionlog/applib/dom/SessionLogEntry.adoc[SessionLogEntry], xref:refguide:extensions:index/sessionlog/applib/dom/SessionLogEntryRepository.adoc[SessionLogEntryRepository], xref:refguide:extensions:index/sessionlog/applib/dom/Session [...] **** |Apache Causeway Ext - Session Log Persistence (using JDO) @@ -5251,7 +5391,7 @@ org.quartz-scheduler:quartz:jar:<managed> + .Document Index Entries **** -xref:refguide:extensions:index/commandlog/applib/app/CommandLogMenu.adoc[CommandLogMenu], xref:refguide:extensions:index/commandlog/applib/contributions/HasInteractionId_commandLogEntry.adoc[HasInteractionId_commandLogEntry], xref:refguide:extensions:index/commandlog/applib/contributions/HasUsername_recentCommandsByUser.adoc[HasUsername_recentCommandsByUser], xref:refguide:extensions:index/commandlog/applib/contributions/Object_recentCommands.adoc[Object_recentCommands], xref:refguide:ex [...] +xref:refguide:extensions:index/commandlog/applib/app/CommandLogMenu.adoc[CommandLogMenu], xref:refguide:extensions:index/commandlog/applib/contributions/HasInteractionId_commandLogEntry.adoc[HasInteractionId_commandLogEntry], xref:refguide:extensions:index/commandlog/applib/contributions/HasUsername_recentCommandsByUser.adoc[HasUsername_recentCommandsByUser], xref:refguide:extensions:index/commandlog/applib/contributions/Object_recentCommands.adoc[Object_recentCommands], xref:refguide:ex [...] **** |Apache Causeway Ext - Command Log Implementation (JDO) @@ -5507,7 +5647,7 @@ org.apache.causeway.testing:causeway-testing-unittestsupport-applib:jar:<managed .Document Index Entries **** -xref:refguide:extensions:index/executionlog/applib/CausewayModuleExtExecutionLogApplib.adoc[CausewayModuleExtExecutionLogApplib], xref:refguide:extensions:index/executionlog/applib/app/ExecutionLogMenu.adoc[ExecutionLogMenu], xref:refguide:extensions:index/executionlog/applib/contributions/HasInteractionId_executionLogEntries.adoc[HasInteractionId_executionLogEntries], xref:refguide:extensions:index/executionlog/applib/contributions/HasUsername_recentExecutionsByUser.adoc[HasUsername_rec [...] +xref:refguide:extensions:index/executionlog/applib/CausewayModuleExtExecutionLogApplib.adoc[CausewayModuleExtExecutionLogApplib], xref:refguide:extensions:index/executionlog/applib/app/ExecutionLogMenu.adoc[ExecutionLogMenu], xref:refguide:extensions:index/executionlog/applib/contributions/HasInteractionId_executionLogEntries.adoc[HasInteractionId_executionLogEntries], xref:refguide:extensions:index/executionlog/applib/contributions/HasUsername_recentExecutionsByUser.adoc[HasUsername_rec [...] **** |Apache Causeway Ext - Execution Log Implementation (JDO) @@ -5679,7 +5819,7 @@ org.apache.causeway.testing:causeway-testing-unittestsupport-applib:jar:<managed .Document Index Entries **** -xref:refguide:extensions:index/executionoutbox/applib/CausewayModuleExtExecutionOutboxApplib.adoc[CausewayModuleExtExecutionOutboxApplib], xref:refguide:extensions:index/executionoutbox/applib/app/ExecutionOutboxMenu.adoc[ExecutionOutboxMenu], xref:refguide:extensions:index/executionoutbox/applib/dom/ExecutionOutboxEntry.adoc[ExecutionOutboxEntry], xref:refguide:extensions:index/executionoutbox/applib/dom/ExecutionOutboxEntryRepository.adoc[ExecutionOutboxEntryRepository], xref:refguide: [...] +xref:refguide:extensions:index/executionoutbox/applib/CausewayModuleExtExecutionOutboxApplib.adoc[CausewayModuleExtExecutionOutboxApplib], xref:refguide:extensions:index/executionoutbox/applib/app/ExecutionOutboxMenu.adoc[ExecutionOutboxMenu], xref:refguide:extensions:index/executionoutbox/applib/dom/ExecutionOutboxEntry.adoc[ExecutionOutboxEntry], xref:refguide:extensions:index/executionoutbox/applib/dom/ExecutionOutboxEntryRepository.adoc[ExecutionOutboxEntryRepository], xref:refguide: [...] **** |Apache Causeway Ext - Execution Outbox Implementation (JDO) @@ -6524,7 +6664,31 @@ Artifact: causeway-regressiontests-stable Type: jar Directory: /regressiontests/stable ---- -|.Dependencies +|.Components +**** +o.a.i.testdomain.jdo.JdoInventoryDao + +o.a.i.testdomain.jdo.JdoTestFixtures + +o.a.i.testdomain.jpa.JpaInventoryDao + +o.a.i.testdomain.jpa.JpaTestFixtures + +o.a.i.testdomain.jpa.springdata.EmployeeRepository + +o.a.i.testdomain.model.valuetypes.ValueTypeExampleService + +o.a.i.testdomain.publishing.PublishingTestFactoryAbstract$CommitListener + +o.a.i.testdomain.publishing.PublishingTestFactoryJdo + +o.a.i.testdomain.publishing.PublishingTestFactoryJpa + +o.a.i.testdomain.publishing.subscriber.CommandSubscriberForTesting + +o.a.i.testdomain.publishing.subscriber.EntityChangesSubscriberForTesting + +o.a.i.testdomain.publishing.subscriber.EntityPropertyChangeSubscriberForTesting + +o.a.i.testdomain.publishing.subscriber.ExecutionSubscriberForTesting + +o.a.i.testdomain.util.event.LifecycleEventSubscriberJdoForTesting + +o.a.i.testdomain.util.event.LifecycleEventSubscriberJpaForTesting + +o.a.i.testdomain.util.interaction.DomainObjectTesterFactory + +o.a.i.testdomain.util.interaction.InteractionBoundaryProbe + +o.a.i.testdomain.util.kv.KVStoreForTesting + +o.a.i.testdomain.util.rest.RestEndpointService + +o.a.i.testdomain.wrapperfactory.CounterRepository + +**** + +.Dependencies **** org.apache.causeway.extensions:causeway-extensions-fullcalendar-applib:jar:<managed> + org.apache.causeway.extensions:causeway-extensions-secman-encryption-jbcrypt:jar:<managed> + @@ -6532,6 +6696,7 @@ org.apache.causeway.extensions:causeway-extensions-secman-integration:jar:<manag org.apache.causeway.extensions:causeway-extensions-secman-persistence-jdo:jar:<managed> + org.apache.causeway.extensions:causeway-extensions-sse-metamodel:jar:<managed> + org.apache.causeway.mavendeps:causeway-mavendeps-webapp:pom:<managed> + +org.apache.causeway.persistence:causeway-persistence-commons:jar:<managed> + org.apache.causeway.persistence:causeway-persistence-jdo-datanucleus:jar:<managed> + org.apache.causeway.persistence:causeway-persistence-jpa-eclipselink:jar:<managed> + org.apache.causeway.security:causeway-security-shiro:jar:<managed> + @@ -6638,6 +6803,8 @@ Directory: /regressiontests/stable-config ---- |.Dependencies **** +com.icegreen:greenmail-junit5:jar:1.6.15 + +org.apache.causeway.core:causeway-core-runtimeservices:jar:<managed> + org.apache.causeway.regressiontests:causeway-regressiontests-stable:jar:<managed> + **** @@ -6925,165 +7092,13 @@ Directory: /incubator === Kroviz Client -=== GraphQL Viewer - -[plantuml,GraphQL Viewer,svg] ----- -@startuml -set separator none -title GraphQL Viewer - Containers - -left to right direction - -skinparam { - arrowFontSize 10 - defaultTextAlignment center - wrapWidth 200 - maxMessageSize 100 -} - -hide stereotype - -skinparam rectangle<<GraphQLViewer.ApacheCausewayIncViewerGraphQL>> { - BackgroundColor #438dd5 - FontColor #fffffe - BorderColor #2e6295 - shadowing false -} -skinparam rectangle<<GraphQLViewer.ApacheCausewayIncViewerGraphQLApplib>> { - BackgroundColor #438dd5 - FontColor #fffffe - BorderColor #2e6295 - shadowing false -} -skinparam rectangle<<GraphQLViewer.ApacheCausewayIncViewerGraphQLModel>> { - BackgroundColor #438dd5 - FontColor #fffffe - BorderColor #2e6295 - shadowing false -} -skinparam rectangle<<GraphQLViewer.ApacheCausewayIncViewerGraphQLTest>> { - BackgroundColor #438dd5 - FontColor #fffffe - BorderColor #2e6295 - shadowing false -} -skinparam rectangle<<GraphQLViewer.ApacheCausewayIncViewerGraphQLViewer>> { - BackgroundColor #438dd5 - FontColor #fffffe - BorderColor #2e6295 - shadowing false -} -skinparam rectangle<<GraphQLViewer>> { - BorderColor #9a9a9a - FontColor #9a9a9a - shadowing false -} - -rectangle "GraphQL Viewer\n<size:10>[Software System]</size>" <<GraphQLViewer>> { - rectangle "==Apache Causeway Inc - Viewer GraphQL\n<size:10>[Container: packaging: pom]</size>" <<GraphQLViewer.ApacheCausewayIncViewerGraphQL>> as GraphQLViewer.ApacheCausewayIncViewerGraphQL - rectangle "==Apache Causeway Inc - Viewer GraphQL (Applib)\n<size:10>[Container: packaging: jar]</size>" <<GraphQLViewer.ApacheCausewayIncViewerGraphQLApplib>> as GraphQLViewer.ApacheCausewayIncViewerGraphQLApplib - rectangle "==Apache Causeway Inc - Viewer GraphQL (Model)\n<size:10>[Container: packaging: jar]</size>" <<GraphQLViewer.ApacheCausewayIncViewerGraphQLModel>> as GraphQLViewer.ApacheCausewayIncViewerGraphQLModel - rectangle "==Apache Causeway Inc - Viewer GraphQL (Test)\n<size:10>[Container: packaging: jar]</size>" <<GraphQLViewer.ApacheCausewayIncViewerGraphQLTest>> as GraphQLViewer.ApacheCausewayIncViewerGraphQLTest - rectangle "==Apache Causeway Inc - Viewer GraphQL (Viewer)\n<size:10>[Container: packaging: jar]</size>" <<GraphQLViewer.ApacheCausewayIncViewerGraphQLViewer>> as GraphQLViewer.ApacheCausewayIncViewerGraphQLViewer -} - -GraphQLViewer.ApacheCausewayIncViewerGraphQL .[#707070,thickness=2].> GraphQLViewer.ApacheCausewayIncViewerGraphQLViewer : "<color:#707070>" -GraphQLViewer.ApacheCausewayIncViewerGraphQL .[#707070,thickness=2].> GraphQLViewer.ApacheCausewayIncViewerGraphQLApplib : "<color:#707070>" -GraphQLViewer.ApacheCausewayIncViewerGraphQL .[#707070,thickness=2].> GraphQLViewer.ApacheCausewayIncViewerGraphQLModel : "<color:#707070>" -GraphQLViewer.ApacheCausewayIncViewerGraphQL .[#707070,thickness=2].> GraphQLViewer.ApacheCausewayIncViewerGraphQLTest : "<color:#707070>" -@enduml ----- - -.Projects/Modules (GraphQL Viewer) -[cols="3a,5a", options="header"] -|=== -|Coordinates |Description - -|Apache Causeway Inc - Viewer GraphQL -[source,yaml] ----- -Group: org.apache.causeway.incubator.viewer -Artifact: causeway-viewer-graphql -Type: pom -Directory: /incubator/viewers/graphql ----- -| - -|Apache Causeway Inc - Viewer GraphQL (Applib) -[source,yaml] ----- -Group: org.apache.causeway.incubator.viewer -Artifact: causeway-viewer-graphql-applib -Type: jar -Directory: /incubator/viewers/graphql/applib ----- -|.Dependencies -**** -org.apache.causeway.core:causeway-applib:jar:<managed> + -org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> + -**** +=== Command Replay -|Apache Causeway Inc - Viewer GraphQL (Model) -[source,yaml] ----- -Group: org.apache.causeway.incubator.viewer -Artifact: causeway-viewer-graphql-model -Type: jar -Directory: /incubator/viewers/graphql/model ----- -|.Dependencies -**** -com.graphql-java:graphql-java:jar:<managed> + -org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> + -org.apache.causeway.incubator.viewer:causeway-viewer-graphql-applib:jar:<managed> + -org.apache.causeway.viewer:causeway-viewer-commons-model:jar:<managed> + -org.springframework.graphql:spring-graphql:jar:<managed> + -**** - -|Apache Causeway Inc - Viewer GraphQL (Test) -[source,yaml] ----- -Group: org.apache.causeway.incubator.viewer -Artifact: causeway-viewer-graphql-test -Type: jar -Directory: /incubator/viewers/graphql/test ----- -|.Dependencies -**** -com.approvaltests:approvaltests:jar:<managed> + -com.h2database:h2:jar:<managed> + -org.apache.causeway.core:causeway-core-internaltestsupport:jar:<managed> + -org.apache.causeway.core:causeway-core-runtimeservices:jar:<managed> + -org.apache.causeway.incubator.viewer:causeway-viewer-graphql-viewer:jar:<managed> + -org.apache.causeway.persistence:causeway-persistence-jpa-eclipselink:jar:<managed> + -org.apache.causeway.security:causeway-security-bypass:jar:<managed> + -org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> + -**** - -|Apache Causeway Inc - Viewer GraphQL (Viewer) -[source,yaml] ----- -Group: org.apache.causeway.incubator.viewer -Artifact: causeway-viewer-graphql-viewer -Type: jar -Directory: /incubator/viewers/graphql/viewer ----- -|.Dependencies -**** -org.apache.causeway.core:causeway-core-webapp:jar:<managed> + -org.apache.causeway.incubator.viewer:causeway-viewer-graphql-model:jar:<managed> + -org.springframework.boot:spring-boot-starter-websocket:jar:<managed> + -**** -|=== - -== Other - -[plantuml,Other,svg] +[plantuml,Command Replay,svg] ---- @startuml set separator none -title Other - Containers +title Command Replay - Containers left to right direction @@ -7096,47 +7111,47 @@ skinparam { hide stereotype -skinparam rectangle<<Other.ApacheCausewayExtCommandReplay>> { +skinparam rectangle<<CommandReplay.ApacheCausewayIncCoreCommandReplay>> { BackgroundColor #438dd5 FontColor #fffffe BorderColor #2e6295 shadowing false } -skinparam rectangle<<Other.ApacheCausewayExtCommandReplayforPrimary>> { +skinparam rectangle<<CommandReplay.ApacheCausewayIncCoreCommandReplayforPrimary>> { BackgroundColor #438dd5 FontColor #fffffe BorderColor #2e6295 shadowing false } -skinparam rectangle<<Other.ApacheCausewayExtCommandReplayforSecondary>> { +skinparam rectangle<<CommandReplay.ApacheCausewayIncCoreCommandReplayforSecondary>> { BackgroundColor #438dd5 FontColor #fffffe BorderColor #2e6295 shadowing false } -skinparam rectangle<<Other>> { +skinparam rectangle<<CommandReplay>> { BorderColor #9a9a9a FontColor #9a9a9a shadowing false } -rectangle "Other\n<size:10>[Software System]</size>" <<Other>> { - rectangle "==Apache Causeway Ext - Command Replay\n<size:10>[Container: packaging: pom]</size>" <<Other.ApacheCausewayExtCommandReplay>> as Other.ApacheCausewayExtCommandReplay - rectangle "==Apache Causeway Ext - Command Replay for Primary\n<size:10>[Container: packaging: jar]</size>" <<Other.ApacheCausewayExtCommandReplayforPrimary>> as Other.ApacheCausewayExtCommandReplayforPrimary - rectangle "==Apache Causeway Ext - Command Replay for Secondary\n<size:10>[Container: packaging: jar]</size>" <<Other.ApacheCausewayExtCommandReplayforSecondary>> as Other.ApacheCausewayExtCommandReplayforSecondary +rectangle "Command Replay\n<size:10>[Software System]</size>" <<CommandReplay>> { + rectangle "==Apache Causeway Inc - Core Command Replay\n<size:10>[Container: packaging: pom]</size>" <<CommandReplay.ApacheCausewayIncCoreCommandReplay>> as CommandReplay.ApacheCausewayIncCoreCommandReplay + rectangle "==Apache Causeway Inc - Core Command Replay for Primary\n<size:10>[Container: packaging: jar]</size>" <<CommandReplay.ApacheCausewayIncCoreCommandReplayforPrimary>> as CommandReplay.ApacheCausewayIncCoreCommandReplayforPrimary + rectangle "==Apache Causeway Inc - Core Command Replay for Secondary\n<size:10>[Container: packaging: jar]</size>" <<CommandReplay.ApacheCausewayIncCoreCommandReplayforSecondary>> as CommandReplay.ApacheCausewayIncCoreCommandReplayforSecondary } -Other.ApacheCausewayExtCommandReplay .[#707070,thickness=2].> Other.ApacheCausewayExtCommandReplayforPrimary : "<color:#707070>" -Other.ApacheCausewayExtCommandReplay .[#707070,thickness=2].> Other.ApacheCausewayExtCommandReplayforSecondary : "<color:#707070>" +CommandReplay.ApacheCausewayIncCoreCommandReplay .[#707070,thickness=2].> CommandReplay.ApacheCausewayIncCoreCommandReplayforPrimary : "<color:#707070>" +CommandReplay.ApacheCausewayIncCoreCommandReplay .[#707070,thickness=2].> CommandReplay.ApacheCausewayIncCoreCommandReplayforSecondary : "<color:#707070>" @enduml ---- -.Projects/Modules (Other) +.Projects/Modules (Command Replay) [cols="3a,5a", options="header"] |=== |Coordinates |Description -|Apache Causeway Ext - Command Replay +|Apache Causeway Inc - Core Command Replay [source,yaml] ---- Group: org.apache.causeway.incubator.extensions @@ -7146,7 +7161,7 @@ Directory: /incubator/extensions/core/commandreplay ---- |Replays commands to secondary system -|Apache Causeway Ext - Command Replay for Primary +|Apache Causeway Inc - Core Command Replay for Primary [source,yaml] ---- Group: org.apache.causeway.incubator.extensions @@ -7156,6 +7171,12 @@ Directory: /incubator/extensions/core/commandreplay/primary ---- |A module for obtaining commands from a primary +.Components +**** +o.a.i.extensions.commandreplay.primary.config.PrimaryConfig + +o.a.i.extensions.commandreplay.primary.spiimpl.CaptureResultOfCommand + +**** + .Dependencies **** org.apache.causeway.core:causeway-core-config:jar:<managed> + @@ -7170,7 +7191,7 @@ org.apache.causeway.testing:causeway-testing-fixtures-applib:jar:<managed> + xref:refguide:extensions:index/commandreplay/primary/CausewayModuleExtCommandReplayPrimary.adoc[CausewayModuleExtCommandReplayPrimary], xref:refguide:extensions:index/commandreplay/primary/config/PrimaryConfig.adoc[PrimaryConfig], xref:refguide:extensions:index/commandreplay/primary/mixins/Object_openOnSecondary.adoc[Object_openOnSecondary], xref:refguide:extensions:index/commandreplay/primary/restapi/CommandRetrievalOnPrimaryService.adoc[CommandRetrievalOnPrimaryService], xref:refguide: [...] **** -|Apache Causeway Ext - Command Replay for Secondary +|Apache Causeway Inc - Core Command Replay for Secondary [source,yaml] ---- Group: org.apache.causeway.incubator.extensions @@ -7181,6 +7202,16 @@ Directory: /incubator/extensions/core/commandreplay/secondary |A module providing a Quartz Job to run on a secondary system, for obtaining commands from a primary and saving them so that they are replayed. +.Components +**** +o.a.i.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserException + +o.a.i.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserResult + +o.a.i.extensions.commandreplay.secondary.analysis.CommandReplayAnalysisService + +o.a.i.extensions.commandreplay.secondary.config.SecondaryConfig + +o.a.i.extensions.commandreplay.secondary.fetch.CommandFetcher + +o.a.i.extensions.commandreplay.secondary.job.ReplicateAndReplayJob + +**** + .Dependencies **** org.apache.causeway.core:causeway-core-config:jar:<managed> + diff --git a/viewers/graphql/applib/pom.xml b/viewers/graphql/applib/pom.xml index 5fa363dffd..86edc7a0ea 100644 --- a/viewers/graphql/applib/pom.xml +++ b/viewers/graphql/applib/pom.xml @@ -41,11 +41,34 @@ <dependency> <groupId>org.apache.causeway.core</groupId> - <artifactId>causeway-applib</artifactId> + <artifactId>causeway-core-metamodel</artifactId> </dependency> + <dependency> + <groupId>org.springframework.graphql</groupId> + <artifactId>spring-graphql</artifactId> + <exclusions> + <exclusion> + <groupId>com.graphql-java</groupId> + <artifactId>graphql-java</artifactId> + </exclusion> + </exclusions> + </dependency> - <!-- TEST DEPENDENCIES --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-autoconfigure</artifactId> + </dependency> + + <dependency> + <!-- override spring, for security and bug-fixes --> + <groupId>com.graphql-java</groupId> + <artifactId>graphql-java</artifactId> + </dependency> + + + + <!-- TEST DEPENDENCIES --> <dependency> <groupId>org.apache.causeway.core</groupId> diff --git a/viewers/graphql/applib/src/main/java/module-info.java b/viewers/graphql/applib/src/main/java/module-info.java index 47981d2a9e..d6dc1a4fed 100644 --- a/viewers/graphql/applib/src/main/java/module-info.java +++ b/viewers/graphql/applib/src/main/java/module-info.java @@ -1,5 +1,10 @@ module org.apache.causeway.incubator.viewer.graphql.applib { exports org.apache.causeway.viewer.graphql.applib; + exports org.apache.causeway.viewer.graphql.applib.types; + exports org.apache.causeway.viewer.graphql.applib.auth; requires spring.context; + requires com.graphqljava; + requires org.apache.causeway.core.config; + requires org.apache.causeway.core.metamodel; } \ No newline at end of file diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/auth/UserMementoProvider.java b/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/auth/UserMementoProvider.java similarity index 56% rename from viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/auth/UserMementoProvider.java rename to viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/auth/UserMementoProvider.java index e54ff131f0..71c916555b 100644 --- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/auth/UserMementoProvider.java +++ b/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/auth/UserMementoProvider.java @@ -16,27 +16,35 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.causeway.viewer.graphql.viewer.auth; +package org.apache.causeway.viewer.graphql.applib.auth; + +import graphql.ExperimentalApi; +import graphql.execution.ExecutionContext; +import graphql.execution.ExecutionStrategyParameters; import org.apache.causeway.applib.services.user.UserMemento; import org.apache.causeway.core.config.CausewayConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - +/** + * SPI to obtain the {@link UserMemento} (in other words the identity of the executing user) from + * the provided GraphQL {@link ExecutionContext} and {@link ExecutionStrategyParameters}. + * + * <p> + * The framework provides a default implementation (as a fallback) that returns a statically configured user + * </p> + * + * <p> + * <b>NOTE</b>: this API is considered experimental/beta and may change in the future. + * </p> + * + * @since 2.0 {@index} + * + * @beta + */ +@ExperimentalApi public interface UserMementoProvider { - UserMemento userMemento(); - - @Configuration - class AutoConfiguration { + UserMemento userMemento(ExecutionContext executionContext, ExecutionStrategyParameters parameters); - @Bean - @ConditionalOnMissingBean(UserMementoProvider.class) - public UserMementoProvider defaultIdentityProvider(final CausewayConfiguration causewayConfiguration) { - return new UserMementoProviderDefault(causewayConfiguration); - } - } } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java b/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java similarity index 77% rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java rename to viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java index cd702bfc46..afa53462f7 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapper.java +++ b/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java @@ -16,33 +16,34 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.causeway.viewer.graphql.model.types; +package org.apache.causeway.viewer.graphql.applib.types; +import graphql.ExperimentalApi; import graphql.schema.*; -import org.apache.causeway.core.config.CausewayConfiguration; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.OneToManyActionParameter; import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.causeway.core.metamodel.spec.feature.OneToOneFeature; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.lang.Nullable; +/** + * SPI to map framework's own datatypes to GraphQL's types. + * + * <p> + * The framework provides a default implementation (as a fallback) that supports most of the common data types. + * </p> + * + * <p> + * <b>NOTE</b>: this API is considered experimental/beta and may change in the future. + * </p> + * + * @since 2.0 {@index} + */ +@ExperimentalApi public interface TypeMapper { - @Configuration - class TypeMapperConfiguration { - - @Bean - @ConditionalOnMissingBean(TypeMapper.class) - public TypeMapper defaultTypeMapper(final CausewayConfiguration causewayConfiguration) { - return new TypeMapperDefault(causewayConfiguration); - } - } - GraphQLScalarType scalarTypeFor(final Class<?> c); GraphQLOutputType outputTypeFor(final OneToOneFeature oneToOneFeature); @@ -76,7 +77,7 @@ public interface TypeMapper { INVOKE, SET, ; - boolean isOptionalAlwaysAllowed() { + public boolean isOptionalAlwaysAllowed() { return !(this == INVOKE || this == SET); } } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java index 733b32a0ca..61b8935186 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java @@ -22,15 +22,13 @@ import graphql.schema.GraphQLCodeRegistry; import lombok.RequiredArgsConstructor; -import java.util.EnumSet; - import org.apache.causeway.applib.services.bookmark.BookmarkService; import org.apache.causeway.commons.collections.ImmutableEnumSet; import org.apache.causeway.core.config.CausewayConfiguration; import org.apache.causeway.core.config.environment.CausewaySystemEnvironment; import org.apache.causeway.core.metamodel.spec.ActionScope; import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java index 3cf5a7612e..7822e6e5d8 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java @@ -29,17 +29,13 @@ import org.apache.causeway.core.metamodel.spec.feature.OneToManyActionParameter; import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter; import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojoFetcher; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import graphql.schema.*; import lombok.extern.log4j.Log4j2; import lombok.val; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; import java.util.Optional; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java index e1356732a0..3872f8f477 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java @@ -36,7 +36,7 @@ import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import lombok.val; import lombok.extern.log4j.Log4j2; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java index c05f8b891a..6e742c58d2 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java @@ -28,7 +28,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojoFetcher; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import graphql.schema.DataFetchingEnvironment; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java index 1279b1bf90..65c2718d63 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java @@ -35,7 +35,7 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; - import org.apache.causeway.viewer.graphql.model.types.TypeMapper; + import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import static graphql.schema.GraphQLNonNull.nonNull; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java index 2fec45c1ee..7c4ca73b45 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java @@ -31,7 +31,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import graphql.schema.GraphQLList; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java index 8a7405bc1d..62899607c5 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java @@ -32,7 +32,7 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; - import org.apache.causeway.viewer.graphql.model.types.TypeMapper; + import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import lombok.val; import lombok.extern.log4j.Log4j2; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java index 9c5bdfe88a..781fc89ea6 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java @@ -28,7 +28,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import lombok.val; import lombok.extern.log4j.Log4j2; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java index 345f7a4a13..f2409cb62f 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java @@ -28,7 +28,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import lombok.val; import lombok.extern.log4j.Log4j2; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java index 5798572484..1c0baad74f 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java @@ -28,7 +28,7 @@ import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import lombok.val; import lombok.extern.log4j.Log4j2; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java index a96f6ace58..0b24823000 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java @@ -28,7 +28,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojoFetcher; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import graphql.schema.DataFetchingEnvironment; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java index 64b58dc73e..056f215409 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java @@ -31,7 +31,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import lombok.val; import lombok.extern.log4j.Log4j2; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java index d342ede8eb..8185ba0bc0 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java @@ -20,7 +20,6 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.causeway.viewer.graphql.model.context.Context; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import lombok.val; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java index f1e79a8983..0960db17f7 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java @@ -22,7 +22,7 @@ import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojoFetcher; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import graphql.schema.*; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java index 79e48b6621..3588494c31 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java @@ -27,7 +27,6 @@ import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import static graphql.schema.GraphQLNonNull.nonNull; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java index 49320cf76c..31a99f7636 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java @@ -28,7 +28,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import lombok.val; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java index 820df38fcf..e2475e5704 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java @@ -20,7 +20,6 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.causeway.viewer.graphql.model.context.Context; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import lombok.val; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java index ef7854e6d9..5053d3737a 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java @@ -19,7 +19,6 @@ package org.apache.causeway.viewer.graphql.model.domain; import org.apache.causeway.applib.annotation.Where; -import org.apache.causeway.core.metamodel.consent.Consent; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; @@ -30,7 +29,7 @@ import org.apache.causeway.viewer.graphql.model.exceptions.InvalidException; import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import lombok.val; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java index a75ceccde3..e216c57cda 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java @@ -18,9 +18,6 @@ */ package org.apache.causeway.viewer.graphql.model.domain; -import java.util.Map; - -import org.apache.causeway.core.metamodel.consent.Consent; import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; import org.apache.causeway.core.metamodel.object.ManagedObject; import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation; @@ -28,7 +25,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider; import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import lombok.val; diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java index f521f2ff88..678dcb2473 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java @@ -25,20 +25,20 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Map; -import javax.annotation.Priority; import javax.inject.Inject; import javax.ws.rs.NotSupportedException; import org.apache.causeway.core.config.CausewayConfiguration; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; + import org.joda.time.DateTime; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.lang.Nullable; -import org.springframework.stereotype.Component; -import org.apache.causeway.applib.annotation.PriorityPrecedence; import org.apache.causeway.commons.internal.collections._Maps; import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.spec.feature.OneToManyActionParameter; @@ -62,6 +62,16 @@ import static graphql.schema.GraphQLTypeReference.typeRef; @RequiredArgsConstructor(onConstructor_ = {@Inject}) public class TypeMapperDefault implements TypeMapper { + @Configuration + public static class AutoConfiguration { + + @Bean + @ConditionalOnMissingBean(TypeMapper.class) + public TypeMapper defaultTypeMapper(final CausewayConfiguration causewayConfiguration) { + return new TypeMapperDefault(causewayConfiguration); + } + } + @SuppressWarnings("CdiInjectInspection") @Inject private final CausewayConfiguration causewayConfiguration; diff --git a/viewers/graphql/viewer/src/main/java/module-info.java b/viewers/graphql/viewer/src/main/java/module-info.java index c53d6f0e29..72afbea3c4 100644 --- a/viewers/graphql/viewer/src/main/java/module-info.java +++ b/viewers/graphql/viewer/src/main/java/module-info.java @@ -25,4 +25,5 @@ module org.apache.causeway.incubator.viewer.graphql.viewer { requires spring.core; requires spring.graphql; requires spring.tx; + requires org.apache.causeway.incubator.viewer.graphql.applib; } \ No newline at end of file diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/auth/UserMementoProviderDefault.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/auth/UserMementoProviderDefault.java index fb1000a94b..13e6aefbb1 100644 --- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/auth/UserMementoProviderDefault.java +++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/auth/UserMementoProviderDefault.java @@ -24,6 +24,14 @@ import org.apache.causeway.applib.services.user.RoleMemento; import org.apache.causeway.applib.services.user.UserMemento; import org.apache.causeway.commons.collections.Can; import org.apache.causeway.core.config.CausewayConfiguration; +import org.apache.causeway.viewer.graphql.applib.auth.UserMementoProvider; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import graphql.execution.ExecutionContext; +import graphql.execution.ExecutionStrategyParameters; import lombok.RequiredArgsConstructor; import lombok.val; @@ -31,12 +39,24 @@ import lombok.val; @RequiredArgsConstructor(onConstructor_ = {@Inject}) public class UserMementoProviderDefault implements UserMementoProvider { + @Configuration + public static class AutoConfiguration { + + @Bean + @ConditionalOnMissingBean(UserMementoProvider.class) + public UserMementoProvider defaultIdentityProvider(final CausewayConfiguration causewayConfiguration) { + return new UserMementoProviderDefault(causewayConfiguration); + } + } + @SuppressWarnings("CdiInjectInspection") @Inject private final CausewayConfiguration causewayConfiguration; @Override - public UserMemento userMemento() { + public UserMemento userMemento( + final ExecutionContext executionContext, + final ExecutionStrategyParameters parameters) { val fallbackUsername = causewayConfiguration.getViewer().getGqlv().getAuthentication().getFallback().getUsername(); if (fallbackUsername == null) { diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/AsyncExecutionStrategyResolvingWithinInteraction.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/AsyncExecutionStrategyResolvingWithinInteraction.java index 882fd1b610..401771f7c6 100644 --- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/AsyncExecutionStrategyResolvingWithinInteraction.java +++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/AsyncExecutionStrategyResolvingWithinInteraction.java @@ -21,12 +21,9 @@ package org.apache.causeway.viewer.graphql.viewer.integration; import java.util.concurrent.CompletableFuture; import org.apache.causeway.applib.services.iactnlayer.InteractionContext; -import org.apache.causeway.applib.services.user.RoleMemento; import org.apache.causeway.applib.services.user.UserMemento; -import org.apache.causeway.commons.collections.Can; -import org.apache.causeway.core.config.CausewayConfiguration; -import org.apache.causeway.viewer.graphql.viewer.auth.UserMementoProvider; +import org.apache.causeway.viewer.graphql.applib.auth.UserMementoProvider; import org.springframework.stereotype.Service; @@ -44,14 +41,14 @@ public class AsyncExecutionStrategyResolvingWithinInteraction extends AsyncExecu private final InteractionService interactionService; - private final UserMemento userMemento; + private final UserMementoProvider userMementoProvider; public AsyncExecutionStrategyResolvingWithinInteraction( final InteractionService interactionService, final UserMementoProvider userMementoProvider) { - this.interactionService = interactionService; - this.userMemento = userMementoProvider.userMemento(); + this.interactionService = interactionService; + this.userMementoProvider = userMementoProvider; } @@ -60,6 +57,8 @@ public class AsyncExecutionStrategyResolvingWithinInteraction extends AsyncExecu final ExecutionContext executionContext, final ExecutionStrategyParameters parameters) { + val userMemento = userMementoProvider.userMemento(executionContext, parameters); + if (userMemento != null) { return interactionService.call( InteractionContext.builder().user(userMemento).build(), diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java index 2ff2c42cde..542a24e42e 100644 --- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java +++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java @@ -38,7 +38,7 @@ import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainObject; import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService; -import org.apache.causeway.viewer.graphql.model.types.TypeMapper; +import org.apache.causeway.viewer.graphql.applib.types.TypeMapper; import org.apache.causeway.viewer.graphql.viewer.toplevel.GqlvTopLevelQuery; import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
