×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Java
Posted by: Massimo Zappino
Added: Jan 6, 2016 2:12 PM
Modified: Aug 27, 2017 3:33 PM
Views: 16
Tags: link browser open
  1. import java.awt.*;
  2. import java.io.IOException;
  3. import java.net.URI;
  4. import java.net.URISyntaxException;
  5. import java.util.ArrayList;
  6.  
  7. public class Browser {
  8.  
  9.     private final EnumOS os;
  10.  
  11.     public Browser() {
  12.         os = guessOS();
  13.     }
  14.  
  15.     public boolean openUrl(String url) {
  16.         try {
  17.             return openUrl(new URI(url));
  18.         } catch (URISyntaxException e) {
  19.             return false;
  20.         }
  21.     }
  22.  
  23.     public boolean openUrl(URI uri) {
  24.         if (Desktop.isDesktopSupported()) {
  25.             try {
  26.                 Desktop.getDesktop().browse(uri);
  27.             } catch (IOException e) {
  28.                 return false;
  29.             }
  30.         } else {
  31.             Rule rule = getOsBasedRule();
  32.             return rule.browse(uri);
  33.         }
  34.         return false;
  35.     }
  36.  
  37.  
  38.     private Rule getOsBasedRule() {
  39.         if (os.isLinux()) {
  40.             return new LinuxRule();
  41.         }
  42.  
  43.         if (os.isMac()) {
  44.             return new MacRule();
  45.         }
  46.  
  47.         if (os.isWindows()) {
  48.             return new WindowsRule();
  49.         }
  50.  
  51.         return new UnknownOsRule();
  52.  
  53.     }
  54.  
  55.  
  56.     private EnumOS guessOS() {
  57.         String s = System.getProperty("os.name").toLowerCase();
  58.  
  59.         if (s.contains("win")) {
  60.             return EnumOS.windows;
  61.         }
  62.  
  63.         if (s.contains("mac")) {
  64.             return EnumOS.macos;
  65.         }
  66.  
  67.         if (s.contains("solaris")) {
  68.             return EnumOS.solaris;
  69.         }
  70.  
  71.         if (s.contains("sunos")) {
  72.             return EnumOS.solaris;
  73.         }
  74.  
  75.         if (s.contains("linux")) {
  76.             return EnumOS.linux;
  77.         }
  78.  
  79.         if (s.contains("unix")) {
  80.             return EnumOS.linux;
  81.         } else {
  82.             return EnumOS.unknown;
  83.         }
  84.     }
  85.  
  86.     private class MacRule extends Rule {
  87.         @Override
  88.         public boolean browse(URI uri) {
  89.             return runCommand("open", "%s", uri.toString());
  90.         }
  91.     }
  92.  
  93.     private class LinuxRule extends Rule {
  94.         @Override
  95.         public boolean browse(URI uri) {
  96.             return runCommand("xdg-open", "%s", uri.toString());
  97.         }
  98.     }
  99.  
  100.     private class WindowsRule extends Rule {
  101.         @Override
  102.         public boolean browse(URI uri) {
  103.             return runCommand("explorer", "%s", uri.toString());
  104.         }
  105.     }
  106.  
  107.     private class UnknownOsRule extends Rule {
  108.         @Override
  109.         public boolean browse(URI uri) {
  110.             return false;
  111.         }
  112.     }
  113. }
  114.  
  115. enum EnumOS {
  116.     linux, macos, solaris, unknown, windows;
  117.  
  118.     public boolean isLinux() {
  119.  
  120.         return this == linux || this == solaris;
  121.     }
  122.  
  123.     public boolean isMac() {
  124.  
  125.         return this == macos;
  126.     }
  127.  
  128.     public boolean isWindows() {
  129.  
  130.         return this == windows;
  131.     }
  132. }
  133.  
  134.  
  135. abstract class Rule {
  136.     public abstract boolean browse(URI uri);
  137.  
  138.     public boolean runCommand(String command, String args, String file) {
  139.         String[] parts = prepareCommand(command, args, file);
  140.  
  141.         try {
  142.             Process p = Runtime.getRuntime().exec(parts);
  143.             if (p == null) return false;
  144.  
  145.             try {
  146.                 return p.exitValue() == 0;
  147.             } catch (IllegalThreadStateException e) {
  148.                 return true;
  149.             }
  150.         } catch (IOException e) {
  151.             return false;
  152.         }
  153.     }
  154.  
  155.     private String[] prepareCommand(String command, String args, String file) {
  156.  
  157.         java.util.List<String> parts = new ArrayList<String>();
  158.         parts.add(command);
  159.  
  160.         if (args != null) {
  161.             for (String s : args.split(" ")) {
  162.                 s = String.format(s, file); // put in the filename thing
  163.  
  164.                 parts.add(s.trim());
  165.             }
  166.         }
  167.  
  168.         return parts.toArray(new String[parts.size()]);
  169.     }
  170. }
  171.