gvsig-vectorediting / org.gvsig.vectorediting / trunk / org.gvsig.vectorediting / org.gvsig.vectorediting.app / org.gvsig.vectorediting.app.mainplugin / src / main / java / org / gvsig / vectorediting / app / mainplugin / EditingToolOptionsPanel.java @ 3016
History | View | Annotate | Download (30.2 KB)
1 |
/*
|
---|---|
2 |
* To change this license header, choose License Headers in Project Properties.
|
3 |
* To change this template file, choose Tools | Templates
|
4 |
* and open the template in the editor.
|
5 |
*/
|
6 |
package org.gvsig.vectorediting.app.mainplugin; |
7 |
|
8 |
import java.awt.BorderLayout; |
9 |
import java.awt.FlowLayout; |
10 |
import java.awt.event.ActionEvent; |
11 |
import java.util.ArrayList; |
12 |
import java.util.HashMap; |
13 |
import java.util.List; |
14 |
import java.util.Map; |
15 |
import java.util.Objects; |
16 |
import javax.json.JsonObject; |
17 |
import javax.json.JsonValue; |
18 |
import javax.swing.BoxLayout; |
19 |
import javax.swing.ImageIcon; |
20 |
import javax.swing.JButton; |
21 |
import javax.swing.JLabel; |
22 |
import javax.swing.JPanel; |
23 |
import javax.swing.JTabbedPane; |
24 |
import javax.swing.SwingConstants; |
25 |
import org.apache.commons.lang.StringUtils; |
26 |
import org.gvsig.featureform.swing.JFeatureForm; |
27 |
import org.gvsig.fmap.dal.DALLocator; |
28 |
import org.gvsig.fmap.dal.DataTypes; |
29 |
import org.gvsig.fmap.dal.exception.DataException; |
30 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
31 |
import org.gvsig.fmap.dal.feature.Feature; |
32 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
33 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
34 |
import org.gvsig.fmap.dal.feature.FeatureType; |
35 |
import org.gvsig.fmap.dal.feature.FeatureTypeDefinitionsManager; |
36 |
import org.gvsig.fmap.dal.swing.DALSwingLocator; |
37 |
import org.gvsig.fmap.dal.swing.DataSwingManager; |
38 |
import org.gvsig.json.Json; |
39 |
import org.gvsig.tools.ToolsLocator; |
40 |
import org.gvsig.tools.bookmarksandhistory.Bookmarks; |
41 |
import org.gvsig.tools.bookmarksandhistory.BookmarksAndHistoryManager; |
42 |
import org.gvsig.tools.dynform.DynFormDefinition; |
43 |
import org.gvsig.tools.dynform.DynFormFieldDefinition; |
44 |
import org.gvsig.tools.dynform.DynFormLocator; |
45 |
import org.gvsig.tools.dynform.DynFormManager; |
46 |
import org.gvsig.tools.dynform.JDynForm; |
47 |
import org.gvsig.tools.dynform.JDynFormField; |
48 |
import org.gvsig.tools.dynobject.DynClass; |
49 |
import org.gvsig.tools.dynobject.DynField_v2; |
50 |
import org.gvsig.tools.dynobject.DynObjectValueItem; |
51 |
import org.gvsig.tools.dynobject.DynStruct; |
52 |
import org.gvsig.tools.dynobject.DynStruct_v2; |
53 |
import org.gvsig.tools.dynobject.Tags; |
54 |
import org.gvsig.tools.i18n.I18nManager; |
55 |
import org.gvsig.tools.observer.Notification; |
56 |
import org.gvsig.tools.observer.Observable; |
57 |
import org.gvsig.tools.observer.Observer; |
58 |
import org.gvsig.tools.persistence.PersistenceManager; |
59 |
import org.gvsig.tools.persistence.Persistent; |
60 |
import org.gvsig.tools.persistence.PersistentState; |
61 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
62 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
63 |
import org.gvsig.tools.swing.api.ToolsSwingUtils; |
64 |
import org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue; |
65 |
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_GETVALUE; |
66 |
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_SETVALUE; |
67 |
import org.gvsig.tools.swing.api.bookmarkshistory.BookmarksController; |
68 |
import org.gvsig.vectorediting.app.mainplugin.dynformfield.point.JDynFormFieldPointFactory; |
69 |
import org.gvsig.vectorediting.lib.api.EditingService; |
70 |
import org.gvsig.vectorediting.lib.api.EditingServiceParameter; |
71 |
import org.gvsig.vectorediting.lib.api.EditingServiceParameterOptions; |
72 |
import org.gvsig.vectorediting.lib.api.EditingServiceParameterOptions.ParameterOption; |
73 |
import org.gvsig.vectorediting.swing.api.EditingContext; |
74 |
import org.slf4j.Logger; |
75 |
import org.slf4j.LoggerFactory; |
76 |
|
77 |
/**
|
78 |
*
|
79 |
* @author gvSIG Team
|
80 |
*/
|
81 |
@SuppressWarnings("UseSpecificCatch") |
82 |
class EditingToolOptionsPanel extends JPanel { |
83 |
private static final Logger LOGGER = LoggerFactory.getLogger(EditingToolOptionsPanel.class); |
84 |
|
85 |
private static final String BOOKMARKSANDHISTORY_NAME = "EditingToolOptionsPanel"; |
86 |
|
87 |
private final EditingContext editingContext; |
88 |
private EditingService service;
|
89 |
private JDynForm form;
|
90 |
private DynStruct_v2 definition;
|
91 |
private final Observer contextObserver = (Observable observable, Object notification) -> { |
92 |
doContextChanged((Notification) notification);
|
93 |
}; |
94 |
private final Observer serviceObserver = (Observable observable, Object notification) -> { |
95 |
doServiceChanged((Notification) notification);
|
96 |
}; |
97 |
private JFeatureForm featureform;
|
98 |
private JButton applyDefaultValuesButton; |
99 |
private ImageIcon confirmIcon; |
100 |
|
101 |
private static final Map<String, JsonObject> defaultValues = new HashMap<>(); |
102 |
private JTabbedPane tab; |
103 |
private static int currentTab = 0; |
104 |
private JButton acceptOptionsButton; |
105 |
|
106 |
@SuppressWarnings(value = {"OverridableMethodCallInConstructor", "LeakingThisInConstructor"}) |
107 |
public EditingToolOptionsPanel(EditingContext editingContext) {
|
108 |
this.setLayout(new BorderLayout()); |
109 |
this.editingContext = editingContext;
|
110 |
this.editingContext.addObserver(this.contextObserver); |
111 |
EditingService activeService = editingContext.getActiveService(); |
112 |
this.set(activeService);
|
113 |
this.put(activeService);
|
114 |
this.setPreferredSize(ToolsSwingUtils.ensureRowsCols(this, 10, 30)); |
115 |
try {
|
116 |
this.confirmIcon = ToolsSwingLocator.getIconThemeManager()
|
117 |
.getCurrent().get("vector-editing-tooloptions-confirm");
|
118 |
} catch(Exception ex) { |
119 |
|
120 |
} |
121 |
} |
122 |
|
123 |
private Bookmarks getBookmarks(FeatureStore store) {
|
124 |
boolean useBookmarksByTable = false; // TODO: poner esto en preferencias de edicion. |
125 |
BookmarksAndHistoryManager manager = ToolsLocator.getBookmarksAndHistoryManager(); |
126 |
|
127 |
if( useBookmarksByTable ) {
|
128 |
return manager.getBookmarksGroup(BOOKMARKSANDHISTORY_NAME+"_"+store.getName()); |
129 |
} else {
|
130 |
return manager.getBookmarksGroup(BOOKMARKSANDHISTORY_NAME);
|
131 |
} |
132 |
|
133 |
} |
134 |
|
135 |
private void set(EditingService service) { |
136 |
if(this.service == service && service != null) { |
137 |
return;
|
138 |
} |
139 |
|
140 |
if (this.service != null) { |
141 |
this.service.deleteObserver(this.serviceObserver); |
142 |
} |
143 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
144 |
DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager(); |
145 |
if(this.tab != null){ |
146 |
currentTab = this.tab.getSelectedIndex();
|
147 |
} |
148 |
if (service == null) { |
149 |
this.removeAll();
|
150 |
this.tab = null; |
151 |
JLabel label = new JLabel( |
152 |
"<html><center>" +
|
153 |
i18n.getTranslation("_Activate_an_editing_tool_to_see_your_options_here")+
|
154 |
"</center></html>"
|
155 |
); |
156 |
label.setHorizontalAlignment(SwingConstants.CENTER);
|
157 |
this.add(label, BorderLayout.CENTER); |
158 |
} else if( service != this.service ) { |
159 |
this.removeAll();
|
160 |
this.tab = null; |
161 |
JPanel header = new JPanel(); |
162 |
header.setLayout(new BoxLayout(header,BoxLayout.Y_AXIS)); |
163 |
FeatureStore store = service.getStore(); |
164 |
header.add( |
165 |
new JLabel( |
166 |
i18n.getTranslation("_Table")
|
167 |
+ ": "
|
168 |
+ (store == null ? "(unknown)" : store.getName()) |
169 |
) |
170 |
); |
171 |
header.add( |
172 |
new JLabel( |
173 |
i18n.getTranslation("_Tool")
|
174 |
+ ": "
|
175 |
+ i18n.getTranslation(service.getDescription()) |
176 |
) |
177 |
); |
178 |
this.add(header, BorderLayout.NORTH); |
179 |
|
180 |
this.tab = new JTabbedPane(); |
181 |
tab.setTabPlacement(JTabbedPane.BOTTOM);
|
182 |
tab.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
|
183 |
|
184 |
this.add(tab, BorderLayout.CENTER); |
185 |
|
186 |
definition = this.getToolOptionsDefinition(service);
|
187 |
if (definition != null) { |
188 |
DynFormManager dynFormManager = DynFormLocator.getDynFormManager(); |
189 |
form = dynFormManager.createJDynForm(definition); |
190 |
|
191 |
JPanel optionsPanel = new JPanel(); |
192 |
optionsPanel.setLayout(new BorderLayout()); |
193 |
optionsPanel.add(form.asJComponent(), BorderLayout.CENTER);
|
194 |
JButton cancelButton = new JButton(i18n.getTranslation("_Cancel")); |
195 |
cancelButton.addActionListener((e) -> { |
196 |
editingContext.cancelActiveService(); |
197 |
}); |
198 |
this.acceptOptionsButton = new JButton(i18n.getTranslation("_Accept")); |
199 |
this.acceptOptionsButton.addActionListener((e) -> {
|
200 |
applyOptions(); |
201 |
}); |
202 |
JPanel buttonsPanel = new JPanel(); |
203 |
buttonsPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 2, 0 )); |
204 |
buttonsPanel.add(this.acceptOptionsButton);
|
205 |
buttonsPanel.add(cancelButton); |
206 |
optionsPanel.add(buttonsPanel, BorderLayout.PAGE_END);
|
207 |
|
208 |
tab.add(i18n.getTranslation("_Options"), optionsPanel);
|
209 |
|
210 |
this.form.addListener(new JDynForm.JDynFormListener() { |
211 |
@Override
|
212 |
public void message(String message) { |
213 |
} |
214 |
|
215 |
@Override
|
216 |
public void fieldChanged(JDynFormField field) { |
217 |
if (acceptOptionsButton != null) { |
218 |
acceptOptionsButton.setIcon(confirmIcon); |
219 |
} |
220 |
} |
221 |
}); |
222 |
} |
223 |
try {
|
224 |
JsonObject xx = defaultValues.get(store.getFullName()); |
225 |
EditableFeature f = service.getDefaultFeatureValues(); |
226 |
if(xx != null){ |
227 |
f.copyFrom(xx); |
228 |
} |
229 |
DynFormDefinition formdef = this.createFormDefinition(service);
|
230 |
this.featureform = dataSwingManager.createJFeatureForm(formdef);
|
231 |
this.featureform.getDynForm().setContext(dataSwingManager.createFeaturesFormContext(store));
|
232 |
this.featureform.setFeature(f);
|
233 |
JPanel valuesPanel = new JPanel(); |
234 |
valuesPanel.setLayout(new BorderLayout()); |
235 |
valuesPanel.add(featureform.asJComponent(), BorderLayout.CENTER);
|
236 |
applyDefaultValuesButton = new JButton(i18n.getTranslation("_Apply")); |
237 |
applyDefaultValuesButton.addActionListener((e) -> { applyDefaultValues(); }); |
238 |
JButton resetDefaultValuesButton = new JButton(i18n.getTranslation("_Reset")); |
239 |
resetDefaultValuesButton.addActionListener((e) -> { |
240 |
resetDefaultValues(); |
241 |
}); |
242 |
|
243 |
Bookmarks bookmarks = this.getBookmarks(store);
|
244 |
JButton bookmarksButton = new JButton("..."); |
245 |
BookmarksController bookmarksController = ToolsSwingLocator.getToolsSwingManager().createBookmarksController( |
246 |
bookmarks, |
247 |
bookmarksButton |
248 |
); |
249 |
bookmarksController.addActionListener((ActionEvent e) -> {
|
250 |
EditableFeature feature; |
251 |
ActionEventWithCurrentValue<EditingToolOptionsDefaultValueBookmark> b = (ActionEventWithCurrentValue<EditingToolOptionsDefaultValueBookmark>) e; |
252 |
switch (b.getID()) {
|
253 |
case ID_GETVALUE:
|
254 |
EditingToolOptionsDefaultValueBookmark bookmark = new EditingToolOptionsDefaultValueBookmark();
|
255 |
bookmark.setDefaultValues(service.getDefaultFeatureValues()); |
256 |
b.setCurrentValue(bookmark); |
257 |
break;
|
258 |
case ID_SETVALUE:
|
259 |
if (b.getCurrentValue() == null) { |
260 |
return;
|
261 |
} |
262 |
JsonObject bookmarkFeature = b.getCurrentValue().getDefaultValues(); |
263 |
feature = service.getDefaultFeatureValues(); |
264 |
feature.copyFrom(bookmarkFeature); |
265 |
featureform.setFeature(feature); |
266 |
break;
|
267 |
} |
268 |
}); |
269 |
|
270 |
JPanel applyPanel = new JPanel(); |
271 |
applyPanel.setLayout(new FlowLayout(FlowLayout.RIGHT,4,0)); |
272 |
applyPanel.add(applyDefaultValuesButton); |
273 |
applyPanel.add(resetDefaultValuesButton); |
274 |
applyPanel.add(bookmarksButton); |
275 |
valuesPanel.add(applyPanel, BorderLayout.PAGE_END);
|
276 |
|
277 |
tab.add(i18n.getTranslation("_Default_values"), valuesPanel );
|
278 |
|
279 |
featureform.getDynForm().addListener(new JDynForm.JDynFormListener() {
|
280 |
@Override
|
281 |
public void message(String message) { |
282 |
} |
283 |
|
284 |
@Override
|
285 |
public void fieldChanged(JDynFormField field) { |
286 |
if(applyDefaultValuesButton != null){ |
287 |
applyDefaultValuesButton.setIcon(confirmIcon); |
288 |
} |
289 |
} |
290 |
}); |
291 |
|
292 |
} catch (Exception ex) { |
293 |
LOGGER.debug("Can't create panel",ex);
|
294 |
} |
295 |
ToolsSwingUtils.ensureRowsCols(this, 8, 43, 25, 60); |
296 |
try {
|
297 |
tab.setSelectedIndex(currentTab); |
298 |
} catch (Exception ex) { |
299 |
LOGGER.debug("Can't activate tab",ex);
|
300 |
} |
301 |
service.addObserver(this.serviceObserver);
|
302 |
} |
303 |
this.service = service;
|
304 |
} |
305 |
|
306 |
private DynFormDefinition createFormDefinition(EditingService service) throws DataException { |
307 |
FeatureTypeDefinitionsManager featureTypeDefinitionsManager = DALLocator.getFeatureTypeDefinitionsManager(); |
308 |
|
309 |
FeatureStore store = service.getStore(); |
310 |
FeatureType featureType = store.getDefaultFeatureType(); |
311 |
DynClass dynClass = featureTypeDefinitionsManager.get(store,featureType); |
312 |
DynFormDefinition formdef = DynFormLocator.getDynFormManager().createDefinition(dynClass); |
313 |
for (FeatureAttributeDescriptor attr : featureType) {
|
314 |
if( attr.isPrimaryKey() || attr.isReadOnly() ) {
|
315 |
formdef.remove(attr.getName()); |
316 |
} |
317 |
} |
318 |
for (DynFormFieldDefinition fielddef : formdef) {
|
319 |
fielddef.setMandatory(false);
|
320 |
} |
321 |
return formdef;
|
322 |
} |
323 |
|
324 |
private DynStruct_v2 getToolOptionsDefinition(EditingService service) {
|
325 |
if (service == null) { |
326 |
return null; |
327 |
} |
328 |
DynStruct_v2 def = (DynStruct_v2) ToolsLocator.getDynObjectManager().createDynClass( |
329 |
service.getName(), null
|
330 |
); |
331 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
332 |
DynField_v2 field; |
333 |
Tags tags; |
334 |
List<ServiceParameterField> params = this.getServiceParameters(service); |
335 |
for (ServiceParameterField param : params) {
|
336 |
switch(param.getType()) {
|
337 |
case POSITION:
|
338 |
field = (DynField_v2) def.addDynField(param.getFieldName(), DataTypes.GEOMETRY); |
339 |
field.setLabel(i18n.getTranslation(param.getName())); |
340 |
field.setDescription(i18n.getTranslation(param.getDescription())); |
341 |
field.setDefaultFieldValue(param.getDefaultValue()); |
342 |
tags = field.getTags(); |
343 |
tags.set("EditingContext", this.editingContext); |
344 |
tags.set("ParamType", param.getType());
|
345 |
field.setSubtype(JDynFormFieldPointFactory.NAME); |
346 |
field.setMandatory(false);
|
347 |
break;
|
348 |
case LIST_POSITIONS:
|
349 |
field = (DynField_v2) def.addDynField(param.getFieldName(), DataTypes.GEOMETRY); |
350 |
field.setLabel(i18n.getTranslation(param.getName())); |
351 |
field.setDescription(i18n.getTranslation(param.getDescription())); |
352 |
field.setDefaultFieldValue(param.getDefaultValue()); |
353 |
tags = field.getTags(); |
354 |
tags.set("EditingContext", this.editingContext); |
355 |
tags.set("ParamType", param.getType());
|
356 |
field.setSubtype(JDynFormFieldPointFactory.NAME); |
357 |
field.setMandatory(false);
|
358 |
break;
|
359 |
case VALUE:
|
360 |
field = (DynField_v2) def.addDynFieldDouble(param.getFieldName()); |
361 |
// field = (DynField_v2) def.addDynField(param.getFieldName(), param.getDataType());
|
362 |
if( param.isAditional() ) {
|
363 |
field.setLabel(i18n.getTranslation("_Value"));
|
364 |
} else {
|
365 |
field.setLabel(i18n.getTranslation(param.getName())); |
366 |
} |
367 |
tags = field.getTags(); |
368 |
tags.set("ParamType", param.getType());
|
369 |
field.setDescription(i18n.getTranslation(param.getDescription())); |
370 |
field.setDefaultFieldValue(param.getDefaultValue()); |
371 |
field.setMandatory(false);
|
372 |
break;
|
373 |
|
374 |
case DISTANCE:
|
375 |
field = (DynField_v2) def.addDynFieldDouble(param.getFieldName()); |
376 |
// field = (DynField_v2) def.addDynField(param.getFieldName(), param.getDataType());
|
377 |
if( param.isAditional() ) {
|
378 |
field.setLabel(i18n.getTranslation("_Distance"));
|
379 |
} else {
|
380 |
field.setLabel(i18n.getTranslation(param.getName())); |
381 |
} |
382 |
tags = field.getTags(); |
383 |
tags.set("ParamType", param.getType());
|
384 |
field.setDescription(i18n.getTranslation(param.getDescription())); |
385 |
field.setDefaultFieldValue(param.getDefaultValue()); |
386 |
field.setMandatory(false);
|
387 |
break;
|
388 |
|
389 |
case OPTION:
|
390 |
field = (DynField_v2) def.addDynField(param.getFieldName(), param.getDataType()); |
391 |
if( param.isAditional() ) {
|
392 |
field.setLabel(i18n.getTranslation("_Options"));
|
393 |
} else {
|
394 |
field.setLabel(i18n.getTranslation(param.getName())); |
395 |
} |
396 |
field.setDescription(i18n.getTranslation(param.getDescription())); |
397 |
List<DynObjectValueItem> availableValues = new ArrayList<>(); |
398 |
availableValues.add(new DynObjectValueItem(null, " ")); |
399 |
if(param.getOptions() == null){ |
400 |
for (ParameterOption option : param.getOptions2()) {
|
401 |
Object value = option.getValue();
|
402 |
String label = i18n.getTranslation(option.getLabel());
|
403 |
availableValues.add(new DynObjectValueItem(value, label));
|
404 |
} |
405 |
} else {
|
406 |
for (Map.Entry<String, String> option : param.getOptions().entrySet()) { |
407 |
String value = option.getKey();
|
408 |
String label = i18n.getTranslation(option.getValue());
|
409 |
availableValues.add(new DynObjectValueItem(value, label));
|
410 |
} |
411 |
} |
412 |
tags = field.getTags(); |
413 |
tags.set("ParamType", param.getType());
|
414 |
field.setAvailableValues(availableValues); |
415 |
field.setDefaultFieldValue(param.getDefaultValue()); |
416 |
field.setMandatory(false);
|
417 |
break;
|
418 |
case GEOMETRY:
|
419 |
case SELECTION:
|
420 |
case CLIPBOARD:
|
421 |
break;
|
422 |
} |
423 |
} |
424 |
return def;
|
425 |
} |
426 |
|
427 |
private void clear() { |
428 |
this.form.clear();
|
429 |
} |
430 |
|
431 |
private void put(EditingService service) { |
432 |
if(this.service != service || service == null) { |
433 |
return;
|
434 |
} |
435 |
|
436 |
List<ServiceParameterField> params = this.getServiceParameters(service); |
437 |
for (ServiceParameterField param : params) {
|
438 |
if(param.getIgnoreCurrentValue()){
|
439 |
this.form.setValue(
|
440 |
param.getFieldName(), |
441 |
null
|
442 |
); |
443 |
|
444 |
} else {
|
445 |
this.form.setValue(
|
446 |
param.getFieldName(), |
447 |
service.getValue(param.getParameters(),param.getType()) |
448 |
); |
449 |
} |
450 |
} |
451 |
} |
452 |
|
453 |
private boolean ignore_events = false; |
454 |
private void doServiceChanged(Notification notification) { |
455 |
if( ignore_events ) {
|
456 |
return;
|
457 |
} |
458 |
try {
|
459 |
ignore_events = true;
|
460 |
switch (notification.getType()) {
|
461 |
case EditingService.PARAMETER_CHANGED2_NOTIFICATION:
|
462 |
case EditingService.PARAMETER_CHANGED1_NOTIFICATION:
|
463 |
this.put(this.editingContext.getActiveService()); |
464 |
break;
|
465 |
case EditingService.ACTIVATE_NOTIFICATION:
|
466 |
this.set(this.editingContext.getActiveService()); |
467 |
this.put(this.editingContext.getActiveService()); |
468 |
break;
|
469 |
case EditingService.START_NOTIFICATION:
|
470 |
// this.clear();
|
471 |
break;
|
472 |
} |
473 |
} finally {
|
474 |
ignore_events = false;
|
475 |
} |
476 |
} |
477 |
|
478 |
private void doContextChanged(Notification notification) { |
479 |
if (ignore_events) {
|
480 |
return;
|
481 |
} |
482 |
try {
|
483 |
ignore_events = true;
|
484 |
switch (notification.getType()) {
|
485 |
case EditingContext.CHANGE_SELECTED_TOOL_NOTIFICATION:
|
486 |
EditingService activeService = this.editingContext.getActiveService();
|
487 |
this.set(activeService);
|
488 |
if (activeService != null) { |
489 |
this.put(activeService);
|
490 |
} |
491 |
break;
|
492 |
|
493 |
} |
494 |
} finally {
|
495 |
ignore_events = false;
|
496 |
} |
497 |
} |
498 |
|
499 |
public void applyDefaultValues() { |
500 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
501 |
EditableFeature feature = this.service.getDefaultFeatureValues();
|
502 |
this.featureform.fetch(feature);
|
503 |
applyDefaultValuesButton.setIcon(null);
|
504 |
defaultValues.put(this.service.getStore().getFullName(), feature.toJson());
|
505 |
} |
506 |
|
507 |
public void resetDefaultValues() { |
508 |
try {
|
509 |
FeatureStore store = this.service.getStore();
|
510 |
EditableFeature resetValues = store.createNewFeature(); |
511 |
EditableFeature feature = this.service.getDefaultFeatureValues();
|
512 |
feature.copyFrom(resetValues); |
513 |
|
514 |
this.featureform.setFeature(feature);
|
515 |
applyDefaultValuesButton.setIcon(null);
|
516 |
defaultValues.put(this.service.getStore().getFullName(), feature.toJson());
|
517 |
} catch (Exception ex) { |
518 |
LOGGER.warn("Can't reset default values",ex);
|
519 |
} |
520 |
} |
521 |
|
522 |
public void applyOptions() { |
523 |
boolean ignore_events_save = this.ignore_events; |
524 |
try {
|
525 |
this.ignore_events = true; |
526 |
List<ServiceParameterField> params = this.getServiceParameters(service); |
527 |
for (ServiceParameterField param : params) {
|
528 |
Object value = this.form.getValue(param.getFieldName()); |
529 |
try {
|
530 |
editingContext.setValue(param.getParameters(), value); |
531 |
} catch (Throwable th) { |
532 |
LOGGER.debug("Can't set service parameter '" + param.getName() + "' to '" + Objects.toString(value) + "'.", th); |
533 |
} |
534 |
} |
535 |
try {
|
536 |
editingContext.nextParameter(); |
537 |
} catch (Exception ex) { |
538 |
LOGGER.debug("Can't apply service parameters.", ex);
|
539 |
} |
540 |
this.acceptOptionsButton.setIcon(null); |
541 |
} finally {
|
542 |
this.ignore_events = ignore_events_save;
|
543 |
} |
544 |
this.put(service);
|
545 |
} |
546 |
|
547 |
private static class ServiceParameterField { |
548 |
private final EditingServiceParameter param; |
549 |
private final EditingServiceParameter.TYPE type; |
550 |
private final String fieldName; |
551 |
private final boolean aditional; |
552 |
private boolean ignoreCurrentValue; |
553 |
|
554 |
public ServiceParameterField(
|
555 |
EditingServiceParameter param, |
556 |
EditingServiceParameter.TYPE type, |
557 |
String fieldName,
|
558 |
boolean aditional
|
559 |
) { |
560 |
this.aditional = aditional;
|
561 |
this.fieldName = fieldName;
|
562 |
this.param = param;
|
563 |
this.type = type;
|
564 |
this.ignoreCurrentValue = false; |
565 |
} |
566 |
|
567 |
private EditingServiceParameter.TYPE getType() {
|
568 |
return this.type; |
569 |
} |
570 |
|
571 |
private String getName() { |
572 |
return this.param.getName(); |
573 |
} |
574 |
|
575 |
private int getDataType() { |
576 |
return this.param.getDataType(); |
577 |
} |
578 |
|
579 |
private String getDescription() { |
580 |
return this.param.getDescription(); |
581 |
} |
582 |
|
583 |
private String getFieldName() { |
584 |
return this.fieldName; |
585 |
} |
586 |
|
587 |
private Object getDefaultValue() { |
588 |
return this.param.getDefaultValue(); |
589 |
} |
590 |
|
591 |
private Map<String, String> getOptions() { |
592 |
return this.param.getOptions(); |
593 |
} |
594 |
|
595 |
private EditingServiceParameterOptions getOptions2() {
|
596 |
return this.param.getOptions2(); |
597 |
} |
598 |
|
599 |
private boolean isAditional() { |
600 |
return this.aditional; |
601 |
} |
602 |
|
603 |
private EditingServiceParameter getParameters() {
|
604 |
return this.param; |
605 |
} |
606 |
|
607 |
public void setIgnoreCurrentValue(boolean ignoreCurrentValue) { |
608 |
this.ignoreCurrentValue = ignoreCurrentValue;
|
609 |
} |
610 |
|
611 |
public boolean getIgnoreCurrentValue() { |
612 |
return this.ignoreCurrentValue; |
613 |
} |
614 |
} |
615 |
|
616 |
private List<ServiceParameterField> getServiceParameters(EditingService service) { |
617 |
List<ServiceParameterField>params = new ArrayList<>(); |
618 |
EditingServiceParameter.TYPE paramTypesOrdered[] = new EditingServiceParameter.TYPE[] { |
619 |
EditingServiceParameter.TYPE.POSITION, |
620 |
EditingServiceParameter.TYPE.LIST_POSITIONS, |
621 |
EditingServiceParameter.TYPE.VALUE, |
622 |
EditingServiceParameter.TYPE.DISTANCE, |
623 |
EditingServiceParameter.TYPE.OPTION, |
624 |
EditingServiceParameter.TYPE.GEOMETRY, |
625 |
EditingServiceParameter.TYPE.SELECTION, |
626 |
EditingServiceParameter.TYPE.CLIPBOARD |
627 |
}; |
628 |
int n = 0; |
629 |
for (EditingServiceParameter param : service.getParameters()) {
|
630 |
int count = 0; |
631 |
for (int ntype = 0; ntype < paramTypesOrdered.length; ntype++) { |
632 |
EditingServiceParameter.TYPE type = paramTypesOrdered[ntype]; |
633 |
if( !param.getTypes().contains(type) ) {
|
634 |
continue;
|
635 |
} |
636 |
switch(type) {
|
637 |
case POSITION:
|
638 |
case LIST_POSITIONS:
|
639 |
case DISTANCE:
|
640 |
case GEOMETRY:
|
641 |
case SELECTION:
|
642 |
case CLIPBOARD:
|
643 |
break;
|
644 |
case VALUE:
|
645 |
case OPTION:
|
646 |
String name = String.format("param%02d%02d", n, ntype); |
647 |
ServiceParameterField serviceField = new ServiceParameterField(param, type, name, count>0); |
648 |
if(param.getTypes().contains(EditingServiceParameter.TYPE.LIST_POSITIONS)){
|
649 |
//Ver la herramienta Polyline
|
650 |
serviceField.setIgnoreCurrentValue(true);
|
651 |
} |
652 |
params.add(serviceField); |
653 |
count++; |
654 |
break;
|
655 |
|
656 |
} |
657 |
} |
658 |
n++; |
659 |
} |
660 |
return params;
|
661 |
} |
662 |
|
663 |
public static class EditingToolOptionsDefaultValueBookmark implements Persistent { |
664 |
|
665 |
private JsonObject values;
|
666 |
private String label; |
667 |
|
668 |
public EditingToolOptionsDefaultValueBookmark() {
|
669 |
|
670 |
} |
671 |
|
672 |
public JsonObject getDefaultValues() {
|
673 |
return this.values; |
674 |
} |
675 |
|
676 |
public void setDefaultValues(Feature feature) { |
677 |
this.values = feature.toJson();
|
678 |
} |
679 |
|
680 |
@Override
|
681 |
public String toString() { |
682 |
try {
|
683 |
StringBuilder buffer = new StringBuilder(); |
684 |
boolean needcolon = false; |
685 |
for (JsonValue value : this.values.values()) { |
686 |
if( value!=null ) { |
687 |
String s = Json.toString(value);
|
688 |
if( StringUtils.isNotBlank(s) ) {
|
689 |
if( needcolon ) {
|
690 |
buffer.append(",");
|
691 |
} else {
|
692 |
needcolon = true;
|
693 |
} |
694 |
buffer.append(s); |
695 |
} |
696 |
} |
697 |
} |
698 |
return buffer.toString();
|
699 |
} catch(Exception ex) { |
700 |
return "default values"; |
701 |
} |
702 |
} |
703 |
|
704 |
@Override
|
705 |
public void saveToState(PersistentState state) throws PersistenceException { |
706 |
state.set("values", Objects.toString(this.values,null)); |
707 |
} |
708 |
|
709 |
@Override
|
710 |
public void loadFromState(PersistentState state) throws PersistenceException { |
711 |
String json_s = state.getString("values"); |
712 |
if( StringUtils.isBlank(json_s) ) {
|
713 |
this.values = null; |
714 |
} else {
|
715 |
try {
|
716 |
this.values = Json.createObject(json_s);
|
717 |
} catch(Exception ex) { |
718 |
LOGGER.warn("Can't restore default value from persistence", ex);
|
719 |
} |
720 |
} |
721 |
} |
722 |
} |
723 |
|
724 |
public static void registerPersistence() { |
725 |
PersistenceManager manager = ToolsLocator.getPersistenceManager(); |
726 |
if (manager.getDefinition("EditingToolOptionsDefaultValueBookmark") == null) { |
727 |
DynStruct definition = manager.addDefinition(EditingToolOptionsDefaultValueBookmark.class, |
728 |
"EditingToolOptionsDefaultValueBookmark", "EditingToolOptionsDefaultValueBookmark persistence definition", null, null); |
729 |
definition.addDynFieldString("values");
|
730 |
} |
731 |
} |
732 |
|
733 |
} |