private void applyMultipleColorPaletteDef() {
    if (!getFormModel().isValid()) {
      return;
    }

    final Product selectedProduct = getFormModel().getProduct();
    final ProductManager productManager = selectedProduct.getProductManager();
    final RasterDataNode[] protectedRasters = getFormModel().getRasters();
    final ArrayList<Band> availableBandList = new ArrayList<>();
    for (int i = 0; i < productManager.getProductCount(); i++) {
      final Product product = productManager.getProduct(i);
      final Band[] bands = product.getBands();
      for (final Band band : bands) {
        boolean validBand = false;
        if (band.getImageInfo() != null) {
          validBand = true;
          for (RasterDataNode protectedRaster : protectedRasters) {
            if (band == protectedRaster) {
              validBand = false;
            }
          }
        }
        if (validBand) {
          availableBandList.add(band);
        }
      }
    }
    final Band[] availableBands = new Band[availableBandList.size()];
    availableBandList.toArray(availableBands);
    availableBandList.clear();

    if (availableBands.length == 0) {
      JOptionPane.showMessageDialog(
          getToolViewPaneControl(),
          "No other bands available.", /*I18N*/
          titlePrefix,
          JOptionPane.WARNING_MESSAGE);
      return;
    }

    final BandChooser bandChooser =
        new BandChooser(
            SwingUtilities.getWindowAncestor(toolView),
            "Apply to other bands", /*I18N*/
            toolView.getHelpCtx().getHelpID(),
            availableBands,
            bandsToBeModified,
            false);

    final Set<RasterDataNode> modifiedRasters = new HashSet<>(availableBands.length);
    if (bandChooser.show() == BandChooser.ID_OK) {
      bandsToBeModified = bandChooser.getSelectedBands();
      for (final Band band : bandsToBeModified) {
        applyColorPaletteDef(
            getFormModel().getModifiedImageInfo().getColorPaletteDef(), band, band.getImageInfo());
        modifiedRasters.add(band);
      }
    }

    // This code replaces visatApp.updateImages(rasters) from BEAM code.
    WindowUtilities.getOpened(ProductSceneViewTopComponent.class)
        .forEach(
            tc -> {
              final ProductSceneView view = tc.getView();
              for (RasterDataNode raster : view.getRasters()) {
                if (modifiedRasters.contains(raster)) {
                  view.updateImage();
                  return;
                }
              }
            });
  }