View Javadoc
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 }