Statistics
| Revision:

gvsig-raster / org.gvsig.raster.principalcomponents / trunk / org.gvsig.raster.principalcomponents / org.gvsig.raster.principalcomponents.app.principalcomponentsclient / src / main / java / org / gvsig / raster / principalcomponents / app / PrincipalComponentsExtension.java @ 2807

History | View | Annotate | Download (8.2 KB)

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

    
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.util.HashMap;
6

    
7
import javax.swing.JPanel;
8

    
9
import org.gvsig.andami.IconThemeHelper;
10
import org.gvsig.andami.PluginServices;
11
import org.gvsig.andami.plugins.Extension;
12
import org.gvsig.andami.ui.mdiManager.IWindow;
13
import org.gvsig.app.project.documents.view.gui.IView;
14
import org.gvsig.fmap.mapcontext.layers.FLayer;
15
import org.gvsig.fmap.mapcontrol.MapControl;
16
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
17
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
18
import org.gvsig.i18n.Messages;
19
import org.gvsig.raster.algorithm.BasicAPISwingPanel;
20
import org.gvsig.raster.algorithm.process.DataProcess;
21
import org.gvsig.raster.algorithm.process.IProcessActions;
22
import org.gvsig.raster.algorithm.process.ProcessParamsManagement;
23
import org.gvsig.raster.fmap.layers.FLyrRaster;
24
import org.gvsig.raster.principalcomponents.algorithm.PCStatsDataStructure;
25
import org.gvsig.raster.principalcomponents.algorithm.PrincipalComponentsAlgorithmLibrary;
26
import org.gvsig.raster.principalcomponents.app.toolbox.ToolboxPCLoader;
27
import org.gvsig.raster.principalcomponents.swing.PrincipalComponentsSwingLibrary;
28
import org.gvsig.raster.principalcomponents.swing.PrincipalComponentsSwingLocator;
29
import org.gvsig.raster.swing.RasterSwingLibrary;
30
import org.gvsig.tools.ToolsLocator;
31
import org.gvsig.tools.extensionpoint.ExtensionPoint;
32
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
33

    
34

    
35
public class PrincipalComponentsExtension extends Extension implements ActionListener, IProcessActions {
36
    private BasicAPISwingPanel   mainPanel              = null;
37
    private BasicAPISwingPanel   componentsPanel        = null;
38
    private MainWindow           windowMainPanel        = null;
39
    private MainWindow           windowComponentsPanel  = null;
40
    private MainWindow           statisticsPanel        = null;
41
    private FLyrRaster           lyr                    = null;
42
    private PCStatsDataStructure stats                  = null;
43

    
44
    public void initialize() {
45

    
46
            // Adds an entry to the TOC's floating menu to those layers defined in this extension
47

    
48
                //ExtensionPoint exPoint = ToolsLocator.getExtensionPointManager().add("My_TocActions");
49
                //exPoint.append("MyMenuEntry", "", new PrincipalComponentsTocMenuEntry());
50

    
51
        // Adds a new tab to the "add layer" dialog
52

    
53
            //AddLayer.addWizard(PrincipalComponentsWizard.class);
54

    
55
            // Adds a new button in the raster bar
56
            // TODO: Remove for providers
57
                ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
58
                ExtensionPoint point = extensionPoints.add("GenericToolBarMenu");
59
                point.append("PrincipalComponents", "", PrincipalComponentsTocMenuEntry.getSingleton());
60
                PrincipalComponentsTocMenuEntry.setExtension(this);
61

    
62
        Messages.addResourceFamily("org.gvsig.raster.principalcomponents.app.i18n.text",
63
                        PrincipalComponentsExtension.class.getClassLoader(),
64
                        PrincipalComponentsExtension.class.getClass().getName());
65

    
66
            initilizeIcons();
67
    }
68

    
69
        public void postInitialize() {
70
                new ToolboxPCLoader().registerTool();
71
        }
72

    
73
    public void execute(String actionCommand) {
74
            if (actionCommand.compareTo("PrincipalComponents") == 0) {
75
                    lyr = getSelectedLayer();
76
                    if(lyr == null) {
77
                            RasterSwingLibrary.messageBoxError(Messages.getText("layer_not_found"), null);
78
                            return;
79
                    }
80

    
81
                        String defaultROIEPSG = getFirstMapCtrl().getProjection().getAbrev();
82

    
83
                    mainPanel = PrincipalComponentsSwingLocator.getSwingManager().createPCAMainPanel(
84
                                    lyr.getDataStore(),
85
                                    lyr.getName(),
86
                                    lyr.getDataStore().getBandCount(),
87
                                    defaultROIEPSG);
88

    
89
                    windowMainPanel = new MainWindow(mainPanel.getComponent(),
90
                                    Messages.getText("principal_components"),
91
                                    400, 350,
92
                                    this);
93

    
94
                    PluginServices.getMDIManager().addCentredWindow(windowMainPanel);
95

    
96
                    mainPanel.initialize();
97
            }
98
    }
99

    
100
        /**
101
         * Gets the Mapcontrol for the first view found.
102
         * @return
103
         */
104
    private MapControl getFirstMapCtrl() {
105
            IWindow[] windowList = PluginServices.getMDIManager().getOrderedWindows();
106
            for (int i = 0; i < windowList.length; i++) {
107
                    if(windowList[i] instanceof IView) {
108
                            return ((IView)windowList[i]).getMapControl();
109
                    }
110
            }
111
            return null;
112
    }
113

    
114
    /**
115
     * Gets the selected and valid layer
116
     * @return
117
         */
118
        private FLyrRaster getSelectedLayer() {
119
                FLayer[] lyrList = getFirstMapCtrl().getMapContext().getLayers().getActives();
120
                for (int i = 0; i < lyrList.length; i++) {
121
                        if(lyrList[i] instanceof FLyrRaster)
122
                                return (FLyrRaster)lyrList[i];
123
                }
124
                return null;
125
        }
126

    
127
    public boolean isEnabled() {
128
        return false;
129
    }
130

    
131
    public boolean isVisible() {
132
        return false;
133
    }
134

    
135
    void initilizeIcons(){
136
                IconThemeHelper.registerIcon(null, "principal-components", this);
137
                IconThemeHelper.registerIcon(null, "gvsig-icon", this);
138
                IconThemeHelper.registerIcon(null, "gvsig-icon16x16", this);
139
    }
140

    
141
        public void actionPerformed(ActionEvent e) {
142
                //ACCEPT MAIN PANEL
143
                if( e.getSource() == ((DefaultButtonsPanel)windowMainPanel).getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY) ||
144
                        e.getSource() == ((DefaultButtonsPanel)windowMainPanel).getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT)) {
145
                        DataProcess task = null;
146
                        try {
147
                                task = (DataProcess)mainPanel.getResult();
148
                        } catch (Exception e1) {
149
                                RasterSwingLibrary.messageBoxError(Messages.getText("problems_creating_process"), null);
150
                                return;
151
                        }
152
                        task.setActions(this);
153
                        task.init();
154
                        task.start();
155
                }
