public static Product extractBands(Product sourceProduct, String[] sourceBandNames, String[] sourceMaskNames) {
Product product = new Product(sourceProduct.getName(), sourceProduct.getProductType(), sourceProduct.getSceneRasterWidth(), sourceProduct.getSceneRasterHeight());
product.setStartTime(sourceProduct.getStartTime());
product.setEndTime(sourceProduct.getEndTime());
product.setNumResolutionsMax(sourceProduct.getNumResolutionsMax());
ProductUtils.copyMetadata(sourceProduct, product);
ProductUtils.copyGeoCoding(sourceProduct, product);
ProductUtils.copyTiePointGrids(sourceProduct, product);
ProductUtils.copyVectorData(sourceProduct, product);
if (sourceMaskNames != null && sourceMaskNames.length > 0) {
ProductHelper.copyMasks(sourceProduct, product, sourceMaskNames);
}
for (int i=0; i<sourceBandNames.length; i++) {
Band sourceBand = sourceProduct.getBand(sourceBandNames[i]);
String sourceBandName = sourceBand.getName();
String targetBandName = sourceBandName;
ProductUtils.copyBand(sourceBandName, sourceProduct, targetBandName, product, true);
Band targetBand = product.getBand(targetBandName);
ProductUtils.copyGeoCoding(sourceBand, targetBand);
}
return product;
}