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