code: private Wave createWave(final WaveGroup waveGroup, final WaveType waveType, final Class<?> componentClass, final WaveBean waveBean, final WaveBean... waveBeans) {
  
          final List<WaveBean> waveBeanList = new ArrayList<>();
          waveBeanList.add(waveBean);
          if (waveBeans.length > 0) {
              waveBeanList.addAll(Arrays.asList(waveBeans));
          }
  
          final Wave wave = wave()
                                  .waveGroup(waveGroup)
                                  .waveType(waveType)
                                  .fromClass(this.getClass())
                                  .componentClass(componentClass)
                                  .waveBeanList(waveBeanList);
  
          // Track wave creation
          localFacade().globalFacade().trackEvent(JRebirthEventType.CREATE_WAVE, this.getClass(), wave.getClass());
  
          return wave;
      }
docs: Build a wave object with its dedicated WaveBean.
  
  @param waveGroup the group of the wave
  @param waveType the type of the wave
  @param componentClass the component class if any
  @param waveBean the wave bean that holds all required data
  @param waveBeans the extra Wave Beans that holds all other required data
  
  @return the wave built