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}