Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / imp / DefaultApplicationManager.java @ 46435

History | View | Annotate | Download (24.6 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 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 3
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.app.imp;
26

    
27
import java.awt.Component;
28
import java.io.File;
29
import java.util.ArrayList;
30
import java.util.Iterator;
31
import java.util.List;
32
import java.util.Map;
33
import javax.swing.JComponent;
34
import javax.swing.JFileChooser;
35
import javax.swing.SwingUtilities;
36
import javax.swing.event.HyperlinkListener;
37
import javax.swing.filechooser.FileFilter;
38
import javax.swing.tree.TreeModel;
39
import org.apache.commons.lang3.StringUtils;
40
import org.cresques.cts.IProjection;
41
import org.gvsig.about.AboutLocator;
42
import org.gvsig.about.AboutManager;
43
import org.gvsig.andami.Arguments;
44
import org.gvsig.andami.Launcher;
45
import org.gvsig.andami.PluginServices;
46
import org.gvsig.andami.actioninfo.ActionInfo;
47
import org.gvsig.andami.ui.ToolsWindowManager;
48
import org.gvsig.andami.ui.mdiFrame.MainFrame;
49
import org.gvsig.andami.ui.mdiManager.IWindow;
50
import org.gvsig.andami.ui.mdiManager.MDIManager;
51
import org.gvsig.app.ApplicationManager;
52
import org.gvsig.app.PreferencesNode;
53
import org.gvsig.app.extension.Version;
54
import org.gvsig.app.extension.develtools.InfoPanel;
55
import org.gvsig.app.gui.WizardPanel;
56
import org.gvsig.app.prepareAction.PrepareContext;
57
import org.gvsig.app.prepareAction.PrepareContextView;
58
import org.gvsig.app.prepareAction.PrepareDataStore;
59
import org.gvsig.app.prepareAction.PrepareDataStoreParameters;
60
import org.gvsig.app.prepareAction.PrepareLayer;
61
import org.gvsig.app.project.DefaultProject;
62
import org.gvsig.app.project.Project;
63
import org.gvsig.app.project.ProjectManager;
64
import org.gvsig.app.project.documents.Document;
65
import org.gvsig.app.project.documents.gui.IDocumentWindow;
66
import org.gvsig.app.project.documents.view.ViewDocument;
67
import org.gvsig.app.project.documents.view.ViewManager;
68
import org.gvsig.fmap.crs.CRSFactory;
69
import org.gvsig.fmap.dal.DALLocator;
70
import org.gvsig.fmap.dal.DataManager;
71
import org.gvsig.fmap.dal.DataStore;
72
import org.gvsig.fmap.dal.DataStoreParameters;
73
import org.gvsig.fmap.dal.exception.DataException;
74
import org.gvsig.fmap.dal.feature.FeatureStore;
75
import org.gvsig.fmap.geom.GeometryLocator;
76
import org.gvsig.fmap.geom.GeometryManager;
77
import org.gvsig.fmap.mapcontext.MapContext;
78
import org.gvsig.fmap.mapcontext.MapContextLocator;
79
import org.gvsig.fmap.mapcontext.MapContextManager;
80
import org.gvsig.fmap.mapcontext.layers.FLayer;
81
import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
82
import org.gvsig.fmap.mapcontrol.CompoundLayersTreeModel;
83
import org.gvsig.fmap.mapcontrol.CompoundStoresTreeModel;
84
import org.gvsig.fmap.mapcontrol.MapControlLocator;
85
import org.gvsig.gui.ColorTablesFactory;
86
import org.gvsig.symbology.swing.SymbologySwingLocator;
87
import org.gvsig.tools.ToolsLocator;
88
import org.gvsig.tools.dataTypes.DataTypesManager;
89
import org.gvsig.tools.dispose.DisposableManager;
90
import org.gvsig.tools.dynobject.DynObjectManager;
91
import org.gvsig.tools.extensionpoint.ExtensionPoint;
92
import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
93
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
94
import org.gvsig.tools.observer.Observer;
95
import org.gvsig.tools.persistence.PersistenceManager;
96
import org.gvsig.tools.swing.api.ToolsSwingLocator;
97
import org.gvsig.tools.swing.api.windowmanager.Dialog;
98
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
99
import org.gvsig.tools.swing.icontheme.IconThemeManager;
100
import org.gvsig.tools.util.PropertiesSupport;
101
import org.gvsig.tools.util.PropertiesSupportHelper;
102
import org.slf4j.Logger;
103
import org.slf4j.LoggerFactory;
104

    
105

    
106

    
107

    
108
/**
109
 * @author jmvivo
110
 *
111
 */
112
public class DefaultApplicationManager implements ApplicationManager {
113

    
114
    @SuppressWarnings("unused")
115
        private static Logger logger = LoggerFactory.getLogger(DefaultApplicationManager.class);
116
    
117
        private static final String EPNAME_PREPARE_OPEN_DATASTORE = "org.gvsig.datastore.open.prepare"; //"PrepareOpenDataStore";
118
        private static final String EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS = "org.gvsig.datastoreparameters.open.prepare"; //"PrepareOpenDataStoreParameters";
119
        private static final String EPNAME_PREPARE_OPEN_LAYER = "org.gvsig.layer.open.prepare"; // "PrepareOpenLayer";
120

    
121
        private static final String EPNAME_ADD_TABLE_WIZARD = "AddLayerWizard";
122

    
123
        private ExtensionPointManager epManager;
124

    
125
    private Version version;
126
    private PropertiesSupportHelper psh;
127

    
128
    public DefaultApplicationManager() {
129
        this.psh = new PropertiesSupportHelper();
130
        
131
        epManager = ToolsLocator.getExtensionPointManager();
132
        epManager.add(EPNAME_PREPARE_OPEN_DATASTORE,
133
                "Actions to do when open a DataStore");
134
        epManager.add(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS,
135
                "Actions to do before open a DataStore with parameters");
136
        epManager.add(EPNAME_PREPARE_OPEN_LAYER,
137
                "Actions to do after create a Layer");
138
        epManager.add(EPNAME_ADD_TABLE_WIZARD,
139
                "Wizards to add new document table");
140

    
141
        try {
142
            version = new Version();
143
        } catch(Exception ex) {
144
            logger.warn("Can't locate application version.");
145
        }
146
    }
147

    
148
        /* (non-Javadoc)
149
         * @see org.gvsig.appGvSigManager#pepareOpenDataSource(org.gvsig.fmap.dal.DataStore)
150
         */
151
        @SuppressWarnings("unchecked")
152
        public DataStore pepareOpenDataSource(DataStore store,
153
                        PrepareContext context) throws Exception {
154
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_DATASTORE);
155
                if (ep.getCount() == 0) {
156
                        return store;
157
                }
158
                DataStore result = store;
159
                Iterator<ExtensionPoint.Extension> iter = ep.iterator();
160
                PrepareDataStore prepare;
161
                while (iter.hasNext()) {
162
                        prepare = (PrepareDataStore) iter.next().create();
163
                        result = prepare.prepare(store, context);
164
                }
165
                return result;
166
        }
167

    
168
        /* (non-Javadoc)
169
         * @see org.gvsig.appGvSigManager#prepareOpenDataStoreParameters(org.gvsig.fmap.dal.DataStoreParameters)
170
         */
171
        @SuppressWarnings("unchecked")
172
        public DataStoreParameters prepareOpenDataStoreParameters(
173
                        DataStoreParameters storeParameters, PrepareContext context)
174
                        throws Exception {
175

    
176
                ExtensionPoint ep = epManager
177
                                .get(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS);
178
                if (ep.getCount() == 0) {
179
                        return storeParameters;
180
                }
181
                DataStoreParameters result = storeParameters;
182
                Iterator<ExtensionPoint.Extension> iter = ep.iterator();
183
                PrepareDataStoreParameters prepare;
184
                while (iter.hasNext()) {
185
                        prepare = (PrepareDataStoreParameters) iter.next().create();
186
                        result = prepare.prepare(storeParameters, context);
187
                }
188

    
189
                return result;
190
        }
191
        
192
        /*
193
         * (non-Javadoc)
194
         * @see org.gvsig.app.ApplicationManager#prepareOpenDataStoreParameters(java.util.List, org.gvsig.app.prepareAction.PrepareContext)
195
         */
196
        @SuppressWarnings("unchecked")
197
        public List<DataStoreParameters> prepareOpenDataStoreParameters(
198
                        List<DataStoreParameters> storeParameters, PrepareContext context)
199
                        throws Exception {
200

    
201
                ExtensionPoint ep = epManager
202
                                .get(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS);
203
                if (ep.getCount() == 0) {
204
                        return storeParameters;
205
                }
206
                
207
                List<DataStoreParameters> result = new ArrayList<DataStoreParameters>();
208
                
209
                Iterator<ExtensionPoint.Extension> iter = ep.iterator();
210
                List<PrepareDataStoreParameters> prepareList = new ArrayList<PrepareDataStoreParameters>();
211
                while (iter.hasNext()) {
212
                        prepareList.add((PrepareDataStoreParameters) iter.next().create());
213
                }
214
                
215
                for (int i = 0; i < storeParameters.size(); i++) {
216
                        DataStoreParameters param = storeParameters.get(i);
217
                        for (int j = 0; j < prepareList.size(); j++) {
218
                                prepareList.get(j).pre(param, context);
219
                        }
220
                }
221
                
222
                for (int i = 0; i < storeParameters.size(); i++) {
223
                        DataStoreParameters param = storeParameters.get(i);
224
                        if(param != null) {
225
                                for (int j = 0; j < prepareList.size(); j++) {
226
                                        param = prepareList.get(j).prepare(param, context);
227
                                        if(param == null)
228
                                                break;
229
                                }
230
                                if(param != null)
231
                                        result.add(param);
232
                        }
233
                }
234
                
235
                for (int i = 0; i < storeParameters.size(); i++) {
236
                        DataStoreParameters param = storeParameters.get(i);
237
                        for (int j = 0; j < prepareList.size(); j++) {
238
                                prepareList.get(j).post(param, context);
239
                        }
240
                }
241

    
242
                return result;
243
        }
244

    
245
        public void registerPrepareOpenDataStore(PrepareDataStore action) {
246
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_DATASTORE);
247
                ep.append(action.getName(), action.getDescription(), action);
248
        }
249

    
250
        public void registerPrepareOpenDataStoreParameters(
251
                        PrepareDataStoreParameters action) {
252
                ExtensionPoint ep = epManager
253
                                .get(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS);
254
                ep.append(action.getName(), action.getDescription(), action);
255

    
256

    
257
        }
258

    
259
        @SuppressWarnings("unchecked")
260
        public FLayer prepareOpenLayer(FLayer layer,
261
                        PrepareContextView context)
262
                        throws Exception {
263

    
264
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_LAYER);
265

    
266
                if (ep.getCount() == 0) {
267
                        return layer;
268
                }
269
                FLayer result = layer;
270
                Iterator<ExtensionPoint.Extension> iter = ep.iterator();
271
                PrepareLayer prepare;
272
                while (iter.hasNext()) {
273
                        prepare = (PrepareLayer) iter.next().create();
274
                        result = prepare.prepare(result, context);
275
                }
276

    
277
                return result;
278

    
279
        }
280

    
281
        public void registerPrepareOpenLayer(PrepareLayer action) {
282
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_LAYER);
283
                ep.append(action.getName(), action.getDescription(), action);
284
        }
285

    
286
        public void registerAddTableWizard(String name, String description,
287
                        Class<? extends WizardPanel> wpClass) {
288
                ExtensionPoint ep = epManager.get(EPNAME_ADD_TABLE_WIZARD);
289
                ep.append(name, description, wpClass);
290
        }
291

    
292
        @SuppressWarnings("unchecked")
293
        public List<WizardPanel> getWizardPanels() throws Exception {
294
                ExtensionPoint ep = epManager.get(EPNAME_ADD_TABLE_WIZARD);
295
                List<WizardPanel> result = new ArrayList<WizardPanel>();
296
                Iterator<Extension> iter = ep.iterator();
297
                while (iter.hasNext()) {
298
                        result.add((WizardPanel) iter.next().create());
299
                }
300
                return result;
301
        }
302

    
303
        public DataManager getDataManager() {
304
                return DALLocator.getDataManager();
305
        }
306

    
307
        public GeometryManager getGeometryManager() {
308
                return GeometryLocator.getGeometryManager();
309
        }
310

    
311
        public PersistenceManager getPersistenceManager() {
312
                return ToolsLocator.getPersistenceManager();
313
        }
314

    
315
        public DisposableManager getDisposableManager() {
316
                return ToolsLocator.getDisposableManager();
317
        }
318

    
319
        public DynObjectManager getDynObjectManager() {
320
                return ToolsLocator.getDynObjectManager();
321
        }
322

    
323
        public ExtensionPointManager getExtensionPointManager() {
324
                return ToolsLocator.getExtensionPointManager();
325
        }
326

    
327
        public ProjectManager getProjectManager() {
328
                return ProjectManager.getInstance();
329
        }
330

    
331
        public MDIManager getUIManager() {
332
                return PluginServices.getMDIManager();
333
        }
334

    
335
        public MapContextManager getMapContextManager() {
336
                return MapContextLocator.getMapContextManager();
337
        }
338

    
339
        public DataTypesManager getDataTypesManager() {
340
                return ToolsLocator.getDataTypesManager();
341
        }
342
        
343
        public IProjection getCRS(String code) {
344
                return CRSFactory.getCRS(code);
345
        }
346

    
347
        public IconThemeManager getIconThemeManager() {
348
                return ToolsSwingLocator.getIconThemeManager();
349
        }
350

    
351
        @Override
352
        public Arguments getArguments() {
353
                return Launcher.getArguments();
354
        }
355

    
356
  @Override
357
        public String getFromClipboard() {
358
                return PluginServices.getFromClipboard();
359
        }
360

    
361
  @Override
362
        public void putInClipboard(String data) {
363
                PluginServices.putInClipboard(data);
364
        }
365

    
366
        public Project getCurrentProject() {
367
                return ProjectManager.getInstance().getCurrentProject();
368
        }
369

    
370
    @Override
371
    public FLayer getCurrentLayer() {
372
        ViewDocument viewdoc = (ViewDocument) this.getActiveDocument(ViewManager.TYPENAME);
373
        if( viewdoc == null ) {
374
            return null;
375
        }
376
        MapContext mapContext = viewdoc.getMapContext();
377
        return mapContext.getLayers().getFirstActiveLayer();
378
    }
379
        
380
        public PreferencesNode getPreferences(String node) {
381
                if( node.equalsIgnoreCase("project")) {
382
                        return DefaultProject.getPreferences();
383
                }
384
                return new DefaultPreferencesNode(node);
385
        }
386

    
387
        public PreferencesNode getPreferences() {
388
                return new DefaultPreferencesNode();
389
        }
390

    
391
        public Version getVersion() {
392
        return version;
393
        }
394

    
395
        @Override
396
        public void close(boolean quietly) {
397
            Launcher.closeApplication(quietly);
398
        }
399

    
400
        public AboutManager getAbout() {
401
                AboutManager manager = AboutLocator.getManager();
402
                return manager;
403
        }
404

    
405
        public ColorTablesFactory getColorTablesFactory() {
406
                return SymbologySwingLocator.getSwingManager().getColorTablesFactory();
407
        }
408

    
409
        public void registerColorTablesFactory(ColorTablesFactory factory) {
410
                SymbologySwingLocator.getSwingManager().setColorTablesFactory(factory);
411
                
412
        }
413

    
414
    public IWindow getActiveWindow() {
415
        try {
416
            IWindow window = PluginServices.getMDIManager().getActiveWindow();
417
            return window;
418
        } catch (Exception ex) {
419
            return null;
420
        }
421
    }
422

    
423
    public Document getActiveDocument() {
424
            return this.getActiveDocument((Class<? extends Document>)null);
425
    }
426
    
427
    public Document getActiveDocument(String documentTypeName) {
428
        Document document = this.getActiveDocument();
429
        if( document!= null && document.getTypeName().equalsIgnoreCase(documentTypeName) ) {
430
            return document;
431
        }
432
        return null;
433
    }
434
    
435
    public Document getActiveDocument(Class<? extends Document> documentClass) {
436
        Project project = this.getCurrentProject();
437
        if( project == null ) {
438
            return null;
439
        }
440
        return project.getActiveDocument(documentClass);
441
    }
442

    
443
    public JComponent getActiveComponent(Class<? extends Document> documentClass) {
444
        Document document = this.getActiveDocument(documentClass);
445
        if (document == null) {
446
            return null;
447
        }
448
        return document.getMainComponent();
449
    }
450
    
451
   
452
    public IDocumentWindow getDocumentWindow(Document document) {
453
        Class<? extends IDocumentWindow> defaultDocumentClass =
454
            document.getFactory().getMainWindowClass();
455
        return (IDocumentWindow) this.getUIManager().getSingletonWindow(defaultDocumentClass, document);
456
    }
457

    
458
        public String getLocaleLanguage() {
459
                return Launcher.getAndamiConfig().getLocaleLanguage();
460
        }
461

    
462
        public void messageDialog(String message, String title, int messageType) {
463
                MainFrame main = PluginServices.getMainFrame();
464
                main.messageDialog(message, title, messageType);
465
        }
466

    
467
        public void messageDialog(String message, String[] messageArgs,
468
                        String title, int messageType) {
469
                MainFrame main = PluginServices.getMainFrame();
470
                main.messageDialog(message, messageArgs, title, messageType);
471
        }
472

    
473
        @Override
474
        public void messageDialog(String message, String[] messageArgs, String title, int messageType, String msgid) {
475
                MainFrame main = PluginServices.getMainFrame();
476
                main.messageDialog(message, messageArgs, title, messageType, msgid);
477
        }        
478

    
479
        @Override
480
        public int confirmDialog(String message, String title, int optionType,
481
                        int messageType) {
482
                MainFrame main = PluginServices.getMainFrame();
483
                return main.confirmDialog(message, title, optionType, messageType);
484
        }
485

    
486
        @Override
487
        public int confirmDialog(String message, String title, int optionType,
488
                        int messageType, String msgid) {
489
                MainFrame main = PluginServices.getMainFrame();
490
                return main.confirmDialog(message, title, optionType, messageType, msgid);
491
        }
492

    
493
        public String inputDialog(String message, String title, int messageType,
494
                        String initialValue) {
495
                MainFrame main = PluginServices.getMainFrame();
496
                return main.inputDialog(message, title, messageType, initialValue);
497
        }
498

    
499
        public String inputDialog(String message, String title) {
500
                MainFrame main = PluginServices.getMainFrame();
501
                return main.inputDialog(message, title);
502
        }
503

    
504
        public void showDialog(Component contents, String title) {
505
                MainFrame main = PluginServices.getMainFrame();
506
                main.showDialog(contents, title);
507
        }
508

    
509
        public Component createComponent(Class<? extends Component> theClass,
510
                        Object... parameters) {
511
                MainFrame main = PluginServices.getMainFrame();
512
                return main.createComponentWithParams(theClass, parameters);
513
        }
514

    
515
        public Component createComponentWithParams(
516
                        Class<? extends Component> theClass, Object[] parameters) {
517
                MainFrame main = PluginServices.getMainFrame();
518
                return main.createComponentWithParams(theClass, parameters);
519
        }
520

    
521

    
522
        public File[] showChooserDialog(
523
                        final String title,
524
                        final int type, // SAVE_DIALOG / OPEN_DIALOG
525
                        final int selectionMode, //    JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
526
                        final boolean multiselection, 
527
                        final File initialPath,
528
                        final FileFilter filter,
529
                        final boolean fileHidingEnabled
530
                        ) {
531
                MainFrame main = PluginServices.getMainFrame();
532
                return main.showChooserDialog(title, type, selectionMode, multiselection, initialPath, filter, fileHidingEnabled);
533
        }
534
        
535
        public File[] showOpenDirectoryDialog(String title, File initialPath) {
536
                return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.DIRECTORIES_ONLY, false, initialPath, null, false);
537
        }
538

    
539
        
540
        public File[] showOpenFileDialog(String title, File initialPath) {
541
                return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
542
        }
543

    
544
        
545
        public File[] showSaveFileDialog(String title, File initialPath) {
546
                return showChooserDialog(title, JFileChooser.SAVE_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
547
        }
548

    
549
        @Override
550
        public void message(String message, int message_type) {
551
                MainFrame main = PluginServices.getMainFrame();
552
                if( main != null) {
553
                    main.message(message, message_type);
554
                }
555
        }        
556
        
557
        public String translate(String message, String... args) {
558
                return org.gvsig.i18n.Messages.translate(message, args);
559
        }
560
        
561
        public Component getRootComponent() {
562
                return (Component) PluginServices.getMainFrame();
563
        }
564

    
565
        public void refreshMenusAndToolBars() {
566
                PluginServices.getMainFrame().refreshControls();
567
        }
568

    
569
    public MainFrame getMainFrame() {
570
        return PluginServices.getMainFrame();
571
    }
572
    
573
        public void addMenu(ActionInfo action, String text) {
574
                MainFrame f = this.getMainFrame();
575
                f.addMenu(action,text);
576
        }
577

    
578
        @Override
579
        public void addTool(ActionInfo action, String toolBarName) {
580
                MainFrame f = this.getMainFrame();
581
                f.addTool(action,toolBarName);
582
                f.refreshControls();
583
        }
584
        
585
        @Override
586
        public void addSelectableTool(ActionInfo action, String toolBarName) {
587
                MainFrame f = this.getMainFrame();
588
                f.addSelectableTool(action,toolBarName,"unico",false);
589
                f.refreshControls();
590
        }
591
                
592
        public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText) {
593
            this.showTextDialog(mode, title, htmlText, null);
594
        }
595
        
596
        public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText, final HyperlinkListener hyperlinkListener) {
597
            if (!SwingUtilities.isEventDispatchThread()) {
598
                if( mode == WindowManager.MODE.DIALOG ) {
599
                    try {
600
                        SwingUtilities.invokeAndWait(new Runnable() {
601
                            public void run() {
602
                                showTextDialog(mode, title, htmlText,hyperlinkListener);
603
                            }
604
                        });
605
                    } catch (Exception ex) {
606
                        logger.warn("Can't show text dialog:\n"+htmlText,ex);
607
                    }
608
                } else {
609
                    SwingUtilities.invokeLater(new Runnable() {
610
                        public void run() {
611
                            showTextDialog(mode, title, htmlText,hyperlinkListener);
612
                        }
613
                    });
614
                }
615
                return;
616
            }
617
            InfoPanel.showPanel(title, mode, htmlText,hyperlinkListener);
618
        }
619

    
620
        @Override
621
        public TreeModel createProjectLayersTreeModel() {
622
            CompoundLayersTreeModel model = (CompoundLayersTreeModel) MapControlLocator.getMapControlManager().createCompoundLayersTreeModel();
623
            Project project = this.getCurrentProject();
624
            List<Document> views = project.getDocuments(ViewManager.TYPENAME);
625
            for (Document view : views) {
626
                model.addLayers( ((ViewDocument)view).getMapContext().getLayers() );
627
            }
628
            return model;
629
        }
630

    
631
    @Override
632
    public TreeModel createProjectStoresTreeModel() {
633
        CompoundStoresTreeModel model = MapControlLocator.getMapControlManager().createCompoundStoresTreeModel();
634
        Project project = this.getCurrentProject();
635
        List<Document> views = project.getDocuments(ViewManager.TYPENAME);
636
        for (Document view : views) {
637
            model.addLayers( ((ViewDocument)view).getMapContext().getLayers() );
638
        }
639
        return model;
640
    }
641

    
642
    @Override
643
    public Object getProperty(String name) {
644
        return this.psh.getProperty(name);
645
    }
646

    
647
    @Override
648
    public void setProperty(String name, Object value) {
649
        this.psh.setProperty(name, value);
650
    }
651

    
652
    @Override
653
    public Map<String, Object> getProperties() {
654
        return this.psh.getProperties();
655
    }
656

    
657
    @Override
658
    public void addPropertiesObserver(Observer o) {
659
        this.psh.addObserver(o);
660
    }
661

    
662
    @Override
663
    public void deletePropertiesObserver(Observer o) {
664
        this.psh.deleteObserver(o);
665
    }
666

    
667
    @Override
668
    public void deletePropertiesObservers() {
669
        this.psh.deleteObservers();
670
    }
671

    
672
    @Override
673
    public void refreshDocument(FeatureStore store) {
674
        if (store == null) {
675
            return;
676
        }
677
        refreshDocument(store.getParameters());
678
    }
679

    
680
    @Override
681
    public void refreshDocument(DataStoreParameters params) {
682
        if (params == null) {
683
            return;
684
        }
685
        if(!SwingUtilities.isEventDispatchThread()){
686
            SwingUtilities.invokeLater(() -> {
687
                refreshDocument(params);
688
            });
689
            return;
690
        }
691
        ProjectManager projectManager = this.getProjectManager();
692
        Project project = projectManager.getCurrentProject();
693
        for (Document doc : project.getDocuments()) {
694
            if (doc.contains(params)) {
695
                if (StringUtils.equals(doc.getTypeName(), ViewManager.TYPENAME)) {
696
                    ViewDocument view = (ViewDocument) doc;
697
                    for (Iterator<FLayer> it = view.deepiterator(); it.hasNext();) {
698
                        FLayer layer = it.next();
699
                        if (layer instanceof SingleLayer) {
700
                            DataStore layerStore = ((SingleLayer) layer).getDataStore();
701
                            if ( params.isTheSameStore(layerStore.getParameters())) {
702
                                try {
703
                                    layerStore.refresh();
704
                                } catch (DataException ex) {
705
                                    logger.debug("Can't refresh store "+layerStore.getFullName(), ex);
706
                                }
707
                            }
708
                        }
709
                    }
710
                }
711
                doc.refresh();
712
            }
713
        }
714
    }
715

    
716
    @Override
717
    public Object get(String key) {
718
        Object value = null;
719
        IWindow[] windows = this.getUIManager().getOrderedWindows();
720
        for (IWindow window : windows) {
721
            String title = window.getWindowInfo().getTitle();
722
            Object component = null;
723
            if( window instanceof PropertiesSupport ) {
724
                component = (JComponent) window;
725
            } else if( window instanceof ToolsWindowManager.Window ) {
726
                component = ((ToolsWindowManager.Window)window).getContents();
727
                if( component instanceof Dialog) {
728
                    component = ((Dialog)component).getContents();
729
                }
730
            }
731
            if( component instanceof PropertiesSupport ) {
732
                value = ((PropertiesSupport)component).getProperty(key);
733
                if( value!=null ) {
734
                    break;
735
                }
736
            } 
737
        }
738
        return value;
739
    }
740

    
741
}