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 @ 47817

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

    
110

    
111

    
112

    
113
/**
114
 * @author jmvivo
115
 *
116
 */
117
public class DefaultApplicationManager implements ApplicationManager {
118

    
119
    @SuppressWarnings("unused")
120
        private static Logger logger = LoggerFactory.getLogger(DefaultApplicationManager.class);
121
    
122
        private static final String EPNAME_PREPARE_OPEN_DATASTORE = "org.gvsig.datastore.open.prepare"; //"PrepareOpenDataStore";
123
        private static final String EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS = "org.gvsig.datastoreparameters.open.prepare"; //"PrepareOpenDataStoreParameters";
124
        private static final String EPNAME_PREPARE_OPEN_LAYER = "org.gvsig.layer.open.prepare"; // "PrepareOpenLayer";
125

    
126
        private static final String EPNAME_ADD_TABLE_WIZARD = "AddLayerWizard";
127

    
128
        private ExtensionPointManager epManager;
129

    
130
    private Version version;
131
    private PropertiesSupportHelper psh;
132

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

    
146
        try {
147
            version = new Version();
148
        } catch(Exception ex) {
149
            logger.warn("Can't locate application version.");
150
        }
151
    }
152

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

    
173
        /* (non-Javadoc)
174
         * @see org.gvsig.appGvSigManager#prepareOpenDataStoreParameters(org.gvsig.fmap.dal.DataStoreParameters)
175
         */
176
        @SuppressWarnings("unchecked")
177
        public DataStoreParameters prepareOpenDataStoreParameters(
178
                        DataStoreParameters storeParameters, PrepareContext context)
179
                        throws Exception {
180

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

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

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

    
247
                return result;
248
        }
249

    
250
        public void registerPrepareOpenDataStore(PrepareDataStore action) {
251
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_DATASTORE);
252
                ep.append(action.getName(), action.getDescription(), action);
253
        }
254

    
255
        public void registerPrepareOpenDataStoreParameters(
256
                        PrepareDataStoreParameters action) {
257
                ExtensionPoint ep = epManager
258
                                .get(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS);
259
                ep.append(action.getName(), action.getDescription(), action);
260

    
261

    
262
        }
263

    
264
        @SuppressWarnings("unchecked")
265
        public FLayer prepareOpenLayer(FLayer layer,
266
                        PrepareContextView context)
267
                        throws Exception {
268

    
269
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_LAYER);
270

    
271
                if (ep.getCount() == 0) {
272
                        return layer;
273
                }
274
                FLayer result = layer;
275
                Iterator<ExtensionPoint.Extension> iter = ep.iterator();
276
                PrepareLayer prepare;
277
                while (iter.hasNext()) {
278
                        prepare = (PrepareLayer) iter.next().create();
279
                        result = prepare.prepare(result, context);
280
                }
281

    
282
                return result;
283

    
284
        }
285

    
286
        public void registerPrepareOpenLayer(PrepareLayer action) {
287
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_LAYER);
288
                ep.append(action.getName(), action.getDescription(), action);
289
        }
290

    
291
        public void registerAddTableWizard(String name, String description,
292
                        Class<? extends WizardPanel> wpClass) {
293
                ExtensionPoint ep = epManager.get(EPNAME_ADD_TABLE_WIZARD);
294
                ep.append(name, description, wpClass);
295
        }
296

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

    
308
        public DataManager getDataManager() {
309
                return DALLocator.getDataManager();
310
        }
311

    
312
        public GeometryManager getGeometryManager() {
313
                return GeometryLocator.getGeometryManager();
314
        }
315

    
316
        public PersistenceManager getPersistenceManager() {
317
                return ToolsLocator.getPersistenceManager();
318
        }
319

    
320
        public DisposableManager getDisposableManager() {
321
                return ToolsLocator.getDisposableManager();
322
        }
323

    
324
        public DynObjectManager getDynObjectManager() {
325
                return ToolsLocator.getDynObjectManager();
326
        }
327

    
328
        public ExtensionPointManager getExtensionPointManager() {
329
                return ToolsLocator.getExtensionPointManager();
330
        }
331

    
332
        public ProjectManager getProjectManager() {
333
                return ProjectManager.getInstance();
334
        }
335

    
336
        public MDIManager getUIManager() {
337
                return PluginServices.getMDIManager();
338
        }
339

    
340
        public MapContextManager getMapContextManager() {
341
                return MapContextLocator.getMapContextManager();
342
        }
343

    
344
        public DataTypesManager getDataTypesManager() {
345
                return ToolsLocator.getDataTypesManager();
346
        }
347
        
348
        public IProjection getCRS(String code) {
349
                return CRSFactory.getCRS(code);
350
        }
351

    
352
        public IconThemeManager getIconThemeManager() {
353
                return ToolsSwingLocator.getIconThemeManager();
354
        }
355

    
356
        @Override
357
        public Arguments getArguments() {
358
                return Launcher.getArguments();
359
        }
360

    
361
  @Override
362
        public String getFromClipboard() {
363
                return PluginServices.getFromClipboard();
364
        }
365

    
366
  @Override
367
        public void putInClipboard(String data) {
368
                PluginServices.putInClipboard(data);
369
        }
370

    
371
        public Project getCurrentProject() {
372
                return ProjectManager.getInstance().getCurrentProject();
373
        }
374

    
375
    @Override
376
    public FLayer getCurrentLayer() {
377
        ViewDocument viewdoc = (ViewDocument) this.getActiveDocument(ViewManager.TYPENAME);
378
        if( viewdoc == null ) {
379
            return null;
380
        }
381
        MapContext mapContext = viewdoc.getMapContext();
382
        return mapContext.getLayers().getFirstActiveLayer();
383
    }
384
        
385
        public PreferencesNode getPreferences(String node) {
386
                if( node.equalsIgnoreCase("project")) {
387
                        return DefaultProject.getPreferences();
388
                }
389
        if( StringUtils.equalsIgnoreCase(node, "gvsig.foldering")){
390
            return new JavaPreferencesNode(node);
391
        }
392
                return new DefaultPreferencesNode(node);
393
        }
394

    
395
        public PreferencesNode getPreferences() {
396
                return new DefaultPreferencesNode();
397
        }
398

    
399
        public Version getVersion() {
400
        return version;
401
        }
402

    
403
        @Override
404
        public void close(boolean quietly) {
405
            Launcher.closeApplication(quietly);
406
        }
407

    
408
        public AboutManager getAbout() {
409
                AboutManager manager = AboutLocator.getManager();
410
                return manager;
411
        }
412

    
413
        public ColorTablesFactory getColorTablesFactory() {
414
                return SymbologySwingLocator.getSwingManager().getColorTablesFactory();
415
        }
416

    
417
        public void registerColorTablesFactory(ColorTablesFactory factory) {
418
                SymbologySwingLocator.getSwingManager().setColorTablesFactory(factory);
419
                
420
        }
421

    
422
    public IWindow getActiveWindow() {
423
        try {
424
            IWindow window = PluginServices.getMDIManager().getActiveWindow();
425
            return window;
426
        } catch (Exception ex) {
427
            return null;
428
        }
429
    }
430

    
431
    public Document getActiveDocument() {
432
            return this.getActiveDocument((Class<? extends Document>)null);
433
    }
434
    
435
    public Document getActiveDocument(String documentTypeName) {
436
        Document document = this.getActiveDocument();
437
        if( document!= null && document.getTypeName().equalsIgnoreCase(documentTypeName) ) {
438
            return document;
439
        }
440
        return null;
441
    }
442
    
443
    @Override
444
    public Document getActiveDocument(Class<? extends Document> documentClass) {
445
        Project project = this.getCurrentProject();
446
        if( project == null ) {
447
            return null;
448
        }
449
        return project.getActiveDocument(documentClass);
450
    }
451
    
452
    public IWindow getActiveWindow(Class<? extends Document> documentClass) {
453
        Project project = this.getCurrentProject();
454
        if( project == null ) {
455
            return null;
456
        }
457
        return project.getActiveWindow(documentClass);
458
    }
459
    
460

    
461
    public JComponent getActiveComponent(Class<? extends Document> documentClass) {
462
        Document document = this.getActiveDocument(documentClass);
463
        if (document == null) {
464
            return null;
465
        }
466
        return document.getMainComponent();
467
    }
468
    
469
   
470
    public IDocumentWindow getDocumentWindow(Document document) {
471
        Class<? extends IDocumentWindow> defaultDocumentClass =
472
            document.getFactory().getMainWindowClass();
473
        return (IDocumentWindow) this.getUIManager().getSingletonWindow(defaultDocumentClass, document);
474
    }
475

    
476
        public String getLocaleLanguage() {
477
                return Launcher.getAndamiConfig().getLocaleLanguage();
478
        }
479

    
480
        public void messageDialog(String message, String title, int messageType) {
481
                MainFrame main = PluginServices.getMainFrame();
482
                main.messageDialog(message, title, messageType);
483
        }
484

    
485
        public void messageDialog(String message, String[] messageArgs,
486
                        String title, int messageType) {
487
                MainFrame main = PluginServices.getMainFrame();
488
                main.messageDialog(message, messageArgs, title, messageType);
489
        }
490

    
491
        @Override
492
        public void messageDialog(String message, String[] messageArgs, String title, int messageType, String msgid) {
493
                MainFrame main = PluginServices.getMainFrame();
494
                main.messageDialog(message, messageArgs, title, messageType, msgid);
495
        }        
496

    
497
        @Override
498
        public int confirmDialog(String message, String title, int optionType,
499
                        int messageType) {
500
                MainFrame main = PluginServices.getMainFrame();
501
                return main.confirmDialog(message, title, optionType, messageType);
502
        }
503

    
504
        @Override
505
        public int confirmDialog(String message, String title, int optionType,
506
                        int messageType, String msgid) {
507
                MainFrame main = PluginServices.getMainFrame();
508
                return main.confirmDialog(message, title, optionType, messageType, msgid);
509
        }
510

    
511
        public String inputDialog(String message, String title, int messageType,
512
                        String initialValue) {
513
                MainFrame main = PluginServices.getMainFrame();
514
                return main.inputDialog(message, title, messageType, initialValue);
515
        }
516

    
517
        public String inputDialog(String message, String title) {
518
                MainFrame main = PluginServices.getMainFrame();
519
                return main.inputDialog(message, title);
520
        }
521

    
522
        public void showDialog(Component contents, String title) {
523
                MainFrame main = PluginServices.getMainFrame();
524
                main.showDialog(contents, title);
525
        }
526

    
527
        public Component createComponent(Class<? extends Component> theClass,
528
                        Object... parameters) {
529
                MainFrame main = PluginServices.getMainFrame();
530
                return main.createComponentWithParams(theClass, parameters);
531
        }
532

    
533
        public Component createComponentWithParams(
534
                        Class<? extends Component> theClass, Object[] parameters) {
535
                MainFrame main = PluginServices.getMainFrame();
536
                return main.createComponentWithParams(theClass, parameters);
537
        }
538

    
539

    
540
        public File[] showChooserDialog(
541
                        final String title,
542
                        final int type, // SAVE_DIALOG / OPEN_DIALOG
543
                        final int selectionMode, //    JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
544
                        final boolean multiselection, 
545
                        final File initialPath,
546
                        final FileFilter filter,
547
                        final boolean fileHidingEnabled
548
                        ) {
549
                MainFrame main = PluginServices.getMainFrame();
550
                return main.showChooserDialog(title, type, selectionMode, multiselection, initialPath, filter, fileHidingEnabled);
551
        }
552
        
553
        public ImmutablePair<File[], Charset> showChooserDialog(
554
                        final String title,
555
                        final int type, // SAVE_DIALOG / OPEN_DIALOG
556
                        final int selectionMode, //    JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
557
                        final boolean multiselection, 
558
                        final File initialPath,
559
                        final FileFilter filter,
560
                        final boolean fileHidingEnabled,
561
                        final boolean askCharset
562
                        ) {
563
                MainFrame main = PluginServices.getMainFrame();
564
                return main.showChooserDialog(title, type, selectionMode, multiselection, initialPath, filter, fileHidingEnabled, askCharset);
565
        }
566
        
567
        public File[] showChooserDialog(
568
                        final String title,
569
                        final int type, // SAVE_DIALOG / OPEN_DIALOG
570
                        final int selectionMode, //    JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
571
                        final boolean multiselection, 
572
                        final File initialPath,
573
                        final FileFilter filter,
574
                        final boolean fileHidingEnabled,
575
                        final JComponent accesory
576
                        ) {
577
                MainFrame main = PluginServices.getMainFrame();
578
                return main.showChooserDialog(title, type, selectionMode, multiselection, initialPath, filter, fileHidingEnabled, accesory);
579
        }
580

    
581
        public File[] showOpenDirectoryDialog(String title, File initialPath) {
582
                return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.DIRECTORIES_ONLY, false, initialPath, null, false);
583
        }
584

    
585
        
586
        public File[] showOpenFileDialog(String title, File initialPath) {
587
                return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
588
        }
589

    
590
        
591
        public File[] showSaveFileDialog(String title, File initialPath) {
592
                return showChooserDialog(title, JFileChooser.SAVE_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
593
        }
594

    
595
        @Override
596
        public void message(String message, int message_type) {
597
                MainFrame main = PluginServices.getMainFrame();
598
                if( main != null) {
599
                    main.message(message, message_type);
600
                }
601
        }        
602
        
603
        public String translate(String message, String... args) {
604
                return org.gvsig.i18n.Messages.translate(message, args);
605
        }
606
        
607
        public Component getRootComponent() {
608
                return (Component) PluginServices.getMainFrame();
609
        }
610

    
611
        public void refreshMenusAndToolBars() {
612
                PluginServices.getMainFrame().refreshControls();
613
        }
614

    
615
    public MainFrame getMainFrame() {
616
        return PluginServices.getMainFrame();
617
    }
618
    
619
        public void addMenu(ActionInfo action, String text) {
620
                MainFrame f = this.getMainFrame();
621
                f.addMenu(action,text);
622
        }
623

    
624
        @Override
625
        public void addTool(ActionInfo action, String toolBarName) {
626
                MainFrame f = this.getMainFrame();
627
                f.addTool(action,toolBarName);
628
                f.refreshControls();
629
        }
630
        
631
        @Override
632
        public void addSelectableTool(ActionInfo action, String toolBarName) {
633
                MainFrame f = this.getMainFrame();
634
                f.addSelectableTool(action,toolBarName,"unico",false);
635
                f.refreshControls();
636
        }
637
                
638
        public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText) {
639
            this.showTextDialog(mode, title, htmlText, null);
640
        }
641
        
642
        public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText, final HyperlinkListener hyperlinkListener) {
643
            if (!SwingUtilities.isEventDispatchThread()) {
644
                if( mode == WindowManager.MODE.DIALOG ) {
645
                    try {
646
                        SwingUtilities.invokeAndWait(new Runnable() {
647
                            public void run() {
648
                                showTextDialog(mode, title, htmlText,hyperlinkListener);
649
                            }
650
                        });
651
                    } catch (Exception ex) {
652
                        logger.warn("Can't show text dialog:\n"+htmlText,ex);
653
                    }
654
                } else {
655
                    SwingUtilities.invokeLater(new Runnable() {
656
                        public void run() {
657
                            showTextDialog(mode, title, htmlText,hyperlinkListener);
658
                        }
659
                    });
660
                }
661
                return;
662
            }
663
            InfoPanel.showPanel(title, mode, htmlText,hyperlinkListener);
664
        }
665

    
666
        @Override
667
        public TreeModel createProjectLayersTreeModel() {
668
            CompoundLayersTreeModel model = (CompoundLayersTreeModel) MapControlLocator.getMapControlManager().createCompoundLayersTreeModel();
669
            Project project = this.getCurrentProject();
670
            List<Document> views = project.getDocuments(ViewManager.TYPENAME);
671
            for (Document view : views) {
672
                model.addLayers( ((ViewDocument)view).getMapContext().getLayers() );
673
            }
674
            return model;
675
        }
676

    
677
    @Override
678
    public TreeModel createProjectStoresTreeModel() {
679
        CompoundStoresTreeModel model = MapControlLocator.getMapControlManager().createCompoundStoresTreeModel();
680
        Project project = this.getCurrentProject();
681
        List<Document> views = project.getDocuments(ViewManager.TYPENAME);
682
        for (Document view : views) {
683
            model.addLayers( ((ViewDocument)view).getMapContext().getLayers() );
684
        }
685
        return model;
686
    }
687

    
688
    @Override
689
    public Object getProperty(String name) {
690
        return this.psh.getProperty(name);
691
    }
692

    
693
    @Override
694
    public void setProperty(String name, Object value) {
695
        this.psh.setProperty(name, value);
696
    }
697

    
698
    @Override
699
    public Map<String, Object> getProperties() {
700
        return this.psh.getProperties();
701
    }
702

    
703
    @Override
704
    public void addPropertiesObserver(Observer o) {
705
        this.psh.addObserver(o);
706
    }
707

    
708
    @Override
709
    public void deletePropertiesObserver(Observer o) {
710
        this.psh.deleteObserver(o);
711
    }
712

    
713
    @Override
714
    public void deletePropertiesObservers() {
715
        this.psh.deleteObservers();
716
    }
717

    
718
    @Override
719
    public void refreshDocument(FeatureStore store) {
720
        if (store == null) {
721
            return;
722
        }
723
        refreshDocument(store.getParameters());
724
    }
725

    
726
    @Override
727
    public void refreshDocument(DataStoreParameters params) {
728
        if (params == null) {
729
            return;
730
        }
731
        if(!SwingUtilities.isEventDispatchThread()){
732
            SwingUtilities.invokeLater(() -> {
733
                refreshDocument(params);
734
            });
735
            return;
736
        }
737
        ProjectManager projectManager = this.getProjectManager();
738
        Project project = projectManager.getCurrentProject();
739
        for (Document doc : project.getDocuments()) {
740
            if (doc.contains(params)) {
741
                if (StringUtils.equals(doc.getTypeName(), ViewManager.TYPENAME)) {
742
                    ViewDocument view = (ViewDocument) doc;
743
                    for (Iterator<FLayer> it = view.deepiterator(); it.hasNext();) {
744
                        FLayer layer = it.next();
745
                        if (layer instanceof SingleLayer) {
746
                            DataStore layerStore = ((SingleLayer) layer).getDataStore();
747
                            if ( layerStore!=null && params.isTheSameStore(layerStore.getParameters())) {
748
                                try {
749
                                    layer.invalidate();
750
                                } catch (Exception ex) {
751
                                    logger.debug("Can't refresh layer "+layerStore.getFullName(), ex);
752
                                }
753
                            }
754
                        }
755
                    }
756
                }
757
                doc.refresh();
758
            }
759
        }
760
    }
761

    
762
    @Override
763
    public Object get(String key) {
764
        Object value = null;
765
        IWindow[] windows = this.getUIManager().getOrderedWindows();
766
        for (IWindow window : windows) {
767
            String title = window.getWindowInfo().getTitle();
768
            Object component = null;
769
            if( window instanceof PropertiesSupport ) {
770
                component = (JComponent) window;
771
            } else if( window instanceof ToolsWindowManager.Window ) {
772
                component = ((ToolsWindowManager.Window)window).getContents();
773
                if( component instanceof Dialog) {
774
                    component = ((Dialog)component).getContents();
775
                }
776
            }
777
            if( component instanceof PropertiesSupport ) {
778
                value = ((PropertiesSupport)component).getProperty(key);
779
                if( value!=null ) {
780
                    break;
781
                }
782
            } 
783
        }
784
        return value;
785
    }
786

    
787
    @Override
788
    public String makeTitle(String base, String docname, String docname2) {
789
        return ToolsSwingUtils.makeTitle(base, docname, docname2);
790
    }
791

    
792
}