Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.swing / org.gvsig.fmap.dal.swing.impl / src / main / java / org / gvsig / featureform / swing / impl / DefaultJFeaturesForm.java @ 44338

History | View | Annotate | Download (27.7 KB)

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

    
25
import java.awt.BorderLayout;
26
import java.awt.Dimension;
27
import java.awt.event.ActionEvent;
28
import java.awt.event.ComponentAdapter;
29
import java.awt.event.ComponentEvent;
30
import java.util.ArrayList;
31
import java.util.Collection;
32
import java.util.List;
33
import javax.swing.AbstractAction;
34
import javax.swing.Action;
35
import static javax.swing.Action.ACTION_COMMAND_KEY;
36
import static javax.swing.Action.NAME;
37
import static javax.swing.Action.SHORT_DESCRIPTION;
38
import static javax.swing.Action.SMALL_ICON;
39

    
40
import javax.swing.JComponent;
41
import javax.swing.JOptionPane;
42
import javax.swing.JPanel;
43
import org.apache.commons.lang3.StringUtils;
44
import org.gvsig.expressionevaluator.Expression;
45
import org.gvsig.expressionevaluator.ExpressionUtils;
46
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
47

    
48
import org.slf4j.Logger;
49
import org.slf4j.LoggerFactory;
50

    
51
import org.gvsig.featureform.swing.JFeaturesForm;
52
import org.gvsig.fmap.dal.DALLocator;
53
import org.gvsig.fmap.dal.DataStore;
54
import org.gvsig.fmap.dal.StoresRepository;
55
import org.gvsig.fmap.dal.exception.DataException;
56
import org.gvsig.fmap.dal.expressionevaluator.ExpressionEvaluator;
57
import org.gvsig.fmap.dal.feature.Feature;
58
import org.gvsig.fmap.dal.feature.FacadeOfAFeature;
59
import org.gvsig.fmap.dal.feature.FeatureQuery;
60
import org.gvsig.fmap.dal.feature.FeatureStore;
61
import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
62
import org.gvsig.fmap.dal.feature.FeatureType;
63
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
64
import org.gvsig.fmap.dal.swing.AbstractDALActionFactory.AbstractDALActionContext;
65
import org.gvsig.fmap.dal.swing.DALActionFactory;
66
import org.gvsig.fmap.dal.swing.DALSwingLocator;
67
import org.gvsig.fmap.dal.swing.DataSwingManager;
68
import org.gvsig.fmap.dal.swing.impl.DefaultDataSwingManager;
69
import org.gvsig.fmap.dal.swing.impl.actions.ShowFormAction.ShowFormActionFactory;
70
import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
71
import org.gvsig.tools.ToolsLocator;
72
import org.gvsig.tools.dispose.DisposeUtils;
73
import org.gvsig.tools.dynform.AbortActionException;
74
import org.gvsig.tools.dynform.DynFormDefinition;
75
import org.gvsig.tools.dynform.DynFormLocator;
76
import org.gvsig.tools.dynform.DynFormManager;
77
import org.gvsig.tools.dynform.JDynForm;
78
import org.gvsig.tools.dynform.JDynFormSet;
79
import org.gvsig.tools.dynform.JDynFormSet.JDynFormSetListener;
80
import org.gvsig.tools.dynobject.DynClass;
81
import org.gvsig.tools.dynobject.DynObject;
82
import org.gvsig.tools.evaluator.Evaluator;
83
import org.gvsig.tools.exception.BaseException;
84
import org.gvsig.tools.i18n.I18nManager;
85
import org.gvsig.tools.observer.Observable;
86
import org.gvsig.tools.observer.Observer;
87
import org.gvsig.tools.service.ServiceException;
88
import org.gvsig.tools.swing.api.ToolsSwingLocator;
89
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
90
import org.gvsig.tools.swing.api.windowmanager.Dialog;
91
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
92
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
93
import org.gvsig.tools.swing.api.windowmanager.WindowManager.MODE;
94
import org.gvsig.tools.swing.icontheme.IconTheme;
95
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
96

    
97
/**
98
 * @author fdiaz
99
 *
100
 */
101
@SuppressWarnings("UseSpecificCatch")
102
public class DefaultJFeaturesForm implements JFeaturesForm {
103

    
104
    public class DefaultFeaturesFormContext implements FeaturesFormContext {
105

    
106
        private DefaultFeaturesFormContext() {
107
            
108
        }
109

    
110
        @Override
111
        public FeatureStore getFeatureStore() {
112
            return store;
113
        }
114
        
115
        @Override
116
        public FeatureType getFeatureType() {
117
            try {
118
                return store.getDefaultFeatureType();
119
            } catch (DataException ex) {
120
                return null;
121
            }
122
        }
123
        
124
        @Override
125
        public ResourcesStorage getResourcesStorage() {
126
            if( store == null ) {
127
                return null;
128
            }
129
            return store.getResourcesStorage();
130
        }
131

    
132
        @Override
133
        public StoresRepository getStoresRepository() {
134
            if( store == null ) {
135
                return null;
136
            }
137
            return store.getStoresRepository();
138
        }
139
        
140
    }
141
    
142
    private class FormActionContext extends AbstractDALActionContext {
143

    
144
        public FormActionContext() {
145
            super(ACTION_CONTEXT_NAME);
146
        }
147
        
148
        @Override
149
        public DataStore getStore() {
150
            return store;
151
        }
152

    
153
        @Override
154
        public Expression getFilter() {
155
            FeatureQuery theCurrentQuery = currentQuery;
156
            if( theCurrentQuery!=null ) {
157
                Evaluator filter = theCurrentQuery.getFilter();
158
                if( filter instanceof ExpressionEvaluator ) {
159
                    Expression expression = ((ExpressionEvaluator)filter).getExpression();
160
                    return expression;
161
                }
162
            }
163
            return null;
164
        }
165

    
166
        @Override
167
        public int getSelectedsCount() {
168
            return 0;
169
        }
170

    
171
        @Override
172
        public Expression getFilterForSelecteds() {
173
            return null;
174
        }
175

    
176
        @Override
177
        public JComponent getActionButton(String actionName) {
178
            if( formset == null ) {
179
                return null;
180
            }
181
            return formset.getActionButton(actionName);
182
        }
183
        
184
    }
185
    
186
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultJFeaturesForm.class);
187

    
188
    private static final int PAGE_SIZE = 500;
189
    private JPanel panel;
190
    private JDynFormSet formset;
191
    private FeatureStore store;
192
    private FeaturePagingHelper ph;
193
    private DynFormDefinition definition = null;
194
    private FeatureQuery currentQuery;
195
    private List<Action> otherActions;
196

    
197
    public DefaultJFeaturesForm() {
198
        this.otherActions = new ArrayList<>();
199
        this.panel = new JPanel(new BorderLayout());
200
        this.panel.addComponentListener(new ComponentAdapter() {
201
            @Override
202
            public void componentHidden(ComponentEvent e) {
203
                doDispose();
204
            }
205
        });
206
    }
207

    
208
    @Override
209
    public void setPreferredSize(Dimension dimension) {
210
//        panel.setPreferredSize(dimension);
211
    }
212

    
213
    private void updateForm() {
214
        if (this.formset == null) {
215
            this.panel.add(this.getFormset().asJComponent(), BorderLayout.CENTER);
216
        }
217
        try {
218
            if( this.currentQuery!=null ) {
219
                this.currentQuery.retrievesAllAttributes();
220
            }
221
            this.ph = DALLocator.getDataManager().createFeaturePagingHelper(store, this.currentQuery, PAGE_SIZE);
222
            this.formset.setValues(ph.asListOfDynObjects());
223
        } catch (Exception ex) {
224
            throw new RuntimeException("Can't update form", ex);
225
        }
226
    }
227

    
228
    @Override
