/* /* * Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at your option) * any later version. * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see http://www.gnu.org/licenses/ */ package org.esa.snap.rcp.layermanager.layersrc.product; import com.bc.ceres.glayer.Layer; import com.bc.ceres.glayer.support.AbstractLayerListener; import com.bc.ceres.glayer.support.ImageLayer; import org.esa.snap.core.datamodel.Product; import org.esa.snap.core.datamodel.ProductNodeEvent; import org.esa.snap.core.datamodel.ProductNodeListener; import org.esa.snap.core.datamodel.RasterDataNode; import org.esa.snap.core.datamodel.VirtualBand; import org.esa.snap.core.image.ColoredBandImageMultiLevelSource; import java.util.Arrays; import java.util.List; class LayerDataHandler extends AbstractLayerListener implements ProductNodeListener { private final List<String> imageChangingProperties = Arrays.asList(RasterDataNode.PROPERTY_NAME_DATA, RasterDataNode.PROPERTY_NAME_NO_DATA_VALUE, RasterDataNode.PROPERTY_NAME_NO_DATA_VALUE_USED, RasterDataNode.PROPERTY_NAME_VALID_PIXEL_EXPRESSION, RasterDataNode.PROPERTY_NAME_IMAGE_INFO, VirtualBand.PROPERTY_NAME_EXPRESSION); private final RasterDataNode rasterDataNode; private final ImageLayer imageLayer; LayerDataHandler(RasterDataNode rasterDataNode, ImageLayer imageLayer) { this.rasterDataNode = rasterDataNode; this.imageLayer = imageLayer; } @Override public void handleLayersRemoved(Layer parentLayer, Layer[] childLayers) { for (Layer childLayer : childLayers) { if (childLayer == imageLayer) { final Product product = rasterDataNode.getProduct(); if (product != null) { product.removeProductNodeListener(this); } } } } @Override public void nodeChanged(ProductNodeEvent event) { if (event.getSourceNode() == rasterDataNode) { if (RasterDataNode.PROPERTY_NAME_NAME.equals(event.getPropertyName())) { imageLayer.setName(rasterDataNode.getDisplayName()); } else if (imageChangingProperties.contains(event.getPropertyName())) { ColoredBandImageMultiLevelSource bandImageSource = (ColoredBandImageMultiLevelSource) imageLayer.getMultiLevelSource(); bandImageSource.setImageInfo(rasterDataNode.getImageInfo()); imageLayer.regenerate(); } } } @Override public void nodeDataChanged(ProductNodeEvent event) { if (event.getSourceNode() == rasterDataNode) { imageLayer.regenerate(); } } @Override public void nodeAdded(ProductNodeEvent event) { } @Override public void nodeRemoved(ProductNodeEvent event) { } }