You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/01/10 07:41:19 UTC
[isis] branch 2033-IoC updated (94aea63 -> 595a8a0)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a change to branch 2033-IoC
in repository https://gitbox.apache.org/repos/asf/isis.git.
from 94aea63 cleanup previous merge
add 15ae5b8 ISIS-1899: update docs - release process
add 017eacb ISIS-1899: updates docs for 1.17.0 release
add 74a1c23 ISIS-1899: updates html template for 1.17.0
add 53fc418 ISIS-1899: fixes some bad links
add 7e573ad ISIS-1899: updates to release notes and migration notes
add 74f46ee ISIS-1899: fixes index.html for 1.17.0
add def829a ISIS-2072: bumps core's parent to latest ASF version (21)
add 3c2c5c6 ISIS-2078: extends @ActionLayout to allow modal vs sidebar promptStyle to be selected on an action-by-action basis
add 7cc51fc ISIS-2078: tidies up StandaloneCollectionPanel, no longer implements ActionPromptProvider
add c6f8229 ISIS-2078: tidies up StandaloneCollectionPanel, removes unused div for modal dialog
add 0d0a4a7 ISIS-2078: handles service actions (ie menu items) gracefully if there promptStyle is set to INLINE or INLINE_AS_IF_EDIT
add 115c700 ISIS-2080: adds LayoutFacet with Method and Fallback implementations
add f2841bc ISIS-2080: adds GridService2 and GridLoaderService2 with support for loading different layouts
add 3b90371 ISIS-2079: improves rebuildMetaModel mixin to return the object being rebuilt.
add 37aeeeb ISIS-2079: fixes rebuildMetaModel to return the mixee rather than itself (a mixin)
add ee80c61 ISIS-2081: updates @ActionLayout and XML to allow redirect policy to be specified on a case-by-case basis.
add 6b57899 ISIS-2080: updates docs for alternate layouts and also @ActionLayout#redirect
add b7ebfb6 ISIS-2080: changes naming convention for alternative layout file name
add c4bb64e ISIS-2081: adds @DomainObjectLayout(layoutUiEvent=...)
add 5fcad44 ISIS-2081: updates .adocs
add 4573d5b ISIS-2082: updates download.adoc, parameterize using __versions.adoc[].
add 4a5363a Merge branch 'master' into v2
add 17ce576 fixes compile/unit test errors from merge.
add ce55270 ISIS-2067: adds TODO to the migration-notes.adoc
new 595a8a0 Merge remote-tracking branch 'apache/v2' into 2033-IoC
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
STATUS | 4 +
.../asciidoc/applib/layout/component/component.xsd | 12 ++
.../documentation/src/main/asciidoc/doap_isis.rdf | 48 ++++++
.../cgcom/_cgcom_post-release-successful.adoc | 23 +--
.../rgant/_rgant-ActionLayout_bookmarking.adoc | 15 +-
.../guides/rgant/_rgant-ActionLayout_cssClass.adoc | 22 +--
.../rgant/_rgant-ActionLayout_cssClassFa.adoc | 21 +--
.../rgant/_rgant-ActionLayout_describedAs.adoc | 22 +--
.../guides/rgant/_rgant-ActionLayout_hidden.adoc | 31 ++--
.../guides/rgant/_rgant-ActionLayout_named.adoc | 29 ++--
.../guides/rgant/_rgant-ActionLayout_position.adoc | 11 +-
.../rgant/_rgant-ActionLayout_promptStyle.adoc | 23 ++-
.../guides/rgant/_rgant-ActionLayout_redirect.adoc | 62 ++++++++
.../guides/rgant/_rgant-Action_hidden.adoc | 9 +-
.../guides/rgant/_rgant-Action_typeOf.adoc | 8 +-
.../rgant/_rgant-CollectionLayout_cssClass.adoc | 16 +-
.../rgant/_rgant-CollectionLayout_defaultView.adoc | 19 ++-
.../rgant/_rgant-CollectionLayout_describedAs.adoc | 12 +-
.../rgant/_rgant-CollectionLayout_hidden.adoc | 32 ++--
.../rgant/_rgant-CollectionLayout_named.adoc | 36 ++---
.../rgant/_rgant-CollectionLayout_paged.adoc | 24 +--
.../rgant/_rgant-CollectionLayout_sortedBy.adoc | 14 +-
.../guides/rgant/_rgant-Collection_editing.adoc | 11 +-
.../guides/rgant/_rgant-Collection_hidden.adoc | 10 +-
.../guides/rgant/_rgant-Collection_typeOf.adoc | 6 +-
.../guides/rgant/_rgant-DomainObjectLayout.adoc | 6 +
.../_rgant-DomainObjectLayout_bookmarking.adoc | 3 +
.../rgant/_rgant-DomainObjectLayout_cssClass.adoc | 21 ++-
.../_rgant-DomainObjectLayout_cssClassFa.adoc | 9 +-
.../_rgant-DomainObjectLayout_cssClassUiEvent.adoc | 4 +
.../_rgant-DomainObjectLayout_describedAs.adoc | 16 +-
.../_rgant-DomainObjectLayout_iconUiEvent.adoc | 7 +-
.../_rgant-DomainObjectLayout_layoutUiEvent.adoc | 114 ++++++++++++++
.../rgant/_rgant-DomainObjectLayout_named.adoc | 15 +-
.../rgant/_rgant-DomainObjectLayout_paged.adoc | 9 +-
.../rgant/_rgant-DomainObjectLayout_plural.adoc | 6 +-
.../_rgant-DomainObjectLayout_titleUiEvent.adoc | 5 +
.../rgant/_rgant-DomainServiceLayout_named.adoc | 13 +-
.../guides/rgant/_rgant-DomainService_nature.adoc | 9 +-
.../rgant/_rgant-ParameterLayout_cssClass.adoc | 13 +-
.../_rgant-ParameterLayout_labelPosition.adoc | 24 +--
.../guides/rgant/_rgant-ParameterLayout_named.adoc | 14 +-
.../guides/rgant/_rgant-Parameter_maxLength.adoc | 8 +-
.../rgant/_rgant-Parameter_regexPattern.adoc | 7 +-
.../rgant/_rgant-PropertyLayout_cssClass.adoc | 26 ++--
.../rgant/_rgant-PropertyLayout_describedAs.adoc | 13 +-
.../guides/rgant/_rgant-PropertyLayout_hidden.adoc | 35 ++---
.../rgant/_rgant-PropertyLayout_labelPosition.adoc | 31 ++--
.../rgant/_rgant-PropertyLayout_multiLine.adoc | 20 +--
.../guides/rgant/_rgant-PropertyLayout_named.adoc | 38 ++---
.../rgant/_rgant-PropertyLayout_promptStyle.adoc | 1 -
.../_rgant-PropertyLayout_renderedAsDayBefore.adoc | 13 +-
.../rgant/_rgant-PropertyLayout_typicalLength.adoc | 4 +-
.../guides/rgant/_rgant-Property_editing.adoc | 8 +-
.../guides/rgant/_rgant-Property_hidden.adoc | 11 +-
.../guides/rgant/_rgant-Property_maxLength.adoc | 14 +-
.../guides/rgant/_rgant-Property_regexPattern.adoc | 14 +-
.../guides/rgant/_rgant-ViewModelLayout.adoc | 27 +++-
.../_rgant-ViewModelLayout_bookmarking.adoc} | 10 +-
.../rgant/_rgant-ViewModelLayout_cssClass.adoc | 21 +--
.../rgant/_rgant-ViewModelLayout_cssClassFa.adoc | 30 +---
...=> _rgant-ViewModelLayout_cssClassUiEvent.adoc} | 14 +-
.../rgant/_rgant-ViewModelLayout_describedAs.adoc | 16 +-
.../_rgant-ViewModelLayout_iconUiEvent.adoc} | 24 +--
...c => _rgant-ViewModelLayout_layoutUiEvent.adoc} | 14 +-
.../guides/rgant/_rgant-ViewModelLayout_named.adoc | 28 +---
.../guides/rgant/_rgant-ViewModelLayout_paged.adoc | 28 +---
.../rgant/_rgant-ViewModelLayout_plural.adoc | 13 +-
.../_rgant-ViewModelLayout_titleUiEvent.adoc} | 11 +-
.../guides/rgcfg/_rgcfg_configuring-core.adoc | 36 +++++
.../guides/rgcms/_rgcms_methods_reserved.adoc | 14 +-
.../rgcms/_rgcms_methods_reserved_cssClass.adoc | 14 +-
.../guides/rgcms/_rgcms_methods_reserved_hide.adoc | 3 +-
.../rgcms/_rgcms_methods_reserved_iconName.adoc | 20 ++-
.../rgcms/_rgcms_methods_reserved_layout.adoc | 48 ++++++
.../rgcms/_rgcms_methods_reserved_title.adoc | 23 +--
.../guides/ugvro/_ugvro_layout-resources.adoc | 4 +-
.../guides/ugvw/_ugvw_layout_file-based.adoc | 107 +++++++------
.../guides/ugvw/images/layouts/customer-order.png | Bin 6026 -> 5981 bytes
adocs/documentation/src/main/asciidoc/index.html | 7 +-
.../_migration-notes_1.16.0-to-1.17.0.adoc | 29 +++-
.../release-notes/_release-notes_1.17.0.adoc | 88 ++++++++++-
.../main/asciidoc/release-notes/release-notes.adoc | 12 +-
.../org/apache/isis/applib/IsisApplibModule.java | 4 +
.../isis/applib/annotation/ActionLayout.java | 8 +
.../isis/applib/annotation/DomainObjectLayout.java | 14 +-
.../apache/isis/applib/annotation/PromptStyle.java | 18 ++-
.../{BookmarkPolicy.java => Redirect.java} | 34 +++--
.../isis/applib/annotation/ViewModelLayout.java | 52 ++++++-
.../isis/applib/domain/DomainObjectList.java | 4 +-
.../applib/layout/component/ActionLayoutData.java | 14 ++
.../mixins/layout/Object_rebuildMetamodel.java | 3 +-
.../eventbus/LayoutUiEvent.java} | 55 +++----
...dLoaderService.java => GridLoaderService2.java} | 21 +--
.../CommandWithDto.java => grid/GridService2.java} | 20 +--
.../actions/layout/ActionLayoutFacetFactory.java | 10 ++
...> RedirectFacetFromActionLayoutAnnotation.java} | 24 ++-
...ionXml.java => RedirectFacetFromActionXml.java} | 19 +--
.../redirect/RedirectFacet.java} | 10 +-
.../RedirectFacetAbstract.java} | 33 ++--
.../redirect/RedirectFacetFallback.java} | 9 +-
...ModelLayoutAnnotationUsingCssClassUiEvent.java} | 29 ++--
.../DomainObjectLayoutFacetFactory.java | 18 +++
...ViewModelLayoutAnnotationUsingIconUiEvent.java} | 29 ++--
...nObjectLayoutAnnotationUsingLayoutUiEvent.java} | 82 +++++-----
...iewModelLayoutAnnotationUsingLayoutUiEvent.java | 119 +++++++++++++++
...iewModelLayoutAnnotationUsingTitleUiEvent.java} | 41 +++--
.../metamodel/facets/object/grid/GridFacet.java | 3 +-
.../facets/object/grid/GridFacetDefault.java | 21 +--
.../facets/object/grid/GridFacetFactory.java | 4 +-
.../layout/LayoutFacet.java} | 21 +--
.../layout/LayoutFacetAbstract.java} | 13 +-
.../LayoutFacetFactory.java} | 22 +--
.../layout/LayoutFacetFallback.java} | 17 ++-
.../LayoutFacetMethod.java} | 14 +-
.../services/grid/GridLoaderServiceDefault.java | 167 ++++++++++++++-------
.../services/grid/GridServiceDefault.java | 14 +-
.../services/grid/GridSystemServiceAbstract.java | 2 +
.../services/layout/LayoutServiceDefault.java | 2 +-
.../dflt/ProgrammingModelFacetsJava5.java | 2 +
.../DomainObjectLayoutFactoryTest.java | 2 +-
.../LayoutFacetFactoryTest.java} | 28 ++--
.../LayoutFacetMethodTest.java} | 28 ++--
...dLoaderServiceDefault_resourceNameFor_Test.java | 8 +-
.../SpecificationLoaderTestAbstract.java | 8 +-
core/pom.xml | 2 +-
.../resources/DomainObjectResourceServerside.java | 3 +-
.../resources/DomainTypeResourceServerside.java | 2 +-
.../wicket/model/models/ActionPromptProvider.java | 7 +-
.../CollectionContentsAsAjaxTablePanel.java | 7 +-
.../links/EntityLinksSelectorPanelFactory.java | 4 +-
.../components/scalars/ScalarPanelAbstract2.java | 7 +-
.../StandaloneCollectionPanel.html | 2 -
.../StandaloneCollectionPanel.java | 17 +--
.../linkandlabel/ActionLinkFactoryAbstract.java | 13 +-
.../isis/viewer/wicket/ui/pages/PageAbstract.java | 22 ++-
.../viewer/wicket/ui/pages/entity/EntityPage.java | 2 +-
.../wicket/ui/panels/FormExecutorDefault.java | 54 +++++--
.../wicket/ui/panels/PromptFormAbstract.java | 39 +++--
migration-notes.adoc | 10 ++
140 files changed, 1875 insertions(+), 1054 deletions(-)
create mode 100644 adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_redirect.adoc
create mode 100644 adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_layoutUiEvent.adoc
copy adocs/documentation/src/main/asciidoc/guides/{rgcms/_rgcms_classes_i18n_TranslatableString.adoc => rgant/_rgant-ViewModelLayout_bookmarking.adoc} (72%)
copy adocs/documentation/src/main/asciidoc/guides/rgant/{_rgant_aaa.adoc => _rgant-ViewModelLayout_cssClassUiEvent.adoc} (57%)
copy adocs/documentation/src/main/asciidoc/guides/{dg/_dg_hints-and-tips_enhance-only.adoc => rgant/_rgant-ViewModelLayout_iconUiEvent.adoc} (52%)
copy adocs/documentation/src/main/asciidoc/guides/rgant/{_rgant_aaa.adoc => _rgant-ViewModelLayout_layoutUiEvent.adoc} (58%)
copy adocs/documentation/src/main/asciidoc/guides/{rgcms/_rgcms_classes_contributee.adoc => rgant/_rgant-ViewModelLayout_titleUiEvent.adoc} (60%)
create mode 100644 adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_reserved_layout.adoc
copy core/applib/src/main/java/org/apache/isis/applib/annotation/{BookmarkPolicy.java => Redirect.java} (60%)
copy core/applib/src/main/java/org/apache/isis/applib/{events/ui/CssClassUiEvent.java => services/eventbus/LayoutUiEvent.java} (62%)
copy core/applib/src/main/java/org/apache/isis/applib/services/grid/{GridLoaderService.java => GridLoaderService2.java} (68%)
copy core/applib/src/main/java/org/apache/isis/applib/services/{command/CommandWithDto.java => grid/GridService2.java} (67%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/{NamedFacetForActionLayoutAnnotation.java => RedirectFacetFromActionLayoutAnnotation.java} (61%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/{CssClassFacetForActionXml.java => RedirectFacetFromActionXml.java} (62%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{object/paged/PagedFacet.java => actions/redirect/RedirectFacet.java} (77%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/{position/ActionPositionFacetAbstract.java => redirect/RedirectFacetAbstract.java} (61%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{actcoll/typeof/TypeOfFacetDefaultToObject.java => actions/redirect/RedirectFacetFallback.java} (75%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/{CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java => CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java} (82%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/{IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java => IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java} (80%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/{IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java => LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.java} (51%)
create mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/{TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java => TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java} (80%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{actions/homepage/HomePageFacet.java => object/layout/LayoutFacet.java} (69%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{actions/notinservicemenu/NotInServiceMenuFacetAbstract.java => object/layout/LayoutFacetAbstract.java} (74%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/{cssclass/method/CssClassFacetMethodFactory.java => layout/LayoutFacetFactory.java} (72%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{fallback/TitleFacetNone.java => object/layout/LayoutFacetFallback.java} (69%)
copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/{icon/method/IconFacetMethod.java => layout/LayoutFacetMethod.java} (80%)
copy core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/{icon/IconFacetMethodFactoryTest.java => layout/LayoutFacetFactoryTest.java} (68%)
copy core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/{icon/IconFacetMethodTest.java => layout/LayoutFacetMethodTest.java} (71%)
[isis] 01/01: Merge remote-tracking branch 'apache/v2' into 2033-IoC
Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 2033-IoC
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 595a8a0b64dbee4561aa19d090afa993f2458134
Merge: 94aea63 ce55270
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 10 08:41:11 2019 +0100
Merge remote-tracking branch 'apache/v2' into 2033-IoC
Conflicts:
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
STATUS | 4 +
.../asciidoc/applib/layout/component/component.xsd | 12 ++
.../documentation/src/main/asciidoc/doap_isis.rdf | 48 ++++++
.../cgcom/_cgcom_post-release-successful.adoc | 23 +--
.../rgant/_rgant-ActionLayout_bookmarking.adoc | 15 +-
.../guides/rgant/_rgant-ActionLayout_cssClass.adoc | 22 +--
.../rgant/_rgant-ActionLayout_cssClassFa.adoc | 21 +--
.../rgant/_rgant-ActionLayout_describedAs.adoc | 22 +--
.../guides/rgant/_rgant-ActionLayout_hidden.adoc | 31 ++--
.../guides/rgant/_rgant-ActionLayout_named.adoc | 29 ++--
.../guides/rgant/_rgant-ActionLayout_position.adoc | 11 +-
.../rgant/_rgant-ActionLayout_promptStyle.adoc | 23 ++-
.../guides/rgant/_rgant-ActionLayout_redirect.adoc | 62 ++++++++
.../guides/rgant/_rgant-Action_hidden.adoc | 9 +-
.../guides/rgant/_rgant-Action_typeOf.adoc | 8 +-
.../rgant/_rgant-CollectionLayout_cssClass.adoc | 16 +-
.../rgant/_rgant-CollectionLayout_defaultView.adoc | 19 ++-
.../rgant/_rgant-CollectionLayout_describedAs.adoc | 12 +-
.../rgant/_rgant-CollectionLayout_hidden.adoc | 32 ++--
.../rgant/_rgant-CollectionLayout_named.adoc | 36 ++---
.../rgant/_rgant-CollectionLayout_paged.adoc | 24 +--
.../rgant/_rgant-CollectionLayout_sortedBy.adoc | 14 +-
.../guides/rgant/_rgant-Collection_editing.adoc | 11 +-
.../guides/rgant/_rgant-Collection_hidden.adoc | 10 +-
.../guides/rgant/_rgant-Collection_typeOf.adoc | 6 +-
.../guides/rgant/_rgant-DomainObjectLayout.adoc | 6 +
.../_rgant-DomainObjectLayout_bookmarking.adoc | 3 +
.../rgant/_rgant-DomainObjectLayout_cssClass.adoc | 21 ++-
.../_rgant-DomainObjectLayout_cssClassFa.adoc | 9 +-
.../_rgant-DomainObjectLayout_cssClassUiEvent.adoc | 4 +
.../_rgant-DomainObjectLayout_describedAs.adoc | 16 +-
.../_rgant-DomainObjectLayout_iconUiEvent.adoc | 7 +-
.../_rgant-DomainObjectLayout_layoutUiEvent.adoc | 114 ++++++++++++++
.../rgant/_rgant-DomainObjectLayout_named.adoc | 15 +-
.../rgant/_rgant-DomainObjectLayout_paged.adoc | 9 +-
.../rgant/_rgant-DomainObjectLayout_plural.adoc | 6 +-
.../_rgant-DomainObjectLayout_titleUiEvent.adoc | 5 +
.../rgant/_rgant-DomainServiceLayout_named.adoc | 13 +-
.../guides/rgant/_rgant-DomainService_nature.adoc | 9 +-
.../rgant/_rgant-ParameterLayout_cssClass.adoc | 13 +-
.../_rgant-ParameterLayout_labelPosition.adoc | 24 +--
.../guides/rgant/_rgant-ParameterLayout_named.adoc | 14 +-
.../guides/rgant/_rgant-Parameter_maxLength.adoc | 8 +-
.../rgant/_rgant-Parameter_regexPattern.adoc | 7 +-
.../rgant/_rgant-PropertyLayout_cssClass.adoc | 26 ++--
.../rgant/_rgant-PropertyLayout_describedAs.adoc | 13 +-
.../guides/rgant/_rgant-PropertyLayout_hidden.adoc | 35 ++---
.../rgant/_rgant-PropertyLayout_labelPosition.adoc | 31 ++--
.../rgant/_rgant-PropertyLayout_multiLine.adoc | 20 +--
.../guides/rgant/_rgant-PropertyLayout_named.adoc | 38 ++---
.../rgant/_rgant-PropertyLayout_promptStyle.adoc | 1 -
.../_rgant-PropertyLayout_renderedAsDayBefore.adoc | 13 +-
.../rgant/_rgant-PropertyLayout_typicalLength.adoc | 4 +-
.../guides/rgant/_rgant-Property_editing.adoc | 8 +-
.../guides/rgant/_rgant-Property_hidden.adoc | 11 +-
.../guides/rgant/_rgant-Property_maxLength.adoc | 14 +-
.../guides/rgant/_rgant-Property_regexPattern.adoc | 14 +-
.../guides/rgant/_rgant-ViewModelLayout.adoc | 27 +++-
.../rgant/_rgant-ViewModelLayout_bookmarking.adoc} | 22 +--
.../rgant/_rgant-ViewModelLayout_cssClass.adoc | 21 +--
.../rgant/_rgant-ViewModelLayout_cssClassFa.adoc | 30 +---
.../_rgant-ViewModelLayout_cssClassUiEvent.adoc} | 24 +--
.../rgant/_rgant-ViewModelLayout_describedAs.adoc | 16 +-
...doc => _rgant-ViewModelLayout_iconUiEvent.adoc} | 28 +---
.../_rgant-ViewModelLayout_layoutUiEvent.adoc} | 24 +--
.../guides/rgant/_rgant-ViewModelLayout_named.adoc | 28 +---
.../guides/rgant/_rgant-ViewModelLayout_paged.adoc | 28 +---
.../rgant/_rgant-ViewModelLayout_plural.adoc | 13 +-
.../_rgant-ViewModelLayout_titleUiEvent.adoc} | 24 +--
.../guides/rgcfg/_rgcfg_configuring-core.adoc | 36 +++++
.../guides/rgcms/_rgcms_methods_reserved.adoc | 14 +-
.../rgcms/_rgcms_methods_reserved_cssClass.adoc | 14 +-
.../guides/rgcms/_rgcms_methods_reserved_hide.adoc | 3 +-
.../rgcms/_rgcms_methods_reserved_iconName.adoc | 20 ++-
.../rgcms/_rgcms_methods_reserved_layout.adoc | 48 ++++++
.../rgcms/_rgcms_methods_reserved_title.adoc | 23 +--
.../guides/ugvro/_ugvro_layout-resources.adoc | 4 +-
.../guides/ugvw/_ugvw_layout_file-based.adoc | 107 +++++++------
.../guides/ugvw/images/layouts/customer-order.png | Bin 6026 -> 5981 bytes
adocs/documentation/src/main/asciidoc/index.html | 7 +-
.../_migration-notes_1.16.0-to-1.17.0.adoc | 29 +++-
.../release-notes/_release-notes_1.17.0.adoc | 88 ++++++++++-
.../main/asciidoc/release-notes/release-notes.adoc | 12 +-
.../org/apache/isis/applib/IsisApplibModule.java | 4 +
.../isis/applib/annotation/ActionLayout.java | 8 +
.../isis/applib/annotation/DomainObjectLayout.java | 14 +-
.../apache/isis/applib/annotation/PromptStyle.java | 18 ++-
.../apache/isis/applib/annotation/Redirect.java | 49 ++++++
.../isis/applib/annotation/ViewModelLayout.java | 52 ++++++-
.../isis/applib/domain/DomainObjectList.java | 4 +-
.../applib/layout/component/ActionLayoutData.java | 14 ++
.../mixins/layout/Object_rebuildMetamodel.java | 3 +-
.../applib/services/eventbus/LayoutUiEvent.java | 103 +++++++++++++
.../applib/services/grid/GridLoaderService2.java | 31 ++++
.../isis/applib/services/grid/GridService2.java | 32 ++++
.../actions/layout/ActionLayoutFacetFactory.java | 10 ++
.../RedirectFacetFromActionLayoutAnnotation.java | 45 ++++++
.../actions/layout/RedirectFacetFromActionXml.java | 43 ++++++
.../redirect/RedirectFacet.java} | 21 +--
.../actions/redirect/RedirectFacetAbstract.java | 66 ++++++++
.../redirect/RedirectFacetFallback.java} | 25 +--
...wModelLayoutAnnotationUsingCssClassUiEvent.java | 119 +++++++++++++++
.../DomainObjectLayoutFacetFactory.java | 18 +++
...aViewModelLayoutAnnotationUsingIconUiEvent.java | 120 +++++++++++++++
...inObjectLayoutAnnotationUsingLayoutUiEvent.java | 119 +++++++++++++++
...iewModelLayoutAnnotationUsingLayoutUiEvent.java | 119 +++++++++++++++
...ViewModelLayoutAnnotationUsingTitleUiEvent.java | 140 +++++++++++++++++
.../metamodel/facets/object/grid/GridFacet.java | 3 +-
.../facets/object/grid/GridFacetDefault.java | 21 +--
.../facets/object/grid/GridFacetFactory.java | 4 +-
.../GridFacet.java => layout/LayoutFacet.java} | 29 ++--
.../LayoutFacetAbstract.java} | 33 ++--
.../facets/object/layout/LayoutFacetFactory.java | 57 +++++++
.../LayoutFacetFallback.java} | 37 ++---
.../facets/object/layout/LayoutFacetMethod.java | 55 +++++++
.../services/grid/GridLoaderServiceDefault.java | 167 ++++++++++++++-------
.../services/grid/GridServiceDefault.java | 14 +-
.../services/grid/GridSystemServiceAbstract.java | 2 +
.../services/layout/LayoutServiceDefault.java | 2 +-
.../dflt/ProgrammingModelFacetsJava5.java | 2 +
.../DomainObjectLayoutFactoryTest.java | 2 +-
.../ident/layout/LayoutFacetFactoryTest.java | 71 +++++++++
.../object/ident/layout/LayoutFacetMethodTest.java | 84 +++++++++++
...dLoaderServiceDefault_resourceNameFor_Test.java | 8 +-
.../SpecificationLoaderTestAbstract.java | 8 +-
core/pom.xml | 2 +-
.../resources/DomainObjectResourceServerside.java | 3 +-
.../resources/DomainTypeResourceServerside.java | 2 +-
.../wicket/model/models/ActionPromptProvider.java | 7 +-
.../CollectionContentsAsAjaxTablePanel.java | 7 +-
.../links/EntityLinksSelectorPanelFactory.java | 4 +-
.../components/scalars/ScalarPanelAbstract2.java | 7 +-
.../StandaloneCollectionPanel.html | 2 -
.../StandaloneCollectionPanel.java | 17 +--
.../linkandlabel/ActionLinkFactoryAbstract.java | 13 +-
.../isis/viewer/wicket/ui/pages/PageAbstract.java | 22 ++-
.../viewer/wicket/ui/pages/entity/EntityPage.java | 2 +-
.../wicket/ui/panels/FormExecutorDefault.java | 54 +++++--
.../wicket/ui/panels/PromptFormAbstract.java | 39 +++--
migration-notes.adoc | 10 ++
140 files changed, 2801 insertions(+), 907 deletions(-)
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java
index 0000000,58cf372..88a9ecd
mode 000000,100644..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java
@@@ -1,0 -1,119 +1,119 @@@
+ /*
+ * 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 agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+ import java.util.List;
+ import java.util.Map;
+
+ import org.apache.isis.applib.NonRecoverableException;
+ import org.apache.isis.applib.annotation.ViewModelLayout;
+ import org.apache.isis.applib.events.ui.CssClassUiEvent;
+ import org.apache.isis.applib.services.eventbus.EventBusService;
++import org.apache.isis.applib.services.inject.ServiceInjector;
+ import org.apache.isis.commons.internal.base._Casts;
+ import org.apache.isis.config.IsisConfiguration;
+ import org.apache.isis.core.metamodel.facetapi.Facet;
+ import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+ import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+ import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
+ import org.apache.isis.core.metamodel.spec.ManagedObject;
+ import org.apache.isis.core.metamodel.util.EventUtil;
+
+ public class CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent extends FacetAbstract implements
+ CssClassFacet {
+
+ //private static final Logger LOG = LoggerFactory.getLogger(CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.class);
+
+ public static Facet create(
+ final List<ViewModelLayout> viewModelLayouts,
- final ServicesInjector servicesInjector,
++ final ServiceInjector serviceInjector,
+ final IsisConfiguration configuration, final FacetHolder facetHolder) {
+
+ return viewModelLayouts.stream()
+ .map(ViewModelLayout::cssClassUiEvent)
+ .filter(cssClassUiEventClass -> EventUtil.eventTypeIsPostable(
+ cssClassUiEventClass,
+ CssClassUiEvent.Noop.class,
+ CssClassUiEvent.Default.class,
+ "isis.reflector.facet.viewModelLayoutAnnotation.cssClassUiEvent.postForDefault",
+ configuration))
+ .findFirst()
+ .map(cssClassUiEventClass -> {
- final EventBusService eventBusService = servicesInjector.lookupServiceElseFail(EventBusService.class);
++ final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
+ return new CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent(
+ cssClassUiEventClass, eventBusService, facetHolder);
+ })
+ .orElse(null);
+ }
+
+ private final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass;
+ private final EventBusService eventBusService;
+
+ public CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent(
+ final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass,
+ final EventBusService eventBusService,
+ final FacetHolder holder) {
+ super(CssClassFacetAbstract.type(), holder, Derivation.NOT_DERIVED);
+ this.cssClassUiEventClass = cssClassUiEventClass;
+ this.eventBusService = eventBusService;
+ }
+
+ @Override
+ public String cssClass(final ManagedObject owningAdapter) {
+
+ final CssClassUiEvent<Object> cssClassUiEvent = newCssClassUiEvent(owningAdapter);
+
+ eventBusService.post(cssClassUiEvent);
+
+ final String cssClass = cssClassUiEvent.getCssClass();
+
+ if(cssClass == null) {
+ // ie no subscribers out there...
+ final Facet underlyingFacet = getUnderlyingFacet();
+ if(underlyingFacet instanceof CssClassFacet) {
+ final CssClassFacet underlyingCssClassFacet = (CssClassFacet) underlyingFacet;
+ return underlyingCssClassFacet.cssClass(owningAdapter);
+ }
+ }
+
+ return cssClass;
+ }
+
+ private CssClassUiEvent<Object> newCssClassUiEvent(final ManagedObject owningAdapter) {
+ final Object domainObject = owningAdapter.getPojo();
+ return newCssClassUiEventForPojo(domainObject);
+ }
+
+ private CssClassUiEvent<Object> newCssClassUiEventForPojo(final Object domainObject) {
+ try {
+ final CssClassUiEvent<Object> cssClassUiEvent = _Casts.uncheckedCast(cssClassUiEventClass.newInstance());
+ cssClassUiEvent.setSource(domainObject);
+ return cssClassUiEvent;
+ } catch (InstantiationException | IllegalAccessException ex) {
+ throw new NonRecoverableException(ex);
+ }
+ }
+
+ @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+ super.appendAttributesTo(attributeMap);
+ attributeMap.put("cssClassUiEventClass", cssClassUiEventClass);
+ }
+ }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
index 7af8f81,91addcd..c769757
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
@@@ -44,13 -44,31 +44,31 @@@ public class DomainObjectLayoutFacetFac
FacetUtil.addFacet(
TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.create(
- domainObjectLayouts, servicesInjector, getConfiguration(), facetHolder));
+ domainObjectLayouts, getServiceInjector(), getConfiguration(), facetHolder));
FacetUtil.addFacet(
+ TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.create(
- viewModelLayouts, servicesInjector, getConfiguration(), facetHolder));
++ viewModelLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+
+ FacetUtil.addFacet(
IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.create(
- domainObjectLayouts, servicesInjector, getConfiguration(), facetHolder));
+ domainObjectLayouts, getServiceInjector(), getConfiguration(), facetHolder));
FacetUtil.addFacet(
+ IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.create(
- viewModelLayouts, servicesInjector, getConfiguration(), facetHolder));
++ viewModelLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+
+ FacetUtil.addFacet(
CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.create(
- domainObjectLayouts, servicesInjector, getConfiguration(), facetHolder));
+ domainObjectLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ FacetUtil.addFacet(
+ CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.create(
- viewModelLayouts, servicesInjector, getConfiguration(), facetHolder));
++ viewModelLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+
+ FacetUtil.addFacet(
+ LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.create(
- domainObjectLayouts, servicesInjector, getConfiguration(), facetHolder));
++ domainObjectLayouts, getServiceInjector(), getConfiguration(), facetHolder));
+ FacetUtil.addFacet(
+ LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.create(
- viewModelLayouts, servicesInjector, getConfiguration(), facetHolder));
++ viewModelLayouts, getServiceInjector(), getConfiguration(), facetHolder));
FacetUtil.addFacet(
CssClassFacetForDomainObjectLayoutAnnotation.create(domainObjectLayouts, facetHolder));
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java
index 0000000,abe591f..f877d73
mode 000000,100644..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java
@@@ -1,0 -1,120 +1,120 @@@
+ /*
+ * 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 agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+ import java.util.List;
+ import java.util.Map;
+
+ import org.apache.isis.applib.NonRecoverableException;
+ import org.apache.isis.applib.annotation.ViewModelLayout;
+ import org.apache.isis.applib.events.ui.IconUiEvent;
+ import org.apache.isis.applib.services.eventbus.EventBusService;
++import org.apache.isis.applib.services.inject.ServiceInjector;
+ import org.apache.isis.commons.internal.base._Casts;
+ import org.apache.isis.config.IsisConfiguration;
+ import org.apache.isis.core.metamodel.facetapi.Facet;
+ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+ import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
+ import org.apache.isis.core.metamodel.facets.object.icon.IconFacetAbstract;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
+ import org.apache.isis.core.metamodel.spec.ManagedObject;
+ import org.apache.isis.core.metamodel.util.EventUtil;
+
+ public class IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent extends IconFacetAbstract {
+
+ //private static final Logger LOG = LoggerFactory.getLogger(IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.class);
+
+ public static Facet create(
+ final List<ViewModelLayout> viewModelLayouts,
- final ServicesInjector servicesInjector,
++ final ServiceInjector serviceInjector,
+ final IsisConfiguration configuration, final FacetHolder facetHolder) {
+
+ return viewModelLayouts.stream()
+ .map(ViewModelLayout::iconUiEvent)
+ .filter(iconUiEvent -> EventUtil.eventTypeIsPostable(
+ iconUiEvent,
+ IconUiEvent.Noop.class,
+ IconUiEvent.Default.class,
+ "isis.reflector.facet.viewModelLayoutAnnotation.iconUiEvent.postForDefault",
+ configuration))
+ .findFirst()
+ .map(iconUiEvent -> {
+
- final EventBusService eventBusService = servicesInjector.lookupServiceElseFail(EventBusService.class);
++ final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
+
+ return new IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent(
+ iconUiEvent, eventBusService, facetHolder);
+ })
+ .orElse(null);
+ }
+
+ private final Class<? extends IconUiEvent<?>> iconUiEventClass;
+ private final EventBusService eventBusService;
+
+ public IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent(
+ final Class<? extends IconUiEvent<?>> iconUiEventClass,
+ final EventBusService eventBusService,
+ final FacetHolder holder) {
+ super(holder);
+ this.iconUiEventClass = iconUiEventClass;
+ this.eventBusService = eventBusService;
+ }
+
+ @Override
+ public String iconName(final ManagedObject owningAdapter) {
+
+ final IconUiEvent<Object> iconUiEvent = newIconUiEvent(owningAdapter);
+
+ eventBusService.post(iconUiEvent);
+
+ final String iconName = iconUiEvent.getIconName();
+
+ if(iconName == null) {
+ // ie no subscribers out there...
+ final Facet underlyingFacet = getUnderlyingFacet();
+ if(underlyingFacet instanceof IconFacet) {
+ final IconFacet underlyingIconFacet = (IconFacet) underlyingFacet;
+ return underlyingIconFacet.iconName(owningAdapter);
+ }
+ }
+
+ return iconName; // could be null
+ }
+
+ private IconUiEvent<Object> newIconUiEvent(final ManagedObject owningAdapter) {
+ final Object domainObject = owningAdapter.getPojo();
+ return newIconUiEventForPojo(domainObject);
+ }
+
+ private IconUiEvent<Object> newIconUiEventForPojo(final Object domainObject) {
+ try {
+ final IconUiEvent<Object> iconUiEvent = _Casts.uncheckedCast(iconUiEventClass.newInstance());
+ iconUiEvent.setSource(domainObject);
+ return iconUiEvent;
+ } catch (InstantiationException | IllegalAccessException ex) {
+ throw new NonRecoverableException(ex);
+ }
+ }
+
+ @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+ super.appendAttributesTo(attributeMap);
+ attributeMap.put("iconUiEventClass", iconUiEventClass);
+ }
+
+ }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.java
index 0000000,2e79d11..2d0d22b
mode 000000,100644..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.java
@@@ -1,0 -1,119 +1,119 @@@
+ /*
+ * 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 agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+ import java.util.List;
+ import java.util.Map;
+
+ import org.apache.isis.applib.NonRecoverableException;
+ import org.apache.isis.applib.annotation.DomainObjectLayout;
+ import org.apache.isis.applib.services.eventbus.EventBusService;
+ import org.apache.isis.applib.services.eventbus.LayoutUiEvent;
++import org.apache.isis.applib.services.inject.ServiceInjector;
+ import org.apache.isis.config.IsisConfiguration;
+ import org.apache.isis.core.metamodel.facetapi.Facet;
+ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+ import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacet;
+ import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacetAbstract;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
+ import org.apache.isis.core.metamodel.spec.ManagedObject;
+ import org.apache.isis.core.metamodel.util.EventUtil;
+
+ public class LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent extends LayoutFacetAbstract implements
+ LayoutFacet {
+
+ //private static final Logger LOG = LoggerFactory.getLogger(LayoutFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.class);
+
+ public static Facet create(
+ final List<DomainObjectLayout> domainObjectLayouts,
- final ServicesInjector servicesInjector,
++ final ServiceInjector serviceInjector,
+ final IsisConfiguration configuration, final FacetHolder facetHolder) {
+
+ return domainObjectLayouts.stream()
+ .map(DomainObjectLayout::layoutUiEvent)
+ .filter(layoutUiEvent -> EventUtil.eventTypeIsPostable(
+ layoutUiEvent,
+ LayoutUiEvent.Noop.class,
+ LayoutUiEvent.Default.class,
+ "isis.reflector.facet.domainObjectLayoutAnnotation.layoutUiEvent.postForDefault",
+ configuration))
+ .findFirst()
+ .map(layoutUiEvent -> {
+
- final EventBusService eventBusService = servicesInjector.lookupServiceElseFail(EventBusService.class);
++ final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
+
+ return new LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent(
+ layoutUiEvent, eventBusService, facetHolder);
+ })
+ .orElse(null);
+ }
+
+ private final Class<? extends LayoutUiEvent<?>> layoutUiEventClass;
+ private final EventBusService eventBusService;
+
+ public LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent(
+ final Class<? extends LayoutUiEvent<?>> layoutUiEventClass,
+ final EventBusService eventBusService,
+ final FacetHolder holder) {
+ super(holder);
+ this.layoutUiEventClass = layoutUiEventClass;
+ this.eventBusService = eventBusService;
+ }
+
+ @Override
+ public String layout(final ManagedObject owningAdapter) {
+
+ final LayoutUiEvent<Object> layoutUiEvent = newLayoutUiEvent(owningAdapter);
+
+ eventBusService.post(layoutUiEvent);
+
+ final String layout = layoutUiEvent.getLayout();
+
+ if(layout == null) {
+ // ie no subscribers out there...
+ final Facet underlyingFacet = getUnderlyingFacet();
+ if(underlyingFacet instanceof LayoutFacet) {
+ final LayoutFacet underlyingLayoutFacet = (LayoutFacet) underlyingFacet;
+ return underlyingLayoutFacet.layout(owningAdapter);
+ }
+ }
+
+ return layout;
+ }
+
+ private LayoutUiEvent<Object> newLayoutUiEvent(final ManagedObject owningAdapter) {
+ final Object domainObject = owningAdapter.getPojo();
+ return newLayoutUiEvent(domainObject);
+ }
+
+ private LayoutUiEvent<Object> newLayoutUiEvent(final Object domainObject) {
+ try {
+ final LayoutUiEvent<Object> layoutUiEvent = (LayoutUiEvent<Object>) layoutUiEventClass.newInstance();
+ layoutUiEvent.setSource(domainObject);
+ return layoutUiEvent;
+ } catch (InstantiationException | IllegalAccessException ex) {
+ throw new NonRecoverableException(ex);
+ }
+ }
+
+ @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+ super.appendAttributesTo(attributeMap);
+ attributeMap.put("layoutUiEventClass", layoutUiEventClass);
+ }
+ }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java
index 0000000,733b3e3..088add9
mode 000000,100644..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java
@@@ -1,0 -1,119 +1,119 @@@
+ /*
+ * 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 agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+ import java.util.List;
+ import java.util.Map;
+
+ import org.apache.isis.applib.NonRecoverableException;
+ import org.apache.isis.applib.annotation.ViewModelLayout;
+ import org.apache.isis.applib.services.eventbus.EventBusService;
+ import org.apache.isis.applib.services.eventbus.LayoutUiEvent;
++import org.apache.isis.applib.services.inject.ServiceInjector;
+ import org.apache.isis.config.IsisConfiguration;
+ import org.apache.isis.core.metamodel.facetapi.Facet;
+ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+ import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacet;
+ import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacetAbstract;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
+ import org.apache.isis.core.metamodel.spec.ManagedObject;
+ import org.apache.isis.core.metamodel.util.EventUtil;
+
+ public class LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent extends LayoutFacetAbstract implements
+ LayoutFacet {
+
+ //private static final Logger LOG = LoggerFactory.getLogger(LayoutFacetViaViewModelLayoutAnnotationUsingIconUiEvent.class);
+
+ public static Facet create(
+ final List<ViewModelLayout> viewModelLayouts,
- final ServicesInjector servicesInjector,
++ final ServiceInjector serviceInjector,
+ final IsisConfiguration configuration, final FacetHolder facetHolder) {
+
+ return viewModelLayouts.stream()
+ .map(ViewModelLayout::layoutUiEvent)
+ .filter(layoutUiEvent -> EventUtil.eventTypeIsPostable(
+ layoutUiEvent,
+ LayoutUiEvent.Noop.class,
+ LayoutUiEvent.Default.class,
+ "isis.reflector.facet.viewModelLayoutAnnotation.layoutUiEvent.postForDefault",
+ configuration))
+ .findFirst()
+ .map(layoutUiEvent -> {
+
- final EventBusService eventBusService = servicesInjector.lookupServiceElseFail(EventBusService.class);
++ final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
+
+ return new LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent(
+ layoutUiEvent, eventBusService, facetHolder);
+ })
+ .orElse(null);
+ }
+
+ private final Class<? extends LayoutUiEvent<?>> layoutUiEventClass;
+ private final EventBusService eventBusService;
+
+ public LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent(
+ final Class<? extends LayoutUiEvent<?>> layoutUiEventClass,
+ final EventBusService eventBusService,
+ final FacetHolder holder) {
+ super(holder);
+ this.layoutUiEventClass = layoutUiEventClass;
+ this.eventBusService = eventBusService;
+ }
+
+ @Override
+ public String layout(final ManagedObject owningAdapter) {
+
+ final LayoutUiEvent<Object> layoutUiEvent = newLayoutUiEvent(owningAdapter);
+
+ eventBusService.post(layoutUiEvent);
+
+ final String layout = layoutUiEvent.getLayout();
+
+ if(layout == null) {
+ // ie no subscribers out there...
+ final Facet underlyingFacet = getUnderlyingFacet();
+ if(underlyingFacet instanceof LayoutFacet) {
+ final LayoutFacet underlyingLayoutFacet = (LayoutFacet) underlyingFacet;
+ return underlyingLayoutFacet.layout(owningAdapter);
+ }
+ }
+
+ return layout;
+ }
+
+ private LayoutUiEvent<Object> newLayoutUiEvent(final ManagedObject owningAdapter) {
+ final Object domainObject = owningAdapter.getPojo();
+ return newLayoutUiEvent(domainObject);
+ }
+
+ private LayoutUiEvent<Object> newLayoutUiEvent(final Object domainObject) {
+ try {
+ final LayoutUiEvent<Object> layoutUiEvent = (LayoutUiEvent<Object>) layoutUiEventClass.newInstance();
+ layoutUiEvent.setSource(domainObject);
+ return layoutUiEvent;
+ } catch (InstantiationException | IllegalAccessException ex) {
+ throw new NonRecoverableException(ex);
+ }
+ }
+
+ @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+ super.appendAttributesTo(attributeMap);
+ attributeMap.put("layoutUiEventClass", layoutUiEventClass);
+ }
+ }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java
index 0000000,dcb67e7..4158992
mode 000000,100644..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java
@@@ -1,0 -1,141 +1,140 @@@
+ /*
+ * 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 agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+ import java.util.List;
+ import java.util.Map;
+
-
+ import org.apache.isis.applib.NonRecoverableException;
+ import org.apache.isis.applib.annotation.ViewModelLayout;
+ import org.apache.isis.applib.events.ui.TitleUiEvent;
+ import org.apache.isis.applib.services.eventbus.EventBusService;
+ import org.apache.isis.applib.services.i18n.TranslatableString;
+ import org.apache.isis.applib.services.i18n.TranslationService;
++import org.apache.isis.applib.services.inject.ServiceInjector;
+ import org.apache.isis.commons.internal.base._Casts;
+ import org.apache.isis.config.IsisConfiguration;
+ import org.apache.isis.core.metamodel.facetapi.Facet;
+ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+ import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
+ import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
+ import org.apache.isis.core.metamodel.spec.ManagedObject;
+ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+ import org.apache.isis.core.metamodel.util.EventUtil;
+
+ public class TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent extends TitleFacetAbstract {
+
+ //private static final Logger LOG = LoggerFactory.getLogger(TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.class);
+
+ public static Facet create(
+ final List<ViewModelLayout> viewModelLayouts,
- final ServicesInjector servicesInjector,
++ final ServiceInjector serviceInjector,
+ final IsisConfiguration configuration, final FacetHolder facetHolder) {
+
+ return viewModelLayouts.stream()
+ .map(ViewModelLayout::titleUiEvent)
+ .filter(titleUiEvent -> EventUtil.eventTypeIsPostable(
+ titleUiEvent,
+ TitleUiEvent.Noop.class,
+ TitleUiEvent.Default.class,
+ "isis.reflector.facet.viewModelLayoutAnnotation.titleUiEvent.postForDefault",
+ configuration))
+ .findFirst()
+ .map(titleUiEventClass -> {
- final TranslationService translationService = servicesInjector.lookupService(TranslationService.class).orElse(null);
++ final TranslationService translationService = serviceInjector.lookupService(TranslationService.class).orElse(null);
+
+ final String translationContext;
+ if(facetHolder instanceof ObjectSpecification) {
+ final ObjectSpecification facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
+ translationContext = facetHolderAsSpec.getCorrespondingClass().getCanonicalName();
+ } else {
+ translationContext = null;
+ }
+
- final EventBusService eventBusService = servicesInjector.lookupServiceElseFail(EventBusService.class);
++ final EventBusService eventBusService = serviceInjector.lookupServiceElseFail(EventBusService.class);
+
+ return new TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent(
+ titleUiEventClass, translationService, translationContext, eventBusService, facetHolder);
+ })
+ .orElse(null);
+ }
+
+ private final Class<? extends TitleUiEvent<?>> titleUiEventClass;
+ private final TranslationService translationService;
+ private final String translationContext;
+ private final EventBusService eventBusService;
+
+ public TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent(
+ final Class<? extends TitleUiEvent<?>> titleUiEventClass,
+ final TranslationService translationService,
+ final String translationContext,
+ final EventBusService eventBusService,
+ final FacetHolder holder) {
+ super(holder);
+ this.titleUiEventClass = titleUiEventClass;
+ this.translationService = translationService;
+ this.translationContext = translationContext;
+ this.eventBusService = eventBusService;
+ }
+
+ @Override
+ public String title(final ManagedObject owningAdapter) {
+
+ final TitleUiEvent<Object> titleUiEvent = newTitleUiEvent(owningAdapter);
+
+ eventBusService.post(titleUiEvent);
+
+ final TranslatableString translatedTitle = titleUiEvent.getTranslatableTitle();
+ if(translatedTitle != null) {
+ return translatedTitle.translate(translationService, translationContext);
+ }
+ final String title = titleUiEvent.getTitle();
+
+ if(title == null) {
+ // ie no subscribers out there...
+ final Facet underlyingFacet = getUnderlyingFacet();
+ if(underlyingFacet instanceof TitleFacet) {
+ final TitleFacet underlyingTitleFacet = (TitleFacet) underlyingFacet;
+ return underlyingTitleFacet.title(owningAdapter);
+ }
+ }
+ return title;
+ }
+
+ private TitleUiEvent<Object> newTitleUiEvent(final ManagedObject owningAdapter) {
+ final Object domainObject = owningAdapter.getPojo();
+ return newTitleUiEvent(domainObject);
+ }
+
+ private TitleUiEvent<Object> newTitleUiEvent(final Object domainObject) {
+ try {
+ final TitleUiEvent<Object> titleUiEvent = _Casts.uncheckedCast(titleUiEventClass.newInstance());
+ titleUiEvent.setSource(domainObject);
+ return titleUiEvent;
+ } catch (InstantiationException | IllegalAccessException ex) {
+ throw new NonRecoverableException(ex);
+ }
+ }
+
+ @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+ super.appendAttributesTo(attributeMap);
+ attributeMap.put("titleUiEventClass", titleUiEventClass);
+ }
+ }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
index 3ec22a5,491b8aa..3a03a74
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
@@@ -34,7 -34,7 +34,7 @@@ public class GridFacetFactory extends F
public void process(final ProcessClassContext processClassContext) {
final FacetHolder facetHolder = processClassContext.getFacetHolder();
- final GridService gridService = getServiceRegistry().lookupServiceElseFail(GridService.class);
- final GridService2 gridService = servicesInjector.lookupServiceElseFail(GridService2.class);
++ final GridService2 gridService = getServiceRegistry().lookupServiceElseFail(GridService2.class);
FacetUtil.addFacet(GridFacetDefault.create(facetHolder, gridService));
}
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
index 3602b51,57036ec..649b796
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
@@@ -33,9 -30,11 +34,9 @@@ import javax.xml.bind.JAXBException
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.layout.grid.Grid;
- import org.apache.isis.applib.services.grid.GridLoaderService;
+ import org.apache.isis.applib.services.grid.GridLoaderService2;
import org.apache.isis.applib.services.grid.GridSystemService;
import org.apache.isis.applib.services.jaxb.JaxbService;
import org.apache.isis.applib.services.message.MessageService;
@@@ -45,8 -45,11 +47,8 @@@ import org.apache.isis.commons.internal
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.commons.internal.resources._Resources;
-@DomainService(
- nature = NatureOfService.DOMAIN,
- menuOrder = "" + Integer.MAX_VALUE
- )
+@Singleton
- public class GridLoaderServiceDefault implements GridLoaderService {
+ public class GridLoaderServiceDefault implements GridLoaderService2 {
private static final Logger LOG = LoggerFactory.getLogger(GridLoaderServiceDefault.class);
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
index 228ac39,4659492..929ed3f
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
@@@ -19,22 -19,22 +19,22 @@@ package org.apache.isis.core.metamodel.
import java.util.List;
import java.util.stream.Collectors;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.layout.grid.Grid;
- import org.apache.isis.applib.services.grid.GridLoaderService;
- import org.apache.isis.applib.services.grid.GridService;
+ import org.apache.isis.applib.services.grid.GridLoaderService2;
+ import org.apache.isis.applib.services.grid.GridService2;
import org.apache.isis.applib.services.grid.GridSystemService;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Lists;
-@DomainService(
- nature = NatureOfService.DOMAIN,
- menuOrder = "" + Integer.MAX_VALUE
- )
+@Singleton
- public class GridServiceDefault implements GridService {
+ public class GridServiceDefault implements GridService2 {
//private static final Logger LOG = LoggerFactory.getLogger(GridServiceDefault.class);
@@@ -188,20 -194,14 +194,20 @@@
return filteredGridSystemServices;
}
+ // -- poor man's testing support
+
+ List<GridSystemService<?>> gridSystemServicesForTest;
+ Iterable<GridSystemService<?>> getGridSystemServices() {
+ return gridSystemServices!=null
+ ? gridSystemServices
+ : gridSystemServicesForTest;
+ }
+
////////////////////////////////////////////////////////
- @Inject GridLoaderService gridLoaderService;
-
-
- @javax.inject.Inject
- GridLoaderService2 gridLoaderService;
-
- @javax.inject.Inject
- List<GridSystemService<?>> gridSystemServices;
++ @Inject GridLoaderService2 gridLoaderService;
+ @Inject @Any private Instance<GridSystemService<?>> gridSystemServices;
+
+
}
diff --cc core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
index cc86b23,cabd4be..452f099
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
@@@ -19,25 -19,23 +19,25 @@@
package org.apache.isis.core.metamodel.specloader;
-import org.hamcrest.Description;
-import org.jmock.Expectations;
-import org.jmock.api.Action;
-import org.jmock.api.Invocation;
-import org.jmock.auto.Mock;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+
+import org.jboss.weld.junit5.EnableWeld;
+import org.jboss.weld.junit5.WeldInitiator;
+import org.jboss.weld.junit5.WeldSetup;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
import org.apache.isis.applib.AppManifest;
- import org.apache.isis.applib.services.grid.GridService;
+ import org.apache.isis.applib.services.grid.GridService2;
import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.applib.services.i18n.TranslationService.Mode;
import org.apache.isis.applib.services.message.MessageService;
+import org.apache.isis.commons.internal.base._Timing;
import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.core.metamodel.BeansForTesting;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
@@@ -49,76 -47,32 +49,76 @@@ import org.apache.isis.core.metamodel.p
import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.security.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
-public abstract class SpecificationLoaderTestAbstract {
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.mockito.Mockito.when;
- @Rule
- public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+import lombok.val;
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
+@EnableWeld
+abstract class SpecificationLoaderTestAbstract {
- @Mock
- private AuthenticationSessionProvider mockAuthenticationSessionProvider;
- @Mock
- private GridService2 mockGridService;
- @Mock
- private PersistenceSessionServiceInternal mockPersistenceSessionServiceInternal;
- @Mock
- private MessageService mockMessageService;
- @Mock
- private TranslationService mockTranslationService;
-
- ServicesInjector stubServicesInjector;
+ static class Factories {
+
+ @Produces
+ AuthenticationSessionProvider mockAuthenticationSessionProvider() {
+ return Mockito.mock(AuthenticationSessionProvider.class);
+ }
+
+ @Produces
- GridService mockGridService() {
- return Mockito.mock(GridService.class);
++ GridService2 mockGridService() {
++ return Mockito.mock(GridService2.class);
+ }
+
+ @Produces
+ PersistenceSessionServiceInternal mockPersistenceSessionServiceInternal() {
+ return Mockito.mock(PersistenceSessionServiceInternal.class);
+ }
+
+ @Produces
+ MessageService mockMessageService() {
+ return Mockito.mock(MessageService.class);
+ }
+
+ @Produces
+ TranslationService mockTranslationService() {
+ val mock = Mockito.mock(TranslationService.class);
+ when(mock.getMode()).thenReturn(Mode.DISABLED);
+ return mock;
+ }
+
+ @Produces
+ SpecificationLoader getSpecificationLoader() {
+ return new SpecificationLoader(
+ new ProgrammingModelFacetsJava5(DeprecatedPolicy.HONOUR),
+ new MetaModelValidatorDefault());
+ }
+
+ }
+ @WeldSetup
+ public WeldInitiator weld = WeldInitiator.from(
+
+ BeansForTesting.builder()
+ .injector()
+ .addAll(
+ Factories.class
+ )
+ .build()
+
+ )
+ .build();
+
+
+ @Inject protected AuthenticationSessionProvider mockAuthenticationSessionProvider;
- @Inject protected GridService mockGridService;
++ @Inject protected GridService2 mockGridService;
+ @Inject protected PersistenceSessionServiceInternal mockPersistenceSessionServiceInternal;
+ @Inject protected MessageService mockMessageService;
+ @Inject protected SpecificationLoader specificationLoader;
+
+
// is loaded by subclasses
protected ObjectSpecification specification;
diff --cc core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 92cc8af,479991c..542fa7e
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@@ -61,12 -62,12 +62,13 @@@ import org.apache.wicket.request.resour
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+ import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
+import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.beans.WebAppConfigBean;
import org.apache.isis.config.property.ConfigPropertyEnum;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
@@@ -458,16 -466,32 +460,32 @@@ public abstract class PageAbstract exte
private ActionPromptModalWindow actionPromptModalWindow;
private ActionPromptSidebar actionPromptSidebar;
- @Override
- public ActionPrompt getActionPrompt() {
+ public ActionPrompt getActionPrompt(final PromptStyle promptStyle) {
+ switch (promptStyle) {
+ case AS_CONFIGURED:
+ case DIALOG:
+ case INLINE:
+ case INLINE_AS_IF_EDIT:
+ default:
- final DialogMode dialogMode = CONFIG_DIALOG_MODE.from(getConfiguration());
- switch (dialogMode) {
- case SIDEBAR:
- return actionPromptSidebar;
- case MODAL:
- default:
- return actionPromptModalWindow;
- }
+ final DialogMode dialogMode = CONFIG_DIALOG_MODE.from(getConfiguration());
+ switch (dialogMode) {
+ case SIDEBAR:
+ return actionPromptSidebar;
+ case MODAL:
+ default:
+ return actionPromptModalWindow;
+ }
+ case DIALOG_SIDEBAR:
+ return actionPromptSidebar;
+ case DIALOG_MODAL:
+ return actionPromptModalWindow;
+ }
+ }
+
+ @Override
+ public void closePrompt(final AjaxRequestTarget target) {
+ actionPromptSidebar.closePrompt(target);
+ actionPromptModalWindow.closePrompt(target);
}
private void addActionPromptModalWindow(final MarkupContainer parent) {
diff --cc core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index b28422c,ee5c868..18cc3da
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@@ -48,7 -47,9 +48,8 @@@ import org.apache.isis.commons.internal
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
+ import org.apache.isis.core.metamodel.facets.actions.redirect.RedirectFacet;
import org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;