Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.plugin / org.gvsig.raster.app / org.gvsig.raster.app.mainplugin / src / main / java / org / gvsig / raster / app / mainplugin / StatisticsPage.java @ 43868

History | View | Annotate | Download (4.92 KB)

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

    
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.awt.event.ComponentAdapter;
6
import java.awt.event.ComponentEvent;
7

    
8
import javax.swing.JComponent;
9
import javax.swing.SwingUtilities;
10
import javax.swing.event.AncestorEvent;
11
import javax.swing.event.AncestorListener;
12

    
13
import org.gvsig.fmap.mapcontext.layers.LayerEvent;
14
import org.gvsig.fmap.mapcontext.layers.LayerListener;
15
import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
16
import org.gvsig.propertypage.PropertiesPage;
17
import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
18
import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
19
import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
20
import org.gvsig.raster.swing.buffer.statistics.StatisticsPanel;
21
import org.gvsig.tools.ToolsLocator;
22
import org.gvsig.tools.i18n.I18nManager;
23

    
24

    
25
/**
26
 * @author fdiaz
27
 *
28
 */
29
public class StatisticsPage extends javax.swing.JPanel implements PropertiesPage {
30

    
31
    /**
32
     *
33
     */
34
    private static final long serialVersionUID = 8264136278039978040L;
35
    private StatisticsPanel panel;
36
    private RasterLayer layer;
37
    private Thread updateStatisticsThread;
38

    
39

    
40
    /**
41
     * @param layer
42
     */
43
    public StatisticsPage(RasterLayer layer) {
44
        this.layer = layer;
45
        initializePanel();
46
    }
47

    
48
    private void initializePanel(){
49
        if (this.panel == null) {
50
            RasterSwingBufferManager manager = RasterSwingBufferLocator.getSwingManager();
51
            panel = manager.createStatisticsPanel();
52

    
53
            final LayerListener layerListener = new LayerListener() {
54
                @Override
55
                public void visibilityChanged(LayerEvent arg0) {
56
                    //Do nothing
57
                }
58
                @Override
59
                public void nameChanged(LayerEvent arg0) {
60
                    //Do nothing
61
                }
62
                @Override
63
                public void editionChanged(LayerEvent arg0) {
64
                    //Do nothing
65
                }
66
                @Override
67
                public void drawValueChanged(LayerEvent arg0) {
68
                    if(asJComponent().isVisible()){
69
                        updateStatisticsPanel();
70
                    }
71
                }
72
                @Override
73
                public void activationChanged(LayerEvent arg0) {
74
                    //Do nothing
75
                }
76
            };
77
            layer.addLayerListener(layerListener);
78

    
79
            this.asJComponent().addAncestorListener(new AncestorListener() {
80

    
81
                @Override
82
                public void ancestorRemoved(AncestorEvent event) {
83
                    layer.removeLayerListener(layerListener);
84
                }
85
                @Override
86
                public void ancestorMoved(AncestorEvent event) {
87
                    //Do nothing
88
                }
89
                @Override
90
                public void ancestorAdded(AncestorEvent event) {
91
                    layer.addLayerListener(layerListener);
92
                    updateStatisticsPanel();
93
                }
94
            });
95
            updateStatisticsPanel();
96
//            panel.set(this.layer.getStatistics(null));
97

    
98
            panel.addActionListener(new ActionListener() {
99

    
100
                @Override
101
                public void actionPerformed(ActionEvent e) {
102
                    if(e.getActionCommand().equalsIgnoreCase("_recalculate_statistics")){
103
                        layer.recalculateStatistics();
104
                        updateStatisticsPanel();
105
                    }
106

    
107
                }
108
            });
109
        }
110
    }
111

    
112
    @Override
113
    public JComponent asJComponent() {
114
        if (this.panel == null) {
115
            initializePanel();
116
        }
117
        return (JComponent)this.panel;
118
    }
119

    
120
    @Override
121
    public String getTitle() {
122
        I18nManager i18nManager = ToolsLocator.getI18nManager();
123
        return i18nManager.getTranslation("_statistics");
124
    }
125

    
126
    @Override
127
    public int getPriority() {
128
        return 500;
129
    }
130

    
131
    @Override
132
    public boolean whenAccept() {
133
        return true;
134
    }
135

    
136
    @Override
137
    public boolean whenApply() {
138
        return true;
139
    }
140

    
141
    @Override
142
    public boolean whenCancel() {
143
        return true;
144
    }
145

    
146
    /**
147
     *
148
     */
149
    private synchronized void updateStatisticsPanel() {
150
        if( updateStatisticsThread!=null ) {
151
            return;
152
        }
153
        this.updateStatisticsThread = new Thread(new Runnable() {
154
            @Override
155
            public void run() {
156
                final Statistics statistics = layer.getStatistics(null);
157
                SwingUtilities.invokeLater(new Runnable() {
158
                    @Override
159
                    public void run() {
160
                        panel.set(statistics);
161
                    }
162
                });
163
                updateStatisticsThread = null;
164
            }
165
        }, "Calculate statistics");
166

    
167
        updateStatisticsThread.setDaemon(false);
168
        updateStatisticsThread.start();
169
    }
170

    
171
}