Statistics
| Revision:

gvsig-vectorediting / org.gvsig.vectorediting / trunk / org.gvsig.vectorediting / org.gvsig.vectorediting.swing / org.gvsig.vectorediting.swing.impl / src / main / java / org / gvsig / vectorediting / swing / impl / DefaultEditingSwingManager.java @ 2125

History | View | Annotate | Download (8.72 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright ? 2007-2014 gvSIG Association
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24

    
25
package org.gvsig.vectorediting.swing.impl;
26

    
27
import java.awt.BorderLayout;
28
import java.awt.Component;
29
import java.awt.Font;
30
import java.awt.GridBagConstraints;
31
import java.awt.GridBagLayout;
32
import java.awt.Insets;
33
import java.util.List;
34
import java.util.Map;
35
import java.util.WeakHashMap;
36

    
37
import javax.swing.JLabel;
38
import javax.swing.JOptionPane;
39
import javax.swing.JPanel;
40

    
41
import org.gvsig.fmap.mapcontext.MapContext;
42
import org.gvsig.fmap.mapcontrol.MapControl;
43
import org.gvsig.tools.ToolsLocator;
44
import org.gvsig.tools.dynobject.DynObject;
45
import org.gvsig.tools.i18n.I18nManager;
46
import org.gvsig.tools.service.AbstractManager;
47
import org.gvsig.tools.service.Service;
48
import org.gvsig.tools.service.ServiceException;
49
import org.gvsig.utils.console.ResponseListener;
50
import org.gvsig.vectorediting.lib.api.EditingService;
51
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
52
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
53
import org.gvsig.vectorediting.swing.api.EditingContext;
54
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
55
import org.gvsig.vectorediting.swing.api.console.EditingConsole;
56
import org.gvsig.vectorediting.swing.api.contextmenu.AcceptValueListener;
57
import org.gvsig.vectorediting.swing.api.contextmenu.EditingContextMenu;
58
import org.gvsig.vectorediting.swing.impl.console.DefaultEditingConsole;
59
import org.gvsig.vectorediting.swing.impl.contextmenu.DefaultEditingContextMenu;
60

    
61
public class DefaultEditingSwingManager extends AbstractManager implements
62
EditingSwingManager {
63

    
64
    Map<MapContext, EditingContext> editingContexts;
65

    
66
    public DefaultEditingSwingManager() {
67
        super(EditingProviderLocator.getProviderManager());
68
        this.editingContexts = new WeakHashMap<>();
69
    }
70

    
71
    @Override
72
    public EditingContext getEditingContext(MapControl mapControl) {
73
        MapContext mapContext = mapControl.getMapContext();
74

    
75
        if (editingContexts.containsKey(mapContext)) {
76
            EditingContext editingContext = editingContexts.get(mapContext);
77

    
78
            if (editingContext.getMapControl() != null) {
79
                return editingContext;
80
            } else {
81
                editingContexts.remove(mapContext);
82
            }
83

    
84
        }
85
        return null;
86
    }
87

    
88
    private JPanel getExplanationPanel(String question, String action,
89
        String description) {
90

    
91
        I18nManager i18nManager = ToolsLocator.getI18nManager();
92

    
93
        JPanel resp = new JPanel(new BorderLayout(10, 10));
94

    
95
        JLabel topLabel = new JLabel(question);
96

    
97
        JPanel mainPanel = new JPanel(new GridBagLayout());
98
        GridBagConstraints cc = new GridBagConstraints();
99

    
100
        cc.gridx = 0;
101
        cc.gridy = 0;
102
        cc.anchor = GridBagConstraints.WEST;
103

    
104
        cc.insets = new Insets(3, 6, 3, 6);
105

    
106
        Font boldf = mainPanel.getFont().deriveFont(Font.BOLD);
107

    
108
        JLabel lbl = new JLabel(action);
109
        lbl.setFont(boldf);
110
        mainPanel.add(lbl, cc);
111
        cc.gridx = 1;
112
        mainPanel.add(new JLabel(description), cc);
113

    
114
        cc.gridx = 0;
115
        cc.gridy = 1;
116
        lbl = new JLabel(i18nManager.getTranslation("discard"));
117
        lbl.setFont(boldf);
118
        mainPanel.add(lbl, cc);
119
        cc.gridx = 1;
120
        mainPanel
121
        .add(
122
            new JLabel(i18nManager
123
                .getTranslation("discard_and_loose_changes")), cc);
124

    
125
        cc.gridx = 0;
126
        cc.gridy = 2;
127
        lbl = new JLabel(i18nManager.getTranslation("continue"));
128
        lbl.setFont(boldf);
129
        mainPanel.add(lbl, cc);
130
        cc.gridx = 1;
131
        mainPanel.add(
132
            new JLabel(i18nManager
133
                .getTranslation("do_not_save_yet_stay_in_editing_mode")), cc);
134

    
135
        resp.add(mainPanel, BorderLayout.CENTER);
136
        resp.add(topLabel, BorderLayout.NORTH);
137
        return resp;
138
    }
139

    
140
    @Override
141
    public Service getService(DynObject parameters) throws ServiceException {
142
        return null;
143
    }
144

    
145
    @Override
146
    public void registerEditingContext(MapControl mapControl) {
147
        MapContext mapContext = mapControl.getMapContext();
148
        if (!editingContexts.containsKey(mapContext)) {
149
            EditingContext editingContext =
150
                new DefaultEditingContext(mapControl);
151
            editingContexts.put(mapContext, editingContext);
152
        } else {
153
            // MapContext registered. Update mapControl reference of editing
154
            // context
155
            EditingContext editingContext = editingContexts.get(mapContext);
156
            editingContext.setMapControl(mapControl);
157
        }
158
    }
159

    
160
    @Override
161
    public int showPanelExportOrDiscard(MapControl parent, String name) {
162

    
163
        I18nManager i18nManager = ToolsLocator.getI18nManager();
164

    
165
        Object[] options =
166
        { i18nManager.getTranslation("export"),
167
            "       " + i18nManager.getTranslation("discard") + "       ",
168
            i18nManager.getTranslation("continue") };
169

    
170
        String question = i18nManager.getTranslation("can_not_write_layer");
171
        String firstLabel = i18nManager.getTranslation("export");
172
        String firstDesc =
173
            i18nManager.getTranslation("export_to_another_format");
174

    
175
        JPanel explanation_panel =
176
            getExplanationPanel(question, firstLabel, firstDesc);
177

    
178
        int resp =
179
            JOptionPane.showOptionDialog(parent, explanation_panel,
180
                i18nManager.getTranslation("end_editing"),
181
                JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
182
                null, options, options[2]);
183

    
184
        if (resp == JOptionPane.NO_OPTION) {
185
            return EditingContext.DISCARD_CHANGES;
186
        } else if (resp == JOptionPane.YES_OPTION) {
187
            return EditingContext.EXPORT_LAYER;
188
        }
189
        return EditingContext.CANCEL;
190
    }
191

    
192
    @Override
193
    public int showPanelSaveOrDiscard(MapControl parent, String name) {
194

    
195
        I18nManager i18nManager = ToolsLocator.getI18nManager();
196

    
197
        Object[] options =
198
        { i18nManager.getTranslation("save"),
199
            "       " + i18nManager.getTranslation("discard") + "       ",
200
            i18nManager.getTranslation("continue") };
201

    
202
        String question = i18nManager.getTranslation("ask_save_layer");
203
        question = question + " '" + name + "'?";
204
        String firstLabel = i18nManager.getTranslation("save");
205
        String firstDesc = i18nManager.getTranslation("save_changes_performed");
206
        JPanel explanation_panel =
207
            getExplanationPanel(question, firstLabel, firstDesc);
208

    
209
        int resp =
210
            JOptionPane.showOptionDialog(parent, explanation_panel,
211
                i18nManager.getTranslation("end_editing"),
212
                JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
213
                null, options, options[2]);
214

    
215
        if (resp == JOptionPane.YES_OPTION) {
216
            return EditingContext.SAVE_CHANGES;
217
        } else if (resp == JOptionPane.NO_OPTION) {
218
            return EditingContext.DISCARD_CHANGES;
219
        }
220
        return EditingContext.CANCEL;
221
    }
222

    
223
    @Override
224
    public EditingContextMenu getContextualMenu(Component parent,
225
        AcceptValueListener listener, EditingServiceParameter parameter) {
226

    
227
        EditingContextMenu contextMenu =
228
            new DefaultEditingContextMenu(parent, listener, parameter);
229

    
230
        return contextMenu;
231
    }
232

    
233
    @Override
234
    public EditingContextMenu getContextualMenu(Component parent,
235
        AcceptValueListener listener, EditingServiceParameter parameter, EditingContext context) {
236

    
237
        EditingContextMenu contextMenu =
238
            new DefaultEditingContextMenu(parent, listener, parameter, context);
239

    
240
        return contextMenu;
241
    }
242

    
243
    @Override
244
    public EditingConsole getEditingConsole(ResponseListener listener) {
245
        return new DefaultEditingConsole(listener);
246
    }
247

    
248
    @Override
249
    public EditingConsole getEditingConsole(List<ResponseListener> listeners) {
250
        return new DefaultEditingConsole(listeners);
251
    }
252
}