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

History | View | Annotate | Download (20.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

    
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

    
41
import org.cresques.cts.IProjection;
42
import org.gvsig.about.AboutLocator;
43
import org.gvsig.about.AboutManager;
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.mdiFrame.MainFrame;
48
import org.gvsig.andami.ui.mdiManager.IWindow;
49
import org.gvsig.andami.ui.mdiManager.MDIManager;
50
import org.gvsig.app.ApplicationManager;
51
import org.gvsig.app.PreferencesNode;
52
import org.gvsig.app.extension.Version;
53
import org.gvsig.app.extension.develtools.InfoPanel;
54
import org.gvsig.app.gui.WizardPanel;
55
import org.gvsig.app.prepareAction.PrepareContext;
56
import org.gvsig.app.prepareAction.PrepareContextView;
57
import org.gvsig.app.prepareAction.PrepareDataStore;
58
import org.gvsig.app.prepareAction.PrepareDataStoreParameters;
59
import org.gvsig.app.prepareAction.PrepareLayer;
60
import org.gvsig.app.project.DefaultProject;
61
import org.gvsig.app.project.Project;
62
import org.gvsig.app.project.ProjectManager;
63
import org.gvsig.app.project.documents.Document;
64
import org.gvsig.app.project.documents.gui.IDocumentWindow;
65
import org.gvsig.app.project.documents.view.ViewDocument;
66
import org.gvsig.app.project.documents.view.ViewManager;
67
import org.gvsig.fmap.crs.CRSFactory;
68
import org.gvsig.fmap.dal.DALLocator;
69
import org.gvsig.fmap.dal.DataManager;
70
import org.gvsig.fmap.dal.DataStore;
71
import org.gvsig.fmap.dal.DataStoreParameters;
72
import org.gvsig.fmap.geom.GeometryLocator;
73
import org.gvsig.fmap.geom.GeometryManager;
74
import org.gvsig.fmap.mapcontext.MapContextLocator;
75
import org.gvsig.fmap.mapcontext.MapContextManager;
76
import org.gvsig.fmap.mapcontext.layers.FLayer;
77
import org.gvsig.fmap.mapcontrol.CompoundLayersTreeModel;
78
import org.gvsig.fmap.mapcontrol.MapControlLocator;
79
import org.gvsig.gui.ColorTablesFactory;
80
import org.gvsig.symbology.swing.SymbologySwingLocator;
81
import org.gvsig.tools.ToolsLocator;
82
import org.gvsig.tools.dataTypes.DataTypesManager;
83
import org.gvsig.tools.dispose.DisposableManager;
84
import org.gvsig.tools.dynobject.DynObjectManager;
85
import org.gvsig.tools.extensionpoint.ExtensionPoint;
86
import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
87
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
88
import org.gvsig.tools.observer.Observer;
89
import org.gvsig.tools.persistence.PersistenceManager;
90
import org.gvsig.tools.swing.api.ToolsSwingLocator;
91
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
92
import org.gvsig.tools.swing.icontheme.IconThemeManager;
93
import org.gvsig.tools.util.PropertiesSupportHelper;
94
import org.slf4j.Logger;
95
import org.slf4j.LoggerFactory;
96

    
97

    
98

    
99

    
100
/**
101
 * @author jmvivo
102
 *
103
 */
104
public class DefaultApplicationManager implements ApplicationManager {
105

    
106
    @SuppressWarnings("unused")
107
        private static Logger logger = LoggerFactory.getLogger(DefaultApplicationManager.class);
108
    
109
        private static final String EPNAME_PREPARE_OPEN_DATASTORE = "org.gvsig.datastore.open.prepare"; //"PrepareOpenDataStore";
110
        private static final String EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS = "org.gvsig.datastoreparameters.open.prepare"; //"PrepareOpenDataStoreParameters";
111
        private static final String EPNAME_PREPARE_OPEN_LAYER = "org.gvsig.layer.open.prepare"; // "PrepareOpenLayer";
112

    
113
        private static final String EPNAME_ADD_TABLE_WIZARD = "AddLayerWizard";
114

    
115
        private ExtensionPointManager epManager;
116

    
117
    private Version version;
118
    private PropertiesSupportHelper psh;
119

    
120
    public DefaultApplicationManager() {
121
        this.psh = new PropertiesSupportHelper();
122
        
123
        epManager = ToolsLocator.getExtensionPointManager();
124
        epManager.add(EPNAME_PREPARE_OPEN_DATASTORE,
125
                "Actions to do when open a DataStore");
126
        epManager.add(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS,
127
                "Actions to do before open a DataStore with parameters");
128
        epManager.add(EPNAME_PREPARE_OPEN_LAYER,
129
                "Actions to do after create a Layer");
130
        epManager.add(EPNAME_ADD_TABLE_WIZARD,
131
                "Wizards to add new document table");
132

    
133
        try {
134
            version = new Version();
135
        } catch(Exception ex) {
136
            logger.warn("Can't locate application version.");
137
        }
138
    }
139

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

    
160
        /* (non-Javadoc)
161
         * @see org.gvsig.appGvSigManager#prepareOpenDataStoreParameters(org.gvsig.fmap.dal.DataStoreParameters)
162
         */
163
        @SuppressWarnings("unchecked")
164
        public DataStoreParameters prepareOpenDataStoreParameters(
165
                        DataStoreParameters storeParameters, PrepareContext context)
166
                        throws Exception {
167

    
168
                ExtensionPoint ep = epManager
169
                                .get(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS);
170
                if (ep.getCount() == 0) {
171
                        return storeParameters;
172
                }
173
                DataStoreParameters result = storeParameters;
174
                Iterator<ExtensionPoint.Extension> iter = ep.iterator();
175
                PrepareDataStoreParameters prepare;
176
                while (iter.hasNext()) {
177
                        prepare = (PrepareDataStoreParameters) iter.next().create();
178
                        result = prepare.prepare(storeParameters, context);
179
                }
180

    
181
                return result;
182
        }
183
        
184
        /*
185
         * (non-Javadoc)
186
         * @see org.gvsig.app.ApplicationManager#prepareOpenDataStoreParameters(java.util.List, org.gvsig.app.prepareAction.PrepareContext)
187
         */
188
        @SuppressWarnings("unchecked")
189
        public List<DataStoreParameters> prepareOpenDataStoreParameters(
190
                        List<DataStoreParameters> storeParameters, PrepareContext context)
191
                        throws Exception {
192

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

    
234
                return result;
235
        }
236

    
237
        public void registerPrepareOpenDataStore(PrepareDataStore action) {
238
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_DATASTORE);
239
                ep.append(action.getName(), action.getDescription(), action);
240
        }
241

    
242
        public void registerPrepareOpenDataStoreParameters(
243
                        PrepareDataStoreParameters action) {
244
                ExtensionPoint ep = epManager
245
                                .get(EPNAME_PREPARE_OPEN_DATASTOREPARAMETERS);
246
                ep.append(action.getName(), action.getDescription(), action);
247

    
248

    
249
        }
250

    
251
        @SuppressWarnings("unchecked")
252
        public FLayer prepareOpenLayer(FLayer layer,
253
                        PrepareContextView context)
254
                        throws Exception {
255

    
256
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_LAYER);
257

    
258
                if (ep.getCount() == 0) {
259
                        return layer;
260
                }
261
                FLayer result = layer;
262
                Iterator<ExtensionPoint.Extension> iter = ep.iterator();
263
                PrepareLayer prepare;
264
                while (iter.hasNext()) {
265
                        prepare = (PrepareLayer) iter.next().create();
266
                        result = prepare.prepare(result, context);
267
                }
268

    
269
                return result;
270

    
271
        }
272

    
273
        public void registerPrepareOpenLayer(PrepareLayer action) {
274
                ExtensionPoint ep = epManager.get(EPNAME_PREPARE_OPEN_LAYER);
275
                ep.append(action.getName(), action.getDescription(), action);
276
        }
277

    
278
        public void registerAddTableWizard(String name, String description,
279
                        Class<? extends WizardPanel> wpClass) {
280
                ExtensionPoint ep = epManager.get(EPNAME_ADD_TABLE_WIZARD);
281
                ep.append(name, description, wpClass);
282
        }
283

    
284
        @SuppressWarnings("unchecked")
285
        public List<WizardPanel> getWizardPanels() throws Exception {
286
                ExtensionPoint ep = epManager.get(EPNAME_ADD_TABLE_WIZARD);
287
                List<WizardPanel> result = new ArrayList<WizardPanel>();
288
                Iterator<Extension> iter = ep.iterator();
289
                while (iter.hasNext()) {
290
                        result.add((WizardPanel) iter.next().create());
291
                }
292
                return result;
293
        }
294

    
295
        public DataManager getDataManager() {
296
                return DALLocator.getDataManager();
297
        }
298

    
299
        public GeometryManager getGeometryManager() {
300
                return GeometryLocator.getGeometryManager();
301
        }
302

    
303
        public PersistenceManager getPersistenceManager() {
304
                return ToolsLocator.getPersistenceManager();
305
        }
306

    
307
        public DisposableManager getDisposableManager() {
308
                return ToolsLocator.getDisposableManager();
309
        }
310

    
311
        public DynObjectManager getDynObjectManager() {
312
                return ToolsLocator.getDynObjectManager();
313
        }
314

    
315
        public ExtensionPointManager getExtensionPointManager() {
316
                return ToolsLocator.getExtensionPointManager();
317
        }
318

    
319
        public ProjectManager getProjectManager() {
320
                return ProjectManager.getInstance();
321
        }
322

    
323
        public MDIManager getUIManager() {
324
                return PluginServices.getMDIManager();
325
        }
326

    
327
        public MapContextManager getMapContextManager() {
328
                return MapContextLocator.getMapContextManager();
329
        }
330

    
331
        public DataTypesManager getDataTypesManager() {
332
                return ToolsLocator.getDataTypesManager();
333
        }
334
        
335
        public IProjection getCRS(String code) {
336
                return CRSFactory.getCRS(code);
337
        }
338

    
339
        public IconThemeManager getIconThemeManager() {
340
                return ToolsSwingLocator.getIconThemeManager();
341
        }
342

    
343
        public String getArgument(String name) {
344
                return PluginServices.getArgumentByName(name);
345
        }
346

    
347
        public String[] getArguments() {
348
                return PluginServices.getArguments();
349
        }
350

    
351
  @Override
352
        public String getFromClipboard() {
353
                return PluginServices.getFromClipboard();
354
        }
355

    
356
  @Override
357
        public void putInClipboard(String data) {
358
                PluginServices.putInClipboard(data);
359
        }
360

    
361
        public Project getCurrentProject() {
362
                return ProjectManager.getInstance().getCurrentProject();
363
        }
364

    
365
        public PreferencesNode getPreferences(String node) {
366
                if( node.equalsIgnoreCase("project")) {
367
                        return DefaultProject.getPreferences();
368
                }
369
                return new DefaultPreferencesNode(node);
370
        }
371

    
372
        public PreferencesNode getPreferences() {
373
                return new DefaultPreferencesNode();
374
        }
375

    
376
        public Version getVersion() {
377
        return version;
378
        }
379
        
380
        public AboutManager getAbout() {
381
                AboutManager manager = AboutLocator.getManager();
382
                return manager;
383
        }
384

    
385
        public ColorTablesFactory getColorTablesFactory() {
386
                return SymbologySwingLocator.getSwingManager().getColorTablesFactory();
387
        }
388

    
389
        public void registerColorTablesFactory(ColorTablesFactory factory) {
390
                SymbologySwingLocator.getSwingManager().setColorTablesFactory(factory);
391
                
392
        }
393

    
394
    public IWindow getActiveWindow() {
395
        try {
396
            IWindow window = PluginServices.getMDIManager().getActiveWindow();
397
            return window;
398
        } catch (Exception ex) {
399
            return null;
400
        }
401
    }
402

    
403
    public Document getActiveDocument() {
404
            return this.getActiveDocument((Class<? extends Document>)null);
405
    }
406
    
407
    public Document getActiveDocument(String documentTypeName) {
408
        Document document = this.getActiveDocument();
409
        if( document!= null && document.getTypeName().equalsIgnoreCase(documentTypeName) ) {
410
            return document;
411
        }
412
        return null;
413
    }
414
    
415
    public Document getActiveDocument(Class<? extends Document> documentClass) {
416
        Project project = this.getCurrentProject();
417
        if( project == null ) {
418
            return null;
419
        }
420
        return project.getActiveDocument(documentClass);
421
    }
422

    
423
    public JComponent getActiveComponent(Class<? extends Document> documentClass) {
424
        Document document = this.getActiveDocument(documentClass);
425
        if (document == null) {
426
            return null;
427
        }
428
        return document.getMainComponent();
429
    }
430
    
431
   
432
    public IDocumentWindow getDocumentWindow(Document document) {
433
        Class<? extends IDocumentWindow> defaultDocumentClass =
434
            document.getFactory().getMainWindowClass();
435
        return (IDocumentWindow) this.getUIManager().getSingletonWindow(defaultDocumentClass, document);
436
    }
437

    
438
        public String getLocaleLanguage() {
439
                return Launcher.getAndamiConfig().getLocaleLanguage();
440
        }
441

    
442
        public void messageDialog(String message, String title, int messageType) {
443
                MainFrame main = PluginServices.getMainFrame();
444
                main.messageDialog(message, title, messageType);
445
        }
446

    
447
        public void messageDialog(String message, String[] messageArgs,
448
                        String title, int messageType) {
449
                MainFrame main = PluginServices.getMainFrame();
450
                main.messageDialog(message, messageArgs, title, messageType);
451
        }
452

    
453
        @Override
454
        public void messageDialog(String message, String[] messageArgs, String title, int messageType, String msgid) {
455
                MainFrame main = PluginServices.getMainFrame();
456
                main.messageDialog(message, messageArgs, title, messageType, msgid);
457
        }        
458

    
459
        @Override
460
        public int confirmDialog(String message, String title, int optionType,
461
                        int messageType) {
462
                MainFrame main = PluginServices.getMainFrame();
463
                return main.confirmDialog(message, title, optionType, messageType);
464
        }
465

    
466
        @Override
467
        public int confirmDialog(String message, String title, int optionType,
468
                        int messageType, String msgid) {
469
                MainFrame main = PluginServices.getMainFrame();
470
                return main.confirmDialog(message, title, optionType, messageType, msgid);
471
        }
472

    
473
        public String inputDialog(String message, String title, int messageType,
474
                        String initialValue) {
475
                MainFrame main = PluginServices.getMainFrame();
476
                return main.inputDialog(message, title, messageType, initialValue);
477
        }
478

    
479
        public String inputDialog(String message, String title) {
480
                MainFrame main = PluginServices.getMainFrame();
481
                return main.inputDialog(message, title);
482
        }
483

    
484
        public void showDialog(Component contents, String title) {
485
                MainFrame main = PluginServices.getMainFrame();
486
                main.showDialog(contents, title);
487
        }
488

    
489
        public Component createComponent(Class<? extends Component> theClass,
490
                        Object... parameters) {
491
                MainFrame main = PluginServices.getMainFrame();
492
                return main.createComponentWithParams(theClass, parameters);
493
        }
494

    
495
        public Component createComponentWithParams(
496
                        Class<? extends Component> theClass, Object[] parameters) {
497
                MainFrame main = PluginServices.getMainFrame();
498
                return main.createComponentWithParams(theClass, parameters);
499
        }
500

    
501

    
502
        public File[] showChooserDialog(
503
                        final String title,
504
                        final int type, // SAVE_DIALOG / OPEN_DIALOG
505
                        final int selectionMode, //    JFileChooser.FILES_ONLY, JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_AND_DIRECTORIES
506
                        final boolean multiselection, 
507
                        final File initialPath,
508
                        final FileFilter filter,
509
                        final boolean fileHidingEnabled
510
                        ) {
511
                MainFrame main = PluginServices.getMainFrame();
512
                return main.showChooserDialog(title, type, selectionMode, multiselection, initialPath, filter, fileHidingEnabled);
513
        }
514
        
515
        public File[] showOpenDirectoryDialog(String title, File initialPath) {
516
                return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.DIRECTORIES_ONLY, false, initialPath, null, false);
517
        }
518

    
519
        
520
        public File[] showOpenFileDialog(String title, File initialPath) {
521
                return showChooserDialog(title, JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
522
        }
523

    
524
        
525
        public File[] showSaveFileDialog(String title, File initialPath) {
526
                return showChooserDialog(title, JFileChooser.SAVE_DIALOG, JFileChooser.FILES_ONLY, false, initialPath, null, false);
527
        }
528

    
529
        @Override
530
        public void message(String message, int message_type) {
531
                MainFrame main = PluginServices.getMainFrame();
532
                main.message(message, message_type);
533
        }        
534
        
535
        public String translate(String message, String... args) {
536
                return org.gvsig.i18n.Messages.translate(message, args);
537
        }
538
        
539
        public Component getRootComponent() {
540
                return (Component) PluginServices.getMainFrame();
541
        }
542

    
543
        public void refreshMenusAndToolBars() {
544
                PluginServices.getMainFrame().refreshControls();
545
        }
546

    
547
    public MainFrame getMainFrame() {
548
        return PluginServices.getMainFrame();
549
    }
550
    
551
        public void addMenu(ActionInfo action, String text) {
552
                MainFrame f = this.getMainFrame();
553
                f.addMenu(action,text);
554
        }
555

    
556
        @Override
557
        public void addTool(ActionInfo action, String toolBarName) {
558
                MainFrame f = this.getMainFrame();
559
                f.addTool(action,toolBarName);
560
                f.refreshControls();
561
        }
562
        
563
        @Override
564
        public void addSelectableTool(ActionInfo action, String toolBarName) {
565
                MainFrame f = this.getMainFrame();
566
                f.addSelectableTool(action,toolBarName,"unico",false);
567
                f.refreshControls();
568
        }
569
                
570
        public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText) {
571
            this.showTextDialog(mode, title, htmlText, null);
572
        }
573
        
574
        public void showTextDialog(final WindowManager.MODE mode, final String title, final String htmlText, final HyperlinkListener hyperlinkListener) {
575
            if (!SwingUtilities.isEventDispatchThread()) {
576
                if( mode == WindowManager.MODE.DIALOG ) {
577
                    try {
578
                        SwingUtilities.invokeAndWait(new Runnable() {
579
                            public void run() {
580
                                showTextDialog(mode, title, htmlText,hyperlinkListener);
581
                            }
582
                        });
583
                    } catch (Exception ex) {
584
                        logger.warn("Can't show text dialog:\n"+htmlText,ex);
585
                    }
586
                } else {
587
                    SwingUtilities.invokeLater(new Runnable() {
588
                        public void run() {
589
                            showTextDialog(mode, title, htmlText,hyperlinkListener);
590
                        }
591
                    });
592
                }
593
                return;
594
            }
595
            InfoPanel.showPanel(title, mode, htmlText,hyperlinkListener);
596
        }
597

    
598
        @Override
599
        public TreeModel createProjectLayersTreeModel() {
600
            CompoundLayersTreeModel model = (CompoundLayersTreeModel) MapControlLocator.getMapControlManager().createCompoundLayersTreeModel();
601
            Project project = this.getCurrentProject();
602
            List<Document> views = project.getDocuments(ViewManager.TYPENAME);
603
            for (Document view : views) {
604
                model.addLayers( ((ViewDocument)view).getMapContext().getLayers() );
605
            }
606
            return model;
607
        }
608

    
609
    @Override
610
    public Object getProperty(String name) {
611
        return this.psh.getProperty(name);
612
    }
613

    
614
    @Override
615
    public void setProperty(String name, Object value) {
616
        this.psh.setProperty(name, value);
617
    }
618

    
619
    @Override
620
    public Map<String, Object> getProperties() {
621
        return this.psh.getProperties();
622
    }
623

    
624
    @Override
625
    public void addPropertiesObserver(Observer o) {
626
        this.psh.addObserver(o);
627
    }
628

    
629
    @Override
630
    public void deletePropertiesObserver(Observer o) {
631
        this.psh.deleteObserver(o);
632
    }
633

    
634
    @Override
635
    public void deletePropertiesObservers() {
636
        this.psh.deleteObservers();
637
    }
638
    
639
}