Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.plugin / org.gvsig.raster.tools.app / org.gvsig.raster.tools.app.mainplugin / src / main / java / org / gvsig / raster / tools / app / mainplugin / ClipExtension.java @ 43876

History | View | Annotate | Download (8.2 KB)

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

    
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.util.List;
7

    
8
import javax.swing.JOptionPane;
9

    
10
import org.apache.commons.lang3.StringUtils;
11
import org.slf4j.Logger;
12
import org.slf4j.LoggerFactory;
13

    
14
import org.gvsig.andami.IconThemeHelper;
15
import org.gvsig.andami.plugins.Extension;
16
import org.gvsig.app.ApplicationLocator;
17
import org.gvsig.app.ApplicationManager;
18
import org.gvsig.app.project.documents.view.ViewDocument;
19
import org.gvsig.app.project.documents.view.gui.IView;
20
import org.gvsig.fmap.dal.raster.RasterStore;
21
import org.gvsig.fmap.mapcontext.layers.FLayer;
22
import org.gvsig.fmap.mapcontext.layers.FLayers;
23
import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
24
import org.gvsig.fmap.mapcontrol.MapControl;
25
import org.gvsig.raster.lib.buffer.api.BufferLocator;
26
import org.gvsig.raster.lib.buffer.api.BufferManager;
27
import org.gvsig.raster.tools.lib.api.RasterClip;
28
import org.gvsig.raster.tools.lib.api.RasterToolsLocator;
29
import org.gvsig.raster.tools.lib.api.exceptions.ClipException;
30
import org.gvsig.raster.tools.lib.api.exceptions.RasterToolException;
31
import org.gvsig.raster.tools.swing.api.RasterToolsSwingLocator;
32
import org.gvsig.raster.tools.swing.api.RasterToolsSwingManager;
33
import org.gvsig.raster.tools.swing.api.clip.ClipPanel;
34
import org.gvsig.tools.ToolsLocator;
35
import org.gvsig.tools.i18n.I18nManager;
36
import org.gvsig.tools.swing.api.ToolsSwingLocator;
37
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
38
import org.gvsig.tools.swing.api.windowmanager.Dialog;
39
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
40
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
41

    
42
/**
43
 *
44
 * @author fdiaz
45
 *
46
 */