156

    
157
                //GENERATE STATISTICS BUTTON
158
                if( componentsPanel != null &&
159
                        PrincipalComponentsSwingLibrary.GENERATE_STATIST == componentsPanel.getComponentIDByObject(e.getSource())) {
160
                        try {
161
                                Object[] result = (Object[])componentsPanel.getResult();
162
                                JPanel statsPanel = PrincipalComponentsSwingLocator.getSwingManager().createStatisticsPanel(
163
                                                stats,
164
                                                (Boolean)result[1],
165
                                                (Boolean)result[2],
166
                                                (Boolean)result[3]);
167
                                statisticsPanel = new MainWindow(statsPanel,
168
                                            Messages.getText("stats"),
169
                                            800, 500,
170
                                            this,
171
                                            true);
172

    
173
                            PluginServices.getMDIManager().addWindow(statisticsPanel);
174
                        } catch (Exception e1) {
175
                                RasterSwingLibrary.messageBoxError(Messages.getText("problems_creating_process"), null);
176
                                return;
177
                        }
178
                }
179

    
180
                //ACCEPT COMPONENTS PANEL
181
                if( windowComponentsPanel != null &&
182
                        (e.getSource() == ((DefaultButtonsPanel)windowComponentsPanel).getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY) ||
183
                        e.getSource() == ((DefaultButtonsPanel)windowComponentsPanel).getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT))) {
184
                        DataProcess task = null;
185
                        try {
186
                                Object[] result = (Object[])componentsPanel.getResult();
187
                                task = (DataProcess)result[0];
188
                                task.setActions(new ProcessEndActions(windowComponentsPanel, lyr));
189
                                task.init();
190
                                task.start();
191
                        } catch (Exception e1) {
192
                                RasterSwingLibrary.messageBoxError(Messages.getText("problems_creating_process"), null);
193
                                return;
194
                        }
195
                }
196
        }
197

    
198
        @SuppressWarnings("unchecked")
199
        public void end(Object param) {
200
                HashMap<String, Object> params = (HashMap<String, Object>)param;
201
                String processName = (String)params.get(ProcessParamsManagement.PROCESS_NAME);
202

    
203
                //END STATISTICS PROCESS (after accept main dialog)
204
                if (processName.equals(PrincipalComponentsAlgorithmLibrary.PC_STATS_PROCESS_LABEL)) {
205
                        PluginServices.getMDIManager().closeWindow(windowMainPanel);
206
                        stats = (PCStatsDataStructure)params.get("STATS_RESULT");
207
                        String fileName = (String)params.get("PATH");
208
                        boolean[] bands = (boolean[])params.get("BANDS");
209
                        String rois = (String)params.get("ROI_EPSG");
210

    
211
                        componentsPanel = PrincipalComponentsSwingLocator.getSwingManager().createPCAComponentsListPanel(
212
                                        lyr.getDataStore(),
213
                                        stats,
214
                                        fileName,
215
                                        bands,
216
                                        rois);
217
                        componentsPanel.addListener(this);
218
                        windowComponentsPanel = new MainWindow(componentsPanel.getComponent(),
219
                                    Messages.getText("principal_components"),
220
                                    400, 350,
221
                                    this);
222
                    PluginServices.getMDIManager().addCentredWindow(windowComponentsPanel);
223
                    componentsPanel.initialize();
224
                }
225
        }
226

    
227
        public void interrupted() {
228

    
229
        }
230

    
231
        public void updateProgress(int current, int total) {
232

    
233
        }
234
}