You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "Dan Haywood (JIRA)" <ji...@apache.org> on 2015/10/13 00:40:06 UTC

[jira] [Created] (ISIS-1213) Provide support for @Mixin domain objects, as a specialized type of contributor (though not a domain service)

Dan Haywood created ISIS-1213:
---------------------------------

             Summary: Provide support for @Mixin domain objects, as a specialized type of contributor (though not a domain service)
                 Key: ISIS-1213
                 URL: https://issues.apache.org/jira/browse/ISIS-1213
             Project: Isis
          Issue Type: New Feature
          Components: Core
    Affects Versions: 1.9.0
            Reporter: Dan Haywood
            Assignee: Dan Haywood
            Priority: Minor
             Fix For: 1.10.0


For example, rather than a contributed action:

{code:java}
@DomainService(
        nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY
)
public class CommunicationChannel_updateNotes {
    @Action(
            semantics = SemanticsOf.IDEMPOTENT
    )
    public <T extends CommunicationChannel<T>> CommunicationChannel<T> updateNotes(
            CommunicationChannel<T> communicationChannel,
            @Parameter(optionality = Optionality.OPTIONAL)
            @ParameterLayout(named = "Notes", multiLine = 10)
            final String Notes) {
        communicationChannel.setNotes(Notes);
        return communicationChannel;
    }
    public <T extends CommunicationChannel<T>> String default1UpdateNotes(
            CommunicationChannel<T> communicationChannel
            ) {
        return communicationChannel.getNotes();
    }
}
{code}

which requires passing in the contributee to every method, and ensuring that all methods are named correctly, we can instead say:

{code:java}
@DomainObject(
        nature = Nature.MIXIN
)
public class CommunicationChannel_updateNotes {
    private final CommunicationChannel communicationChannel;
    public CommunicationChannel_updateNotes(CommunicationChannel communicationChannel) {
        this.communicationChannel = communicationChannel;
    }
   @Action(
            domainEvent = UpdateNotesEvent.class,
            semantics = SemanticsOf.IDEMPOTENT
    )
    public <T extends CommunicationChannel<T>> CommunicationChannel<T> _(
            @Parameter(optionality = Optionality.OPTIONAL)
            @ParameterLayout(named = "Notes", multiLine = 10)
            final String Notes) {
        communicationChannel.setNotes(Notes);
        return communicationChannel;
    }
    public <T extends CommunicationChannel<T>> String default0_() {
        return communicationChannel.getNotes();
    }
}
{code}

where the name of the action is "_" meaning instead infer the action name from the name of the mixin class, and where the mixin has a constructor of the object being mixed in.




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)