Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / trunk / templates / rasterTaskProjectTemplate / alg_with_preview_template / sources / app / ProjectTemplateExtension.java @ 2356

History | View | Annotate | Download (10.5 KB)

1
package org.gvsig.raster.projecttemplate.app;
2

    
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.io.File;
6
import java.util.ArrayList;
7
import java.util.HashMap;
8
import java.util.List;
9

    
10
import javax.swing.JComponent;
11
import javax.swing.JPanel;
12

    
13
import org.gvsig.andami.IconThemeHelper;
14
import org.gvsig.andami.PluginServices;
15
import org.gvsig.andami.plugins.Extension;
16
import org.gvsig.andami.ui.mdiManager.IWindow;
17
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
18
import org.gvsig.fmap.dal.coverage.RasterLocator;
19
import org.gvsig.fmap.dal.coverage.util.FileUtils;
20
import org.gvsig.fmap.dal.exception.ReadException;
21
import org.gvsig.fmap.mapcontext.layers.FLayer;
22
import org.gvsig.fmap.mapcontext.layers.FLayers;
23
import org.gvsig.fmap.mapcontrol.MapControl;
24
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
25
import org.gvsig.i18n.Messages;
26
import org.gvsig.raster.algorithm.RasterBaseAlgorithmLibrary;
27
import org.gvsig.raster.algorithm.process.DataProcess;
28
import org.gvsig.raster.algorithm.process.IProcessActions;
29
import org.gvsig.raster.algorithm.process.ProcessException;
30
import org.gvsig.raster.fmap.layers.FLyrRaster;
31
import org.gvsig.raster.mainplugin.RasterMainPluginUtils;
32
import org.gvsig.raster.projecttemplate.swing.ProjectTemplatePanel;
33
import org.gvsig.raster.projecttemplate.swing.ProjectTemplateSwingLocator;
34
import org.gvsig.raster.projecttemplate.algorithm.ProjectTemplateProcess;
35
import org.gvsig.raster.swing.RasterSwingLibrary;
36
import org.gvsig.raster.swing.RasterSwingLocator;
37
import org.gvsig.raster.swing.newlayer.CreateNewLayerPanel;
38
import org.gvsig.raster.swing.newlayer.FileNameManagement;
39
import org.gvsig.raster.swing.preview.PreviewPanel;
40
import org.gvsig.raster.util.RasterNotLoadException;
41
import org.gvsig.tools.ToolsLocator;
42
import org.gvsig.tools.extensionpoint.ExtensionPoint;
43
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
44
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
46

    
47

    
48
public class ProjectTemplateExtension extends Extension implements ActionListener, IProcessActions {
49
        private int                      windowWidth         = 600;
50
        private int                      windowHeight        = 350;
51
        private IWindow                  window              = null;
52
        private PreviewPanel             previewPanel        = null;
53
        private ProjectTemplatePreview   processPreview      = null;
54
        private ProjectTemplatePanel     panel               = null;
55
        private CreateNewLayerPanel      newLayerPanel       = null;
56
        private static final Logger      logger              = LoggerFactory.getLogger(ProjectTemplateExtension.class);
57
        
58
    public void initialize() {
59
            
60
            // Adds an entry to the TOC's floating menu to those layers defined in this extension
61
            
62
                //ExtensionPoint exPoint = ToolsLocator.getExtensionPointManager().add("My_TocActions");
63
                //exPoint.append("MyMenuEntry", "", new ProjectTemplateTocMenuEntry());
64

    
65
        // Adds a new tab to the "add layer" dialog
66
            
67
            //AddLayer.addWizard(ProjectTemplateWizard.class);
68
            
69
            // Adds a new button in the raster bar
70
            
71
                ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
72
                ExtensionPoint point = extensionPoints.add("GenericToolBarMenu");
73
                point.append("ProjectTemplate", "", ProjectTemplateTocMenuEntry.getSingleton());
74
                ProjectTemplateTocMenuEntry.setExtension(this);
75
            
76
        Messages.addResourceFamily("org.gvsig.raster.projecttemplate.app.i18n.text",
77
                        ProjectTemplateExtension.class.getClassLoader(),
78
                        ProjectTemplateExtension.class.getClass().getName()); 
79

    
80
            initilizeIcons();
81
    }
82
    
83
        public void postInitialize() {
84
        }
85

    
86
    public void execute(String actionCommand) {
87
            if (actionCommand.compareTo("ProjectTemplate") == 0) {
88
                    if(getSelectedLayer() == null) {
89
                            RasterSwingLibrary.messageBoxError("layer_not_selected", null);
90
                            return;
91
                    }
92
                    try {
93
                            initializeMainPanel();
94
                    } catch (ReadException e) {
95
                            logger.error("Error initializing the main panel", e);
96
                    }
97
            }
98
    }
99
    
100
    /**
101
     * Creates and initializes the main panel
102
     * @throws ReadException
103
     */
104
    private void initializeMainPanel() throws ReadException {
105
       loadProjectTemplatePanel();
106
      
107
       MainPanel mainPanel = new MainPanel(
108
                       getProjectTemplatePanel().getComponent(), 
109
                       (JComponent)getNewLayerPanel());
110
       
111
       window = new ProjectTemplateWindow(
112
                       mainPanel, 
113
                       (JPanel)getPreviewPanel(), 
114
                       Messages.getText("projecttemplate"), 
115
                       windowWidth, 
116
                       windowHeight,
117
                       false,
118
                       this);
119
       
120
       PluginServices.getMDIManager().addWindow(window);
121
       getPreviewPanel().previewInitializeSizes();
122
       getPreviewPanel().refreshPreview();
123
    }
124
    
125
    /**
126
     * Loads the main panel with the data
127
     */
128
    private void loadProjectTemplatePanel() {
129
            //TODO: Load panel with the initial data
130
            LayerElement element = new LayerElement(getSelectedLayer());
131
            getProjectTemplatePanel().getDataModel().setInputLayer(element);
132
    }
133

    
134
    
135
    /**
136
     * Gets the list of layers from the gvSIG view
137
     * @return
138
     */
139
    private FLayers getLayers() {
140
        MapControl mapControl = null;
141
        IWindow[] windowList = PluginServices.getMDIManager().getAllWindows();
142
        for (int i = 0; i < windowList.length; i++) {
143
            if (windowList[i] instanceof AbstractViewPanel)
144
                mapControl = ((AbstractViewPanel) windowList[i]).getMapControl();
145
        }
146
        if (mapControl != null)
147
            return mapControl.getMapContext().getLayers();
148
        return null;
149
    }
150
    
151
    /**
152
     * Gets the selected layer
153
     * @return
154
     */
155
    private FLyrRaster getSelectedLayer() {
156
            FLayers lyrs = getLayers();
157
            for (int i = 0; i < lyrs.getLayersCount(); i++) {
158
                        FLayer lyr = lyrs.getLayer(i);
159
                        if(lyr.isActive() && lyr instanceof FLyrRaster)
160
                                return (FLyrRaster)lyr;
161
                }
162
            return null;
163
    }
164
    
165
    public boolean isEnabled() {
166
        return false;
167
    }
168

    
169
    public boolean isVisible() {
170
        return false;
171
    }
172

    
173
    void initilizeIcons() {
174
                IconThemeHelper.registerIcon(null, "gvsig-icon", this);
175
    }
176
    
177
    /**
178
     * Gets the {@link ProjectTemplatePanel}
179
     * @return {@link ProjectTemplatePanel}
180
     */
181
    private CreateNewLayerPanel getNewLayerPanel() {
182
            if(newLayerPanel == null)
183
                     newLayerPanel = RasterSwingLocator.getSwingManager().createNewLayerPanel(
184
                                     Messages.getText("create_output_layer"));
185
            return newLayerPanel;
186
    }
187
    
188
    /**
189
     * Gets the {@link PreviewPanel}
190
     * @return {@link PreviewPanel}
191
     */
192
    private PreviewPanel getPreviewPanel() {
193
            if(previewPanel == null)
194
                    previewPanel = RasterSwingLocator.getSwingManager().createSinglePreviewPanel(null, getDataSourcePreview());
195
            return previewPanel;
196
    }
197
    
198
    /**
199
     * Gets the {@link ProjectTemplatePreview}
200
     * @return {@link ProjectTemplatePreview}
201
     */
202
    private ProjectTemplatePreview getDataSourcePreview() {
203
            if(processPreview == null) {
204
                    processPreview = new ProjectTemplatePreview();
205
            }
206
            processPreview.setData(getProjectTemplatePanel().getDataModel());
207
            return processPreview;
208
    }
209
    
210
    /**
211
     * Gets the {@link ProjectTemplatePanel}
212
     * @return {@link ProjectTemplatePanel}
213
     */
214
    private ProjectTemplatePanel getProjectTemplatePanel() {
215
            if(panel == null)
216
                    panel = ProjectTemplateSwingLocator.getSwingManager().createProjectTemplatePanel();
217
            return panel;
218
    }
219

    
220
        public void actionPerformed(ActionEvent e) {
221
                if(window != null && 
222
                        (e.getSource() == ((ProjectTemplateWindow)window).getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT) ||
223
                        e.getSource() == ((ProjectTemplateWindow)window).getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY))) {
224
                                DataProcess task = null;
225
                                try {
226
                                        task = RasterBaseAlgorithmLibrary.getManager().createRasterTask("ProjectTemplateProcess");
227
                                } catch (ProcessException e1) {
228
                                        RasterSwingLibrary.messageBoxError("error_processing_layer", null, e1);
229
                                }
230
                                task.setActions(this);
231
                                getDataSourcePreview().addParams(task, 
232
                                                getNewLayerPanel().getDirectorySelected(), 
233
                                                getNewLayerPanel().getFileSelected());
234
                                task.start();
235
                                return;
236
                }
237
        }
238
        
239
        @SuppressWarnings("unchecked")
240
        public void end(Object params) {
241
                if(params instanceof HashMap<?, ?>) {
242
                        HashMap<String, Object>  map = (HashMap<String, Object>) params;
243
                        String fName = (String)map.get(ProjectTemplateProcess.FILENAME);
244
                        long milis = (Long)map.get(ProjectTemplateProcess.TIME);
245
                        processFinalize(fName, milis);
246
                        RasterSwingLocator.getSwingManager().showSummaryProcessDialog(fName, milis);
247
                }
248
        }
249
        
250
        private void processFinalize(String fileName, long milis) {
251
                if (!new File(fileName).exists())
252
                        return;
253

    
254
                String viewName = getViewName();
255
                if(viewName != null) {
256
                        if (RasterSwingLibrary.messageBoxYesOrNot("cargar_toc", this)) {
257
                                try {
258
                                        RasterMainPluginUtils.loadLayer(viewName, fileName, null);
259
                                } catch (RasterNotLoadException e) {
260
                                        RasterSwingLibrary.messageBoxError("error_load_layer", null, e);
261
                                }
262
                        }
263
                }
264
        }
265
        
266
        private String getViewName() {
267
                FLyrRaster lyrRaster = getSelectedLayer();
268
                IWindow[] w = PluginServices.getMDIManager().getAllWindows();
269
                for (int i = 0; i < w.length; i++) {
270
                        if(w[i] instanceof AbstractViewPanel) {
271
                                FLayers lyrs = ((AbstractViewPanel)w[i]).getMapControl().getMapContext().getLayers();
272
                                for (int j = 0; j < lyrs.getLayersCount(); j++) {
273
                                        FLayer lyr = lyrs.getLayer(j);
274
                                        if(lyrRaster == lyr) {
275
                                                return PluginServices.getMDIManager().getWindowInfo((AbstractViewPanel) w[i]).getTitle();
276
                                        }
277
                                }
278
                        }
279
                }
280
                return null;
281
        }
