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

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

    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

          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: