Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.raster.tools / org.gvsig.raster.tools.app / org.gvsig.raster.tools.app.mainplugin / src / main / java / org / gvsig / raster / tools / app / mainplugin / SaveRasterLayerExtension.java @ 8852

History | View | Annotate | Download (5.34 KB)

1
package org.gvsig.raster.tools.app.mainplugin;
2

    
3
import javax.swing.JOptionPane;
4

    
5
import org.apache.commons.lang3.StringUtils;
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

    
9
import org.gvsig.andami.IconThemeHelper;
10
import org.gvsig.andami.plugins.Extension;
11
import org.gvsig.app.ApplicationLocator;
12
import org.gvsig.app.ApplicationManager;
13
import org.gvsig.app.project.documents.view.ViewDocument;
14
import org.gvsig.app.project.documents.view.gui.IView;
15
import org.gvsig.fmap.dal.exception.DataException;
16
import org.gvsig.fmap.dal.raster.api.RasterStore;
17
import org.gvsig.fmap.mapcontext.layers.FLayer;
18
import org.gvsig.fmap.mapcontext.layers.FLayers;
19
import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
20
import org.gvsig.fmap.mapcontrol.MapControl;
21
import org.gvsig.raster.lib.buffer.api.Buffer;
22
import org.gvsig.raster.lib.buffer.api.exceptions.BufferOperationException;
23
import org.gvsig.raster.lib.buffer.api.operations.OperationList;
24
import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
25
import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
26
import org.gvsig.raster.swing.buffer.save.SaveBufferDialog;
27
import org.gvsig.tools.ToolsLocator;
28
import org.gvsig.tools.dispose.DisposeUtils;
29
import org.gvsig.tools.i18n.I18nManager;
30

    
31
/**
32
 *
33
 * @author fdiaz
34
 *
35
 */
36
public class SaveRasterLayerExtension extends Extension {
37

    
38
    private static final Logger logger = LoggerFactory.getLogger(SaveRasterLayerExtension.class);
39

    
40
    @Override
41
    public void initialize() {
42
        IconThemeHelper.registerIcon("action", "layer-saveas", this);
43
    }
44

    
45
    @Override
46
    public void execute(String actionCommand) {
47
        if (StringUtils.equalsIgnoreCase(actionCommand, "save-raster-layer")) {
48
            I18nManager i18nManager = ToolsLocator.getI18nManager();
49
            IView view = getActiveView();
50
            MapControl mapControl = view.getMapControl();
51
            FLayer[] layers = mapControl.getMapContext().getLayers().getActives();
52
            if (layers[0] instanceof RasterLayer) {
53
                final RasterLayer layer = (RasterLayer) layers[0];
54

    
55
                final RasterStore store = layer.getRasterStore();
56
                Buffer buffer = null;
57
                try {
58
                    try {
59
                        buffer = store.getRasterSet();
60
                    } catch (DataException e) {
61
                        logger.error("Error creating raster store's buffer", e);
62
                        JOptionPane.showMessageDialog(null,
63
                            new StringBuilder().append(i18nManager.getTranslation("error_creating_buffer")).append(":")
64
                                .append(e.getLocalizedMessage()), i18nManager.getTranslation("error"),
65
                            JOptionPane.ERROR_MESSAGE);
66
                        return;
67
                    }
68
                    OperationList filters = layer.getLegend().getFilters();
69
                    if (buffer != null) {
70
                        Buffer filteredBuffer = null;
71
                        try {
72
                            filteredBuffer = filters.execute(buffer);
73
                            RasterSwingBufferManager rasterSwingBufferManager =
74
                                RasterSwingBufferLocator.getSwingManager();
75
                            SaveBufferDialog saveBufferDialog = rasterSwingBufferManager.createSaveBufferDialog();
76
                            saveBufferDialog.setBuffer(filteredBuffer);
77
                            saveBufferDialog.showDialog(null);
78
                        } catch (BufferOperationException e) {
79
                            logger.error("Error applying the filters", e);
80
                            JOptionPane.showMessageDialog(
81
                                null,
82
                                new StringBuilder().append(i18nManager.getTranslation("error_applying_buffer"))
83
                                    .append(":").append(e.getLocalizedMessage()), i18nManager.getTranslation("error"),
84
                                JOptionPane.ERROR_MESSAGE);
85
                            return;
86
                        } finally {
87
                            DisposeUtils.disposeQuietly(filteredBuffer);
88
                        }
89
                        return;
90
                    }
91
                } finally {
92
                    DisposeUtils.disposeQuietly(buffer);
93
                }
94
            }
95
        }
96
    }
97

    
98
    @Override
99
    public boolean isEnabled() {
100
        IView view = getActiveView();
101
        if (view != null) {
102
            ViewDocument viewDocument = view.getViewDocument();
103
            FLayer[] layers = viewDocument.getMapContext().getLayers().getActives();
104
            if (layers.length == 1 && layers[0] instanceof RasterLayer) {
105
                return true;
106
            }
107
        }
108
        return false;
109
    }
110

    
111
    @Override
112
    public boolean isVisible() {
113
        IView view = getActiveView();
114
        if (view != null) {
115
            ViewDocument viewDocument = view.getViewDocument();
116
            FLayers layers = viewDocument.getMapContext().getLayers();
117
            for (FLayer fLayer : layers) {
118
                if (fLayer instanceof RasterLayer) {
119
                    return true;
120
                }
121
            }
122
        }
123
        return false;
124

    
125
    }
126

    
127
    private IView getActiveView() {
128
        ApplicationManager application = ApplicationLocator.getManager();
129
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
130
        return view;
131
    }
132

    
133
}