282

    
283
        public void interrupted() {
284

    
285
        }
286

    
287
        public void updateProgress(int current, int total) {
288

    
289
        }
290
        
291
        public class FileNameManagementImpl implements FileNameManagement {
292
                private FileUtils fileUtils = RasterLocator.getManager().getFileUtils();
293
                
294
                public String getDefaultFilePath() {
295
                        return System.getProperty("user.home");
296
                }
297

    
298
                public List<String> getPrefixSupported() {
299
                        List<String> list = new ArrayList<String>();
300
                        list.add("tif");
301
                        return list;
302
                }
303

    
304
                public String getUniqueLayerName() {
305
                        return fileUtils.getOnlyLayerName();
306
                }
307

    
308
                public void usesUniqueLayerName() {
309
                        fileUtils.usesOnlyLayerName();
310
                }
311

    
312
        }
313
        
314
        public class LayerElement {
315
                private FLayer     lyr  = null;
316
                public LayerElement(FLayer lyr) {
317
                        this.lyr = lyr;
318
                }
319
                
320
                public FLayer getLayer() {
321
                        return lyr;
322
                }
323
                
324
                public String toString() {
325
                        return lyr.getName();
326
                }
327
                
328
                public int getNumOfElements() {
329
                        if(lyr instanceof FLyrRaster)
330
                                return ((FLyrRaster)lyr).getDataStore().getBandCount();
331
                        return 0;
332
                }
333
        }
334
}