001// License: GPL. For details, see Readme.txt file.
002package org.openstreetmap.gui.jmapviewer;
003
004import java.awt.Desktop;
005import java.io.IOException;
006import java.net.URI;
007import java.net.URISyntaxException;
008import java.text.MessageFormat;
009
010public class FeatureAdapter {
011
012    public static interface BrowserAdapter {
013        void openLink(String url);
014    }
015
016    public static interface TranslationAdapter {
017        String tr(String text, Object... objects);
018        // TODO: more i18n functions
019    }
020
021    private static BrowserAdapter browserAdapter = new DefaultBrowserAdapter();
022    private static TranslationAdapter translationAdapter = new DefaultTranslationAdapter();
023
024    public static void registerBrowserAdapter(BrowserAdapter browserAdapter) {
025        FeatureAdapter.browserAdapter = browserAdapter;
026    }
027
028    public static void registerTranslationAdapter(TranslationAdapter translationAdapter) {
029        FeatureAdapter.translationAdapter = translationAdapter;
030    }
031
032    public static void openLink(String url) {
033        browserAdapter.openLink(url);
034    }
035
036    public static String tr(String text, Object... objects) {
037        return translationAdapter.tr(text, objects);
038    }
039
040    public static class DefaultBrowserAdapter implements BrowserAdapter {
041        @Override
042        public void openLink(String url) {
043            if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
044                try {
045                    Desktop.getDesktop().browse(new URI(url));
046                } catch (IOException e) {
047                    e.printStackTrace();
048                } catch (URISyntaxException e) {
049                    e.printStackTrace();
050                }
051            } else {
052                System.err.println(tr("Opening link not supported on current platform (''{0}'')", url));
053            }
054        }
055    }
056
057    public static class DefaultTranslationAdapter implements TranslationAdapter {
058        @Override
059        public String tr(String text, Object... objects) {
060            return MessageFormat.format(text, objects);
061        }
062    }
063}