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/06 07:52:24 UTC
[isis] 01/01: Merge branch 'v2' into 2033-IoC
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 b3f944302bfe029160bde0a6af26a55a248527cc
Merge: 0b8ada6 f965dc1
Author: andi-huber <ah...@apache.org>
AuthorDate: Sun Jan 6 08:51:31 2019 +0100
Merge branch 'v2' into 2033-IoC
Conflicts:
core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java
core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationDefault.java
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_array.java
core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_collection.java
core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_value.java
core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_object.java
core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
core/plugins/jdo-datanucleus-4/src/test/java/org/apache/isis/core/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTest_object.java
core/pom.xml
core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
README.adoc | 113 ++-
STATUS | 14 +-
.../src/main/asciidoc/__versions.adoc | 1 -
.../guides/cgcom/_cgcom_cutting-a-release.adoc | 182 +++--
.../cgcom/_cgcom_post-release-successful.adoc | 57 +-
.../guides/cgcom/_cgcom_verifying-releases.adoc | 211 ++---
.../guides/dg/_dg_hints-and-tips_enhance-only.adoc | 2 +-
.../main/asciidoc/guides/dg/_dg_ide_intellij.adoc | 12 +-
.../guides/rgant/_rgant-Action_domainEvent.adoc | 2 +-
.../guides/rgant/_rgant-Action_publishing.adoc | 2 +-
.../asciidoc/guides/rgant/_rgant-DomainObject.adoc | 7 +-
.../guides/rgant/_rgant-DomainObject_auditing.adoc | 4 +-
..._rgant-DomainObject_autoCompleteRepository.adoc | 5 +-
...nded.adoc => _rgant-DomainObject_bounding.adoc} | 16 +-
.../_rgant-DomainObject_collectionDomainEvent.adoc | 2 +-
.../guides/rgant/_rgant-DomainObject_nature.adoc | 19 +-
.../_rgant-DomainObject_propertyDomainEvent.adoc | 2 +-
.../rgant/_rgant-DomainObject_publishing.adoc | 2 +-
.../guides/rgant/_rgant-Property_publishing.adoc | 2 +-
.../guides/rgcfg/_rgcfg_configuring-core.adoc | 37 +
.../guides/rgcfg/_rgcfg_deployment-types.adoc | 17 +-
.../guides/rgcfg/_rgcfg_specifying-components.adoc | 4 +-
.../_rgcms_classes_AppManifest-bootstrapping.adoc | 40 +-
.../_rgcms_classes_AppManifest2-bootstrapping.adoc | 4 +-
...rgcms_classes_contributee_HasTransactionId.adoc | 19 +
...ms_classes_domainevent_AbstractDomainEvent.adoc | 64 +-
...gcms_classes_domainevent_ActionDomainEvent.adoc | 10 +-
.../asciidoc/guides/rgcms/_rgcms_schema-chg.adoc | 35 +-
.../asciidoc/guides/rgcms/_rgcms_schema-cmd.adoc | 9 +-
.../guides/rgcms/_rgcms_schema-common.adoc | 7 +-
.../asciidoc/guides/rgcms/_rgcms_schema-ixn.adoc | 6 +-
.../asciidoc/guides/rgcms/_rgcms_schema-mml.adoc | 362 +++++++++
.../main/asciidoc/guides/rgcms/_rgcms_schema.adoc | 3 +
.../src/main/asciidoc/guides/rgmvn/_rgmvn_xsd.adoc | 2 +-
...rgsvc_application-layer-api_WrapperFactory.adoc | 72 +-
...c_application-layer-spi_HealthCheckService.adoc | 2 +
.../rgsvc/_rgsvc_integration-api_EmailService.adoc | 4 +-
.../_rgsvc_metadata-api_MetamodelService.adoc | 25 +-
..._rgsvc_persistence-layer-api_H2ManagerMenu.adoc | 89 +++
...c_presentation-layer-api_GuiceBeanProvider.adoc | 10 +-
...esentation-layer-spi_ContentMappingService.adoc | 4 +-
...esentation-layer-spi_ErrorReportingService.adoc | 22 +-
..._presentation-layer-spi_TranslationService.adoc | 12 +-
...gbtb_deployment_externalized-configuration.adoc | 8 +-
.../guides/ugbtb/_ugbtb_headless-access.adoc | 4 +-
.../main/asciidoc/guides/ugbtb/_ugbtb_i18n.adoc | 13 +-
.../guides/ugbtb/_ugbtb_other-techniques.adoc | 2 +-
.../main/asciidoc/guides/ugbtb/_ugbtb_web-xml.adoc | 10 +-
.../guides/ugfun/_ugfun_core-concepts.adoc | 2 +-
...re-concepts_apache-isis-vs_mvc-server-side.adoc | 2 +-
.../ugfun/_ugfun_core-concepts_philosophy_aop.adoc | 4 +-
.../ugfun/_ugfun_drop-downs-and-defaults.adoc | 2 +-
...ugfun_getting-started_helloworld-archetype.adoc | 135 ++--
..._ugfun_getting-started_simpleapp-archetype.adoc | 312 +++++---
.../_ugsec_configuring-isis-to-use-shiro.adoc | 3 +
...entations_isisaddons-security-module-realm.adoc | 2 +-
...sec_shiro-realm-implementations_jdbc-realm.adoc | 2 +-
.../guides/ugsec/_ugsec_usage-by-isis-viewers.adoc | 10 +-
.../_ugtst_integ-test-support_bootstrapping.adoc | 18 +
.../asciidoc/guides/ugtst/_ugtst_overview.adoc | 2 +-
.../asciidoc/guides/ugvro/_ugvro_health-check.adoc | 71 ++
.../guides/ugvro/_ugvro_hints-and-tips.adoc | 1 +
.../_ugvro_hints-and-tips_troubleshooting.adoc | 89 +++
.../src/main/asciidoc/guides/ugvro/ugvro.adoc | 1 +
.../ugvw/_ugvw_configuration-properties.adoc | 187 ++++-
..._ugvw_customisation_cheap-n-cheerful-theme.adoc | 2 +-
.../_ugvw_customisation_request-parameters.adoc | 2 +-
.../_ugvw_extending_custom-bootstrap-theme.adoc | 2 +-
.../guides/ugvw/_ugvw_extending_custom-pages.adoc | 2 +-
...extending_login-via-query-args-prototyping.adoc | 4 +-
.../_ugvw_extending_replacing-page-elements.adoc | 2 +-
.../main/asciidoc/guides/ugvw/_ugvw_features.adoc | 3 +-
.../ugvw/_ugvw_features_blob-attachments.adoc | 2 +-
.../_ugvw_features_sidebar-vs-modal-dialogs.adoc | 34 +
.../guides/ugvw/_ugvw_features_where-am-i.adoc | 35 +-
.../ugvw/_ugvw_hints-and-tips_per-user-themes.adoc | 2 +-
.../guides/ugvw/images/dialog-mode/modal.png | Bin 0 -> 139750 bytes
.../guides/ugvw/images/dialog-mode/sidebar.png | Bin 0 -> 134677 bytes
.../_migration-notes_1.16.0-to-1.17.0.adoc | 10 +
...ion-notes_1.16.0-to-2.0.0-M1_other-changes.adoc | 8 +-
.../asciidoc/pages/screencasts/screencasts.adoc | 2 +-
.../src/main/asciidoc/pages/tg/tg.adoc | 4 +-
.../release-notes/_release-notes_1.4.0.adoc | 4 +-
.../release-notes/_release-notes_1.8.0.adoc | 4 +-
.../asciidoc}/schema/metamodel/metamodel-1.0.xsd | 12 +-
.../main/asciidoc/schema/metamodel/metamodel.xsd | 12 +-
core/.m2/settings.xml | 28 +-
.../java/org/apache/isis/applib/AppManifest.java | 2 +
.../isis/applib/ModuleOrBuilderAbstract.java | 4 +
.../applib/services/hsqldb/HsqlDbManagerMenu.java | 4 +-
.../applib/services/jaxb/JaxbServiceDefault.java | 7 +-
.../services/metamodel/MetaModelService.java | 6 +
.../services/metamodel/MetaModelServicesMenu.java | 136 ++--
.../metamodel/MetaModelService_Config_Test.java | 18 +
.../utils/CommonDtoUtils_setValueOn_Test.java | 26 +-
.../environment/IsisSystemEnvironmentPlugin.java | 18 +
.../apache/isis/commons/internal/cdi/CDITest.java | 18 +
.../internal/cdi/ValidQualifierForTesting.java | 18 +
.../org/apache/isis/config/AppConfigLocator.java | 26 +-
.../config/builder/IsisConfigurationDefault.java | 15 +-
.../isis/config/property/ConfigProperty.java} | 12 +-
.../config/property/ConfigPropertyAbstract.java | 19 +-
.../config/property/ConfigPropertyBoolean.java | 30 +-
.../isis/config/property/ConfigPropertyEnum.java | 31 +-
.../isis/config/property/ConfigPropertyString.java | 27 +-
core/detached-tests/pom.xml | 2 +-
.../metamodel/facets/ObjectSpecIdFacetFactory.java | 20 +-
.../actions/layout/ActionLayoutFacetFactory.java | 3 +-
.../DomainObjectAnnotationFacetFactory.java | 12 +-
...jectSpecIdFacetDerivedFromClassNameFactory.java | 29 +-
...ObjectFacetDeclarativeInitializingAbstract.java | 1 +
.../facets/object/value/ValueFacetSimple.java | 53 ++
.../JodaLocalTimeValueFacetSimpleFactory.java | 47 ++
.../param/DeriveFacetsPostProcessor.java | 8 +-
.../services/metamodel/MetaModelExporter.java | 50 +-
.../metamodel/MetaModelServiceDefault.java | 13 +-
.../metamodel/specloader/IntrospectionMode.java | 52 ++
.../specloader/SpecificationCacheDefault.java | 26 +-
.../metamodel/specloader/SpecificationLoader.java | 370 ++++-----
.../classsubstitutor/ClassSubstitutor.java | 11 +-
.../specloader/facetprocessor/FacetProcessor.java | 25 +
.../specloader/specimpl/FacetedMethodsBuilder.java | 12 +-
.../specloader/specimpl/IntrospectionState.java | 35 +-
.../specimpl/ObjectActionParameterAbstract.java | 8 +-
.../specloader/specimpl/ObjectMemberAbstract.java | 6 +-
.../specimpl/ObjectSpecificationAbstract.java | 157 ++--
.../specimpl/dflt/ObjectSpecificationDefault.java | 61 +-
.../ObjectSpecificationOnStandaloneList.java | 18 +-
.../JdoDiscriminatorAnnotationFacetFactory.java | 44 +-
...doPersistenceCapableAnnotationFacetFactory.java | 12 +-
.../facets/object/query/VisitorForFromClause.java | 1 +
.../object/query/VisitorForVariablesClause.java | 4 +-
.../dflt/ProgrammingModelFacetsJava5.java | 2 +
.../DomainObjectAnnotationFacetFactoryTest.java | 3 +-
.../ObjectTypeAnnotationFacetFactoryTest.java | 9 +-
...SpecIdFacetDerivedFromClassNameFactoryTest.java | 9 +-
.../PropertyAnnotationFacetFactoryTest.java | 1 +
.../IntrospectionState_comparable_Test.java | 90 +++
.../DataNucleusApplicationComponents4.java | 5 +-
.../adapterfactory/pojo/PojoAdapterTest.java | 26 +-
...JdoDiscriminatorAnnotationFacetFactoryTest.java | 7 +-
...rsistenceCapableAnnotationFacetFactoryTest.java | 10 +
.../DataNucleusApplicationComponents5.java | 3 +-
.../adapterfactory/pojo/PojoAdapterTest.java | 24 +-
.../transaction/PojoAdapterBuilder.java | 1 +
.../runtime/system/ObjectMemberAbstractTest.java | 29 +-
.../WrapperFactoryDefaultTest_wrappedObject.java | 2 +-
...FactoryDefaultTest_wrappedObject_transient.java | 4 +-
...JdoDiscriminatorAnnotationFacetFactoryTest.java | 7 +-
...rsistenceCapableAnnotationFacetFactoryTest.java | 10 +
core/pom.xml | 4 +
.../runner/opts/OptionHandlerInitParameters.java | 4 +-
.../system/session/IsisSessionFactoryBuilder.java | 2 +-
.../IsisComponentProviderBuilder.java | 18 +
.../apache/isis/core/webapp/IsisSessionFilter.java | 2 +-
.../IsisSessionFilter_lookupPassThru_Test.java | 18 +
.../apache/isis/schema/metamodel/metamodel-1.0.xsd | 12 +-
core/specsupport/pom.xml | 13 +
core/unittestsupport/pom.xml | 2 +-
.../server/resources/HealthResourceServerside.java | 2 +-
.../wicket/viewer/IsisWicketApplication.java | 14 +-
.../viewer/wicket/viewer/IsisWicketModule.java | 17 +-
.../viewer/wicket/model/models/ActionModel.java | 11 +-
.../model/models/whereami/WhereAmIModel.java | 4 +-
.../apache/isis/viewer/wicket/ui/DialogMode.java | 7 +
.../serviceactions/ServiceActionsPanel.html | 4 +-
.../serviceactions/TertiaryActionsPanel.html | 2 +-
.../ActionPromptSidebar.html} | 44 +-
.../actionpromptsb/ActionPromptSidebar.java | 102 +++
.../bookmarkedpages/BookmarkedPagesPanel.html | 6 +-
.../entity/icontitle/EntityIconAndTitlePanel.html | 2 +-
.../entity/icontitle/EntityIconAndTitlePanel.java | 10 +-
.../wicket/ui/components/header/HeaderPanel.html | 4 +-
.../components/scalars/ScalarPanelAbstract2.java | 8 +-
.../scalars/ScalarPanelTextFieldAbstract.java | 7 +-
.../scalars/string/MultiLineStringPanel.java | 9 +-
.../linkandlabel/ActionLinkFactoryAbstract.java | 35 +-
.../isis/viewer/wicket/ui/pages/PageAbstract.html | 25 +-
.../isis/viewer/wicket/ui/pages/PageAbstract.java | 22 +
.../ui/pages/SidebarCssResourceReference.java | 17 +-
.../pages/bootstrap-overrides-bootstrap-theme.css} | 20 +-
.../ui/pages/bootstrap-overrides-cerulean.css} | 20 +-
.../wicket/ui/pages/bootstrap-overrides-cosmo.css} | 20 +-
.../ui/pages/bootstrap-overrides-cyborg.css} | 20 +-
.../wicket/ui/pages/bootstrap-overrides-darkly.css | 13 +
.../wicket/ui/pages/bootstrap-overrides-flatly.css | 17 +-
.../ui/pages/bootstrap-overrides-journal.css} | 20 +-
.../wicket/ui/pages/bootstrap-overrides-lumen.css} | 20 +-
.../wicket/ui/pages/bootstrap-overrides-paper.css} | 20 +-
.../ui/pages/bootstrap-overrides-readable.css} | 20 +-
.../ui/pages/bootstrap-overrides-sandstone.css | 17 +
.../ui/pages/bootstrap-overrides-simplex.css} | 20 +-
.../wicket/ui/pages/bootstrap-overrides-slate.css} | 20 +-
.../ui/pages/bootstrap-overrides-spacelab.css} | 20 +-
.../ui/pages/bootstrap-overrides-superhero.css} | 20 +-
.../ui/pages/bootstrap-overrides-united.css} | 20 +-
.../wicket/ui/pages/bootstrap-overrides-yeti.css} | 20 +-
.../viewer/wicket/ui/pages/bootstrap-overrides.css | 17 +
.../wicket/ui/pages/jquery.isis.wicket.viewer.js | 11 +
.../isis/viewer/wicket/ui/pages/simple-sidebar.css | 136 ++++
.../isis/viewer/wicket/ui/util/isis-tooltips.css | 19 +
core/webdocker/pom.xml | 12 -
core/webserver/config/isis.properties | 1 +
core/webserver/pom.xml | 37 +
.../org/apache/isis/core/webserver/WebServer.java | 225 ------
.../isis/core/webserver/WebServerConstants.java | 46 --
.../webserver/config/WebServerConfigBuilder.java | 93 ---
.../webserver/internal/OptionHandlerAddress.java | 64 --
.../core/webserver/internal/OptionHandlerPort.java | 69 --
.../internal/OptionHandlerResourceBase.java | 61 --
.../internal/OptionHandlerStartupMode.java | 65 --
.../isis/core/webserver/DummyAppManifest.java | 13 +
.../core/webserver}/HelloWorldAppConfigTest.java | 12 +-
example/application/helloworld/pom.xml | 10 +
.../application/HelloWorldAppManifest.java | 3 +-
.../application/isis-non-changing.properties | 6 +-
.../java/domainapp/application/menubars.layout.xml | 3 +
.../java/domainapp/dom/impl/HelloWorldObjects.java | 11 +-
.../src/main/webapp/WEB-INF/isis.properties | 12 +-
.../helloworld/src/main/webapp/WEB-INF/web.xml | 16 +-
.../main/{java/domainapp => }/webapp/welcome.html | 2 +-
.../application/manifest/DomainAppAppManifest.java | 8 +-
.../manifest/isis-non-changing.properties | 378 ++++++++-
.../application/manifest/menubars.layout.xml | 3 +
.../manifest/authentication_shiro.properties | 25 -
.../manifest/persistor_datanucleus.properties | 113 ---
.../manifest/viewer_restfulobjects.properties | 64 --
.../application/manifest/viewer_wicket.properties | 179 -----
.../integtests/mml/MetaModelService_IntegTest.java | 12 +-
.../integtests/mml/approved/java.lang.Long.xml | 2 -
.../integtests/mml/approved/java.lang.Object.xml | 2 -
.../integtests/mml/approved/java.lang.String.xml | 2 -
.../integtests/mml/approved/java.net.URL.xml | 2 -
.../integtests/mml/approved/java.sql.Timestamp.xml | 2 -
.../integtests/mml/approved/java.util.List.xml | 2 -
....applib.services.layout.LayoutService$Style.xml | 2 -
.../approved/org.apache.isis.applib.value.Clob.xml | 2 -
.../application/integtests/mml/approved/void.xml | 2 -
.../module-simple/logging-integtest.properties | 2 +-
.../modules/simple/dom/impl/SimpleObject.java | 9 +-
.../simple/dom/impl/SimpleObject.layout.xml | 4 +-
.../modules/simple/dom/impl/SimpleObjects.java | 24 +-
.../integtests/tests/SimpleObject_IntegTest.java | 3 +-
example/application/simpleapp/pom.xml | 4 +
example/application/simpleapp/webapp/pom.xml | 66 +-
.../domainapp/webapp/DomainApplication.properties | 28 -
.../src/main/java/domainapp/webapp/welcome.html | 40 -
.../webapp/src/main/webapp/WEB-INF/isis.properties | 15 +-
.../src/main/webapp/WEB-INF/logging.properties | 12 +-
.../webapp/src/main/webapp/WEB-INF/web.xml | 14 +
example/archetype/helloworld/pom.xml | 35 -
.../META-INF/maven/archetype-metadata.xml | 37 +-
.../src/main/resources/archetype-resources/pom.xml | 453 +++++------
.../application/HelloWorldAppManifest.java | 3 +-
.../application/isis-non-changing.properties | 22 +-
.../java/domainapp/application/menubars.layout.xml | 3 +
.../java/domainapp/dom/impl/HelloWorldObjects.java | 5 +-
.../domainapp/webapp/HelloWorldApplication.java | 72 --
.../src/main/webapp/WEB-INF/isis.properties | 4 +
.../src/main/webapp/WEB-INF/logging.properties | 13 +-
.../src/main/webapp/WEB-INF/web.xml | 2 +-
.../main/webapp/images/apache-isis/logo-48x48.png | Bin 0 -> 2622 bytes
.../main/{java/domainapp => }/webapp/welcome.html | 2 +-
.../resources/projects/basic/archetype.properties | 2 +-
example/archetype/simpleapp/pom.xml | 113 ---
.../META-INF/maven/archetype-metadata.xml | 177 -----
.../resources/archetype-resources/.gitlab-ci.yml | 51 --
.../resources/archetype-resources/.m2/settings.xml | 23 -
.../main/resources/archetype-resources/README.adoc | 244 ------
.../archetype-resources/_checks/checkstyle.xml | 290 -------
.../resources/archetype-resources/_checks/pmd.xml | 49 --
.../application/logging-integtest.properties | 124 ---
.../archetype-resources/application/pom.xml | 118 ---
...mainAppFixtureScriptsSpecificationProvider.java | 48 --
.../fixture/scenarios/DomainAppDemo.java | 48 --
.../application/manifest/DomainAppAppManifest.java | 47 --
.../application/manifest/menubars.layout.xml | 112 ---
.../services/homepage/HomePageService.java | 46 --
.../services/homepage/HomePageViewModel.java | 49 --
.../services/homepage/HomePageViewModel.layout.xml | 53 --
.../services/homepage/HomePageViewModel.png | Bin 456 -> 0 bytes
.../manifest/authentication_shiro.properties | 28 -
.../manifest/isis-non-changing.properties | 389 ----------
.../manifest/persistor_datanucleus.properties | 117 ---
.../manifest/viewer_restfulobjects.properties | 67 --
.../application/manifest/viewer_wicket.properties | 182 -----
.../bdd/specglue/BootstrappingGlue.java | 42 -
.../bdd/specglue/BootstrappingGlueAbstract.java | 35 -
.../application/bdd/specs/RunIntegBddSpecs.java | 46 --
.../SimpleObjectSpec_listAllAndCreate.feature | 25 -
.../integtests/DomainAppIntegTestAbstract.java | 34 -
.../application/integtests/Smoke_IntegTest.java | 98 ---
.../src/test/resources/cucumber.properties | 4 -
.../application/translations.pot | 845 ---------------------
.../resources/archetype-resources/enhance-all.sh | 2 -
.../archetype-resources/module-simple/build.gradle | 72 --
.../archetype-resources/module-simple/gradlew | 164 ----
.../archetype-resources/module-simple/gradlew.bat | 90 ---
.../module-simple/layouts.gradle | 49 --
.../module-simple/liveReload.gradle | 56 --
.../module-simple/logging-dn-enhance.properties | 44 --
.../module-simple/logging-integtest.properties | 123 ---
.../archetype-resources/module-simple/pom.xml | 185 -----
.../src/main/java/META-INF/persistence.xml | 29 -
.../domainapp/modules/simple/SimpleModule.java | 51 --
.../modules/simple/SimpleModuleManifest.java | 41 -
.../modules/simple/dom/impl/SimpleObject.java | 107 ---
.../simple/dom/impl/SimpleObject.layout.xml | 69 --
.../modules/simple/dom/impl/SimpleObject.png | Bin 653 -> 0 bytes
.../modules/simple/dom/impl/SimpleObjects.java | 104 ---
.../domainapp/modules/simple/dom/types/Name.java | 39 -
.../domainapp/modules/simple/dom/types/Notes.java | 28 -
.../simple/fixture/SimpleObjectBuilder.java | 53 --
.../simple/fixture/SimpleObject_persona.java | 66 --
.../modules/simple/dom/impl/SimpleObject_Test.java | 53 --
.../simple/dom/impl/SimpleObjects_Test.java | 119 ---
.../tests/SimpleObjectMenu_IntegTest.java | 132 ----
.../integtests/tests/SimpleObject_IntegTest.java | 154 ----
.../simple/specglue/SimpleObjectMenuGlue.java | 52 --
.../module-simple/translations.pot | 829 --------------------
.../src/main/resources/archetype-resources/pom.xml | 158 ----
.../resources/archetype-resources/webapp/pom.xml | 299 --------
.../java/domainapp/webapp/DomainApplication.java | 93 ---
.../domainapp/webapp/DomainApplication.properties | 31 -
.../src/main/java/domainapp/webapp/welcome.html | 43 --
.../webapp/src/main/jettyconsole/isis-banner.pdn | Bin 64162 -> 0 bytes
.../webapp/src/main/jettyconsole/isis-banner.png | Bin 27310 -> 0 bytes
.../webapp/src/main/webapp/WEB-INF/isis.properties | 130 ----
.../src/main/webapp/WEB-INF/logging.properties | 238 ------
.../webapp/src/main/webapp/WEB-INF/shiro.ini | 93 ---
.../src/main/webapp/WEB-INF/translations-en.po | 674 ----------------
.../src/main/webapp/WEB-INF/translations-es.po | 673 ----------------
.../src/main/webapp/WEB-INF/translations-nl.po | 674 ----------------
.../webapp/src/main/webapp/WEB-INF/translations.po | 673 ----------------
.../webapp/src/main/webapp/WEB-INF/web.xml | 358 ---------
.../src/main/webapp/about/images/isis-logo.png | Bin 14160 -> 0 bytes
.../webapp/src/main/webapp/about/index.html | 120 ---
.../src/main/webapp/images/spinning-icon.gif | Bin 5266 -> 0 bytes
.../webapp/src/main/webapp/scripts/application.js | 3 -
.../resources/projects/basic/archetype.properties | 5 -
.../src/test/resources/projects/basic/goal.txt | 0
example/misc/metamodel/jsr303/pom.xml | 2 +-
migration-notes.adoc | 271 ++++++-
recreate_archetype_RELEASE.sh | 25 -
recreate_archetype_SNAPSHOT.sh | 26 -
scripts/addmissinglicenses.groovy | 164 ----
scripts/recreate-archetype.sh | 11 +-
scripts/updateGeneratedArchetypeSources.groovy | 59 +-
scripts/verify-isis-release.sh | 169 +++++
scripts/version-bump.sh | 19 +
scripts/version-reset.sh | 19 +
351 files changed, 5043 insertions(+), 13881 deletions(-)
diff --cc core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbServiceDefault.java
index 69b7b52,c4ca34e..2928f90
--- a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbServiceDefault.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbServiceDefault.java
@@@ -24,11 -22,14 +24,12 @@@ import javax.xml.bind.JAXBContext
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
+ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.apache.isis.applib.NonRecoverableException;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.domain.DomainObjectList;
+import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.applib.services.metamodel.MetaModelService;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.schema.utils.jaxbadapters.PersistentEntitiesAdapter;
import org.apache.isis.schema.utils.jaxbadapters.PersistentEntityAdapter;
diff --cc core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
index 21e5085,e3c0447..473b5a5
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
@@@ -79,93 -84,116 +83,112 @@@ public class MetaModelServicesMenu
)
@ActionLayout(
cssClassFa = "fa-download",
+ named = "Download Meta Model (CSV)"
+ )
+ @MemberOrder(sequence="500.500.2")
+ public Clob downloadMetaModelCsv(
+ @ParameterLayout(named = ".csv file name")
+ final String csvFileName) {
+
+ final DomainModel domainMembers = metaModelService.getDomainModel();
+ final List<String> list = asList(domainMembers);
+ final StringBuilder buf = asBuf(list);
+
+ return new Clob(
+ Util.withSuffix(csvFileName, "csv"),
- mimeTypeTextCsv, buf.toString().toCharArray());
++ mimeTypeTextCsv, buf.toString().toCharArray());
+ }
+
+ public String default0DownloadMetaModelCsv() {
+ return "metamodel.csv";
+ }
+
- private String toXml(MetamodelDto model) {
- return jaxbService.toXml(model);
- }
-
-
+ // //////////////////////////////////////
+
-
+ public static class DownloadMetaModelXmlEvent extends ActionDomainEvent {
++ private static final long serialVersionUID = 1L;
+ }
+
+ @Action(
+ domainEvent = DownloadMetaModelXmlEvent.class,
+ semantics = SemanticsOf.SAFE,
+ restrictTo = RestrictTo.PROTOTYPING
+ )
+ @ActionLayout(
+ cssClassFa = "fa-download",
named = "Download Meta Model (XML)"
- )
+ )
- @MemberOrder(sequence="500.500.1")
+ @MemberOrder(sequence="500.500.2")
public Clob downloadMetaModelXml(
+
@ParameterLayout(named = ".xml file name")
- @Parameter(optionality=Optionality.MANDATORY)
final String fileName,
-
- @ParameterLayout(
- named = "Package Prefix",
+ @ParameterLayout(named = "Packages",
- describedAs="Subset of the complete meta model, only including packages starting with given prefix.")
+ describedAs="Subset of the complete meta model, only including packages starting with given prefix.")
- @Parameter(optionality=Optionality.MANDATORY)
- final String packagePrefix,
-
+ final List<String> packages,
@ParameterLayout(named = "Ignore Interfaces")
@Parameter(optionality=Optionality.MANDATORY)
final boolean ignoreInterfaces
- ) {
+
+ ) {
- Config modelConfig = new MetaModelService.Config()
+ MetaModelService.Config config =
+ new MetaModelService.Config()
- .withIgnoreNoop()
- .withIgnoreAbstractClasses()
+ .withIgnoreNoop()
+ .withIgnoreAbstractClasses()
- .withIgnoreBuiltInValueTypes()
- .withPackagePrefix(packagePrefix);
-
+ .withIgnoreInterfaces()
+ .withIgnoreBuiltInValueTypes();
+ for (final String pkg : packages) {
+ config = config.withPackagePrefix(pkg);
+ }
if(ignoreInterfaces) {
- modelConfig = modelConfig.withIgnoreInterfaces();
+ config = config.withIgnoreInterfaces();
}
-
+
- final MetamodelDto metamodelDto = metaModelService.exportMetaModel(modelConfig);
- final String xml = toXml(metamodelDto);
- return new Clob(_Strings.asFileNameWithExtension(fileName, ".xml"), "text/xml", xml);
+
+ final MetamodelDto metamodelDto = metaModelService.exportMetaModel(config);
+
+ final String xml = jaxbService.toXml(metamodelDto);
- return new Clob(_Strings.asFileNameWithExtension(fileName, ".xml"), "text/xml", xml);
++ return new Clob(_Strings.asFileNameWithExtension(fileName, ".xml"), mimeTypeTextXml, xml);
+ }
+
+ public String validateDownloadMetaModelXml(
+ final String fileName, final List<String> packagePrefixes, final boolean ignoreInterfaces) {
+ if(packagePrefixes == null || packagePrefixes.isEmpty()) {
+ return "At least one package must be selected";
+ }
+ return null;
}
public String default0DownloadMetaModelXml() {
return "metamodel.xml";
}
-
+
- public String default1DownloadMetaModelXml() {
- return "domainapp";
+ public List<String> choices1DownloadMetaModelXml() {
+ final DomainModel domainModel = metaModelService.getDomainModel();
+ final List<DomainMember> export = domainModel.getDomainMembers();
+ final SortedSet<String> packages = _Sets.newTreeSet();
+ for (final DomainMember domainMember : export) {
+ final String packageName = domainMember.getPackageName();
+ final String[] split = packageName.split("[.]");
+ final StringBuilder buf = new StringBuilder();
+ for (final String part : split) {
+ if(buf.length() > 0) {
+ buf.append(".");
+ }
+ buf.append(part);
+ packages.add(buf.toString());
+ }
+ }
+ return new ArrayList<>(packages);
}
-
+
public boolean default2DownloadMetaModelXml() {
return true;
}
-
-
+
// //////////////////////////////////////
-
+
- @Action(
- domainEvent = DownloadMetaModelEvent.class,
- semantics = SemanticsOf.SAFE,
- restrictTo = RestrictTo.PROTOTYPING
- )
- @ActionLayout(
- cssClassFa = "fa-download",
- named = "Download Meta Model (CSV)"
- )
- @MemberOrder(sequence="500.500.2")
- public Clob downloadMetaModelCsv(
- @ParameterLayout(named = ".csv file name")
- final String csvFileName) {
-
- final DomainModel domainMembers = metaModelService.getDomainModel();
- final List<String> list = asList(domainMembers);
- final StringBuilder buf = asBuf(list);
-
- return new Clob(
- Util.withSuffix(csvFileName, "csv"),
- mimeTypeTextCsv, buf.toString().toCharArray());
- }
-
- public String default0DownloadMetaModelCsv() {
- return "metamodel.csv";
- }
-
- // -- XML HELPER
-
- @Inject JaxbService jaxbService;
-
- private String toXml(MetamodelDto model) {
- return jaxbService.toXml(model);
- }
-
- // -- CSV HELPER
-
private static StringBuilder asBuf(final List<String> list) {
final StringBuilder buf = new StringBuilder();
for (final String row : list) {
@@@ -209,6 -237,9 +232,7 @@@
}
- @javax.inject.Inject
- MetaModelService metaModelService;
- @Inject
- JaxbService jaxbService;
+ @Inject MetaModelService metaModelService;
++ @Inject JaxbService jaxbService;
}
diff --cc core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationDefault.java
index fa86bc4,a7aaa28..a45ecfe
--- a/core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationDefault.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationDefault.java
@@@ -49,16 -48,9 +49,9 @@@ import static org.apache.isis.commons.i
/**
- * This object will typically be registered as the implementation of the {@link ConfigurationServiceInternal}
- * (internal) domain service, using
- * {@link ServicesInjector#addFallbackIfRequired(Class, Object)}.
- *
- * <p>
- * If an integration test is running, then the <code>IsisConfigurationForJdoIntegTests</code>
- * will be used instead.
- * </p>
+ * This object is the default implementation of the {@link IsisConfiguration} domain service.
*/
-@DomainObject(nature=Nature.INMEMORY_ENTITY, objectType="internal.IsisConfiguration")
+@Vetoed
class IsisConfigurationDefault implements IsisConfiguration {
private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationDefault.class);
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 0431d65,ebc4637..ee087a4
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@@ -36,10 -42,7 +36,9 @@@ import org.apache.isis.applib.services.
import org.apache.isis.applib.services.metamodel.DomainMember;
import org.apache.isis.applib.services.metamodel.DomainModel;
import org.apache.isis.applib.services.metamodel.MetaModelService;
- import org.apache.isis.commons.internal.base._Blackhole;
+import org.apache.isis.commons.internal.cdi._CDI;
import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.config.internal._Config;
import org.apache.isis.core.metamodel.JdoMetamodelUtil;
import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
@@@ -94,20 -102,8 +93,10 @@@ public class MetaModelServiceDefault im
@Override
public void rebuild(final Class<?> domainType) {
specificationLookup.invalidateCache(domainType);
+
+ GridService gridService = _CDI.getManagedBean(GridService.class).get();
gridService.remove(domainType);
-
- final ObjectSpecification objectSpecification = specificationLookup.loadSpecification(domainType);
-
- // ensure the spec is fully rebuilt
- objectSpecification.streamObjectActions(Contributed.INCLUDED)
- .forEach(_Blackhole::consume);
-
- objectSpecification.streamAssociations(Contributed.INCLUDED)
- .forEach(_Blackhole::consume);
-
- specificationLookup.postProcess(objectSpecification);
+ specificationLookup.loadSpecification(domainType);
}
// //////////////////////////////////////
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index def55d4,4644513..9e826a5
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@@ -21,10 -21,8 +21,11 @@@ import java.util.List
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
+ import java.util.stream.Stream;
+import javax.ejb.Singleton;
+import javax.enterprise.context.ApplicationScoped;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@@ -32,17 -30,21 +33,22 @@@ import org.apache.isis.applib.AppManife
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.services.inject.ServiceInjector;
++import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.internal.collections._Lists;
+ import org.apache.isis.commons.internal.context._Context;
+ import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.config.internal._Config;
+ import org.apache.isis.config.property.ConfigPropertyBoolean;
+ import org.apache.isis.config.property.ConfigPropertyEnum;
-import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.lang.ClassUtil;
++import org.apache.isis.core.metamodel.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.Facet;
- import org.apache.isis.core.metamodel.facets.FacetFactory;
- import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
+ import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.metamodel.spec.FreeStandingList;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@@ -102,33 -108,30 +113,26 @@@ public class SpecificationLoader
private final SpecificationCacheDefault cache = new SpecificationCacheDefault();
private final PostProcessor postProcessor;
- enum State {
- NOT_INITIALIZED,
- CACHING,
- INTROSPECTING
- }
-
public SpecificationLoader(
final ProgrammingModel programmingModel,
- final MetaModelValidator metaModelValidator,
- final ServicesInjector servicesInjector) {
+ final MetaModelValidator metaModelValidator) {
- this.servicesInjector = servicesInjector;
this.programmingModel = programmingModel;
this.metaModelValidator = metaModelValidator;
this.facetProcessor = new FacetProcessor(programmingModel);
- this.postProcessor = new PostProcessor(programmingModel, servicesInjector);
+ this.postProcessor = new PostProcessor(programmingModel);
-
- this.state = State.NOT_INITIALIZED;
}
+
// -- init
- private State state;
/**
* Initializes and wires up, and primes the cache based on any service
- * classes (provided by the {@link ServiceInjector}).
+ * classes (provided by the {@link ServicesInjector}).
*/
- @Programmatic
public void init() {
if (LOG.isDebugEnabled()) {
@@@ -143,39 -146,77 +147,77 @@@
facetProcessor.init();
postProcessor.init();
- metaModelValidator.init(this);
+ metaModelValidator.init();
- state = State.CACHING;
-
// need to completely load services and mixins (synchronously)
+ LOG.info("Loading all specs (up to state of {})", IntrospectionState.NOT_INTROSPECTED);
+
final List<ObjectSpecification> specificationsFromRegistry = _Lists.newArrayList();
+ // we use allServiceClasses() - obtained from servicesInjector - rather than reading from the
+ // AppManifest.Registry.instance().getDomainServiceTypes(), because the former also has the fallback
+ // services set up in IsisSessionFactoryBuilder beforehand.
+ final List<ObjectSpecification> domainServiceSpecs =
loadSpecificationsFor(
- CommonDtoUtils.VALUE_TYPES, null,
- IntrospectionStrategy.STUB, specificationsFromRegistry);
- loadSpecificationsFor(
- AppManifest.Registry.instance().getDomainServiceTypes(), NatureOfService.DOMAIN,
- IntrospectionStrategy.STUB, specificationsFromRegistry);
+ streamServiceClasses().collect(Collectors.toList()), NatureOfService.DOMAIN,
+ specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
+ );
+ final List<ObjectSpecification> mixinSpecs =
- loadSpecificationsFor(
+ loadSpecificationsFor(
AppManifest.Registry.instance().getMixinTypes(), null,
- IntrospectionStrategy.STUB, specificationsFromRegistry);
+ specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
+ );
+ loadSpecificationsFor(
+ CommonDtoUtils.VALUE_TYPES, null,
+ specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
+ );
loadSpecificationsFor(
AppManifest.Registry.instance().getDomainObjectTypes(), null,
- IntrospectionStrategy.STUB, specificationsFromRegistry);
+ specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
+ );
loadSpecificationsFor(
AppManifest.Registry.instance().getViewModelTypes(), null,
- IntrospectionStrategy.STUB, specificationsFromRegistry);
+ specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
+ );
loadSpecificationsFor(
AppManifest.Registry.instance().getXmlElementTypes(), null,
- IntrospectionStrategy.STUB, specificationsFromRegistry);
+ specificationsFromRegistry, IntrospectionState.NOT_INTROSPECTED
+ );
+
+ cache.init();
- state = State.INTROSPECTING;
final Collection<ObjectSpecification> cachedSpecifications = allCachedSpecifications();
+ logBefore(specificationsFromRegistry, cachedSpecifications);
+
+ LOG.info("Introspecting all specs up to {}", IntrospectionState.TYPE_INTROSPECTED);
+ introspect(specificationsFromRegistry, IntrospectionState.TYPE_INTROSPECTED);
+
+ LOG.info("Introspecting domainService specs up to {}", IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
+ introspect(domainServiceSpecs, IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
+
+ LOG.info("Introspecting mixin specs up to {}", IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
+ introspect(mixinSpecs, IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
- // for debugging only
- LOG.info(String.format(
+ logAfter(cachedSpecifications);
+
+ final IntrospectionMode mode = CONFIG_PROPERTY_MODE.from(getConfiguration());
+ if(mode.isFullIntrospect(_Context.getEnvironment().getDeploymentType())) {
+ LOG.info("Introspecting all cached specs up to {}", IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
+ introspect(cachedSpecifications, IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
+ }
+
+ LOG.info("init() - done");
+ }
+
+ private void logBefore(
+ final List<ObjectSpecification> specificationsFromRegistry,
+ final Collection<ObjectSpecification> cachedSpecifications) {
+ if(!LOG.isDebugEnabled()) {
+ return;
+ }
+ LOG.debug(String.format(
"specificationsFromRegistry.size = %d ; cachedSpecifications.size = %d",
specificationsFromRegistry.size(), cachedSpecifications.size()));
@@@ -209,41 -265,26 +266,26 @@@
};
callables.add(callable);
}
+
- ThreadPoolSupport threadPoolSupport = ThreadPoolSupport.getInstance();
- final boolean parallelize = _Config.getConfiguration()
- .getBoolean(INTROSPECTOR_PARALLELIZE_KEY, INTROSPECTOR_PARALLELIZE_DEFAULT);
- List<Future<Object>> futures;
- if(parallelize) {
- futures = threadPoolSupport.invokeAll(callables);
- } else {
- futures = threadPoolSupport.invokeAllSequential(callables);
+ invokeAndWait(callables);
- }
+ }
- threadPoolSupport.joinGatherFailures(futures);
-
- // for debugging only
- final Collection<ObjectSpecification> cachedSpecificationsAfter = cache.allSpecifications();
- List<ObjectSpecification> cachedAfterNotBefore = cachedSpecificationsAfter.stream()
- .filter(spec -> !cachedSpecifications.contains(spec))
- .collect(Collectors.toList());
-
- LOG.info(String.format("cachedSpecificationsAfter.size = %d ; cachedAfterNotBefore.size = %d",
- cachedSpecificationsAfter.size(), cachedAfterNotBefore.size()));
-
-
- // only after full introspection has occurred do we cache ObjectSpecifications
- // by their ObjectSpecId.
- // the cache (SpecificationCacheDefault will fail-fast as not initialized
- cache.init();
+ private void invokeAndWait(final List<Callable<Object>> callables) {
+ final ThreadPoolSupport threadPoolSupport = ThreadPoolSupport.getInstance();
+ final boolean parallelize = CONFIG_PROPERTY_PARALLELIZE.from(getConfiguration());
-
+ final List<Future<Object>> futures = parallelize
+ ? threadPoolSupport.invokeAll(callables)
+ : threadPoolSupport.invokeAllSequential(callables);
+ threadPoolSupport.joinGatherFailures(futures);
}
- private void loadSpecificationsFor(
+ private List<ObjectSpecification> loadSpecificationsFor(
final Collection<Class<?>> domainTypes,
final NatureOfService natureOfServiceFallback,
- final IntrospectionStrategy introspectionStrategy,
- final List<ObjectSpecification> appendTo) {
+ final List<ObjectSpecification> appendTo,
+ final IntrospectionState upTo) {
+ final List<ObjectSpecification> specs = _Lists.newArrayList();
for (final Class<?> domainType : domainTypes) {
ObjectSpecification objectSpecification =
@@@ -304,13 -348,19 +347,17 @@@
private ValidationFailures validationFailures;
- @Programmatic
public void validateAndAssert() {
+ final IntrospectionMode mode = CONFIG_PROPERTY_MODE.from(getConfiguration());
+ if(!mode.isFullIntrospect(_Context.getEnvironment().getDeploymentType())) {
+ LOG.info("Meta model validation skipped (full introspection of metamodel not configured)");
+ return;
+ }
+
ValidationFailures validationFailures = validate();
validationFailures.assertNone();
-
- cache.init();
}
- @Programmatic
public ValidationFailures validate() {
if(validationFailures == null) {
validationFailures = new ValidationFailures();
@@@ -329,7 -379,13 +376,11 @@@
* the configured {@link org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor}
* has filtered out the class.
*/
- @Programmatic
public ObjectSpecification loadSpecification(final String className) {
+ return loadSpecification(className, IntrospectionState.TYPE_INTROSPECTED);
+ }
+
- @Programmatic
+ public ObjectSpecification loadSpecification(final String className, final IntrospectionState upTo) {
assert className != null;
try {
@@@ -344,11 -400,31 +395,29 @@@
}
}
- /**
- * @see #loadSpecification(String)
- */
- @Programmatic
public ObjectSpecification loadSpecification(final Class<?> type) {
- final ObjectSpecification spec = internalLoadSpecification(type);
+ return loadSpecification(type, IntrospectionState.TYPE_INTROSPECTED);
+ }
+
+ @Programmatic
+ public ObjectSpecification peekSpecification(final Class<?> type) {
+
+ final Class<?> substitutedType = classSubstitutor.getClass(type);
+ if (substitutedType == null) {
+ return null;
+ }
+
+ final String typeName = substitutedType.getName();
+ ObjectSpecification spec = cache.get(typeName);
+ if (spec != null) {
+ return spec;
+ }
+
+ return null;
+ }
+
- @Programmatic
+ public ObjectSpecification loadSpecification(final Class<?> type, final IntrospectionState upTo) {
+ final ObjectSpecification spec = internalLoadSpecification(type, null, upTo);
if(spec == null) {
return null;
}
@@@ -368,75 -448,49 +441,48 @@@
private ObjectSpecification internalLoadSpecification(
final Class<?> type,
final NatureOfService natureFallback,
- final IntrospectionStrategy introspectionStrategy) {
+ final IntrospectionState upTo) {
final Class<?> substitutedType = classSubstitutor.getClass(type);
- return substitutedType != null
- ? loadSpecificationForSubstitutedClass(substitutedType, natureFallback, introspectionStrategy)
- : null;
+ if (substitutedType == null) {
+ return null;
- }
+ }
+ Assert.assertNotNull(substitutedType);
- private ObjectSpecification loadSpecificationForSubstitutedClass(
- final Class<?> type,
- final NatureOfService natureFallback,
- final IntrospectionStrategy introspectionStrategy) {
- Assert.assertNotNull(type);
-
- final String typeName = type.getName();
- final ObjectSpecification spec = cache.get(typeName);
+ final String typeName = substitutedType.getName();
+ ObjectSpecification spec = cache.get(typeName);
if (spec != null) {
return spec;
}
- return loadSpecificationForSubstitutedClassSynchronized(type, natureFallback, introspectionStrategy);
- }
-
-
- private synchronized ObjectSpecification loadSpecificationForSubstitutedClassSynchronized(
- final Class<?> type,
- final NatureOfService natureOfServiceFallback,
- final IntrospectionStrategy introspectionStrategy) {
-
- final String typeName = type.getName();
- final ObjectSpecification spec = cache.get(typeName);
+ synchronized (this) {
+ // inside the synchronized block
+ spec = cache.get(typeName);
- if (spec != null) {
- return spec;
- }
+ if (spec != null) {
- // because caller isn't synchronized.
+ return spec;
+ }
- final ObjectSpecification specification = createSpecification(type, natureOfServiceFallback);
+ final ObjectSpecification specification = createSpecification(substitutedType, natureFallback);
- // put into the cache prior to introspecting, to prevent
- // infinite loops
- cache.cache(typeName, specification);
+ // put into the cache prior to introspecting, to prevent
+ // infinite loops
+ cache.cache(typeName, specification);
- if(introspectionStrategy == IntrospectionStrategy.COMPLETE) {
- introspectIfRequired(specification);
- }
+ final ObjectSpecificationAbstract specSpi = (ObjectSpecificationAbstract) specification;
+ specSpi.introspectUpTo(upTo);
- return specification;
- }
+ return specification;
+ }
+ }
/**
* Loads the specifications of the specified types except the one specified
* (to prevent an infinite loop).
*/
- public boolean loadSpecifications(final List<Class<?>> typesToLoad, final Class<?> typeToIgnore) {
- @Programmatic
+ public boolean loadSpecifications(
+ final List<Class<?>> typesToLoad,
+ final Class<?> typeToIgnore,
+ final IntrospectionState upTo) {
boolean anyLoadedAsNull = false;
for (final Class<?> typeToLoad : typesToLoad) {
if (typeToLoad != typeToIgnore) {
@@@ -463,8 -511,11 +503,11 @@@
final NatureOfService fallback) {
// ... and create the specs
+ final ObjectSpecificationAbstract objectSpec;
if (FreeStandingList.class.isAssignableFrom(cls)) {
- return new ObjectSpecificationOnStandaloneList(facetProcessor);
+
- objectSpec = new ObjectSpecificationOnStandaloneList(servicesInjector, facetProcessor, postProcessor);
++ objectSpec = new ObjectSpecificationOnStandaloneList(facetProcessor, postProcessor);
+
} else {
final FacetedMethodsBuilderContext facetedMethodsBuilderContext =
@@@ -473,9 -524,12 +516,12 @@@
final NatureOfService natureOfServiceIfAny = natureOfServiceFrom(cls, fallback);
- return new ObjectSpecificationDefault(cls, facetedMethodsBuilderContext,
- facetProcessor, natureOfServiceIfAny);
+ objectSpec = new ObjectSpecificationDefault(cls,
+ facetedMethodsBuilderContext,
- servicesInjector, facetProcessor, natureOfServiceIfAny, postProcessor);
++ facetProcessor, natureOfServiceIfAny, postProcessor);
}
+
+ return objectSpec;
}
private NatureOfService natureOfServiceFrom(
@@@ -493,57 -547,9 +539,6 @@@
return ClassUtil.forName(className);
}
- /**
- * Typically does not need to be called, but is available for {@link FacetFactory}s to force
- * early introspection of referenced specs in certain circumstances.
- *
- * <p>
- * Originally introduced to support {@link AutoCompleteFacet}.
- */
- private ObjectSpecification introspectIfRequired(final ObjectSpecification spec) {
-
- if(state != State.INTROSPECTING) {
- return spec;
- }
-
- final ObjectSpecificationAbstract specSpi = (ObjectSpecificationAbstract)spec;
- final ObjectSpecificationAbstract.IntrospectionState introspectionState = specSpi.getIntrospectionState();
-
- // REVIEW: can't remember why this is done in multiple passes, could it be simplified?
- switch (introspectionState) {
- case NOT_INTROSPECTED:
-
- specSpi.setIntrospectionState(ObjectSpecificationAbstract.IntrospectionState.BEING_INTROSPECTED);
- introspect(specSpi);
- break;
- case BEING_INTROSPECTED:
- introspect(specSpi);
- break;
- case INTROSPECTED:
- // nothing to do
- break;
- }
- return spec;
- }
-
- private void introspect(final ObjectSpecificationAbstract specSpi) {
- specSpi.introspectTypeHierarchyAndMembers();
- specSpi.updateFromFacetValues();
- specSpi.setIntrospectionState(ObjectSpecificationAbstract.IntrospectionState.INTROSPECTED);
- }
-
- public void postProcess() {
- final Collection<ObjectSpecification> specs = allSpecifications();
- for (final ObjectSpecification spec : specs) {
- postProcess(spec);
- }
--
- }
--
- public void postProcess(final ObjectSpecification spec) {
- postProcessor.postProcess(spec);
- }
--
// -- allSpecifications
/**
* Returns (a new list holding a copy of) all the loaded specifications.
@@@ -562,6 -569,19 +557,17 @@@
return cache.allSpecifications();
}
- // -- getServiceClasses, isServiceClass
+
- @Programmatic
+ public Stream<Class<?>> streamServiceClasses() {
- return servicesInjector.streamServiceTypes();
++ final ServiceRegistry registry = MetaModelContext.current().getServiceRegistry();
++ return registry.streamServiceTypes();
+ }
+
- @Programmatic
+ public boolean isServiceClass(Class<?> cls) {
+ final ObjectSpecification objectSpecification = peekSpecification(cls);
+ return objectSpecification != null && objectSpecification.containsDoOpFacet(DomainServiceFacet.class);
+ }
+
// -- loaded
/**
* Whether this class has been loaded.
@@@ -590,4 -613,13 +596,8 @@@
return objectSpecification;
}
- @Programmatic
+ public IsisConfiguration getConfiguration() {
+ return _Config.getConfiguration();
+ }
+
- @Programmatic
- public ServicesInjector getServicesInjector() {
- return servicesInjector;
- }
}
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
index d909a25,a62b713..e13c10c
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
@@@ -44,12 -41,15 +44,14 @@@ import org.apache.isis.core.metamodel.f
import org.apache.isis.core.metamodel.facets.MethodFilteringFacetFactory;
import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactory;
import org.apache.isis.core.metamodel.facets.MethodRemoverConstants;
+ import org.apache.isis.core.metamodel.facets.ObjectSpecIdFacetFactory;
+ import org.apache.isis.core.metamodel.facets.ObjectSpecIdFacetFactory.ProcessObjectSpecIdContext;
import org.apache.isis.core.metamodel.facets.PropertyOrCollectionIdentifyingFacetFactory;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.ServicesInjectorAware;
import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-public class FacetProcessor implements ServicesInjectorAware {
+@ApplicationScoped
+public class FacetProcessor {
private final ProgrammingModel programmingModel;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 93ad48a,e1c1c67..a0930c5
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@@ -19,6 -19,6 +19,8 @@@
package org.apache.isis.core.metamodel.specloader.specimpl;
++import static org.apache.isis.commons.internal.base._NullSafe.stream;
++
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@@ -88,11 -87,13 +89,10 @@@ import org.apache.isis.core.metamodel.s
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
+ import org.apache.isis.core.metamodel.specloader.postprocessor.PostProcessor;
-import org.apache.isis.core.plugins.environment.DeploymentType;
import org.apache.isis.core.security.authentication.AuthenticationSession;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
--import static org.apache.isis.commons.internal.base._NullSafe.stream;
--
public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implements ObjectSpecification {
private final static Logger LOG = LoggerFactory.getLogger(ObjectSpecificationAbstract.class);
@@@ -118,9 -120,10 +118,10 @@@
// -- fields
- protected final ServicesInjector servicesInjector;
+ //protected final ServiceInjector servicesInjector;
+ private final MetaModelContext context;
+ private PostProcessor postProcessor;
- private final DeploymentType deploymentType;
private final SpecificationLoader specificationLoader;
private final FacetProcessor facetProcessor;
@@@ -157,13 -161,16 +158,14 @@@
private NavigableParentFacet navigableParentFacet;
private CssClassFacet cssClassFacet;
- private IntrospectionState introspected = IntrospectionState.NOT_INTROSPECTED;
+ private IntrospectionState introspectionState = IntrospectionState.NOT_INTROSPECTED;
-
-
+
// -- Constructor
public ObjectSpecificationAbstract(
final Class<?> introspectedClass,
final String shortName,
- final FacetProcessor facetProcessor) {
- final ServicesInjector servicesInjector,
+ final FacetProcessor facetProcessor,
+ final PostProcessor postProcessor) {
this.correspondingClass = introspectedClass;
this.fullName = introspectedClass.getName();
@@@ -172,9 -179,12 +174,10 @@@
this.isAbstract = ClassExtensions.isAbstract(introspectedClass);
this.identifier = Identifier.classIdentifier(introspectedClass);
- this.servicesInjector = servicesInjector;
this.facetProcessor = facetProcessor;
-
- this.specificationLoader = servicesInjector.getSpecificationLoader();
- this.deploymentType = _Context.getEnvironment().getDeploymentType();
+ this.context = MetaModelContext.current();
+ this.specificationLoader = context.getSpecificationLoader();
+ this.postProcessor = postProcessor;
}
// -- Stuff immediately derivable from class
@@@ -222,39 -232,53 +225,53 @@@
}
- public enum IntrospectionState {
- NOT_INTROSPECTED,
- BEING_INTROSPECTED,
- INTROSPECTED,
- }
-
/**
- * Only if {@link #setIntrospectionState(org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract.IntrospectionState)}
- * has been called (should be called within {@link #updateFromFacetValues()}.
+ * Keeps introspecting up to the level required.
*/
- public IntrospectionState getIntrospectionState() {
- return introspected;
+ public void introspectUpTo(final IntrospectionState upTo) {
+
+ LOG.debug("introspectingUpTo: {}, {}", getFullIdentifier(), upTo);
+
+ switch (introspectionState) {
+ case NOT_INTROSPECTED:
+ if(this.introspectionState.compareTo(upTo) < 0) {
+ // set to avoid infinite loops
+ this.introspectionState = IntrospectionState.TYPE_BEING_INTROSPECTED;
+ introspectTypeHierarchy();
+ updateFromFacetValues();
+ this.introspectionState = IntrospectionState.TYPE_INTROSPECTED;
+ }
+ if(this.introspectionState.compareTo(upTo) < 0) {
+ this.introspectionState = IntrospectionState.MEMBERS_BEING_INTROSPECTED;
+ introspectMembers();
+ this.introspectionState = IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED;
+ }
+ // set to avoid infinite loops
+ break;
+ case TYPE_BEING_INTROSPECTED:
+ // nothing to do
+ break;
+ case TYPE_INTROSPECTED:
+ if(this.introspectionState.compareTo(upTo) < 0) {
+ // set to avoid infinite loops
+ this.introspectionState = IntrospectionState.MEMBERS_BEING_INTROSPECTED;
+ introspectMembers();
+ this.introspectionState = IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED;
- }
+ }
-
- public void setIntrospectionState(IntrospectionState introspectationState) {
- this.introspected = introspectationState;
+ break;
+ case MEMBERS_BEING_INTROSPECTED:
+ // nothing to do
+ case TYPE_AND_MEMBERS_INTROSPECTED:
+ // nothing to do
+ break;
- }
+ }
-
- protected boolean isNotIntrospected() {
- return !(getIntrospectionState() == IntrospectionState.INTROSPECTED);
}
+ protected abstract void introspectTypeHierarchy();
+ protected abstract void introspectMembers();
- // -- Introspection (part 1)
-
- public abstract void introspectTypeHierarchyAndMembers();
-
- /**
- * Intended to be called within {@link #introspectTypeHierarchyAndMembers()}
- * .
- */
- protected void updateSuperclass(final Class<?> superclass) {
+ protected void loadSpecOfSuperclass(final Class<?> superclass) {
if (superclass == null) {
return;
}
@@@ -601,7 -612,8 +605,8 @@@
@Override
public Stream<ObjectAssociation> streamAssociations(final Contributed contributed) {
+ introspectUpTo(IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
-
+
guardAgainstTooEarly_assoz(contributed);
return stream(this.associations)
@@@ -684,7 -695,8 +688,8 @@@
@Override
public Stream<ObjectAction> streamObjectActions(final ActionType type, final Contributed contributed) {
+ introspectUpTo(IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
-
+
guardAgainstTooEarly_contrib(contributed);
return stream(objectActionsByType.get(type))
@@@ -1207,8 -1222,10 +1212,10 @@@
if(contributed.isIncluded() && !contributeeAndMixedInAssociationsAdded) {
synchronized (this.associations) {
List<ObjectAssociation> associations = _Lists.newArrayList(this.associations);
+ if(isPersistenceCapableOrViewModel()) {
- associations.addAll(createContributeeAssociations());
- associations.addAll(createMixedInAssociations());
+ associations.addAll(createContributeeAssociations());
+ associations.addAll(createMixedInAssociations());
+ }
sortAndUpdateAssociations(associations);
contributeeAndMixedInAssociationsAdded = true;
}
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 298d2de,5e6fb94..cd4e9b2
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@@ -95,26 -101,26 +98,24 @@@ public class ObjectSpecificationDefaul
public ObjectSpecificationDefault(
final Class<?> correspondingClass,
final FacetedMethodsBuilderContext facetedMethodsBuilderContext,
- final ServicesInjector servicesInjector,
final FacetProcessor facetProcessor,
- final NatureOfService natureOfServiceIfAny) {
- super(correspondingClass, determineShortName(correspondingClass), facetProcessor);
+ final NatureOfService natureOfServiceIfAny,
+ final PostProcessor postProcessor) {
- super(correspondingClass, determineShortName(correspondingClass),
- servicesInjector, facetProcessor, postProcessor);
++ super(correspondingClass, determineShortName(correspondingClass), facetProcessor, postProcessor);
this.isService = natureOfServiceIfAny != null;
this.facetedMethodsBuilder = new FacetedMethodsBuilder(this, facetedMethodsBuilderContext);
+
+ facetProcessor.processObjectSpecId(correspondingClass, this);
}
- // -- introspectTypeHierarchyAndMembers
@Override
- public void introspectTypeHierarchyAndMembers() {
+ protected void introspectTypeHierarchy() {
- if(isNotIntrospected()) {
- facetedMethodsBuilder.introspectClass();
+ facetedMethodsBuilder.introspectClass();
- }
// name
- if(isNotIntrospected()) {
- addNamedFacetAndPluralFacetIfRequired();
+ addNamedFacetAndPluralFacetIfRequired();
- }
// go no further if a value
if(this.containsFacet(ValueFacet.class)) {
@@@ -124,12 -130,18 +125,18 @@@
return;
}
- // superclass
- if(isNotIntrospected()) {
- final Class<?> superclass = getCorrespondingClass().getSuperclass();
- updateSuperclass(superclass);
+ final DomainServiceFacet facet = getFacet(DomainServiceFacet.class);
+ final boolean serviceWithNatureOfDomain = facet != null && facet.getNatureOfService() == NatureOfService.DOMAIN;
+ if (serviceWithNatureOfDomain) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("skipping type hierarchy introspection for domain service with natureOfService = DOMAIN {}", getFullIdentifier());
+ }
+ return;
}
+ // superclass
- final Class<?> superclass = getCorrespondingClass().getSuperclass();
++ final Class<?> superclass = getCorrespondingClass().getSuperclass();
+ loadSpecOfSuperclass(superclass);
// walk superinterfaces
@@@ -152,32 -164,28 +159,27 @@@
}
}
- if(isNotIntrospected()) {
- updateAsSubclassTo(interfaceSpecList);
- updateInterfaces(interfaceSpecList);
-
- }
+ updateAsSubclassTo(interfaceSpecList);
- }
- if(isNotIntrospected()) {
+ updateInterfaces(interfaceSpecList);
+ }
- updateAssociationsAndActions();
- }
+ protected synchronized void introspectMembers() {
- private synchronized void updateAssociationsAndActions() {
+ if(this.containsFacet(ValueFacet.class)) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("skipping full introspection for value type {}", getFullIdentifier());
+ }
+ return;
- }
++ }
// associations and actions
- if(isNotIntrospected()) {
- final List<ObjectAssociation> associations = createAssociations();
- sortAndUpdateAssociations(associations);
+ final List<ObjectAssociation> associations = createAssociations();
+ sortAndUpdateAssociations(associations);
- }
- if(isNotIntrospected()) {
- final List<ObjectAction> actions = createActions();
- sortCacheAndUpdateActions(actions);
+ final List<ObjectAction> actions = createActions();
+ sortCacheAndUpdateActions(actions);
- }
- if(isNotIntrospected()) {
- updateFromFacetValues();
- }
+ postProcess();
}
private void addNamedFacetAndPluralFacetIfRequired() {
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
index 45d0e72,c5b9053..64e39dc
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
@@@ -35,10 -38,9 +35,11 @@@ import org.apache.isis.core.metamodel.s
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
+ import org.apache.isis.core.metamodel.specloader.postprocessor.PostProcessor;
import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract;
+import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
+
/**
* A custom {@link ObjectSpecification} that is designed to treat the
* {@link FreeStandingList} class as a "standalone" collection.
@@@ -51,9 -53,15 +52,14 @@@ public class ObjectSpecificationOnStand
// -- constructor
- public ObjectSpecificationOnStandaloneList(final FacetProcessor facetProcessor) {
- super(FreeStandingList.class, NAME, facetProcessor);
+ public ObjectSpecificationOnStandaloneList(
- final ServicesInjector servicesInjector,
+ final FacetProcessor facetProcessor,
+ final PostProcessor postProcessor) {
- super(FreeStandingList.class, NAME, servicesInjector, facetProcessor, postProcessor);
++ super(FreeStandingList.class, NAME, facetProcessor, postProcessor);
this.specId = ObjectSpecId.of(getCorrespondingClass().getName());
+
+ FacetUtil.addFacet(
+ new ObjectSpecIdFacetOnStandaloneList(specId, this));
}
@@@ -61,11 -69,11 +67,11 @@@
// -- Introspection
@Override
- public void introspectTypeHierarchyAndMembers() {
- updateSuperclass(Object.class);
+ protected void introspectTypeHierarchy() {
+ loadSpecOfSuperclass(Object.class);
addFacet(new CollectionFacetOnStandaloneList(this));
- addFacet(new TypeOfFacetDefaultToObject(this, getSpecificationLoader()) {
+ addFacet(new TypeOfFacetDefaultToObject(this) {
});
// ObjectList specific
@@@ -76,6 -84,9 +82,10 @@@
// don't install anything for NotPersistableFacet
}
++ @Override
+ protected void introspectMembers() {
+ // no-op.
+ }
// -- isXxx
diff --cc core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
index 6455d48,2bc63d7..1fc2201
--- a/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
+++ b/core/plugins/jdo-datanucleus-5/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
@@@ -27,9 -27,9 +27,10 @@@ import org.junit.Rule
import org.junit.Test;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+ import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@@ -114,18 -111,27 +116,27 @@@ public class ObjectMemberAbstractTest
allowing(mockAuthenticationSessionProvider).getAuthenticationSession();
will(returnValue(mockAuthenticationSession));
}});
- persistentAdapter = PojoAdapterBuilder.create()
- .with(mockSpecificationLoader)
- .withOid("CUS|1")
- .withPojo(mockPersistable)
- .build();
+ // persistentAdapter = PojoAdapterBuilder.create()
+ // .with(mockSpecificationLoader)
+ // .withOid("CUS|1")
+ // .withPojo(mockPersistable)
+ // .build();
+
+ persistentAdapter = PojoAdapter.of(
+ mockPersistable,
+ Factory.persistentOf(ObjectSpecId.of("CUS"), "1"),
+ mockAuthenticationSession,
+ mockSpecificationLoader,
+ null);
+
+
transientAdapter = PojoAdapterBuilder.create()
- .with(mockSpecificationLoader)
- .with(Persistence.TRANSIENT)
- .withPojo(mockPersistable)
- .build();
+ .with(mockSpecificationLoader)
+ .with(Persistence.TRANSIENT)
+ .withPojo(mockPersistable)
+ .build();
- testMember = new ObjectMemberAbstractImpl("id", stubServicesInjector);
+ testMember = new ObjectMemberAbstractImpl("id");
context.checking(new Expectations() {{
allowing(mockSpecificationLoader).lookupBySpecId(ObjectSpecId.of("CUS"));
diff --cc core/pom.xml
index 34e85be,c4b4d98..46c4ebf
--- a/core/pom.xml
+++ b/core/pom.xml
@@@ -182,9 -178,10 +182,12 @@@
<htmlparser.version>2.1</htmlparser.version>
- <junit.version>5.3.1</junit.version>
+ <junit.version>5.3.2</junit.version>
+ <mockito.version>2.23.4</mockito.version>
++
+ <junit-legacy.version>4.12</junit-legacy.version>
+ <assertj.version>3.11.1</assertj.version>
-
+
<!-- 2.8.1 depends on cglib-nodep 3.1 whereas axonframework depends on 2.2.2 -->
<jmock.version>2.6.0</jmock.version>
<easymock.version>2.5.2</easymock.version>
diff --cc core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderBuilder.java
index 0ec6151,8fd5681..5d5ac2b
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderBuilder.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderBuilder.java
@@@ -1,5 -1,24 +1,23 @@@
+ /*
+ * 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.runtime.systemusinginstallers;
-import org.apache.isis.applib.AppManifest;
import org.apache.isis.core.runtime.authorization.standard.AuthorizationManagerStandard;
import org.apache.isis.core.security.authentication.manager.AuthenticationManager;
import org.apache.isis.core.security.authentication.standard.AuthenticationManagerStandard;
diff --cc core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
index d5b2ff5,81dc064..6efca02
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
@@@ -59,39 -94,50 +59,54 @@@ public class IsisWicketModule
// these services need to be bound because they injected directly into
// Wicket panels outside of the Isis runtime.
- bind(EmailService.class).to(EmailServiceWicket.class);
- bind(EmailNotificationService.class).to(EmailNotificationServiceWicket.class);
-
- bind(String.class).annotatedWith(Names.named("applicationName"))
- .toProvider(string("isis.viewer.wicket.application.name", "Apache Isis ™"));
-
- bind(String.class).annotatedWith(Names.named("brandLogoHeader"))
- .toProvider(string("isis.viewer.wicket.application.brandLogoHeader"));
-
- bind(String.class).annotatedWith(Names.named("brandLogoSignin"))
- .toProvider(string("isis.viewer.wicket.application.brandLogoSignin"));
-
- bind(String.class).annotatedWith(Names.named("applicationCss"))
- .toProvider(string("isis.viewer.wicket.application.css", "css/application.css"));
-
- bind(String.class).annotatedWith(Names.named("applicationJs"))
- .toProvider(string("isis.viewer.wicket.application.js", "css/application.js"));
-
- bind(String.class).annotatedWith(Names.named("aboutMessage"))
- .toProvider(stringOrElse("isis.viewer.wicket.application.about",
- string("isis.viewer.wicket.application.name")));
-
- final Provider<String> welcomeFile = string("isis.viewer.wicket.welcome.file", "welcome.html");
- bind(String.class).annotatedWith(Names.named("welcomeMessage"))
- .toProvider(() -> {
- final String fallback = getConfiguration().getString("isis.viewer.wicket.welcome.text");
- final URL resource;
- try {
- resource = servletContext.getResource(prefix(welcomeFile.get(), "/"));
- if(resource!=null) {
- return readLines(resource, fallback);
- }
- } catch (MalformedURLException e) {
- // fall through
- }
- return fallback;
- });
-
- bind(String.class).annotatedWith(Names.named("applicationVersion"))
- .toProvider(string("isis.viewer.wicket.application.version"));
-
- bind(InputStream.class).annotatedWith(Names.named("metaInfManifest"))
- .toProvider(() -> servletContext.getResourceAsStream("/META-INF/MANIFEST.MF"));
-
+// bind(EmailService.class).to(EmailServiceWicket.class);
+// bind(EmailNotificationService.class).to(EmailNotificationServiceWicket.class);
+
+// bind(String.class).annotatedWith(Names.named("applicationName"))
+// .toProvider(string("isis.viewer.wicket.application.name", "Apache Isis ™"));
+//
+// bind(String.class).annotatedWith(Names.named("brandLogoHeader"))
+// .toProvider(string("isis.viewer.wicket.application.brandLogoHeader"));
+//
+// bind(String.class).annotatedWith(Names.named("brandLogoSignin"))
+// .toProvider(string("isis.viewer.wicket.application.brandLogoSignin"));
+//
+// bind(String.class).annotatedWith(Names.named("applicationCss"))
+// .toProvider(string("isis.viewer.wicket.application.css", "css/application.css"));
+//
+// bind(String.class).annotatedWith(Names.named("applicationJs"))
+// .toProvider(string("isis.viewer.wicket.application.js", "css/application.js"));
+//
+// bind(String.class).annotatedWith(Names.named("aboutMessage"))
+// .toProvider(stringOrElse("isis.viewer.wicket.application.about",
+// string("isis.viewer.wicket.application.name")));
+//
+// final Provider<String> welcomeFile = string("isis.viewer.wicket.welcome.file", "welcome.html");
+// bind(String.class).annotatedWith(Names.named("welcomeMessage"))
+// .toProvider(() -> readLines(getClass(), welcomeFile.get(),
+// getConfiguration().getString("isis.viewer.wicket.welcome.text")));
+//
+// bind(String.class).annotatedWith(Names.named("applicationVersion"))
+// .toProvider(string("isis.viewer.wicket.application.version"));
+//
+// bind(InputStream.class).annotatedWith(Names.named("metaInfManifest"))
+// .toProvider(() -> servletContext.getResourceAsStream("/META-INF/MANIFEST.MF"));
-
++//
++// final Provider<String> welcomeFile = string("isis.viewer.wicket.welcome.file", "welcome.html");
++// bind(String.class).annotatedWith(Names.named("welcomeMessage"))
++// .toProvider(() -> {
++// final String fallback = getConfiguration().getString("isis.viewer.wicket.welcome.text");
++// final URL resource;
++// try {
++// resource = servletContext.getResource(prefix(welcomeFile.get(), "/"));
++// if(resource!=null) {
++// return readLines(resource, fallback);
++// }
++// } catch (MalformedURLException e) {
++// // fall through
++// }
++// return fallback;
++// });
}
// -- HELPER
diff --cc core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 082c049,eee3835..7b4ebf4
--- 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
@@@ -63,9 -63,9 +63,10 @@@ import org.slf4j.LoggerFactory
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;
@@@ -107,7 -109,10 +110,10 @@@ public abstract class PageAbstract exte
private static Logger LOG = LoggerFactory.getLogger(PageAbstract.class);
private static final long serialVersionUID = 1L;
-
+
+ public static final ConfigPropertyEnum<DialogMode> CONFIG_DIALOG_MODE =
+ new ConfigPropertyEnum<>("isis.viewer.wicket.dialogMode", DialogMode.SIDEBAR);
+
/**
* @see <a href="http://github.com/brandonaaron/livequery">livequery</a>
*/
@@@ -179,18 -196,19 +186,19 @@@
: new EmptyPanel("debugBar").setVisible(false);
add(debugBar);
- MarkupContainer header = createPageHeader("header");
- themeDiv.add(header);
+ MarkupContainer header = createPageHeader("header");
+ themeDiv.add(header);
- MarkupContainer footer = createPageFooter("footer");
- themeDiv.add(footer);
+ MarkupContainer footer = createPageFooter("footer");
+ themeDiv.add(footer);
- addActionPromptModalWindow(themeDiv);
+ addActionPromptModalWindow(themeDiv);
+ addActionPromptSidebar(themeDiv);
- this.childComponentIds = Collections.unmodifiableList(Arrays.asList(childComponentIds));
+ this.childComponentIds = Collections.unmodifiableList(Arrays.asList(childComponentIds));
- // ensure that all collected JavaScript contributions are loaded at the page footer
- add(new HeaderResponseContainer("footerJS", "footerJS"));
+ // ensure that all collected JavaScript contributions are loaded at the page footer
+ add(new HeaderResponseContainer("footerJS", "footerJS"));
} catch(final RuntimeException ex) {
@@@ -450,8 -466,15 +460,15 @@@
@Override
public ActionPrompt getActionPrompt() {
+ final DialogMode dialogMode = CONFIG_DIALOG_MODE.from(getConfiguration());
+ switch (dialogMode) {
+ case SIDEBAR:
+ return actionPromptSidebar;
+ case MODAL:
+ default:
- return actionPromptModalWindow;
- }
+ return actionPromptModalWindow;
+ }
+ }
private void addActionPromptModalWindow(final MarkupContainer parent) {
actionPromptModalWindow = ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW);