danhaywood <>
on 11 Oct 18
ISIS-1974: fixes to ensure new algorithm generates same metamodel as previously.
More or less, that is.

The main change here is that some f… Show more
ISIS-1974: fixes to ensure new algorithm generates same metamodel as previously.

More or less, that is.

The main change here is that some facet factories have been reimplemented in the SpecLoader PostProcessor, namely those that derive facets on object members based on the facets from the type of those members ... typical length, described as, immutable => disabled, param defaults.

- for now, the unused facets have been left in the codebase, commented out of ProgrammingModelFacetsJava5; the post-processor's name (ActionCollectionParameterDefaultsAndChoicesPostProcessor) is unchanged even though it now does much more than it used to

This results in some minor differences... ImmutableFacet is no longer always installed, for example, if DisabledFacet is present instead.

In addition to the PostProcessor changes:

- call post processing without requiring there to be an open session.  Note that this requires a minor refactor in OneTo{One/Many}ActionParameterContributee - these take the servicePojo rather than the serviceAdapter

- refactor SpecificationCacheDefault, init() semantics are now cleaner

 - it no longer takes a map (and the old init is now internalInit)

 - SpecificationLoader#cacheBySpecId now removed - this is basically what is in the new version of init in SpecificationCacheDefault

- also search for @DomainServiceLayout, @DomainObjectLayout, @ViewModelLayout to find classes to introspect during bootstrapping

- don't introspect @Programmatic fixture scripts (unless they are explicitly discoverable by implementing DiscoverableFixtureScript)

- don't create any associations/actions for any domain services that have a nature of DOMAIN (unless they are also @HomePage domain service)

- don't create any associations/actions for fixture scripts

- OneTo{One/Many}AssociationContributee now implement getOnType (was throwing an NPE) & OneToManyAssociationMixedIn now implements getOnType (OTOAMI was already)

 - these are to allow the implementatoin of the post-processor to look up the parent spec if the member is a mixin or contributee

- MetaModelExporter now includes a check that the objectSpecId -> ObjectSpecification is one-to-one.

 - this is what precipitated the refactoring of SpecificationCacheDefault

- adds a guard in TypicalLengthFacetOnPropertyDerivedFromType, which was NPE'ing

- in the metamodel validator, as an ugly special case, allow ObjectSpecIdFacet to be derived from class name

 - seems ok, since no longer have actoins on fixture scripts in the metamodel.  Also, there are fixtures in the incode platform that fall foul of this check

- allow @Programmatic to be specified on fields

- annotate various fixture scripts as @Programmatic (so that they will be skipped completely from the metamodel)

 - BuilderFixtureScript, TeardownFixtureScriptAbstract, PersonaEnumPersistAll, ClockFixture, TickingClockFixture

- fixed bug with MetaModelService6.Config class for getPackagePrefixes()


Show less

master + 31 more