// License: GPL. For details, see Readme.txt file. package org.openstreetmap.gui.jmapviewer; import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.text.MessageFormat; import java.util.logging.Logger; public final class FeatureAdapter { private static BrowserAdapter browserAdapter = new DefaultBrowserAdapter(); private static TranslationAdapter translationAdapter = new DefaultTranslationAdapter(); private static LoggingAdapter loggingAdapter = new DefaultLoggingAdapter(); private FeatureAdapter() { // private constructor for utility classes } public interface BrowserAdapter { void openLink(String url); } public interface TranslationAdapter { String tr(String text, Object... objects); // TODO: more i18n functions } public interface LoggingAdapter { Logger getLogger(String name); } public static void registerBrowserAdapter(BrowserAdapter browserAdapter) { FeatureAdapter.browserAdapter = browserAdapter; } public static void registerTranslationAdapter(TranslationAdapter translationAdapter) { FeatureAdapter.translationAdapter = translationAdapter; } public static void registerLoggingAdapter(LoggingAdapter loggingAdapter) { FeatureAdapter.loggingAdapter = loggingAdapter; } public static void openLink(String url) { browserAdapter.openLink(url); } public static String tr(String text, Object... objects) { return translationAdapter.tr(text, objects); } public static Logger getLogger(String name) { return loggingAdapter.getLogger(name); } public static class DefaultBrowserAdapter implements BrowserAdapter { @Override public void openLink(String url) { if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { try { Desktop.getDesktop().browse(new URI(url)); } catch (IOException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } } else { System.err.println(tr("Opening link not supported on current platform (''{0}'')", url)); } } } public static class DefaultTranslationAdapter implements TranslationAdapter { @Override public String tr(String text, Object... objects) { return MessageFormat.format(text, objects); } } public static class DefaultLoggingAdapter implements LoggingAdapter { @Override public Logger getLogger(String name) { return Logger.getLogger(name); } } }