@Override
  protected boolean verifyUserInput() {
    final SpectralUnmixingFormModel formModel = form.getFormModel();
    if (formModel.getSourceProduct() == null) {
      showErrorDialog("No source product selected.");
      return false;
    }
    final Map<String, Object> parameterMap = parameterSupport.getParameterMap();
    updateParameterMap(parameterMap);

    final Endmember[] endmembers = (Endmember[]) parameterMap.get("endmembers");
    final String[] sourceBandNames = (String[]) parameterMap.get("sourceBandNames");
    final double minBandwidth = (Double) parameterMap.get("minBandwidth");

    double[] sourceWavelengths = new double[sourceBandNames.length];
    double[] sourceBandwidths = new double[sourceBandNames.length];
    for (int i = 0; i < sourceBandNames.length; i++) {
      final Band sourceBand = formModel.getSourceProduct().getBand(sourceBandNames[i]);
      sourceWavelengths[i] = sourceBand.getSpectralWavelength();
      sourceBandwidths[i] = sourceBand.getSpectralBandwidth();
    }
    if (!matchingWavelength(endmembers, sourceWavelengths, sourceBandwidths, minBandwidth)) {
      showErrorDialog(
          "One or more source wavelengths do not fit\n"
              + "to one or more endmember spectra.\n\n"
              + "Consider increasing the maximum wavelength deviation.");
      return false;
    }

    return true;
  }
 @Override
 protected Product createTargetProduct() throws Exception {
   final SpectralUnmixingFormModel formModel = form.getFormModel();
   Map<String, Object> parameterMap = parameterSupport.getParameterMap();
   updateParameterMap(parameterMap);
   return GPF.createProduct(
       OperatorSpi.getOperatorAlias(SpectralUnmixingOp.class),
       parameterMap,
       formModel.getSourceProduct());
 }