47
public class ClipExtension extends Extension {
48

    
49
    private static final Logger logger = LoggerFactory.getLogger(ClipExtension.class);
50

    
51
    @Override
52
    public void initialize() {
53
        IconThemeHelper.registerIcon("action", "layer-clip-raster", this);
54
        IconThemeHelper.registerIcon("clip", "downright", this);
55
        IconThemeHelper.registerIcon("clip", "upleft", this);
56
        IconThemeHelper.registerIcon("clip", "fullextent-icon", this);
57
        IconThemeHelper.registerIcon("clip", "viewextent-icon", this);
58
        IconThemeHelper.registerIcon("clip", "roi", this);
59
        IconThemeHelper.registerIcon("clip", "round-icon", this);
60
        IconThemeHelper.registerIcon("clip", "selecttool-icon", this);
61
        IconThemeHelper.registerIcon("clip", "loadparameters-icon", this);
62
        IconThemeHelper.registerIcon("clip", "saveparameters-icon", this);
63
        IconThemeHelper.registerIcon("clip", "up", this);
64
        IconThemeHelper.registerIcon("clip", "down", this);
65
    }
66

    
67
    @Override
68
    public void execute(String actionCommand) {
69

    
70
        if (StringUtils.equalsIgnoreCase(actionCommand, "clip")) {
71
            IView view = getActiveView();
72
            MapControl mapControl = view.getMapControl();
73
            FLayer[] layers = mapControl.getMapContext().getLayers().getActives();
74
            if (layers[0] instanceof RasterLayer) {
75
                RasterLayer layer = (RasterLayer) layers[0];
76

    
77
                final WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
78
                final RasterToolsSwingManager manager = RasterToolsSwingLocator.getSwingManager();
79
                final I18nManager i18nManager = ToolsLocator.getI18nManager();
80

    
81
                final ClipPanel panel;
82
                try {
83
                    panel = manager.createClipPanel();
84
                    panel.asJComponent().setPreferredSize(new Dimension(500, 250));
85
                    panel.set(layer);
86
                    panel.set(mapControl);
87
                } catch (RasterToolException e2) {
88
                    logger.error("Error creating panel", e2);
89
                    JOptionPane.showMessageDialog(null,
90
                        new StringBuilder().append(i18nManager.getTranslation("error_creating_panel")).append(":")
91
                            .append(e2.getLocalizedMessage()), i18nManager.getTranslation("error"),
92
                        JOptionPane.ERROR_MESSAGE);
93
                    return;
94
                }
95

    
96
                final Dialog dialog =
97
                    winManager.createDialog(panel.asJComponent(), i18nManager.getTranslation("Clip")+": "+layer.getName(), null,
98
                        WindowManager_v2.BUTTONS_APPLY_OK_CANCEL);
99

    
100
                dialog.addActionListener(new ActionListener() {
101

    
102
                    @Override
103
                    public void actionPerformed(ActionEvent e) {
104
                        switch (dialog.getAction()) {
105
                        case WindowManager_v2.BUTTON_APPLY:
106
                            doClip(panel);
107
                            break;
108

    
109
                        case WindowManager_v2.BUTTON_OK:
110
                            doClip(panel);
111
                            panel.asJComponent().setVisible(false);
112
                            break;
113

    
114
                        case WindowManager_v2.BUTTON_CANCEL:
115
                            panel.asJComponent().setVisible(false);
116
                            break;
117
                        }
118

    
119
                    }
120

    
121
                });
122
                dialog.show(WindowManager.MODE.WINDOW);
123
            }
124
        }
125
    }
126

    
127
    private void doClip(ClipPanel panel) {
128
        I18nManager i18nManager = ToolsLocator.getI18nManager();
129
        ThreadSafeDialogsManager dlgManager = ToolsSwingLocator.getThreadSafeDialogsManager();
130
        RasterClip clip = RasterToolsLocator.getManager().createRasterClip();
131
        panel.fetch(clip);
132
        long rasterSize = calculateRasterSize(clip); //Bytes
133
        if(rasterSize>10000000){
134
            String message = "_the_resulting_raster_will_have_an_estimated_size_of_XSIZEX_MB_are_you_sure_XquestionX";
135
            String[] sizes = new String[1];
136
            sizes[0]= new Long(rasterSize/10000000).toString();
137
            String title = "Clip";
138
            int confirm = dlgManager.confirmDialog(
139
                i18nManager.getTranslation(message, sizes),
140
                i18nManager.getTranslation(title),
141
                JOptionPane.YES_NO_OPTION,
142
                JOptionPane.QUESTION_MESSAGE);
143
            if(confirm!=JOptionPane.YES_OPTION){
144
                return;
145
            }
146
        }
147

    
148
        try {
149
            clip.execute(null);
150
        } catch (ClipException e) {
151
            logger.warn("Can't create raster clip.", e);
152

    
153
            String message = "_cant_create_raster_clip";
154
            String title = "_error_creating_clip";
155
            dlgManager.messageDialog(message, title, JOptionPane.WARNING_MESSAGE);
156
        }
157
    }
158

    
159
    private long calculateRasterSize(RasterClip clip) {
160
        RasterLayer layer = clip.getLayer();
161
        long columns = clip.getColumns();
162
        long rows = clip.getRows();
163
        RasterStore rasterStore = layer.getRasterStore();
164
        List<Integer> bands = clip.getBands();
165
        BufferManager bufferManager = BufferLocator.getBufferManager();
166
        long size = 0;
167
        for (Integer band : bands) {
168
            size += rows*columns*bufferManager.getDataTypeSize(rasterStore.getBandDescriptor(band.intValue()).getDataType());
169
        }
170
        return size;
171
    }
172

    
173
    @Override
174
    public boolean isEnabled() {
175
        IView view = getActiveView();
176
        if (view!=null){
177
            ViewDocument viewDocument = view.getViewDocument();
178
            FLayer[] layers = viewDocument.getMapContext().getLayers().getActives();
179
            if(layers.length==1 && layers[0] instanceof RasterLayer){
180
                return true;
181
            }
182
        }
183
        return false;
184
    }
185

    
186
    @Override
187
    public boolean isVisible() {
188
        IView view = getActiveView();
189
        if (view!=null){
190
            ViewDocument viewDocument = view.getViewDocument();
191
            FLayers layers = viewDocument.getMapContext().getLayers();
192
            for (FLayer fLayer : layers) {
193
                if(fLayer instanceof RasterLayer){
194
                    return true;
195
                }
196
            }
197
        }
198
        return false;
199

    
200
    }
201

    
202
    private IView getActiveView() {
203
        ApplicationManager application = ApplicationLocator.getManager();
204
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
205
        return view;
206
    }
207

    
208
}