source: josm/trunk/src/org/openstreetmap/josm/tools/Platform.java@ 13649

Last change on this file since 13649 was 13647, checked in by Don-vip, 6 years ago

see #16204 - Allow to start and close JOSM in WebStart sandbox mode (where every external access is denied). This was very useful to reproduce some very tricky bugs that occured in real life but were almost impossible to diagnose.

File size: 2.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.tools;
3
4import java.util.Locale;
5
6/**
7 * Enum listing the supported platforms (operating system families).
8 * @since 12776
9 */
10public enum Platform {
11
12 /**
13 * Unik-like platform. This is the default when the platform cannot be identified.
14 */
15 UNIXOID {
16 @Override
17 public <T> T accept(PlatformVisitor<T> visitor) {
18 return visitor.visitUnixoid();
19 }
20 },
21 /**
22 * Windows platform.
23 */
24 WINDOWS {
25 @Override
26 public <T> T accept(PlatformVisitor<T> visitor) {
27 return visitor.visitWindows();
28 }
29 },
30 /**
31 * macOS (previously OS X) platform.
32 */
33 OSX {
34 @Override
35 public <T> T accept(PlatformVisitor<T> visitor) {
36 return visitor.visitOsx();
37 }
38 };
39
40 private static volatile Platform platform;
41
42 /**
43 * Support for the visitor pattern.
44 * @param <T> type that will be the result of the visiting operation
45 * @param visitor the visitor
46 * @return result of the operation
47 */
48 public abstract <T> T accept(PlatformVisitor<T> visitor);
49
50 /**
51 * Identifies the current operating system family.
52 * @return the the current operating system family
53 */
54 public static Platform determinePlatform() {
55 if (platform == null) {
56 String os = Utils.getSystemProperty("os.name");
57 if (os == null) {
58 Logging.warn("Your operating system has no name, so I'm guessing its some kind of *nix.");
59 platform = Platform.UNIXOID;
60 } else if (os.toLowerCase(Locale.ENGLISH).startsWith("windows")) {
61 platform = Platform.WINDOWS;
62 } else if ("Linux".equals(os) || "Solaris".equals(os) ||
63 "SunOS".equals(os) || "AIX".equals(os) ||
64 "FreeBSD".equals(os) || "NetBSD".equals(os) || "OpenBSD".equals(os)) {
65 platform = Platform.UNIXOID;
66 } else if (os.toLowerCase(Locale.ENGLISH).startsWith("mac os x")) {
67 platform = Platform.OSX;
68 } else {
69 Logging.warn("I don't know your operating system '"+os+"', so I'm guessing its some kind of *nix.");
70 platform = Platform.UNIXOID;
71 }
72 }
73 return platform;
74 }
75
76}
Note: See TracBrowser for help on using the repository browser.