aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/com/vaadin/launcher/util/BrowserLauncher.java
blob: 04c6a46e64b7e3da55761d9ae613eeb375bfc6f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/* 
 * Copyright 2000-2014 Vaadin Ltd.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.vaadin.launcher.util;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * This class opens default browser for DemoLauncher class. Default browser is
 * detected by the operating system.
 * 
 */
public class BrowserLauncher {

    /**
     * Open browser on specified URL.
     * 
     * @param url
     */
    public static void openBrowser(String url) {

        final Runtime runtime = Runtime.getRuntime();
        boolean started = false;

        final String os = System.getProperty("os.name", "windows")
                .toLowerCase();

        // Linux
        if (os.indexOf("linux") >= 0) {
            // See if the default browser is Konqueror by resolving the symlink.
            boolean isDefaultKonqueror = false;
            try {
                // Find out the location of the x-www-browser link from path.
                Process process = runtime.exec("which x-www-browser");
                BufferedInputStream ins = new BufferedInputStream(
                        process.getInputStream());
                BufferedReader bufreader = new BufferedReader(
                        new InputStreamReader(ins));
                String defaultLinkPath = bufreader.readLine();
                ins.close();

                // The path is null if the link did not exist.
                if (defaultLinkPath != null) {
                    // See if the default browser is Konqueror.
                    File file = new File(defaultLinkPath);
                    String canonical = file.getCanonicalPath();
                    if (canonical.indexOf("konqueror") != -1) {
                        isDefaultKonqueror = true;
                    }
                }
            } catch (IOException e1) {
                // The symlink was probably not found, so this is ok.
            }

            // Try x-www-browser, which is symlink to the default browser,
            // except if we found that it is Konqueror.
            if (!started && !isDefaultKonqueror) {
                try {
                    runtime.exec("x-www-browser " + url);
                    started = true;
                } catch (final IOException e) {
                }
            }

            // Try firefox
            if (!started) {
                try {
                    runtime.exec("firefox " + url);
                    started = true;
                } catch (final IOException e) {
                }
            }

            // Try mozilla
            if (!started) {
                try {
                    runtime.exec("mozilla " + url);
                    started = true;
                } catch (final IOException e) {
                }
            }

            // Try konqueror
            if (!started) {
                try {
                    runtime.exec("konqueror " + url);
                    started = true;
                } catch (final IOException e) {
                }
            }
        }

        // OS X
        if (os.indexOf("mac os x") >= 0) {

            // Try open
            if (!started) {
                try {
                    runtime.exec("open " + url);
                    started = true;
                } catch (final IOException e) {
                }
            }
        }

        // Try cmd /start command on windows
        if (os.indexOf("win") >= 0) {
            if (!started) {
                try {
                    runtime.exec("cmd /c start " + url);
                    started = true;
                } catch (final IOException e) {
                }
            }
        }

        if (!started) {
            System.out.println("Failed to open browser. Please go to " + url);
        }
    }

}