229
    public JComponent asJComponent() {
230
        if (this.ph == null) {
231
            try {
232
                updateForm();
233
            } catch (Exception ex) {
234
                throw new RuntimeException(ex);
235
            }
236
        }
237
        return this.panel;
238
    }
239

    
240
    @Override
241
    public void bind(FeatureStore store) {
242
        if (store == null) {
243
            throw new IllegalArgumentException("bind need a store as parameter, not a null.");
244
        }
245
        try {
246
            DefaultDataSwingManager manager = (DefaultDataSwingManager) DALSwingLocator.getSwingManager();
247
            DynClass theDefinition = manager.featureType2DynClass(store, store.getDefaultFeatureType());
248
            this.bind(store, theDefinition);
249
        } catch (Exception ex) {
250
            throw new RuntimeException("Can't bind store '" + store.getName() + "' to form", ex);
251
        }
252
    }
253

    
254
    public void bind(FeatureStore store, DynClass definition) throws ServiceException, DataException {
255
        if (this.store == store) {
256
            return;
257
        }
258
        DynFormManager formManager = DynFormLocator.getDynFormManager();
259
        this.definition = formManager.getDefinition(definition);
260
        if (formset != null) {
261
            this.panel.remove(formset.asJComponent());
262
            this.formset = null;
263
        }
264
        this.store = store;
265
        DisposeUtils.bind(store);
266
        this.ph = null;
267
    }
268

    
269
    private void doDispose() {
270
        DisposeUtils.disposeQuietly(store);
271
        this.store = null;
272
        this.panel = null;
273
        this.formset = null;
274
        this.ph = null;
275
        this.definition = null;
276
        this.currentQuery = null;
277
        this.otherActions = null;
278
    }
279
    
280
    @Override
281
    public JDynFormSet getFormset() {
282
        if (this.formset == null) {
283
            DynFormManager formManager = DynFormLocator.getDynFormManager();
284
            this.formset = formManager.createJDynFormSet(
285
                    new DefaultFeaturesFormContext(),
286
                    this.definition,
287
                    null
288
            );
289
            List<String> groups = this.definition.getGroups();
290
            if( groups.size()==1 && groups.get(0)==null ) {
291
                this.formset.setLayoutMode(JDynForm.USE_PLAIN);
292
            } else {
293
                this.formset.setLayoutMode(JDynForm.USE_TABS);
294
            }
295
            this.formset.setAllowNew(true);
296
            this.formset.setAllowDelete(true);
297
            this.formset.setAllowUpdate(true);
298
            this.formset.setAllowClose(true);
299
            this.formset.setAllowSearch(true);
300
            this.formset.setAutosave(true);
301

    
302
            this.formset.addAction(new StartEditingAction());
303
            this.formset.addAction(new FinishEditingAction());
304
            
305
            FormActionContext actionContext = new FormActionContext();
306
            Collection<DALActionFactory> factories = DALSwingLocator.getSwingManager().getStoreActions();
307
            for (DALActionFactory factory : factories) {
308
                if( StringUtils.equalsIgnoreCase(factory.getName(), ShowFormActionFactory.ACTION_NAME) ) {
309
                    continue;
310
                }
311
                Action action = factory.createAction(actionContext);
312
                this.formset.addAction(action);
313
            }            
314
            for( Action action : this.otherActions ) {
315
                this.formset.addAction(action);
316
            }
317

    
318
            this.formset.addListener(new FormSetListener());
319
        }
320
        if( this.store.isEditing() ) {
321
//            this.formset.setReadOnly(false);
322
            formset.setActionVisible("startEditing", false);
323
            formset.setActionEnabled("startEditing", false);
324
            formset.setActionVisible("finishEditing", true);
325
            formset.setActionEnabled("finishEditing", true);
326
        } else {
327
//            this.formset.setReadOnly(true);
328
            formset.setActionVisible("startEditing", true);
329
            formset.setActionEnabled("startEditing", true);
330
            formset.setActionVisible("finishEditing", false);
331
            formset.setActionEnabled("finishEditing", false);
332
        }
333
        return this.formset;
334
    }
335

    
336
    @Override
337
    public void addAction(Action action) {
338
        this.otherActions.add(action);
339
        if( this.formset!=null ) {
340
            this.formset.addAction(action);
341
        }
342
    }
343

    
344
    @Override
345
    public long getCurrentIndex() {
346
        if( this.formset==null ) {
347
            return -1;
348
        }
349
        return this.formset.getCurrentIndex();
350
    }
351

    
352
    @Override
353
    public Feature get(long index) {
354
        if( this.formset==null || this.ph==null ) {
355
            return null;
356
        }
357
        try {
358
            return this.ph.getFeatureAt(index);
359
        } catch (BaseException ex) {
360
            return null;
361
        }
362
    }
363

    
364
    private class FinishEditingAction extends AbstractAction implements Observer {
365

    
366
        @SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
367
        public FinishEditingAction() {
368
            I18nManager i18nManager = ToolsLocator.getI18nManager();
369
            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getDefault();
370

    
371
            this.putValue(NAME,null);
372
            this.putValue(SHORT_DESCRIPTION,i18nManager.getTranslation("_Stop_editing"));
373
            this.putValue(SMALL_ICON, iconTheme.get("table-stop-editing"));
374
            this.putValue(ACTION_COMMAND_KEY, "finishEditing");
375

    
376
            this.setEnabled(store.isEditing());
377
            store.addObserver(this);
378
        }
379

    
380
        @Override
381
        public void actionPerformed(ActionEvent ae) {
382
            if( store.isEditing() ) {
383
                try {
384
                    I18nManager i18nManager = ToolsLocator.getI18nManager();
385
                    ThreadSafeDialogsManager dialogManager = ToolsSwingLocator.getThreadSafeDialogsManager();
386
                    int x = dialogManager.confirmDialog(
387
                            "? Desea terminar edicion y guardar los cambios ?\n\nPulse cancelar para cancelar la edicion y los cambios.",
388
                            i18nManager.getTranslation("_Stop_editing"),
389
                            JOptionPane.YES_NO_CANCEL_OPTION,
390
                            JOptionPane.QUESTION_MESSAGE
391
                    );
392
                    switch(x) {
393
                        case JOptionPane.YES_OPTION:
394
                            store.finishEditing();
395
                            break;
396
                        case JOptionPane.NO_OPTION:
397
                            break;
398
                        case JOptionPane.CANCEL_OPTION:
399
                            store.cancelEditing();
400
                            break;
401
                    }
402
                } catch (DataException ex) {
403
                    LOGGER.warn("Can't finish editing in FeatureForm ("+store.getName()+").",ex);
404
                }
405
            }
406
        }
407

    
408
        @Override
409
        public void update(Observable observable, Object notification) {
410
            if( notification instanceof FeatureStoreNotification ) {
411
                FeatureStoreNotification n =  (FeatureStoreNotification) notification;
412
                switch( n.getType() )  {
413
                    case FeatureStoreNotification.AFTER_STARTEDITING:
414
                    case FeatureStoreNotification.AFTER_FINISHEDITING:
415
                    case FeatureStoreNotification.AFTER_CANCELEDITING:
416
                        if( store.isEditing() ) {
417
                            formset.setReadOnly(false);
418
                            formset.setActionVisible("finishEditing", true);
419
                            formset.setActionEnabled("finishEditing", true);
420
                        } else {
421
                            formset.setReadOnly(true);
422
                            formset.setActionVisible("finishEditing", false);
423
                            formset.setActionEnabled("finishEditing", false);
424
                        }
425
                        break;
426
                }
427
            }
428
        }
429

    
430
    }
431

    
432
    private class StartEditingAction extends AbstractAction implements Observer {
433

    
434
        @SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
435
        public StartEditingAction() {
436
            I18nManager i18nManager = ToolsLocator.getI18nManager();
437
            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getDefault();
438

    
439
            this.putValue(NAME,null);
440
            this.putValue(SHORT_DESCRIPTION,i18nManager.getTranslation("_Start_editing"));
441
            this.putValue(SMALL_ICON, iconTheme.get("table-start-editing"));
442
            this.putValue(ACTION_COMMAND_KEY, "startEditing");
443

    
444
            this.setEnabled(!store.isEditing());
445
            store.addObserver(this);
446
        }
447

    
448
        @Override
449
        public void actionPerformed(ActionEvent ae) {
450
            if( !store.isEditing() ) {
451
                try {
452
                    store.edit();
453
                } catch (DataException ex) {
454
                    LOGGER.warn("Can't finish editing in FeatureForm ("+store.getName()+").",ex);
455
                }
456
            }
457
        }
458

    
459
        @Override
460
        public void update(Observable observable, Object notification) {
461
            if( notification instanceof FeatureStoreNotification ) {
462
                FeatureStoreNotification n =  (FeatureStoreNotification) notification;
463
                switch( n.getType() )  {
464
                    case FeatureStoreNotification.AFTER_STARTEDITING:
465
                    case FeatureStoreNotification.AFTER_FINISHEDITING:
466
                    case FeatureStoreNotification.AFTER_CANCELEDITING:
467
                        if( store.isEditing() ) {
468
                            formset.setReadOnly(false);
469
                            formset.setActionVisible("startEditing", false);
470
                            formset.setActionEnabled("startEditing", false);
471
                        } else {
472
                            formset.setReadOnly(true);
473
                            formset.setActionVisible("startEditing", true);
474
                            formset.setActionEnabled("startEditing", true);
475
                        }
476
                        break;
477
                }
478
            }
479
        }
480

    
481
    }
482

    
483
    @Override
484
    public void setQuery(FeatureQuery query) {
485
        if (this.ph != null) {
486
            if (this.formset != null && !formset.isReadOnly() && this.formset.isAutosave() && this.formset.countValues() > 0) {
487
                if (!store.isEditing()) {
488
                    try {
489
                        store.edit();
490
                    } catch (DataException e1) {
491
                        throw new RuntimeException("Can't set query", e1);
492
                    }
493
                }
494
                saveChanges(this.formset);
495
            }
496
        }
497
        this.currentQuery = query;
498
        updateForm();
499
    }
500

    
501
    private FeatureQuery getCurrentQuery() {
502
        return this.currentQuery;
503
    }
504
    
505
    @Override
506
    public void showForm(MODE mode) {
507
        this.panel.add(this.getFormset().asJComponent(), BorderLayout.CENTER);
508
        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
509
        String title = this.definition.getLabel();
510
        winmgr.showWindow(this.asJComponent(), title, mode);
511
    }
512

    
513
    private void saveChanges(JDynFormSet dynformSet) {
514
        if( dynformSet.isInNewState() ) {
515
            Feature feat = null;
516
            try {
517
                feat = store.createNewFeature(false);
518
            } catch (DataException ex) {
519
                LOGGER.warn("Can't create new feature.",ex);
520
                I18nManager i18nManager = ToolsLocator.getI18nManager();
521
                dynformSet.message(i18nManager.getTranslation("error_saving_data_will_not_save"));
522
                throw new RuntimeException("Can't new save values");
523
            }
524
            DynObject dynObject = feat.getAsDynObject();
525
            dynformSet.getFormValues(dynObject);
526
            try {
527
                ph.insert(((FacadeOfAFeature)dynObject).getEditableFeature());
528
            } catch (BaseException e) {
529
                throw new RuntimeException("Can't save values", e);
530
            }
531
            try {
532
                this.formset.setValues(ph.asListOfDynObjects());
533
                this.formset.setCurrentIndex((int)(ph.getTotalSize())-1);
534
            } catch(Exception ex) {
535
                LOGGER.warn("Can't reload form data after insert.",ex);
536
            }
537
        } else {
538
            int index = dynformSet.getCurrentIndex();
539
            DynObject dynObject = dynformSet.get(index);
540

    
541
            if ( !(dynObject instanceof FacadeOfAFeature) ) {
542
                LOGGER.warn("Can't get the associated feature index " + index);
543
                I18nManager i18nManager = ToolsLocator.getI18nManager();
544
                dynformSet.message(i18nManager.getTranslation("error_saving_data_will_not_save"));
545
                throw new RuntimeException("Can't save values");
546
            }
547
            dynformSet.getFormValues(dynObject);
548
            try {
549
                ph.update(((FacadeOfAFeature)dynObject).getEditableFeature());
550
            } catch (BaseException e) {
551
                throw new RuntimeException("Can't save values", e);
552
            }
553
        }
554

    
555
    }
