001    // License: GPL. Copyright 2007 by Immanuel Scholz and others
002    package org.openstreetmap.josm.plugins;
003    
004    import java.util.List;
005    
006    import org.openstreetmap.josm.gui.MapFrame;
007    import org.openstreetmap.josm.gui.download.DownloadSelection;
008    import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
009    import org.openstreetmap.josm.tools.BugReportExceptionHandler;
010    
011    /**
012     * Helper class for the JOSM system to communicate with the plugin.
013     *
014     * This class should be of no interest for sole plugin writer.
015     *
016     * @author Immanuel.Scholz
017     */
018    public class PluginProxy extends Plugin {
019    
020        public final Object plugin;
021    
022        public PluginProxy(Object plugin, PluginInformation info) {
023            super(info);
024            this.plugin = plugin;
025        }
026    
027        @Override public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
028            try {
029                plugin.getClass().getMethod("mapFrameInitialized", MapFrame.class, MapFrame.class).invoke(plugin, oldFrame, newFrame);
030            } catch (NoSuchMethodException e) {
031            } catch (Exception e) {
032                BugReportExceptionHandler.handleException(new PluginException(this, getPluginInformation().name, e));
033            }
034        }
035    
036        @Override public PreferenceSetting getPreferenceSetting() {
037            try {
038                return (PreferenceSetting)plugin.getClass().getMethod("getPreferenceSetting").invoke(plugin);
039            } catch (NoSuchMethodException e) {
040                return null;
041            } catch (Exception e) {
042                BugReportExceptionHandler.handleException(new PluginException(this, getPluginInformation().name, e));
043            }
044            return null;
045        }
046    
047        @Override public void addDownloadSelection(List<DownloadSelection> list) {
048            try {
049                plugin.getClass().getMethod("addDownloadSelection", List.class).invoke(plugin, list);
050            } catch (NoSuchMethodException e) {
051                // ignore
052            } catch (Exception e) {
053                BugReportExceptionHandler.handleException(new PluginException(this, getPluginInformation().name, e));
054            }
055        }
056    }