Uploaded image for project: 'Causeway'
  1. Causeway
  2. CAUSEWAY-2107

Allow enums to implement interfaces for choices (also fixed in "v1 maintenance")

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    Description

      The code we wanted to write was equivalent to:

          public Object act(
                  final INflLeague nflLeague,
                  final NflRegion nflRegion,
                  final NflTeamEntity nflTeam) {
              nflPlayer.updateUsingEntity((NflLeague)nflLeague, nflRegion, nflTeam);
              return this.nflPlayer;
          }
      
          public List<? extends INflLeague> choices0Act() {
              return Arrays.asList(NflLeague.values());
          }
          ...
      
      

      where NflLeague is an enum that implements INflLeague :

      public interface INflLeague {
          String getName();
      }
      

      and

      public enum NflLeague implements INflLeague {
          AFC,
          NFC;
      
          @Override
          public String getName() {
              return name();
          }
      }
      

      There are two issues:

      • first, in the metamodel we don't introspect enums to recognise that a list of NflLeague enum instances can be returned in the choices method returning List<INflLeague>
      • second, in the Wicket viewer the selection of the choicesPanel is based on the type, and if an interface is used then it guesses a referencePanel rather than ValueSelect2Panel that is normally used for enums. The marshalling logic for ReferencePanel assumes entities, and fails when handed a bunch of scalar enums.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            danhaywood Daniel Keir Haywood
            danhaywood Daniel Keir Haywood
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment