Uploaded image for project: 'Isis'
  1. Isis
  2. ISIS-970

Introduce new annotations to collect together all non-UI (layout) hints, and deprecate old annotations

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: core-1.7.0
    • Fix Version/s: core-1.8.0
    • Component/s: Core
    • Labels:
      None

      Description

      specifically:

      @DomainObject(
          auditing = ENABLED etc. (AuditingPolicy)            // instead of @Audited
          publishing = ENABLED etc. (PublishingPolicy)        // instead of @PublishedObject
          publishingPayloadFactory = SomePayloadFactory.class // instead of @PublishedObject(payloadFactory=...)
          autoCompleteRepository = SomeRepository.class       // instead of @AutoComplete(repository=...)
          autoCompleteAction = "autoComplete"                 // instead of @AutoComplete(action=...)
          bounded = true|false                                // instead of @Bounded.  takes precedence over autoComplete
          editing = ENABLED etc (EditingPolicy)               // instead of @Immutable
          editingDisabledReason = "..."                       // instead of "Always disabled" message inferred from @Immutable
          objectType = "CUS"                                  // instead of @ObjectType
          nature = JDO_ENTITY | EXTERNAL_ENTITY | VIEW_MODEL    // instead of @ViewModel, defaults to JDO_ENTITY
      )
      

      and

      @Property(
          domainEvent = ToDoItem.DueBy.class        // instead of @PropertyInteraction
          hidden = Where.NOWHERE etc                // instead of @Hidden(where=...); ignore the When enum
          editing = ENABLED etc (EditingPolicy)     // instead of @Disabled; ignore Where and When enums
          editingDisabledReason = "..."             // instead of @Disabled(reason=...)
          maxLength = 20                            // instead of @MaxLength; default of -1 indicates not specified
          mustSatisfy  = {SomeSpecification.class}  // instead of @MustSatisfy
          notPersisted = true|false                 // instead of @NotPersisted; defaults to false
          optional = DEFAULT|TRUE|FALSE             // instead of @Optional and @Mandatory.  
          regexPattern  = ".+\@.+"                  // instead of @RegEx(validation=...)
          regexPatternFlags = 1                     // superset of @RegEx(caseSensitive=...)
      )
      

      where cardinality defaults to mandatory unless Column(allowsNull="true") is set.

      and

      @Collection(
          domainEvent = ToDoItem.Dependencies.class // instead of @CollectionInteraction
          hidden = Where.NOWHERE etc                // instead of @Hidden(where=...); ignore the When enum
          editing = ENABLED etc (EditingPolicy)     // instead of @Disabled; ignore Where and When enums
          editingDisabledReason = "..."             // instead of @Disabled(reason=...)
          typeOf = OrderLine.class                  // instead of @TypeOf
      )
      

      and

      @Action(
          domainEvent = ToDoItem.Completed.class              // instead of @ActionInteraction
          hidden = Where.NOWHERE etc                          // instead of @Hidden(where=...); ignore the When enum
          semantics = Semantics.SAFE etc.                     // instead of @ActionSemantics
          invokeOn = InvokeOn.OBJECTS_AND_COLLECTIONS         // instead of @Bulk and @Bulk(appliesTo=...)
          command = ENABLED|DISABLED|AS_CONFIGURED            // instead of @Command
          commandPersistence = Persistence.PERSISTED          // instead of @Command(persistence=...)
          commandExecuteIn = ExecuteIn.FOREGROUND             // instead of @Command(executeIn=...)
          publishing = ENABLED etc. (PublishingPolicy)        // instead of @PublishedAction
          publishingPayloadFactory = SomePayloadFactory.class // instead of @PublishedAction(payloadFactory=...)
          restrictTo = Environment.DEVELOPMENT                // instead of @Prototype
          typeOf = OrderLine.class                            // instead of @TypeOf
      )
      

      nb: @Disabled is no longer provided for actions (use imperative disableXxx() method instead if required)
      and

      @Parameter(
          maxLength = 20                            // instead of @MaxLength; default of -1 indicates not specified
          minLength   = 3                               // instead of @MinLength
          mustSatisfy = {SomeSpecification.class}       // instead of @MustSatisfy
          optional = DEFAULT|TRUE|FALSE             // instead of @Optional and @Mandatory.  
          regexPattern  = ".+\@.+"                      // instead of @RegEx(validation=...)
          regexPatternFlags = 1                         // superset of @RegEx(caseSensitive=...)
      )    
      

      for ISIS-964:

      @DomainObjectLayout {
          bookmarking = NEVER (BookmarkingPolicy)      // instead of @BookmarkPolicy
      }
      

      and

      @ActionLayout {
          bookmarking = NEVER (BookmarkingPolicy)      // instead of @BookmarkPolicy
      }
      

      and remove
      @ActionLayout {
      prototype = true|false
      }

      This would result in the fully supported non-deprecated Isis annotations reducing substantially:

      • @DomainService and @DomainServiceLayout
      • @DomainObject and @DomainObjectLayout
      • @Property and @PropertyLayout
      • @Collection and @CollectionLayout
      • @Action and @ActionLayout
      • @Parameter and @ParameterLayout

      with two further additional UI hints:

      • @Title
      • @MemberGroupLayout

      All the above @XxxLayout annotations can instead be specified using a .layout.json file.

      The following 3rd-party annotations also supported:

      • @javax.validation.constraints.Digits
      • @javax.enterprise.context.RequestScoped
      • @javax.jdo.annotations.*

      There are also some annotations that need sorting out for contributed actions, specifically:

      • @NotContributed(As.xxx)
      • @NotInServiceMenu

      ... for these, see ISIS-968

      Also need to figure out the best way to capture the semantics of properties and collections that are contributees (whose semantics are inferred from the contributing action)

      ~~~
      There are still a number of partially supported annotations, mostly pertaining to value types and other DDD ideas). Need to decide what to do with them; deprecate/remove or keep and fully implement? They are:

      • @Value
      • @Defaulted
      • @Encodeable
      • @EqualByContent
      • @Parseable
      • @Aggregated
      • @NotPersistable
      • @Facets

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              danhaywood Dan Haywood
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: