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

History | View | Annotate | Download (20.7 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.Arguments;
45
import org.gvsig.andami.Launcher;
46
import org.gvsig.andami.PluginServices;
47
import org.gvsig.andami.actioninfo.ActionInfo;
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.geom.GeometryLocator;
74
import org.gvsig.fmap.geom.GeometryManager;
75
import org.gvsig.fmap.mapcontext.MapContextLocator;
76
import org.gvsig.fmap.mapcontext.MapContextManager;
77
import org.gvsig.fmap.mapcontext.layers.FLayer;
78
import org.gvsig.fmap.mapcontrol.CompoundLayersTreeModel;
79
import org.gvsig.fmap.mapcontrol.MapControlLocator;
80
import org.gvsig.gui.ColorTablesFactory;
81
import org.gvsig.symbology.swing.SymbologySwingLocator;
82
import org.gvsig.tools.ToolsLocator;
83
import org.gvsig.tools.dataTypes.DataTypesManager;
84
import org.gvsig.tools.dispose.DisposableManager;
85
import org.gvsig.tools.dynobject.DynObjectManager;
86
import org.gvsig.tools.extensionpoint.ExtensionPoint;
87
import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
88
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
89
import org.gvsig.tools.observer.Observer;
90
import org.gvsig.tools.persistence.PersistenceManager;
91
import org.gvsig.tools.swing.api.ToolsSwingLocator;
92
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
93
import org.gvsig.tools.swing.icontheme.IconThemeManager;
94
import org.gvsig.tools.util.PropertiesSupportHelper;
95
import org.slf4j.Logger;
96
import org.slf4j.LoggerFactory;
97

    
98

    
99

    
100

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

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

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

    
116
        private ExtensionPointManager epManager;
117

    
118
    private Version version;
119
    private PropertiesSupportHelper psh;
120

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

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

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

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

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

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

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

    
235
                return result;
236
        }
237

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

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

    
249

    
250
        }
251

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

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

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

    
270
                return result;
271

    
272
        }
273

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
344
        @Override
345
        public Arguments getArguments() {
346
                return Launcher.getArguments();
347
        }
348

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

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

    
359
        public Project getCurrentProject() {
360
                return ProjectManager.getInstance().getCurrentProject();
361
        }
362

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

    
370
        public PreferencesNode getPreferences() {
371
                return new DefaultPreferencesNode();
372
        }
373

    
374
        public Version getVersion() {
375
        return version;
376
        }
377

    
378
        @Override
379
        public void close(boolean quietly) {
380
            Launcher.closeApplication(quietly);
381
        }
382

    
383
        public AboutManager getAbout() {
384
                AboutManager manager = AboutLocator.getManager();
385
                return manager;
386
        }
387

    
388
        public ColorTablesFactory getColorTablesFactory() {
389
                return SymbologySwingLocator.getSwingManager().getColorTablesFactory();
390
        }
391

    
392
        public void registerColorTablesFactory(ColorTablesFactory factory) {
393
                SymbologySwingLocator.getSwingManager().setColorTablesFactory(factory);
394
                
395
        }
396

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

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

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

    
441
        public String getLocaleLanguage() {
442
                return Launcher.getAndamiConfig().getLocaleLanguage();
443
        }
444

    
445
        public void messageDialog(String message, String title, int messageType) {
446
                MainFrame main = PluginServices.getMainFrame();
447
                main.messageDialog(message, title, messageType);
448
        }
449

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

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

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

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

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

    
482
        public String inputDialog(String message, String title) {
483
                MainFrame main = PluginServices.getMainFrame();
484
                return main.inputDialog(message, title);
485
        }
486

    
487
        public void showDialog(Component contents, String title) {
488
                MainFrame main = PluginServices.getMainFrame();
489
                main.showDialog(contents, title);
490
        }
491

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

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

    
504

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

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

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

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

    
546
        public void refreshMenusAndToolBars() {
547
                PluginServices.getMainFrame().refreshControls();
548
        }
549

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

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

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

    
612
    @Override
613
    public Object getProperty(String name) {
614
        return this.psh.getProperty(name);
615
    }
616

    
617
    @Override
618
    public void setProperty(String name, Object value) {
619
        this.psh.setProperty(name, value);
620
    }
621

    
622
    @Override
623
    public Map<String, Object> getProperties() {
624
        return this.psh.getProperties();
625
    }
626

    
627
    @Override
628
    public void addPropertiesObserver(Observer o) {
629
        this.psh.addObserver(o);
630
    }
631

    
632
    @Override
633
    public void deletePropertiesObserver(Observer o) {
634
        this.psh.deleteObserver(o);
635
    }
636

    
637
    @Override
638
    public void deletePropertiesObservers() {
639
        this.psh.deleteObservers();
640
    }
641
    
642
}