1
2 package eu.simuline.util;
3
4 import java.util.Locale;
5
6 /**
7 * Enumerates the most important operating system
8 * and determines the current operating system.
9 * This is needed for jne/jna-applications,
10 * not when used with pure jave.
11 */
12 public enum DetOs {
13
14 /*----------------------------------------------------------------------*
15 * constants *
16 *----------------------------------------------------------------------*/
17
18 Win() {
19 boolean isThis() {
20 return osString().indexOf("win") >= 0;
21 }
22 },
23 // includes (li)nux but neither mac nor solaris
24 Nix() {
25 boolean isThis() {
26 String osString = osString();
27 return osString.indexOf("mac") >= 0
28 || osString.indexOf("nux") >= 0
29 || osString.indexOf("aix") >= 0;
30 }
31 },
32 Mac() {
33 boolean isThis() {
34 return osString().indexOf("mac") >= 0;
35 }
36 },
37 Solaris() {
38 boolean isThis() {
39 return osString().indexOf("sunos") >= 0;
40 }
41 };
42
43 /*----------------------------------------------------------------------*
44 * methods *
45 *----------------------------------------------------------------------*/
46
47 /**
48 * Returns whether this is the operating system currently running.
49 */
50 abstract boolean isThis();
51
52 /**
53 * Returns a string representation
54 * of the operating system currently running
55 * as given by property <code>os.name</code> in lower case.
56 *
57 * @see System#getProperty(String)
58 */
59 private static String osString() {
60 return System.getProperty("os.name").toLowerCase(Locale.ENGLISH);
61 }
62
63 /**
64 * Returns a representation of the operating system currently running.
65 *
66 * @throws IllegalStateException
67 * if the operating system cannot be detected.
68 */
69 public static DetOs getOpSys() {
70 DetOs detOs = null;
71 for (DetOs cand : DetOs.values()) {
72 assert cand != null;
73 if (cand.isThis()) {
74 if (detOs != null) {
75 throw new IllegalStateException
76 ("Two possible os: " + detOs + " and " + cand + ". ");
77 }
78 detOs = cand;
79 } // if
80 } // for
81
82 if (detOs == null) {
83 throw new IllegalStateException
84 ("Unknown os: " + osString() + ". ");
85 }
86
87 assert detOs != null;
88 return detOs;
89 }
90
91 public static void main(String[] args) {
92 System.out.println(osString());
93 System.out.println(System.getProperty("sun.arch.data.model"));
94 System.out.println(System.getProperties());
95
96 // {java.runtime.name=OpenJDK Runtime Environment,
97 // sun.boot.library.path=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/
98 // jre/lib/amd64,
99 // java.vm.version=24.0-b50,
100 // chooseClasspath=...
101 // java.vm.vendor=Oracle Corporation,
102 // java.vendor.url=http://java.oracle.com/,
103 // path.separator=:,
104 // java.vm.name=OpenJDK 64-Bit Server VM,
105 // file.encoding.pkg=sun.io,
106 // user.country=US,
107 // sun.java.launcher=SUN_STANDARD,
108 // sun.os.patch.level=unknown,
109 // java.vm.specification.name=Java Virtual Machine Specification,
110 // user.dir=...
111 // java.runtime.version=1.7.0_40-b31,
112 // java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment,
113 // java.endorsed.dirs=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/
114 // jre/lib/endorsed,
115 // os.arch=amd64,
116 // java.io.tmpdir=/tmp,
117 // line.separator=
118 // ,
119 // java.vm.specification.vendor=Oracle Corporation,
120 // os.name=Linux,
121 // sun.jnu.encoding=UTF-8,
122 // java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:
123 // /lib64:/lib:/usr/lib,
124 // java.specification.name=Java Platform API Specification,
125 // java.class.version=51.0,
126 // sun.management.compiler=HotSpot 64-Bit Tiered Compilers,
127 // os.version=3.7.10-1.16-desktop,
128 // user.home=/home/ernst,
129 // user.timezone=,
130 // java.awt.printerjob=sun.print.PSPrinterJob,
131 // file.encoding=UTF-8,
132 // java.specification.version=1.7,
133 // java.class.path=...
134 // user.name=ernst,
135 // java.vm.specification.version=1.7,
136 // sun.java.command=eu.simuline.util.DetOs,
137 // java.home=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre,
138 // sun.arch.data.model=64,
139 // user.language=en,
140 // java.specification.vendor=Oracle Corporation,
141 // awt.toolkit=sun.awt.X11.XToolkit,
142 // java.vm.info=mixed mode,
143 // java.version=1.7.0_40,
144 // java.ext.dirs=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/ext:
145 // /usr/java/packages/lib/ext,
146 // sun.boot.class.path=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/
147 // jre/lib/resources.jar:
148 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/rt.jar:
149 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0jre/lib/sunrsasign.jar:
150 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/jsse.jar:
151 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/jce.jar:
152 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/charsets.jar:
153 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/netx.jar:
154 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/plugin.jar:
155 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/rhino.jar:
156 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/jfr.jar:
157 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/classes,
158 // java.vendor=Oracle Corporation,
159 // sourcepath=...,
160 // file.separator=/,
161 // java.vendor.url.bug=http://bugreport.sun.com/bugreport/,
162 // sun.io.unicode.encoding=UnicodeLittl{java.runtime.name=
163 // OpenJDK Runtime Environment,
164 // sun.boot.library.path=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/
165 // jre/lib/amd64,
166 // java.vm.version=24.0-b50,
167 // chooseClasspath=...,
168 // java.vm.vendor=Oracle Corporation,
169 // java.vendor.url=http://java.oracle.com/,
170 // path.separator=:,
171 // java.vm.name=OpenJDK 64-Bit Server VM,
172 // file.encoding.pkg=sun.io,
173 // user.country=US,
174 // sun.java.launcher=SUN_STANDARD,
175 // sun.os.patch.level=unknown,
176 // java.vm.specification.name=Java Virtual Machine Specification,
177 // user.dir=...,
178 // java.runtime.version=1.7.0_40-b31,
179 // java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment,
180 // java.endorsed.dirs=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/
181 // jre/lib/endorsed,
182 // os.arch=amd64,
183 // java.io.tmpdir=/tmp,
184 // line.separator=
185 // ,
186 // java.vm.specification.vendor=Oracle Corporation,
187 // os.name=Linux,
188 // sun.jnu.encoding=UTF-8,
189 // java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:
190 // /lib64:/lib:/usr/lib,
191 // java.specification.name=Java Platform API Specification,
192 // java.class.version=51.0,
193 // sun.management.compiler=HotSpot 64-Bit Tiered Compilers,
194 // os.version=3.7.10-1.16-desktop,
195 // user.home=/home/ernst,
196 // user.timezone=,
197 // java.awt.printerjob=sun.print.PSPrinterJob,
198 // file.encoding=UTF-8,
199 // java.specification.version=1.7,
200 // java.class.path=/...,
201 // user.name=ernst,
202 // java.vm.specification.version=1.7,
203 // sun.java.command=eu.simuline.util.DetOs,
204 // java.home=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre,
205 // sun.arch.data.model=64,
206 // user.language=en,
207 // java.specification.vendor=Oracle Corporation,
208 // awt.toolkit=sun.awt.X11.XToolkit,
209 // java.vm.info=mixed mode,
210 // java.version=1.7.0_40,
211 // java.ext.dirs=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/ext:
212 // /usr/java/packages/lib/ext,
213 // sun.boot.class.path=/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/
214 // jre/lib/resources.jar:
215 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/rt.jar:
216 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/sunrsasign.jar:
217 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/jsse.jar:
218 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/jce.jar:
219 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/charsets.jar:
220 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/netx.jar:
221 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/plugin.jar:
222 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/rhino.jar:
223 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/jfr.jar:
224 // /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/classes,
225 // java.vendor=Oracle Corporation,
226 // sourcepath=...,
227 // file.separator=/,
228 // java.vendor.url.bug=http://bugreport.sun.com/bugreport/,
229 // sun.io.unicode.encoding=UnicodeLittle,
230 // sun.cpu.endian=little,
231 // sun.cpu.isalist=}e,
232 // sun.cpu.endian=little,
233 // sun.cpu.isalist=}
234 }
235
236 }