Statistics
| Revision:

gvsig-projects-pool / org.gvsig.online / trunk / org.gvsig.online / org.gvsig.online.swing / org.gvsig.online.swing.impl / src / main / java / org / gvsig / online / swing / impl / workingarea / WorkingAreaPickerControllerImpl.java @ 9512

History | View | Annotate | Download (9.66 KB)

1
/*
2
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
3
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
4
 */
5
package org.gvsig.online.swing.impl.workingarea;
6

    
7
import java.awt.event.ActionEvent;
8
import java.awt.event.ActionListener;
9
import java.sql.Timestamp;
10
import java.util.List;
11
import java.util.function.Supplier;
12
import javax.swing.JButton;
13
import javax.swing.JTextField;
14
import javax.swing.text.JTextComponent;
15
import org.apache.commons.lang.StringUtils;
16
import org.gvsig.fmap.geom.primitive.Envelope;
17
import org.gvsig.fmap.mapcontrol.MapControl;
18
import org.gvsig.online.lib.api.OnlineLayer;
19
import org.gvsig.online.lib.api.OnlineLocator;
20
import org.gvsig.online.lib.api.OnlineSite;
21
import org.gvsig.online.lib.api.workingcopy.WorkingArea;
22
import org.gvsig.online.swing.impl.SelectAreaPanel;
23
import org.gvsig.tools.ToolsLocator;
24
import org.gvsig.tools.bookmarksandhistory.Bookmarks;
25
import org.gvsig.tools.bookmarksandhistory.History;
26
import org.gvsig.tools.i18n.I18nManager;
27
import org.gvsig.tools.lang.CloneableUtils;
28
import org.gvsig.tools.swing.api.ToolsSwingLocator;
29
import org.gvsig.tools.swing.api.ToolsSwingManager;
30
import org.gvsig.tools.swing.api.ToolsSwingUtils;
31
import org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue;
32
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_GETVALUE;
33
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_SETVALUE;
34
import org.gvsig.tools.swing.api.bookmarkshistory.BookmarksController;
35
import org.gvsig.tools.swing.api.bookmarkshistory.HistoryController;
36
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
37

    
38
/**
39
 *
40
 * @author fdiaz
41
 */
42
public class WorkingAreaPickerControllerImpl extends AbstractPickerController<WorkingArea> {
43
    
44
    private final JTextComponent txtLabel;
45
    private final JTextComponent txtEnvelope;
46
    private final JButton btnWorkingAreaFromView;
47
    private final JButton btnWorkingAreaDialog;
48
    private final JButton btnHistory;
49
    private final JButton btnBookmarks;
50
    private final Supplier<MapControl> mapControl;
51
    private final Supplier<List<OnlineLayer>> layers;
52
    private final Supplier<OnlineSite> site;
53
    
54
    private WorkingArea workingArea;
55
    private static final String BOOKMARKSANDHISTORY_NAME = "WorkingAreaPickerController";
56
    private final Bookmarks bookmarks;
57
    private final History history;
58
    private final BookmarksController bookmarksController;
59
    private final HistoryController historyController;
60

    
61
    public WorkingAreaPickerControllerImpl(Supplier<OnlineSite> site, JTextComponent txtLabel, JTextComponent txtEnvelope, JButton btnWorkingAreaFromView, JButton btnWorkingAreaDialog, JButton btnHistory, JButton btnBookmarks, Supplier<MapControl> mapControl, Supplier<List<OnlineLayer>> layers) {
62
        this.mapControl = mapControl;
63
        this.txtLabel = txtLabel;
64
        this.site = site;
65
        this.layers = layers;
66

    
67
        this.txtEnvelope = txtEnvelope==null?new JTextField():txtEnvelope;
68
        this.txtEnvelope.setEditable(false);
69

    
70
        this.btnWorkingAreaFromView = btnWorkingAreaFromView==null?new JButton():btnWorkingAreaFromView;
71
        this.btnWorkingAreaDialog = btnWorkingAreaDialog;
72
        this.btnHistory = btnHistory==null?new JButton():btnHistory;
73
        this.btnBookmarks = btnBookmarks==null?new JButton():btnBookmarks;
74
        
75
        this.workingArea = OnlineLocator.getOnlineManager().createWorkingArea();
76

    
77
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
78
        toolsSwingManager.setDefaultPopupMenu(this.txtLabel);
79
        toolsSwingManager.setDefaultPopupMenu(this.txtEnvelope);
80
        toolsSwingManager.addClearButton(this.txtLabel);
81
        toolsSwingManager.addClearButton(this.txtEnvelope, (ActionEvent e) -> {
82
            this.txtEnvelope.setText("");
83
            workingArea.setValue(null);
84
        });
85
        ToolsSwingUtils.configurePickersButton(
86
            this.btnWorkingAreaDialog,
87
            "_Show_working_area_selector",
88
            "picker-envelope-from-mapcontrol",
89
            (ActionEvent e) -> {
90
                doShowWorkingAreaSelector();
91
            },
92
            null
93
        );
94
        ToolsSwingUtils.configurePickersButton(
95
            this.btnWorkingAreaFromView,
96
            "_Capture_the_view_area",
97
            "picker-envelope-from-mapcontrol",
98
            (ActionEvent e) -> {
99
                doSetEnvelopeFromMapControlEnvelope();
100
            },
101
            null
102
        );
103
        
104
        this.bookmarks = ToolsLocator.getBookmarksAndHistoryManager().getBookmarksGroup(BOOKMARKSANDHISTORY_NAME);
105
        this.history = ToolsLocator.getBookmarksAndHistoryManager().getHistoryGroup(BOOKMARKSANDHISTORY_NAME);
106

    
107
        this.bookmarksController = ToolsSwingLocator.getToolsSwingManager().createBookmarksController(this.bookmarks, btnBookmarks);
108
        this.historyController = ToolsSwingLocator.getToolsSwingManager().createHistoryController(this.history, btnHistory);
109

    
110
        this.historyController.setFilter(null);
111

    
112
        ActionListener bookmarksAndHistoryListener = (ActionEvent e) -> {
113
                ActionEventWithCurrentValue<WorkingArea> event = (ActionEventWithCurrentValue<WorkingArea>) e;
114
                switch (event.getID()) {
115
                        case ID_GETVALUE:
116
                                event.setCurrentValue(this.get());
117
                                break;
118
                        case ID_SETVALUE:
119
                                this.set(event.getCurrentValue());
120
                                break;
121
                }
122
        };
123
        this.historyController.addActionListener(bookmarksAndHistoryListener);
124
        this.bookmarksController.addActionListener(bookmarksAndHistoryListener);
125

    
126
    }
127

    
128
    private OnlineSite getSite() {
129
        if( this.site == null ) {
130
            return null;
131
        }
132
        return this.site.get();
133
    }
134

    
135
    private MapControl getMapControl() {
136
        if( this.mapControl == null ) {
137
            return null;
138
        }
139
        return this.mapControl.get();
140
    }
141

    
142
    private List<OnlineLayer> getLayers() {
143
        if( this.layers == null ) {
144
            return null;
145
        }
146
        return this.layers.get();
147
    }
148

    
149
    protected void doSetEnvelopeFromMapControlEnvelope() {
150
        I18nManager i18n = ToolsLocator.getI18nManager();
151
        MapControl theMapControl = this.getMapControl();
152
        if( !this.isEditable() || theMapControl==null ) {
153
            return;
154
        }
155
        try {
156
            Envelope env = theMapControl.getViewPort().getEnvelope();
157
            if( env == null ) {
158
                return;
159
            }
160
            Envelope theEnvelope = (Envelope) env.clone();
161
            if(StringUtils.isBlank(this.workingArea.getLabel())){
162
                this.workingArea.setLabel(i18n.getTranslation("_Area")+" "+new Timestamp(System.currentTimeMillis()));
163
            }
164
            this.workingArea.setValue(theEnvelope);
165
            
166
            this.txtLabel.setText(this.workingArea.getLabel());
167
            if(theEnvelope != null){
168
                this.txtEnvelope.setText(this.workingArea.getValue().getGeometry().convertToWKTQuietly());
169
            }
170
            this.fireChangeEvent();
171
        } catch (Exception ex) {
172
            LOG.warn("Can't get envelope from mapcontrol.", ex);
173
        }
174
    }
175
    
176
    private void doShowWorkingAreaSelector() {
177
        I18nManager i18n = ToolsLocator.getI18nManager();
178
        Envelope area = SelectAreaPanel.getWorkingArea(this.getSite(), getLayers());
179
        if (area != null) {
180
            this.workingArea.setValue(area);
181
            if(StringUtils.isBlank(this.workingArea.getLabel())){
182
                this.workingArea.setLabel(i18n.getTranslation("_Area")+" "+new Timestamp(System.currentTimeMillis()));
183
            }
184
            this.txtLabel.setText(this.workingArea.getLabel());
185
            this.txtEnvelope.setText(this.workingArea.getValue().getGeometry().convertToWKTQuietly());
186
            this.fireChangeEvent();
187
        }
188
    }
189
    
190
    @Override
191
    public WorkingArea get() {
192
        this.workingArea.setLabel(StringUtils.defaultIfBlank(this.txtLabel.getText(), null));
193
        WorkingArea cloned = (WorkingArea) CloneableUtils.cloneQuietly(this.workingArea);
194
        this.history.add(cloned);
195
        return cloned;
196
    }
197
    
198
    public WorkingArea getWithoutAddHistory() {
199
        if(this.workingArea == null){
200
            return null;
201
        }
202
        this.workingArea.setLabel(StringUtils.defaultIfBlank(this.txtLabel.getText(), null));
203
        WorkingArea cloned = (WorkingArea) CloneableUtils.cloneQuietly(this.workingArea);
204
        return cloned;
205
    }
206

    
207
    @Override
208
    public void set(WorkingArea workingArea) {
209
        if(workingArea == null){
210
            this.workingArea = OnlineLocator.getOnlineManager().createWorkingArea();
211
        } else {
212
            this.workingArea = (WorkingArea) CloneableUtils.cloneQuietly(workingArea);
213
        }
214
        this.txtLabel.setText(this.workingArea.getLabel());
215
        if(this.workingArea.getValue() == null){
216
            this.txtEnvelope.setText("");
217
        } else {
218
            this.txtEnvelope.setText(this.workingArea.getValue().getGeometry().convertToWKTQuietly());
219
        }
220
    }
221

    
222
    @Override
223
    public void coerceAndSet(Object value) {
224
        this.set((WorkingArea)value);
225
    }
226

    
227
    @Override
228
    public void setEnabled(boolean enabled) {
229
        this.txtLabel.setEditable(enabled);
230
        this.btnWorkingAreaDialog.setEnabled(enabled);
231
        this.btnWorkingAreaFromView.setEnabled(enabled);
232
        this.btnHistory.setEnabled(enabled);
233
        this.btnBookmarks.setEnabled(enabled);
234
    }
235

    
236
    @Override
237
    public boolean isEnabled() {
238
        return this.btnWorkingAreaDialog.isEnabled();
239
    }
240

    
241
}