isis-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stephen Cameron <steve.cameron...@gmail.com>
Subject Re: updating entities with a poly contribution
Date Thu, 17 Sep 2015 21:09:42 GMT
Added @Property(editing = Editing.DISABLED) to prevent update of
contributed property

So, now have:

    //region > primary (contributed property)
    @Action(
            semantics = SemanticsOf.SAFE
    )
    @ActionLayout(
            contributed = Contributed.AS_ASSOCIATION
    )
    @Property(editing = Editing.DISABLED)
public NoteRelated primaryRelated(final Note aNote) {
        final NoteRelatedPrimaryLink relatedPrimaryLink =
noteRelatedPrimaryLinks.findByNote(aNote);
        return relatedPrimaryLink != null?
relatedPrimaryLink.getPolymorphicReference(): null;
    }
    //endregion

Sometimes a good nights sleep is the real answer

On Thu, Sep 17, 2015 at 10:22 PM, Stephen Cameron <
steve.cameron.62@gmail.com> wrote:

> Hi,
>
> I modified the poly module code for my notes functionality, specifically
> the case content demo.
>
> I added a field to allow entry of note content to my note type, which was
> a case, but when I do a global update of the record, I get an error related
> to the linked primary object, the message is:
>
> org.apache.isis.core.metamodel.interactions.PropertyModifyContext cannot
> be cast to
> org.apache.isis.core.metamodel.interactions.ActionInvocationContext
>
> This is clearly a case of something that is contributed via an action
> being considered a property. In the original case demo there is an action
> for specifically updating the title, which still works for me. But its just
> the attempt to use the Edit button that causes an error.
>
> Do I need to add an Edit Content action as well? If so why, maybe I
> modified the contributions and broke something, or maybe adding
> contributions means this global update is not possible?
>
> The Primary contributions object is now as follows:
>
> /*
>  *  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 au.com.scds.chats.dom.module.note;
>
> import java.util.List;
> import javax.inject.Inject;
> import javax.jdo.annotations.NotPersistent;
>
> import org.apache.isis.applib.DomainObjectContainer;
> import org.apache.isis.applib.annotation.Action;
> import org.apache.isis.applib.annotation.ActionLayout;
> import org.apache.isis.applib.annotation.Contributed;
> import org.apache.isis.applib.annotation.DomainService;
> import org.apache.isis.applib.annotation.NatureOfService;
> import org.apache.isis.applib.annotation.NotPersisted;
> import org.apache.isis.applib.annotation.Optionality;
> import org.apache.isis.applib.annotation.Parameter;
> import org.apache.isis.applib.annotation.SemanticsOf;
>
> import com.google.common.collect.Iterables;
> import com.google.common.collect.Lists;
>
> @DomainService(
>         nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY
> )
> public class NoteRelatedPrimaryContributions {
>
>     //SC create a note and make object primary related
>
>     @ActionLayout(
>             contributed = Contributed.AS_ACTION
>     )
>     public Note addNote(@Parameter(optionality=Optionality.MANDATORY)
> final String title, final NoteRelated noteRelatedPrimary) {
>         Note aNote = notes.create(title);
>         noteRelatedPrimaryLinks.createLink(aNote, noteRelatedPrimary);
>         return aNote;
>     }
>
>     //
>
>     //region > primary (contributed property)
>     @Action(
>             semantics = SemanticsOf.SAFE
>     )
>     @ActionLayout(
>             contributed = Contributed.AS_ASSOCIATION
>     )
>     //@NotPersistent
>     public NoteRelated primaryRelated(final Note aNote) {
>         final NoteRelatedPrimaryLink relatedPrimaryLink =
> noteRelatedPrimaryLinks.findByNote(aNote);
>         return relatedPrimaryLink != null?
> relatedPrimaryLink.getPolymorphicReference(): null;
>     }
>     //endregion
>
>     //region > notes (derived collection)
>     @Action(
>             semantics = SemanticsOf.SAFE
>     )
>     @ActionLayout(
>             contributed = Contributed.AS_ASSOCIATION
>     )
>     public List<Note> notes(final NoteRelated noteRelated) {
>         final List<NoteRelatedPrimaryLink> links =
> noteRelatedPrimaryLinks.findByRelated(noteRelated);
>         return Lists.newArrayList(
>                 Iterables.transform(links,
> NoteRelatedPrimaryLink.Functions.GET_CASE)
>         );
>     }
>     //endregion
>
>     /**SC this is not needed as we set the primary as owner of a Note on
> creation
>     //region > makePrimary (contributed action), resetPrimary (contributed
> action)
>     @Action(
>             semantics = SemanticsOf.IDEMPOTENT
>     )
>     public Note makePrimary(
>             final Note aNote,
>             final NoteRelated noteRelated) {
>         return setPrimary(aNote, noteRelated);
>     }
>     @Action(
>             semantics = SemanticsOf.IDEMPOTENT
>     )
>     public Note resetPrimary(
>             final Note aNote) {
>         return setPrimary(aNote, null);
>     }
>
>     private Note setPrimaryRelated(final Note aNote, final NoteRelated
> noteRelated) {
>         final NoteRelatedPrimaryLink relatedLink =
> noteRelatedPrimaryLinks.findByNote(aNote);
>         if(relatedLink != null) {
>             container.removeIfNotAlready(relatedLink);
>         }
>         if(noteRelated != null) {
>             noteRelatedPrimaryLinks.createLink(aNote, noteRelated);
>         }
>         return aNote;
>     }
>
>     public boolean hideMakePrimary(final Note aNote, final NoteRelated
> noteRelated) {
>         // don't contribute to noteRelated
>         return noteRelated != null;
>     }
>
>     public List<NoteRelated> choices1MakePrimary(final Note aNote) {
>         return noteRelatedContributions.relateds(aNote);
>     }
>     //endregion
> */
>     @Inject
>     private Notes notes;
>     @Inject
>     private NoteRelatedContributions noteRelatedContributions;
>     @Inject
>     private NoteRelatedPrimaryLinks noteRelatedPrimaryLinks;
>     @Inject
>     private DomainObjectContainer container;
>
> }
>
> Hoping there is a simple answer, this is almost done :)
>
> Cheers
> Steve
>
>
>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message