556

    
557
    @Override
558
    public void saveChanges() {
559
        if (this.formset != null && this.formset.countValues() > 0) {
560
            if (store != null && !store.isEditing()) {
561
                try {
562
                    store.edit();
563
                } catch (DataException e1) {
564
                    LOGGER.warn("Can't edit the store " + store.getName());
565
                    throw new RuntimeException("Can't save changes.", e1);
566
                }
567
            }
568
            this.saveChanges(this.formset);
569
        }
570
    }
571

    
572
    @Override
573
    public long getDataSetSize() {
574
        if (this.ph != null) {
575
            return ph.getTotalSize();
576
        }
577
        return 0;
578
    }
579

    
580
    @Override
581
    public FeatureStore getFeatureStore() {
582
        return this.store;
583
    }
584

    
585
    private class FormSetListener implements JDynFormSetListener {
586

    
587
        @Override
588
        public void formMessage(String message) {
589
        }
590

    
591
        @Override
592
        public void formClose() {
593
            panel.setVisible(false);
594
        }
595

    
596
        @Override
597
        public void formMovedTo(int currentPosition) throws AbortActionException {
598
            LOGGER.trace("formMovedTo " + currentPosition);
599
        }
600

    
601
        @Override
602
        public void formBeforeSave(JDynFormSet dynformSet) throws AbortActionException {
603
            LOGGER.trace("formBeforeSave");
604
            if (!store.isEditing()) {
605
                try {
606
                    store.edit();
607
                } catch (DataException e1) {
608
                    throw new StoreEditException(e1, store.getName());
609
                }
610
            }
611
        }
612

    
613
        @Override
614
        public void formBeforeNew(JDynFormSet dynformSet) throws AbortActionException {
615
            LOGGER.trace("formBeforeNew");
616
        }
617

    
618
        @Override
619
        public void formBeforeDelete(JDynFormSet dynformSet) throws AbortActionException {
620
            LOGGER.trace("formBeforeDelete");
621
        }
622

    
623
        @Override
624
        public void formAfterSave(JDynFormSet dynformSet) throws AbortActionException {
625
            LOGGER.trace("formAfterSave");
626
            saveChanges(dynformSet);
627
        }
628

    
629
        @Override
630
        public void formAfterNew(JDynFormSet dynformSet) throws AbortActionException {
631
            LOGGER.trace("formAfterNew");
632
        }
633

    
634
        @Override
635
        public void formAfterDelete(JDynFormSet dynformSet) throws AbortActionException {
636
            LOGGER.trace("formAfterDelete");
637
        }
638

    
639
//        @Override
640
//        public void formBeforeSearch(JDynFormSet dynformSet) throws AbortActionException {
641
//            LOGGER.trace("formBeforeSearch");
642
//            DataSwingManager dataSwingmanager = DALSwingLocator.getSwingManager();
643
//            WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
644
//
645
//            JExpressionBuilder builder = dataSwingmanager.createQueryFilterExpresion(store);
646
//            FeatureQuery currentQuery = getCurrentQuery();
647
//            if( currentQuery!=null ) {
648
//                Evaluator filter = currentQuery.getFilter();
649
//                if( filter instanceof ExpressionEvaluator ) {
650
//                    Expression expression = ((ExpressionEvaluator)filter).getExpression();
651
//                    builder.setExpression(expression);
652
//                }
653
//            }
654
//            Dialog dialog = winmgr.createDialog(
655
//                    builder.asJComponent(),
656
//                    "Filtro",
657
//                    "Creacion de filtro sobre '"+store.getName()+"'",
658
//                    WindowManager_v2.BUTTONS_OK_CANCEL
659
//            );
660
//            dialog.show(WindowManager.MODE.DIALOG);
661
//            if( dialog.getAction() == WindowManager_v2.BUTTON_OK ) {
662
//                Expression expresion = builder.getExpression();
663
//                try {
664
//                    FeatureQuery query = store.createFeatureQuery();
665
//                    if( ExpressionUtils.isPhraseEmpty(expresion) ) {
666
//                        query.clearFilter();
667
//                    } else {
668
//                        query.setFilter(expresion);
669
//                    }
670
//                    setQuery(query);
671
//                } catch (Exception ex) {
672
//                    LOGGER.warn("Can't apply filter '" + expresion + "'.", ex);
673
//                }
674
//            }
675
//        }
676

    
677
        @Override
678
        public void formBeforeSearch(JDynFormSet dynformSet) throws AbortActionException {
679
            LOGGER.trace("formBeforeSearch");
680
            DataSwingManager dataSwingmanager = DALSwingLocator.getSwingManager();
681
            WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
682

    
683
            final FeatureStoreSearchPanel searchPanel = dataSwingmanager.createFeatureStoreSearchPanel(store);
684
            searchPanel.setShowActions(false);
685
            FeatureQuery currentQuery = getCurrentQuery();
686
            if( currentQuery!=null ) {
687
                Evaluator filter = currentQuery.getFilter();
688
                if( filter instanceof ExpressionEvaluator ) {
689
                    Expression expression = ((ExpressionEvaluator)filter).getExpression();
690
                    searchPanel.setFilter(expression);
691
                }
692
            }
693
            searchPanel.asJComponent().setPreferredSize(
694
                    new Dimension(FeatureStoreSearchPanel.DEFAULT_WIDTH, 320)
695
            );
696
            Dialog dialog = winmgr.createDialog(
697
                    searchPanel.asJComponent(),
698
                    "Filtro",
699
                    "Creacion de filtro sobre '"+store.getName()+"'",
700
                    WindowManager_v2.BUTTONS_OK_CANCEL
701
            );
702
            dialog.show(WindowManager.MODE.DIALOG);
703
            if( dialog.getAction() == WindowManager_v2.BUTTON_OK ) {
704
                Expression expresion = searchPanel.getFilter();
705
                try {
706
                    FeatureQuery query = store.createFeatureQuery();
707
                    if( ExpressionUtils.isPhraseEmpty(expresion) ) {
708
                        query.clearFilter();
709
                    } else {
710
                        query.setFilter(expresion);
711
                    }
712
                    setQuery(query);
713
                } catch (Exception ex) {
714
                    LOGGER.warn("Can't apply filter '" + expresion + "'.", ex);
715
                }
716
            }
717
        }
718

    
719
        @Override
720
        public void formAfterSearch(JDynFormSet dynformSet) throws AbortActionException {
721
            LOGGER.trace("formAfterSearch");
722
        }
723

    
724
        @Override
725
        public void formBeforeCancelNew(JDynFormSet dynformSet) throws AbortActionException {
726
            LOGGER.trace("formBeforeCancelNew");
727
        }
728

    
729
        @Override
730
        public void formAfterCancelNew(JDynFormSet dynformSet) throws AbortActionException {
731
            LOGGER.trace("formAfterCancelNew");
732
        }
733
    }
734

    
735
    private static class StoreEditException extends AbortActionException {
736

    
737
        /**
738
         *
739
         */
740
        private static final long serialVersionUID = -7682017811778577130L;
741

    
742
        public StoreEditException(Throwable cause, String storename) {
743
            super("Can't edit the store '%(storename)'", cause, "cant_edit_the store_XstorenameX", serialVersionUID);
744
            setValue("storename", storename);
745
        }
746
    }
747
}