You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2020/01/10 15:22:34 UTC
[isis] 20/21: ISIS-2259: fixes up package name of
isis-core-metamodel
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-2259
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 31b8b21f2e297439edf889faacfd685122a8751a
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Jan 10 15:10:11 2020 +0000
ISIS-2259: fixes up package name of isis-core-metamodel
---
.../core/config/presets/DebugMetaModel.properties | 2 +-
.../presets/DebugProgrammingModel.properties | 4 +-
.../config/presets/SilenceMetaModel.properties | 2 +-
.../presets/SilenceProgrammingModel.properties | 4 +-
.../commons/internal/reflection/ReflectTest.java | 10 +-
.../facets/object/mixin/MixinIntendedAs.java | 26 +-
.../object/mixin/MixinIntendedAsActionTest.java | 1 -
.../facets/param/name/ParameterNameFacetTest.java | 14 +-
core/metamodel/log4j2-test.xml | 2 +-
.../isis/core/metamodel/IsisModuleMetamodel.java | 101 ++
.../isis/core/metamodel/adapter/ObjectAdapter.java | 61 ++
.../metamodel/adapter/ObjectAdapterProvider.java | 35 +
.../adapter/oid/ObjectNotFoundException.java | 36 +
.../adapter/oid/ObjectPersistenceException.java | 42 +
.../isis/core/metamodel/adapter/oid/Oid.java | 140 +++
.../core/metamodel/adapter/oid/Oid_Marshaller.java | 254 +++++
.../core/metamodel/adapter/oid/Oid_Parented.java | 146 +++
.../isis/core/metamodel/adapter/oid/Oid_Root.java | 167 +++
.../isis/core/metamodel/adapter/oid/Oid_Value.java | 87 ++
.../core/metamodel/adapter/oid/ParentedOid.java | 54 +
.../adapter/oid/PojoRecreationException.java | 29 +
.../adapter/oid/PojoRefreshException.java | 32 +
.../isis/core/metamodel/adapter/oid/RootOid.java | 46 +
.../isis/core/metamodel/adapter/package-info.java | 32 +
.../authorization/standard/AuthorizationFacet.java | 32 +
.../standard/AuthorizationFacetAbstract.java | 78 ++
.../standard/AuthorizationFacetFactory.java | 46 +
.../standard/AuthorizationFacetImpl.java | 30 +
.../authorization/standard/package-info.java | 33 +
.../core/metamodel/commons/ArrayExtensions.java | 69 ++
.../isis/core/metamodel/commons/CanBeVoid.java | 25 +
.../core/metamodel/commons/ClassExtensions.java | 175 +++
.../core/metamodel/commons/ClassFunctions.java | 46 +
.../core/metamodel/commons/ClassPredicates.java | 37 +
.../isis/core/metamodel/commons/ClassUtil.java | 192 ++++
.../metamodel/commons/CloseableExtensions.java | 40 +
.../core/metamodel/commons/DateExtensions.java | 35 +
.../metamodel/commons/InputStreamExtensions.java | 69 ++
.../core/metamodel/commons/ListExtensions.java | 115 ++
.../isis/core/metamodel/commons/LocaleUtil.java | 40 +
.../isis/core/metamodel/commons/MapUtil.java | 48 +
.../core/metamodel/commons/MethodExtensions.java | 92 ++
.../commons/MethodInvocationPreprocessor.java | 154 +++
.../isis/core/metamodel/commons/MethodUtil.java | 202 ++++
.../core/metamodel/commons/ObjectExtensions.java | 82 ++
.../isis/core/metamodel/commons/ResourceUtil.java | 83 ++
.../core/metamodel/commons/StringExtensions.java | 393 +++++++
.../metamodel/commons/ThrowableExtensions.java | 82 ++
.../isis/core/metamodel/commons/ToString.java | 165 +++
.../isis/core/metamodel/commons/Wormhole.java | 50 +
.../isis/core/metamodel/commons/package-info.java | 27 +
.../apache/isis/core/metamodel/consent/Allow.java | 56 +
.../isis/core/metamodel/consent/Consent.java | 73 ++
.../core/metamodel/consent/ConsentAbstract.java | 159 +++
.../core/metamodel/consent/InteractionAdvisor.java | 103 ++
.../metamodel/consent/InteractionContextType.java | 135 +++
.../metamodel/consent/InteractionInitiatedBy.java | 33 +
.../core/metamodel/consent/InteractionResult.java | 155 +++
.../metamodel/consent/InteractionResultSet.java | 104 ++
.../apache/isis/core/metamodel/consent/Veto.java | 48 +
.../core/metamodel/context/MetaModelContext.java | 212 ++++
.../metamodel/context/MetaModelContextAware.java | 29 +
.../context/MetaModelContext_usingIoc.java | 172 +++
.../core/metamodel/context/MetaModelContexts.java | 44 +
.../metamodel/exceptions/MetaModelException.java | 43 +
.../persistence/ObjectNotFoundException.java | 38 +
.../persistence/ObjectPersistenceException.java | 42 +
.../persistence/PojoRecreationException.java | 31 +
.../persistence/PojoRefreshException.java | 34 +
.../apache/isis/core/metamodel/facetapi/Facet.java | 123 +++
.../core/metamodel/facetapi/FacetAbstract.java | 287 +++++
.../isis/core/metamodel/facetapi/FacetHolder.java | 150 +++
.../core/metamodel/facetapi/FacetHolderImpl.java | 168 +++
.../isis/core/metamodel/facetapi/FacetUtil.java | 96 ++
.../metamodel/facetapi/FacetWithAttributes.java | 32 +
.../isis/core/metamodel/facetapi/FeatureType.java | 159 +++
.../core/metamodel/facetapi/IdentifiedHolder.java | 31 +
.../core/metamodel/facetapi/MetaModelRefiner.java | 34 +
.../core/metamodel/facetapi/MethodRemover.java | 71 ++
.../isis/core/metamodel/facets/Annotations.java | 695 ++++++++++++
.../core/metamodel/facets/CollectionUtils.java | 129 +++
.../facets/ContributeeMemberFacetFactory.java | 45 +
.../core/metamodel/facets/DependentArgUtils.java | 198 ++++
.../core/metamodel/facets/DomainEventHelper.java | 441 ++++++++
.../isis/core/metamodel/facets/FacetFactory.java | 337 ++++++
.../metamodel/facets/FacetFactoryAbstract.java | 70 ++
.../isis/core/metamodel/facets/FacetedMethod.java | 216 ++++
.../metamodel/facets/FacetedMethodParameter.java | 50 +
.../core/metamodel/facets/ImperativeFacet.java | 169 +++
.../metamodel/facets/ImperativeFacetMulti.java | 33 +
.../facets/MethodFilteringFacetFactory.java | 33 +
.../core/metamodel/facets/MethodFinderUtils.java | 239 +++++
.../metamodel/facets/MethodLiteralConstants.java | 77 ++
.../facets/MethodPrefixBasedFacetFactory.java | 39 +
.../MethodPrefixBasedFacetFactoryAbstract.java | 138 +++
.../metamodel/facets/MethodRemoverConstants.java | 44 +
.../core/metamodel/facets/MultipleValueFacet.java | 26 +
.../metamodel/facets/ObjectSpecIdFacetFactory.java | 37 +
.../facets/OrphanedSupportingMethodValidator.java | 126 +++
.../metamodel/facets/PostConstructMethodCache.java | 30 +
...ropertyOrCollectionIdentifyingFacetFactory.java | 83 ++
...rCollectionIdentifyingFacetFactoryAbstract.java | 43 +
.../metamodel/facets/SingleClassValueFacet.java | 35 +
.../facets/SingleClassValueFacetAbstract.java | 60 ++
.../core/metamodel/facets/SingleIntValueFacet.java | 27 +
.../facets/SingleIntValueFacetAbstract.java | 47 +
.../metamodel/facets/SingleStringValueFacet.java | 23 +
.../facets/SingleStringValueFacetAbstract.java | 58 +
.../core/metamodel/facets/SingleValueFacet.java | 28 +
.../metamodel/facets/SingleValueFacetAbstract.java | 46 +
.../isis/core/metamodel/facets/TypedHolder.java | 55 +
.../core/metamodel/facets/TypedHolderDefault.java | 58 +
.../core/metamodel/facets/WhereValueFacet.java | 29 +
.../metamodel/facets/WhereValueFacetAbstract.java | 57 +
...lementSpecificationProviderFromTypeOfFacet.java | 37 +
.../facets/actcoll/typeof/TypeOfFacet.java | 126 +++
.../facets/actcoll/typeof/TypeOfFacetAbstract.java | 40 +
.../actcoll/typeof/TypeOfFacetDefaultToObject.java | 30 +
.../typeof/TypeOfFacetInferredFromArray.java | 30 +
.../typeof/TypeOfFacetInferredFromGenerics.java | 30 +
.../action/ActionAnnotationFacetFactory.java | 287 +++++
...nChoicesForCollectionParameterFacetFactory.java | 161 +++
.../action/associateWith/AssociatedWithFacet.java | 30 +
.../associateWith/AssociatedWithFacetAbstract.java | 45 +
.../AssociatedWithFacetForActionAnnotation.java | 32 +
.../command/CommandFacetForActionAnnotation.java | 123 +++
...ommandFacetForActionAnnotationAsConfigured.java | 39 +
.../command/CommandFacetFromConfiguration.java | 46 +
.../hidden/HiddenFacetForActionAnnotation.java | 56 +
.../action/invocation/ActionDomainEventFacet.java | 33 +
.../invocation/ActionDomainEventFacetAbstract.java | 165 +++
.../invocation/ActionDomainEventFacetDefault.java | 33 +
.../ActionDomainEventFacetForActionAnnotation.java | 32 +
.../action/invocation/ActionInvocationFacet.java | 51 +
.../invocation/ActionInvocationFacetAbstract.java | 38 +
...ctionInvocationFacetForDomainEventAbstract.java | 513 +++++++++
...ionFacetForDomainEventFromActionAnnotation.java | 40 +
...onInvocationFacetForDomainEventFromDefault.java | 40 +
.../actions/action/invocation/CommandUtil.java | 113 ++
.../PrototypeFacetForActionAnnotation.java | 51 +
.../PublishedActionFacetForActionAnnotation.java | 99 ++
...ActionFacetForActionAnnotationAsConfigured.java | 31 +
.../PublishedActionFacetFromConfiguration.java | 32 +
...ctionSemanticsFacetFallbackToNonIdempotent.java | 32 +
.../ActionSemanticsFacetForActionAnnotation.java | 49 +
.../typeof/TypeOfFacetForActionAnnotation.java | 33 +
.../facets/actions/command/CommandFacet.java | 55 +
.../actions/command/CommandFacetAbstract.java | 123 +++
.../actions/defaults/ActionDefaultsFacet.java | 35 +
.../defaults/ActionDefaultsFacetAbstract.java | 36 +
.../method/ActionDefaultsFacetViaMethod.java | 88 ++
.../ActionDefaultsFacetViaMethodFactory.java | 88 ++
.../FileAcceptFacetForActionAnnotation.java | 47 +
.../facets/actions/homepage/HomePageFacet.java | 34 +
.../actions/homepage/HomePageFacetAbstract.java | 36 +
.../facets/actions/homepage/HomePageFacetImpl.java | 30 +
.../annotation/HomePageFacetAnnotation.java | 31 +
.../annotation/HomePageFacetAnnotationFactory.java | 130 +++
.../actions/layout/ActionLayoutFacetFactory.java | 171 +++
...tionPositionFacetForActionLayoutAnnotation.java | 46 +
.../layout/ActionPositionFacetForActionXml.java | 41 +
...okmarkPolicyFacetForActionLayoutAnnotation.java | 58 +
.../layout/BookmarkPolicyFacetForActionXml.java | 42 +
.../CssClassFaFacetForActionLayoutAnnotation.java | 57 +
.../layout/CssClassFaFacetForActionXml.java | 44 +
.../CssClassFacetForActionLayoutAnnotation.java | 47 +
.../actions/layout/CssClassFacetForActionXml.java | 42 +
.../DescribedAsFacetForActionLayoutAnnotation.java | 47 +
.../layout/DescribedAsFacetForActionXml.java | 42 +
.../HiddenFacetForActionLayoutAnnotation.java | 56 +
.../actions/layout/HiddenFacetForActionXml.java | 51 +
.../NamedFacetForActionLayoutAnnotation.java | 48 +
.../actions/layout/NamedFacetForActionXml.java | 44 +
...tContributedFacetForActionLayoutAnnotation.java | 52 +
.../PromptStyleFacetForActionLayoutAnnotation.java | 97 ++
.../layout/PromptStyleFacetForActionXml.java | 57 +
.../RedirectFacetFromActionLayoutAnnotation.java | 47 +
.../actions/layout/RedirectFacetFromActionXml.java | 43 +
.../notcontributed/NotContributedFacet.java | 40 +
.../NotContributedFacetAbstract.java | 73 ++
...tributedFacetDerivedFromDomainServiceFacet.java | 47 +
...dFacetDerivedFromDomainServiceFacetFactory.java | 58 +
.../NotContributedFacetDerivedFromMixinFacet.java | 37 +
...ntributedFacetDerivedFromMixinFacetFactory.java | 52 +
.../notinservicemenu/NotInServiceMenuFacet.java | 38 +
.../NotInServiceMenuFacetAbstract.java | 40 +
...viceMenuFacetDerivedFromDomainServiceFacet.java | 54 +
...uFacetDerivedFromDomainServiceFacetFactory.java | 59 ++
.../actions/position/ActionPositionFacet.java | 44 +
.../position/ActionPositionFacetAbstract.java | 57 +
.../position/ActionPositionFacetFallback.java | 31 +
.../facets/actions/prototype/PrototypeFacet.java | 30 +
.../actions/prototype/PrototypeFacetAbstract.java | 56 +
.../actions/publish/PublishedActionFacet.java | 30 +
.../publish/PublishedActionFacetAbstract.java | 38 +
.../facets/actions/redirect/RedirectFacet.java | 33 +
.../actions/redirect/RedirectFacetAbstract.java | 66 ++
.../actions/redirect/RedirectFacetFallback.java | 31 +
.../actions/semantics/ActionSemanticsFacet.java | 33 +
.../semantics/ActionSemanticsFacetAbstract.java | 39 +
.../validate/ActionParameterValidationFacet.java | 46 +
.../ActionParameterValidationFacetAbstract.java | 47 +
.../actions/validate/ActionValidationFacet.java | 49 +
.../validate/ActionValidationFacetAbstract.java | 47 +
.../ActionParameterValidationFacetViaMethod.java | 84 ++
.../method/ActionValidationFacetViaMethod.java | 84 ++
.../ActionValidationFacetViaMethodFactory.java | 117 ++
.../facets/all/deficiencies/DeficiencyFacet.java | 134 +++
.../facets/all/describedas/DescribedAsFacet.java | 33 +
.../all/describedas/DescribedAsFacetAbstract.java | 36 +
.../core/metamodel/facets/all/help/HelpFacet.java | 29 +
.../facets/all/help/HelpFacetAbstract.java | 36 +
.../metamodel/facets/all/hide/HiddenFacet.java | 31 +
.../all/i18n/DescribedAsFacetTranslated.java | 64 ++
.../facets/all/i18n/NamedFacetTranslated.java | 72 ++
.../facets/all/i18n/PluralFacetTranslated.java | 55 +
.../facets/all/i18n/TranslationFacetFactory.java | 119 +++
.../metamodel/facets/all/named/NamedFacet.java | 42 +
.../facets/all/named/NamedFacetAbstract.java | 59 ++
.../facets/all/named/NamedFacetInferred.java | 31 +
.../collections/CollectionFacetAbstract.java | 40 +
.../CollectionAccessorFacetViaAccessor.java | 109 ++
.../CollectionAccessorFacetViaAccessorFactory.java | 112 ++
.../clear/CollectionClearFacetFactory.java | 70 ++
.../clear/CollectionClearFacetViaAccessor.java | 79 ++
.../clear/CollectionClearFacetViaClearMethod.java | 70 ++
.../CollectionAnnotationFacetFactory.java | 293 +++++
.../collection/defaultview/DefaultViewFacet.java | 26 +
.../defaultview/DefaultViewFacetAbstract.java | 35 +
.../DisabledFacetForCollectionAnnotation.java | 69 ++
.../hidden/HiddenFacetForCollectionAnnotation.java | 56 +
...ectionAddToFacetForDomainEventFromAbstract.java | 124 +++
...acetForDomainEventFromCollectionAnnotation.java | 43 +
...lectionAddToFacetForDomainEventFromDefault.java | 41 +
.../modify/CollectionDomainEventFacet.java | 34 +
.../modify/CollectionDomainEventFacetAbstract.java | 145 +++
.../modify/CollectionDomainEventFacetDefault.java | 32 +
...ionDomainEventFacetForCollectionAnnotation.java | 45 +
...nRemoveFromFacetForDomainEventFromAbstract.java | 123 +++
...acetForDomainEventFromCollectionAnnotation.java | 43 +
...onRemoveFromFacetForDomainEventFromDefault.java | 41 +
.../NotPersistedFacetForCollectionAnnotation.java | 55 +
...fFacetOnCollectionFromCollectionAnnotation.java | 47 +
...abledFacetOnCollectionDerivedFromImmutable.java | 39 +
...cetOnCollectionDerivedFromImmutableFactory.java | 45 +
.../javautilcollection/CollectionFacetFactory.java | 86 ++
.../javautilcollection/JavaArrayFacet.java | 84 ++
.../javautilcollection/JavaCollectionFacet.java | 78 ++
.../layout/CollectionLayoutFacetFactory.java | 123 +++
...CssClassFacetForCollectionLayoutAnnotation.java | 45 +
.../layout/CssClassFacetForCollectionXml.java | 42 +
...aultViewFacetForCollectionLayoutAnnotation.java | 48 +
.../layout/DefaultViewFacetForCollectionXml.java | 42 +
...cribedAsFacetForCollectionLayoutAnnotation.java | 45 +
.../layout/DescribedAsFacetForCollectionXml.java | 42 +
.../HiddenFacetForCollectionLayoutAnnotation.java | 58 +
.../layout/HiddenFacetForCollectionXml.java | 51 +
.../NamedFacetForCollectionLayoutAnnotation.java | 52 +
.../layout/NamedFacetForCollectionXml.java | 47 +
.../PagedFacetForCollectionLayoutAnnotation.java | 46 +
.../layout/PagedFacetForCollectionXml.java | 41 +
...SortedByFacetForCollectionLayoutAnnotation.java | 53 +
.../layout/SortedByFacetForCollectionXml.java | 56 +
.../collections/modify/CollectionAddToFacet.java | 37 +
.../modify/CollectionAddToFacetAbstract.java | 36 +
.../modify/CollectionAddToFacetViaAccessor.java | 77 ++
.../modify/CollectionAddToFacetViaMethod.java | 74 ++
...tionAddToRemoveFromAndValidateFacetFactory.java | 177 ++++
.../collections/modify/CollectionClearFacet.java | 36 +
.../modify/CollectionClearFacetAbstract.java | 36 +
.../facets/collections/modify/CollectionFacet.java | 112 ++
.../modify/CollectionRemoveFromFacet.java | 39 +
.../modify/CollectionRemoveFromFacetAbstract.java | 36 +
.../CollectionRemoveFromFacetViaAccessor.java | 80 ++
.../modify/CollectionRemoveFromFacetViaMethod.java | 74 ++
.../TypeOfFacetInferredFromSupportingMethods.java | 31 +
.../parented/ParentedCollectionFacetDefault.java | 37 +
.../ParentedFacetSinceCollectionFactory.java | 53 +
.../facets/collections/sortedby/SortedByFacet.java | 32 +
.../sortedby/SortedByFacetAbstract.java | 38 +
.../annotation/SortedByFacetAnnotationFactory.java | 90 ++
.../validate/CollectionValidateAddToFacet.java | 40 +
.../CollectionValidateAddToFacetAbstract.java | 48 +
.../CollectionValidateAddToFacetViaMethod.java | 82 ++
.../CollectionValidateRemoveFromFacet.java | 39 +
.../CollectionValidateRemoveFromFacetAbstract.java | 47 +
...CollectionValidateRemoveFromFacetViaMethod.java | 83 ++
.../collparam/semantics/CollectionSemantics.java | 125 +++
.../semantics/CollectionSemanticsFacet.java | 29 +
.../semantics/CollectionSemanticsFacetDefault.java | 47 +
.../facets/fallback/ActionChoicesFacetNone.java | 45 +
.../facets/fallback/ActionDefaultsFacetNone.java | 42 +
.../facets/fallback/DescribedAsFacetNone.java | 39 +
.../facets/fallback/FallbackFacetFactory.java | 144 +++
.../metamodel/facets/fallback/HelpFacetNone.java | 44 +
.../LabelAtFacetFromLayoutConfiguration.java | 30 +
.../facets/fallback/MaxLengthFacetUnlimited.java | 46 +
.../facets/fallback/MultiLineFacetNone.java | 36 +
.../facets/fallback/NamedFacetDefault.java | 33 +
.../metamodel/facets/fallback/NamedFacetNone.java | 44 +
.../fallback/PagedFacetFromConfiguration.java | 29 +
.../metamodel/facets/fallback/TitleFacetNone.java | 42 +
.../metamodel/facets/jaxb/JaxbFacetFactory.java | 399 +++++++
.../facets/jaxb/XmlAccessorTypeFacet.java | 31 +
.../facets/jaxb/XmlAccessorTypeFacetAbstract.java | 40 +
.../facets/jaxb/XmlAccessorTypeFacetDefault.java | 33 +
.../facets/jaxb/XmlJavaTypeAdapterFacet.java | 29 +
.../jaxb/XmlJavaTypeAdapterFacetAbstract.java | 38 +
.../jaxb/XmlJavaTypeAdapterFacetDefault.java | 31 +
.../metamodel/facets/jaxb/XmlTransientFacet.java | 29 +
.../facets/jaxb/XmlTransientFacetAbstract.java | 37 +
.../facets/jaxb/XmlTransientFacetDefault.java | 30 +
.../facets/members/cssclass/CssClassFacet.java | 38 +
.../members/cssclass/CssClassFacetAbstract.java | 51 +
.../members/cssclass/CssClassFacetAbstract2.java | 36 +
.../CssClassFacetOnActionFromConfiguredRegex.java | 30 +
...assFacetOnActionFromConfiguredRegexFactory.java | 120 +++
.../facets/members/cssclassfa/CssClassFaFacet.java | 37 +
.../cssclassfa/CssClassFaFacetAbstract.java | 79 ++
.../members/cssclassfa/CssClassFaPosition.java | 104 ++
.../annotprop/CssClassFaFacetOnMemberFactory.java | 103 ++
...CssClassFaFacetOnMemberFromConfiguredRegex.java | 31 +
.../CssClassFaFacetOnMemberFromProperties.java | 40 +
.../cssclassfa/annotprop/MixinInterceptor.java | 64 ++
.../DescribedAsFacetOnMemberDerivedFromType.java | 32 +
.../annotprop/DescribedAsFacetOnMemberFactory.java | 64 ++
.../DescribedAsFacetOnMemberFromProperties.java | 37 +
.../facets/members/disabled/DisabledFacet.java | 54 +
.../members/disabled/DisabledFacetAbstract.java | 102 ++
.../DisabledFacetAbstractAlwaysEverywhere.java | 40 +
.../disabled/DisabledFacetAbstractImpl.java | 83 ++
.../disabled/DisabledFacetForContributee.java | 30 +
.../disabled/method/DisableForContextFacet.java | 37 +
.../method/DisableForContextFacetAbstract.java | 37 +
.../method/DisableForContextFacetNone.java | 49 +
.../method/DisableForContextFacetViaMethod.java | 100 ++
.../DisableForContextFacetViaMethodFactory.java | 94 ++
.../facets/members/hidden/HiddenFacetAbstract.java | 86 ++
.../HiddenFacetAbstractAlwaysEverywhere.java | 50 +
.../members/hidden/HiddenFacetAbstractImpl.java | 52 +
.../HiddenFacetFromLayoutPropertiesAbstract.java | 53 +
.../members/hidden/method/HideForContextFacet.java | 37 +
.../hidden/method/HideForContextFacetAbstract.java | 37 +
.../hidden/method/HideForContextFacetNone.java | 45 +
.../method/HideForContextFacetViaMethod.java | 78 ++
.../HideForContextFacetViaMethodFactory.java | 82 ++
.../facets/members/order/MemberOrderFacet.java | 59 ++
.../members/order/MemberOrderFacetAbstract.java | 107 ++
.../annotprop/MemberOrderFacetAnnotation.java | 35 +
.../order/annotprop/MemberOrderFacetFactory.java | 69 ++
.../MemberOrderFacetForActionAnnotation.java | 34 +
.../annotprop/MemberOrderFacetProperties.java | 49 +
.../order/annotprop/MemberOrderFacetXml.java | 35 +
.../ViewModelSemanticCheckingFacetFactory.java | 209 ++++
.../facets/object/audit/AuditableFacet.java | 40 +
.../object/audit/AuditableFacetAbstract.java | 61 ++
.../facets/object/audit/AuditableFacetImpl.java | 30 +
.../object/autocomplete/AutoCompleteFacet.java | 35 +
.../autocomplete/AutoCompleteFacetAbstract.java | 126 +++
.../object/bookmarkpolicy/BookmarkPolicyFacet.java | 31 +
.../BookmarkPolicyFacetAbstract.java | 59 ++
.../BookmarkPolicyFacetFallback.java | 32 +
.../BookmarkPolicyFacetFallbackFactory.java | 88 ++
.../facets/object/callbacks/CallbackFacet.java | 53 +
.../object/callbacks/CallbackFacetAbstract.java | 35 +
.../object/callbacks/CreatedCallbackFacet.java | 36 +
.../callbacks/CreatedCallbackFacetAbstract.java | 35 +
.../callbacks/CreatedCallbackFacetFactory.java | 51 +
.../callbacks/CreatedCallbackFacetViaMethod.java | 70 ++
.../callbacks/CreatedLifecycleEventFacet.java | 30 +
...fecycleEventFacetForDomainObjectAnnotation.java | 46 +
.../object/callbacks/LifecycleEventFacet.java | 28 +
.../object/callbacks/LoadCallbackFacetFactory.java | 63 ++
.../object/callbacks/LoadedCallbackFacet.java | 37 +
.../callbacks/LoadedCallbackFacetAbstract.java | 35 +
.../callbacks/LoadedCallbackFacetViaMethod.java | 71 ++
.../callbacks/LoadedLifecycleEventFacet.java | 30 +
...fecycleEventFacetForDomainObjectAnnotation.java | 44 +
.../object/callbacks/LoadingCallbackFacet.java | 28 +
.../callbacks/LoadingCallbackFacetAbstract.java | 39 +
.../callbacks/LoadingCallbackFacetViaMethod.java | 75 ++
.../callbacks/PersistCallbackFacetFactory.java | 78 ++
.../PersistCallbackViaSaveMethodFacetFactory.java | 78 ++
.../object/callbacks/PersistedCallbackFacet.java | 36 +
.../callbacks/PersistedCallbackFacetAbstract.java | 35 +
.../callbacks/PersistedCallbackFacetViaMethod.java | 71 ++
.../callbacks/PersistedLifecycleEventFacet.java | 30 +
...fecycleEventFacetForDomainObjectAnnotation.java | 44 +
.../object/callbacks/PersistingCallbackFacet.java | 37 +
.../callbacks/PersistingCallbackFacetAbstract.java | 35 +
.../PersistingCallbackFacetViaMethod.java | 71 ++
.../callbacks/PersistingLifecycleEventFacet.java | 30 +
...fecycleEventFacetForDomainObjectAnnotation.java | 45 +
.../callbacks/RemoveCallbackFacetFactory.java | 79 ++
.../RemoveCallbackViaDeleteMethodFacetFactory.java | 79 ++
.../object/callbacks/RemovedCallbackFacet.java | 35 +
.../callbacks/RemovedCallbackFacetAbstract.java | 39 +
.../callbacks/RemovedCallbackFacetViaMethod.java | 75 ++
.../object/callbacks/RemovingCallbackFacet.java | 34 +
.../callbacks/RemovingCallbackFacetAbstract.java | 35 +
.../callbacks/RemovingCallbackFacetViaMethod.java | 71 ++
.../callbacks/RemovingLifecycleEventFacet.java | 30 +
...fecycleEventFacetForDomainObjectAnnotation.java | 45 +
.../callbacks/UpdateCallbackFacetFactory.java | 68 ++
.../object/callbacks/UpdatedCallbackFacet.java | 37 +
.../callbacks/UpdatedCallbackFacetAbstract.java | 35 +
.../callbacks/UpdatedCallbackFacetViaMethod.java | 71 ++
.../callbacks/UpdatedLifecycleEventFacet.java | 30 +
...fecycleEventFacetForDomainObjectAnnotation.java | 45 +
.../object/callbacks/UpdatingCallbackFacet.java | 37 +
.../callbacks/UpdatingCallbackFacetAbstract.java | 35 +
.../callbacks/UpdatingCallbackFacetViaMethod.java | 71 ++
.../callbacks/UpdatingLifecycleEventFacet.java | 30 +
...fecycleEventFacetForDomainObjectAnnotation.java | 45 +
.../choices/ChoicesFacetFromBoundedAbstract.java | 119 +++
.../facets/object/choices/ChoicesFacetUtils.java | 42 +
.../facets/object/choices/QueryFindAllChoices.java | 57 +
.../object/choices/enums/ChoicesFacetEnum.java | 49 +
.../facets/object/choices/enums/EnumFacet.java | 26 +
...ingValueFacetUsingSemanticsProviderFactory.java | 49 +
.../choices/enums/EnumValueSemanticsProvider.java | 152 +++
.../cssclass/method/CssClassFacetMethod.java | 61 ++
.../method/CssClassFacetMethodFactory.java | 52 +
...ssClassFaFacetForDomainObjectLayoutFactory.java | 43 +
.../CssClassFaFacetForViewModelLayoutFactory.java | 45 +
.../facets/object/defaults/DefaultedFacet.java | 47 +
.../object/defaults/DefaultedFacetAbstract.java | 84 ++
.../DefaultedFacetUsingDefaultsProvider.java | 47 +
.../object/defaults/DefaultsProviderUtil.java | 75 ++
.../annotcfg/DefaultedFacetAnnotation.java | 62 ++
...tedFacetAnnotationElseConfigurationFactory.java | 71 ++
.../annotcfg/DefaultedFacetFromConfiguration.java | 31 +
.../object/disabled/DisabledObjectFacet.java | 54 +
.../disabled/DisabledObjectFacetAbstract.java | 52 +
.../method/DisabledObjectFacetViaMethod.java | 93 ++
.../DisabledObjectFacetViaMethodFactory.java | 88 ++
.../DomainObjectAnnotationFacetFactory.java | 570 ++++++++++
.../AuditableFacetForDomainObjectAnnotation.java | 74 ++
...FacetForDomainObjectAnnotationAsConfigured.java | 31 +
.../auditing/AuditableFacetFromConfiguration.java | 36 +
...AutoCompleteFacetForDomainObjectAnnotation.java | 46 +
.../ChoicesFacetForDomainObjectAnnotation.java | 49 +
...EventDefaultFacetForDomainObjectAnnotation.java | 52 +
...EventDefaultFacetForDomainObjectAnnotation.java | 51 +
...EventDefaultFacetForDomainObjectAnnotation.java | 51 +
.../ImmutableFacetForDomainObjectAnnotation.java | 101 ++
...FacetForDomainObjectAnnotationAsConfigured.java | 30 +
.../editing/ImmutableFacetFromConfiguration.java | 58 +
...ObjectSpecIdFacetForDomainObjectAnnotation.java | 47 +
...lishedObjectFacetForDomainObjectAnnotation.java | 67 ++
...FacetForDomainObjectAnnotationAsConfigured.java | 30 +
.../PublishedObjectFacetFromConfiguration.java | 31 +
...atableObjectFacetForDomainObjectAnnotation.java | 73 ++
...PolicyFacetForDomainObjectLayoutAnnotation.java | 46 +
.../BookmarkPolicyFacetForDomainObjectXml.java | 42 +
...arkPolicyFacetForViewModelLayoutAnnotation.java | 47 +
...lassFaFacetForDomainObjectLayoutAnnotation.java | 55 +
.../CssClassFaFacetForDomainObjectXml.java | 44 +
...ssClassFaFacetForViewModelLayoutAnnotation.java | 54 +
...sClassFacetForDomainObjectLayoutAnnotation.java | 57 +
.../CssClassFacetForDomainObjectXml.java | 42 +
.../CssClassFacetForViewModelLayoutAnnotation.java | 45 +
...ObjectLayoutAnnotationUsingCssClassUiEvent.java | 121 +++
...wModelLayoutAnnotationUsingCssClassUiEvent.java | 118 +++
...ibedAsFacetForDomainObjectLayoutAnnotation.java | 46 +
.../DescribedAsFacetForDomainObjectXml.java | 42 +
...scribedAsFacetForViewModelLayoutAnnotation.java | 47 +
.../DomainObjectLayoutFacetFactory.java | 113 ++
...mainObjectLayoutAnnotationUsingIconUiEvent.java | 117 ++
...aViewModelLayoutAnnotationUsingIconUiEvent.java | 118 +++
...inObjectLayoutAnnotationUsingLayoutUiEvent.java | 118 +++
...iewModelLayoutAnnotationUsingLayoutUiEvent.java | 117 ++
.../NamedFacetForDomainObjectLayoutAnnotation.java | 47 +
.../NamedFacetForDomainObjectXml.java | 44 +
.../NamedFacetForViewModelLayoutAnnotation.java | 45 +
.../PagedFacetForDomainObjectLayoutAnnotation.java | 46 +
.../PagedFacetForViewModelLayoutAnnotation.java | 46 +
...PluralFacetForDomainObjectLayoutAnnotation.java | 47 +
.../PluralFacetForDomainObjectXml.java | 40 +
.../PluralFacetForViewModelLayoutAnnotation.java | 47 +
...ainObjectLayoutAnnotationUsingTitleUiEvent.java | 135 +++
...ViewModelLayoutAnnotationUsingTitleUiEvent.java | 135 +++
.../object/domainservice/DomainServiceFacet.java | 54 +
.../domainservice/DomainServiceFacetAbstract.java | 65 ++
.../annotation/DomainServiceFacetAnnotation.java | 35 +
.../DomainServiceFacetAnnotationFactory.java | 153 +++
...conFacetDerivedFromDomainServiceAnnotation.java | 47 +
.../DomainServiceLayoutFacet.java | 36 +
.../DomainServiceLayoutFacetAbstract.java | 54 +
.../DomainServiceLayoutFacetFactory.java | 70 ++
...NamedFacetForDomainServiceLayoutAnnotation.java | 36 +
.../DomainServiceLayoutFacetAnnotation.java | 34 +
.../facets/object/encodeable/EncodableFacet.java | 42 +
.../object/encodeable/EncodableFacetAbstract.java | 85 ++
.../object/encodeable/EncoderDecoderUtil.java | 36 +
.../annotcfg/EncodableFacetFromConfiguration.java | 33 +
.../encoder/EncodableFacetUsingEncoderDecoder.java | 75 ++
.../facets/object/entity/EntityFacet.java | 54 +
.../facets/object/facets/FacetsFacet.java | 48 +
.../facets/object/facets/FacetsFacetAbstract.java | 94 ++
.../facets/annotation/FacetsFacetAnnotation.java | 32 +
.../annotation/FacetsFacetAnnotationFactory.java | 54 +
.../metamodel/facets/object/grid/GridFacet.java | 41 +
.../facets/object/grid/GridFacetDefault.java | 84 ++
.../facets/object/grid/GridFacetFactory.java | 46 +
.../facets/object/hidden/HiddenObjectFacet.java | 56 +
.../object/hidden/HiddenObjectFacetAbstract.java | 50 +
.../hidden/method/HiddenObjectFacetViaMethod.java | 65 ++
.../method/HiddenObjectFacetViaMethodFactory.java | 91 ++
.../metamodel/facets/object/icon/IconFacet.java | 44 +
.../facets/object/icon/IconFacetAbstract.java | 36 +
.../facets/object/icon/method/IconFacetMethod.java | 52 +
.../object/icon/method/IconFacetMethodFactory.java | 53 +
.../RemoveAnnotatedMethodsFacetFactory.java | 99 ++
...oveDatanucleusPersistableTypesFacetFactory.java | 67 ++
.../RemoveDnPrefixedMethodsFacetFactory.java | 46 +
.../javalang/IteratorFilteringFacetFactory.java | 55 +
.../ignore/javalang/RemoveMethodsFacetFactory.java | 132 +++
.../jdo/RemoveJdoEnhancementTypesFacetFactory.java | 66 ++
.../jdo/RemoveJdoPrefixedMethodsFacetFactory.java | 48 +
.../facets/object/immutable/ImmutableFacet.java | 69 ++
.../object/immutable/ImmutableFacetAbstract.java | 61 ++
.../CopyImmutableFacetOntoMembersFactory.java | 45 +
.../facets/object/layout/LayoutFacet.java | 37 +
.../facets/object/layout/LayoutFacetAbstract.java | 41 +
.../facets/object/layout/LayoutFacetFactory.java | 56 +
.../facets/object/layout/LayoutFacetFallback.java | 44 +
.../facets/object/layout/LayoutFacetMethod.java | 54 +
.../mixin/MetaModelValidatorForMixinTypes.java | 55 +
.../metamodel/facets/object/mixin/MixinFacet.java | 74 ++
.../facets/object/mixin/MixinFacetAbstract.java | 143 +++
.../mixin/MixinFacetForDomainObjectAnnotation.java | 72 ++
.../object/mixin/MixinFacetForMixinAnnotation.java | 64 ++
.../mixin/MixinFacetForMixinAnnotationFactory.java | 64 ++
.../object/navparent/NavigableParentFacet.java | 43 +
.../navparent/NavigableParentFacetAbstract.java | 36 +
.../NavigableParentAnnotationFacetFactory.java | 161 +++
.../method/NavigableParentFacetMethod.java | 60 ++
.../object/objectspecid/ObjectSpecIdFacet.java | 33 +
.../objectspecid/ObjectSpecIdFacetAbstract.java | 66 ++
.../ObjectSpecIdFacetDerivedFromClassName.java | 35 +
...jectSpecIdFacetDerivedFromClassNameFactory.java | 205 ++++
...ectSpecIdFacetDerivedFromIoCNamingStrategy.java | 34 +
.../ObjectSpecIdFacetOnStandaloneList.java | 31 +
.../ObjectValidPropertiesFacet.java | 42 +
.../ObjectValidPropertiesFacetAbstract.java | 48 +
.../impl/ObjectValidPropertiesFacetImpl.java | 70 ++
.../ObjectValidPropertiesFacetImplFactory.java | 35 +
.../metamodel/facets/object/paged/PagedFacet.java | 31 +
.../facets/object/paged/PagedFacetAbstract.java | 50 +
.../PagedFacetForPagedAnnotationOnType.java | 34 +
.../object/parented/ParentedCollectionFacet.java | 40 +
.../parented/ParentedCollectionFacetAbstract.java | 36 +
.../object/parseable/InvalidEntryException.java | 42 +
.../facets/object/parseable/ParseableFacet.java | 55 +
.../object/parseable/ParseableFacetAbstract.java | 90 ++
.../facets/object/parseable/ParserUtil.java | 46 +
.../object/parseable/TextEntryParseException.java | 47 +
.../annotcfg/ParseableFacetFromConfiguration.java | 33 +
.../parser/ParseableFacetUsingParser.java | 132 +++
.../facets/object/plural/PluralFacet.java | 41 +
.../facets/object/plural/PluralFacetAbstract.java | 42 +
.../plural/inferred/PluralFacetInferred.java | 31 +
.../facets/object/projection/ProjectionFacet.java | 29 +
.../object/projection/ProjectionFacetAbstract.java | 42 +
.../ProjectionFacetFromProjectingProperty.java | 65 ++
.../CssClassFacetDerivedFromProjectionFacet.java | 54 +
.../ident/IconFacetDerivedFromProjectionFacet.java | 52 +
.../TitleFacetDerivedFromProjectionFacet.java | 52 +
.../object/promptStyle/PromptStyleFacet.java | 33 +
.../promptStyle/PromptStyleFacetAbstract.java | 42 +
.../promptStyle/PromptStyleFacetAsConfigured.java | 45 +
.../PromptStyleFacetFallBackToInline.java | 37 +
.../publishedobject/PublishedObjectFacet.java | 30 +
.../PublishedObjectFacetAbstract.java | 38 +
...etOnCollectionDerivedFromRecreatableObject.java | 46 +
...CollectionDerivedFromViewModelFacetFactory.java | 54 +
...acetOnPropertyDerivedFromRecreatableObject.java | 48 +
...tyDerivedFromRecreatableObjectFacetFactory.java | 52 +
.../RecreatableObjectFacetAbstract.java | 129 +++
...ObjectFacetDeclarativeInitializingAbstract.java | 145 +++
.../recreatable/RecreatableObjectFacetFactory.java | 131 +++
...ctFacetForRecreatableDomainObjectInterface.java | 46 +
...eObjectFacetForRecreatableObjectAnnotation.java | 34 +
...leObjectFacetForRecreatableObjectInterface.java | 45 +
...creatableObjectFacetForViewModelAnnotation.java | 35 +
...ableObjectFacetForXmlRootElementAnnotation.java | 81 ++
.../metamodel/facets/object/recreatable/Util.java | 33 +
.../metamodel/facets/object/title/TitleFacet.java | 55 +
.../facets/object/title/TitleFacetAbstract.java | 45 +
.../annotation/TitleAnnotationFacetFactory.java | 188 ++++
.../annotation/TitleFacetViaTitleAnnotation.java | 169 +++
.../title/methods/TitleFacetViaMethodsFactory.java | 95 ++
.../title/methods/TitleFacetViaTitleMethod.java | 93 ++
.../title/methods/TitleFacetViaToStringMethod.java | 70 ++
.../object/title/parser/TitleFacetUsingParser.java | 79 ++
.../validateobject/ValidateObjectFacet.java | 55 +
.../ValidateObjectFacetAbstract.java | 49 +
.../method/ValidateObjectFacetMethod.java | 80 ++
.../method/ValidateObjectFacetMethodFactory.java | 60 ++
.../facets/object/value/EqualByContentFacet.java | 33 +
.../object/value/EqualByContentFacetAbstract.java | 36 +
.../EqualByContentFacetViaValueSemantics.java | 30 +
.../value/ImmutableFacetViaValueSemantics.java | 39 +
.../object/value/MaxLengthFacetUsingParser.java | 58 +
.../value/TypicalLengthFacetUsingParser.java | 53 +
.../metamodel/facets/object/value/ValueFacet.java | 35 +
.../facets/object/value/ValueFacetAbstract.java | 155 +++
.../facets/object/value/ValueFacetSimple.java | 37 +
.../value/annotcfg/ValueFacetAnnotation.java | 81 ++
...ValueFacetAnnotationOrConfigurationFactory.java | 113 ++
.../annotcfg/ValueFacetFromConfiguration.java | 38 +
.../vsp/ValueFacetUsingSemanticsProvider.java | 41 +
.../ValueFacetUsingSemanticsProviderFactory.java | 46 +
.../ValueSemanticsProviderAndFacetAbstract.java | 328 ++++++
.../value/vsp/ValueSemanticsProviderUtil.java | 67 ++
.../facets/object/viewmodel/ViewModelFacet.java | 125 +++
.../facets/object/wizard/WizardFacet.java | 41 +
.../facets/object/wizard/WizardFacetAbstract.java | 36 +
.../facets/objectvalue/choices/ChoicesFacet.java | 49 +
.../objectvalue/choices/ChoicesFacetAbstract.java | 36 +
.../objectvalue/fileaccept/FileAcceptFacet.java | 35 +
.../fileaccept/FileAcceptFacetAbstract.java | 37 +
.../facets/objectvalue/labelat/LabelAtFacet.java | 36 +
.../objectvalue/labelat/LabelAtFacetAbstract.java | 56 +
.../LabelAtFacetInferredFromMultiLineFacet.java | 38 +
.../objectvalue/mandatory/MandatoryFacet.java | 57 +
.../mandatory/MandatoryFacetAbstract.java | 110 ++
.../mandatory/MandatoryFacetDefault.java | 43 +
.../facets/objectvalue/maxlen/MaxLengthFacet.java | 41 +
.../objectvalue/maxlen/MaxLengthFacetAbstract.java | 75 ++
.../objectvalue/multiline/MultiLineFacet.java | 51 +
.../multiline/MultiLineFacetAbstract.java | 63 ++
.../MustSatisfySpecificationFacet.java | 27 +
.../MustSatisfySpecificationFacetAbstract.java | 124 +++
.../mustsatisfyspec/SpecificationEvaluator.java | 80 ++
.../facets/objectvalue/regex/RegExFacet.java | 38 +
.../objectvalue/regex/RegExFacetAbstract.java | 104 ++
.../renderedadjusted/RenderedAdjustedFacet.java | 39 +
.../RenderedAdjustedFacetAbstract.java | 56 +
.../objectvalue/typicallen/TypicalLengthFacet.java | 40 +
.../typicallen/TypicalLengthFacetAbstract.java | 45 +
.../ActionParameterAutoCompleteFacet.java | 47 +
.../ActionParameterAutoCompleteFacetAbstract.java | 41 +
.../facets/param/autocomplete/MinLengthUtil.java | 56 +
.../ActionParameterAutoCompleteFacetViaMethod.java | 121 +++
...ParameterAutoCompleteFacetViaMethodFactory.java | 88 ++
...ameterFromJavaxValidationAnnotationFactory.java | 56 +
...rameterFromJavaxValidationDigitsAnnotation.java | 59 ++
.../facets/param/choices/ActionChoicesFacet.java | 38 +
.../param/choices/ActionChoicesFacetAbstract.java | 36 +
.../param/choices/ActionParameterChoicesFacet.java | 42 +
.../ActionParameterChoicesFacetAbstract.java | 38 +
.../choices/ActionParameterChoicesFacetNone.java | 48 +
...rameterChoicesFacetDerivedFromChoicesFacet.java | 55 +
...ChoicesFacetDerivedFromChoicesFacetFactory.java | 55 +
.../method/ActionChoicesFacetViaMethod.java | 121 +++
.../method/ActionChoicesFacetViaMethodFactory.java | 100 ++
.../ActionParameterChoicesFacetViaMethod.java | 108 ++
...ctionParameterChoicesFacetViaMethodFactory.java | 99 ++
.../defaults/ActionParameterDefaultsFacet.java | 41 +
.../ActionParameterDefaultsFacetAbstract.java | 36 +
...ParameterDefaultFacetDerivedFromTypeFacets.java | 60 ++
...arameterDefaultFacetDerivedFromTypeFactory.java | 64 ++
.../ActionParameterDefaultsFacetViaMethod.java | 117 ++
...tionParameterDefaultsFacetViaMethodFactory.java | 134 +++
...ameterAnnotationElseDerivedFromTypeFactory.java | 55 +
...DescribedAsFacetOnParameterDerivedFromType.java | 32 +
.../disable/ActionParameterDisabledFacet.java | 41 +
.../ActionParameterDisabledFacetAbstract.java | 49 +
.../ActionParameterDisabledFacetViaMethod.java | 95 ++
...tionParameterDisabledFacetViaMethodFactory.java | 94 ++
.../param/hide/ActionParameterHiddenFacet.java | 42 +
.../hide/ActionParameterHiddenFacetAbstract.java | 55 +
.../ActionParameterHiddenFacetViaMethod.java | 82 ++
...ActionParameterHiddenFacetViaMethodFactory.java | 91 ++
.../CssClassFacetForParameterLayoutAnnotation.java | 46 +
...scribedAsFacetForParameterLayoutAnnotation.java | 46 +
.../LabelAtFacetForParameterLayoutAnnotation.java | 47 +
...MultiLineFacetForParameterLayoutAnnotation.java | 45 +
.../NamedFacetForParameterLayoutAnnotation.java | 51 +
.../param/layout/ParameterLayoutFacetFactory.java | 58 +
...dAdjustedFacetForParameterLayoutAnnotation.java | 58 +
...calLengthFacetForParameterLayoutAnnotation.java | 60 ++
.../MandatoryFacetOnParametersDefaultFactory.java | 56 +
.../NamedFacetForParameterUsingReflection.java | 34 +
.../ParameterNameFacetFactoryUsingReflection.java | 74 ++
.../parameter/ParameterAnnotationFacetFactory.java | 134 +++
.../FileAcceptFacetForParameterAnnotation.java | 47 +
.../MandatoryFacetForParameterAnnotation.java | 81 ++
...cetInvertedByNullableAnnotationOnParameter.java | 59 ++
.../MaxLengthFacetForParameterAnnotation.java | 46 +
...fySpecificationFacetForParameterAnnotation.java | 69 ++
.../regex/RegExFacetForParameterAnnotation.java | 72 ++
.../RegExFacetForPatternAnnotationOnParameter.java | 66 ++
.../TypicalLengthFacetOnParameterAnnotation.java | 50 +
...picalLengthFacetOnParameterDerivedFromType.java | 49 +
...acetOnParameterDerivedFromTypeFacetFactory.java | 56 +
.../validate/ActionParameterValidationFacet.java | 46 +
.../ActionParameterValidationFacetAbstract.java | 47 +
.../ActionParameterValidationFacetViaMethod.java | 84 ++
...onParameterValidationFacetViaMethodFactory.java | 83 ++
.../PropertyOrCollectionAccessorFacet.java | 53 +
.../PropertyOrCollectionAccessorFacetAbstract.java | 57 +
.../propcoll/notpersisted/NotPersistedFacet.java | 38 +
.../notpersisted/NotPersistedFacetAbstract.java | 36 +
.../accessor/PropertyAccessorFacetViaAccessor.java | 96 ++
.../PropertyAccessorFacetViaAccessorFactory.java | 113 ++
.../autocomplete/PropertyAutoCompleteFacet.java | 51 +
.../PropertyAutoCompleteFacetAbstract.java | 39 +
.../method/PropertyAutoCompleteFacetMethod.java | 114 ++
.../PropertyAutoCompleteFacetMethodFactory.java | 79 ++
...ropertyFromJavaxValidationDigitsAnnotation.java | 60 ++
...FromJavaxValidationDigitsAnnotationFactory.java | 59 ++
.../properties/businesskey/BusinessKeyFacet.java | 36 +
.../businesskey/BusinessKeyFacetAbstract.java | 36 +
.../properties/choices/PropertyChoicesFacet.java | 50 +
.../choices/PropertyChoicesFacetAbstract.java | 36 +
...ropertyChoicesFacetDerivedFromChoicesFacet.java | 52 +
...ChoicesFacetDerivedFromChoicesFacetFactory.java | 45 +
.../method/PropertyChoicesFacetViaMethod.java | 93 ++
.../PropertyChoicesFacetViaMethodFactory.java | 77 ++
.../properties/defaults/PropertyDefaultFacet.java | 46 +
.../defaults/PropertyDefaultFacetAbstract.java | 36 +
.../defaults/PropertyDefaultFacetNone.java | 44 +
...pertyDefaultFacetDerivedFromDefaultedFacet.java | 57 +
...PropertyDefaultFacetDerivedFromTypeFactory.java | 64 ++
.../method/PropertyDefaultFacetViaMethod.java | 88 ++
.../PropertyDefaultFacetViaMethodFactory.java | 77 ++
...isabledFacetOnPropertyDerivedFromImmutable.java | 38 +
...FacetOnPropertyDerivedFromImmutableFactory.java | 52 +
.../inferred/DisabledFacetOnPropertyInferred.java | 32 +
.../DisabledFacetOnPropertyInferredFactory.java | 56 +
.../MandatoryFacetOnProperyDefaultFactory.java | 57 +
.../MultiLineFacetOnPropertyAnnotation.java | 35 +
.../properties/projection/ProjectingFacet.java | 30 +
.../projection/ProjectingFacetAbstract.java | 41 +
.../ProjectingFacetFromPropertyAnnotation.java | 70 ++
.../property/PropertyAnnotationFacetFactory.java | 377 +++++++
.../command/CommandFacetForPropertyAnnotation.java | 99 ++
...mandFacetForPropertyAnnotationAsConfigured.java | 37 +
.../DisabledFacetForPropertyAnnotation.java | 65 ++
...acetForPropertyAnnotationInvertedSemantics.java | 32 +
.../FileAcceptFacetForPropertyAnnotation.java | 47 +
.../hidden/HiddenFacetForPropertyAnnotation.java | 56 +
.../MandatoryFacetForPropertyAnnotation.java | 90 ++
...acetInvertedByNullableAnnotationOnProperty.java | 61 ++
.../MaxLengthFacetForPropertyAnnotation.java | 46 +
...ropertyClearFacetForDomainEventFromDefault.java | 41 +
...rFacetForDomainEventFromPropertyAnnotation.java | 41 +
.../property/modify/PropertyDomainEventFacet.java | 33 +
.../modify/PropertyDomainEventFacetAbstract.java | 167 +++
.../modify/PropertyDomainEventFacetDefault.java | 40 +
...pertyDomainEventFacetForPropertyAnnotation.java | 40 +
...opertySetterFacetForDomainEventFromDefault.java | 42 +
...rFacetForDomainEventFromPropertyAnnotation.java | 41 +
...tySetterOrClearFacetForDomainEventAbstract.java | 340 ++++++
.../facets/properties/property/modify/Utils.java | 23 +
...sfySpecificationFacetForPropertyAnnotation.java | 66 ++
.../NotPersistedFacetForPropertyAnnotation.java | 46 +
...ublishedPropertyFacetForPropertyAnnotation.java | 79 ++
...ertyFacetForPropertyAnnotationAsConfigured.java | 27 +
.../PublishedPropertyFacetFromConfiguration.java | 31 +
.../RegExFacetForPatternAnnotationOnProperty.java | 76 ++
.../regex/RegExFacetForPropertyAnnotation.java | 70 ++
.../CssClassFacetForPropertyLayoutAnnotation.java | 47 +
.../CssClassFacetForPropertyXml.java | 42 +
...escribedAsFacetForPropertyLayoutAnnotation.java | 47 +
.../DescribedAsFacetForPropertyXml.java | 42 +
.../HiddenFacetForPropertyLayoutAnnotation.java | 56 +
.../propertylayout/HiddenFacetForPropertyXml.java | 51 +
.../LabelAtFacetForPropertyLayoutAnnotation.java | 47 +
.../propertylayout/LabelAtFacetForPropertyXml.java | 42 +
.../MultiLineFacetForPropertyLayoutAnnotation.java | 46 +
.../MultiLineFacetForPropertyXml.java | 41 +
.../NamedFacetForPropertyLayoutAnnotation.java | 51 +
.../propertylayout/NamedFacetForPropertyXml.java | 47 +
...romptStyleFacetForPropertyLayoutAnnotation.java | 96 ++
.../PromptStyleFacetForPropertyXml.java | 57 +
.../propertylayout/PropertyLayoutFacetFactory.java | 194 ++++
...edAdjustedFacetForPropertyLayoutAnnotation.java | 58 +
.../RenderedAdjustedFacetForPropertyXml.java | 45 +
...icalLengthFacetForPropertyLayoutAnnotation.java | 61 ++
.../TypicalLengthFacetForPropertyXml.java | 57 +
...UnchangingFacetForPropertyLayoutAnnotation.java | 59 ++
.../UnchangingFacetForPropertyXml.java | 42 +
.../properties/publish/PublishedPropertyFacet.java | 29 +
.../publish/PublishedPropertyFacetAbstract.java | 38 +
...nderedAsDayBeforeFacetAnnotationOnProperty.java | 38 +
.../renderunchanged/UnchangingFacet.java | 30 +
.../renderunchanged/UnchangingFacetAbstract.java | 36 +
.../properties/searchable/SearchableFacet.java | 49 +
.../searchable/SearchableFacetAbstract.java | 51 +
.../TypicalLengthFacetOnPropertyAnnotation.java | 50 +
...ypicalLengthFacetOnPropertyDerivedFromType.java | 49 +
...FacetOnPropertyDerivedFromTypeFacetFactory.java | 55 +
.../update/NotPersistableFacetInferred.java | 31 +
.../update/PropertyModifyFacetFactory.java | 68 ++
.../update/PropertySetAndClearFacetFactory.java | 122 +++
.../update/clear/PropertyClearFacet.java | 43 +
.../update/clear/PropertyClearFacetAbstract.java | 35 +
.../clear/PropertyClearFacetViaClearMethod.java | 74 ++
.../clear/PropertyClearFacetViaSetterMethod.java | 75 ++
.../update/init/PropertyInitializationFacet.java | 50 +
.../init/PropertyInitializationFacetAbstract.java | 35 +
...PropertyInitializationFacetViaSetterMethod.java | 70 ++
.../update/modify/PropertySetterFacet.java | 51 +
.../update/modify/PropertySetterFacetAbstract.java | 35 +
.../modify/PropertySetterFacetViaModifyMethod.java | 81 ++
.../modify/PropertySetterFacetViaSetterMethod.java | 76 ++
.../validating/PropertyValidateFacet.java | 50 +
.../validating/PropertyValidateFacetAbstract.java | 57 +
.../validating/PropertyValidateFacetNone.java | 47 +
.../dflt/PropertyValidateFacetDefault.java | 49 +
.../dflt/PropertyValidateFacetDefaultFactory.java | 58 +
.../method/PropertyValidateFacetViaMethod.java | 83 ++
.../PropertyValidateFacetViaMethodFactory.java | 76 ++
.../DateAndTimeValueSemanticsProviderAbstract.java | 116 ++
.../core/metamodel/facets/value/JodaFunctions.java | 43 +
.../ValueSemanticsProviderAbstractTemporal.java | 373 +++++++
.../value/bigdecimal/BigDecimalValueFacet.java | 60 ++
.../bigdecimal/BigDecimalValueFacetAbstract.java | 37 +
...malValueFacetUsingSemanticsProviderFactory.java | 44 +
.../BigDecimalValueSemanticsProvider.java | 143 +++
.../value/biginteger/BigIntegerValueFacet.java | 26 +
...gerValueFacetUsingSemanticsProviderFactory.java | 43 +
.../BigIntegerValueSemanticsProvider.java | 110 ++
.../facets/value/blobs/BlobValueFacet.java | 26 +
...lobValueFacetUsingSemanticsProviderFactory.java | 41 +
.../value/blobs/BlobValueSemanticsProvider.java | 123 +++
...iveValueFacetUsingSemanticsProviderFactory.java | 42 +
.../BooleanPrimitiveValueSemanticsProvider.java | 55 +
.../facets/value/booleans/BooleanValueFacet.java | 29 +
.../BooleanValueSemanticsProviderAbstract.java | 129 +++
...perValueFacetUsingSemanticsProviderFactory.java | 42 +
.../BooleanWrapperValueSemanticsProvider.java | 69 ++
...iveValueFacetUsingSemanticsProviderFactory.java | 42 +
.../bytes/BytePrimitiveValueSemanticsProvider.java | 52 +
.../facets/value/bytes/ByteValueFacet.java | 30 +
.../bytes/ByteValueSemanticsProviderAbstract.java | 116 ++
...perValueFacetUsingSemanticsProviderFactory.java | 42 +
.../bytes/ByteWrapperValueSemanticsProvider.java | 41 +
...iveValueFacetUsingSemanticsProviderFactory.java | 42 +
.../chars/CharPrimitiveValueSemanticsProvider.java | 54 +
.../facets/value/chars/CharValueFacet.java | 30 +
.../chars/CharValueSemanticsProviderAbstract.java | 103 ++
...perValueFacetUsingSemanticsProviderFactory.java | 42 +
.../chars/CharWrapperValueSemanticsProvider.java | 41 +
.../facets/value/clobs/ClobValueFacet.java | 26 +
...lobValueFacetUsingSemanticsProviderFactory.java | 42 +
.../value/clobs/ClobValueSemanticsProvider.java | 117 ++
.../facets/value/date/DateValueFacet.java | 33 +
.../date/DateValueSemanticsProviderAbstract.java | 121 +++
.../value/datejdk8local/Jdk8LocalDateUtil.java | 170 +++
.../datejdk8local/Jdk8LocalDateValueFacet.java | 33 +
...ateValueFacetUsingSemanticsProviderFactory.java | 45 +
.../Jdk8LocalDateValueSemanticsProvider.java | 252 +++++
.../facets/value/datejdk8local/TimeFormatter.java | 27 +
.../facets/value/datejdk8local/TimeParser.java | 27 +
.../value/datejodalocal/JodaLocalDateUtil.java | 130 +++
.../datejodalocal/JodaLocalDateValueFacet.java | 33 +
...ateValueFacetUsingSemanticsProviderFactory.java | 45 +
.../JodaLocalDateValueSemanticsProvider.java | 257 +++++
...ateValueFacetUsingSemanticsProviderFactory.java | 45 +
.../datesql/JavaSqlDateValueSemanticsProvider.java | 98 ++
.../datetimejdk8local/Jdk8LocalDateTimeUtil.java | 157 +++
.../Jdk8LocalDateTimeValueFacet.java | 33 +
...imeValueFacetUsingSemanticsProviderFactory.java | 45 +
.../Jdk8LocalDateTimeValueSemanticsProvider.java | 272 +++++
.../value/datetimejdk8local/TimeFormatter.java | 27 +
.../facets/value/datetimejdk8local/TimeParser.java | 27 +
.../Jdk8OffsetDateTimeValueFacet.java | 33 +
...imeValueFacetUsingSemanticsProviderFactory.java | 45 +
.../Jdk8OffsetDateTimeValueSemanticsProvider.java | 103 ++
...fsetDateTimeValueSemanticsProviderAbstract.java | 121 +++
.../value/datetimejoda/JodaDateTimeValueFacet.java | 33 +
...imeValueFacetUsingSemanticsProviderFactory.java | 45 +
.../JodaDateTimeValueSemanticsProvider.java | 103 ++
...JodaDateTimeValueSemanticsProviderAbstract.java | 121 +++
.../datetimejodalocal/JodaLocalDateTimeUtil.java | 127 +++
.../JodaLocalDateTimeValueFacet.java | 33 +
...imeValueFacetUsingSemanticsProviderFactory.java | 45 +
.../JodaLocalDateTimeValueSemanticsProvider.java | 259 +++++
...ateValueFacetUsingSemanticsProviderFactory.java | 46 +
.../JavaUtilDateValueSemanticsProvider.java | 85 ++
.../doubles/DoubleFloatingPointValueFacet.java | 30 +
...iveValueFacetUsingSemanticsProviderFactory.java | 42 +
.../DoublePrimitiveValueSemanticsProvider.java | 54 +
.../DoubleValueSemanticsProviderAbstract.java | 120 +++
...perValueFacetUsingSemanticsProviderFactory.java | 42 +
.../DoubleWrapperValueSemanticsProvider.java | 42 +
...iveValueFacetUsingSemanticsProviderFactory.java | 42 +
.../FloatPrimitiveValueSemanticsProvider.java | 54 +
.../FloatValueSemanticsProviderAbstract.java | 116 ++
...perValueFacetUsingSemanticsProviderFactory.java | 42 +
.../floats/FloatWrapperValueSemanticsProvider.java | 41 +
.../value/floats/FloatingPointValueFacet.java | 30 +
.../facets/value/image/ImageValueFacet.java | 34 +
...ageValueFacetUsingSemanticsProviderFactory.java | 43 +
.../value/image/ImageValueSemanticsProvider.java | 100 ++
.../image/ImageValueSemanticsProviderAbstract.java | 298 ++++++
...ageValueFacetUsingSemanticsProviderFactory.java | 44 +
.../JavaAwtImageValueSemanticsProvider.java | 83 ++
...iveValueFacetUsingSemanticsProviderFactory.java | 42 +
.../IntPrimitiveValueSemanticsProvider.java | 54 +
.../integer/IntValueSemanticsProviderAbstract.java | 114 ++
...perValueFacetUsingSemanticsProviderFactory.java | 42 +
.../integer/IntWrapperValueSemanticsProvider.java | 41 +
.../facets/value/integer/IntegerValueFacet.java | 30 +
.../localrespath/LocalResourcePathValueFacet.java | 32 +
...athValueFacetUsingSemanticsProviderFactory.java | 44 +
.../LocalResourcePathValueSemanticsProvider.java | 130 +++
...iveValueFacetUsingSemanticsProviderFactory.java | 42 +
.../longs/LongPrimitiveValueSemanticsProvider.java | 52 +
.../facets/value/longs/LongValueFacet.java | 30 +
.../longs/LongValueSemanticsProviderAbstract.java | 113 ++
...perValueFacetUsingSemanticsProviderFactory.java | 42 +
.../longs/LongWrapperValueSemanticsProvider.java | 41 +
.../facets/value/markup/MarkupValueFacet.java | 30 +
...kupValueFacetUsingSemanticsProviderFactory.java | 38 +
.../value/markup/MarkupValueSemanticsProvider.java | 114 ++
.../facets/value/password/PasswordValueFacet.java | 33 +
...ordValueFacetUsingSemanticsProviderFactory.java | 43 +
.../password/PasswordValueSemanticsProvider.java | 119 +++
...iveValueFacetUsingSemanticsProviderFactory.java | 42 +
.../ShortPrimitiveValueSemanticsProvider.java | 52 +
.../facets/value/shortint/ShortValueFacet.java | 30 +
.../ShortValueSemanticsProviderAbstract.java | 115 ++
...perValueFacetUsingSemanticsProviderFactory.java | 42 +
.../ShortWrapperValueSemanticsProvider.java | 41 +
.../facets/value/string/StringValueFacet.java | 31 +
...ingValueFacetUsingSemanticsProviderFactory.java | 42 +
.../value/string/StringValueSemanticsProvider.java | 126 +++
.../time/TimeValueSemanticsProviderAbstract.java | 110 ++
.../JodaLocalTimeValueFacetSimpleFactory.java | 46 +
...imeValueFacetUsingSemanticsProviderFactory.java | 46 +
.../timesql/JavaSqlTimeValueSemanticsProvider.java | 95 ++
...ampValueFacetUsingSemanticsProviderFactory.java | 47 +
.../JavaSqlTimeStampValueSemanticsProvider.java | 84 ++
.../TimeStampValueSemanticsProviderAbstract.java | 101 ++
.../facets/value/treenode/TreeNodeValueFacet.java | 27 +
...odeValueFacetUsingSemanticsProviderFactory.java | 40 +
.../treenode/TreeNodeValueSemanticsProvider.java | 136 +++
.../metamodel/facets/value/url/URLValueFacet.java | 31 +
...URLValueFacetUsingSemanticsProviderFactory.java | 44 +
.../value/url/URLValueSemanticsProvider.java | 127 +++
.../facets/value/uuid/UUIDValueFacet.java | 33 +
...UIDValueFacetUsingSemanticsProviderFactory.java | 44 +
.../value/uuid/UUIDValueSemanticsProvider.java | 112 ++
.../core/metamodel/interactions/AccessContext.java | 42 +
.../interactions/ActionArgUsabilityContext.java | 76 ++
.../interactions/ActionArgValidityContext.java | 68 ++
.../interactions/ActionArgVisibilityContext.java | 76 ++
.../interactions/ActionInteractionContext.java | 31 +
.../interactions/ActionUsabilityContext.java | 60 ++
.../interactions/ActionValidityContext.java | 64 ++
.../interactions/ActionVisibilityContext.java | 60 ++
.../interactions/CollectionAccessContext.java | 48 +
.../interactions/CollectionAddToContext.java | 56 +
.../interactions/CollectionRemoveFromContext.java | 58 +
.../interactions/CollectionUsabilityContext.java | 48 +
.../interactions/CollectionVisibilityContext.java | 50 +
.../interactions/DisablingInteractionAdvisor.java | 46 +
.../interactions/HidingInteractionAdvisor.java | 47 +
.../interactions/InteractionAdvisorFacet.java | 45 +
.../metamodel/interactions/InteractionContext.java | 171 +++
.../metamodel/interactions/InteractionUtils.java | 81 ++
.../metamodel/interactions/ObjectTitleContext.java | 56 +
.../interactions/ObjectValidityContext.java | 53 +
.../interactions/ObjectVisibilityContext.java | 55 +
.../metamodel/interactions/ParseValueContext.java | 59 ++
.../interactions/PropertyAccessContext.java | 60 ++
.../interactions/PropertyModifyContext.java | 61 ++
.../interactions/PropertyUsabilityContext.java | 50 +
.../interactions/PropertyVisibilityContext.java | 50 +
.../metamodel/interactions/ProposedHolder.java | 38 +
.../metamodel/interactions/UsabilityContext.java | 55 +
.../interactions/ValidatingInteractionAdvisor.java | 51 +
.../metamodel/interactions/ValidityContext.java | 42 +
.../metamodel/interactions/VisibilityContext.java | 54 +
.../isis/core/metamodel/layout/DeweyOrderSet.java | 404 +++++++
.../MemberIdentifierComparator.java | 44 +
.../memberorderfacet/MemberOrderComparator.java | 90 ++
.../MemberOrderFacetComparator.java | 56 +
.../OrderSetGroupNameComparator.java | 55 +
.../metamodel/objectmanager/ObjectManager.java | 107 ++
.../objectmanager/ObjectManagerDefault.java | 77 ++
.../objectmanager/create/ObjectCreator.java | 82 ++
.../create/ObjectCreator_builtinHandlers.java | 386 +++++++
.../objectmanager/identify/ObjectIdentifier.java | 63 ++
.../identify/ObjectIdentifier_builtinHandlers.java | 139 +++
.../metamodel/objectmanager/load/ObjectLoader.java | 80 ++
.../load/ObjectLoader_builtinHandlers.java | 258 +++++
.../objectmanager/refresh/ObjectRefresher.java | 67 ++
.../refresh/ObjectRefresher_builtinHandlers.java | 107 ++
...arameterChoicesFacetFromParentedCollection.java | 76 ++
...meterDefaultsFacetFromAssociatedCollection.java | 64 ++
.../param/DeriveFacetsPostProcessor.java | 635 +++++++++++
.../ObjectSpecificationPostProcessor.java | 28 +
.../core/metamodel/progmodel/ProgrammingModel.java | 179 ++++
.../progmodel/ProgrammingModelAbstract.java | 253 +++++
.../progmodel/ProgrammingModelInitFilter.java | 80 ++
.../ProgrammingModelInitFilterDefault.java | 85 ++
.../progmodel/ProgrammingModelService.java | 32 +
.../dflt/ProgrammingModelFacetsJava8.java | 388 +++++++
.../core/metamodel/services/CollectionHelper.java | 100 ++
.../metamodel/services/ServiceInjectorDefault.java | 75 ++
.../metamodel/services/ServiceInjectorLegacy.java | 286 +++++
.../isis/core/metamodel/services/ServiceUtil.java | 41 +
.../services/appfeat/ApplicationFeature.java | 324 ++++++
.../appfeat/ApplicationFeatureFactory.java | 45 +
.../services/appfeat/ApplicationFeatureId.java | 492 +++++++++
.../ApplicationFeatureRepositoryDefault.java | 556 ++++++++++
.../services/appfeat/ApplicationFeatureType.java | 102 ++
.../classsubstitutor/ClassSubstitutor.java | 28 +
.../classsubstitutor/ClassSubstitutorAbstract.java | 137 +++
.../classsubstitutor/ClassSubstitutorDefault.java | 76 ++
.../ClassSubstitutorForCollections.java | 64 ++
.../classsubstitutor/ClassSubstitutorRegistry.java | 80 ++
.../command/CommandDtoServiceInternal.java | 71 ++
.../services/container/query/QueryCardinality.java | 31 +
.../metamodel/services/devutils/MemberType.java | 25 +
.../services/events/MetamodelEventService.java | 94 ++
.../events/MetamodelEventSupport_Spring.java | 77 ++
.../exceprecog/ExceptionRecognizerDocDefault.java | 88 ++
.../services/grid/GridLoaderServiceDefault.java | 257 +++++
.../services/grid/GridReaderUsingJaxb.java | 76 ++
.../services/grid/GridServiceDefault.java | 209 ++++
.../services/grid/GridSystemServiceAbstract.java | 699 ++++++++++++
.../grid/bootstrap3/DefaultGrid.layout.xml | 0
.../grid/bootstrap3/GridSystemServiceBS3.java | 674 ++++++++++++
.../services/homepage/HomePageAction.java | 63 ++
.../services/homepage/HomePageResolverService.java | 35 +
.../metamodel/services/homepage/package-info.java | 26 +
.../ixn/InteractionDtoServiceInternal.java | 51 +
.../services/layout/LayoutServiceDefault.java | 147 +++
.../services/message/MessageServiceNoop.java | 88 ++
.../services/metamodel/DomainMemberDefault.java | 301 ++++++
.../services/metamodel/DomainModelDefault.java | 58 +
.../services/metamodel/MetaModelExportSupport.java | 31 +
.../services/metamodel/MetaModelExporter.java | 570 ++++++++++
.../metamodel/MetaModelServiceDefault.java | 272 +++++
.../core/metamodel/services/metamodel/Util.java | 35 +
.../publishing/PublisherDispatchService.java | 46 +
.../services/registry/ServiceRegistryDefault.java | 103 ++
.../services/registry/SpringContextProvider.java | 23 +
.../services/title/TitleServiceDefault.java | 83 ++
.../title/TitlesAndTranslationsValidator.java | 166 +++
.../services/user/UserServiceDefault.java | 177 ++++
.../isis/core/metamodel/spec/ActionType.java | 41 +
.../isis/core/metamodel/spec/DefaultProvider.java | 31 +
.../apache/isis/core/metamodel/spec/Described.java | 35 +
.../core/metamodel/spec/DomainModelException.java | 47 +
.../spec/ElementSpecificationProvider.java | 44 +
.../isis/core/metamodel/spec/EntityState.java | 49 +
.../isis/core/metamodel/spec/FreeStandingList.java | 96 ++
.../isis/core/metamodel/spec/Hierarchical.java | 65 ++
.../metamodel/spec/InjectorMethodEvaluator.java | 31 +
.../isis/core/metamodel/spec/ManagedObject.java | 734 +++++++++++++
.../spec/ObjectInstantiationException.java | 41 +
.../isis/core/metamodel/spec/ObjectSpecId.java | 62 ++
.../core/metamodel/spec/ObjectSpecification.java | 445 ++++++++
.../spec/ObjectSpecificationException.java | 36 +
.../isis/core/metamodel/spec/Specification.java | 50 +
.../core/metamodel/spec/feature/Contributed.java | 31 +
.../core/metamodel/spec/feature/CurrentHolder.java | 46 +
.../spec/feature/MutableCurrentHolder.java | 64 ++
.../core/metamodel/spec/feature/ObjectAction.java | 589 +++++++++++
.../spec/feature/ObjectActionContainer.java | 80 ++
.../spec/feature/ObjectActionParameter.java | 235 ++++
.../metamodel/spec/feature/ObjectAssociation.java | 253 +++++
.../spec/feature/ObjectAssociationContainer.java | 72 ++
.../core/metamodel/spec/feature/ObjectFeature.java | 79 ++
.../core/metamodel/spec/feature/ObjectMember.java | 228 ++++
.../spec/feature/OneToManyActionParameter.java | 28 +
.../spec/feature/OneToManyAssociation.java | 101 ++
.../metamodel/spec/feature/OneToManyFeature.java | 40 +
.../spec/feature/OneToOneActionParameter.java | 28 +
.../spec/feature/OneToOneAssociation.java | 53 +
.../metamodel/spec/feature/OneToOneFeature.java | 28 +
.../core/metamodel/specloader/CollectionUtils.java | 61 ++
.../specloader/InjectorMethodEvaluatorDefault.java | 91 ++
.../specloader/ProgrammingModelServiceDefault.java | 104 ++
.../specloader/ReflectiveActionException.java | 43 +
.../specloader/SpecificationCacheDefault.java | 134 +++
.../metamodel/specloader/SpecificationLoader.java | 137 +++
.../specloader/SpecificationLoaderDefault.java | 521 +++++++++
.../SpecificationLoaderDefault_debug.java | 79 ++
.../specloader/classsubstitutor/ProxyEnhanced.java | 28 +
.../specloader/facetprocessor/FacetProcessor.java | 486 +++++++++
.../core/metamodel/specloader/package-info.java | 43 +
.../specloader/postprocessor/PostProcessor.java | 59 ++
.../specloader/specimpl/ContributeeMember.java | 67 ++
.../specloader/specimpl/FacetedMethodsBuilder.java | 614 +++++++++++
.../metamodel/specloader/specimpl/Factories.java | 96 ++
.../specloader/specimpl/IntrospectionState.java | 47 +
.../specloader/specimpl/MixedInMember.java | 40 +
.../specimpl/ObjectActionContributee.java | 253 +++++
.../specloader/specimpl/ObjectActionDefault.java | 688 ++++++++++++
.../specloader/specimpl/ObjectActionMixedIn.java | 260 +++++
.../specimpl/ObjectActionParameterAbstract.java | 492 +++++++++
.../specimpl/ObjectActionParameterContributee.java | 25 +
.../ObjectActionParameterContributeeAbstract.java | 93 ++
.../specimpl/ObjectActionParameterMixedIn.java | 25 +
.../ObjectActionParameterMixedInAbstract.java | 85 ++
.../specimpl/ObjectAssociationAbstract.java | 97 ++
.../specloader/specimpl/ObjectMemberAbstract.java | 409 +++++++
.../specimpl/ObjectSpecificationAbstract.java | 1119 ++++++++++++++++++++
.../OneToManyActionParameterContributee.java | 43 +
.../specimpl/OneToManyActionParameterDefault.java | 43 +
.../specimpl/OneToManyActionParameterMixedIn.java | 40 +
.../specimpl/OneToManyAssociationContributee.java | 191 ++++
.../specimpl/OneToManyAssociationDefault.java | 288 +++++
.../specimpl/OneToManyAssociationMixedIn.java | 221 ++++
.../OneToOneActionParameterContributee.java | 38 +
.../specimpl/OneToOneActionParameterDefault.java | 37 +
.../specimpl/OneToOneActionParameterMixedIn.java | 35 +
.../specimpl/OneToOneAssociationContributee.java | 174 +++
.../specimpl/OneToOneAssociationDefault.java | 361 +++++++
.../specimpl/OneToOneAssociationMixedIn.java | 206 ++++
.../metamodel/specloader/specimpl/Predicates.java | 168 +++
.../core/metamodel/specloader/specimpl/Utils.java | 103 ++
.../specimpl/dflt/ObjectSpecificationDefault.java | 456 ++++++++
.../CollectionFacetOnStandaloneList.java | 73 ++
.../DescribedAsFacetOnStandaloneList.java | 31 +
.../standalonelist/NamedFacetOnStandaloneList.java | 31 +
.../ObjectSpecificationOnStandaloneList.java | 186 ++++
.../PluralFacetOnStandaloneList.java | 31 +
.../traverser/TypeExtractorAbstract.java | 84 ++
.../traverser/TypeExtractorMethodParameters.java | 60 ++
.../traverser/TypeExtractorMethodReturn.java | 47 +
.../validator/MetaModelInvalidException.java | 33 +
.../specloader/validator/MetaModelValidator.java | 44 +
.../validator/MetaModelValidatorAbstract.java | 69 ++
...etaModelValidatorForConflictingOptionality.java | 62 ++
.../MetaModelValidatorForDeprecatedAbstract.java | 68 ++
.../MetaModelValidatorForDeprecatedAnnotation.java | 54 +
...etaModelValidatorForDeprecatedMethodPrefix.java | 52 +
.../MetaModelValidatorForValidationFailures.java | 23 +
.../validator/MetaModelValidatorVisiting.java | 111 ++
.../specloader/validator/ValidationFailure.java | 61 ++
.../specloader/validator/ValidationFailures.java | 112 ++
.../core/metamodel/util/DeweyOrderComparator.java | 37 +
.../apache/isis/core/metamodel/util/EventUtil.java | 43 +
.../core/metamodel/util/pchain/ParentChain.java | 83 ++
.../metamodel/util/pchain/ParentChainDefault.java | 49 +
.../isis/core/metamodel/util/snapshot/Helper.java | 91 ++
.../core/metamodel/util/snapshot/IsisSchema.java | 181 ++++
.../isis/core/metamodel/util/snapshot/Place.java | 65 ++
.../core/metamodel/util/snapshot/XmlSchema.java | 648 ++++++++++++
.../core/metamodel/util/snapshot/XmlSnapshot.java | 916 ++++++++++++++++
.../core/metamodel/util/snapshot/XsMetaModel.java | 337 ++++++
.../metamodel/valuetypes/ValueTypeDefinition.java | 45 +
.../metamodel/valuetypes/ValueTypeProvider.java | 29 +
.../valuetypes/ValueTypeProviderDefault.java | 54 +
.../ValueTypeProviderForCollections.java | 51 +
.../metamodel/valuetypes/ValueTypeRegistry.java | 96 ++
.../apache/isis/metamodel/IsisModuleMetamodel.java | 101 --
.../isis/metamodel/adapter/ObjectAdapter.java | 61 --
.../metamodel/adapter/ObjectAdapterProvider.java | 35 -
.../adapter/oid/ObjectNotFoundException.java | 36 -
.../adapter/oid/ObjectPersistenceException.java | 42 -
.../org/apache/isis/metamodel/adapter/oid/Oid.java | 140 ---
.../isis/metamodel/adapter/oid/Oid_Marshaller.java | 254 -----
.../isis/metamodel/adapter/oid/Oid_Parented.java | 146 ---
.../isis/metamodel/adapter/oid/Oid_Root.java | 167 ---
.../isis/metamodel/adapter/oid/Oid_Value.java | 87 --
.../isis/metamodel/adapter/oid/ParentedOid.java | 54 -
.../adapter/oid/PojoRecreationException.java | 29 -
.../adapter/oid/PojoRefreshException.java | 32 -
.../apache/isis/metamodel/adapter/oid/RootOid.java | 46 -
.../isis/metamodel/adapter/package-info.java | 32 -
.../authorization/standard/AuthorizationFacet.java | 32 -
.../standard/AuthorizationFacetAbstract.java | 78 --
.../standard/AuthorizationFacetFactory.java | 46 -
.../standard/AuthorizationFacetImpl.java | 30 -
.../authorization/standard/package-info.java | 33 -
.../isis/metamodel/commons/ArrayExtensions.java | 69 --
.../apache/isis/metamodel/commons/CanBeVoid.java | 25 -
.../isis/metamodel/commons/ClassExtensions.java | 175 ---
.../isis/metamodel/commons/ClassFunctions.java | 46 -
.../isis/metamodel/commons/ClassPredicates.java | 37 -
.../apache/isis/metamodel/commons/ClassUtil.java | 192 ----
.../metamodel/commons/CloseableExtensions.java | 40 -
.../isis/metamodel/commons/DateExtensions.java | 35 -
.../metamodel/commons/InputStreamExtensions.java | 69 --
.../isis/metamodel/commons/ListExtensions.java | 115 --
.../apache/isis/metamodel/commons/LocaleUtil.java | 40 -
.../org/apache/isis/metamodel/commons/MapUtil.java | 48 -
.../isis/metamodel/commons/MethodExtensions.java | 92 --
.../commons/MethodInvocationPreprocessor.java | 154 ---
.../apache/isis/metamodel/commons/MethodUtil.java | 202 ----
.../isis/metamodel/commons/ObjectExtensions.java | 82 --
.../isis/metamodel/commons/ResourceUtil.java | 83 --
.../isis/metamodel/commons/StringExtensions.java | 393 -------
.../metamodel/commons/ThrowableExtensions.java | 82 --
.../apache/isis/metamodel/commons/ToString.java | 165 ---
.../apache/isis/metamodel/commons/Wormhole.java | 50 -
.../isis/metamodel/commons/package-info.java | 27 -
.../org/apache/isis/metamodel/consent/Allow.java | 56 -
.../org/apache/isis/metamodel/consent/Consent.java | 73 --
.../isis/metamodel/consent/ConsentAbstract.java | 159 ---
.../isis/metamodel/consent/InteractionAdvisor.java | 103 --
.../metamodel/consent/InteractionContextType.java | 135 ---
.../metamodel/consent/InteractionInitiatedBy.java | 33 -
.../isis/metamodel/consent/InteractionResult.java | 155 ---
.../metamodel/consent/InteractionResultSet.java | 104 --
.../org/apache/isis/metamodel/consent/Veto.java | 48 -
.../isis/metamodel/context/MetaModelContext.java | 212 ----
.../metamodel/context/MetaModelContextAware.java | 29 -
.../context/MetaModelContext_usingIoc.java | 172 ---
.../isis/metamodel/context/MetaModelContexts.java | 44 -
.../metamodel/exceptions/MetaModelException.java | 43 -
.../persistence/ObjectNotFoundException.java | 38 -
.../persistence/ObjectPersistenceException.java | 42 -
.../persistence/PojoRecreationException.java | 31 -
.../persistence/PojoRefreshException.java | 34 -
.../org/apache/isis/metamodel/facetapi/Facet.java | 123 ---
.../isis/metamodel/facetapi/FacetAbstract.java | 287 -----
.../isis/metamodel/facetapi/FacetHolder.java | 150 ---
.../isis/metamodel/facetapi/FacetHolderImpl.java | 168 ---
.../apache/isis/metamodel/facetapi/FacetUtil.java | 96 --
.../metamodel/facetapi/FacetWithAttributes.java | 32 -
.../isis/metamodel/facetapi/FeatureType.java | 159 ---
.../isis/metamodel/facetapi/IdentifiedHolder.java | 31 -
.../isis/metamodel/facetapi/MetaModelRefiner.java | 34 -
.../isis/metamodel/facetapi/MethodRemover.java | 71 --
.../apache/isis/metamodel/facets/Annotations.java | 695 ------------
.../isis/metamodel/facets/CollectionUtils.java | 129 ---
.../facets/ContributeeMemberFacetFactory.java | 45 -
.../isis/metamodel/facets/DependentArgUtils.java | 199 ----
.../isis/metamodel/facets/DomainEventHelper.java | 441 --------
.../apache/isis/metamodel/facets/FacetFactory.java | 337 ------
.../metamodel/facets/FacetFactoryAbstract.java | 70 --
.../isis/metamodel/facets/FacetedMethod.java | 215 ----
.../metamodel/facets/FacetedMethodParameter.java | 50 -
.../isis/metamodel/facets/ImperativeFacet.java | 169 ---
.../metamodel/facets/ImperativeFacetMulti.java | 33 -
.../facets/MethodFilteringFacetFactory.java | 33 -
.../isis/metamodel/facets/MethodFinderUtils.java | 239 -----
.../metamodel/facets/MethodLiteralConstants.java | 77 --
.../facets/MethodPrefixBasedFacetFactory.java | 39 -
.../MethodPrefixBasedFacetFactoryAbstract.java | 138 ---
.../metamodel/facets/MethodRemoverConstants.java | 44 -
.../isis/metamodel/facets/MultipleValueFacet.java | 26 -
.../metamodel/facets/ObjectSpecIdFacetFactory.java | 37 -
.../facets/OrphanedSupportingMethodValidator.java | 126 ---
.../metamodel/facets/PostConstructMethodCache.java | 30 -
...ropertyOrCollectionIdentifyingFacetFactory.java | 83 --
...rCollectionIdentifyingFacetFactoryAbstract.java | 43 -
.../metamodel/facets/SingleClassValueFacet.java | 35 -
.../facets/SingleClassValueFacetAbstract.java | 60 --
.../isis/metamodel/facets/SingleIntValueFacet.java | 27 -
.../facets/SingleIntValueFacetAbstract.java | 47 -
.../metamodel/facets/SingleStringValueFacet.java | 23 -
.../facets/SingleStringValueFacetAbstract.java | 58 -
.../isis/metamodel/facets/SingleValueFacet.java | 28 -
.../metamodel/facets/SingleValueFacetAbstract.java | 46 -
.../apache/isis/metamodel/facets/TypedHolder.java | 55 -
.../isis/metamodel/facets/TypedHolderDefault.java | 58 -
.../isis/metamodel/facets/WhereValueFacet.java | 29 -
.../metamodel/facets/WhereValueFacetAbstract.java | 57 -
...lementSpecificationProviderFromTypeOfFacet.java | 37 -
.../facets/actcoll/typeof/TypeOfFacet.java | 126 ---
.../facets/actcoll/typeof/TypeOfFacetAbstract.java | 40 -
.../actcoll/typeof/TypeOfFacetDefaultToObject.java | 30 -
.../typeof/TypeOfFacetInferredFromArray.java | 30 -
.../typeof/TypeOfFacetInferredFromGenerics.java | 30 -
.../action/ActionAnnotationFacetFactory.java | 287 -----
...nChoicesForCollectionParameterFacetFactory.java | 161 ---
.../action/associateWith/AssociatedWithFacet.java | 30 -
.../associateWith/AssociatedWithFacetAbstract.java | 45 -
.../AssociatedWithFacetForActionAnnotation.java | 32 -
.../command/CommandFacetForActionAnnotation.java | 123 ---
...ommandFacetForActionAnnotationAsConfigured.java | 39 -
.../command/CommandFacetFromConfiguration.java | 46 -
.../hidden/HiddenFacetForActionAnnotation.java | 56 -
.../action/invocation/ActionDomainEventFacet.java | 33 -
.../invocation/ActionDomainEventFacetAbstract.java | 165 ---
.../invocation/ActionDomainEventFacetDefault.java | 33 -
.../ActionDomainEventFacetForActionAnnotation.java | 32 -
.../action/invocation/ActionInvocationFacet.java | 51 -
.../invocation/ActionInvocationFacetAbstract.java | 38 -
...ctionInvocationFacetForDomainEventAbstract.java | 513 ---------
...ionFacetForDomainEventFromActionAnnotation.java | 40 -
...onInvocationFacetForDomainEventFromDefault.java | 40 -
.../actions/action/invocation/CommandUtil.java | 113 --
.../PrototypeFacetForActionAnnotation.java | 51 -
.../PublishedActionFacetForActionAnnotation.java | 99 --
...ActionFacetForActionAnnotationAsConfigured.java | 31 -
.../PublishedActionFacetFromConfiguration.java | 32 -
...ctionSemanticsFacetFallbackToNonIdempotent.java | 32 -
.../ActionSemanticsFacetForActionAnnotation.java | 49 -
.../typeof/TypeOfFacetForActionAnnotation.java | 33 -
.../facets/actions/command/CommandFacet.java | 55 -
.../actions/command/CommandFacetAbstract.java | 123 ---
.../actions/defaults/ActionDefaultsFacet.java | 35 -
.../defaults/ActionDefaultsFacetAbstract.java | 36 -
.../method/ActionDefaultsFacetViaMethod.java | 88 --
.../ActionDefaultsFacetViaMethodFactory.java | 88 --
.../FileAcceptFacetForActionAnnotation.java | 47 -
.../facets/actions/homepage/HomePageFacet.java | 34 -
.../actions/homepage/HomePageFacetAbstract.java | 36 -
.../facets/actions/homepage/HomePageFacetImpl.java | 30 -
.../annotation/HomePageFacetAnnotation.java | 31 -
.../annotation/HomePageFacetAnnotationFactory.java | 130 ---
.../actions/layout/ActionLayoutFacetFactory.java | 171 ---
...tionPositionFacetForActionLayoutAnnotation.java | 46 -
.../layout/ActionPositionFacetForActionXml.java | 41 -
...okmarkPolicyFacetForActionLayoutAnnotation.java | 58 -
.../layout/BookmarkPolicyFacetForActionXml.java | 42 -
.../CssClassFaFacetForActionLayoutAnnotation.java | 57 -
.../layout/CssClassFaFacetForActionXml.java | 44 -
.../CssClassFacetForActionLayoutAnnotation.java | 47 -
.../actions/layout/CssClassFacetForActionXml.java | 42 -
.../DescribedAsFacetForActionLayoutAnnotation.java | 47 -
.../layout/DescribedAsFacetForActionXml.java | 42 -
.../HiddenFacetForActionLayoutAnnotation.java | 56 -
.../actions/layout/HiddenFacetForActionXml.java | 51 -
.../NamedFacetForActionLayoutAnnotation.java | 48 -
.../actions/layout/NamedFacetForActionXml.java | 44 -
...tContributedFacetForActionLayoutAnnotation.java | 52 -
.../PromptStyleFacetForActionLayoutAnnotation.java | 97 --
.../layout/PromptStyleFacetForActionXml.java | 57 -
.../RedirectFacetFromActionLayoutAnnotation.java | 47 -
.../actions/layout/RedirectFacetFromActionXml.java | 43 -
.../notcontributed/NotContributedFacet.java | 40 -
.../NotContributedFacetAbstract.java | 73 --
...tributedFacetDerivedFromDomainServiceFacet.java | 47 -
...dFacetDerivedFromDomainServiceFacetFactory.java | 58 -
.../NotContributedFacetDerivedFromMixinFacet.java | 37 -
...ntributedFacetDerivedFromMixinFacetFactory.java | 52 -
.../notinservicemenu/NotInServiceMenuFacet.java | 38 -
.../NotInServiceMenuFacetAbstract.java | 40 -
...viceMenuFacetDerivedFromDomainServiceFacet.java | 54 -
...uFacetDerivedFromDomainServiceFacetFactory.java | 59 --
.../actions/position/ActionPositionFacet.java | 44 -
.../position/ActionPositionFacetAbstract.java | 57 -
.../position/ActionPositionFacetFallback.java | 31 -
.../facets/actions/prototype/PrototypeFacet.java | 30 -
.../actions/prototype/PrototypeFacetAbstract.java | 56 -
.../actions/publish/PublishedActionFacet.java | 30 -
.../publish/PublishedActionFacetAbstract.java | 38 -
.../facets/actions/redirect/RedirectFacet.java | 33 -
.../actions/redirect/RedirectFacetAbstract.java | 66 --
.../actions/redirect/RedirectFacetFallback.java | 31 -
.../actions/semantics/ActionSemanticsFacet.java | 33 -
.../semantics/ActionSemanticsFacetAbstract.java | 39 -
.../validate/ActionParameterValidationFacet.java | 45 -
.../ActionParameterValidationFacetAbstract.java | 47 -
.../actions/validate/ActionValidationFacet.java | 49 -
.../validate/ActionValidationFacetAbstract.java | 47 -
.../ActionParameterValidationFacetViaMethod.java | 84 --
.../method/ActionValidationFacetViaMethod.java | 84 --
.../ActionValidationFacetViaMethodFactory.java | 117 --
.../facets/all/deficiencies/DeficiencyFacet.java | 134 ---
.../facets/all/describedas/DescribedAsFacet.java | 33 -
.../all/describedas/DescribedAsFacetAbstract.java | 36 -
.../isis/metamodel/facets/all/help/HelpFacet.java | 29 -
.../facets/all/help/HelpFacetAbstract.java | 36 -
.../metamodel/facets/all/hide/HiddenFacet.java | 31 -
.../all/i18n/DescribedAsFacetTranslated.java | 64 --
.../facets/all/i18n/NamedFacetTranslated.java | 72 --
.../facets/all/i18n/PluralFacetTranslated.java | 55 -
.../facets/all/i18n/TranslationFacetFactory.java | 119 ---
.../metamodel/facets/all/named/NamedFacet.java | 42 -
.../facets/all/named/NamedFacetAbstract.java | 59 --
.../facets/all/named/NamedFacetInferred.java | 31 -
.../collections/CollectionFacetAbstract.java | 40 -
.../CollectionAccessorFacetViaAccessor.java | 109 --
.../CollectionAccessorFacetViaAccessorFactory.java | 112 --
.../clear/CollectionClearFacetFactory.java | 70 --
.../clear/CollectionClearFacetViaAccessor.java | 79 --
.../clear/CollectionClearFacetViaClearMethod.java | 70 --
.../CollectionAnnotationFacetFactory.java | 293 -----
.../collection/defaultview/DefaultViewFacet.java | 26 -
.../defaultview/DefaultViewFacetAbstract.java | 35 -
.../DisabledFacetForCollectionAnnotation.java | 69 --
.../hidden/HiddenFacetForCollectionAnnotation.java | 56 -
...ectionAddToFacetForDomainEventFromAbstract.java | 124 ---
...acetForDomainEventFromCollectionAnnotation.java | 43 -
...lectionAddToFacetForDomainEventFromDefault.java | 41 -
.../modify/CollectionDomainEventFacet.java | 34 -
.../modify/CollectionDomainEventFacetAbstract.java | 145 ---
.../modify/CollectionDomainEventFacetDefault.java | 32 -
...ionDomainEventFacetForCollectionAnnotation.java | 45 -
...nRemoveFromFacetForDomainEventFromAbstract.java | 123 ---
...acetForDomainEventFromCollectionAnnotation.java | 43 -
...onRemoveFromFacetForDomainEventFromDefault.java | 41 -
.../NotPersistedFacetForCollectionAnnotation.java | 55 -
...fFacetOnCollectionFromCollectionAnnotation.java | 47 -
...abledFacetOnCollectionDerivedFromImmutable.java | 39 -
...cetOnCollectionDerivedFromImmutableFactory.java | 45 -
.../javautilcollection/CollectionFacetFactory.java | 86 --
.../javautilcollection/JavaArrayFacet.java | 84 --
.../javautilcollection/JavaCollectionFacet.java | 78 --
.../layout/CollectionLayoutFacetFactory.java | 123 ---
...CssClassFacetForCollectionLayoutAnnotation.java | 45 -
.../layout/CssClassFacetForCollectionXml.java | 42 -
...aultViewFacetForCollectionLayoutAnnotation.java | 48 -
.../layout/DefaultViewFacetForCollectionXml.java | 42 -
...cribedAsFacetForCollectionLayoutAnnotation.java | 45 -
.../layout/DescribedAsFacetForCollectionXml.java | 42 -
.../HiddenFacetForCollectionLayoutAnnotation.java | 58 -
.../layout/HiddenFacetForCollectionXml.java | 51 -
.../NamedFacetForCollectionLayoutAnnotation.java | 52 -
.../layout/NamedFacetForCollectionXml.java | 47 -
.../PagedFacetForCollectionLayoutAnnotation.java | 46 -
.../layout/PagedFacetForCollectionXml.java | 41 -
...SortedByFacetForCollectionLayoutAnnotation.java | 53 -
.../layout/SortedByFacetForCollectionXml.java | 56 -
.../collections/modify/CollectionAddToFacet.java | 37 -
.../modify/CollectionAddToFacetAbstract.java | 36 -
.../modify/CollectionAddToFacetViaAccessor.java | 77 --
.../modify/CollectionAddToFacetViaMethod.java | 74 --
...tionAddToRemoveFromAndValidateFacetFactory.java | 177 ----
.../collections/modify/CollectionClearFacet.java | 36 -
.../modify/CollectionClearFacetAbstract.java | 36 -
.../facets/collections/modify/CollectionFacet.java | 112 --
.../modify/CollectionRemoveFromFacet.java | 39 -
.../modify/CollectionRemoveFromFacetAbstract.java | 36 -
.../CollectionRemoveFromFacetViaAccessor.java | 80 --
.../modify/CollectionRemoveFromFacetViaMethod.java | 74 --
.../TypeOfFacetInferredFromSupportingMethods.java | 31 -
.../parented/ParentedCollectionFacetDefault.java | 37 -
.../ParentedFacetSinceCollectionFactory.java | 53 -
.../facets/collections/sortedby/SortedByFacet.java | 32 -
.../sortedby/SortedByFacetAbstract.java | 38 -
.../annotation/SortedByFacetAnnotationFactory.java | 91 --
.../validate/CollectionValidateAddToFacet.java | 40 -
.../CollectionValidateAddToFacetAbstract.java | 48 -
.../CollectionValidateAddToFacetViaMethod.java | 82 --
.../CollectionValidateRemoveFromFacet.java | 39 -
.../CollectionValidateRemoveFromFacetAbstract.java | 47 -
...CollectionValidateRemoveFromFacetViaMethod.java | 83 --
.../collparam/semantics/CollectionSemantics.java | 125 ---
.../semantics/CollectionSemanticsFacet.java | 29 -
.../semantics/CollectionSemanticsFacetDefault.java | 47 -
.../facets/fallback/ActionChoicesFacetNone.java | 45 -
.../facets/fallback/ActionDefaultsFacetNone.java | 42 -
.../facets/fallback/DescribedAsFacetNone.java | 39 -
.../facets/fallback/FallbackFacetFactory.java | 144 ---
.../metamodel/facets/fallback/HelpFacetNone.java | 44 -
.../LabelAtFacetFromLayoutConfiguration.java | 30 -
.../facets/fallback/MaxLengthFacetUnlimited.java | 46 -
.../facets/fallback/MultiLineFacetNone.java | 36 -
.../facets/fallback/NamedFacetDefault.java | 33 -
.../metamodel/facets/fallback/NamedFacetNone.java | 44 -
.../fallback/PagedFacetFromConfiguration.java | 29 -
.../metamodel/facets/fallback/TitleFacetNone.java | 42 -
.../metamodel/facets/jaxb/JaxbFacetFactory.java | 399 -------
.../facets/jaxb/XmlAccessorTypeFacet.java | 31 -
.../facets/jaxb/XmlAccessorTypeFacetAbstract.java | 40 -
.../facets/jaxb/XmlAccessorTypeFacetDefault.java | 33 -
.../facets/jaxb/XmlJavaTypeAdapterFacet.java | 29 -
.../jaxb/XmlJavaTypeAdapterFacetAbstract.java | 38 -
.../jaxb/XmlJavaTypeAdapterFacetDefault.java | 31 -
.../metamodel/facets/jaxb/XmlTransientFacet.java | 29 -
.../facets/jaxb/XmlTransientFacetAbstract.java | 37 -
.../facets/jaxb/XmlTransientFacetDefault.java | 30 -
.../facets/members/cssclass/CssClassFacet.java | 37 -
.../members/cssclass/CssClassFacetAbstract.java | 51 -
.../members/cssclass/CssClassFacetAbstract2.java | 36 -
.../CssClassFacetOnActionFromConfiguredRegex.java | 30 -
...assFacetOnActionFromConfiguredRegexFactory.java | 120 ---
.../facets/members/cssclassfa/CssClassFaFacet.java | 37 -
.../cssclassfa/CssClassFaFacetAbstract.java | 79 --
.../members/cssclassfa/CssClassFaPosition.java | 104 --
.../annotprop/CssClassFaFacetOnMemberFactory.java | 103 --
...CssClassFaFacetOnMemberFromConfiguredRegex.java | 31 -
.../CssClassFaFacetOnMemberFromProperties.java | 40 -
.../cssclassfa/annotprop/MixinInterceptor.java | 64 --
.../DescribedAsFacetOnMemberDerivedFromType.java | 32 -
.../annotprop/DescribedAsFacetOnMemberFactory.java | 64 --
.../DescribedAsFacetOnMemberFromProperties.java | 37 -
.../facets/members/disabled/DisabledFacet.java | 54 -
.../members/disabled/DisabledFacetAbstract.java | 102 --
.../DisabledFacetAbstractAlwaysEverywhere.java | 40 -
.../disabled/DisabledFacetAbstractImpl.java | 83 --
.../disabled/DisabledFacetForContributee.java | 30 -
.../disabled/method/DisableForContextFacet.java | 37 -
.../method/DisableForContextFacetAbstract.java | 37 -
.../method/DisableForContextFacetNone.java | 49 -
.../method/DisableForContextFacetViaMethod.java | 100 --
.../DisableForContextFacetViaMethodFactory.java | 94 --
.../facets/members/hidden/HiddenFacetAbstract.java | 84 --
.../HiddenFacetAbstractAlwaysEverywhere.java | 50 -
.../members/hidden/HiddenFacetAbstractImpl.java | 52 -
.../HiddenFacetFromLayoutPropertiesAbstract.java | 53 -
.../members/hidden/method/HideForContextFacet.java | 37 -
.../hidden/method/HideForContextFacetAbstract.java | 37 -
.../hidden/method/HideForContextFacetNone.java | 45 -
.../method/HideForContextFacetViaMethod.java | 78 --
.../HideForContextFacetViaMethodFactory.java | 82 --
.../facets/members/order/MemberOrderFacet.java | 59 --
.../members/order/MemberOrderFacetAbstract.java | 107 --
.../annotprop/MemberOrderFacetAnnotation.java | 35 -
.../order/annotprop/MemberOrderFacetFactory.java | 69 --
.../MemberOrderFacetForActionAnnotation.java | 34 -
.../annotprop/MemberOrderFacetProperties.java | 49 -
.../order/annotprop/MemberOrderFacetXml.java | 35 -
.../ViewModelSemanticCheckingFacetFactory.java | 209 ----
.../facets/object/audit/AuditableFacet.java | 40 -
.../object/audit/AuditableFacetAbstract.java | 61 --
.../facets/object/audit/AuditableFacetImpl.java | 30 -
.../object/autocomplete/AutoCompleteFacet.java | 35 -
.../autocomplete/AutoCompleteFacetAbstract.java | 126 ---
.../object/bookmarkpolicy/BookmarkPolicyFacet.java | 31 -
.../BookmarkPolicyFacetAbstract.java | 59 --
.../BookmarkPolicyFacetFallback.java | 32 -
.../BookmarkPolicyFacetFallbackFactory.java | 88 --
.../facets/object/callbacks/CallbackFacet.java | 53 -
.../object/callbacks/CallbackFacetAbstract.java | 35 -
.../object/callbacks/CreatedCallbackFacet.java | 36 -
.../callbacks/CreatedCallbackFacetAbstract.java | 35 -
.../callbacks/CreatedCallbackFacetFactory.java | 51 -
.../callbacks/CreatedCallbackFacetViaMethod.java | 70 --
.../callbacks/CreatedLifecycleEventFacet.java | 30 -
...fecycleEventFacetForDomainObjectAnnotation.java | 46 -
.../object/callbacks/LifecycleEventFacet.java | 28 -
.../object/callbacks/LoadCallbackFacetFactory.java | 65 --
.../object/callbacks/LoadedCallbackFacet.java | 37 -
.../callbacks/LoadedCallbackFacetAbstract.java | 35 -
.../callbacks/LoadedCallbackFacetViaMethod.java | 71 --
.../callbacks/LoadedLifecycleEventFacet.java | 30 -
...fecycleEventFacetForDomainObjectAnnotation.java | 44 -
.../object/callbacks/LoadingCallbackFacet.java | 28 -
.../callbacks/LoadingCallbackFacetAbstract.java | 39 -
.../callbacks/LoadingCallbackFacetViaMethod.java | 75 --
.../callbacks/PersistCallbackFacetFactory.java | 78 --
.../PersistCallbackViaSaveMethodFacetFactory.java | 78 --
.../object/callbacks/PersistedCallbackFacet.java | 36 -
.../callbacks/PersistedCallbackFacetAbstract.java | 35 -
.../callbacks/PersistedCallbackFacetViaMethod.java | 71 --
.../callbacks/PersistedLifecycleEventFacet.java | 30 -
...fecycleEventFacetForDomainObjectAnnotation.java | 44 -
.../object/callbacks/PersistingCallbackFacet.java | 37 -
.../callbacks/PersistingCallbackFacetAbstract.java | 35 -
.../PersistingCallbackFacetViaMethod.java | 71 --
.../callbacks/PersistingLifecycleEventFacet.java | 30 -
...fecycleEventFacetForDomainObjectAnnotation.java | 45 -
.../callbacks/RemoveCallbackFacetFactory.java | 81 --
.../RemoveCallbackViaDeleteMethodFacetFactory.java | 81 --
.../object/callbacks/RemovedCallbackFacet.java | 35 -
.../callbacks/RemovedCallbackFacetAbstract.java | 39 -
.../callbacks/RemovedCallbackFacetViaMethod.java | 75 --
.../object/callbacks/RemovingCallbackFacet.java | 34 -
.../callbacks/RemovingCallbackFacetAbstract.java | 35 -
.../callbacks/RemovingCallbackFacetViaMethod.java | 71 --
.../callbacks/RemovingLifecycleEventFacet.java | 30 -
...fecycleEventFacetForDomainObjectAnnotation.java | 45 -
.../callbacks/UpdateCallbackFacetFactory.java | 68 --
.../object/callbacks/UpdatedCallbackFacet.java | 37 -
.../callbacks/UpdatedCallbackFacetAbstract.java | 35 -
.../callbacks/UpdatedCallbackFacetViaMethod.java | 71 --
.../callbacks/UpdatedLifecycleEventFacet.java | 30 -
...fecycleEventFacetForDomainObjectAnnotation.java | 45 -
.../object/callbacks/UpdatingCallbackFacet.java | 37 -
.../callbacks/UpdatingCallbackFacetAbstract.java | 35 -
.../callbacks/UpdatingCallbackFacetViaMethod.java | 71 --
.../callbacks/UpdatingLifecycleEventFacet.java | 30 -
...fecycleEventFacetForDomainObjectAnnotation.java | 45 -
.../choices/ChoicesFacetFromBoundedAbstract.java | 119 ---
.../facets/object/choices/ChoicesFacetUtils.java | 42 -
.../facets/object/choices/QueryFindAllChoices.java | 57 -
.../object/choices/enums/ChoicesFacetEnum.java | 49 -
.../facets/object/choices/enums/EnumFacet.java | 26 -
...ingValueFacetUsingSemanticsProviderFactory.java | 49 -
.../choices/enums/EnumValueSemanticsProvider.java | 152 ---
.../cssclass/method/CssClassFacetMethod.java | 61 --
.../method/CssClassFacetMethodFactory.java | 52 -
...ssClassFaFacetForDomainObjectLayoutFactory.java | 43 -
.../CssClassFaFacetForViewModelLayoutFactory.java | 45 -
.../facets/object/defaults/DefaultedFacet.java | 47 -
.../object/defaults/DefaultedFacetAbstract.java | 84 --
.../DefaultedFacetUsingDefaultsProvider.java | 47 -
.../object/defaults/DefaultsProviderUtil.java | 75 --
.../annotcfg/DefaultedFacetAnnotation.java | 62 --
...tedFacetAnnotationElseConfigurationFactory.java | 71 --
.../annotcfg/DefaultedFacetFromConfiguration.java | 31 -
.../object/disabled/DisabledObjectFacet.java | 54 -
.../disabled/DisabledObjectFacetAbstract.java | 52 -
.../method/DisabledObjectFacetViaMethod.java | 93 --
.../DisabledObjectFacetViaMethodFactory.java | 88 --
.../DomainObjectAnnotationFacetFactory.java | 570 ----------
.../AuditableFacetForDomainObjectAnnotation.java | 74 --
...FacetForDomainObjectAnnotationAsConfigured.java | 31 -
.../auditing/AuditableFacetFromConfiguration.java | 36 -
...AutoCompleteFacetForDomainObjectAnnotation.java | 46 -
.../ChoicesFacetForDomainObjectAnnotation.java | 49 -
...EventDefaultFacetForDomainObjectAnnotation.java | 52 -
...EventDefaultFacetForDomainObjectAnnotation.java | 51 -
...EventDefaultFacetForDomainObjectAnnotation.java | 51 -
.../ImmutableFacetForDomainObjectAnnotation.java | 101 --
...FacetForDomainObjectAnnotationAsConfigured.java | 30 -
.../editing/ImmutableFacetFromConfiguration.java | 58 -
...ObjectSpecIdFacetForDomainObjectAnnotation.java | 47 -
...lishedObjectFacetForDomainObjectAnnotation.java | 67 --
...FacetForDomainObjectAnnotationAsConfigured.java | 30 -
.../PublishedObjectFacetFromConfiguration.java | 31 -
...atableObjectFacetForDomainObjectAnnotation.java | 73 --
...PolicyFacetForDomainObjectLayoutAnnotation.java | 46 -
.../BookmarkPolicyFacetForDomainObjectXml.java | 42 -
...arkPolicyFacetForViewModelLayoutAnnotation.java | 47 -
...lassFaFacetForDomainObjectLayoutAnnotation.java | 55 -
.../CssClassFaFacetForDomainObjectXml.java | 44 -
...ssClassFaFacetForViewModelLayoutAnnotation.java | 54 -
...sClassFacetForDomainObjectLayoutAnnotation.java | 57 -
.../CssClassFacetForDomainObjectXml.java | 42 -
.../CssClassFacetForViewModelLayoutAnnotation.java | 45 -
...ObjectLayoutAnnotationUsingCssClassUiEvent.java | 121 ---
...wModelLayoutAnnotationUsingCssClassUiEvent.java | 118 ---
...ibedAsFacetForDomainObjectLayoutAnnotation.java | 46 -
.../DescribedAsFacetForDomainObjectXml.java | 42 -
...scribedAsFacetForViewModelLayoutAnnotation.java | 47 -
.../DomainObjectLayoutFacetFactory.java | 113 --
...mainObjectLayoutAnnotationUsingIconUiEvent.java | 117 --
...aViewModelLayoutAnnotationUsingIconUiEvent.java | 118 ---
...inObjectLayoutAnnotationUsingLayoutUiEvent.java | 118 ---
...iewModelLayoutAnnotationUsingLayoutUiEvent.java | 117 --
.../NamedFacetForDomainObjectLayoutAnnotation.java | 47 -
.../NamedFacetForDomainObjectXml.java | 44 -
.../NamedFacetForViewModelLayoutAnnotation.java | 45 -
.../PagedFacetForDomainObjectLayoutAnnotation.java | 46 -
.../PagedFacetForViewModelLayoutAnnotation.java | 46 -
...PluralFacetForDomainObjectLayoutAnnotation.java | 47 -
.../PluralFacetForDomainObjectXml.java | 40 -
.../PluralFacetForViewModelLayoutAnnotation.java | 47 -
...ainObjectLayoutAnnotationUsingTitleUiEvent.java | 135 ---
...ViewModelLayoutAnnotationUsingTitleUiEvent.java | 135 ---
.../object/domainservice/DomainServiceFacet.java | 52 -
.../domainservice/DomainServiceFacetAbstract.java | 65 --
.../annotation/DomainServiceFacetAnnotation.java | 35 -
.../DomainServiceFacetAnnotationFactory.java | 153 ---
...conFacetDerivedFromDomainServiceAnnotation.java | 47 -
.../DomainServiceLayoutFacet.java | 36 -
.../DomainServiceLayoutFacetAbstract.java | 54 -
.../DomainServiceLayoutFacetFactory.java | 70 --
...NamedFacetForDomainServiceLayoutAnnotation.java | 36 -
.../DomainServiceLayoutFacetAnnotation.java | 34 -
.../facets/object/encodeable/EncodableFacet.java | 42 -
.../object/encodeable/EncodableFacetAbstract.java | 85 --
.../object/encodeable/EncoderDecoderUtil.java | 36 -
.../annotcfg/EncodableFacetFromConfiguration.java | 33 -
.../encoder/EncodableFacetUsingEncoderDecoder.java | 75 --
.../facets/object/entity/EntityFacet.java | 54 -
.../facets/object/facets/FacetsFacet.java | 48 -
.../facets/object/facets/FacetsFacetAbstract.java | 94 --
.../facets/annotation/FacetsFacetAnnotation.java | 32 -
.../annotation/FacetsFacetAnnotationFactory.java | 54 -
.../metamodel/facets/object/grid/GridFacet.java | 41 -
.../facets/object/grid/GridFacetDefault.java | 84 --
.../facets/object/grid/GridFacetFactory.java | 46 -
.../facets/object/hidden/HiddenObjectFacet.java | 55 -
.../object/hidden/HiddenObjectFacetAbstract.java | 50 -
.../hidden/method/HiddenObjectFacetViaMethod.java | 65 --
.../method/HiddenObjectFacetViaMethodFactory.java | 90 --
.../metamodel/facets/object/icon/IconFacet.java | 44 -
.../facets/object/icon/IconFacetAbstract.java | 36 -
.../facets/object/icon/method/IconFacetMethod.java | 52 -
.../object/icon/method/IconFacetMethodFactory.java | 53 -
.../RemoveAnnotatedMethodsFacetFactory.java | 99 --
...oveDatanucleusPersistableTypesFacetFactory.java | 67 --
.../RemoveDnPrefixedMethodsFacetFactory.java | 46 -
.../javalang/IteratorFilteringFacetFactory.java | 55 -
.../ignore/javalang/RemoveMethodsFacetFactory.java | 132 ---
.../jdo/RemoveJdoEnhancementTypesFacetFactory.java | 66 --
.../jdo/RemoveJdoPrefixedMethodsFacetFactory.java | 48 -
.../facets/object/immutable/ImmutableFacet.java | 69 --
.../object/immutable/ImmutableFacetAbstract.java | 60 --
.../CopyImmutableFacetOntoMembersFactory.java | 45 -
.../facets/object/layout/LayoutFacet.java | 37 -
.../facets/object/layout/LayoutFacetAbstract.java | 41 -
.../facets/object/layout/LayoutFacetFactory.java | 56 -
.../facets/object/layout/LayoutFacetFallback.java | 43 -
.../facets/object/layout/LayoutFacetMethod.java | 54 -
.../mixin/MetaModelValidatorForMixinTypes.java | 55 -
.../metamodel/facets/object/mixin/MixinFacet.java | 74 --
.../facets/object/mixin/MixinFacetAbstract.java | 143 ---
.../mixin/MixinFacetForDomainObjectAnnotation.java | 72 --
.../object/mixin/MixinFacetForMixinAnnotation.java | 64 --
.../mixin/MixinFacetForMixinAnnotationFactory.java | 64 --
.../object/navparent/NavigableParentFacet.java | 43 -
.../navparent/NavigableParentFacetAbstract.java | 36 -
.../NavigableParentAnnotationFacetFactory.java | 161 ---
.../method/NavigableParentFacetMethod.java | 60 --
.../object/objectspecid/ObjectSpecIdFacet.java | 33 -
.../objectspecid/ObjectSpecIdFacetAbstract.java | 66 --
.../ObjectSpecIdFacetDerivedFromClassName.java | 35 -
...jectSpecIdFacetDerivedFromClassNameFactory.java | 205 ----
...ectSpecIdFacetDerivedFromIoCNamingStrategy.java | 34 -
.../ObjectSpecIdFacetOnStandaloneList.java | 31 -
.../ObjectValidPropertiesFacet.java | 42 -
.../ObjectValidPropertiesFacetAbstract.java | 48 -
.../impl/ObjectValidPropertiesFacetImpl.java | 70 --
.../ObjectValidPropertiesFacetImplFactory.java | 35 -
.../metamodel/facets/object/paged/PagedFacet.java | 31 -
.../facets/object/paged/PagedFacetAbstract.java | 50 -
.../PagedFacetForPagedAnnotationOnType.java | 34 -
.../object/parented/ParentedCollectionFacet.java | 40 -
.../parented/ParentedCollectionFacetAbstract.java | 36 -
.../object/parseable/InvalidEntryException.java | 42 -
.../facets/object/parseable/ParseableFacet.java | 55 -
.../object/parseable/ParseableFacetAbstract.java | 90 --
.../facets/object/parseable/ParserUtil.java | 46 -
.../object/parseable/TextEntryParseException.java | 47 -
.../annotcfg/ParseableFacetFromConfiguration.java | 33 -
.../parser/ParseableFacetUsingParser.java | 132 ---
.../facets/object/plural/PluralFacet.java | 41 -
.../facets/object/plural/PluralFacetAbstract.java | 41 -
.../plural/inferred/PluralFacetInferred.java | 31 -
.../facets/object/projection/ProjectionFacet.java | 29 -
.../object/projection/ProjectionFacetAbstract.java | 42 -
.../ProjectionFacetFromProjectingProperty.java | 65 --
.../CssClassFacetDerivedFromProjectionFacet.java | 54 -
.../ident/IconFacetDerivedFromProjectionFacet.java | 52 -
.../TitleFacetDerivedFromProjectionFacet.java | 52 -
.../object/promptStyle/PromptStyleFacet.java | 33 -
.../promptStyle/PromptStyleFacetAbstract.java | 42 -
.../promptStyle/PromptStyleFacetAsConfigured.java | 45 -
.../PromptStyleFacetFallBackToInline.java | 37 -
.../publishedobject/PublishedObjectFacet.java | 30 -
.../PublishedObjectFacetAbstract.java | 38 -
...etOnCollectionDerivedFromRecreatableObject.java | 46 -
...CollectionDerivedFromViewModelFacetFactory.java | 54 -
...acetOnPropertyDerivedFromRecreatableObject.java | 48 -
...tyDerivedFromRecreatableObjectFacetFactory.java | 52 -
.../RecreatableObjectFacetAbstract.java | 129 ---
...ObjectFacetDeclarativeInitializingAbstract.java | 145 ---
.../recreatable/RecreatableObjectFacetFactory.java | 131 ---
...ctFacetForRecreatableDomainObjectInterface.java | 46 -
...eObjectFacetForRecreatableObjectAnnotation.java | 34 -
...leObjectFacetForRecreatableObjectInterface.java | 45 -
...creatableObjectFacetForViewModelAnnotation.java | 35 -
...ableObjectFacetForXmlRootElementAnnotation.java | 81 --
.../metamodel/facets/object/recreatable/Util.java | 33 -
.../metamodel/facets/object/title/TitleFacet.java | 55 -
.../facets/object/title/TitleFacetAbstract.java | 45 -
.../annotation/TitleAnnotationFacetFactory.java | 187 ----
.../annotation/TitleFacetViaTitleAnnotation.java | 169 ---
.../title/methods/TitleFacetViaMethodsFactory.java | 95 --
.../title/methods/TitleFacetViaTitleMethod.java | 93 --
.../title/methods/TitleFacetViaToStringMethod.java | 70 --
.../object/title/parser/TitleFacetUsingParser.java | 79 --
.../validateobject/ValidateObjectFacet.java | 55 -
.../ValidateObjectFacetAbstract.java | 49 -
.../method/ValidateObjectFacetMethod.java | 80 --
.../method/ValidateObjectFacetMethodFactory.java | 61 --
.../facets/object/value/EqualByContentFacet.java | 33 -
.../object/value/EqualByContentFacetAbstract.java | 36 -
.../EqualByContentFacetViaValueSemantics.java | 30 -
.../value/ImmutableFacetViaValueSemantics.java | 39 -
.../object/value/MaxLengthFacetUsingParser.java | 58 -
.../value/TypicalLengthFacetUsingParser.java | 53 -
.../metamodel/facets/object/value/ValueFacet.java | 35 -
.../facets/object/value/ValueFacetAbstract.java | 155 ---
.../facets/object/value/ValueFacetSimple.java | 37 -
.../value/annotcfg/ValueFacetAnnotation.java | 81 --
...ValueFacetAnnotationOrConfigurationFactory.java | 113 --
.../annotcfg/ValueFacetFromConfiguration.java | 38 -
.../vsp/ValueFacetUsingSemanticsProvider.java | 41 -
.../ValueFacetUsingSemanticsProviderFactory.java | 46 -
.../ValueSemanticsProviderAndFacetAbstract.java | 328 ------
.../value/vsp/ValueSemanticsProviderUtil.java | 67 --
.../facets/object/viewmodel/ViewModelFacet.java | 125 ---
.../facets/object/wizard/WizardFacet.java | 41 -
.../facets/object/wizard/WizardFacetAbstract.java | 36 -
.../facets/objectvalue/choices/ChoicesFacet.java | 49 -
.../objectvalue/choices/ChoicesFacetAbstract.java | 36 -
.../objectvalue/fileaccept/FileAcceptFacet.java | 35 -
.../fileaccept/FileAcceptFacetAbstract.java | 37 -
.../facets/objectvalue/labelat/LabelAtFacet.java | 36 -
.../objectvalue/labelat/LabelAtFacetAbstract.java | 56 -
.../LabelAtFacetInferredFromMultiLineFacet.java | 38 -
.../objectvalue/mandatory/MandatoryFacet.java | 57 -
.../mandatory/MandatoryFacetAbstract.java | 110 --
.../mandatory/MandatoryFacetDefault.java | 43 -
.../facets/objectvalue/maxlen/MaxLengthFacet.java | 41 -
.../objectvalue/maxlen/MaxLengthFacetAbstract.java | 75 --
.../objectvalue/multiline/MultiLineFacet.java | 51 -
.../multiline/MultiLineFacetAbstract.java | 63 --
.../MustSatisfySpecificationFacet.java | 27 -
.../MustSatisfySpecificationFacetAbstract.java | 124 ---
.../mustsatisfyspec/SpecificationEvaluator.java | 80 --
.../facets/objectvalue/regex/RegExFacet.java | 38 -
.../objectvalue/regex/RegExFacetAbstract.java | 104 --
.../renderedadjusted/RenderedAdjustedFacet.java | 39 -
.../RenderedAdjustedFacetAbstract.java | 56 -
.../objectvalue/typicallen/TypicalLengthFacet.java | 40 -
.../typicallen/TypicalLengthFacetAbstract.java | 45 -
.../ActionParameterAutoCompleteFacet.java | 47 -
.../ActionParameterAutoCompleteFacetAbstract.java | 41 -
.../facets/param/autocomplete/MinLengthUtil.java | 56 -
.../ActionParameterAutoCompleteFacetViaMethod.java | 121 ---
...ParameterAutoCompleteFacetViaMethodFactory.java | 88 --
...ameterFromJavaxValidationAnnotationFactory.java | 56 -
...rameterFromJavaxValidationDigitsAnnotation.java | 59 --
.../facets/param/choices/ActionChoicesFacet.java | 38 -
.../param/choices/ActionChoicesFacetAbstract.java | 36 -
.../param/choices/ActionParameterChoicesFacet.java | 42 -
.../ActionParameterChoicesFacetAbstract.java | 38 -
.../choices/ActionParameterChoicesFacetNone.java | 48 -
...rameterChoicesFacetDerivedFromChoicesFacet.java | 55 -
...ChoicesFacetDerivedFromChoicesFacetFactory.java | 55 -
.../method/ActionChoicesFacetViaMethod.java | 121 ---
.../method/ActionChoicesFacetViaMethodFactory.java | 100 --
.../ActionParameterChoicesFacetViaMethod.java | 108 --
...ctionParameterChoicesFacetViaMethodFactory.java | 99 --
.../defaults/ActionParameterDefaultsFacet.java | 41 -
.../ActionParameterDefaultsFacetAbstract.java | 36 -
...ParameterDefaultFacetDerivedFromTypeFacets.java | 60 --
...arameterDefaultFacetDerivedFromTypeFactory.java | 64 --
.../ActionParameterDefaultsFacetViaMethod.java | 117 --
...tionParameterDefaultsFacetViaMethodFactory.java | 134 ---
...ameterAnnotationElseDerivedFromTypeFactory.java | 55 -
...DescribedAsFacetOnParameterDerivedFromType.java | 32 -
.../disable/ActionParameterDisabledFacet.java | 41 -
.../ActionParameterDisabledFacetAbstract.java | 49 -
.../ActionParameterDisabledFacetViaMethod.java | 95 --
...tionParameterDisabledFacetViaMethodFactory.java | 94 --
.../param/hide/ActionParameterHiddenFacet.java | 42 -
.../hide/ActionParameterHiddenFacetAbstract.java | 55 -
.../ActionParameterHiddenFacetViaMethod.java | 82 --
...ActionParameterHiddenFacetViaMethodFactory.java | 91 --
.../CssClassFacetForParameterLayoutAnnotation.java | 46 -
...scribedAsFacetForParameterLayoutAnnotation.java | 46 -
.../LabelAtFacetForParameterLayoutAnnotation.java | 47 -
...MultiLineFacetForParameterLayoutAnnotation.java | 45 -
.../NamedFacetForParameterLayoutAnnotation.java | 51 -
.../param/layout/ParameterLayoutFacetFactory.java | 58 -
...dAdjustedFacetForParameterLayoutAnnotation.java | 58 -
...calLengthFacetForParameterLayoutAnnotation.java | 60 --
.../MandatoryFacetOnParametersDefaultFactory.java | 56 -
.../NamedFacetForParameterUsingReflection.java | 34 -
.../ParameterNameFacetFactoryUsingReflection.java | 74 --
.../parameter/ParameterAnnotationFacetFactory.java | 134 ---
.../FileAcceptFacetForParameterAnnotation.java | 47 -
.../MandatoryFacetForParameterAnnotation.java | 81 --
...cetInvertedByNullableAnnotationOnParameter.java | 59 --
.../MaxLengthFacetForParameterAnnotation.java | 46 -
...fySpecificationFacetForParameterAnnotation.java | 69 --
.../regex/RegExFacetForParameterAnnotation.java | 72 --
.../RegExFacetForPatternAnnotationOnParameter.java | 66 --
.../TypicalLengthFacetOnParameterAnnotation.java | 50 -
...picalLengthFacetOnParameterDerivedFromType.java | 49 -
...acetOnParameterDerivedFromTypeFacetFactory.java | 56 -
.../validate/ActionParameterValidationFacet.java | 45 -
.../ActionParameterValidationFacetAbstract.java | 47 -
.../ActionParameterValidationFacetViaMethod.java | 84 --
...onParameterValidationFacetViaMethodFactory.java | 82 --
.../PropertyOrCollectionAccessorFacet.java | 53 -
.../PropertyOrCollectionAccessorFacetAbstract.java | 57 -
.../propcoll/notpersisted/NotPersistedFacet.java | 38 -
.../notpersisted/NotPersistedFacetAbstract.java | 36 -
.../accessor/PropertyAccessorFacetViaAccessor.java | 96 --
.../PropertyAccessorFacetViaAccessorFactory.java | 113 --
.../autocomplete/PropertyAutoCompleteFacet.java | 51 -
.../PropertyAutoCompleteFacetAbstract.java | 39 -
.../method/PropertyAutoCompleteFacetMethod.java | 114 --
.../PropertyAutoCompleteFacetMethodFactory.java | 79 --
...ropertyFromJavaxValidationDigitsAnnotation.java | 60 --
...FromJavaxValidationDigitsAnnotationFactory.java | 59 --
.../properties/businesskey/BusinessKeyFacet.java | 36 -
.../businesskey/BusinessKeyFacetAbstract.java | 36 -
.../properties/choices/PropertyChoicesFacet.java | 50 -
.../choices/PropertyChoicesFacetAbstract.java | 36 -
...ropertyChoicesFacetDerivedFromChoicesFacet.java | 52 -
...ChoicesFacetDerivedFromChoicesFacetFactory.java | 45 -
.../method/PropertyChoicesFacetViaMethod.java | 93 --
.../PropertyChoicesFacetViaMethodFactory.java | 77 --
.../properties/defaults/PropertyDefaultFacet.java | 46 -
.../defaults/PropertyDefaultFacetAbstract.java | 36 -
.../defaults/PropertyDefaultFacetNone.java | 44 -
...pertyDefaultFacetDerivedFromDefaultedFacet.java | 57 -
...PropertyDefaultFacetDerivedFromTypeFactory.java | 64 --
.../method/PropertyDefaultFacetViaMethod.java | 88 --
.../PropertyDefaultFacetViaMethodFactory.java | 77 --
...isabledFacetOnPropertyDerivedFromImmutable.java | 38 -
...FacetOnPropertyDerivedFromImmutableFactory.java | 52 -
.../inferred/DisabledFacetOnPropertyInferred.java | 32 -
.../DisabledFacetOnPropertyInferredFactory.java | 56 -
.../MandatoryFacetOnProperyDefaultFactory.java | 57 -
.../MultiLineFacetOnPropertyAnnotation.java | 35 -
.../properties/projection/ProjectingFacet.java | 30 -
.../projection/ProjectingFacetAbstract.java | 41 -
.../ProjectingFacetFromPropertyAnnotation.java | 70 --
.../property/PropertyAnnotationFacetFactory.java | 377 -------
.../command/CommandFacetForPropertyAnnotation.java | 99 --
...mandFacetForPropertyAnnotationAsConfigured.java | 37 -
.../DisabledFacetForPropertyAnnotation.java | 65 --
...acetForPropertyAnnotationInvertedSemantics.java | 32 -
.../FileAcceptFacetForPropertyAnnotation.java | 47 -
.../hidden/HiddenFacetForPropertyAnnotation.java | 56 -
.../MandatoryFacetForPropertyAnnotation.java | 90 --
...acetInvertedByNullableAnnotationOnProperty.java | 61 --
.../MaxLengthFacetForPropertyAnnotation.java | 46 -
...ropertyClearFacetForDomainEventFromDefault.java | 41 -
...rFacetForDomainEventFromPropertyAnnotation.java | 41 -
.../property/modify/PropertyDomainEventFacet.java | 33 -
.../modify/PropertyDomainEventFacetAbstract.java | 167 ---
.../modify/PropertyDomainEventFacetDefault.java | 40 -
...pertyDomainEventFacetForPropertyAnnotation.java | 40 -
...opertySetterFacetForDomainEventFromDefault.java | 42 -
...rFacetForDomainEventFromPropertyAnnotation.java | 41 -
...tySetterOrClearFacetForDomainEventAbstract.java | 340 ------
.../facets/properties/property/modify/Utils.java | 23 -
...sfySpecificationFacetForPropertyAnnotation.java | 66 --
.../NotPersistedFacetForPropertyAnnotation.java | 46 -
...ublishedPropertyFacetForPropertyAnnotation.java | 79 --
...ertyFacetForPropertyAnnotationAsConfigured.java | 27 -
.../PublishedPropertyFacetFromConfiguration.java | 31 -
.../RegExFacetForPatternAnnotationOnProperty.java | 76 --
.../regex/RegExFacetForPropertyAnnotation.java | 70 --
.../CssClassFacetForPropertyLayoutAnnotation.java | 47 -
.../CssClassFacetForPropertyXml.java | 42 -
...escribedAsFacetForPropertyLayoutAnnotation.java | 47 -
.../DescribedAsFacetForPropertyXml.java | 42 -
.../HiddenFacetForPropertyLayoutAnnotation.java | 56 -
.../propertylayout/HiddenFacetForPropertyXml.java | 51 -
.../LabelAtFacetForPropertyLayoutAnnotation.java | 47 -
.../propertylayout/LabelAtFacetForPropertyXml.java | 42 -
.../MultiLineFacetForPropertyLayoutAnnotation.java | 46 -
.../MultiLineFacetForPropertyXml.java | 41 -
.../NamedFacetForPropertyLayoutAnnotation.java | 51 -
.../propertylayout/NamedFacetForPropertyXml.java | 47 -
...romptStyleFacetForPropertyLayoutAnnotation.java | 96 --
.../PromptStyleFacetForPropertyXml.java | 57 -
.../propertylayout/PropertyLayoutFacetFactory.java | 194 ----
...edAdjustedFacetForPropertyLayoutAnnotation.java | 58 -
.../RenderedAdjustedFacetForPropertyXml.java | 45 -
...icalLengthFacetForPropertyLayoutAnnotation.java | 60 --
.../TypicalLengthFacetForPropertyXml.java | 56 -
...UnchangingFacetForPropertyLayoutAnnotation.java | 59 --
.../UnchangingFacetForPropertyXml.java | 42 -
.../properties/publish/PublishedPropertyFacet.java | 29 -
.../publish/PublishedPropertyFacetAbstract.java | 38 -
...nderedAsDayBeforeFacetAnnotationOnProperty.java | 38 -
.../renderunchanged/UnchangingFacet.java | 30 -
.../renderunchanged/UnchangingFacetAbstract.java | 36 -
.../properties/searchable/SearchableFacet.java | 49 -
.../searchable/SearchableFacetAbstract.java | 51 -
.../TypicalLengthFacetOnPropertyAnnotation.java | 50 -
...ypicalLengthFacetOnPropertyDerivedFromType.java | 49 -
...FacetOnPropertyDerivedFromTypeFacetFactory.java | 55 -
.../update/NotPersistableFacetInferred.java | 31 -
.../update/PropertyModifyFacetFactory.java | 68 --
.../update/PropertySetAndClearFacetFactory.java | 122 ---
.../update/clear/PropertyClearFacet.java | 43 -
.../update/clear/PropertyClearFacetAbstract.java | 35 -
.../clear/PropertyClearFacetViaClearMethod.java | 74 --
.../clear/PropertyClearFacetViaSetterMethod.java | 75 --
.../update/init/PropertyInitializationFacet.java | 48 -
.../init/PropertyInitializationFacetAbstract.java | 35 -
...PropertyInitializationFacetViaSetterMethod.java | 70 --
.../update/modify/PropertySetterFacet.java | 49 -
.../update/modify/PropertySetterFacetAbstract.java | 35 -
.../modify/PropertySetterFacetViaModifyMethod.java | 81 --
.../modify/PropertySetterFacetViaSetterMethod.java | 76 --
.../validating/PropertyValidateFacet.java | 50 -
.../validating/PropertyValidateFacetAbstract.java | 57 -
.../validating/PropertyValidateFacetNone.java | 47 -
.../dflt/PropertyValidateFacetDefault.java | 49 -
.../dflt/PropertyValidateFacetDefaultFactory.java | 58 -
.../method/PropertyValidateFacetViaMethod.java | 83 --
.../PropertyValidateFacetViaMethodFactory.java | 76 --
.../DateAndTimeValueSemanticsProviderAbstract.java | 116 --
.../isis/metamodel/facets/value/JodaFunctions.java | 43 -
.../ValueSemanticsProviderAbstractTemporal.java | 373 -------
.../value/bigdecimal/BigDecimalValueFacet.java | 60 --
.../bigdecimal/BigDecimalValueFacetAbstract.java | 37 -
...malValueFacetUsingSemanticsProviderFactory.java | 44 -
.../BigDecimalValueSemanticsProvider.java | 143 ---
.../value/biginteger/BigIntegerValueFacet.java | 26 -
...gerValueFacetUsingSemanticsProviderFactory.java | 43 -
.../BigIntegerValueSemanticsProvider.java | 110 --
.../facets/value/blobs/BlobValueFacet.java | 26 -
...lobValueFacetUsingSemanticsProviderFactory.java | 41 -
.../value/blobs/BlobValueSemanticsProvider.java | 123 ---
...iveValueFacetUsingSemanticsProviderFactory.java | 42 -
.../BooleanPrimitiveValueSemanticsProvider.java | 55 -
.../facets/value/booleans/BooleanValueFacet.java | 29 -
.../BooleanValueSemanticsProviderAbstract.java | 129 ---
...perValueFacetUsingSemanticsProviderFactory.java | 42 -
.../BooleanWrapperValueSemanticsProvider.java | 69 --
...iveValueFacetUsingSemanticsProviderFactory.java | 42 -
.../bytes/BytePrimitiveValueSemanticsProvider.java | 52 -
.../facets/value/bytes/ByteValueFacet.java | 30 -
.../bytes/ByteValueSemanticsProviderAbstract.java | 116 --
...perValueFacetUsingSemanticsProviderFactory.java | 42 -
.../bytes/ByteWrapperValueSemanticsProvider.java | 41 -
...iveValueFacetUsingSemanticsProviderFactory.java | 42 -
.../chars/CharPrimitiveValueSemanticsProvider.java | 54 -
.../facets/value/chars/CharValueFacet.java | 30 -
.../chars/CharValueSemanticsProviderAbstract.java | 103 --
...perValueFacetUsingSemanticsProviderFactory.java | 42 -
.../chars/CharWrapperValueSemanticsProvider.java | 41 -
.../facets/value/clobs/ClobValueFacet.java | 26 -
...lobValueFacetUsingSemanticsProviderFactory.java | 42 -
.../value/clobs/ClobValueSemanticsProvider.java | 117 --
.../facets/value/date/DateValueFacet.java | 33 -
.../date/DateValueSemanticsProviderAbstract.java | 121 ---
.../value/datejdk8local/Jdk8LocalDateUtil.java | 170 ---
.../datejdk8local/Jdk8LocalDateValueFacet.java | 33 -
...ateValueFacetUsingSemanticsProviderFactory.java | 45 -
.../Jdk8LocalDateValueSemanticsProvider.java | 257 -----
.../facets/value/datejdk8local/TimeFormatter.java | 27 -
.../facets/value/datejdk8local/TimeParser.java | 27 -
.../value/datejodalocal/JodaLocalDateUtil.java | 130 ---
.../datejodalocal/JodaLocalDateValueFacet.java | 33 -
...ateValueFacetUsingSemanticsProviderFactory.java | 45 -
.../JodaLocalDateValueSemanticsProvider.java | 257 -----
...ateValueFacetUsingSemanticsProviderFactory.java | 45 -
.../datesql/JavaSqlDateValueSemanticsProvider.java | 98 --
.../datetimejdk8local/Jdk8LocalDateTimeUtil.java | 157 ---
.../Jdk8LocalDateTimeValueFacet.java | 33 -
...imeValueFacetUsingSemanticsProviderFactory.java | 45 -
.../Jdk8LocalDateTimeValueSemanticsProvider.java | 275 -----
.../value/datetimejdk8local/TimeFormatter.java | 27 -
.../facets/value/datetimejdk8local/TimeParser.java | 27 -
.../Jdk8OffsetDateTimeValueFacet.java | 33 -
...imeValueFacetUsingSemanticsProviderFactory.java | 45 -
.../Jdk8OffsetDateTimeValueSemanticsProvider.java | 103 --
...fsetDateTimeValueSemanticsProviderAbstract.java | 121 ---
.../value/datetimejoda/JodaDateTimeValueFacet.java | 33 -
...imeValueFacetUsingSemanticsProviderFactory.java | 45 -
.../JodaDateTimeValueSemanticsProvider.java | 103 --
...JodaDateTimeValueSemanticsProviderAbstract.java | 121 ---
.../datetimejodalocal/JodaLocalDateTimeUtil.java | 127 ---
.../JodaLocalDateTimeValueFacet.java | 33 -
...imeValueFacetUsingSemanticsProviderFactory.java | 45 -
.../JodaLocalDateTimeValueSemanticsProvider.java | 259 -----
...ateValueFacetUsingSemanticsProviderFactory.java | 46 -
.../JavaUtilDateValueSemanticsProvider.java | 85 --
.../doubles/DoubleFloatingPointValueFacet.java | 30 -
...iveValueFacetUsingSemanticsProviderFactory.java | 42 -
.../DoublePrimitiveValueSemanticsProvider.java | 54 -
.../DoubleValueSemanticsProviderAbstract.java | 120 ---
...perValueFacetUsingSemanticsProviderFactory.java | 42 -
.../DoubleWrapperValueSemanticsProvider.java | 42 -
...iveValueFacetUsingSemanticsProviderFactory.java | 42 -
.../FloatPrimitiveValueSemanticsProvider.java | 54 -
.../FloatValueSemanticsProviderAbstract.java | 116 --
...perValueFacetUsingSemanticsProviderFactory.java | 42 -
.../floats/FloatWrapperValueSemanticsProvider.java | 41 -
.../value/floats/FloatingPointValueFacet.java | 30 -
.../facets/value/image/ImageValueFacet.java | 34 -
...ageValueFacetUsingSemanticsProviderFactory.java | 43 -
.../value/image/ImageValueSemanticsProvider.java | 100 --
.../image/ImageValueSemanticsProviderAbstract.java | 298 ------
...ageValueFacetUsingSemanticsProviderFactory.java | 44 -
.../JavaAwtImageValueSemanticsProvider.java | 83 --
...iveValueFacetUsingSemanticsProviderFactory.java | 42 -
.../IntPrimitiveValueSemanticsProvider.java | 54 -
.../integer/IntValueSemanticsProviderAbstract.java | 114 --
...perValueFacetUsingSemanticsProviderFactory.java | 42 -
.../integer/IntWrapperValueSemanticsProvider.java | 41 -
.../facets/value/integer/IntegerValueFacet.java | 30 -
.../localrespath/LocalResourcePathValueFacet.java | 32 -
...athValueFacetUsingSemanticsProviderFactory.java | 44 -
.../LocalResourcePathValueSemanticsProvider.java | 130 ---
...iveValueFacetUsingSemanticsProviderFactory.java | 42 -
.../longs/LongPrimitiveValueSemanticsProvider.java | 52 -
.../facets/value/longs/LongValueFacet.java | 30 -
.../longs/LongValueSemanticsProviderAbstract.java | 113 --
...perValueFacetUsingSemanticsProviderFactory.java | 42 -
.../longs/LongWrapperValueSemanticsProvider.java | 41 -
.../facets/value/markup/MarkupValueFacet.java | 30 -
...kupValueFacetUsingSemanticsProviderFactory.java | 38 -
.../value/markup/MarkupValueSemanticsProvider.java | 114 --
.../facets/value/password/PasswordValueFacet.java | 33 -
...ordValueFacetUsingSemanticsProviderFactory.java | 43 -
.../password/PasswordValueSemanticsProvider.java | 119 ---
...iveValueFacetUsingSemanticsProviderFactory.java | 42 -
.../ShortPrimitiveValueSemanticsProvider.java | 52 -
.../facets/value/shortint/ShortValueFacet.java | 30 -
.../ShortValueSemanticsProviderAbstract.java | 115 --
...perValueFacetUsingSemanticsProviderFactory.java | 42 -
.../ShortWrapperValueSemanticsProvider.java | 41 -
.../facets/value/string/StringValueFacet.java | 31 -
...ingValueFacetUsingSemanticsProviderFactory.java | 42 -
.../value/string/StringValueSemanticsProvider.java | 126 ---
.../time/TimeValueSemanticsProviderAbstract.java | 110 --
.../JodaLocalTimeValueFacetSimpleFactory.java | 46 -
...imeValueFacetUsingSemanticsProviderFactory.java | 46 -
.../timesql/JavaSqlTimeValueSemanticsProvider.java | 95 --
...ampValueFacetUsingSemanticsProviderFactory.java | 47 -
.../JavaSqlTimeStampValueSemanticsProvider.java | 84 --
.../TimeStampValueSemanticsProviderAbstract.java | 101 --
.../facets/value/treenode/TreeNodeValueFacet.java | 27 -
...odeValueFacetUsingSemanticsProviderFactory.java | 40 -
.../treenode/TreeNodeValueSemanticsProvider.java | 136 ---
.../metamodel/facets/value/url/URLValueFacet.java | 31 -
...URLValueFacetUsingSemanticsProviderFactory.java | 44 -
.../value/url/URLValueSemanticsProvider.java | 127 ---
.../facets/value/uuid/UUIDValueFacet.java | 33 -
...UIDValueFacetUsingSemanticsProviderFactory.java | 44 -
.../value/uuid/UUIDValueSemanticsProvider.java | 112 --
.../isis/metamodel/interactions/AccessContext.java | 42 -
.../interactions/ActionArgUsabilityContext.java | 76 --
.../interactions/ActionArgValidityContext.java | 68 --
.../interactions/ActionArgVisibilityContext.java | 76 --
.../interactions/ActionInteractionContext.java | 31 -
.../interactions/ActionUsabilityContext.java | 60 --
.../interactions/ActionValidityContext.java | 64 --
.../interactions/ActionVisibilityContext.java | 60 --
.../interactions/CollectionAccessContext.java | 48 -
.../interactions/CollectionAddToContext.java | 56 -
.../interactions/CollectionRemoveFromContext.java | 58 -
.../interactions/CollectionUsabilityContext.java | 48 -
.../interactions/CollectionVisibilityContext.java | 50 -
.../interactions/DisablingInteractionAdvisor.java | 46 -
.../interactions/HidingInteractionAdvisor.java | 47 -
.../interactions/InteractionAdvisorFacet.java | 45 -
.../metamodel/interactions/InteractionContext.java | 171 ---
.../metamodel/interactions/InteractionUtils.java | 81 --
.../metamodel/interactions/ObjectTitleContext.java | 56 -
.../interactions/ObjectValidityContext.java | 53 -
.../interactions/ObjectVisibilityContext.java | 55 -
.../metamodel/interactions/ParseValueContext.java | 59 --
.../interactions/PropertyAccessContext.java | 60 --
.../interactions/PropertyModifyContext.java | 61 --
.../interactions/PropertyUsabilityContext.java | 50 -
.../interactions/PropertyVisibilityContext.java | 50 -
.../metamodel/interactions/ProposedHolder.java | 38 -
.../metamodel/interactions/UsabilityContext.java | 55 -
.../interactions/ValidatingInteractionAdvisor.java | 51 -
.../metamodel/interactions/ValidityContext.java | 42 -
.../metamodel/interactions/VisibilityContext.java | 54 -
.../isis/metamodel/layout/DeweyOrderSet.java | 404 -------
.../MemberIdentifierComparator.java | 44 -
.../memberorderfacet/MemberOrderComparator.java | 90 --
.../MemberOrderFacetComparator.java | 56 -
.../OrderSetGroupNameComparator.java | 55 -
.../metamodel/objectmanager/ObjectManager.java | 107 --
.../objectmanager/ObjectManagerDefault.java | 77 --
.../objectmanager/create/ObjectCreator.java | 82 --
.../create/ObjectCreator_builtinHandlers.java | 386 -------
.../objectmanager/identify/ObjectIdentifier.java | 63 --
.../identify/ObjectIdentifier_builtinHandlers.java | 139 ---
.../metamodel/objectmanager/load/ObjectLoader.java | 80 --
.../load/ObjectLoader_builtinHandlers.java | 259 -----
.../objectmanager/refresh/ObjectRefresher.java | 67 --
.../refresh/ObjectRefresher_builtinHandlers.java | 107 --
...arameterChoicesFacetFromParentedCollection.java | 76 --
...meterDefaultsFacetFromAssociatedCollection.java | 64 --
.../param/DeriveFacetsPostProcessor.java | 633 -----------
.../ObjectSpecificationPostProcessor.java | 28 -
.../isis/metamodel/progmodel/ProgrammingModel.java | 179 ----
.../progmodel/ProgrammingModelAbstract.java | 253 -----
.../progmodel/ProgrammingModelInitFilter.java | 81 --
.../ProgrammingModelInitFilterDefault.java | 86 --
.../progmodel/ProgrammingModelService.java | 32 -
.../dflt/ProgrammingModelFacetsJava8.java | 388 -------
.../isis/metamodel/services/CollectionHelper.java | 100 --
.../metamodel/services/ServiceInjectorDefault.java | 75 --
.../metamodel/services/ServiceInjectorLegacy.java | 286 -----
.../isis/metamodel/services/ServiceUtil.java | 41 -
.../services/appfeat/ApplicationFeature.java | 324 ------
.../appfeat/ApplicationFeatureFactory.java | 45 -
.../services/appfeat/ApplicationFeatureId.java | 492 ---------
.../ApplicationFeatureRepositoryDefault.java | 555 ----------
.../services/appfeat/ApplicationFeatureType.java | 102 --
.../classsubstitutor/ClassSubstitutor.java | 28 -
.../classsubstitutor/ClassSubstitutorAbstract.java | 137 ---
.../classsubstitutor/ClassSubstitutorDefault.java | 76 --
.../ClassSubstitutorForCollections.java | 66 --
.../classsubstitutor/ClassSubstitutorRegistry.java | 80 --
.../command/CommandDtoServiceInternal.java | 71 --
.../services/container/query/QueryCardinality.java | 31 -
.../metamodel/services/devutils/MemberType.java | 25 -
.../services/events/MetamodelEventService.java | 94 --
.../events/MetamodelEventSupport_Spring.java | 77 --
.../exceprecog/ExceptionRecognizerDocDefault.java | 88 --
.../services/grid/GridLoaderServiceDefault.java | 257 -----
.../services/grid/GridReaderUsingJaxb.java | 76 --
.../services/grid/GridServiceDefault.java | 209 ----
.../services/grid/GridSystemServiceAbstract.java | 699 ------------
.../grid/bootstrap3/GridSystemServiceBS3.java | 674 ------------
.../services/homepage/HomePageAction.java | 63 --
.../services/homepage/HomePageResolverService.java | 35 -
.../metamodel/services/homepage/package-info.java | 26 -
.../ixn/InteractionDtoServiceInternal.java | 51 -
.../services/layout/LayoutServiceDefault.java | 147 ---
.../services/message/MessageServiceNoop.java | 88 --
.../services/metamodel/DomainMemberDefault.java | 301 ------
.../services/metamodel/DomainModelDefault.java | 58 -
.../services/metamodel/MetaModelExportSupport.java | 31 -
.../services/metamodel/MetaModelExporter.java | 570 ----------
.../metamodel/MetaModelServiceDefault.java | 272 -----
.../isis/metamodel/services/metamodel/Util.java | 35 -
.../publishing/PublisherDispatchService.java | 46 -
.../services/registry/ServiceRegistryDefault.java | 103 --
.../services/registry/SpringContextProvider.java | 23 -
.../services/title/TitleServiceDefault.java | 83 --
.../title/TitlesAndTranslationsValidator.java | 166 ---
.../services/user/UserServiceDefault.java | 177 ----
.../org/apache/isis/metamodel/spec/ActionType.java | 41 -
.../isis/metamodel/spec/DefaultProvider.java | 31 -
.../org/apache/isis/metamodel/spec/Described.java | 35 -
.../isis/metamodel/spec/DomainModelException.java | 47 -
.../spec/ElementSpecificationProvider.java | 44 -
.../apache/isis/metamodel/spec/EntityState.java | 49 -
.../isis/metamodel/spec/FreeStandingList.java | 96 --
.../apache/isis/metamodel/spec/Hierarchical.java | 65 --
.../metamodel/spec/InjectorMethodEvaluator.java | 31 -
.../apache/isis/metamodel/spec/ManagedObject.java | 734 -------------
.../spec/ObjectInstantiationException.java | 41 -
.../apache/isis/metamodel/spec/ObjectSpecId.java | 62 --
.../isis/metamodel/spec/ObjectSpecification.java | 443 --------
.../spec/ObjectSpecificationException.java | 36 -
.../apache/isis/metamodel/spec/Specification.java | 50 -
.../isis/metamodel/spec/feature/Contributed.java | 31 -
.../isis/metamodel/spec/feature/CurrentHolder.java | 46 -
.../spec/feature/MutableCurrentHolder.java | 64 --
.../isis/metamodel/spec/feature/ObjectAction.java | 589 -----------
.../spec/feature/ObjectActionContainer.java | 80 --
.../spec/feature/ObjectActionParameter.java | 235 ----
.../metamodel/spec/feature/ObjectAssociation.java | 253 -----
.../spec/feature/ObjectAssociationContainer.java | 72 --
.../isis/metamodel/spec/feature/ObjectFeature.java | 79 --
.../isis/metamodel/spec/feature/ObjectMember.java | 227 ----
.../spec/feature/OneToManyActionParameter.java | 28 -
.../spec/feature/OneToManyAssociation.java | 101 --
.../metamodel/spec/feature/OneToManyFeature.java | 40 -
.../spec/feature/OneToOneActionParameter.java | 28 -
.../spec/feature/OneToOneAssociation.java | 53 -
.../metamodel/spec/feature/OneToOneFeature.java | 28 -
.../isis/metamodel/specloader/CollectionUtils.java | 61 --
.../specloader/InjectorMethodEvaluatorDefault.java | 91 --
.../specloader/ProgrammingModelServiceDefault.java | 104 --
.../specloader/ReflectiveActionException.java | 43 -
.../specloader/SpecificationCacheDefault.java | 134 ---
.../metamodel/specloader/SpecificationLoader.java | 137 ---
.../specloader/SpecificationLoaderDefault.java | 521 ---------
.../SpecificationLoaderDefault_debug.java | 79 --
.../specloader/classsubstitutor/ProxyEnhanced.java | 28 -
.../specloader/facetprocessor/FacetProcessor.java | 486 ---------
.../isis/metamodel/specloader/package-info.java | 43 -
.../specloader/postprocessor/PostProcessor.java | 59 --
.../specloader/specimpl/ContributeeMember.java | 67 --
.../specloader/specimpl/FacetedMethodsBuilder.java | 614 -----------
.../metamodel/specloader/specimpl/Factories.java | 96 --
.../specloader/specimpl/IntrospectionState.java | 47 -
.../specloader/specimpl/MixedInMember.java | 40 -
.../specimpl/ObjectActionContributee.java | 253 -----
.../specloader/specimpl/ObjectActionDefault.java | 688 ------------
.../specloader/specimpl/ObjectActionMixedIn.java | 260 -----
.../specimpl/ObjectActionParameterAbstract.java | 492 ---------
.../specimpl/ObjectActionParameterContributee.java | 25 -
.../ObjectActionParameterContributeeAbstract.java | 93 --
.../specimpl/ObjectActionParameterMixedIn.java | 25 -
.../ObjectActionParameterMixedInAbstract.java | 85 --
.../specimpl/ObjectAssociationAbstract.java | 97 --
.../specloader/specimpl/ObjectMemberAbstract.java | 409 -------
.../specimpl/ObjectSpecificationAbstract.java | 1118 -------------------
.../OneToManyActionParameterContributee.java | 43 -
.../specimpl/OneToManyActionParameterDefault.java | 43 -
.../specimpl/OneToManyActionParameterMixedIn.java | 40 -
.../specimpl/OneToManyAssociationContributee.java | 191 ----
.../specimpl/OneToManyAssociationDefault.java | 288 -----
.../specimpl/OneToManyAssociationMixedIn.java | 221 ----
.../OneToOneActionParameterContributee.java | 38 -
.../specimpl/OneToOneActionParameterDefault.java | 37 -
.../specimpl/OneToOneActionParameterMixedIn.java | 35 -
.../specimpl/OneToOneAssociationContributee.java | 174 ---
.../specimpl/OneToOneAssociationDefault.java | 361 -------
.../specimpl/OneToOneAssociationMixedIn.java | 206 ----
.../metamodel/specloader/specimpl/Predicates.java | 168 ---
.../isis/metamodel/specloader/specimpl/Utils.java | 103 --
.../specimpl/dflt/ObjectSpecificationDefault.java | 456 --------
.../CollectionFacetOnStandaloneList.java | 73 --
.../DescribedAsFacetOnStandaloneList.java | 31 -
.../standalonelist/NamedFacetOnStandaloneList.java | 31 -
.../ObjectSpecificationOnStandaloneList.java | 186 ----
.../PluralFacetOnStandaloneList.java | 31 -
.../traverser/TypeExtractorAbstract.java | 84 --
.../traverser/TypeExtractorMethodParameters.java | 60 --
.../traverser/TypeExtractorMethodReturn.java | 47 -
.../validator/MetaModelInvalidException.java | 33 -
.../specloader/validator/MetaModelValidator.java | 44 -
.../validator/MetaModelValidatorAbstract.java | 69 --
...etaModelValidatorForConflictingOptionality.java | 62 --
.../MetaModelValidatorForDeprecatedAbstract.java | 68 --
.../MetaModelValidatorForDeprecatedAnnotation.java | 54 -
...etaModelValidatorForDeprecatedMethodPrefix.java | 52 -
.../MetaModelValidatorForValidationFailures.java | 23 -
.../validator/MetaModelValidatorVisiting.java | 111 --
.../specloader/validator/ValidationFailure.java | 61 --
.../specloader/validator/ValidationFailures.java | 112 --
.../isis/metamodel/util/DeweyOrderComparator.java | 37 -
.../org/apache/isis/metamodel/util/EventUtil.java | 43 -
.../isis/metamodel/util/pchain/ParentChain.java | 83 --
.../metamodel/util/pchain/ParentChainDefault.java | 49 -
.../isis/metamodel/util/snapshot/Helper.java | 91 --
.../isis/metamodel/util/snapshot/IsisSchema.java | 181 ----
.../apache/isis/metamodel/util/snapshot/Place.java | 65 --
.../isis/metamodel/util/snapshot/XmlSchema.java | 648 ------------
.../isis/metamodel/util/snapshot/XmlSnapshot.java | 916 ----------------
.../isis/metamodel/util/snapshot/XsMetaModel.java | 337 ------
.../metamodel/valuetypes/ValueTypeDefinition.java | 45 -
.../metamodel/valuetypes/ValueTypeProvider.java | 34 -
.../valuetypes/ValueTypeProviderDefault.java | 55 -
.../ValueTypeProviderForCollections.java | 56 -
.../metamodel/valuetypes/ValueTypeRegistry.java | 96 --
.../metamodel/MetaModelContext_configTest.java | 77 ++
.../metamodel/MetaModelContext_forTesting.java | 256 +++++
.../core/metamodel/ServiceInjector_forTesting.java | 70 ++
.../core/metamodel/ServiceRegistry_forTesting.java | 154 +++
.../oid/CollectionOidTest_valueSemantics.java | 47 +
.../adapter/oid/OidMarshallerTest_marshall.java | 50 +
.../oid/OidMarshallerTest_roundtripping.java | 59 ++
.../adapter/oid/OidMarshallerTest_unmarshal.java | 154 +++
.../core/metamodel/adapter/oid/OidVersionTest.java | 70 ++
...dDefaultTest_valueSemantics_whenPersistent.java | 45 +
...idDefaultTest_valueSemantics_whenTransient.java | 46 +
.../metamodel/adapter/oid/RootOidTest_create.java | 62 ++
.../core/metamodel/commons/IoUtils_CopyTest.java | 136 +++
.../commons/JavaClassUtilsTest_getBuiltIn.java | 41 +
.../metamodel/commons/ListUtilsTest_adjust.java | 67 ++
.../metamodel/commons/ListUtilsTest_insert.java | 84 ++
.../commons/ListUtilsTest_mutableCopy.java | 89 ++
.../core/metamodel/commons/LocaleUtilsTest.java | 36 +
.../isis/core/metamodel/commons/NameUtilTest.java | 68 ++
.../isis/core/metamodel/commons/PrintLocale.java | 59 ++
.../commons/StringUtilsTest_enumTitle.java | 41 +
.../commons/StringUtils_NaturalNameTest.java | 59 ++
.../commons/StringUtils_NaturalizeTest.java | 49 +
.../commons/StringUtils_NormalizedTest.java | 65 ++
.../StringUtils_RemoveLeadingWhiteSpace.java | 51 +
.../commons/StringUtils_SplitOnCommas.java | 80 ++
.../commons/StringUtils_StripLeadingSlashTest.java | 49 +
.../commons/StringUtils_StripNewLinesTest.java | 59 ++
.../commons/StringUtils_camelLowerFirst.java | 38 +
.../commons/StringUtils_toLineSeparated.java | 52 +
.../commons/StringUtils_toLowerDashed.java | 36 +
.../metamodel/commons/TypesTest_filteredList.java | 71 ++
.../metamodel/commons/matchers/IsisMatchers.java | 73 ++
.../matchers/IsisMatchers_NonEmptyStringTest.java | 53 +
.../metamodel/consent/InteractionResultTest.java | 85 ++
.../core/metamodel/facetapi/FacetAbstractTest.java | 76 ++
.../facetapi/FeatureTypeTest_identifierFor.java | 85 ++
.../facets/AbstractFacetFactoryJUnit4TestCase.java | 159 +++
.../metamodel/facets/AbstractFacetFactoryTest.java | 169 +++
.../core/metamodel/facets/AnnotationsTest.java | 71 ++
.../Annotations_getAnnotations_on_Class_Test.java | 248 +++++
.../Annotations_getAnnotations_on_Field_Test.java | 203 ++++
.../Annotations_getAnnotations_on_Method_Test.java | 184 ++++
...notations_getAnnotations_on_Parameter_Test.java | 200 ++++
.../core/metamodel/facets/CollectionUtilsTest.java | 123 +++
...nEventHelperTest_newActionInteractionEvent.java | 87 ++
...HelperTest_newCollectionDomainEvent_forAdd.java | 84 ++
...perTest_newCollectionDomainEvent_forRemove.java | 84 ++
...HelperTest_newPropertyDomainEvent_forClear.java | 76 ++
...elperTest_newPropertyDomainEvent_forModify.java | 72 ++
.../metamodel/facets/MethodFinderUtilsTest.java | 72 ++
.../metamodel/facets/MethodRemoverForTesting.java | 81 ++
.../metamodel/facets/ObjectAdapterUtilsTest.java | 84 ++
.../apache/isis/core/metamodel/facets/Utils.java | 64 ++
.../actions/ActionMethodsFacetFactoryTest.java | 539 ++++++++++
.../actions/IteratorFilteringFacetFactoryTest.java | 91 ++
.../action/ActionAnnotationFacetFactoryTest.java | 118 +++
...nnotationFacetFactoryTest_ActionInvocation.java | 234 ++++
.../ActionAnnotationFacetFactoryTest_Command.java | 313 ++++++
.../ActionAnnotationFacetFactoryTest_Hidden.java | 72 ++
...ctionAnnotationFacetFactoryTest_Invocation.java | 211 ++++
...ctionAnnotationFacetFactoryTest_Publishing.java | 313 ++++++
...ctionAnnotationFacetFactoryTest_RestrictTo.java | 109 ++
...ActionAnnotationFacetFactoryTest_Semantics.java | 111 ++
.../ActionAnnotationFacetFactoryTest_TypeOf.java | 177 ++++
...icsFacetFallbackToNonIdempotentFactoryTest.java | 73 ++
.../PrototypeFacetAnnotationFactoryTest.java | 77 ++
...kmarkableAnnotationFacetFactoryTest_action.java | 63 ++
.../HomePageAnnotationFacetFactoryTest.java | 66 ++
...tionLayoutAnnotationFacetFactoryJunit4Test.java | 407 +++++++
...nLayoutXmlLayoutAnnotationFacetFactoryTest.java | 197 ++++
...etDerivedFromDomainServiceFacetFactoryTest.java | 222 ++++
...etDerivedFromDomainServiceFacetFactoryTest.java | 223 ++++
.../prototype/PrototypeFacetAbstractTest.java | 58 +
.../CollectionFieldMethodsFacetFactoryTest.java | 589 +++++++++++
.../collections/JavaCollectionFacetTest.java | 90 ++
.../CollectionAnnotationFacetFactoryTest.java | 570 ++++++++++
...ollectionAnnotationFacetFactoryTest_typeOf.java | 137 +++
...bledAnnotationOnCollectionFacetFactoryTest.java | 82 ++
...stedAnnotationOnCollectionFacetFactoryTest.java | 71 ++
...etForCollectionLayoutAnnotationFactoryTest.java | 86 ++
.../cssclassfa/CssClassFaFacetAbstractTest.java | 45 +
.../ViewModelSemanticCheckingFacetFactoryTest.java | 240 +++++
...okmarkableAnnotationFacetFactoryTest_class.java | 63 ++
.../callback/CreatedCallbackFacetFactoryTest.java | 67 ++
.../callback/DeleteCallbackFacetFactoryTest.java | 88 ++
.../callback/LoadCallbackFacetFactoryTest.java | 88 ++
.../PersistAndSaveCallbackFacetFactoryTest.java | 109 ++
.../callback/PersistCallbackFacetFactoryTest.java | 88 ++
.../RemoveAndDeleteCallbackFacetFactoryTest.java | 109 ++
.../callback/RemoveCallbackFacetFactoryTest.java | 88 ++
.../callback/SaveCallbackFacetFactoryTest.java | 88 ++
.../callback/UpdateCallbackFacetFactoryTest.java | 88 ++
...CssClassFaFacetOnTypeAnnotationFactoryTest.java | 68 ++
.../object/defaults/DefaultedFacetFactoryTest.java | 228 ++++
.../ObjectDisabledMethodFacetFactoryTest.java | 72 ++
...oicesFacetFromBoundedAnnotationFactoryTest.java | 60 ++
.../DomainObjectAnnotationFacetFactoryTest.java | 861 +++++++++++++++
.../ObjectTypeAnnotationFacetFactoryTest.java | 65 ++
.../DomainObjectLayoutFactoryTest.java | 670 ++++++++++++
.../DomainServiceFacetAnnotationFactoryTest.java | 66 ++
.../DomainServiceLayoutFacetFactoryTest.java | 123 +++
.../facets/FacetsFacetAnnotationFactoryTest.java | 153 +++
.../hidden/ObjectHiddenMethodFacetFactoryTest.java | 85 ++
.../cssclass/CssClassFacetMethodFactoryTest.java | 71 ++
.../ident/cssclass/CssClassFacetMethodTest.java | 85 ++
.../CssClassFacetMethodWithProblemTest.java | 84 ++
.../ident/icon/IconFacetMethodFactoryTest.java | 71 ++
.../object/ident/icon/IconFacetMethodTest.java | 84 ++
.../ident/layout/LayoutFacetFactoryTest.java | 71 ++
.../object/ident/layout/LayoutFacetMethodTest.java | 84 ++
.../ident/title/TitleFacetViaMethodTest.java | 97 ++
.../title/TitleFacetViaMethodsFactoryTest.java | 112 ++
.../TitleAnnotationFacetFactoryTest.java | 262 +++++
.../TitleFacetViaTitleAnnotationTest.java | 153 +++
.../object/layoutxml/GridFacetDefaultTest.java | 60 ++
.../navparent/NavigableParentFacetMethodTest.java | 84 ++
.../NavigableParentAnnotationFacetFactoryTest.java | 113 ++
.../annotation/NavigableParentTestSamples.java | 68 ++
...SpecIdFacetDerivedFromClassNameFactoryTest.java | 63 ++
.../parseable/ParseableFacetUsingParserTest.java | 131 +++
.../facets/object/parseable/ValueProxy.java | 23 +
.../RecreatableObjectFacetFactoryTest.java | 68 ++
.../ObjectValidMethodFacetFactoryTest.java | 66 ++
...eFacetAnnotationOrConfigurationFactoryTest.java | 504 +++++++++
.../ordering/memberorder/DeweyOrderSetTest.java | 265 +++++
.../MemberOrderAnnotationFacetFactoryTest.java | 143 +++
.../memberorder/MemberOrderComparatorTest.java | 181 ++++
...cetForParameterLayoutAnnotationFactoryTest.java | 58 +
...cetForParameterLayoutAnnotationFactoryTest.java | 79 ++
.../ParameterAnnotationFacetFactoryTest.java | 388 +++++++
...lableAnnotationOnParameterFacetFactoryTest.java | 106 ++
...RegExAnnotationOnParameterFacetFactoryTest.java | 79 ++
.../PropertyMethodsFacetFactoryTest.java | 671 ++++++++++++
...romptStyleFacetFromPropertyAnnotation_Test.java | 185 ++++
...sabledAnnotationOnPropertyFacetFactoryTest.java | 102 ++
.../MandatoryAnnotationFacetFactoryTest.java | 71 ++
...sistedAnnotationOnPropertyFacetFactoryTest.java | 71 ++
.../PropertyAnnotationFacetFactoryTest.java | 868 +++++++++++++++
...llableAnnotationOnPropertyFacetFactoryTest.java | 118 +++
.../RegExAnnotationOnPropertyFacetFactoryTest.java | 90 ++
...acetForPropertyLayoutAnnotationFactoryTest.java | 68 ++
...acetForPropertyLayoutAnnotationFactoryTest.java | 95 ++
...ValidationDigitsAnnotationFacetFactoryTest.java | 79 ++
.../DomainObjectWithMustSatisfyAnnotations.java | 48 +
.../DomainObjectWithoutMustSatisfyAnnotations.java | 48 +
.../SpecificationAlwaysSatisfied.java | 31 +
.../specification/SpecificationAndTests.java | 111 ++
.../specification/SpecificationNeverSatisfied.java | 31 +
.../specification/SpecificationNotTests.java | 62 ++
.../specification/SpecificationOrTests.java | 110 ++
...cificationRequiresFirstLetterToBeUpperCase.java | 39 +
.../BigDecimalValueSemanticsProviderTest.java | 89 ++
.../value/BigIntValueSemanticsProviderTest.java | 88 ++
.../value/BlobValueSemanticsProviderTest.java | 65 ++
.../value/BooleanValueSemanticsProviderTest.java | 113 ++
.../value/ByteValueSemanticsProviderTest.java | 86 ++
.../value/CharacterValueSemanticsProviderTest.java | 79 ++
.../value/ClobValueSemanticsProviderTest.java | 65 ++
.../value/DoubleValueSemanticsProviderTest.java | 84 ++
.../value/FloatValueSemanticsProviderTest.java | 93 ++
.../ImageValueSemanticsProviderAbstractTest.java | 126 +++
.../value/IntValueSemanticsProviderTest.java | 80 ++
.../JavaSqlDateValueSemanticsProviderTest.java | 91 ++
.../JavaSqlTimeValueSemanticsProviderTest.java | 90 ++
.../JavaUtilDateValueSemanticsProviderTest.java | 96 ++
.../value/LongValueSemanticsProviderTest.java | 91 ++
.../value/PasswordValueSemanticsProviderTest.java | 49 +
.../value/ShortValueSemanticsProviderTest.java | 87 ++
.../value/StringValueSemanticsProviderTest.java | 80 ++
.../core/metamodel/facets/value/TestClock.java | 69 ++
.../ValueSemanticsProviderAbstractTestCase.java | 165 +++
...odaLocalDateTimeValueSemanticsProviderTest.java | 81 ++
...jectAssociationPredicatesTest_visibleWhere.java | 150 +++
.../interactions/InteractionUtils_isA_Test.java | 104 ++
.../ServiceInjectorDefaultTest_usingFields.java | 144 +++
...erviceInjectorDefaultTest_validateServices.java | 81 ++
...InjectorDefaultTest_validateServices_happy.java | 89 ++
.../services/ServiceInjectorLegacyTest.java | 166 +++
.../services/appfeat/ApplicationFeatureIdTest.java | 691 ++++++++++++
.../ApplicationFeatureRepositoryDefaultTest.java | 323 ++++++
.../services/appfeat/ApplicationFeatureTest.java | 163 +++
.../appfeat/ApplicationFeatureTypeTest.java | 191 ++++
...eptionRecognizerDocDefault_recognizes_Test.java | 57 +
.../core/metamodel/services/grid/BS3GridTest.java | 165 +++
.../isis/core/metamodel/services/grid/Foo.java | 22 +
.../metamodel/services/grid/Foo.layout.xml | 0
.../isis/core/metamodel/services/grid/Foo2.java | 22 +
.../services/grid/Foo2.layout.fallback.xml | 0
.../isis/core/metamodel/services/grid/Foo3.java | 22 +
.../services/grid/Foo3.layout.fallback.xml | 0
.../metamodel/services/grid/Foo3.layout.xml | 0
.../isis/core/metamodel/services/grid/Foo4.java | 22 +
...dLoaderServiceDefault_resourceNameFor_Test.java | 58 +
.../services/menubars/BS3MenuBarsTest.java | 62 ++
.../metamodel/MetaModelServiceDefaultTest.java | 242 +++++
.../spec/ObjectSpecIdTest_constructor.java | 43 +
.../spec/ObjectSpecIdTest_valueSemantics.java | 38 +
.../metamodel/specloader/ReflectorTestPojo.java | 52 +
.../specloader/SpecificationCacheDefaultTest.java | 120 +++
.../SpecificationLoaderTestAbstract.java | 185 ++++
.../specloader/SpecificationLoaderTest_array.java | 65 ++
.../SpecificationLoaderTest_collection.java | 67 ++
.../specloader/SpecificationLoaderTest_value.java | 46 +
.../ClassSubstitutorTest_getClass.java | 69 ++
.../IntrospectionState_comparable_Test.java | 87 ++
.../specimpl/ObjectActionMixedInTest.java | 64 ++
...ionParameterAbstractTest_getId_and_getName.java | 214 ++++
.../specimpl/ObjectAssociationAbstractTest.java | 211 ++++
...ObjectAssociationAbstractTest_alwaysHidden.java | 229 ++++
.../specimpl/ObjectMemberAbstractTest.java | 43 +
.../testspec/ObjectSpecificationStub.java | 358 +++++++
.../metamodel/MetaModelContext_configTest.java | 77 --
.../metamodel/MetaModelContext_forTesting.java | 256 -----
.../isis/metamodel/ServiceInjector_forTesting.java | 70 --
.../isis/metamodel/ServiceRegistry_forTesting.java | 154 ---
.../oid/CollectionOidTest_valueSemantics.java | 47 -
.../adapter/oid/OidMarshallerTest_marshall.java | 51 -
.../oid/OidMarshallerTest_roundtripping.java | 60 --
.../adapter/oid/OidMarshallerTest_unmarshal.java | 154 ---
.../isis/metamodel/adapter/oid/OidVersionTest.java | 71 --
...dDefaultTest_valueSemantics_whenPersistent.java | 45 -
...idDefaultTest_valueSemantics_whenTransient.java | 46 -
.../metamodel/adapter/oid/RootOidTest_create.java | 63 --
.../isis/metamodel/commons/IoUtils_CopyTest.java | 136 ---
.../commons/JavaClassUtilsTest_getBuiltIn.java | 41 -
.../metamodel/commons/ListUtilsTest_adjust.java | 67 --
.../metamodel/commons/ListUtilsTest_insert.java | 84 --
.../commons/ListUtilsTest_mutableCopy.java | 89 --
.../isis/metamodel/commons/LocaleUtilsTest.java | 36 -
.../isis/metamodel/commons/NameUtilTest.java | 68 --
.../apache/isis/metamodel/commons/PrintLocale.java | 59 --
.../commons/StringUtilsTest_enumTitle.java | 41 -
.../commons/StringUtils_NaturalNameTest.java | 59 --
.../commons/StringUtils_NaturalizeTest.java | 49 -
.../commons/StringUtils_NormalizedTest.java | 65 --
.../StringUtils_RemoveLeadingWhiteSpace.java | 51 -
.../commons/StringUtils_SplitOnCommas.java | 80 --
.../commons/StringUtils_StripLeadingSlashTest.java | 49 -
.../commons/StringUtils_StripNewLinesTest.java | 59 --
.../commons/StringUtils_camelLowerFirst.java | 38 -
.../commons/StringUtils_toLineSeparated.java | 52 -
.../commons/StringUtils_toLowerDashed.java | 36 -
.../metamodel/commons/TypesTest_filteredList.java | 71 --
.../metamodel/commons/matchers/IsisMatchers.java | 73 --
.../matchers/IsisMatchers_NonEmptyStringTest.java | 53 -
.../metamodel/consent/InteractionResultTest.java | 85 --
.../isis/metamodel/facetapi/FacetAbstractTest.java | 76 --
.../facetapi/FeatureTypeTest_identifierFor.java | 85 --
.../facets/AbstractFacetFactoryJUnit4TestCase.java | 159 ---
.../metamodel/facets/AbstractFacetFactoryTest.java | 169 ---
.../isis/metamodel/facets/AnnotationsTest.java | 71 --
.../Annotations_getAnnotations_on_Class_Test.java | 248 -----
.../Annotations_getAnnotations_on_Field_Test.java | 203 ----
.../Annotations_getAnnotations_on_Method_Test.java | 184 ----
...notations_getAnnotations_on_Parameter_Test.java | 200 ----
.../isis/metamodel/facets/CollectionUtilsTest.java | 123 ---
...nEventHelperTest_newActionInteractionEvent.java | 87 --
...HelperTest_newCollectionDomainEvent_forAdd.java | 84 --
...perTest_newCollectionDomainEvent_forRemove.java | 84 --
...HelperTest_newPropertyDomainEvent_forClear.java | 76 --
...elperTest_newPropertyDomainEvent_forModify.java | 72 --
.../metamodel/facets/MethodFinderUtilsTest.java | 72 --
.../metamodel/facets/MethodRemoverForTesting.java | 81 --
.../metamodel/facets/ObjectAdapterUtilsTest.java | 84 --
.../org/apache/isis/metamodel/facets/Utils.java | 64 --
.../actions/ActionMethodsFacetFactoryTest.java | 538 ----------
.../actions/IteratorFilteringFacetFactoryTest.java | 91 --
.../action/ActionAnnotationFacetFactoryTest.java | 118 ---
...nnotationFacetFactoryTest_ActionInvocation.java | 234 ----
.../ActionAnnotationFacetFactoryTest_Command.java | 313 ------
.../ActionAnnotationFacetFactoryTest_Hidden.java | 72 --
...ctionAnnotationFacetFactoryTest_Invocation.java | 211 ----
...ctionAnnotationFacetFactoryTest_Publishing.java | 313 ------
...ctionAnnotationFacetFactoryTest_RestrictTo.java | 109 --
...ActionAnnotationFacetFactoryTest_Semantics.java | 111 --
.../ActionAnnotationFacetFactoryTest_TypeOf.java | 177 ----
...icsFacetFallbackToNonIdempotentFactoryTest.java | 73 --
.../PrototypeFacetAnnotationFactoryTest.java | 77 --
...kmarkableAnnotationFacetFactoryTest_action.java | 63 --
.../HomePageAnnotationFacetFactoryTest.java | 66 --
...tionLayoutAnnotationFacetFactoryJunit4Test.java | 407 -------
...nLayoutXmlLayoutAnnotationFacetFactoryTest.java | 197 ----
...etDerivedFromDomainServiceFacetFactoryTest.java | 222 ----
...etDerivedFromDomainServiceFacetFactoryTest.java | 223 ----
.../prototype/PrototypeFacetAbstractTest.java | 58 -
.../CollectionFieldMethodsFacetFactoryTest.java | 589 -----------
.../collections/JavaCollectionFacetTest.java | 90 --
.../CollectionAnnotationFacetFactoryTest.java | 572 ----------
...ollectionAnnotationFacetFactoryTest_typeOf.java | 137 ---
...bledAnnotationOnCollectionFacetFactoryTest.java | 82 --
...stedAnnotationOnCollectionFacetFactoryTest.java | 71 --
...etForCollectionLayoutAnnotationFactoryTest.java | 86 --
.../cssclassfa/CssClassFaFacetAbstractTest.java | 45 -
.../ViewModelSemanticCheckingFacetFactoryTest.java | 240 -----
...okmarkableAnnotationFacetFactoryTest_class.java | 63 --
.../callback/CreatedCallbackFacetFactoryTest.java | 67 --
.../callback/DeleteCallbackFacetFactoryTest.java | 88 --
.../callback/LoadCallbackFacetFactoryTest.java | 88 --
.../PersistAndSaveCallbackFacetFactoryTest.java | 109 --
.../callback/PersistCallbackFacetFactoryTest.java | 88 --
.../RemoveAndDeleteCallbackFacetFactoryTest.java | 109 --
.../callback/RemoveCallbackFacetFactoryTest.java | 88 --
.../callback/SaveCallbackFacetFactoryTest.java | 88 --
.../callback/UpdateCallbackFacetFactoryTest.java | 88 --
...CssClassFaFacetOnTypeAnnotationFactoryTest.java | 68 --
.../object/defaults/DefaultedFacetFactoryTest.java | 228 ----
.../ObjectDisabledMethodFacetFactoryTest.java | 72 --
...oicesFacetFromBoundedAnnotationFactoryTest.java | 60 --
.../DomainObjectAnnotationFacetFactoryTest.java | 861 ---------------
.../ObjectTypeAnnotationFacetFactoryTest.java | 65 --
.../DomainObjectLayoutFactoryTest.java | 670 ------------
.../DomainServiceFacetAnnotationFactoryTest.java | 66 --
.../DomainServiceLayoutFacetFactoryTest.java | 123 ---
.../facets/FacetsFacetAnnotationFactoryTest.java | 153 ---
.../hidden/ObjectHiddenMethodFacetFactoryTest.java | 85 --
.../cssclass/CssClassFacetMethodFactoryTest.java | 71 --
.../ident/cssclass/CssClassFacetMethodTest.java | 85 --
.../CssClassFacetMethodWithProblemTest.java | 84 --
.../ident/icon/IconFacetMethodFactoryTest.java | 71 --
.../object/ident/icon/IconFacetMethodTest.java | 84 --
.../ident/layout/LayoutFacetFactoryTest.java | 71 --
.../object/ident/layout/LayoutFacetMethodTest.java | 84 --
.../ident/title/TitleFacetViaMethodTest.java | 97 --
.../title/TitleFacetViaMethodsFactoryTest.java | 112 --
.../TitleAnnotationFacetFactoryTest.java | 263 -----
.../TitleFacetViaTitleAnnotationTest.java | 154 ---
.../object/layoutxml/GridFacetDefaultTest.java | 60 --
.../navparent/NavigableParentFacetMethodTest.java | 84 --
.../NavigableParentAnnotationFacetFactoryTest.java | 113 --
.../annotation/NavigableParentTestSamples.java | 68 --
...SpecIdFacetDerivedFromClassNameFactoryTest.java | 67 --
.../parseable/ParseableFacetUsingParserTest.java | 131 ---
.../facets/object/parseable/ValueProxy.java | 23 -
.../RecreatableObjectFacetFactoryTest.java | 68 --
.../ObjectValidMethodFacetFactoryTest.java | 66 --
...eFacetAnnotationOrConfigurationFactoryTest.java | 504 ---------
.../ordering/memberorder/DeweyOrderSetTest.java | 265 -----
.../MemberOrderAnnotationFacetFactoryTest.java | 143 ---
.../memberorder/MemberOrderComparatorTest.java | 181 ----
...cetForParameterLayoutAnnotationFactoryTest.java | 58 -
...cetForParameterLayoutAnnotationFactoryTest.java | 79 --
.../ParameterAnnotationFacetFactoryTest.java | 388 -------
...lableAnnotationOnParameterFacetFactoryTest.java | 106 --
...RegExAnnotationOnParameterFacetFactoryTest.java | 79 --
.../PropertyMethodsFacetFactoryTest.java | 671 ------------
...romptStyleFacetFromPropertyAnnotation_Test.java | 185 ----
...sabledAnnotationOnPropertyFacetFactoryTest.java | 102 --
.../MandatoryAnnotationFacetFactoryTest.java | 71 --
...sistedAnnotationOnPropertyFacetFactoryTest.java | 71 --
.../PropertyAnnotationFacetFactoryTest.java | 869 ---------------
...llableAnnotationOnPropertyFacetFactoryTest.java | 118 ---
.../RegExAnnotationOnPropertyFacetFactoryTest.java | 90 --
...acetForPropertyLayoutAnnotationFactoryTest.java | 68 --
...acetForPropertyLayoutAnnotationFactoryTest.java | 95 --
...ValidationDigitsAnnotationFacetFactoryTest.java | 80 --
.../DomainObjectWithMustSatisfyAnnotations.java | 48 -
.../DomainObjectWithoutMustSatisfyAnnotations.java | 48 -
.../SpecificationAlwaysSatisfied.java | 31 -
.../specification/SpecificationAndTests.java | 111 --
.../specification/SpecificationNeverSatisfied.java | 31 -
.../specification/SpecificationNotTests.java | 62 --
.../specification/SpecificationOrTests.java | 110 --
...cificationRequiresFirstLetterToBeUpperCase.java | 39 -
.../BigDecimalValueSemanticsProviderTest.java | 89 --
.../value/BigIntValueSemanticsProviderTest.java | 88 --
.../value/BlobValueSemanticsProviderTest.java | 65 --
.../value/BooleanValueSemanticsProviderTest.java | 113 --
.../value/ByteValueSemanticsProviderTest.java | 86 --
.../value/CharacterValueSemanticsProviderTest.java | 79 --
.../value/ClobValueSemanticsProviderTest.java | 65 --
.../value/DoubleValueSemanticsProviderTest.java | 84 --
.../value/FloatValueSemanticsProviderTest.java | 93 --
.../ImageValueSemanticsProviderAbstractTest.java | 126 ---
.../value/IntValueSemanticsProviderTest.java | 80 --
.../JavaSqlDateValueSemanticsProviderTest.java | 91 --
.../JavaSqlTimeValueSemanticsProviderTest.java | 90 --
.../JavaUtilDateValueSemanticsProviderTest.java | 96 --
.../value/LongValueSemanticsProviderTest.java | 91 --
.../value/PasswordValueSemanticsProviderTest.java | 49 -
.../value/ShortValueSemanticsProviderTest.java | 87 --
.../value/StringValueSemanticsProviderTest.java | 80 --
.../isis/metamodel/facets/value/TestClock.java | 69 --
.../ValueSemanticsProviderAbstractTestCase.java | 165 ---
...odaLocalDateTimeValueSemanticsProviderTest.java | 81 --
...jectAssociationPredicatesTest_visibleWhere.java | 150 ---
.../interactions/InteractionUtils_isA_Test.java | 104 --
.../ServiceInjectorDefaultTest_usingFields.java | 144 ---
...erviceInjectorDefaultTest_validateServices.java | 81 --
...InjectorDefaultTest_validateServices_happy.java | 89 --
.../services/ServiceInjectorLegacyTest.java | 166 ---
.../services/appfeat/ApplicationFeatureIdTest.java | 691 ------------
.../ApplicationFeatureRepositoryDefaultTest.java | 323 ------
.../services/appfeat/ApplicationFeatureTest.java | 163 ---
.../appfeat/ApplicationFeatureTypeTest.java | 191 ----
...eptionRecognizerDocDefault_recognizes_Test.java | 57 -
.../isis/metamodel/services/grid/BS3GridTest.java | 165 ---
.../apache/isis/metamodel/services/grid/Foo.java | 22 -
.../apache/isis/metamodel/services/grid/Foo2.java | 22 -
.../apache/isis/metamodel/services/grid/Foo3.java | 22 -
.../apache/isis/metamodel/services/grid/Foo4.java | 22 -
...dLoaderServiceDefault_resourceNameFor_Test.java | 58 -
.../services/menubars/BS3MenuBarsTest.java | 62 --
.../metamodel/MetaModelServiceDefaultTest.java | 242 -----
.../spec/ObjectSpecIdTest_constructor.java | 43 -
.../spec/ObjectSpecIdTest_valueSemantics.java | 38 -
.../metamodel/specloader/ReflectorTestPojo.java | 52 -
.../specloader/SpecificationCacheDefaultTest.java | 120 ---
.../SpecificationLoaderTestAbstract.java | 185 ----
.../specloader/SpecificationLoaderTest_array.java | 65 --
.../SpecificationLoaderTest_collection.java | 67 --
.../specloader/SpecificationLoaderTest_value.java | 46 -
.../ClassSubstitutorTest_getClass.java | 69 --
.../IntrospectionState_comparable_Test.java | 91 --
.../specimpl/ObjectActionMixedInTest.java | 64 --
...ionParameterAbstractTest_getId_and_getName.java | 214 ----
.../specimpl/ObjectAssociationAbstractTest.java | 211 ----
...ObjectAssociationAbstractTest_alwaysHidden.java | 229 ----
.../specimpl/ObjectMemberAbstractTest.java | 43 -
.../testspec/ObjectSpecificationStub.java | 358 -------
.../dom/CustomerAsProxiedByDataNucleus.java | 2 +-
.../services/menubars/menubars.layout.xml | 0
.../org/apache/isis/runtime/IsisModuleRuntime.java | 2 +-
.../apache/isis/runtime/context/IsisContext.java | 2 +-
.../runtime/context/session/RuntimeContext.java | 6 +-
.../context/session/RuntimeContextBase.java | 8 +-
.../persistence/adapter/ObjectAdapterForBean.java | 8 +-
.../runtime/persistence/adapter/PojoAdapter.java | 12 +-
.../persistence/session/PersistenceSession.java | 8 +-
.../session/PersistenceSessionFactory.java | 2 +-
.../transaction/AdapterAndProperty.java | 8 +-
.../transaction/AuditerDispatchService.java | 6 +-
.../transaction/ChangedObjectsService.java | 10 +-
.../apache/isis/runtime/session/IsisSession.java | 4 +-
.../runtime/session/IsisSessionFactoryDefault.java | 4 +-
.../system/ObjectActionLayoutXmlDefaultTest.java | 14 +-
.../system/OneToManyAssociationDefaultTest.java | 22 +-
.../system/TypeExtractorMethodReturnTest.java | 2 +-
.../system/TypeExtractorMethodsParametersTest.java | 2 +-
.../auth/AuthenticationSessionProviderDefault.java | 2 +-
.../bookmarks/BookmarkServiceInternalDefault.java | 12 +-
.../command/CommandDtoServiceInternalDefault.java | 16 +-
.../command/CommandExecutorServiceDefault.java | 18 +-
.../factory/FactoryServiceDefault.java | 10 +-
.../homepage/HomePageResolverServiceDefault.java | 20 +-
.../ixn/InteractionDtoServiceInternalDefault.java | 12 +-
.../menubars/bootstrap3/MenuBarsServiceBS3.java | 24 +-
.../menubars/bootstrap3/ServiceAndAction.java | 4 +-
.../publish/PublishedObjectsDefault.java | 4 +-
.../publish/PublisherDispatchServiceDefault.java | 6 +-
.../repository/RepositoryServiceDefault.java | 4 +-
.../routing/RoutingServiceDefault.java | 2 +-
.../wrapper/WrapperFactoryDefault.java | 2 +-
.../AbstractCollectionInvocationHandler.java | 2 +-
.../handlers/CollectionInvocationHandler.java | 4 +-
.../DelegatingInvocationHandlerDefault.java | 6 +-
.../handlers/DomainObjectInvocationHandler.java | 42 +-
.../wrapper/handlers/MapInvocationHandler.java | 4 +-
.../wrapper/handlers/ProxyContextHandler.java | 4 +-
.../wrapper/internal/util/MethodPrefixFinder.java | 26 +-
.../wrapper/proxy/ProxyCreator.java | 2 +-
.../xmlsnapshot/XmlSnapshotBuilder.java | 8 +-
.../xmlsnapshot/XmlSnapshotServiceDefault.java | 6 +-
.../webapp/context/IsisWebAppCommonContext.java | 8 +-
.../isis/webapp/context/memento/ObjectMemento.java | 2 +-
.../context/memento/ObjectMementoCollection.java | 2 +-
.../context/memento/ObjectMementoService.java | 6 +-
.../templresources/TemplateResourceServlet.java | 6 +-
.../apache/isis/webapp/routing/RedirectFilter.java | 2 +-
.../isis/webapp/routing/RedirectServlet.java | 2 +-
.../bootstrapping/AutoConfigurationTest.java | 4 +-
.../SpringServiceInjectOrderTest.java | 2 +-
.../SpringServiceProvisioningTest.java | 2 +-
.../DomainModelTest_usingBadDomain.java | 4 +-
...nModelTest_usingBadDomain_noActionEnforced.java | 4 +-
.../DomainModelTest_usingGoodDomain.java | 6 +-
.../domainmodel/SpecloaderPerformanceTest.java | 2 +-
.../publishing/PublisherServiceTest.java | 2 +-
.../bootstrapping/builtin-domain-services.list | 4 +-
.../api/permission/ApplicationPermission.java | 2 +-
.../api/permission/ApplicationPermissionMode.java | 2 +-
.../ApplicationPermissionRepository.java | 2 +-
.../api/permission/ApplicationPermissionRule.java | 2 +-
.../api/permission/ApplicationPermissionValue.java | 2 +-
.../permission/ApplicationPermissionValueSet.java | 2 +-
.../permission/PermissionsEvaluationService.java | 2 +-
.../PermissionsEvaluationServiceAbstract.java | 2 +-
.../extensions/secman/api/user/AccountType.java | 2 +-
.../secman/api/user/ApplicationUserStatus.java | 2 +-
.../secman/model/app/feature/ApplicationClass.java | 2 +-
.../model/app/feature/ApplicationClassAction.java | 2 +-
.../app/feature/ApplicationClassCollection.java | 2 +-
.../model/app/feature/ApplicationClassMember.java | 2 +-
.../app/feature/ApplicationClassProperty.java | 2 +-
.../app/feature/ApplicationFeatureViewModel.java | 8 +-
.../app/feature/ApplicationFeatureViewModels.java | 4 +-
.../model/app/feature/ApplicationPackage.java | 4 +-
.../app/feature/ApplicationPermission_feature.java | 4 +-
.../user/ApplicationUser_filterPermissions.java | 6 +-
.../app/user/ApplicationUser_permissions.java | 4 +-
.../model/app/user/UserPermissionViewModel.java | 8 +-
.../model/facets/TenantedAuthorizationFacet.java | 6 +-
.../facets/TenantedAuthorizationFacetDefault.java | 10 +-
.../facets/TenantedAuthorizationFacetFactory.java | 8 +-
.../jdo/dom/permission/ApplicationPermission.java | 8 +-
.../ApplicationPermissionRepository.java | 8 +-
.../secman/jdo/dom/role/ApplicationRole.java | 4 +-
.../secman/jdo/dom/user/ApplicationUser.java | 2 +-
.../AbstractRoleAndPermissionsFixtureScript.java | 2 +-
.../secman/shiro/PermissionForMember.java | 2 +-
.../ui/components/ExcelFileModel.java | 8 +-
.../pdfjs/metamodel/facet/PdfJsViewerFacet.java | 2 +-
.../metamodel/facet/PdfJsViewerFacetAbstract.java | 6 +-
.../facet/PdfJsViewerFacetFromAnnotation.java | 2 +-
.../PdfJsViewerFacetFromAnnotationFactory.java | 12 +-
.../pdfjs/ui/components/PdfJsViewerPanel.java | 2 +-
.../PdfJsViewerPanelComponentFactory.java | 2 +-
.../SupportingMethodValidatorRefinerFactory.java | 16 +-
.../services/IncubatorMetaModelPlugin.java | 4 +-
.../facets/value/color/ColorValueFacet.java | 4 +-
...lorValueFacetUsingSemanticsProviderFactory.java | 4 +-
.../value/color/ColorValueSemanticsProvider.java | 10 +-
.../facets/value/money/MoneyValueFacet.java | 4 +-
...neyValueFacetUsingSemanticsProviderFactory.java | 4 +-
.../value/money/MoneyValueSemanticsProvider.java | 12 +-
...ageValueFacetUsingSemanticsProviderFactory.java | 4 +-
.../PercentageValueSemanticsProvider.java | 12 +-
.../value/ColorValueSemanticsProviderTest.java | 8 +-
.../value/MoneyValueSemanticsProviderTest.java | 10 +-
.../PercentageValueSemanticsProviderTest.java | 8 +-
.../PolishMoneyValueSemanticsProviderTest.java | 10 +-
.../runtime/system/persistence/ObjectFactory.java | 2 +-
.../runtime/viewer/web/WebAppSpecification.java | 2 +-
.../datanucleus/DataNucleusContextUtil.java | 2 +-
.../datanucleus/DataNucleusException.java | 2 +-
.../datanucleus/JDOStateManagerForIsis.java | 2 +-
.../datanucleus/metamodel/JdoPropertyUtils.java | 8 +-
.../commands/AbstractDataNucleusObjectCommand.java | 2 +-
.../commands/DataNucleusCreateObjectCommand.java | 2 +-
.../commands/DataNucleusDeleteObjectCommand.java | 2 +-
.../PersistenceQueryFindAllInstancesProcessor.java | 2 +-
...sistenceQueryFindUsingApplibQueryProcessor.java | 10 +-
.../queries/PersistenceQueryProcessor.java | 2 +-
.../queries/PersistenceQueryProcessorAbstract.java | 2 +-
.../datanucleus/persistence/queries/QueryUtil.java | 2 +-
.../persistence/spi/JdoObjectIdSerializer.java | 6 +-
.../service/JdoPersistenceLifecycleService.java | 2 +-
.../datanucleus5/jdosupport/IsisJdoSupportDN5.java | 4 +-
.../metamodel/JdoProgrammingModelPlugin.java | 26 +-
...JdoDatastoreIdentityAnnotationFacetFactory.java | 8 +-
.../JdoDatastoreIdentityFacet.java | 2 +-
.../JdoDatastoreIdentityFacetAbstract.java | 6 +-
.../JdoDatastoreIdentityFacetAnnotation.java | 2 +-
.../JdoDatastoreIdentityFacetImpl.java | 2 +-
.../JdoDiscriminatorAnnotationFacetFactory.java | 18 +-
.../discriminator/JdoDiscriminatorFacet.java | 2 +-
.../JdoDiscriminatorFacetDefault.java | 4 +-
...nferredFromJdoDiscriminatorValueAnnotation.java | 4 +-
...cIdFacetForJdoPersistenceCapableAnnotation.java | 6 +-
...doPersistenceCapableAnnotationFacetFactory.java | 14 +-
.../JdoPersistenceCapableFacet.java | 2 +-
.../JdoPersistenceCapableFacetAbstract.java | 8 +-
.../JdoPersistenceCapableFacetAnnotation.java | 2 +-
.../JdoPersistenceCapableFacetImpl.java | 10 +-
.../facets/object/query/JdoNamedQuery.java | 4 +-
.../object/query/JdoQueriesFacetAnnotation.java | 2 +-
.../query/JdoQueryAnnotationFacetFactory.java | 12 +-
.../facets/object/query/JdoQueryFacet.java | 2 +-
.../facets/object/query/JdoQueryFacetAbstract.java | 8 +-
.../object/query/JdoQueryFacetAnnotation.java | 2 +-
.../object/query/VisitorForClauseAbstract.java | 10 +-
.../facets/object/query/VisitorForFromClause.java | 8 +-
.../object/query/VisitorForVariablesClause.java | 8 +-
.../version/JdoVersionAnnotationFacetFactory.java | 20 +-
.../facets/object/version/JdoVersionFacet.java | 2 +-
.../version/JdoVersionFacetFromAnnotation.java | 4 +-
...DerivedFromJdoColumnAnnotationFacetFactory.java | 28 +-
.../BigDecimalFacetDerivedFromJdoColumn.java | 8 +-
.../prop/column/BigDecimalFacetFallback.java | 10 +-
.../column/MandatoryFacetDerivedFromJdoColumn.java | 4 +-
...ndatoryFacetInferredFromAbsenceOfJdoColumn.java | 4 +-
...ndatoryFromJdoColumnAnnotationFacetFactory.java | 30 +-
...DerivedFromJdoColumnAnnotationFacetFactory.java | 28 +-
.../column/MaxLengthFacetDerivedFromJdoColumn.java | 4 +-
.../JdoNotPersistentAnnotationFacetFactory.java | 8 +-
.../prop/notpersistent/JdoNotPersistentFacet.java | 4 +-
.../JdoNotPersistentFacetAbstract.java | 6 +-
.../JdoNotPersistentFacetAnnotation.java | 2 +-
.../notpersistent/JdoNotPersistentFacetImpl.java | 2 +-
...FacetDerivedFromJdoNotPersistentAnnotation.java | 4 +-
...ledFacetDerivedFromJdoPrimaryKeyAnnotation.java | 4 +-
.../JdoPrimaryKeyAnnotationFacetFactory.java | 6 +-
.../facets/prop/primarykey/JdoPrimaryKeyFacet.java | 4 +-
.../primarykey/JdoPrimaryKeyFacetAbstract.java | 6 +-
.../primarykey/JdoPrimaryKeyFacetAnnotation.java | 2 +-
.../prop/primarykey/JdoPrimaryKeyFacetImpl.java | 2 +-
...nalFacetDerivedFromJdoPrimaryKeyAnnotation.java | 6 +-
.../util/JdoPrimaryKeyPropertyPredicate.java | 8 +-
.../objectadapter/ObjectAdapterContext.java | 28 +-
.../ObjectAdapterContext_DependencyInjection.java | 2 +-
.../ObjectAdapterContext_Factories.java | 10 +-
...ObjectAdapterContext_LifecycleEventSupport.java | 4 +-
.../ObjectAdapterContext_NewIdentifier.java | 10 +-
...ctAdapterContext_ObjectAdapterByIdProvider.java | 18 +-
...ObjectAdapterContext_ObjectAdapterProvider.java | 10 +-
.../ObjectAdapterContext_ObjectCreation.java | 16 +-
.../DataNucleusApplicationComponents5.java | 4 +-
.../persistence/IsisLifecycleListener.java | 2 +-
.../persistence/IsisPersistenceSessionJdo.java | 2 +-
.../persistence/IsisPersistenceSessionJdoBase.java | 10 +-
.../persistence/IsisTransactionJdo.java | 6 +-
.../persistence/PersistenceSession5.java | 54 +-
.../persistence/PersistenceSessionFactory5.java | 2 +-
.../persistence/command/PersistenceCommand.java | 2 +-
.../command/PersistenceCommandAbstract.java | 2 +-
.../persistence/query/PersistenceQuery.java | 2 +-
.../query/PersistenceQueryAbstract.java | 2 +-
.../persistence/query/PersistenceQueryFactory.java | 8 +-
.../query/PersistenceQueryFindAllInstances.java | 4 +-
...ersistenceQueryFindUsingApplibQueryDefault.java | 10 +-
.../ObjectReflectorDefaultTest_object.java | 81 ++
.../ObjectReflectorDefaultTest_object.java | 81 --
...atastoreIdentityAnnotationFacetFactoryTest.java | 8 +-
...JdoDiscriminatorAnnotationFacetFactoryTest.java | 14 +-
...rsistenceCapableAnnotationFacetFactoryTest.java | 10 +-
.../JdoVersionAnnotationFacetFactoryTest.java | 8 +-
...AnnotationFacetFactoryTest_refineMetaModel.java | 14 +-
...vedFromJdoColumnAnnotationFacetFactoryTest.java | 10 +-
...vedFromJdoColumnAnnotationFacetFactoryTest.java | 8 +-
...JdoNotPersistentAnnotationFacetFactoryTest.java | 10 +-
...venJdoPrimaryKeyAnnotationFacetFactoryTest.java | 12 +-
.../adapterfactory/pojo/PojoAdapterTest.java | 8 +-
.../transaction/PojoAdapterBuilder.java | 10 +-
.../runtime/system/ObjectMemberAbstractTest.java | 48 +-
.../WrapperFactoryDefault_wrappedObject_Test.java | 44 +-
...actoryDefault_wrappedObject_transient_Test.java | 36 +-
.../base/applib/matchers/IsisMatchers.java | 2 +-
.../excel/applib/dom/util/CellMarshaller.java | 6 +-
.../excel/applib/dom/util/ExcelConverter.java | 16 +-
.../excel/applib/dom/util/ExcelServiceImpl.java | 4 +-
.../applib/validate/ValidateDomainModel.java | 8 +-
.../sse/applib/value/ListeningMarkup.java | 2 +-
.../facets/SseAnnotationFacetFactory.java | 10 +-
.../sse/metamodel/facets/SseObserveFacet.java | 2 +-
.../metamodel/facets/SseObserveFacetAbstract.java | 8 +-
...eObserveFacetForServerSentEventsAnnotation.java | 2 +-
.../restfulobjects/rendering/IResourceContext.java | 8 +-
.../viewer/restfulobjects/rendering/OidUtils.java | 6 +-
.../rendering/ReprRendererAbstract.java | 6 +-
.../AbstractObjectMemberReprRenderer.java | 13 +-
.../domainobjects/ActionResultReprRenderer.java | 7 +-
.../domainobjects/CollectionSemantics.java | 2 +-
.../domainobjects/DomainObjectLinkTo.java | 4 +-
.../domainobjects/DomainObjectReprRenderer.java | 22 +-
.../domainobjects/DomainServiceLinkTo.java | 4 +-
.../rendering/domainobjects/JsonValueEncoder.java | 12 +-
.../domainobjects/JsonValueEncoder_Converters.java | 2 +-
.../rendering/domainobjects/ListReprRenderer.java | 4 +-
.../rendering/domainobjects/MemberType.java | 30 +-
.../rendering/domainobjects/MutatorSpec.java | 2 +-
.../domainobjects/ObjectActionReprRenderer.java | 10 +-
.../domainobjects/ObjectAdapterLinkTo.java | 4 +-
.../rendering/domainobjects/ObjectAndAction.java | 4 +-
.../domainobjects/ObjectAndActionInvocation.java | 10 +-
.../domainobjects/ObjectAndCollection.java | 4 +-
.../domainobjects/ObjectAndCollection2.java | 4 +-
.../rendering/domainobjects/ObjectAndMember.java | 4 +-
.../rendering/domainobjects/ObjectAndProperty.java | 4 +-
.../domainobjects/ObjectAndProperty2.java | 4 +-
.../ObjectCollectionReprRenderer.java | 8 +-
.../domainobjects/ObjectPropertyReprRenderer.java | 16 +-
.../domainobjects/ScalarValueReprRenderer.java | 6 +-
.../AbstractTypeFeatureReprRenderer.java | 4 +-
.../AbstractTypeMemberReprRenderer.java | 2 +-
.../domaintypes/ActionDescriptionReprRenderer.java | 8 +-
.../ActionParameterDescriptionReprRenderer.java | 8 +-
.../CollectionDescriptionReprRenderer.java | 4 +-
.../domaintypes/DomainTypeReprRenderer.java | 12 +-
.../domaintypes/ObjectSpecAndSuperSpec.java | 2 +-
.../rendering/domaintypes/ParentSpecAndAction.java | 4 +-
.../domaintypes/ParentSpecAndActionParam.java | 4 +-
.../domaintypes/ParentSpecAndCollection.java | 4 +-
.../domaintypes/ParentSpecAndFeature.java | 4 +-
.../domaintypes/ParentSpecAndProperty.java | 4 +-
.../PropertyDescriptionReprRenderer.java | 6 +-
.../domaintypes/TypeActionResultReprRenderer.java | 2 +-
.../domaintypes/TypeListReprRenderer.java | 2 +-
.../rendering/service/RepresentationService.java | 2 +-
.../RepresentationServiceContentNegotiator.java | 2 +-
.../service/conneg/ContentNegotiationService.java | 2 +-
.../conneg/ContentNegotiationServiceAbstract.java | 2 +-
...entNegotiationServiceForRestfulObjectsV1_0.java | 10 +-
.../ContentNegotiationServiceOrgApacheIsisV1.java | 16 +-
.../ContentNegotiationServiceXRoDomainType.java | 2 +-
.../service/swagger/internal/ClassExcluder.java | 4 +-
.../swagger/internal/ClassExcluderAbstract.java | 4 +-
.../service/swagger/internal/Generation.java | 24 +-
.../swagger/internal/SwaggerSpecGenerator.java | 2 +-
.../rendering/service/swagger/internal/Util.java | 16 +-
.../JsonValueEncoderTest_appendValueAndFormat.java | 10 +-
.../JsonValueEncoderTest_asAdapter.java | 14 +-
.../JsonValueEncoderTest_asObject.java | 12 +-
.../viewer/context/ResourceContext.java | 8 +-
.../mappers/ExceptionMapperForObjectNotFound.java | 2 +-
.../restfulobjects/viewer/mappers/FailureUtil.java | 2 +-
.../resources/DomainObjectResourceServerside.java | 18 +-
.../viewer/resources/DomainResourceHelper.java | 10 +-
.../resources/DomainServiceResourceServerside.java | 8 +-
.../resources/DomainTypeResourceServerside.java | 18 +-
.../viewer/resources/HomePageReprRenderer.java | 4 +-
.../resources/HomePageResourceServerside.java | 2 +-
.../viewer/resources/ImageResourceServerside.java | 2 +-
.../viewer/resources/JsonParserHelper.java | 8 +-
.../resources/MenuBarsResourceServerside.java | 2 +-
.../viewer/resources/ObjectActionArgHelper.java | 14 +-
.../resources/ObjectAdapterAccessHelper.java | 18 +-
.../resources/ObjectAdapterUpdateHelper.java | 14 +-
.../viewer/resources/ResourceAbstract.java | 8 +-
.../viewer/resources/UserResourceServerside.java | 2 +-
.../resources/VersionResourceServerside.java | 2 +-
.../webmodule/IsisRestfulObjectsSessionFilter.java | 6 +-
..._ensureCompatibleAcceptHeader_ContractTest.java | 6 +-
.../context/ResourceContext_getArg_Test.java | 6 +-
.../wicket/model/common/OnSelectionHandler.java | 2 +-
.../viewer/wicket/model/links/LinkAndLabel.java | 6 +-
.../wicket/model/mementos/ActionMemento.java | 10 +-
.../model/mementos/ActionParameterMemento.java | 8 +-
.../wicket/model/mementos/CollectionMemento.java | 8 +-
.../wicket/model/mementos/PageParameterNames.java | 4 +-
.../wicket/model/mementos/PropertyMemento.java | 8 +-
.../wicket/model/models/ActionArgumentModel.java | 2 +-
.../viewer/wicket/model/models/ActionModel.java | 30 +-
.../wicket/model/models/BookmarkTreeNode.java | 12 +-
.../model/models/BookmarkTreeNodeComparator.java | 6 +-
.../wicket/model/models/BookmarkedPagesModel.java | 2 +-
.../wicket/model/models/EntityCollectionModel.java | 26 +-
.../viewer/wicket/model/models/EntityModel.java | 16 +-
.../model/models/EntityModelForReference.java | 4 +-
.../wicket/model/models/ImageResourceCache.java | 4 +-
.../wicket/model/models/ObjectAdapterModel.java | 4 +-
.../viewer/wicket/model/models/ScalarModel.java | 38 +-
.../model/models/ScalarModelWithMultiPending.java | 2 +-
.../wicket/model/models/ServiceActionsModel.java | 4 +-
.../viewer/wicket/model/models/ValueModel.java | 4 +-
.../isis/viewer/wicket/model/models/VoidModel.java | 2 +-
.../models/whereami/WhereAmIModelDefault.java | 2 +-
.../wicket/model/models/EntityModel_hintsTest.java | 4 +-
.../models/LowestCommonSuperclassClosureTest.java | 2 +-
.../ScalarModel_isScalarSubtypingAnyOf_Test.java | 8 +-
.../wicket/ui/CollectionContentsAsFactory.java | 4 +-
.../isis/viewer/wicket/ui/ComponentType.java | 4 +-
.../actionresponse/ActionResultResponseType.java | 6 +-
.../ui/components/about/JarManifestModel.java | 2 +-
.../ui/components/actioninfo/ActionInfoPanel.java | 2 +-
.../components/actionmenu/CssClassFaBehavior.java | 2 +-
.../entityactions/AdditionalLinksPanel.java | 2 +-
.../entityactions/EntityActionLinkFactory.java | 4 +-
.../actionmenu/entityactions/LinkAndLabelUtil.java | 4 +-
.../actionmenu/serviceactions/CssMenuItem.java | 12 +-
.../serviceactions/ServiceActionLinkFactory.java | 2 +-
.../serviceactions/ServiceActionUtil.java | 2 +-
.../serviceactions/ServiceAndAction.java | 2 +-
.../actionprompt/ActionPromptHeaderPanel.java | 4 +-
.../actions/ActionFormExecutorStrategy.java | 2 +-
.../components/actions/ActionParametersForm.java | 8 +-
.../actions/ActionParametersFormPanel.java | 2 +-
.../components/actions/ActionParametersPanel.java | 1 -
.../bookmarkedpages/BookmarkedPagesPanel.java | 8 +-
.../collection/AssociatedWithActionsHelper.java | 12 +-
.../ui/components/collection/CollectionPanel.java | 6 +-
.../selector/CollectionSelectorHelper.java | 4 +-
.../selector/CollectionSelectorPanel.java | 2 +-
.../CollectionContentsAsAjaxTablePanel.java | 20 +-
.../CollectionContentsSortableDataProvider.java | 18 +-
.../ajaxtable/IsisAjaxFallbackDataTable.java | 2 +-
.../columns/ObjectAdapterPropertyColumn.java | 4 +-
.../columns/ObjectAdapterTitleColumn.java | 2 +-
.../columns/ObjectAdapterToggleboxColumn.java | 2 +-
.../icons/CollectionContentsAsIconsPanel.java | 2 +-
.../CollectionContentsAsIconsPanelFactory.java | 4 +-
.../summary/CollectionContentsAsSummary.java | 10 +-
.../CollectionContentsAsSummaryFactory.java | 8 +-
.../entity/EntityComponentFactoryAbstract.java | 4 +-
.../entity/collection/EntityCollectionPanel.java | 10 +-
.../components/entity/fieldset/PropertyGroup.java | 14 +-
.../entity/header/EntityHeaderPanel.java | 2 +-
.../entity/icontitle/EntityIconAndTitlePanel.java | 6 +-
.../icontitle/EntityIconAndTitlePanelFactory.java | 4 +-
.../selector/links/EntityLinksSelectorPanel.java | 2 +-
.../links/EntityLinksSelectorPanelFactory.java | 4 +-
.../ui/components/property/PropertyEditPanel.java | 4 +-
.../property/PropertyFormExecutorStrategy.java | 2 +-
.../PropertyEditPromptHeaderPanel.java | 4 +-
.../components/scalars/IsisConverterLocator.java | 6 +-
.../ui/components/scalars/ScalarPanelAbstract.java | 8 +-
.../components/scalars/ScalarPanelAbstract2.java | 18 +-
.../scalars/ScalarPanelSelect2Abstract.java | 2 +-
.../scalars/ScalarPanelTextFieldAbstract.java | 10 +-
.../ScalarPanelTextFieldDatePickerAbstract.java | 2 +-
.../ScalarPanelTextFieldParseableAbstract.java | 4 +-
.../ui/components/scalars/TextFieldValueModel.java | 2 +-
.../scalars/image/JavaAwtImagePanel.java | 4 +-
.../scalars/image/JavaAwtImagePanelFactory.java | 4 +-
.../isisapplib/IsisBlobOrClobPanelAbstract.java | 4 +-
.../components/scalars/markup/MarkupComponent.java | 2 +-
.../components/scalars/primitive/BooleanPanel.java | 4 +-
.../scalars/reference/EntityLinkSelect2Panel.java | 2 +-
.../scalars/reference/ReferencePanel.java | 6 +-
.../scalars/reference/ReferencePanelFactory.java | 4 +-
.../scalars/string/MultiLineStringPanel.java | 6 +-
.../scalars/string/StringPanelFactory.java | 2 +-
.../scalars/value/ValuePanelFactory.java | 2 +-
.../valuechoices/ValueChoicesSelect2Panel.java | 2 +-
.../StandaloneCollectionPanel.java | 2 +-
.../components/tree/IsisToWicketTreeAdapter.java | 4 +-
.../ui/components/unknown/UnknownModelPanel.java | 2 +-
.../widgets/breadcrumbs/BreadcrumbModel.java | 6 +-
.../widgets/breadcrumbs/BreadcrumbPanel.java | 4 +-
.../entitysimplelink/EntityLinkSimplePanel.java | 2 +-
.../EntityLinkSimplePanelFactory.java | 4 +-
.../widgets/linkandlabel/ActionLink.java | 4 +-
.../widgets/linkandlabel/ActionLinkFactory.java | 2 +-
.../linkandlabel/ActionLinkFactoryAbstract.java | 14 +-
.../ui/components/widgets/select2/ChoiceExt.java | 2 +-
.../widgets/select2/Select2ChoiceExt.java | 2 +-
.../widgets/select2/Select2MultiChoiceExt.java | 2 +-
.../ObjectAdapterMementoProviderAbstract.java | 8 +-
...entoProviderForReferenceObjectAutoComplete.java | 4 +-
...derForReferenceParamOrPropertyAutoComplete.java | 2 +-
.../widgets/zclip/ZeroClipboardPanel.java | 2 +-
.../viewer/wicket/ui/errors/ExceptionModel.java | 2 +-
.../viewer/wicket/ui/pages/entity/EntityPage.java | 12 +-
.../isis/viewer/wicket/ui/panels/FormAbstract.java | 2 +-
.../wicket/ui/panels/FormExecutorDefault.java | 8 +-
.../wicket/ui/panels/FormExecutorStrategy.java | 2 +-
.../isis/viewer/wicket/ui/panels/PanelBase.java | 2 +-
.../wicket/ui/panels/PromptFormAbstract.java | 2 +-
.../ui/ComponentFactoryAbstractTest_init.java | 4 +-
...ollectionContentsSelectorDropdownPanelTest.java | 4 +-
...tAdapterMementoProviderForValueChoicesTest.java | 6 +-
.../integration/ConverterForObjectAdapter.java | 10 +-
.../ConverterForObjectAdapterMemento.java | 6 +-
.../viewer/integration/WebRequestCycleForIsis.java | 4 +-
.../ComponentFactoryRegistryDefault.java | 2 +-
.../viewer/services/DeepLinkServiceWicket.java | 4 +-
.../services/ImageResourceCacheClassPath.java | 8 +-
.../viewer/services/mementos/CollectionData.java | 2 +-
.../wicket/viewer/services/mementos/Data.java | 4 +-
.../viewer/services/mementos/ObjectData.java | 2 +-
.../viewer/services/mementos/ObjectMarshaller.java | 18 +-
.../services/mementos/ObjectMementoLegacy.java | 16 +-
.../mementos/ObjectMementoServiceWicket.java | 10 +-
.../services/mementos/ObjectUnmarshaller.java | 36 +-
.../viewer/services/mementos/StandaloneData.java | 8 +-
.../viewer/wicketapp/IsisWicketApplication.java | 4 +-
.../wicketapp/IsisWicketApplication_Defaults.java | 2 +-
3160 files changed, 120558 insertions(+), 120580 deletions(-)
diff --git a/core/config/src/main/java/org/apache/isis/core/config/presets/DebugMetaModel.properties b/core/config/src/main/java/org/apache/isis/core/config/presets/DebugMetaModel.properties
index 92500e0..c6e2e2a 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/presets/DebugMetaModel.properties
+++ b/core/config/src/main/java/org/apache/isis/core/config/presets/DebugMetaModel.properties
@@ -16,4 +16,4 @@
# under the License.
logging.level.org.apache.isis.metamodel.specloader.MetaModelValidatorServiceDefault = DEBUG
-logging.level.org.apache.isis.metamodel.specloader.SpecificationLoaderDefault = DEBUG
\ No newline at end of file
+logging.level.SpecificationLoaderDefault = DEBUG
\ No newline at end of file
diff --git a/core/config/src/main/java/org/apache/isis/core/config/presets/DebugProgrammingModel.properties b/core/config/src/main/java/org/apache/isis/core/config/presets/DebugProgrammingModel.properties
index ce27d89..631c685 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/presets/DebugProgrammingModel.properties
+++ b/core/config/src/main/java/org/apache/isis/core/config/presets/DebugProgrammingModel.properties
@@ -15,5 +15,5 @@
# specific language governing permissions and limitations
# under the License.
-logging.level.org.apache.isis.metamodel.specloader.ProgrammingModelServiceDefault = DEBUG
-logging.level.org.apache.isis.metamodel.specloader.specimpl.FacetedMethodsBuilder = DEBUG
+logging.level.ProgrammingModelServiceDefault = DEBUG
+logging.level.FacetedMethodsBuilder = DEBUG
diff --git a/core/config/src/main/java/org/apache/isis/core/config/presets/SilenceMetaModel.properties b/core/config/src/main/java/org/apache/isis/core/config/presets/SilenceMetaModel.properties
index 03be4e2..573565c 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/presets/SilenceMetaModel.properties
+++ b/core/config/src/main/java/org/apache/isis/core/config/presets/SilenceMetaModel.properties
@@ -16,4 +16,4 @@
# under the License.
logging.level.org.apache.isis.metamodel.specloader.MetaModelValidatorServiceDefault = WARN
-logging.level.org.apache.isis.metamodel.specloader.SpecificationLoaderDefault = WARN
\ No newline at end of file
+logging.level.SpecificationLoaderDefault = WARN
\ No newline at end of file
diff --git a/core/config/src/main/java/org/apache/isis/core/config/presets/SilenceProgrammingModel.properties b/core/config/src/main/java/org/apache/isis/core/config/presets/SilenceProgrammingModel.properties
index ff10cdc..8907faf 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/presets/SilenceProgrammingModel.properties
+++ b/core/config/src/main/java/org/apache/isis/core/config/presets/SilenceProgrammingModel.properties
@@ -15,5 +15,5 @@
# specific language governing permissions and limitations
# under the License.
-logging.level.org.apache.isis.metamodel.specloader.ProgrammingModelServiceDefault = WARN
-logging.level.org.apache.isis.metamodel.specloader.specimpl.FacetedMethodsBuilder = WARN
+logging.level.ProgrammingModelServiceDefault = WARN
+logging.level.FacetedMethodsBuilder = WARN
diff --git a/core/detached-tests/src/test/java/org/apache/isis/core/commons/internal/reflection/ReflectTest.java b/core/detached-tests/src/test/java/org/apache/isis/core/commons/internal/reflection/ReflectTest.java
index b9dd308..993bb45 100644
--- a/core/detached-tests/src/test/java/org/apache/isis/core/commons/internal/reflection/ReflectTest.java
+++ b/core/detached-tests/src/test/java/org/apache/isis/core/commons/internal/reflection/ReflectTest.java
@@ -34,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.services.jaxb.JaxbServiceDefault;
import org.apache.isis.core.commons.internal.reflection._Reflect.InterfacePolicy;
-import org.apache.isis.metamodel.services.user.UserServiceDefault;
+import org.apache.isis.core.metamodel.services.user.UserServiceDefault;
import static org.apache.isis.core.commons.internal.reflection._Reflect.getAnnotation;
import static org.apache.isis.core.commons.internal.reflection._Reflect.streamAllMethods;
@@ -55,7 +55,7 @@ class ReflectTest {
.collect(Collectors.joining(",\n"));
assertEquals(""
- + "org.apache.isis.metamodel.services.user.UserServiceDefault$SudoServiceSpi,\n"
+ + "UserServiceDefault$SudoServiceSpi,\n"
+ "java.lang.Object",
typeListLiteral);
@@ -71,7 +71,7 @@ class ReflectTest {
.collect(Collectors.joining(",\n"));
assertEquals(
- "org.apache.isis.metamodel.services.user.UserServiceDefault$SudoServiceSpi,\n"
+ "UserServiceDefault$SudoServiceSpi,\n"
+ "org.apache.isis.applib.services.sudo.SudoService$Spi,\n"
+ "java.lang.Object",
typeListLiteral);
@@ -91,8 +91,8 @@ class ReflectTest {
assertEquals(""
+ "public abstract void org.apache.isis.applib.services.sudo.SudoService$Spi.releaseRunAs(),\n"
+ "public abstract void org.apache.isis.applib.services.sudo.SudoService$Spi.runAs(java.lang.String,java.util.List),\n"
- + "public void org.apache.isis.metamodel.services.user.UserServiceDefault$SudoServiceSpi.releaseRunAs(),\n"
- + "public void org.apache.isis.metamodel.services.user.UserServiceDefault$SudoServiceSpi.runAs(java.lang.String,java.util.List)"
+ + "public void UserServiceDefault$SudoServiceSpi.releaseRunAs(),\n"
+ + "public void UserServiceDefault$SudoServiceSpi.runAs(java.lang.String,java.util.List)"
,
typeListLiteral);
diff --git a/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAs.java b/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAs.java
index 8d48977..9ebfeaa 100644
--- a/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAs.java
+++ b/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAs.java
@@ -29,19 +29,19 @@ import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.applib.services.i18n.TranslationService.Mode;
import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.metamodel.MetaModelContext_forTesting;
-import org.apache.isis.metamodel.context.MetaModelContext;
-import org.apache.isis.metamodel.facetapi.FacetHolder;
-import org.apache.isis.metamodel.facetapi.FeatureType;
-import org.apache.isis.metamodel.facetapi.MethodRemover;
-import org.apache.isis.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.metamodel.facets.FacetFactory;
-import org.apache.isis.metamodel.facets.FacetedMethodParameter;
-import org.apache.isis.metamodel.facets.MethodRemoverConstants;
-import org.apache.isis.metamodel.progmodel.ProgrammingModelAbstract;
-import org.apache.isis.metamodel.progmodel.ProgrammingModelInitFilterDefault;
-import org.apache.isis.metamodel.progmodels.dflt.ProgrammingModelFacetsJava8;
-import org.apache.isis.metamodel.services.title.TitleServiceDefault;
+import org.apache.isis.core.metamodel.MetaModelContext_forTesting;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.MethodRemover;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.facets.MethodRemoverConstants;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelInitFilterDefault;
+import org.apache.isis.core.metamodel.progmodels.dflt.ProgrammingModelFacetsJava8;
+import org.apache.isis.core.metamodel.services.title.TitleServiceDefault;
import lombok.val;
diff --git a/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAsActionTest.java b/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAsActionTest.java
index 465a037..89e0342 100644
--- a/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAsActionTest.java
+++ b/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinIntendedAsActionTest.java
@@ -32,7 +32,6 @@ import org.apache.isis.applib.annotation.Collection;
import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.Mixin;
import org.apache.isis.applib.annotation.Property;
-import org.apache.isis.metamodel.facets.object.mixin.MixinFacet;
import lombok.Data;
import lombok.RequiredArgsConstructor;
diff --git a/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java b/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
index 10ac73d..62dbb32 100644
--- a/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
+++ b/core/detached-tests/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
@@ -31,13 +31,13 @@ import static org.junit.Assert.assertThat;
import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.metamodel.MetaModelContext_forTesting;
-import org.apache.isis.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
-import org.apache.isis.metamodel.facets.FacetFactory;
-import org.apache.isis.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.metamodel.progmodel.ProgrammingModelAbstract;
-import org.apache.isis.metamodel.progmodel.ProgrammingModelInitFilterDefault;
-import org.apache.isis.metamodel.progmodels.dflt.ProgrammingModelFacetsJava8;
+import org.apache.isis.core.metamodel.MetaModelContext_forTesting;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelInitFilterDefault;
+import org.apache.isis.core.metamodel.progmodels.dflt.ProgrammingModelFacetsJava8;
import lombok.val;
diff --git a/core/metamodel/log4j2-test.xml b/core/metamodel/log4j2-test.xml
index e2f1c80..26dc93b 100644
--- a/core/metamodel/log4j2-test.xml
+++ b/core/metamodel/log4j2-test.xml
@@ -16,7 +16,7 @@
<Loggers>
- <Logger name="org.apache.isis.metamodel.specloader.SpecificationLoaderDefault" level="warn" />
+ <Logger name="org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault" level="warn" />
<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleMetamodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleMetamodel.java
new file mode 100644
index 0000000..4b68215
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleMetamodel.java
@@ -0,0 +1,101 @@
+/*
+ * 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;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.core.config.IsisModuleCoreConfig;
+import org.apache.isis.core.metamodel.context.MetaModelContexts;
+import org.apache.isis.core.metamodel.objectmanager.ObjectManagerDefault;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelInitFilterDefault;
+import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
+import org.apache.isis.core.metamodel.specloader.ProgrammingModelServiceDefault;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault;
+import org.apache.isis.core.metamodel.services.ServiceInjectorDefault;
+import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureFactory;
+import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
+import org.apache.isis.core.metamodel.services.classsubstitutor.ClassSubstitutorDefault;
+import org.apache.isis.core.metamodel.services.classsubstitutor.ClassSubstitutorRegistry;
+import org.apache.isis.core.metamodel.services.classsubstitutor.ClassSubstitutorForCollections;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
+import org.apache.isis.core.metamodel.services.events.MetamodelEventSupport_Spring;
+import org.apache.isis.core.metamodel.services.exceprecog.ExceptionRecognizerDocDefault;
+import org.apache.isis.core.metamodel.services.grid.GridLoaderServiceDefault;
+import org.apache.isis.core.metamodel.services.grid.GridReaderUsingJaxb;
+import org.apache.isis.core.metamodel.services.grid.GridServiceDefault;
+import org.apache.isis.core.metamodel.services.grid.bootstrap3.GridSystemServiceBS3;
+import org.apache.isis.core.metamodel.services.layout.LayoutServiceDefault;
+import org.apache.isis.core.metamodel.services.metamodel.MetaModelServiceDefault;
+import org.apache.isis.core.metamodel.services.registry.ServiceRegistryDefault;
+import org.apache.isis.core.metamodel.services.title.TitleServiceDefault;
+import org.apache.isis.core.metamodel.services.user.UserServiceDefault;
+import org.apache.isis.core.metamodel.valuetypes.ValueTypeProviderDefault;
+import org.apache.isis.core.metamodel.valuetypes.ValueTypeProviderForCollections;
+import org.apache.isis.core.metamodel.valuetypes.ValueTypeRegistry;
+import org.apache.isis.security.api.IsisModuleSecurityApi;
+
+@Configuration
+@Import({
+ // modules
+ IsisModuleApplib.class,
+ IsisModuleCoreConfig.class,
+ IsisModuleSecurityApi.class,
+
+ // @Configuration's
+ MetaModelContexts.class,
+ MetamodelEventSupport_Spring.class,
+
+ // @Component's
+ ProgrammingModelInitFilterDefault.class,
+ ClassSubstitutorDefault.class,
+ ClassSubstitutorForCollections.class,
+ ClassSubstitutorRegistry.class,
+ ValueTypeProviderDefault.class,
+ ValueTypeProviderForCollections.class,
+ ValueTypeRegistry.class,
+
+ // @Service's
+ ObjectManagerDefault.class,
+ ServiceInjectorDefault.class,
+ ApplicationFeatureFactory.class,
+ MetamodelEventService.class,
+ ExceptionRecognizerDocDefault.class,
+ GridLoaderServiceDefault.class,
+ GridReaderUsingJaxb.class,
+ GridServiceDefault.class,
+ GridSystemServiceBS3.class,
+ InjectorMethodEvaluatorDefault.class,
+ LayoutServiceDefault.class,
+ MetaModelServiceDefault.class,
+ ProgrammingModelServiceDefault.class,
+ ServiceRegistryDefault.class,
+ TitleServiceDefault.class,
+ SpecificationLoaderDefault.class,
+ UserServiceDefault.class,
+ UserServiceDefault.SudoServiceSpi.class,
+
+ // @Repository's
+ ApplicationFeatureRepositoryDefault.class,
+
+})
+public class IsisModuleMetamodel {
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
new file mode 100644
index 0000000..963a1b2
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -0,0 +1,61 @@
+/*
+ * 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.adapter;
+
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+
+/**
+ * Adapters to domain objects, where the application is written in terms of
+ * domain objects and those objects are represented within the NOF through these
+ * adapter, and not directly.
+ */
+public interface ObjectAdapter extends ManagedObject {
+
+ /**
+ * The object's unique {@link Oid}.
+ *
+ * <p>
+ * This id allows the object to added to, stored by,
+ * and retrieved from the object store. Objects can be looked up by their
+ * {@link Oid}.
+ *
+ * <p>
+ * Note that standalone value objects ("foobar", or 5, or a date),
+ * are not mapped and have a <tt>null</tt> oid.
+ */
+ Oid getOid(); //XXX[2033] referenced by 'metamodel' only to create a bookmark (CommandUtil)
+
+// /**
+// * Returns either itself (if this is a root) or for parented collections, the
+// * adapter corresponding to their {@link ParentedOid#getParentOid() root oid}.
+// */
+// ObjectAdapter getAggregateRoot(); //XXX[2033] not referenced by 'metamodel'
+
+ /**
+ * Whether this instance belongs to another object (meaning its
+ * {@link #getOid()} will be a {@link ParentedOid}).
+ */
+ default boolean isParentedCollection() {
+ return getOid() instanceof ParentedOid;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
new file mode 100644
index 0000000..a8b2f77
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -0,0 +1,35 @@
+/*
+ * 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.adapter;
+
+import javax.annotation.Nullable;
+
+/**
+ *
+ * @since 2.0
+ *
+ */
+public interface ObjectAdapterProvider {
+
+ /**
+ * @return standalone (value) or root adapter
+ */
+ @Nullable ObjectAdapter adapterFor(@Nullable Object pojo);
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ObjectNotFoundException.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ObjectNotFoundException.java
new file mode 100644
index 0000000..5a034b1
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ObjectNotFoundException.java
@@ -0,0 +1,36 @@
+/*
+ * 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.adapter.oid;
+
+/**
+ * Indicates that the <tt>PojoRecreator</tt> was unable to instantiate a new pojo for the specified
+ * {@link Oid}.
+ */
+public class ObjectNotFoundException extends ObjectPersistenceException {
+ private static final long serialVersionUID = 1L;
+
+ public ObjectNotFoundException(final Oid oid) {
+ super("Object not found in store with oid " + oid);
+ }
+
+ public ObjectNotFoundException(final Oid oid, final Throwable cause) {
+ super("Object not found in store with oid " + oid, cause);
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ObjectPersistenceException.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ObjectPersistenceException.java
new file mode 100644
index 0000000..42270ae
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ObjectPersistenceException.java
@@ -0,0 +1,42 @@
+/*
+ * 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.adapter.oid;
+
+import org.apache.isis.core.commons.exceptions.IsisException;
+
+public class ObjectPersistenceException extends IsisException {
+ private static final long serialVersionUID = 1L;
+
+ public ObjectPersistenceException() {
+ super();
+ }
+
+ public ObjectPersistenceException(final String message) {
+ super(message);
+ }
+
+ public ObjectPersistenceException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ public ObjectPersistenceException(final Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
new file mode 100644
index 0000000..4e53f3f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
@@ -0,0 +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.adapter.oid;
+
+import java.io.Serializable;
+
+import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+
+
+/**
+ * An immutable identifier for either a root object (subtype {@link RootOid}) or
+ * a parented collection (subtype {@link ParentedOid}).
+ *
+ * <p>
+ * Note that value objects (strings, ints, {@link Value}s etc) do not have an {@link Oid}.
+ */
+public interface Oid extends Serializable {
+
+ /**
+ * A string representation of this {@link Oid}.
+ */
+ String enString();
+
+ /**
+ * Flags whether this OID is for a transient (not-yet-persisted) object,
+ * or a view model object, or for a persistent object.
+ *
+ * <p>
+ * In the case of an {@link ParentedOid}, is determined by the state
+ * of its {@link ParentedOid#getParentOid() root}'s {@link RootOid#isTransient() state}.
+ */
+ boolean isTransient();
+
+ boolean isViewModel();
+
+ boolean isPersistent();
+
+ default boolean isValue() {
+ return false; // default, only overridden by Oid_Value
+ }
+
+ /**
+ * {@link ObjectSpecId} of the domain object this instance is representing, or when parented,
+ * the ObjectSpecId of the parent domain object. When representing a value returns {@code null}.
+ */
+ ObjectSpecId getObjectSpecId();
+
+ // -- MARSHALLING
+
+ public static interface Marshaller {
+
+ String marshal(ParentedOid parentedOid);
+
+ String marshal(RootOid rootOid);
+
+ String joinAsOid(String domainType, String instanceId);
+
+ }
+
+ public static Marshaller marshaller() {
+ return Oid_Marshaller.INSTANCE;
+ }
+
+ // -- UN-MARSHALLING
+
+ public static interface Unmarshaller {
+
+ <T extends Oid> T unmarshal(String oidStr, Class<T> requestedType);
+
+ String splitInstanceId(String oidStr);
+
+ }
+
+ public static Unmarshaller unmarshaller() {
+ return Oid_Marshaller.INSTANCE;
+ }
+
+ // -- FACTORIES
+
+ /** for convenience*/
+ public static final class Factory {
+
+ public static RootOid value() {
+ return Oid_Value.INSTANCE;
+ }
+
+ // -- LEGACY
+
+ public static RootOid ofBookmark(Bookmark bookmark) {
+ return Oid_Root.of(
+ ObjectSpecId.of(bookmark.getObjectType()),
+ bookmark.getIdentifier(),
+ bookmark.getObjectState());
+ }
+
+ public static RootOid viewmodelOf(ObjectSpecId objectSpecId, String mementoStr) {
+ return Oid_Root.of(objectSpecId, mementoStr, Bookmark.ObjectState.VIEW_MODEL);
+ }
+
+ public static RootOid transientOf(ObjectSpecId objectSpecId, String identifier) {
+ return Oid_Root.of(objectSpecId, identifier, Bookmark.ObjectState.TRANSIENT);
+ }
+
+ public static RootOid persistentOf(ObjectSpecId objectSpecId, String identifier) {
+ return Oid_Root.of(objectSpecId, identifier, Bookmark.ObjectState.PERSISTENT);
+ }
+
+ // -- PARENTED COLLECTIONS
+
+ public static ParentedOid parentedOfOneToMany(RootOid parentRootOid, OneToManyAssociation oneToMany) {
+ return Oid_Parented.ofOneToManyId(parentRootOid, oneToMany.getId());
+ }
+
+ public static ParentedOid parentedOfOneToManyId(RootOid parentRootOid, String oneToManyId) {
+ return Oid_Parented.ofOneToManyId(parentRootOid, oneToManyId);
+ }
+
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
new file mode 100644
index 0000000..d7512f5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
@@ -0,0 +1,254 @@
+/*
+ * 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.adapter.oid;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.core.commons.internal.assertions._Assert;
+import org.apache.isis.core.commons.internal.base._Casts;
+import org.apache.isis.core.commons.internal.base._Strings;
+import org.apache.isis.core.commons.internal.collections._Lists;
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+
+import static org.apache.isis.core.commons.internal.base._Strings.splitThenStream;
+
+/**
+ * Factory for subtypes of {@link Oid}, based on their oid str.
+ *
+ * <p>
+ * Examples
+ * <dl>
+ * <dt>CUS:123</dt>
+ * <dd>persistent root</dd>
+ * <dt>!CUS:123</dt>
+ * <dd>transient root</dd>
+ * <dt>*CUS:123</dt>
+ * <dd>view model root</dd>
+ * <dt>CUS:123$items</dt>
+ * <dd>collection of persistent root</dd>
+ * <dt>!CUS:123$items</dt>
+ * <dd>collection of transient root</dd>
+ * <dt>CUS:123~NME:2</dt>
+ * <dd>aggregated object within persistent root</dd>
+ * <dt>!CUS:123~NME:2</dt>
+ * <dd>aggregated object within transient root</dd>
+ * <dt>CUS:123~NME:2~CTY:LON</dt>
+ * <dd>aggregated object within aggregated object within root</dd>
+ * <dt>CUS:123~NME:2$items</dt>
+ * <dd>collection of an aggregated object within root</dd>
+ * <dt>CUS:123~NME:2~CTY:LON$streets</dt>
+ * <dd>collection of an aggregated object within aggregated object within root</dd>
+ * </dl>
+ *
+ * <p>
+ * Separators:
+ * <dl>
+ * <dt>!</dt>
+ * <dd>precedes root object type, indicates transient</dd>
+ * <dt>*</dt>
+ * <dd>precedes root object type, indicates transient</dd>
+ * <dt>:</dt>
+ * <dd>precedes root object identifier</dd>
+ * <dt>~</dt>
+ * <dd>precedes aggregate oid</dd>
+ * <dt>$</dt>
+ * <dd>precedes collection name</dd>
+ * <dt>^</dt>
+ * <dd>precedes version</dd>
+ * </dl>
+ *
+ * <p>
+ * Note that # and ; were not chosen as separators to minimize noise when URL encoding OIDs.
+ */
+final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
+
+ public final static Oid_Marshaller INSTANCE = new Oid_Marshaller();
+
+ private Oid_Marshaller(){}
+
+ // -- public constants
+ public static final String VIEWMODEL_INDICATOR =
+ Bookmark.ObjectState.VIEW_MODEL.getCode(); // "*"
+
+
+ // -- private constants
+ private static final String TRANSIENT_INDICATOR =
+ Bookmark.ObjectState.TRANSIENT.getCode() ; // "!"
+
+ private static final String SEPARATOR = ":";
+ private static final String SEPARATOR_NESTING = "~";
+ private static final String SEPARATOR_PARENTED = "$";
+ private static final String SEPARATOR_VERSION = "^"; // legacy
+
+ private static final String WORD = "[^" + SEPARATOR + SEPARATOR_NESTING + SEPARATOR_PARENTED + "\\" + SEPARATOR_VERSION + "#" + "]+";
+
+ private static final String WORD_GROUP = "(" + WORD + ")";
+
+ private static Pattern OIDSTR_PATTERN =
+ Pattern.compile(
+ "^(" +
+ "(" +
+ "([" + TRANSIENT_INDICATOR + VIEWMODEL_INDICATOR + "])?" +
+ WORD_GROUP + SEPARATOR + WORD_GROUP +
+ ")" +
+ "(" +
+ "(" + SEPARATOR_NESTING + WORD + SEPARATOR + WORD + ")*" + // nesting of aggregates
+ ")" +
+ ")" +
+ "(" + "[" + SEPARATOR_PARENTED + "]" + WORD + ")?" + // optional collection name
+ "([\\" + SEPARATOR_VERSION + "].*)?" + // to be compatible with previous patterns, that optionally included version information
+ "$");
+
+
+ // -- join, split
+
+ @Override //implementing Oid.Marshaller
+ public String joinAsOid(String domainType, String instanceId) {
+ return domainType + SEPARATOR + instanceId;
+ }
+
+ @Override //implementing Oid.Unarshaller
+ public String splitInstanceId(String oidStr) {
+ final int indexOfSeperator = oidStr.indexOf(SEPARATOR);
+ return indexOfSeperator > 0? oidStr.substring(indexOfSeperator+1): null;
+ }
+
+
+
+ // -- unmarshal
+
+ @Override
+ public <T extends Oid> T unmarshal(String oidStr, Class<T> requestedType) {
+
+ final Matcher matcher = OIDSTR_PATTERN.matcher(oidStr);
+ if (!matcher.matches()) {
+ throw _Exceptions.illegalArgument("Could not parse OID '" + oidStr + "'; should match pattern: " + OIDSTR_PATTERN.pattern());
+ }
+
+ final String isTransientOrViewModelStr = getGroup(matcher, 3);
+ final Bookmark.ObjectState state;
+ if("!".equals(isTransientOrViewModelStr)) {
+ state = Bookmark.ObjectState.TRANSIENT;
+ } else if("*".equals(isTransientOrViewModelStr)) {
+ state = Bookmark.ObjectState.VIEW_MODEL;
+ } else {
+ state = Bookmark.ObjectState.PERSISTENT;
+ }
+
+ final String rootObjectType = getGroup(matcher, 4);
+ final String rootIdentifier = getGroup(matcher, 5);
+
+ final String aggregateOidPart = getGroup(matcher, 6);
+ final List<AggregateOidPart> aggregateOidParts = _Lists.newArrayList();
+
+ if(aggregateOidPart != null) {
+ final Stream<String> tildaSplitted = splitThenStream(aggregateOidPart, SEPARATOR_NESTING);
+
+ tildaSplitted.forEach(str->{
+ if(_Strings.isNullOrEmpty(str)) {
+ return; // leading "~"
+ }
+ final Iterator<String> colonSplitIter = splitThenStream(str, SEPARATOR).iterator();
+ final String objectType = colonSplitIter.next();
+ final String localId = colonSplitIter.next();
+ aggregateOidParts.add(new AggregateOidPart(objectType, localId));
+ });
+
+ }
+ final String collectionPart = getGroup(matcher, 8);
+ final String oneToManyId = collectionPart != null ? collectionPart.substring(1) : null;
+
+ if(oneToManyId == null) {
+ if(aggregateOidParts.isEmpty()) {
+ ensureCorrectType(oidStr, requestedType, RootOid.class);
+ return _Casts.uncheckedCast(
+ Oid_Root.of(ObjectSpecId.of(rootObjectType), rootIdentifier, state));
+ } else {
+ throw _Exceptions.illegalArgument("Aggregated Oids are no longer supported");
+ }
+ } else {
+ final String oidStrWithoutCollectionName = getGroup(matcher, 1);
+
+ final String parentOidStr = oidStrWithoutCollectionName;
+
+ RootOid parentOid = this.unmarshal(parentOidStr, RootOid.class);
+ ensureCorrectType(oidStr, requestedType, ParentedOid.class);
+ return _Casts.uncheckedCast( Oid_Parented.ofOneToManyId(parentOid, oneToManyId) );
+ }
+ }
+
+
+
+ private static class AggregateOidPart {
+ AggregateOidPart(String objectType, String localId) {
+ this.objectType = objectType;
+ this.localId = localId;
+ }
+ String objectType;
+ String localId;
+ @Override
+ public String toString() {
+ return SEPARATOR_NESTING + objectType + SEPARATOR + localId;
+ }
+ }
+
+
+ private <T> void ensureCorrectType(String oidStr, Class<T> requestedType,
+ final Class<? extends Oid> actualType) {
+
+ if(!requestedType.isAssignableFrom(actualType)) {
+ throw new IllegalArgumentException(
+ String.format("OID '%s' was unmarshealled to type '%s' which cannot be assigned "
+ + "to requested type '%s'",
+ oidStr, actualType.getSimpleName(), requestedType.getSimpleName()) );
+ }
+ }
+
+ private String getGroup(final Matcher matcher, final int group) {
+ final int groupCount = matcher.groupCount();
+ if(group > groupCount) {
+ return null;
+ }
+ final String val = matcher.group(group);
+ return _Strings.emptyToNull(val);
+ }
+
+
+ // -- marshal
+ @Override
+ public final String marshal(RootOid rootOid) {
+ _Assert.assertFalse("can not marshal values", rootOid.isValue());
+ final String transientIndicator = rootOid.isTransient()? TRANSIENT_INDICATOR : "";
+ final String viewModelIndicator = rootOid.isViewModel()? VIEWMODEL_INDICATOR : "";
+ return transientIndicator + viewModelIndicator + rootOid.getObjectSpecId() + SEPARATOR + rootOid.getIdentifier();
+ }
+
+ @Override
+ public String marshal(ParentedOid parentedOid) {
+ return parentedOid.getParentOid().enString() + SEPARATOR_PARENTED + parentedOid.getName();
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java
new file mode 100644
index 0000000..551d207
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java
@@ -0,0 +1,146 @@
+/*
+ * 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.adapter.oid;
+
+import java.io.IOException;
+import java.util.Objects;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+
+import static org.apache.isis.core.commons.internal.base._With.requires;
+
+final class Oid_Parented implements ParentedOid {
+
+ private static final long serialVersionUID = 1L;
+
+ private final String oneToManyId;
+ private final int hashCode;
+
+ private final RootOid parentRootOid;
+
+ static Oid_Parented ofOneToManyId(RootOid parentRootOid, String oneToManyId) {
+ return new Oid_Parented(parentRootOid, oneToManyId);
+ }
+
+ private Oid_Parented(RootOid parentRootOid, String oneToManyId) {
+ requires(parentRootOid, "parentRootOid");
+ this.parentRootOid = parentRootOid;
+ this.oneToManyId = oneToManyId;
+ this.hashCode = calculateHash();
+ }
+
+ @Override
+ public RootOid getParentOid() {
+ return parentRootOid;
+ }
+
+ @Override
+ public ObjectSpecId getObjectSpecId() {
+ return getParentOid().getObjectSpecId();
+ }
+
+ @Override
+ public boolean isTransient() {
+ return getParentOid().isTransient();
+ }
+
+ @Override
+ public boolean isViewModel() {
+ return getParentOid().isViewModel();
+ }
+
+ @Override
+ public boolean isPersistent() {
+ return getParentOid().isPersistent();
+ }
+
+ public static Oid_Parented deString(String oidStr) {
+ return unmarshaller().unmarshal(oidStr, Oid_Parented.class);
+ }
+
+ @Override
+ public String enString() {
+ return marshaller().marshal(this);
+ }
+
+ private Oid_Parented(Oid_Parented oid) throws IOException {
+ this.parentRootOid = oid.getParentOid();
+ this.oneToManyId = oid.oneToManyId;
+ this.hashCode = calculateHash();
+ }
+
+ @Override
+ public String getName() {
+ return oneToManyId;
+ }
+
+
+ // /////////////////////////////////////////////////////////
+ // toString
+ // /////////////////////////////////////////////////////////
+
+ @Override
+ public String toString() {
+ return enString();
+ }
+
+ // /////////////////////////////////////////////////////////
+ // Value semantics
+ // /////////////////////////////////////////////////////////
+
+ @Override
+ public boolean equals(final Object other) {
+ if (other == this) {
+ return true;
+ }
+ if (other == null) {
+ return false;
+ }
+ if (getClass() != other.getClass()) {
+ return false;
+ }
+ return equals((Oid_Parented) other);
+ }
+
+ public boolean equals(final Oid_Parented other) {
+ return Objects.equals(other.getParentOid(), getParentOid())
+ && Objects.equals(other.oneToManyId, oneToManyId);
+ }
+
+
+ @Override
+ public int hashCode() {
+ return hashCode;
+ }
+
+ private int calculateHash() {
+ return Objects.hash(getParentOid(), oneToManyId);
+ }
+
+ /**
+ * When the RootOid is persisted, all its "children"
+ * need updating similarly.
+ */
+ public Oid_Parented asPersistent(RootOid newParentRootOid) {
+ return new Oid_Parented(newParentRootOid, oneToManyId);
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
new file mode 100644
index 0000000..ff270c4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
@@ -0,0 +1,167 @@
+/*
+ * 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.adapter.oid;
+
+import java.util.Objects;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.core.commons.internal.url.UrlDecoderUtil;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.schema.common.v1.BookmarkObjectState;
+import org.apache.isis.schema.common.v1.OidDto;
+
+import static org.apache.isis.core.commons.internal.base._With.requires;
+
+import lombok.val;
+
+final class Oid_Root implements RootOid {
+
+ private final static long serialVersionUID = 2L;
+
+ private final ObjectSpecId objectSpecId;
+ private final String identifier;
+ private final Bookmark.ObjectState state;
+ private final int hashCode;
+
+ public static Oid_Root of(
+ ObjectSpecId objectSpecId,
+ String identifier,
+ Bookmark.ObjectState state) {
+
+ return new Oid_Root(objectSpecId, identifier, state);
+ }
+
+ private Oid_Root(ObjectSpecId objectSpecId, String identifier, Bookmark.ObjectState state) {
+
+ requires(objectSpecId, "objectSpecId");
+ requires(identifier, "identifier");
+ requires(state, "state");
+
+ this.objectSpecId = objectSpecId;
+ this.identifier = identifier;
+ this.state = state;
+ this.hashCode = calculateHash();
+
+ }
+
+ // -- deString'able, enString
+ public static Oid_Root deStringEncoded(final String urlEncodedOidStr) {
+ final String oidStr = UrlDecoderUtil.urlDecode(urlEncodedOidStr);
+ return deString(oidStr);
+ }
+
+ public static Oid_Root deString(final String oidStr) {
+ return Oid.unmarshaller().unmarshal(oidStr, Oid_Root.class);
+ }
+
+ @Override
+ public String enString() {
+ return Oid.marshaller().marshal(this);
+ }
+
+ // -- Properties
+ @Override
+ public ObjectSpecId getObjectSpecId() {
+ return objectSpecId;
+ }
+
+ @Override
+ public String getIdentifier() {
+ return identifier;
+ }
+
+ @Override
+ public boolean isTransient() {
+ return state == Bookmark.ObjectState.TRANSIENT;
+ }
+
+ @Override
+ public boolean isViewModel() {
+ return state == Bookmark.ObjectState.VIEW_MODEL;
+ }
+
+ @Override
+ public boolean isPersistent() {
+ return state == Bookmark.ObjectState.PERSISTENT;
+ }
+
+ @Override
+ public Bookmark asBookmark() {
+ val objectType = state.getCode() + getObjectSpecId().asString();
+ val identifier = getIdentifier();
+ return new Bookmark(objectType, identifier);
+ }
+
+ @Override
+ public OidDto asOidDto() {
+
+ val oidDto = new OidDto();
+
+ oidDto.setType(getObjectSpecId().asString());
+ oidDto.setId(getIdentifier());
+
+ val bookmarkState = state.toBookmarkState();
+ oidDto.setObjectState(
+ bookmarkState != BookmarkObjectState.PERSISTENT
+ ? bookmarkState
+ : null); // persistent is assumed if not specified...
+
+ return oidDto;
+ }
+
+
+ @Override
+ public boolean equals(final Object other) {
+ if (other == null) {
+ return false;
+ }
+ if (other == this) {
+ return true;
+ }
+ if (getClass() != other.getClass()) {
+ return false;
+ }
+ return equals((Oid_Root) other);
+ }
+
+ public boolean equals(final Oid_Root other) {
+ return Objects.equals(objectSpecId, other.getObjectSpecId())
+ && Objects.equals(identifier, other.getIdentifier())
+ && Objects.equals(state, other.state);
+ }
+
+ @Override
+ public int hashCode() {
+ return hashCode;
+ }
+
+ @Override
+ public String toString() {
+ return enString();
+ }
+
+ // -- HELPER
+
+ private int calculateHash() {
+ return Objects.hash(objectSpecId, identifier, state);
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
new file mode 100644
index 0000000..e14ee9b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
@@ -0,0 +1,87 @@
+/*
+ * 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.adapter.oid;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.schema.common.v1.OidDto;
+
+final class Oid_Value implements RootOid {
+
+ private final static long serialVersionUID = 1L;
+
+ static final Oid_Value INSTANCE = new Oid_Value();
+
+ @Override
+ public String enString() {
+ return null;
+ }
+
+ @Override
+ public boolean isValue() {
+ return true;
+ }
+
+ @Override
+ public boolean isTransient() {
+ return false;
+ }
+
+ @Override
+ public boolean isViewModel() {
+ return false;
+ }
+
+ @Override
+ public boolean isPersistent() {
+ return false;
+ }
+
+ @Override
+ public ObjectSpecId getObjectSpecId() {
+ return null;
+ }
+
+ @Override
+ public String getIdentifier() {
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ return "VALUE_OID";
+ }
+
+ @Override
+ public int hashCode() {
+ return 0;
+ }
+
+ @Override
+ public Bookmark asBookmark() {
+ return null;
+ }
+
+ @Override
+ public OidDto asOidDto() {
+ return null;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
new file mode 100644
index 0000000..f721fba
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
@@ -0,0 +1,54 @@
+/*
+ * 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.adapter.oid;
+
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.core.commons.internal.url.UrlDecoderUtil;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+
+/**
+ * Used as the {@link Oid} for {@link OneToManyAssociation} (collections).
+ */
+public interface ParentedOid extends Oid {
+
+ /**
+ * object identifier of the domain object that is holding the {@link OneToManyAssociation}
+ * this instance is representing
+ */
+ RootOid getParentOid();
+
+ /**
+ * id of the {@link OneToManyAssociation} this instance is representing, that is
+ * the member name, that is annotated with {@link Collection}
+ */
+ String getName();
+
+ // -- DECODE FROM STRING
+
+ public static ParentedOid deStringEncoded(final String urlEncodedOidStr) {
+ final String oidStr = UrlDecoderUtil.urlDecode(urlEncodedOidStr);
+ return deString(oidStr);
+ }
+
+ public static ParentedOid deString(String enString) {
+ return unmarshaller().unmarshal(enString, ParentedOid.class);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/PojoRecreationException.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/PojoRecreationException.java
new file mode 100644
index 0000000..f9bba6c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/PojoRecreationException.java
@@ -0,0 +1,29 @@
+/*
+ * 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.adapter.oid;
+
+public class PojoRecreationException extends ObjectPersistenceException {
+ private static final long serialVersionUID = 1L;
+
+ public PojoRecreationException(Oid oid, Throwable cause) {
+ super("Could not recreate pojo for oid oid " + oid, cause);
+
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/PojoRefreshException.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/PojoRefreshException.java
new file mode 100644
index 0000000..71be982
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/PojoRefreshException.java
@@ -0,0 +1,32 @@
+/*
+ * 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.adapter.oid;
+
+public class PojoRefreshException extends ObjectNotFoundException {
+ private static final long serialVersionUID = 1L;
+
+ public PojoRefreshException(Oid oid) {
+ super(oid);
+ }
+
+ public PojoRefreshException(Oid oid, Throwable cause) {
+ super(oid, cause);
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
new file mode 100644
index 0000000..4c951b3
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -0,0 +1,46 @@
+/*
+ * 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.adapter.oid;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.core.commons.internal.url.UrlDecoderUtil;
+import org.apache.isis.schema.common.v1.OidDto;
+
+public interface RootOid extends Oid {
+
+ String getIdentifier();
+
+ Bookmark asBookmark();
+
+ OidDto asOidDto();
+
+ // -- DECODE FROM STRING
+
+ public static RootOid deStringEncoded(final String urlEncodedOidStr) {
+ final String oidStr = UrlDecoderUtil.urlDecode(urlEncodedOidStr);
+ return deString(oidStr);
+ }
+
+ public static RootOid deString(final String oidStr) {
+ return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/package-info.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/package-info.java
new file mode 100644
index 0000000..53c74ca
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/package-info.java
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+
+/**
+ * Defines {@link org.apache.isis.core.metamodel.adapter.ObjectAdapter} interface,
+ * a wrapper around each domain object pojo.
+ *
+ * <p>
+ * {@link org.apache.isis.core.metamodel.adapter.ObjectAdapter} is analogous
+ * to {@link java.lang.Object java.lang.Object}; from it the {@link org.apache.isis.core.metamodel.spec.ObjectSpecification}
+ * can be obtained (analogous to {@link java.lang.Class java.lang.Class}.
+ *
+ * <p>
+ * The other significant type defined by
+ */
+package org.apache.isis.core.metamodel.adapter;
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacet.java
new file mode 100644
index 0000000..72a6564
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacet.java
@@ -0,0 +1,32 @@
+/*
+ * 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.authorization.standard;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
+import org.apache.isis.core.metamodel.interactions.HidingInteractionAdvisor;
+
+/**
+ * Optionally hide or disable an object, property, collection or action
+ * depending on the authorization.
+ */
+public interface AuthorizationFacet extends Facet, HidingInteractionAdvisor, DisablingInteractionAdvisor {
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacetAbstract.java
new file mode 100644
index 0000000..6f569c9
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacetAbstract.java
@@ -0,0 +1,78 @@
+/*
+ * 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.authorization.standard;
+
+import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
+import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
+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.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.security.api.authorization.manager.AuthorizationManager;
+
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+public abstract class AuthorizationFacetAbstract extends FacetAbstract implements AuthorizationFacet {
+
+ public static Class<? extends Facet> type() {
+ return AuthorizationFacet.class;
+ }
+
+ private final AuthorizationManager authorizationManager;
+
+ public AuthorizationFacetAbstract(
+ final FacetHolder holder) {
+ super(type(), holder, Derivation.NOT_DERIVED);
+ this.authorizationManager = getAuthorizationManager();
+ }
+
+ @Override
+ public String hides(VisibilityContext<? extends VisibilityEvent> ic) {
+
+ val hides = authorizationManager.isVisible(getAuthenticationSession(), ic.getIdentifier())
+ ? null
+ : "Not authorized to view";
+
+ if(hides!=null && log.isDebugEnabled()) {
+ log.debug("hides[{}] -> {}", ic.getIdentifier(), hides);
+ }
+
+ return hides;
+ }
+
+ @Override
+ public String disables(UsabilityContext<? extends UsabilityEvent> ic) {
+
+ val disables = authorizationManager.isUsable(getAuthenticationSession(), ic.getIdentifier())
+ ? null
+ : "Not authorized to edit";
+
+ if(disables!=null && log.isDebugEnabled()) {
+ log.debug("disables[{}] -> {}", ic.getIdentifier(), disables);
+ }
+
+ return disables;
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacetFactory.java
new file mode 100644
index 0000000..3f7d04f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacetFactory.java
@@ -0,0 +1,46 @@
+/*
+ * 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.authorization.standard;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+
+public class AuthorizationFacetFactory extends FacetFactoryAbstract {
+
+ public AuthorizationFacetFactory() {
+ super(FeatureType.EVERYTHING_BUT_PARAMETERS);
+ }
+
+ @Override
+ public void process(final ProcessClassContext processClassContext) {
+ super.addFacet(createFacet(processClassContext.getFacetHolder()));
+ }
+
+ @Override
+ public void process(final ProcessMethodContext processMethodContext) {
+ super.addFacet(createFacet(processMethodContext.getFacetHolder()));
+ }
+
+ private AuthorizationFacetImpl createFacet(final FacetHolder holder) {
+ return new AuthorizationFacetImpl(holder);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacetImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacetImpl.java
new file mode 100644
index 0000000..2a419c3
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/AuthorizationFacetImpl.java
@@ -0,0 +1,30 @@
+/*
+ * 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.authorization.standard;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class AuthorizationFacetImpl extends AuthorizationFacetAbstract {
+
+ public AuthorizationFacetImpl(final FacetHolder holder) {
+ super(holder);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/package-info.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/package-info.java
new file mode 100644
index 0000000..ea27f71
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/authorization/standard/package-info.java
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+/**
+ * Authorization API..
+ *
+ * <p>
+ * Used in two different ways:
+ * <ul>
+ * <li>in prototyping or single user, used by the {@link org.apache.isis.runtimes.dflt.runtime.authorization.standard.AuthorizationFacetFactoryImpl facet factory}
+ * implementations, that is, enforcing authorization on the "client-side".
+ * </li>
+ * <li>In client/server mode, used by a {@link org.apache.isis.metamodel.facetdecorator.FacetDecorator} for proxy authorization,
+ * that is, enforcing authorization by delegating to the "server-side".</li>
+ * </ul>
+ */
+package org.apache.isis.core.metamodel.authorization.standard;
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ArrayExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ArrayExtensions.java
new file mode 100644
index 0000000..a9882b3
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ArrayExtensions.java
@@ -0,0 +1,69 @@
+/*
+ * 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.commons;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.core.commons.exceptions.IsisException;
+
+public final class ArrayExtensions {
+
+ private ArrayExtensions() {
+ }
+
+ static Object[] convertPrimitiveToObjectArray(final Object extendee, final Class<?> arrayType) {
+ Object[] convertedArray;
+ try {
+ final Class<?> wrapperClass = ClassExtensions.asWrapped(arrayType);
+ final Constructor<?> constructor = wrapperClass.getConstructor(new Class[] { String.class });
+ final int len = Array.getLength(extendee);
+ convertedArray = (Object[]) Array.newInstance(wrapperClass, len);
+ for (int i = 0; i < len; i++) {
+ convertedArray[i] = constructor.newInstance(new Object[] { Array.get(extendee, i).toString() });
+ }
+ } catch (final NoSuchMethodException e) {
+ throw new IsisException(e);
+ } catch (final ArrayIndexOutOfBoundsException e) {
+ throw new IsisException(e);
+ } catch (final IllegalArgumentException e) {
+ throw new IsisException(e);
+ } catch (final InstantiationException e) {
+ throw new IsisException(e);
+ } catch (final IllegalAccessException e) {
+ throw new IsisException(e);
+ } catch (final InvocationTargetException e) {
+ throw new IsisException(e);
+ }
+ return convertedArray;
+ }
+
+ public static Object[] asCharToCharacterArray(final Object extendee) {
+ final char[] original = (char[]) extendee;
+ final int len = original.length;
+ final Character[] converted = new Character[len];
+ for (int i = 0; i < converted.length; i++) {
+ converted[i] = Character.valueOf(original[i]);
+ }
+ return converted;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CanBeVoid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CanBeVoid.java
new file mode 100644
index 0000000..29f1c81
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CanBeVoid.java
@@ -0,0 +1,25 @@
+/*
+ * 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.commons;
+
+public enum CanBeVoid {
+ TRUE,
+ FALSE
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassExtensions.java
new file mode 100644
index 0000000..587951b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassExtensions.java
@@ -0,0 +1,175 @@
+/*
+ * 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.commons;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.net.URL;
+
+import org.apache.isis.core.commons.exceptions.IsisException;
+import org.apache.isis.core.commons.internal.collections._Lists;
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.commons.internal.resources._Resources;
+
+import lombok.val;
+
+public final class ClassExtensions {
+
+
+ private ClassExtensions() {
+ }
+
+ public static Object newInstance(final Class<?> extendee, final Class<?> constructorParamType, final Object constructorArg) {
+ return ClassExtensions.newInstance(extendee, new Class[] { constructorParamType }, new Object[] { constructorArg });
+ }
+
+ /**
+ * Tries to instantiate using a constructor accepting the supplied
+ * arguments; if no such constructor then falls back to trying the no-arg
+ * constructor.
+ */
+ public static Object newInstance(final Class<?> extendee, final Class<?>[] constructorParamTypes, final Object[] constructorArgs) {
+ try {
+ Constructor<?> constructor;
+ try {
+ constructor = extendee.getConstructor(constructorParamTypes);
+ return constructor.newInstance(constructorArgs);
+ } catch (final NoSuchMethodException ex) {
+ try {
+ constructor = extendee.getConstructor();
+ return constructor.newInstance();
+ } catch (final NoSuchMethodException e) {
+ val msg = String.format("Failed to call contructor for type %s trying, "
+ + "args '%s' then trying no args.",
+ extendee.getName(),
+ _Lists.of(constructorParamTypes).toString());
+
+ throw _Exceptions.unrecoverable(msg, e);
+ }
+ }
+ } catch (final SecurityException | IllegalArgumentException | IllegalAccessException | InstantiationException | InvocationTargetException ex) {
+ throw new IsisException(ex);
+ }
+ }
+
+ public static String getSuperclass(final Class<?> extendee) {
+ final Class<?> superType = extendee.getSuperclass();
+
+ if (superType == null) {
+ return null;
+ }
+ return superType.getName();
+ }
+
+ public static boolean isAbstract(final Class<?> extendee) {
+ return Modifier.isAbstract(extendee.getModifiers());
+ }
+
+ public static boolean isJavaClass(final Class<?> extendee) {
+ final String className = extendee.getName();
+ return className.startsWith(ClassUtil.JAVA_CLASS_PREFIX) ||
+ extendee.getName().startsWith("sun.");
+ }
+
+ static Class<?> implementingClassOrNull(final Class<?> extendee, final Class<?> requiredClass, final Class<?> constructorParamType) {
+ if (extendee == null) {
+ return null;
+ }
+ if (!requiredClass.isAssignableFrom(extendee)) {
+ return null;
+ }
+ try {
+ extendee.getConstructor(new Class[] { constructorParamType });
+ } catch (final NoSuchMethodException ex) {
+ try {
+ extendee.getConstructor(new Class[] {});
+ } catch (final NoSuchMethodException e) {
+ return null;
+ }
+ } catch (final SecurityException e) {
+ return null;
+ }
+ final int modifiers = extendee.getModifiers();
+ if (!Modifier.isPublic(modifiers)) {
+ return null;
+ }
+ return extendee;
+ }
+
+ public static Method getMethod(final Class<?> clazz, final String methodName, final Class<?>... parameterClass) throws NoSuchMethodException {
+ return clazz.getMethod(methodName, parameterClass);
+ }
+
+ public static Method getMethodElseNull(final Class<?> clazz, final String methodName, final Class<?>... parameterClass) {
+ try {
+ return clazz.getMethod(methodName, parameterClass);
+ } catch (final NoSuchMethodException e) {
+ return null;
+ }
+ }
+
+ public static boolean exists(final Class<?> cls, final String resourceName) {
+ final URL url = _Resources.getResourceUrl(cls, resourceName);
+ return url != null;
+ }
+
+ static Class<?> asWrapped(final Class<?> primitiveClassExtendee) {
+ return ClassUtil.wrapperClasses.get(primitiveClassExtendee);
+ }
+
+ public static Class<? extends Object> asWrappedIfNecessary(final Class<?> cls) {
+ return cls.isPrimitive() ? asWrapped(cls) : cls;
+ }
+
+ public static Object toDefault(final Class<?> extendee) {
+ if(!extendee.isPrimitive()) {
+ return null;
+ }
+ return ClassUtil.defaultByPrimitiveClass.get(extendee);
+ }
+
+ /**
+ * Returns the corresponding 'null' value for the primitives, or just
+ * <tt>null</tt> if the class represents a non-primitive type.
+ */
+ public static Object getNullOrDefault(final Class<?> type) {
+ return ClassUtil.defaultByPrimitiveType.get(type);
+ }
+
+ public static boolean isCompatibleAsReturnType(final Class<?> returnTypeExtendee, final CanBeVoid canBeVoid, final Class<?> type) {
+ boolean mayBeVoid = canBeVoid == CanBeVoid.TRUE;
+
+ if (returnTypeExtendee == null) {
+ return true;
+ }
+ if (mayBeVoid && (type == void.class)) {
+ return true;
+ }
+
+ if (type.isPrimitive()) {
+ return returnTypeExtendee.isAssignableFrom(ClassUtil.wrapperClasses.get(type));
+ }
+
+ return (returnTypeExtendee.isAssignableFrom(type));
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassFunctions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassFunctions.java
new file mode 100644
index 0000000..f9252e0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassFunctions.java
@@ -0,0 +1,46 @@
+/*
+ * 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.commons;
+
+import java.util.function.Function;
+
+import javax.annotation.Nullable;
+
+public final class ClassFunctions {
+
+ private ClassFunctions(){}
+
+ public static <T> Function<Object, T> castTo(final Class<T> type) {
+ return new Function<Object, T>() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public T apply(final Object input) {
+ return (T) input;
+ }
+ };
+ }
+
+ public static Function<Class<?>, String> packageNameOf() {
+ return new Function<Class<?>, String>() {
+ @Nullable @Override public String apply(final Class<?> input) {
+ return input.getPackage().getName();
+ }
+ };
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassPredicates.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassPredicates.java
new file mode 100644
index 0000000..88c3c03
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassPredicates.java
@@ -0,0 +1,37 @@
+/*
+ * 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.commons;
+
+import java.util.function.Predicate;
+
+public final class ClassPredicates {
+
+ private ClassPredicates(){}
+
+ public static final <T> Predicate<Object> isOfType(final Class<T> type) {
+ return new Predicate<Object>() {
+ @Override
+ public boolean test(Object input) {
+ return type.isAssignableFrom(input.getClass());
+ }
+ };
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassUtil.java
new file mode 100644
index 0000000..a6a7183
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ClassUtil.java
@@ -0,0 +1,192 @@
+/*
+ * 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.commons;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.isis.core.commons.internal.base._Strings;
+import org.apache.isis.core.commons.internal.collections._Maps;
+import org.apache.isis.core.commons.internal.context._Context;
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
+
+import static org.apache.isis.core.commons.internal.base._With.requires;
+import static org.apache.isis.core.commons.internal.base._With.requiresNotEmpty;
+
+import lombok.val;
+
+public final class ClassUtil {
+
+ static final String JAVA_CLASS_PREFIX = "java.";
+
+ private static Map<String, Class<?>> builtInClasses = new HashMap<String, Class<?>>();
+
+ static {
+ put(void.class);
+ put(boolean.class);
+ put(char.class);
+ put(byte.class);
+ put(short.class);
+ put(int.class);
+ put(long.class);
+ put(float.class);
+ put(double.class);
+ }
+
+ private static void put(final Class<?> cls) {
+ builtInClasses.put(cls.getName(), cls);
+ }
+
+ static final Map<Class<?>, Object> defaultByPrimitiveClass =
+ MapUtil.asMap(
+ boolean.class, false,
+ byte.class, (byte)0,
+ short.class, (short)0,
+ int.class, 0,
+ long.class, 0L,
+ float.class, 0.0f,
+ double.class, 0.0,
+ char.class, (char)0
+ );
+ static Map<Class<?>, Class<?>> wrapperClasses =
+ MapUtil.asMap(
+ // TODO: there is a better way of doing this in 1.6 using TypeMirror
+ boolean.class, Boolean.class,
+ byte.class, Byte.class,
+ char.class, Character.class,
+ short.class, Short.class,
+ int.class, Integer.class,
+ long.class, Long.class,
+ float.class, Float.class,
+ double.class, Double.class,
+ void.class, Void.class
+ );
+
+ static Map<Class<?>, Object> defaultByPrimitiveType = new HashMap<Class<?>, Object>();
+
+ static {
+ defaultByPrimitiveType.put(byte.class, (byte) 0);
+ defaultByPrimitiveType.put(short.class, (short) 0);
+ defaultByPrimitiveType.put(int.class, 0);
+ defaultByPrimitiveType.put(long.class, 0L);
+ defaultByPrimitiveType.put(char.class, 0);
+ defaultByPrimitiveType.put(float.class, 0.0F);
+ defaultByPrimitiveType.put(double.class, 0.0);
+ defaultByPrimitiveType.put(boolean.class, false);
+ }
+
+ public static Map<String, Class<?>> primitives = _Maps.newHashMap();
+
+ static {
+ @SuppressWarnings({ "rawtypes" })
+ final List<Class> primitiveClasses = Arrays.<Class> asList(
+ boolean.class,
+ byte.class,
+ short.class,
+ int.class,
+ long.class,
+ float.class,
+ double.class,
+ char.class);
+ for (final Class<?> cls : primitiveClasses) {
+ primitives.put(cls.getName(), cls);
+ }
+ }
+
+
+ // //////////////////////////////////////
+
+ private ClassUtil() {
+ }
+
+ public static Class<?> getBuiltIn(final String name) {
+ return builtInClasses.get(name);
+ }
+
+ /**
+ * Returns the supplied Class so long as it implements (or is a subclass of)
+ * the required class, and also has either a constructor accepting the
+ * specified param type, or has a no-arg constructor.
+ */
+ public static Class<?> implementingClassOrNull(final String classCandidateName, final Class<?> requiredClass, final Class<?> constructorParamType) {
+ if (classCandidateName == null) {
+ return null;
+ }
+ Class<?> classCandidate = null;
+ try {
+ classCandidate = _Context.loadClass(classCandidateName);
+ return ClassExtensions.implementingClassOrNull(classCandidate, requiredClass, constructorParamType);
+ } catch (final ClassNotFoundException e) {
+ return null;
+ }
+ }
+
+ public static boolean directlyImplements(final Class<?> cls, final Class<?> interfaceType) {
+ for (final Class<?> directlyImplementedInterface : cls.getInterfaces()) {
+ if (directlyImplementedInterface == interfaceType) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static Class<?> forNameElseFail(final String fullName) {
+ requiresNotEmpty(fullName, "fullName");
+ final Class<?> builtIn = ClassUtil.getBuiltIn(fullName);
+ if (builtIn != null) {
+ return builtIn;
+ }
+ try {
+ return _Context.loadClass(fullName);
+ } catch (final ClassNotFoundException e) {
+ throw _Exceptions.unrecoverable(e);
+ }
+ }
+
+ public static Class<?> forNameElseNull(final String fullName) {
+ if (_Strings.isNullOrEmpty(fullName)) {
+ return null;
+ }
+ try {
+ return _Context.loadClass(fullName);
+ } catch (final ClassNotFoundException e) {
+ return null;
+ }
+ }
+
+ /**
+ * Returns {@code cls.getCanonicalName()} if present.
+ * Otherwise resorts to fully qualified class-name, with any '$' replaced by '.$'.
+ * @param cls
+ * @return non-null
+ */
+ public static String getCanonicalName_friendlyToInnerClasses(Class<?> cls) {
+ requires(cls, "cls");
+
+ val name = cls.getCanonicalName();
+ if(name==null) {
+ return cls.getName().replace("$", ".$").replace("..", ".");
+ }
+ return name;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CloseableExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CloseableExtensions.java
new file mode 100644
index 0000000..d3d420c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CloseableExtensions.java
@@ -0,0 +1,40 @@
+/*
+ * 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.commons;
+
+import java.io.Closeable;
+
+public final class CloseableExtensions {
+
+ private CloseableExtensions() {
+ }
+
+ public static void closeSafely(final Closeable extendee) {
+ if (extendee != null) {
+ try {
+ extendee.close();
+ } catch (final Exception ignore) {
+ // ignore
+ }
+ }
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/DateExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/DateExtensions.java
new file mode 100644
index 0000000..dc759f4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/DateExtensions.java
@@ -0,0 +1,35 @@
+/*
+ * 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.commons;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+
+public final class DateExtensions {
+
+ private DateExtensions(){}
+
+ public static String asTimestamp(final Date date) {
+ final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd-hhmmssSSS");
+ return date == null ? "" : simpleDateFormat.format(date);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/InputStreamExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/InputStreamExtensions.java
new file mode 100644
index 0000000..75431ee
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/InputStreamExtensions.java
@@ -0,0 +1,69 @@
+/*
+ * 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.commons;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public final class InputStreamExtensions {
+
+ private static final int DEFAULT_BUFFER_SIZE = 1024;
+
+ private InputStreamExtensions() {
+ }
+
+ /**
+ * Copy bytes from an <code>InputStream</code> to an
+ * <code>OutputStream</code>.
+ * <p>
+ * This method buffers the input internally, so there is no need to use a
+ * <code>BufferedInputStream</code>.
+ *
+ * @param extendee
+ * the <code>InputStream</code> to read from
+ * @param output
+ * the <code>OutputStream</code> to write to
+ * @return the number of bytes copied
+ * @throws IllegalArgumentException
+ * if the input or output is null
+ * @throws IOException
+ * if an I/O error occurs
+ * @since Commons IO 1.1
+ */
+ public static int copyTo(final InputStream extendee, final OutputStream output) throws IOException {
+ if (extendee == null) {
+ throw new IllegalArgumentException("InputStream cannot be null");
+ }
+ if (output == null) {
+ throw new IllegalArgumentException("OutputStream cannot be null");
+ }
+ final byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
+ int count = 0;
+ int n = 0;
+ while (-1 != (n = extendee.read(buffer))) {
+ output.write(buffer, 0, n);
+ count += n;
+ }
+ return count;
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ListExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ListExtensions.java
new file mode 100644
index 0000000..68761af
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ListExtensions.java
@@ -0,0 +1,115 @@
+/*
+ * 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.commons;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.isis.core.commons.internal.base._NullSafe;
+import org.apache.isis.core.commons.internal.collections._Lists;
+
+import static org.apache.isis.core.commons.internal.base._NullSafe.stream;
+
+public final class ListExtensions {
+ private static final String DEFAULT_DELIMITER = ",";
+
+ private ListExtensions() {
+ }
+
+ public static <T> List<T> combineWith(final List<T> extendee, final List<T> list2) {
+ final List<T> combinedList = _Lists.newArrayList();
+ combinedList.addAll(extendee);
+ combinedList.addAll(list2);
+ return combinedList;
+ }
+
+ /**
+ * Returns list1 with everything in list2, ignoring duplicates.
+ */
+ public static <T> List<T> mergeWith(final List<T> extendee, final List<T> list2) {
+ for (final T obj : list2) {
+ if (!(extendee.contains(obj))) {
+ extendee.add(obj);
+ }
+ }
+ return extendee;
+ }
+
+
+
+ /**
+ * @see #appendDelimitedStringToList(String, String, List)
+ */
+ public static List<String> appendDelimitedStringToList(final String commaSeparated, final List<String> list) {
+ return appendDelimitedStringToList(commaSeparated, DEFAULT_DELIMITER, list);
+ }
+
+ public static List<String> appendDelimitedStringToList(final String delimited, final String delimiter, final List<String> list) {
+ if (delimited == null) {
+ return list;
+ }
+ final String[] optionValues = delimited.split(delimiter);
+ list.addAll(Arrays.asList(optionValues));
+ return list;
+ }
+
+ // //////////////////////////////////////
+
+ public static <T> List<T> mutableCopy(final List<T> input) {
+ return stream(input)
+ .collect(Collectors.toList());
+ }
+
+ public static <T> List<T> mutableCopy(T[] arr) {
+ return stream(arr)
+ .collect(Collectors.toList());
+ }
+
+ public static <T> void insert(final List<T> list, final int insertionPoint, final T elementToInsert) {
+ extend(list, insertionPoint);
+ list.add(insertionPoint, elementToInsert);
+ }
+
+ public static <T> void adjust(final List<T> list, final int requiredLength) {
+ extend(list, requiredLength);
+ if(list.size() > requiredLength) {
+ list.subList(requiredLength, list.size()).clear();
+ }
+ }
+
+ private static <T> void extend(final List<T> list, final int requiredLength) {
+ for(int i=list.size(); i<requiredLength; i++) {
+ list.add(null);
+ }
+ }
+
+ public static <T> Collection<T> filtered(final List<Object> extendee, final Class<T> type) {
+ return _NullSafe.stream(extendee)
+ .filter(ClassPredicates.isOfType(type))
+ .map(ClassFunctions.castTo(type))
+ .collect(Collectors.toList());
+ }
+
+
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/LocaleUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/LocaleUtil.java
new file mode 100644
index 0000000..4915960
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/LocaleUtil.java
@@ -0,0 +1,40 @@
+/*
+ * 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.commons;
+
+import java.util.Locale;
+
+import org.apache.isis.core.commons.internal.base._Strings;
+
+public class LocaleUtil {
+
+ public static Locale findLocale(final String localeStr) {
+ if (_Strings.isNotEmpty(localeStr)) {
+ final Locale[] availableLocales = Locale.getAvailableLocales();
+ for (final Locale locale : availableLocales) {
+ if (locale.toString().equals(localeStr)) {
+ return locale;
+ }
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MapUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MapUtil.java
new file mode 100644
index 0000000..77b5f63
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MapUtil.java
@@ -0,0 +1,48 @@
+/*
+ * 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.commons;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+public final class MapUtil {
+
+ private MapUtil() {
+ }
+
+ /**
+ * Converts a list of objects [a, 1, b, 2] into a map {a -> 1; b -> 2}
+ */
+ @SuppressWarnings("unchecked")
+ public static <K,V> Map<K,V> asMap(Object... keyValPair){
+ Map<K,V> map = new HashMap<K,V>();
+
+ if(keyValPair.length % 2 != 0){
+ throw new IllegalArgumentException("Keys and values must be pairs.");
+ }
+
+ for(int i = 0; i < keyValPair.length; i += 2){
+ map.put((K) keyValPair[i], (V) keyValPair[i+1]);
+ }
+
+ return Collections.unmodifiableMap(map);
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodExtensions.java
new file mode 100644
index 0000000..e97a1f0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodExtensions.java
@@ -0,0 +1,92 @@
+/*
+ * 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.commons;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+
+public class MethodExtensions {
+
+ private MethodExtensions() {
+ }
+
+ public static boolean isStatic(final Method method) {
+ return Modifier.isStatic(method.getModifiers());
+ }
+
+ // //////////////////////////////////////
+
+ public static Object invoke(final Method method, final Object object) {
+ final Object[] parameters = MethodExtensions.getNullOrDefaultArgs(method);
+ return MethodExtensions.invoke(method, object, parameters);
+ }
+
+ public static Object invoke(final Method method, final Object object, final Object[] arguments) {
+ try {
+ Object[] defaultAnyPrimitive = defaultAnyPrimitive(method.getParameterTypes(), arguments);
+ return MethodInvocationPreprocessor.invoke(method, object, defaultAnyPrimitive);
+ } catch (Exception e) {
+ return ThrowableExtensions.handleInvocationException(e, method.getName());
+ }
+ }
+
+ private static Object[] defaultAnyPrimitive(Class<?>[] parameterTypes, Object[] arguments) {
+ if(parameterTypes == null || arguments == null || parameterTypes.length != arguments.length) {
+ return arguments;
+ }
+ final Object[] argumentsWithPrimitivesDefaulted = new Object[arguments.length];
+ for(int i=0; i<argumentsWithPrimitivesDefaulted.length; i++) {
+ argumentsWithPrimitivesDefaulted[i] = valueIfPrimitiveThenDefaulted(parameterTypes[i], arguments[i]);
+ }
+ return argumentsWithPrimitivesDefaulted;
+ }
+
+ private static Object valueIfPrimitiveThenDefaulted(Class<?> cls, Object argument) {
+ if(argument != null) {
+ return argument;
+ }
+ if(!cls.isPrimitive()) {
+ return argument;
+ }
+ return ClassUtil.defaultByPrimitiveClass.get(cls);
+ }
+
+ public static Object invokeStatic(final Method method, final Object[] parameters) {
+ return invoke(method, null, parameters);
+ }
+
+ public static Object invokeStatic(final Method method) {
+ return invoke(method, null, MethodExtensions.getNullOrDefaultArgs(method));
+ }
+
+ // //////////////////////////////////////
+
+
+ public static Object[] getNullOrDefaultArgs(final Method method) {
+ final Class<?>[] paramTypes = method.getParameterTypes();
+ final Object[] parameters = new Object[paramTypes.length];
+ for (int i = 0; i < parameters.length; i++) {
+ parameters[i] = ClassExtensions.getNullOrDefault(paramTypes[i]);
+ }
+ return parameters;
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodInvocationPreprocessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodInvocationPreprocessor.java
new file mode 100644
index 0000000..8c2d2b0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodInvocationPreprocessor.java
@@ -0,0 +1,154 @@
+/*
+ * 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.commons;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+
+import org.apache.isis.core.commons.internal.base._Casts;
+import org.apache.isis.core.commons.internal.base._NullSafe;
+import org.apache.isis.core.commons.internal.collections._Arrays;
+import org.apache.isis.core.commons.internal.collections._Collections;
+
+import static org.apache.isis.core.commons.internal.base._NullSafe.isEmpty;
+
+import lombok.val;
+
+/**
+ * Utility for method invocation pre-processing.
+ * <p>
+ * For a given array of parameters, we intercept and adapt those,
+ * that are not compatible with the expected target parameter type.
+ * </p>
+ * <p>
+ * By now we do this for collection parameter types List, Set, SortedSet, Collection and Arrays.
+ * </p>
+ */
+public class MethodInvocationPreprocessor {
+
+ public static Object invoke(Method method, Object targetPojo, Object[] executionParameters)
+ throws IllegalAccessException, InvocationTargetException {
+
+ if (isEmpty(executionParameters)) {
+ return method.invoke(targetPojo, executionParameters);
+ }
+
+ val parameterTypes = method.getParameterTypes();
+ val paramCount = parameterTypes.length;
+ val adaptedExecutionParameters = new Object[paramCount];
+
+ for(int i=0; i<paramCount; ++i) {
+ val origParam = _Arrays.get(executionParameters, i).orElse(null);
+ adaptedExecutionParameters[i] = adapt(origParam, parameterTypes[i]);
+ }
+
+ try {
+ return method.invoke(targetPojo, adaptedExecutionParameters);
+ } catch (IllegalArgumentException e) {
+ throw verboseArgumentException(parameterTypes, adaptedExecutionParameters, e);
+ }
+ }
+
+ // -- OBJECT ADAPTER
+
+
+ /**
+ * Replaces obj (if required) to be conform with the parameterType
+ * @param obj
+ * @param parameterType
+ * @return
+ */
+
+ private static Object adapt(Object obj, Class<?> parameterType) {
+
+ if(obj==null) {
+ return null;
+ }
+
+ if(_Arrays.isArrayType(parameterType)) {
+ final Class<?> componentType = _Arrays.inferComponentTypeIfAny(parameterType);
+ if(componentType==null) {
+ return obj;
+ }
+ @SuppressWarnings("rawtypes") final List list = (List)obj;
+ return _Arrays.toArray(_Casts.uncheckedCast(list), componentType);
+ }
+
+ // allow no side effects on Collection arguments
+ if(Collection.class.equals(parameterType)) {
+ return _Collections.asUnmodifiableCollection((List<?>)obj);
+ }
+
+ // allow no side effects on List arguments
+ if(List.class.equals(parameterType)) {
+ return _Collections.asUnmodifiableList((List<?>)obj);
+ }
+
+ // adapt as Set (unmodifiable)
+ if(Set.class.equals(parameterType)) {
+ return _Collections.asUnmodifiableSet((List<?>)obj);
+ }
+
+ // adapt as SortedSet (unmodifiable)
+ if(SortedSet.class.equals(parameterType)) {
+ return _Collections.asUnmodifiableSortedSet((List<?>)obj);
+ }
+
+ return obj;
+ }
+
+ private static IllegalArgumentException verboseArgumentException(
+ Class<?>[] parameterTypes,
+ Object[] adaptedExecutionParameters,
+ IllegalArgumentException e) {
+
+ val sb = new StringBuilder();
+
+ val expectedParamCount = _NullSafe.size(parameterTypes);
+ val actualParamCount = _NullSafe.size(adaptedExecutionParameters);
+ if(expectedParamCount!=actualParamCount) {
+ sb.append(String.format("param-count mismatch: expected %d, got %d\n",
+ expectedParamCount, actualParamCount));
+ } else {
+ sb.append("expected param type mismatch\n");
+ }
+
+ for(int j=0;j<parameterTypes.length;++j) {
+ final Class<?> parameterType = parameterTypes[j];
+ final String parameterValueTypeLiteral = _Arrays.get(adaptedExecutionParameters, j)
+ .map(Object::getClass)
+ .map(Class::getName)
+ .orElse("missing or null");
+
+ sb.append(String.format("param-type[%d]: '%s', got '%s'\n",
+ j, parameterType.getName(), parameterValueTypeLiteral));
+ }
+
+
+ // re-throw more verbose
+ return new IllegalArgumentException(sb.toString(), e);
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java
new file mode 100644
index 0000000..fba381d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java
@@ -0,0 +1,202 @@
+/*
+ * 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.commons;
+
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Collection;
+import java.util.Set;
+import java.util.function.Consumer;
+
+import lombok.val;
+
+public class MethodUtil {
+
+ private MethodUtil(){}
+
+ public static void invoke(final Collection<Method> methods, final Object object) {
+ methods.forEach(method->MethodExtensions.invoke(method, object));
+ }
+
+ /**
+ * Searches the supplied array of methods for specific method and returns
+ * it, also removing it from supplied array if found (by setting to
+ * <tt>null</tt>).
+ *
+ * <p>
+ * Any methods that do not meet the search criteria are left in the array of
+ * methods.
+ */
+ public static Method removeMethod(
+ final Set<Method> methods,
+ final String name,
+ final Class<?> returnType,
+ final Class<?>[] paramTypes) {
+
+ val methodIterator = methods.iterator();
+ while(methodIterator.hasNext()) {
+ val method = methodIterator.next();
+ if(matches(method, name, returnType, paramTypes)){
+ methodIterator.remove();
+ return method;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Searches the supplied array of methods for specific method and returns
+ * its index, otherwise returns <tt>-1</tt>.
+ *
+ * <p>
+ * The search algorithm is:
+ * <ul>
+ * <li>has the specified prefix</li>
+ * <li>has the specified return type, or <tt>void</tt> if canBeVoid is
+ * <tt>true</tt> (but see below)</li>
+ * <li>has the specified number of parameters</li>
+ * </ul>
+ * If the returnType is specified as null then the return type is ignored.
+ */
+ private static boolean matches(
+ final Method method,
+ final String name,
+ final Class<?> returnType,
+ final Class<?>[] paramTypes) {
+
+ if (!isPublic(method)) {
+ return false;
+ }
+
+ if (isStatic(method)) {
+ return false;
+ }
+
+ // check for name
+ if (!method.getName().equals(name)) {
+ return false;
+ }
+
+ // check for return type
+ if (returnType != null && returnType != method.getReturnType()) {
+ return false;
+ }
+
+ // check params (if required)
+ if (paramTypes != null) {
+ final Class<?>[] parameterTypes = method.getParameterTypes();
+ if (paramTypes.length != parameterTypes.length) {
+ return false;
+ }
+
+ for (int c = 0; c < paramTypes.length; c++) {
+ if ((paramTypes[c] != null) && (paramTypes[c] != parameterTypes[c])) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+
+ /**
+ * Searches the supplied array of methods for all specific methods and
+ * returns them, also removing them from supplied array if found.
+ *
+ * <p>
+ * Any methods that do not meet the search criteria are left in the array of
+ * methods.
+ *
+ * <p>
+ * The search algorithm is:
+ * <ul>
+ * <li>has the specified prefix</li>
+ * <li>has the specified return type, or <tt>void</tt> if canBeVoid is
+ * <tt>true</tt> (but see below)</li>
+ * <li>has the specified number of parameters</li>
+ * </ul>
+ * If the returnType is specified as null then the return type is ignored.
+ *
+ * @param name
+ * @param onRemoval
+ * @param paramTypes
+ * the set of parameters the method should have, if null then is
+ * ignored
+ * @param returnType
+ * @param canBeVoid
+ * @return Method
+ */
+ public static void removeMethods(
+ Set<Method> methods,
+ String prefix,
+ Class<?> returnType,
+ CanBeVoid canBeVoid,
+ int paramCount,
+ Consumer<Method> onMatch) {
+
+ methods.removeIf(method ->
+ matches(method, prefix, returnType, canBeVoid, paramCount, onMatch));
+
+ }
+
+ private static boolean matches(
+ Method method,
+ String prefix,
+ Class<?> returnType,
+ CanBeVoid canBeVoid,
+ int paramCount,
+ Consumer<Method> onMatch) {
+
+ if (isStatic(method)) {
+ return false;
+ }
+
+ val goodPrefix = method.getName().startsWith(prefix);
+ val goodCount = method.getParameterTypes().length == paramCount;
+ val type = method.getReturnType();
+ val goodReturn = ClassExtensions.isCompatibleAsReturnType(returnType, canBeVoid, type);
+
+ if (goodPrefix && goodCount && goodReturn) {
+ onMatch.accept(method);
+ return true;
+ }
+
+ return false;
+
+ }
+
+
+ public static boolean isNotStatic(final Method method) {
+ return !isStatic(method);
+ }
+
+ public static boolean isStatic(final Method method) {
+ final int modifiers = method.getModifiers();
+ return Modifier.isStatic(modifiers);
+ }
+
+ public static boolean isPublic(Member method) {
+ final int modifiers = method.getModifiers();
+ return Modifier.isPublic(modifiers);
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ObjectExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ObjectExtensions.java
new file mode 100644
index 0000000..c999563
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ObjectExtensions.java
@@ -0,0 +1,82 @@
+/*
+ * 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.commons;
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.apache.isis.core.commons.internal._Constants;
+
+/**
+ * Helpers to co-erce non-generic values into type-safe generics without
+ * having to suppress compiler warnings all over the place.
+ */
+public final class ObjectExtensions {
+
+ private ObjectExtensions() {
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T> T asT(final Object extendee) {
+ return (T) extendee;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T> List<T> asListT(final Object extendee, final Class<T> castTo) {
+ return (List<T>) extendee;
+ }
+
+ public static Object[] asArray(final Object extendee) {
+ final Class<?> arrayType = extendee.getClass().getComponentType();
+ if (!arrayType.isPrimitive()) {
+ return (Object[]) extendee;
+ }
+ if (arrayType == char.class) {
+ return ArrayExtensions.asCharToCharacterArray(extendee);
+ } else {
+ return ArrayExtensions.convertPrimitiveToObjectArray(extendee, arrayType);
+ }
+ }
+
+ public static Method getMethod(final Object object, final String methodName, final Class<?>... parameterClass) throws NoSuchMethodException {
+ return ClassExtensions.getMethod(object.getClass(), methodName, parameterClass);
+ }
+
+ public static Method getMethod(final Object object, final String methodName) throws NoSuchMethodException {
+ return ClassExtensions.getMethod(object.getClass(), methodName, _Constants.emptyClasses);
+ }
+
+ public static String classBaseName(final Object forObject) {
+ final String name = forObject.getClass().getName();
+ return name.substring(name.lastIndexOf('.') + 1);
+ }
+
+ public static void appendToString(final Object extendee, final Appendable buf) {
+ try {
+ buf.append(classBaseName(extendee));
+ buf.append('@');
+ buf.append(Integer.toHexString(extendee.hashCode()));
+ } catch (IOException iox) {
+ throw new RuntimeException("A problem occurred while appending an object to an appendable", iox);
+ }
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ResourceUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ResourceUtil.java
new file mode 100644
index 0000000..5033ae8
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ResourceUtil.java
@@ -0,0 +1,83 @@
+/*
+ * 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.commons;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.isis.core.commons.internal.context._Context;
+
+public class ResourceUtil {
+
+ private ResourceUtil(){}
+
+ public static InputStream getResourceAsStream(final String resource) {
+
+ // try Isis's classloader
+ ClassLoader classLoader = _Context.getDefaultClassLoader();
+ InputStream is = classLoader.getResourceAsStream(resource);
+ if (is != null) {
+ return is;
+ }
+
+ // try thread's classloader
+ classLoader = Thread.currentThread().getContextClassLoader();
+ is = classLoader.getResourceAsStream(resource);
+ if (is != null) {
+ return is;
+ }
+
+ // try this class' classloader
+ classLoader = ResourceUtil.class.getClassLoader();
+ is = classLoader.getResourceAsStream(resource);
+ if (is != null) {
+ return is;
+ }
+
+ // try system class loader (could return null)
+ // have wrapped in a try...catch because for same reason as
+ // getResourceURL
+ try {
+ return ClassLoader.getSystemResourceAsStream(resource);
+ } catch (final NullPointerException ignore) {
+ return null;
+ }
+ }
+
+ /**
+ * @param request
+ * @return real-path resource from file-system, if any
+ */
+ public static InputStream getResourceAsStream(final HttpServletRequest request) {
+ final String realPath = request.getSession().getServletContext().getRealPath(request.getServletPath());
+ if (realPath == null) {
+ return null;
+ }
+ try {
+ return new FileInputStream(realPath);
+ } catch (final FileNotFoundException e) {
+ return null;
+ }
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/StringExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/StringExtensions.java
new file mode 100644
index 0000000..1b56106
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/StringExtensions.java
@@ -0,0 +1,393 @@
+/*
+ * 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.commons;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.apache.isis.applib.util.Enums;
+import org.apache.isis.core.commons.internal.base._Strings;
+import org.apache.isis.core.commons.internal.resources._Resources;
+
+public final class StringExtensions {
+
+ private StringExtensions() {}
+
+ // ////////////////////////////////////////////////////////////
+ // naturalName, naturalize, simpleName, camel, memberIdFor
+ // ////////////////////////////////////////////////////////////
+
+ /**
+ * Returns a word spaced version of the specified name, so there are spaces
+ * between the words, where each word starts with a capital letter. E.g.,
+ * "NextAvailableDate" is returned as "Next Available Date".
+ */
+ public static String asNaturalName2(String name) {
+ return _Strings.asNaturalName2.apply(name);
+ }
+
+ public static String asNaturalName(final String extendee) {
+
+ int pos = 0;
+
+ // find first upper case character
+ while ((pos < extendee.length()) && Character.isLowerCase(extendee.charAt(pos))) {
+ pos++;
+ }
+
+ if (pos == extendee.length()) {
+ return "invalid name";
+ }
+ return naturalized(extendee, pos);
+ }
+
+ public static String asNaturalized(final String extendee) {
+ return naturalized(extendee, 0);
+ }
+
+ private static String naturalized(final String name, final int startingPosition) {
+ if (name.length() <= startingPosition) {
+ throw new IllegalArgumentException("string shorter than starting position provided");
+ }
+ final StringBuffer s = new StringBuffer(name.length() - startingPosition);
+ for (int j = startingPosition; j < name.length(); j++) { // process
+ // english name
+ // - add spaces
+ if ((j > startingPosition) && isStartOfNewWord(name.charAt(j), name.charAt(j - 1))) {
+ s.append(' ');
+ }
+ if (j == startingPosition) {
+ s.append(Character.toUpperCase(name.charAt(j)));
+ } else {
+ s.append(name.charAt(j));
+ }
+ }
+ final String str = s.toString();
+ return str;
+ }
+
+ private static boolean isStartOfNewWord(final char c, final char previousChar) {
+ return Character.isUpperCase(c) || Character.isDigit(c) && !Character.isDigit(previousChar);
+ }
+
+ public static String asCamel(final String extendee) {
+ final StringBuffer b = new StringBuffer(extendee.length());
+ final StringTokenizer t = new StringTokenizer(extendee);
+ b.append(t.nextToken());
+ while (t.hasMoreTokens()) {
+ final String token = t.nextToken();
+ b.append(token.substring(0, 1).toUpperCase()); // replace spaces
+ // with
+ // camelCase
+ b.append(token.substring(1));
+ }
+ return b.toString();
+ }
+
+ // TODO: combine with camel
+ public static String asCamelLowerFirst(final String extendee) {
+ final StringBuffer b = new StringBuffer(extendee.length());
+ final StringTokenizer t = new StringTokenizer(extendee);
+ b.append(asLowerFirst(t.nextToken()));
+ while (t.hasMoreTokens()) {
+ final String token = t.nextToken();
+ b.append(token.substring(0, 1).toUpperCase()); // replace spaces
+ // with camelCase
+ b.append(token.substring(1).toLowerCase());
+ }
+ return b.toString();
+ }
+
+ public static String asLowerDashed(String extendee) {
+ return _Strings.asLowerDashed.apply(extendee);
+ }
+
+ public static String asPascal(final String extendee) {
+ return capitalize(asCamel(extendee));
+ }
+
+ // ////////////////////////////////////////////////////////////
+ // capitalize, lowerFirst, firstWord
+ // ////////////////////////////////////////////////////////////
+
+ public static String capitalize(final String extendee) {
+ return _Strings.capitalize(extendee);
+ }
+
+ /**
+ * Simply forces first char to be lower case.
+ */
+ public static String asLowerFirst(final String extendee) {
+ if (_Strings.isNullOrEmpty(extendee)) {
+ return extendee;
+ }
+ if (extendee.length() == 1) {
+ return extendee.toLowerCase();
+ }
+ return extendee.substring(0, 1).toLowerCase() + extendee.substring(1);
+ }
+
+ // ////////////////////////////////////////////////////////////
+ // in, combinePaths, splitOnCommas
+ // ////////////////////////////////////////////////////////////
+
+ public static boolean in(final String extendee, final String[] strings) {
+ for (final String strCandidate : strings) {
+ if (strCandidate.equals(extendee)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static List<String> splitOnCommas(final String commaSeparatedExtendee) {
+ if (commaSeparatedExtendee == null) {
+ return null;
+ }
+ final String removeLeadingWhiteSpace = removeLeadingWhiteSpace(commaSeparatedExtendee);
+ // special handling
+ if (removeLeadingWhiteSpace.length() == 0) {
+ return Collections.emptyList();
+ }
+ final String[] splitAsArray = removeLeadingWhiteSpace.split("\\W*,\\W*");
+ return Arrays.asList(splitAsArray);
+ }
+
+
+ private static final char CARRIAGE_RETURN = '\n';
+ private static final char LINE_FEED = '\r';
+
+ /**
+ * Converts any <tt>\n</tt> to <tt>line.separator</tt>
+ *
+ * @param extendee
+ * @return
+ */
+ public static String lineSeparated(final String extendee) {
+ final StringBuilder buf = new StringBuilder();
+ final String lineSeparator = System.getProperty("line.separator");
+ boolean lastWasLineFeed = false;
+ for (final char c : extendee.toCharArray()) {
+ final boolean isLineFeed = c == LINE_FEED;
+ final boolean isCarriageReturn = c == CARRIAGE_RETURN;
+ if (isCarriageReturn) {
+ buf.append(lineSeparator);
+ lastWasLineFeed = false;
+ } else {
+ if (lastWasLineFeed) {
+ buf.append(LINE_FEED);
+ }
+ if (isLineFeed) {
+ lastWasLineFeed = true;
+ } else {
+ buf.append(c);
+ lastWasLineFeed = false;
+ }
+ }
+ }
+ if (lastWasLineFeed) {
+ buf.append(LINE_FEED);
+ }
+ return buf.toString();
+ }
+
+ // ////////////////////////////////////////////////////////////
+ // removeTabs, removeLeadingWhiteSpace, stripLeadingSlash, stripNewLines,
+ // normalize
+ // ////////////////////////////////////////////////////////////
+
+ public static String removeLeadingWhiteSpace(final String extendee) {
+ if (extendee == null) {
+ return null;
+ }
+ return extendee.replaceAll("^\\W*", "");
+ }
+
+ public static String stripNewLines(final String extendee) {
+ return extendee.replaceAll("[\r\n]", "");
+ }
+
+ public static String stripLeadingSlash(final String extendee) {
+ if (!extendee.startsWith("/")) {
+ return extendee;
+ }
+ if (extendee.length() < 2) {
+ return "";
+ }
+ return extendee.substring(1);
+ }
+
+ /**
+ * Condenses any whitespace to a single character
+ *
+ * @param extendee
+ * @return
+ */
+ public static String normalized(@javax.annotation.Nullable final String extendee) {
+ return _Strings.asNormalized.apply(extendee);
+ }
+
+ public static String removePrefix(final String extendee, final String prefix) {
+ return extendee.startsWith(prefix)
+ ? extendee.substring(prefix.length())
+ : extendee;
+ }
+
+ public static String enumTitle(String enumName) {
+ return Enums.getFriendlyNameOf(enumName);
+ }
+
+ public static String enumDeTitle(String enumFriendlyName) {
+ return Enums.getEnumNameFromFriendly(enumFriendlyName);
+ }
+
+ /*
+ * eg converts <tt>HiddenFacetForMemberAnnotation</tt> to <tt>HFFMA</tt>.
+ */
+ public static String toAbbreviation(final String extendee) {
+ final StringBuilder buf = new StringBuilder();
+ for(char c: extendee.toCharArray()) {
+ if(Character.isUpperCase(c)) {
+ buf.append(c);
+ }
+ }
+ return buf.toString();
+ }
+
+
+ // //////////////////////////////////////
+ // copied in from Apache Commons
+ // //////////////////////////////////////
+
+
+
+ public static boolean startsWith(final String extendee, final String prefix) {
+ final int length = prefix.length();
+ if (length >= extendee.length()) {
+ return false;
+ } else {
+ final char startingCharacter = extendee.charAt(length);
+ return extendee.startsWith(prefix) && Character.isUpperCase(startingCharacter);
+ }
+ }
+
+ public static String combinePath(final String extendee, final String suffix) {
+ return _Resources.combinePath(extendee, suffix);
+ }
+
+ /**
+ * Returns the name of a Java entity without any prefix. A prefix is defined
+ * as the first set of lowercase letters and the name is characters from,
+ * and including, the first upper case letter. If no upper case letter is
+ * found then an empty string is returned.
+ *
+ * <p>
+ * Calling this method with the following Java names will produce these
+ * results:
+ *
+ * <pre>
+ * getCarRegistration -> CarRegistration
+ * CityMayor -> CityMayor
+ * isReady -> Ready
+ * </pre>
+ *
+ */
+ public static String asJavaBaseName(final String javaName) {
+ int pos = 0;
+
+ // find first upper case character
+ final int len = javaName.length();
+
+ while ((pos < len) && (javaName.charAt(pos) != '_') && Character.isLowerCase(javaName.charAt(pos))) {
+ pos++;
+ }
+
+ if (pos >= len) {
+ return "";
+ }
+
+ if (javaName.charAt(pos) == '_') {
+ pos++;
+ }
+
+ if (pos >= len) {
+ return "";
+ }
+
+ final String baseName = javaName.substring(pos);
+ final char firstChar = baseName.charAt(0);
+
+ if (Character.isLowerCase(firstChar)) {
+ return Character.toUpperCase(firstChar) + baseName.substring(1);
+ } else {
+ return baseName;
+ }
+ }
+
+ public static String asJavaBaseNameStripAccessorPrefixIfRequired(final String javaNameExtendee) {
+ if (javaNameExtendee.startsWith("is") || javaNameExtendee.startsWith("get")) {
+ return asJavaBaseName(javaNameExtendee);
+ } else {
+ return StringExtensions.asCapitalizedName(javaNameExtendee);
+ }
+ }
+
+ public static String asCapitalizedName(final String extendee) {
+
+ return Character.toUpperCase(extendee.charAt(0)) +
+ extendee.substring(1);
+ }
+
+
+ public static String asPluralName(final String extendee) {
+ String pluralName;
+ if (extendee.endsWith("y")) {
+ pluralName = extendee.substring(0, extendee.length() - 1) + "ies";
+ } else if (extendee.endsWith("s") || extendee.endsWith("x")) {
+ pluralName = extendee + "es";
+ } else {
+ pluralName = extendee + 's';
+ }
+ return pluralName;
+ }
+
+ public static String toCamelCase(final String extendee) {
+ final String nameLower = extendee.toLowerCase();
+ final StringBuilder buf = new StringBuilder();
+ boolean capitalizeNext = false;
+ for (int i = 0; i < nameLower.length(); i++) {
+ final char ch = nameLower.charAt(i);
+ if (ch == '_') {
+ capitalizeNext = true;
+ } else {
+ if (capitalizeNext) {
+ buf.append(Character.toUpperCase(ch));
+ } else {
+ buf.append(ch);
+ }
+ capitalizeNext = false;
+ }
+ }
+ return buf.toString();
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ThrowableExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ThrowableExtensions.java
new file mode 100644
index 0000000..0610af5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ThrowableExtensions.java
@@ -0,0 +1,82 @@
+/*
+ * 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.commons;
+
+import java.lang.invoke.WrongMethodTypeException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.function.Consumer;
+
+import org.apache.isis.applib.RecoverableException;
+import org.apache.isis.core.commons.exceptions.IsisApplicationException;
+import org.apache.isis.core.metamodel.exceptions.MetaModelException;
+import org.apache.isis.core.metamodel.specloader.ReflectiveActionException;
+
+public final class ThrowableExtensions {
+
+ public static Object handleInvocationException(
+ final Throwable e,
+ final String memberName) {
+ return handleInvocationException(e, memberName, null);
+ }
+
+ public static Object handleInvocationException(
+ final Throwable e,
+ final String memberName,
+ final Consumer<RecoverableException> recovery) {
+
+ if(e instanceof InvocationTargetException) {
+ return handleInvocationException(((InvocationTargetException) e).getTargetException(), memberName, recovery);
+ }
+ if(e instanceof WrongMethodTypeException) {
+ throw new MetaModelException("Wrong method type access of " + memberName, e);
+ }
+ if(e instanceof IllegalAccessException) {
+ throw new ReflectiveActionException("Illegal access of " + memberName, e);
+ }
+ if(e instanceof IllegalStateException) {
+ throw new ReflectiveActionException( String.format(
+ "IllegalStateException thrown while invoking %s %s",
+ memberName, e.getMessage()), e);
+ }
+ if(e instanceof RecoverableException) {
+ return handleRecoverableException((RecoverableException)e, memberName, recovery);
+ }
+ if (e instanceof RuntimeException) {
+ throw (RuntimeException) e;
+ }
+ throw new MetaModelException("Exception invoking " + memberName, e);
+ }
+
+
+ private static Object handleRecoverableException(
+ final RecoverableException e,
+ final String memberName,
+ final Consumer<RecoverableException> recovery) {
+
+ if(recovery!=null)
+ recovery.accept(e);
+
+ // an application exception from the domain code is re-thrown as an
+ // IsisException with same semantics
+ // TODO: should probably be using ApplicationException here
+ throw new IsisApplicationException("Exception invoking " + memberName, e);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ToString.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ToString.java
new file mode 100644
index 0000000..683938c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/ToString.java
@@ -0,0 +1,165 @@
+/*
+ * 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.commons;
+
+import java.util.Date;
+
+public final class ToString {
+
+ public static ToString createAnonymous(final Object object) {
+ final ToString string = new ToString();
+ string.append(ObjectExtensions.classBaseName(object));
+ string.append('[');
+ return string;
+ }
+
+ // //////////////////////////////////////
+
+ private boolean addComma = false;
+ private final StringBuilder buf;
+ private boolean useLineBreaks;
+
+ private ToString() {
+ buf = new StringBuilder();
+ }
+
+ public ToString(final Object forObject) {
+ buf = new StringBuilder();
+ ObjectExtensions.appendToString(forObject, buf);
+ buf.append('[');
+ }
+
+ public ToString(final Object forObject, final int id) {
+ buf = new StringBuilder();
+ buf.append(ObjectExtensions.classBaseName(forObject));
+ buf.append('#');
+ buf.append(id);
+ buf.append('[');
+ }
+
+ public ToString(final Object forObject, final String text) {
+ this(forObject);
+ buf.append(text);
+ addComma = text.length() > 0;
+ }
+
+ // //////////////////////////////////////
+
+ public ToString append(final char c) {
+ buf.append(c);
+ return this;
+ }
+
+ public ToString append(final String text) {
+ buf.append(text);
+ return this;
+ }
+
+ public ToString append(final String name, final boolean flag) {
+ append(name, flag ? "true" : "false");
+ return this;
+ }
+
+ public ToString append(final String name, final byte number) {
+ append(name, Byte.toString(number));
+ return this;
+ }
+
+ public ToString append(final String name, final double number) {
+ append(name, Double.toString(number));
+ return this;
+ }
+
+ public ToString append(final String name, final float number) {
+ append(name, Float.toString(number));
+ return this;
+ }
+
+ public ToString append(final String name, final int number) {
+ append(name, Integer.toString(number));
+ return this;
+ }
+
+ public ToString append(final String name, final long number) {
+ append(name, Long.toString(number));
+ return this;
+ }
+
+ public ToString append(final String name, final Object object) {
+ append(name, object == null ? "null" : object.toString());
+ return this;
+ }
+
+ public ToString append(final String name, final short number) {
+ append(name, Short.toString(number));
+ return this;
+ }
+
+ public ToString append(final String name, final String string) {
+ if (addComma) {
+ this.buf.append(',');
+ if (useLineBreaks) {
+ this.buf.append("\n\t");
+ }
+ } else {
+ addComma = true;
+ }
+ this.buf.append(name);
+ this.buf.append('=');
+ this.buf.append(string);
+
+ return this;
+ }
+
+ public ToString appendAsHex(final String name, final long number) {
+ append(name, "#" + Long.toHexString(number));
+ return this;
+ }
+
+ public void appendAsTimestamp(final String name, final Date date) {
+ final String dateString = DateExtensions.asTimestamp(date);
+ append(name, dateString);
+ }
+
+ public void appendTruncated(final String name, final String string, final int maxLength) {
+ if (string.length() > maxLength) {
+ append(name, string.substring(0, maxLength));
+ append("...");
+ } else {
+ append(name, string);
+ }
+ }
+
+ public void setAddComma() {
+ this.addComma = true;
+ }
+
+ public void setUseLineBreaks(final boolean useLineBreaks) {
+ this.useLineBreaks = useLineBreaks;
+ }
+
+ // //////////////////////////////////////
+
+ @Override
+ public String toString() {
+ buf.append(']');
+ return buf.toString();
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/Wormhole.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/Wormhole.java
new file mode 100644
index 0000000..77937bb
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/Wormhole.java
@@ -0,0 +1,50 @@
+/*
+ * 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.commons;
+
+/**
+ * Provides a mechanism to avoid infinite loops whereby method A -> method B -> method C -> method A and so on.
+ */
+public final class Wormhole {
+
+ private Wormhole(){}
+
+ private ThreadLocal<Boolean> inWormhole = new ThreadLocal<Boolean>() {
+ @Override
+ protected Boolean initialValue() {
+ return false;
+ }
+ };
+
+ public void run(final Runnable runnable) {
+ try {
+ if(inWormhole.get()) {
+ return;
+ }
+ inWormhole.set(true);
+ runnable.run();
+ } finally {
+ inWormhole.set(false);
+ }
+ }
+
+ public static void invoke(final Runnable runnable) {
+ new Wormhole().run(runnable);
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/package-info.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/package-info.java
new file mode 100644
index 0000000..2fd7191
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/package-info.java
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+/**
+ * This package holds a small number of classes to extend the JDK.
+ *
+ * <p>
+ * These classes should be thought of as being in the same spirit as
+ * the google <i>guava</i> library helper classes (and some may be replaced by guava in the future).
+ */
+package org.apache.isis.core.metamodel.commons;
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/Allow.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/Allow.java
new file mode 100644
index 0000000..e48ffb0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/Allow.java
@@ -0,0 +1,56 @@
+/*
+ * 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.consent;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+
+/**
+ * An instance of this type is used to allow something.
+ */
+public class Allow extends ConsentAbstract {
+
+ private static final long serialVersionUID = 1L;
+
+ public static Allow DEFAULT = new Allow();
+
+ private Allow() {
+ this((String) null);
+ }
+
+ /**
+ * Called by DnD viewer; we should instead find a way to put the calling
+ * logic into {@link Facet}s so that it is available for use by other
+ * viewers.
+ *
+ * @see Veto
+ * @deprecated
+ * @param reasonVeteod
+ * @param advisorClass
+ */
+ @Deprecated
+ public Allow(final String description) {
+ super(description, null);
+ }
+
+ public Allow(final InteractionResult interactionResult) {
+ super(interactionResult);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/Consent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/Consent.java
new file mode 100644
index 0000000..cce26e4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/Consent.java
@@ -0,0 +1,73 @@
+/*
+ * 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.consent;
+
+public interface Consent {
+
+ /**
+ * Returns true if this object is giving permission.
+ */
+ boolean isAllowed();
+
+ /**
+ * Returns true if this object is NOT giving permission.
+ */
+ boolean isVetoed();
+
+ /**
+ * Why consent is being vetoed.
+ *
+ * <p>
+ * Will be non-<tt>null</tt> and non-empty if vetoed. Will be <tt>null</tt>
+ * (<i>not</i> the empty string) if this is consent is is allowed.
+ *
+ * <p>
+ * Will correspond to the {@link InteractionResult#getReason() reason} in
+ * the contained {@link #getInteractionResult() InteractionResult} (if one
+ * was specified).
+ */
+ String getReason();
+
+ /**
+ * Description of the interaction that this consent represents.
+ *
+ * <p>
+ * May be <tt>null</tt>.
+ */
+ String getDescription();
+
+ /**
+ * Allows the description of the interaction to which this consent relates
+ * to be specified or refined.
+ *
+ * @param description
+ * @return this consent
+ */
+ Consent setDescription(String description);
+
+ /**
+ * The {@link InteractionResult} that created this {@link Consent}.
+ *
+ * @return - may be <tt>null</tt> if created as a legacy {@link Consent}.
+ *
+ */
+ public InteractionResult getInteractionResult();
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/ConsentAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/ConsentAbstract.java
new file mode 100644
index 0000000..995356c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/ConsentAbstract.java
@@ -0,0 +1,159 @@
+/*
+ * 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.consent;
+
+import java.io.Serializable;
+
+public abstract class ConsentAbstract implements Serializable, Consent {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Factory method.
+ *
+ * <p>
+ * Used extensively by the DnD viewer.
+ */
+ public static Consent allowIf(final boolean allowed) {
+ return allowed ? Allow.DEFAULT : Veto.DEFAULT;
+ }
+
+ private final InteractionResult interactionResult;
+ private final String reason;
+
+ /**
+ * Can be subsequently {@link #setDescription(String) modified}, but is only
+ * a description of the event to which this consent applies and does not
+ * change whether the Consent represents an allow or a veto.
+ */
+ private String description;
+
+ private static String determineReason(final InteractionResult interactionResult) {
+ if (interactionResult == null) {
+ return null;
+ }
+ return interactionResult.getReason();
+ }
+
+ /**
+ *
+ * @param interactionResult
+ * - if <tt>null</tt> then defaults to an {@link #isAllowed()
+ * allowing} {@link Consent}.
+ */
+ protected ConsentAbstract(final InteractionResult interactionResult) {
+ this(interactionResult, null, determineReason(interactionResult));
+ }
+
+ /**
+ * Enable legacy {@link Consent}s (not created using an
+ * {@link InteractionResult}) to create an {@link Consent}, specifying a
+ * {@link #getDescription() description} of the event and the
+ * {@link #getReason() reason} (if any) that the consent is vetoed.
+ *
+ * @param description
+ * - a description of the event to which this consent relates
+ * @param reason
+ * - if not <tt>null</tt> and not empty, is the reason this
+ * consent is vetoed.
+ */
+ protected ConsentAbstract(final String description, final String reason) {
+ this(null, description, reason);
+ }
+
+ private ConsentAbstract(
+ final InteractionResult interactionResult,
+ final String description,
+ final String reason) {
+ this.interactionResult = interactionResult;
+ this.description = description;
+ this.reason = reason;
+ }
+
+ /**
+ * The reason why this has been vetoed.
+ */
+ @Override
+ public String getReason() {
+ return isVetoed() ? this.reason : null;
+ }
+
+ @Override
+ public Consent setDescription(final String description) {
+ this.description = description;
+ return this;
+ }
+
+ /**
+ * Returns <tt>true</tt> if this object is giving permission (if the
+ * {@link #getReason() reason} is <tt>null</tt> or empty.
+ *
+ * @see #getReason()
+ */
+ @Override
+ public boolean isAllowed() {
+ return this.reason == null || this.reason.equals("");
+ }
+
+ /**
+ * Returns true if this object is NOT giving permission.
+ *
+ * @see #isAllowed()
+ */
+ @Override
+ public boolean isVetoed() {
+ return !isAllowed();
+ }
+
+ /**
+ * Underlying {@link InteractionResult} that created this {@link Consent}
+ * (may be <tt>null</tt>).
+ *
+ */
+ @Override
+ public InteractionResult getInteractionResult() {
+ return interactionResult;
+ }
+
+ /**
+ * Description of the action allowed by this event.
+ *
+ * <p>
+ * (Previously, {@link Allow} consents overloaded the {@link #getReason()
+ * reason} property with a description of the event. This has now been
+ * changed so that a non-<tt>null</tt> reason always implies a {@link Veto}.
+ * This property captures the description.
+ *
+ * @return
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public String toString() {
+ return (isVetoed() ? "VETOED" : "ALLOWED") + ", reason=" + reason;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionAdvisor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionAdvisor.java
new file mode 100644
index 0000000..28d8a5f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionAdvisor.java
@@ -0,0 +1,103 @@
+/*
+ * 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.consent;
+
+import java.util.Map;
+import java.util.function.Consumer;
+
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.interactions.InteractionAdvisorFacet;
+
+/**
+ * Marker interface for implementations (specifically, {@link Facet}s) that can
+ * advise as to whether a member should be disabled.
+ *
+ * Used within {@link Allow} and {@link Veto}.
+ */
+public interface InteractionAdvisor {
+
+ /**
+ * For testing purposes only.
+ */
+ public static InteractionAdvisor NOOP = new InteractionAdvisorFacet() {
+ @Override
+ public void appendAttributesTo(final Map<String, Object> attributeMap) {
+ }
+
+ @Override
+ public boolean alwaysReplace() {
+ return false;
+ }
+
+ @Override
+ public Class<? extends Facet> facetType() {
+ return null;
+ }
+
+ @Override
+ public FacetHolder getFacetHolder() {
+ return null;
+ }
+
+ @Override
+ public boolean isFallback() {
+ return true;
+ }
+
+ @Override
+ public void setFacetHolder(final FacetHolder facetHolder) {
+ }
+
+ @Override
+ public Facet getUnderlyingFacet() {
+ return null;
+ }
+
+ @Override
+ public void setUnderlyingFacet(final Facet underlyingFacet) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isDerived() {
+ return false;
+ }
+
+ @Override
+ public void addContributedFacet(Facet contributedFacet) {
+ throw _Exceptions.unsupportedOperation();
+ }
+
+ @Override
+ public void forEachContributedFacet(Consumer<Facet> onContributedFacet) {
+ throw _Exceptions.unsupportedOperation();
+ }
+
+ @Override
+ public Class<? extends Facet> facetAliasType() {
+ return null;
+ }
+
+
+ };
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionContextType.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionContextType.java
new file mode 100644
index 0000000..2c79d82
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionContextType.java
@@ -0,0 +1,135 @@
+/*
+ * 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.consent;
+
+import org.apache.isis.core.metamodel.interactions.InteractionContext;
+
+/**
+ * Powertype for the {@link InteractionContext} hierarchy.
+ *
+ */
+public enum InteractionContextType {
+
+ /**
+ * Persisting the object.
+ */
+ OBJECT_VALIDATE("Saving or updating object"),
+ /**
+ * Viewing the object.
+ */
+ OBJECT_VISIBILITY("Viewing the object"),
+ /**
+ * Accessing the object's title.
+ */
+ OBJECT_TITLE("Reading object's title"),
+ /**
+ * Determining whether the property of the object is visible (or has been
+ * hidden).
+ */
+ PROPERTY_VISIBLE("View property"),
+ /**
+ * Determining whether the property of the object is either readable or
+ * modifiable (or has been disabled).
+ */
+ PROPERTY_USABLE("Use property"),
+ /**
+ * Reading the current value of the property of the object.
+ */
+ PROPERTY_READ("Read property"),
+ /**
+ * Modifying (or attempting to modify) the value of a property.
+ */
+ PROPERTY_MODIFY("Modify property"),
+ /**
+ * Determining whether the collection of the object is visible (or has been
+ * hidden).
+ */
+ COLLECTION_VISIBLE("View collection"),
+ /**
+ * Determining whether the collection of the object is either readable or
+ * modifiable (or has been disabled).
+ */
+ COLLECTION_USABLE("Use collection"),
+ /**
+ * Reading the contents of the collection.
+ */
+ COLLECTION_READ("Read contents of collection"),
+ /**
+ * Adding to (or attempting to add to) a collection.
+ */
+ COLLECTION_ADD_TO("Add to collection"),
+ /**
+ * Removing from (or attempting to remove from) a collection.
+ */
+ COLLECTION_REMOVE_FROM("Remove from collection"),
+ /**
+ * Whether the action of the object is visible (or has been hidden).
+ */
+ ACTION_VISIBLE("View action"),
+ /**
+ * Whether the action of the object is usable (or has been disabled).
+ */
+ ACTION_USABLE("Use action"),
+ /**
+ * Whether this particular action parameter argument is visible
+ * (given other parameter arguments that may already have been entered).
+ */
+ ACTION_PARAMETER_VISIBLE("Parameter visible"),
+ /**
+ * Whether this particular action parameter argument is usable
+ * (given other parameter arguments that may already have been entered).
+ */
+ ACTION_PARAMETER_USABLE("Parameter usable"),
+ /**
+ * Whether this particular proposed argument for an action invocation is
+ * valid (or if it is in fact invalid).
+ *
+ * <p>
+ * For example, ensuring that a regular expression match or number range is
+ * correct.
+ */
+ ACTION_PROPOSED_ARGUMENT("Proposed argument"),
+ /**
+ * Invoking (or attempting to invoke) an action.
+ *
+ * <p>
+ * Even if each of the {@link #ACTION_PROPOSED_ARGUMENT proposed arguments}
+ * are valid, it may not be possible to invoke the action if there the
+ * arguments together are invalid (for example,
+ * <tt>startDate > endDate</tt>).
+ */
+ ACTION_INVOKE("Invoke action"),
+
+ /**
+ * Parsing a value (could be an property or an action argument).
+ */
+ PARSE_VALUE("Parsing value");
+
+ private final String description;
+
+ private InteractionContextType(final String description) {
+ this.description = description;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionInitiatedBy.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionInitiatedBy.java
new file mode 100644
index 0000000..d734a30
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionInitiatedBy.java
@@ -0,0 +1,33 @@
+/*
+ * 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.consent;
+
+import org.apache.isis.core.metamodel.interactions.InteractionContext;
+
+/**
+ * Whether an {@link InteractionContext} was invoked by the user, or is
+ * by the framework/programmatic.
+ */
+public enum InteractionInitiatedBy {
+
+ USER,
+ FRAMEWORK;
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionResult.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionResult.java
new file mode 100644
index 0000000..a72c0dc
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionResult.java
@@ -0,0 +1,155 @@
+/*
+ * 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.consent;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.isis.applib.services.wrapper.events.InteractionEvent;
+
+public class InteractionResult {
+
+ /**
+ * Initially {@link #ADVISING}; when call
+ * {@link InteractionResult#getInteractionEvent()}, flips over into
+ * {@link #ADVISED}.
+ *
+ * <p>
+ * Subsequent attempts to
+ * {@link InteractionResult#advise(String, InteractionAdvisor)} will then be
+ * disallowed.
+ */
+ enum State {
+ ADVISING, ADVISED
+ }
+
+ private final InteractionEvent interactionEvent;
+ private final StringBuilder reasonBuf = new StringBuilder();
+ private final List<InteractionAdvisor> advisors = new ArrayList<InteractionAdvisor>();
+
+ private State state = State.ADVISING;
+
+ public InteractionResult(final InteractionEvent interactionEvent) {
+ this.interactionEvent = interactionEvent;
+ }
+
+ /**
+ * Returns the contained {@link InteractionEvent}, if necessary updated with
+ * the {@link #advise(String, InteractionAdvisor) advice} of the
+ * interactions.
+ *
+ * <p>
+ * That is, if still {@link State#ADVISING advising}, then copies over the
+ * details from this result into the contained {@link InteractionEvent}, and
+ * flips into {@link State#ADVISED advised (done)}.
+ *
+ * @return
+ */
+ public InteractionEvent getInteractionEvent() {
+ if (state == State.ADVISING) {
+ interactionEvent.advised(getReason(), getAdvisorClass());
+ state = State.ADVISED;
+ }
+ return interactionEvent;
+ }
+
+ private Class<?> getAdvisorClass() {
+ final InteractionAdvisor advisor = getAdvisor();
+ return advisor != null ? advisor.getClass() : null;
+ }
+
+ public void advise(final String reason, final InteractionAdvisor facet) {
+ if (state == State.ADVISED) {
+ throw new IllegalStateException("Cannot append since have called getInteractionEvent");
+ }
+ if (reason == null) {
+ return;
+ }
+ if (isVetoing()) {
+ reasonBuf.append("; ");
+ }
+ advisors.add(facet);
+ reasonBuf.append(reason);
+ }
+
+ public boolean isVetoing() {
+ return !isNotVetoing();
+ }
+
+ public boolean isNotVetoing() {
+ return reasonBuf.length() == 0;
+ }
+
+ /**
+ * Returns the first of the {@link #getAdvisors()} that has been
+ * {@link #advise(String, InteractionAdvisor) advised} , or <tt>null</tt> if
+ * none yet.
+ *
+ * @see #getAdvisorFacets()
+ */
+ public InteractionAdvisor getAdvisor() {
+ return advisors.size() >= 1 ? advisors.get(0) : null;
+ }
+
+ /**
+ * Returns all {@link InteractionAdvisor advisor} (facet)s that have
+ * {@link #advise(String, InteractionAdvisor) append}ed reasons to the
+ * buffer.
+ *
+ * @see #getAdvisor()
+ */
+ public List<InteractionAdvisor> getAdvisorFacets() {
+ return Collections.unmodifiableList(advisors);
+ }
+
+ public Consent createConsent() {
+ if (isNotVetoing()) {
+ return new Allow(this);
+ } else {
+ return new Veto(this);
+ }
+ }
+
+ /**
+ * Gets the reason as currently known, but does not change the state.
+ *
+ * <p>
+ * If {@link #isNotVetoing()}, then returns <tt>null</tt>. Otherwise will be
+ * a non-empty string.
+ */
+ public String getReason() {
+ return isNotVetoing() ? null : reasonBuf.toString();
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s: %s: %s (%d facets advised)", interactionEvent, state, toStringInterpret(reasonBuf), advisors.size());
+ }
+
+ private String toStringInterpret(final StringBuilder reasonBuf) {
+ if (getReason().length() == 0) {
+ return "allowed";
+ } else {
+ return "vetoed";
+ }
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionResultSet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionResultSet.java
new file mode 100644
index 0000000..0355f57
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/InteractionResultSet.java
@@ -0,0 +1,104 @@
+/*
+ * 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.consent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class InteractionResultSet {
+
+ private final List<InteractionResult> results = new ArrayList<InteractionResult>();
+ private InteractionResult firstResult = null;
+
+ public InteractionResultSet() {
+ }
+
+ public InteractionResultSet add(final InteractionResult result) {
+ if (firstResult == null) {
+ firstResult = result;
+ }
+ this.results.add(result);
+ return this;
+ }
+
+ /**
+ * Empty only if all the {@link #add(InteractionResult) contained}
+ * {@link InteractionResult}s are also
+ * {@link InteractionResult#isNotVetoing() empty}.
+ */
+ public boolean isAllowed() {
+ return !isVetoed();
+ }
+
+ /**
+ * Vetoed if any of the {@link #add(InteractionResult) contained}
+ * {@link InteractionResult}s are also {@link InteractionResult#isVetoing()
+ * not empty}.
+ *
+ * @return
+ */
+ public boolean isVetoed() {
+ for (final InteractionResult result : results) {
+ if (result.isVetoing()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the {@link Consent} corresponding to
+ * {@link #getInteractionResult()}, or an {@link Allow} if there have been
+ * no {@link InteractionResult}s {@link #add(InteractionResult) added}.
+ *
+ * @return
+ */
+ public Consent createConsent() {
+ final InteractionResult interactionResult = getInteractionResult();
+ if (interactionResult == null) {
+ return Allow.DEFAULT;
+ }
+ return interactionResult.createConsent();
+ }
+
+ /**
+ * Returns the "best" contained {@link InteractionResult}.
+ *
+ * <p>
+ * This will be the first {@link InteractionResult} that has vetoed the
+ * interaction, or the first {@link InteractionResult}
+ * {@link #add(InteractionResult) added} if none have vetoed.
+ *
+ * @return
+ */
+ public InteractionResult getInteractionResult() {
+ for (final InteractionResult result : results) {
+ if (!result.isNotVetoing()) {
+ return result;
+ }
+ }
+ return firstResult != null ? firstResult : null;
+ }
+
+ @Override
+ public String toString() {
+ return super.toString();
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/Veto.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/Veto.java
new file mode 100644
index 0000000..f6272c6
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/consent/Veto.java
@@ -0,0 +1,48 @@
+/*
+ * 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.consent;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+
+import static org.apache.isis.core.commons.internal.base._With.requiresNotEmpty;
+
+public class Veto extends ConsentAbstract {
+
+ private static final long serialVersionUID = 1L;
+
+ public static Veto DEFAULT = new Veto("Vetoed by default");
+
+ /**
+ * Called by DnD viewer; we should instead find a way to put the calling
+ * logic into {@link Facet}s so that it is available for use by other
+ * viewers.
+ *
+ * @param reasonVeteod
+ * - must not be empty or <tt>null</tt>
+ */
+ public Veto(final String reasonVetoed) {
+ super(null, requiresNotEmpty(reasonVetoed, "reasonVetoed"));
+ }
+
+ public Veto(final InteractionResult interactionResult) {
+ super(interactionResult);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext.java
new file mode 100644
index 0000000..756a480
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext.java
@@ -0,0 +1,212 @@
+/*
+ * 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.context;
+
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.applib.services.registry.ServiceRegistry;
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.applib.services.title.TitleService;
+import org.apache.isis.applib.services.xactn.TransactionService;
+import org.apache.isis.applib.services.xactn.TransactionState;
+import org.apache.isis.core.commons.internal.environment.IsisSystemEnvironment;
+import org.apache.isis.core.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.metamodel.services.homepage.HomePageAction;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.security.api.authentication.AuthenticationSession;
+import org.apache.isis.security.api.authentication.AuthenticationSessionProvider;
+import org.apache.isis.security.api.authentication.manager.AuthenticationManager;
+import org.apache.isis.security.api.authorization.manager.AuthorizationManager;
+
+/**
+ *
+ * @since 2.0
+ *
+ */
+public interface MetaModelContext {
+
+ IsisSystemEnvironment getSystemEnvironment();
+
+ /**
+ *
+ * Configuration 'beans' with meta-data (IDE-support).
+ *
+ * @see <a href="https://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html">spring.io</a>
+ *
+ */
+ IsisConfiguration getConfiguration();
+
+ ObjectManager getObjectManager();
+
+ ServiceInjector getServiceInjector();
+
+ ServiceRegistry getServiceRegistry();
+
+ SpecificationLoader getSpecificationLoader();
+
+ public default ObjectSpecification getSpecification(final Class<?> type) {
+ return type != null ? getSpecificationLoader().loadSpecification(type) : null;
+ }
+
+ AuthenticationSessionProvider getAuthenticationSessionProvider();
+
+ TranslationService getTranslationService();
+
+ AuthorizationManager getAuthorizationManager();
+
+ AuthenticationManager getAuthenticationManager();
+
+ TitleService getTitleService();
+
+ RepositoryService getRepositoryService();
+
+ TransactionService getTransactionService();
+
+ TransactionState getTransactionState();
+
+ HomePageAction getHomePageAction();
+
+ Stream<ManagedObject> streamServiceAdapters();
+
+ ManagedObject lookupServiceAdapterById(String serviceId);
+
+ <T> T getSingletonElseFail(Class<T> type);
+
+ // -- EXTRACTORS
+
+ public static MetaModelContext from(ManagedObject adapter) {
+ return adapter.getSpecification().getMetaModelContext();
+ }
+
+ // -- DELEGATION - FOR THOSE THAT IMPLEMENT THROUGH DELEGATION
+
+ public static interface Delegating extends MetaModelContext {
+
+ public MetaModelContext getMetaModelContext();
+
+ @Override
+ default IsisSystemEnvironment getSystemEnvironment() {
+ return getMetaModelContext().getSystemEnvironment();
+ }
+
+ @Override
+ public default IsisConfiguration getConfiguration() {
+ return getMetaModelContext().getConfiguration();
+ }
+
+ @Override
+ public default ServiceInjector getServiceInjector() {
+ return getMetaModelContext().getServiceInjector();
+ }
+
+ @Override
+ public default ServiceRegistry getServiceRegistry() {
+ return getMetaModelContext().getServiceRegistry();
+ }
+
+ @Override
+ public default SpecificationLoader getSpecificationLoader() {
+ return getMetaModelContext().getSpecificationLoader();
+ }
+
+ @Override
+ public default AuthenticationSessionProvider getAuthenticationSessionProvider() {
+ return getMetaModelContext().getAuthenticationSessionProvider();
+ }
+
+ @Override
+ public default TranslationService getTranslationService() {
+ return getMetaModelContext().getTranslationService();
+ }
+
+ default AuthenticationSession getAuthenticationSession() {
+ return getAuthenticationSessionProvider().getAuthenticationSession();
+ }
+
+ @Override
+ public default AuthorizationManager getAuthorizationManager() {
+ return getMetaModelContext().getAuthorizationManager();
+ }
+
+ @Override
+ public default AuthenticationManager getAuthenticationManager() {
+ return getMetaModelContext().getAuthenticationManager();
+ }
+
+ @Override
+ public default TitleService getTitleService() {
+ return getMetaModelContext().getTitleService();
+ }
+
+ @Override
+ public default ObjectSpecification getSpecification(Class<?> type) {
+ return getMetaModelContext().getSpecification(type);
+ }
+
+ @Override
+ public default RepositoryService getRepositoryService() {
+ return getMetaModelContext().getRepositoryService();
+ }
+
+ @Override
+ public default TransactionState getTransactionState() {
+ return getMetaModelContext().getTransactionState();
+ }
+
+ @Override
+ public default HomePageAction getHomePageAction() {
+ return getMetaModelContext().getHomePageAction();
+ }
+
+ @Override
+ public default TransactionService getTransactionService() {
+ return getMetaModelContext().getTransactionService();
+ }
+
+ @Override
+ public default Stream<ManagedObject> streamServiceAdapters() {
+ return getMetaModelContext().streamServiceAdapters();
+ }
+
+ @Override
+ default ManagedObject lookupServiceAdapterById(String serviceId) {
+ return getMetaModelContext().lookupServiceAdapterById(serviceId);
+ }
+
+ @Override
+ default <T> T getSingletonElseFail(Class<T> type) {
+ return getMetaModelContext().getSingletonElseFail(type);
+ }
+
+ @Override
+ default ObjectManager getObjectManager() {
+ return getMetaModelContext().getObjectManager();
+ }
+
+ }
+
+
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContextAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContextAware.java
new file mode 100644
index 0000000..6a8676e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContextAware.java
@@ -0,0 +1,29 @@
+/*
+ * 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.context;
+
+/**
+ *
+ * @since 2.0
+ *
+ */
+public interface MetaModelContextAware {
+
+ void setMetaModelContext(MetaModelContext metaModelContext);
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java
new file mode 100644
index 0000000..81a5e90
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java
@@ -0,0 +1,172 @@
+/*
+ * 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.context;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.applib.services.registry.ServiceRegistry;
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.applib.services.title.TitleService;
+import org.apache.isis.applib.services.xactn.TransactionService;
+import org.apache.isis.applib.services.xactn.TransactionState;
+import org.apache.isis.core.commons.internal.base._Lazy;
+import org.apache.isis.core.commons.internal.environment.IsisSystemEnvironment;
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.commons.internal.ioc.IocContainer;
+import org.apache.isis.core.commons.internal.ioc.ManagedBeanAdapter;
+import org.apache.isis.core.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.metamodel.services.ServiceUtil;
+import org.apache.isis.core.metamodel.services.homepage.HomePageAction;
+import org.apache.isis.core.metamodel.services.homepage.HomePageResolverService;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.security.api.authentication.AuthenticationSessionProvider;
+import org.apache.isis.security.api.authentication.manager.AuthenticationManager;
+import org.apache.isis.security.api.authorization.manager.AuthorizationManager;
+
+import lombok.Getter;
+import lombok.val;
+
+
+class MetaModelContext_usingIoc implements MetaModelContext {
+
+ private final IocContainer iocContainer;
+ public MetaModelContext_usingIoc(IocContainer iocContainer) {
+ this.iocContainer = iocContainer;
+ }
+
+ @Getter(lazy=true)
+ private final IsisSystemEnvironment systemEnvironment =
+ getSingletonElseFail(IsisSystemEnvironment.class);
+
+ @Getter(lazy=true)
+ private final IsisConfiguration configuration =
+ getSingletonElseFail(IsisConfiguration.class);
+
+ @Getter(lazy=true)
+ private final ServiceInjector serviceInjector =
+ getSingletonElseFail(ServiceInjector.class);
+
+ @Getter(lazy=true)
+ private final ServiceRegistry serviceRegistry =
+ getSingletonElseFail(ServiceRegistry.class);
+
+ @Getter(lazy=true)
+ private final SpecificationLoader specificationLoader =
+ getSingletonElseFail(SpecificationLoader.class);
+
+ @Getter(lazy=true)
+ private final AuthenticationSessionProvider authenticationSessionProvider =
+ getSingletonElseFail(AuthenticationSessionProvider.class);
+
+ @Getter(lazy=true)
+ private final TranslationService translationService =
+ getSingletonElseFail(TranslationService.class);
+
+ @Getter(lazy=true)
+ private final AuthorizationManager authorizationManager =
+ getSingletonElseFail(AuthorizationManager.class);
+
+ @Getter(lazy=true)
+ private final AuthenticationManager authenticationManager =
+ getSingletonElseFail(AuthenticationManager.class);
+
+ @Getter(lazy=true)
+ private final TitleService titleService =
+ getSingletonElseFail(TitleService.class);
+
+ @Getter(lazy=true)
+ private final RepositoryService repositoryService =
+ getSingletonElseFail(RepositoryService.class);
+
+ @Getter(lazy=true)
+ private final TransactionService transactionService =
+ getSingletonElseFail(TransactionService.class);
+
+ @Getter(lazy=true)
+ private final HomePageResolverService homePageResolverService =
+ getSingletonElseFail(HomePageResolverService.class);
+
+ @Getter(lazy=true)
+ private final ObjectManager objectManager =
+ getSingletonElseFail(ObjectManager.class);
+
+
+ @Override
+ public final TransactionState getTransactionState() {
+ return getTransactionService().currentTransactionState();
+ }
+
+ @Override
+ public final HomePageAction getHomePageAction() {
+ return getHomePageResolverService().getHomePageAction();
+ }
+
+ // -- SERVICE SUPPORT
+
+ @Override
+ public Stream<ManagedObject> streamServiceAdapters() {
+ return objectAdaptersForBeansOfKnownSort.get().values().stream();
+ }
+
+ @Override
+ public ManagedObject lookupServiceAdapterById(final String serviceId) {
+ return objectAdaptersForBeansOfKnownSort.get().get(serviceId);
+ }
+
+ // -- LOOKUP
+
+ @Override
+ public <T> T getSingletonElseFail(Class<T> type) {
+ return iocContainer.getSingletonElseFail(type);
+ }
+
+
+ // -- HELPER
+
+ private final _Lazy<Map<String, ManagedObject>> objectAdaptersForBeansOfKnownSort =
+ _Lazy.threadSafe(this::collectBeansOfKnownSort);
+
+ private Map<String, ManagedObject> collectBeansOfKnownSort() {
+
+ return getServiceRegistry()
+ .streamRegisteredBeans()
+ .map(this::toManagedObject)
+ .collect(Collectors.toMap(ServiceUtil::idOfAdapter, v->v, (o,n)->n, LinkedHashMap::new));
+ }
+
+ private ManagedObject toManagedObject(ManagedBeanAdapter managedBeanAdapter) {
+
+ val servicePojo = managedBeanAdapter.getInstance().getFirst()
+ .orElseThrow(()->_Exceptions.unrecoverableFormatted(
+ "Cannot get service instance of type '%s'",
+ managedBeanAdapter.getBeanClass()));
+
+ return ManagedObject.of(getSpecificationLoader()::loadSpecification, servicePojo);
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContexts.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContexts.java
new file mode 100644
index 0000000..8438cfb
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContexts.java
@@ -0,0 +1,44 @@
+/*
+ * 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.context;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import org.apache.isis.core.commons.internal.environment.IsisSystemEnvironment;
+
+/**
+ *
+ * @since 2.0
+ *
+ */
+@Configuration
+@Named("isisMetaModel.MetaModelContexts")
+public class MetaModelContexts {
+
+ @Bean @Singleton @Primary
+ public MetaModelContext metaModelContext(final IsisSystemEnvironment systemEnvironment) {
+ return new MetaModelContext_usingIoc(systemEnvironment.getIocContainer());
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/MetaModelException.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/MetaModelException.java
new file mode 100644
index 0000000..437ec37
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/MetaModelException.java
@@ -0,0 +1,43 @@
+/*
+ * 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.exceptions;
+
+import org.apache.isis.core.commons.exceptions.IsisException;
+
+public class MetaModelException extends IsisException {
+ private static final long serialVersionUID = 1L;
+
+ public MetaModelException() {
+ super();
+ }
+
+ public MetaModelException(final String message) {
+ super(message);
+ }
+
+ public MetaModelException(final Throwable cause) {
+ super(cause);
+ }
+
+ public MetaModelException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/ObjectNotFoundException.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/ObjectNotFoundException.java
new file mode 100644
index 0000000..f41384f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/ObjectNotFoundException.java
@@ -0,0 +1,38 @@
+/*
+ * 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.exceptions.persistence;
+
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+
+/**
+ * Indicates that the <tt>PojoRecreator</tt> was unable to instantiate a new pojo for the specified
+ * {@link Oid}.
+ */
+public class ObjectNotFoundException extends ObjectPersistenceException {
+ private static final long serialVersionUID = 1L;
+
+ public ObjectNotFoundException(final Oid oid) {
+ super("Object not found in store with oid " + oid);
+ }
+
+ public ObjectNotFoundException(final Oid oid, final Throwable cause) {
+ super("Object not found in store with oid " + oid, cause);
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/ObjectPersistenceException.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/ObjectPersistenceException.java
new file mode 100644
index 0000000..f1a9dd2
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/ObjectPersistenceException.java
@@ -0,0 +1,42 @@
+/*
+ * 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.exceptions.persistence;
+
+import org.apache.isis.core.commons.exceptions.IsisException;
+
+public class ObjectPersistenceException extends IsisException {
+ private static final long serialVersionUID = 1L;
+
+ public ObjectPersistenceException() {
+ super();
+ }
+
+ public ObjectPersistenceException(final String message) {
+ super(message);
+ }
+
+ public ObjectPersistenceException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ public ObjectPersistenceException(final Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/PojoRecreationException.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/PojoRecreationException.java
new file mode 100644
index 0000000..fe11f34
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/PojoRecreationException.java
@@ -0,0 +1,31 @@
+/*
+ * 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.exceptions.persistence;
+
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+
+public class PojoRecreationException extends ObjectPersistenceException {
+ private static final long serialVersionUID = 1L;
+
+ public PojoRecreationException(Oid oid, Throwable cause) {
+ super(String.format("Could not recreate pojo for oid '%s'.", oid), cause);
+
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/PojoRefreshException.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/PojoRefreshException.java
new file mode 100644
index 0000000..bbac79b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/exceptions/persistence/PojoRefreshException.java
@@ -0,0 +1,34 @@
+/*
+ * 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.exceptions.persistence;
+
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+
+public class PojoRefreshException extends ObjectNotFoundException {
+ private static final long serialVersionUID = 1L;
+
+ public PojoRefreshException(Oid oid) {
+ super(oid);
+ }
+
+ public PojoRefreshException(Oid oid, Throwable cause) {
+ super(oid, cause);
+ }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/Facet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/Facet.java
new file mode 100644
index 0000000..34cd243
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/Facet.java
@@ -0,0 +1,123 @@
+/*
+ * 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.facetapi;
+
+import java.util.function.Consumer;
+
+import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
+
+public interface Facet extends FacetWithAttributes {
+
+ /**
+ * The {@link FacetHolder holder} of this facet.
+ *
+ * @return
+ */
+ FacetHolder getFacetHolder();
+
+ /**
+ * Allows reparenting of Facet.
+ *
+ * <p>
+ * Used by Facet decorators.
+ *
+ * @param facetHolder
+ */
+ public void setFacetHolder(FacetHolder facetHolder);
+
+ /**
+ * Underlying {@link Facet} of the same {@link #facetType() type}, if any.
+ */
+ public Facet getUnderlyingFacet();
+
+ /**
+ * Sets underlying {@link Facet}, that is, creating a chain.
+ *
+ * <p>
+ * Must be of the same {@link #facetType() type}.
+ */
+ public void setUnderlyingFacet(Facet underlyingFacet);
+
+ /**
+ * Determines the type of this facet to be stored under.
+ *
+ * <p>
+ * The framework looks for {@link Facet}s of certain well-known facet types.
+ * Each facet implementation must specify which type of facet it corresponds
+ * to. This therefore allows the (rules of the) programming model to be
+ * varied without impacting the rest of the framework.
+ *
+ * <p>
+ * For example, the <tt>ActionInvocationFacet</tt> specifies the facet to
+ * invoke an action. The typical implementation of this wraps a
+ * <tt>public</tt> method. However, a different facet factory could be
+ * installed that creates facet also of type {@link ActionInvocationFacet}
+ * but that have some other rule, such as requiring an <i>action</i> prefix,
+ * or that decorate the interaction by logging it, for example.
+ */
+ Class<? extends Facet> facetType();
+
+ /**
+ * Whether this facet implementation is derived (as opposed to explicit);
+ * used to determine precedence.
+ *
+ * <p>
+ * For example, we might derive the typical length of a property based on
+ * its type; but if the typical length has been explicitly specified using
+ * an annotation then that should take precedence.
+ */
+ public boolean isDerived();
+
+ /**
+ * Whether this facet implementation is a fallback. Meaning it is treated
+ * with lowest priority, always overruled by any other facet of same type.
+ */
+ public boolean isFallback();
+
+ /**
+ * Whether this facet implementation should replace existing (none-fallback)
+ * implementations.
+ */
+ public boolean alwaysReplace();
+
+ // -- FACET ALIAS SUPPORT
+
+ /**
+ * Adds a facet this facet contributes.
+ * @since 2.0
+ */
+ void addContributedFacet(Facet contributedFacet);
+
+ /**
+ * Traverses all contributed facets (if any).
+ * @since 2.0
+ */
+ void forEachContributedFacet(Consumer<Facet> onContributedFacet);
+
+ /**
+ * An alternative type this Facet can be looked up via {@link FacetHolder#getFacet(Class)}.
+ * @apiNote like {@link #facetType()} the alias must be unique within any facet-holder's
+ * registered facet-types, otherwise an {@link IllegalArgumentException} is thrown during
+ * facet-processing; this is to ensure unambiguous lookup of facets by their alias type
+ * @since 2.0
+ */
+ Class<? extends Facet> facetAliasType();
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
new file mode 100644
index 0000000..eba96cc
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
@@ -0,0 +1,287 @@
+/*
+ * 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.facetapi;
+
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.Consumer;
+
+import org.apache.isis.core.commons.internal.collections._Sets;
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+
+import static org.apache.isis.core.commons.internal.base._With.requires;
+
+import lombok.Setter;
+import lombok.val;
+
+
+public abstract class FacetAbstract implements Facet, MetaModelContext.Delegating {
+
+ public enum Derivation {
+ DERIVED,
+ NOT_DERIVED
+ }
+
+ private Facet underlyingFacet;
+
+ private final Class<? extends Facet> facetType;
+ @Setter private Class<? extends Facet> facetAliasType;
+ private Set<Facet> contributedFacets; // lazy init
+
+ private final boolean derived;
+ private FacetHolder holder;
+
+ /**
+ * Populated in {@link #setFacetHolder(FacetHolder)} if the provided holder
+ * implements {@link IdentifiedHolder}.
+ *
+ * <p>
+ * Otherwise is <tt>null</tt>.
+ */
+ private IdentifiedHolder identifiedHolder;
+
+ public FacetAbstract(
+ Class<? extends Facet> facetType,
+ FacetHolder holder,
+ Derivation derivation) {
+
+ this.facetType = requires(facetType, "facetType");
+ setFacetHolder(holder);
+ this.derived = (derivation == Derivation.DERIVED);
+ }
+
+ protected FacetAbstract(
+ Class<? extends Facet> facetType,
+ FacetHolder holder) {
+
+ this(facetType, holder, Derivation.NOT_DERIVED);
+ }
+
+ @Override
+ public final Class<? extends Facet> facetType() {
+ return facetType;
+ }
+
+ @Override
+ public Class<? extends Facet> facetAliasType() {
+ return facetAliasType!=facetType ? facetAliasType : null; // avoids facetAliasType equals facetType
+ }
+
+ @Override
+ public FacetHolder getFacetHolder() {
+ return holder;
+ }
+
+ @Override
+ public MetaModelContext getMetaModelContext() {
+ return holder.getMetaModelContext();
+ }
+
+ @Override
+ public boolean isDerived() {
+ return derived;
+ }
+
+ /**
+ * Convenience method that returns {@link #getFacetHolder()} downcast to
+ * {@link IdentifiedHolder} if the implementation does indeed inherit from
+ * {@link IdentifiedHolder}, otherwise <tt>null</tt>.
+ */
+ public IdentifiedHolder getIdentified() {
+ return identifiedHolder;
+ }
+
+ @Override
+ public Facet getUnderlyingFacet() {
+ return underlyingFacet;
+ }
+
+ @Override
+ public void setUnderlyingFacet(final Facet underlyingFacet) {
+ if(underlyingFacet != null) {
+// if(underlyingFacet instanceof MultiTypedFacet) {
+// val multiTypedFacet = (MultiTypedFacet) underlyingFacet;
+// val matches = compatible(multiTypedFacet);
+// if(!matches) {
+// throw new IllegalArgumentException("illegal argument, expected underlying facet (a multi-valued facet) to have equivalent to the facet type (or facet types) of this facet");
+// }
+// } else {
+
+ val underlyingFacetType = underlyingFacet.facetType();
+ if(!Objects.equals(underlyingFacetType, facetType)) {
+ val msg = String.format(
+ "type-missmatch: underlying facet's type '%s' "
+ + "must match this facet's type '%s'",
+ underlyingFacetType, facetType);
+ throw _Exceptions.unrecoverable(msg);
+ }
+
+ // }
+ }
+ this.underlyingFacet = underlyingFacet;
+ }
+
+// private boolean compatible(final MultiTypedFacet multiTypedFacet) {
+//
+// if (!(this instanceof MultiTypedFacet)) {
+// return multiTypedFacet.containsFacetTypeOf(this.facetType);
+// }
+//
+// val thisAsMultiTyped = (MultiTypedFacet) this;
+//
+// return thisAsMultiTyped.facetTypes()
+// .anyMatch(multiTypedFacet::containsFacetTypeOf);
+// }
+
+ /**
+ * Assume implementation is <i>not</i> a no-op.
+ *
+ * <p>
+ * No-op implementations should override and return <tt>true</tt>.
+ */
+ @Override
+ public boolean isFallback() {
+ return false;
+ }
+
+ /**
+ * Default implementation of this method that returns <tt>true</tt>, ie
+ * should replace (none {@link #isFallback() no-op} implementations.
+ *
+ * <p>
+ * Implementations that don't wish to replace none no-op implementations
+ * should override and return <tt>false</tt>.
+ */
+ @Override
+ public boolean alwaysReplace() {
+ return true;
+ }
+
+ @Override
+ public void setFacetHolder(final FacetHolder facetHolder) {
+ this.holder = facetHolder;
+ this.identifiedHolder = (holder!=null && holder instanceof IdentifiedHolder)
+ ? (IdentifiedHolder) holder
+ : null;
+ }
+
+ protected String toStringValues() {
+ return "";
+ }
+
+ @Override
+ public String toString() {
+ String details = "";
+ if (isValidating()) {
+ details += "Validating";
+ }
+ if (isDisabling()) {
+ details += (details.length() > 0 ? ";" : "") + "Disabling";
+ }
+ if (isHiding()) {
+ details += (details.length() > 0 ? ";" : "") + "Hiding";
+ }
+ if (!"".equals(details)) {
+ details = "interaction=" + details + ",";
+ }
+
+ final String className = getClass().getName();
+ final String stringValues = toStringValues();
+ if (getClass() != facetType()) {
+ final String facetType = facetType().getName();
+ details += "type=" + facetType.substring(facetType.lastIndexOf('.') + 1);
+ }
+ if (!"".equals(stringValues)) {
+ details += ",";
+ }
+ return className.substring(className.lastIndexOf('.') + 1) + "[" + details + stringValues + "]";
+ }
+
+ private boolean isHiding() {
+ return Hiding.class.isAssignableFrom(getClass());
+ }
+
+ private boolean isDisabling() {
+ return Disabling.class.isAssignableFrom(getClass());
+ }
+
+ private boolean isValidating() {
+ return Validating.class.isAssignableFrom(getClass());
+ }
+
+ @Override
+ public void appendAttributesTo(final Map<String, Object> attributeMap) {
+ if(derived) {
+ attributeMap.put("derived", derived);
+ }
+ attributeMap.put("underlyingFacet", underlyingFacet);
+ if(isFallback()) {
+ attributeMap.put("noop", isFallback());
+ }
+ if(isHiding()) {
+ attributeMap.put("hiding", isHiding());
+ }
+ if(isDisabling()) {
+ attributeMap.put("disabling", isDisabling());
+ }
+ if(isValidating()) {
+ attributeMap.put("validating", isValidating());
+ }
+ }
+
+ /**
+ * Marker interface used within {@link #toString()}.
+ */
+ public static interface Hiding {
+ }
+
+ /**
+ * Marker interface used within {@link #toString()}.
+ */
+ public static interface Disabling {
+ }
+
+ /**
+ * Marker interface used within {@link #toString()}.
+ */
+ public static interface Validating {
+ }
+
+ // -- CONTRIBUTED FACET SUPPORT
+
+ @Override
+ public void addContributedFacet(Facet contributedFacet) {
+ if(contributedFacets==null) {
+ contributedFacets = _Sets.newHashSet();
+ }
+ contributedFacets.add(contributedFacet);
+ }
+
+ @Override
+ public void forEachContributedFacet(Consumer<Facet> onContributedFacet) {
+ if(contributedFacets!=null) {
+ contributedFacets.forEach(onContributedFacet);
+ }
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
new file mode 100644
index 0000000..075e1b9
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
@@ -0,0 +1,150 @@
+/*
+ * 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.facetapi;
+
+import java.util.stream.Stream;
+
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+
+import lombok.val;
+
+/**
+ * Anything in the metamodel (which also includes peers in the reflector) that
+ * can be extended.
+ */
+public interface FacetHolder {
+
+ int getFacetCount();
+
+ /**
+ * Get the facet of the specified type (as per the type it reports from
+ * {@link Facet#facetType()}).
+ */
+ <T extends Facet> T getFacet(Class<T> cls);
+
+ /**
+ * Whether there is a facet registered of the specified type.
+ */
+ boolean containsFacet(Class<? extends Facet> facetType);
+
+ /**
+ * Whether there is a facet registered of the specified type that is not a
+ * {@link Facet#isFallback() fallback} .
+ * <p>
+ * Convenience; saves having to {@link #getFacet(Class)} and then check if
+ * <tt>null</tt> and not a fallback.
+ */
+ default boolean containsNonFallbackFacet(Class<? extends Facet> facetType) {
+ val facet = getFacet(facetType);
+ return facet != null && !facet.isFallback();
+ }
+
+ /**
+ * As {@link #containsNonFallbackFacet(Class)}, with additional requirement, that the
+ * facet is <i>explicit</i>, not {@link Facet#isDerived() derived}.
+ */
+ default boolean containsExplicitNonFallbackFacet(Class<? extends Facet> facetType) {
+ val facet = getFacet(facetType);
+ return facet != null && !facet.isFallback() && !facet.isDerived();
+ }
+
+ Stream<Facet> streamFacets();
+
+ default <F extends Facet> Stream<F> streamFacets(Class<F> requiredType) {
+ return streamFacets()
+ .filter(facet->requiredType.isAssignableFrom(facet.getClass()))
+ .map(requiredType::cast);
+ }
+
+ /**
+ * Adds the facet, extracting its {@link Facet#facetType() type} as the key.
+ *
+ * <p>
+ * If there are any facet of the same type, they will be overwritten
+ * <i>provided</i> that either the {@link Facet} specifies to
+ * {@link Facet#alwaysReplace() always replace} or if the existing
+ * {@link Facet} is a {@link Facet#isFallback() no-op}.
+ */
+ void addFacet(Facet facet);
+
+ /**
+ * Replaces any existing facet with the given one, while copying any underlying
+ * facet from the existing to the given one.
+ *
+ * @param facet
+ * @since 2.0
+ */
+ void addOrReplaceFacet(Facet facet);
+
+ /**
+ *
+ * @since 2.0
+ */
+ MetaModelContext getMetaModelContext();
+
+ /**
+ * For those that implement through delegation.
+ * @since 2.0
+ *
+ */
+ public static interface Delegating extends FacetHolder {
+
+ FacetHolder getFacetHolder();
+
+ @Override
+ default public int getFacetCount() {
+ return getFacetHolder().getFacetCount();
+ }
+
+ @Override
+ default public <T extends Facet> T getFacet(Class<T> cls) {
+ return getFacetHolder().getFacet(cls);
+ }
+
+ @Override
+ default public boolean containsFacet(Class<? extends Facet> facetType) {
+ return getFacetHolder().containsFacet(facetType);
+ }
+
+ @Override
+ default public Stream<Facet> streamFacets() {
+ return getFacetHolder().streamFacets();
+ }
+
+ @Override
+ default public void addFacet(Facet facet) {
+ getFacetHolder().addFacet(facet);
+ }
+
+ @Override
+ default public void addOrReplaceFacet(Facet facet) {
+ getFacetHolder().addOrReplaceFacet(facet);
+ }
+
+ @Override
+ default public MetaModelContext getMetaModelContext() {
+ return getFacetHolder().getMetaModelContext();
+ }
+
+
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderImpl.java
new file mode 100644
index 0000000..bb07a90
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderImpl.java
@@ -0,0 +1,168 @@
+/*
+ * 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.facetapi;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.commons.internal.base._Lazy;
+import org.apache.isis.core.commons.internal.collections._Maps;
+import org.apache.isis.core.commons.internal.collections._Maps.AliasMap;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.context.MetaModelContextAware;
+
+import static org.apache.isis.core.commons.internal.base._Casts.uncheckedCast;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.val;
+
+/**
+ * For base subclasses or, more likely, to help write tests.
+ */
+public class FacetHolderImpl implements FacetHolder, MetaModelContextAware {
+
+ @Getter(onMethod = @__(@Override)) @Setter(onMethod = @__(@Override))
+ private MetaModelContext metaModelContext;
+
+ private final Map<Class<? extends Facet>, Facet> facetsByType = _Maps.newHashMap();
+ private final Object $lock = new Object();
+
+ @Override
+ public boolean containsFacet(Class<? extends Facet> facetType) {
+ synchronized($lock) {
+ return snapshot.get().containsKey(facetType);
+ }
+ }
+
+ @Override
+ public void addFacet(Facet facet) {
+ synchronized($lock) {
+ val changed = addFacetOrKeepExisting(facetsByType, facet);
+ if(changed) {
+ snapshot.clear(); //invalidate
+ }
+ }
+ }
+
+ @Override
+ public <T extends Facet> T getFacet(Class<T> facetType) {
+ synchronized($lock) {
+ return uncheckedCast(snapshot.get().get(facetType));
+ }
+ }
+
+ @Override
+ public Stream<Facet> streamFacets() {
+ synchronized($lock) {
+ return snapshot.get().values().stream(); // consumers should play nice and don't take too long
+ }
+ }
+
+ @Override
+ public int getFacetCount() {
+ synchronized($lock) {
+ return snapshot.get().size();
+ }
+ }
+
+ @Override
+ public void addOrReplaceFacet(Facet facet) {
+ synchronized($lock) {
+ val facetType = facet.facetType();
+ val existingFacet = getFacet(facetType);
+ if (existingFacet != null) {
+ remove(existingFacet);
+ val underlyingFacet = existingFacet.getUnderlyingFacet();
+ facet.setUnderlyingFacet(underlyingFacet);
+ }
+
+ addFacet(facet);
+ }
+ }
+
+ // -- HELPER
+
+ private final _Lazy<Map<Class<? extends Facet>, Facet>> snapshot = _Lazy.threadSafe(this::snapshot);
+
+ // collect all facet information provided with the top-level facets (contributed facets and aliases)
+ private Map<Class<? extends Facet>, Facet> snapshot() {
+ val snapshot = _Maps.<Class<? extends Facet>, Facet>newAliasMap(HashMap::new);
+ facetsByType.values().forEach(topLevelFacet->{
+
+ snapshot.remap(
+ topLevelFacet.facetType(),
+ Can.ofNullable(topLevelFacet.facetAliasType()),
+ topLevelFacet);
+
+ // honor contributed facets via recursive lookup
+ collectChildren(snapshot, topLevelFacet);
+
+
+ });
+ return snapshot;
+ }
+
+ private void collectChildren(AliasMap<Class<? extends Facet>, Facet> target, Facet parentFacet) {
+ parentFacet.forEachContributedFacet(child->{
+ val added = addFacetOrKeepExisting(target, child);
+ if(added) {
+ collectChildren(target, child);
+ }
+ });
+ }
+
+ private boolean addFacetOrKeepExisting(
+ Map<Class<? extends Facet>, Facet> facetsByType,
+ Facet facet) {
+
+ val existingFacet = facetsByType.get(facet.facetType());
+
+ val addOrKeep = whichPrecedesTheOther(existingFacet, facet);
+ if(addOrKeep==facet) {
+ facetsByType.put(facet.facetType(), facet);
+ return true;
+ }
+ return false;
+ }
+
+ private void remove(Facet topLevelFacet) {
+ snapshot.clear(); //invalidate
+ facetsByType.remove(topLevelFacet.facetType());
+ }
+
+ // also has side-effects (not really suggested by the naming)
+ private Facet whichPrecedesTheOther(Facet existingFacet, Facet facet) {
+ if (existingFacet == null || existingFacet.isFallback()) {
+ return facet;
+ }
+ if (!facet.alwaysReplace()) {
+ return existingFacet; //eg. ValueSemanticsProviderAndFacetAbstract is alwaysReplace=false
+ }
+ if (facet.isDerived() && !existingFacet.isDerived()) {
+ return existingFacet;
+ }
+ facet.setUnderlyingFacet(existingFacet);
+ return facet;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
new file mode 100644
index 0000000..3a1bd13
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
@@ -0,0 +1,96 @@
+/*
+ * 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.facetapi;
+
+import java.util.List;
+import java.util.function.BiConsumer;
+
+import org.apache.isis.core.metamodel.util.snapshot.XmlSchema;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.val;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class FacetUtil {
+
+
+ public static void addOrReplaceFacet(final Facet facet) {
+ if (facet == null) {
+ return;
+ }
+ val facetHolder = facet.getFacetHolder();
+ facetHolder.addOrReplaceFacet(facet);
+ }
+
+ /**
+ * Attaches the {@link Facet} to its {@link Facet#getFacetHolder() facet
+ * holder}.
+ *
+ * @return <tt>true</tt> if a non-<tt>null</tt> facet was added,
+ * <tt>false</tt> otherwise.
+ */
+ public static boolean addFacet(final Facet facet) {
+ if (facet == null) {
+ return false;
+ }
+ facet.getFacetHolder().addFacet(facet);
+ return true;
+ }
+
+ /**
+ * Attaches each {@link Facet} to its {@link Facet#getFacetHolder() facet
+ * holder}.
+ *
+ * @return <tt>true</tt> if any facets were added, <tt>false</tt> otherwise.
+ */
+ public static boolean addFacets(final List<Facet> facetList) {
+ boolean addedFacets = false;
+ for (val facet : facetList) {
+ addedFacets = addFacet(facet) | addedFacets;
+ }
+ return addedFacets;
+ }
+
+ public static <T extends Facet> XmlSchema.ExtensionData<T> getFacetsByType(final FacetHolder facetHolder) {
+
+ return new XmlSchema.ExtensionData<T>() {
+
+ @Override
+ public int size() {
+ return facetHolder.getFacetCount();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void visit(BiConsumer<Class<T>, T> elementConsumer) {
+ facetHolder.streamFacets()
+ .forEach(facet->elementConsumer.accept((Class<T>)facet.facetType(), (T)facet));
+ }
+
+ };
+ }
+
+ public static void copyFacets(final FacetHolder source, final FacetHolder target) {
+ source.streamFacets()
+ .forEach(target::addFacet);
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetWithAttributes.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetWithAttributes.java
new file mode 100644
index 0000000..72d31a8
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetWithAttributes.java
@@ -0,0 +1,32 @@
+/*
+ * 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.facetapi;
+
+import java.util.Map;
+
+import org.apache.isis.applib.services.metamodel.MetaModelService;
+
+/**
+ * For serialization of metamodel into XML, see {@link org.apache.isis.applib.services.metamodel.MetaModelService#exportMetaModel(MetaModelService.Config)}.
+ */
+public interface FacetWithAttributes {
+
+ void appendAttributesTo(Map<String,Object> attributeMap);
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java
new file mode 100644
index 0000000..742e222
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java
@@ -0,0 +1,159 @@
+/*
+ * 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.facetapi;
+
+import java.beans.Introspector;
+import java.lang.reflect.Method;
+import java.util.EnumSet;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.commons.StringExtensions;
+
+/**
+ * Enumerates the features that a particular Facet can be applied to.
+ *
+ * <p>
+ * The class-level feature processing is typically performed by {@link FacetFactory}s
+ * pertaining to {@link #OBJECT}, performed before the processing of class members.
+ *
+ */
+public enum FeatureType {
+
+ OBJECT("Object") {
+ /**
+ * The supplied method can be null; at any rate it will be ignored.
+ */
+ @Override
+ public Identifier identifierFor(final Class<?> type, final Method method) {
+ return Identifier.classIdentifier(type);
+ }
+ },
+ PROPERTY("Property") {
+ @Override
+ public Identifier identifierFor(final Class<?> type, final Method method) {
+ return propertyOrCollectionIdentifierFor(type, method);
+ }
+ },
+ COLLECTION("Collection") {
+ @Override
+ public Identifier identifierFor(final Class<?> type, final Method method) {
+ return propertyOrCollectionIdentifierFor(type, method);
+ }
+ },
+ ACTION("Action") {
+ @Override
+ public Identifier identifierFor(final Class<?> type, final Method method) {
+ final String fullMethodName = method.getName();
+ final Class<?>[] parameterTypes = method.getParameterTypes();
+ return Identifier.actionIdentifier(type.getName(), fullMethodName, parameterTypes);
+ }
+ },
+ ACTION_PARAMETER_SCALAR("Scalar Parameter") {
+ /**
+ * Always returns <tt>null</tt>.
+ */
+ @Override
+ public Identifier identifierFor(final Class<?> type, final Method method) {
+ return null;
+ }
+ },
+ ACTION_PARAMETER_COLLECTION("Collection Parameter") {
+ /**
+ * Always returns <tt>null</tt>.
+ */
+ @Override
+ public Identifier identifierFor(final Class<?> type, final Method method) {
+ return null;
+ }
+ };
+
+ public final static EnumSet<FeatureType> COLLECTIONS_ONLY = EnumSet.of(COLLECTION);
+ public final static EnumSet<FeatureType> COLLECTIONS_AND_ACTIONS = EnumSet.of(COLLECTION, ACTION);
+ public final static EnumSet<FeatureType> ACTIONS_ONLY = EnumSet.of(ACTION);
+ public final static EnumSet<FeatureType> PARAMETERS_ONLY = EnumSet.of(ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION);
+ public final static EnumSet<FeatureType> PROPERTIES_ONLY = EnumSet.of(PROPERTY);
+ public final static EnumSet<FeatureType> PROPERTIES_AND_ACTIONS = EnumSet.of(PROPERTY, ACTION);
+ public final static EnumSet<FeatureType> OBJECTS_ONLY = EnumSet.of(OBJECT);
+ public final static EnumSet<FeatureType> MEMBERS = EnumSet.of(PROPERTY, COLLECTION, ACTION);
+ public final static EnumSet<FeatureType> OBJECTS_AND_PROPERTIES = EnumSet.of(OBJECT, PROPERTY);
+ public final static EnumSet<FeatureType> PROPERTIES_AND_COLLECTIONS = EnumSet.of(PROPERTY, COLLECTION);
+ public final static EnumSet<FeatureType> OBJECTS_AND_COLLECTIONS = EnumSet.of(OBJECT, COLLECTION);
+ public final static EnumSet<FeatureType> OBJECTS_AND_ACTIONS = EnumSet.of(OBJECT, ACTION);
+ public final static EnumSet<FeatureType> OBJECTS_PROPERTIES_AND_COLLECTIONS = EnumSet.of(OBJECT, PROPERTY, COLLECTION);
+ public static final EnumSet<FeatureType> ACTIONS_AND_PARAMETERS =
+ EnumSet.of(ACTION, ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION);
+
+ /**
+ * Use of this is discouraged; instead use multiple {@link FacetFactory}s
+ * for different features.
+ */
+ public final static EnumSet<FeatureType> EVERYTHING_BUT_PARAMETERS =
+ EnumSet.complementOf(
+ EnumSet.of(ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION));
+ /**
+ * Use of this is discouraged; instead use multiple {@link FacetFactory}s
+ * for different features.
+ */
+ public final static EnumSet<FeatureType> EVERYTHING = EnumSet.allOf(FeatureType.class);
+
+ private final String name;
+
+ private FeatureType(final String name) {
+ this.name = name;
+ }
+
+ private static Identifier propertyOrCollectionIdentifierFor(final Class<?> type, final Method method) {
+ final String capitalizedName = StringExtensions.asJavaBaseName(method.getName());
+ final String beanName = Introspector.decapitalize(capitalizedName);
+ return Identifier.propertyOrCollectionIdentifier(type.getName(), beanName);
+ }
+
+ public boolean isProperty() {
+ return this == PROPERTY;
+ }
+
+ public boolean isCollection() {
+ return this == COLLECTION;
+ }
+
+ public boolean isAction() {
+ return this == ACTION;
+ }
+
+ public boolean isActionParameter() {
+ return this == ACTION_PARAMETER_SCALAR || this == ACTION_PARAMETER_COLLECTION;
+ }
+
+ /**
+ * Convenience.
+ */
+ public boolean isPropertyOrCollection() {
+ return isProperty() || isCollection();
+ }
+
+ public abstract Identifier identifierFor(Class<?> type, Method method);
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/IdentifiedHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/IdentifiedHolder.java
new file mode 100644
index 0000000..a89b429
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/IdentifiedHolder.java
@@ -0,0 +1,31 @@
+/*
+ * 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
... 255674 lines suppressed ...