001 /*
002 * Java Genetic Algorithm Library (jenetics-3.7.0).
003 * Copyright (c) 2007-2016 Franz Wilhelmstötter
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 *
017 * Author:
018 * Franz Wilhelmstötter (franz.wilhelmstoetter@gmx.at)
019 */
020 package org.jenetics.tool.trial;
021
022 import static java.util.Objects.requireNonNull;
023
024 import java.io.Serializable;
025
026 import javax.xml.bind.annotation.XmlAccessType;
027 import javax.xml.bind.annotation.XmlAccessorType;
028 import javax.xml.bind.annotation.XmlElement;
029 import javax.xml.bind.annotation.XmlRootElement;
030 import javax.xml.bind.annotation.XmlType;
031 import javax.xml.bind.annotation.adapters.XmlAdapter;
032 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
033
034 import org.jenetics.internal.util.Hash;
035
036 /**
037 * Represents the collected runtime information.
038 *
039 * @author <a href="mailto:franz.wilhelmstoetter@gmx.at">Franz Wilhelmstötter</a>
040 * @version 3.4
041 * @since 3.4
042 */
043 @XmlJavaTypeAdapter(Env.Model.Adapter.class)
044 public final class Env implements Serializable {
045
046 private static final long serialVersionUID = 1L;
047
048 private final String _osName;
049 private final String _osVersion;
050 private final String _osArch;
051 private final String _javaVersion;
052 private final String _javaRuntimeName;
053 private final String _javaRuntimeVersion;
054 private final String _javaVMName;
055 private final String _javaVMVersion;
056
057 private Env(
058 final String osName,
059 final String osVersion,
060 final String osArch,
061 final String javaVersion,
062 final String javaRuntimeName,
063 final String javaRuntimeVersion,
064 final String javaVMName,
065 final String javaVMVersion
066 ) {
067 _osName = requireNonNull(osName);
068 _osVersion = requireNonNull(osVersion);
069 _osArch = requireNonNull(osArch);
070 _javaVersion = requireNonNull(javaVersion);
071 _javaRuntimeName = requireNonNull(javaRuntimeName);
072 _javaRuntimeVersion = requireNonNull(javaRuntimeVersion);
073 _javaVMName = requireNonNull(javaVMName);
074 _javaVMVersion = requireNonNull(javaVMVersion);
075 }
076
077 /**
078 * The OS architecture.
079 *
080 * @return the OS architecture
081 */
082 public String getOSArch() {
083 return _osArch;
084 }
085
086 /**
087 * The OS name.
088 *
089 * @return the OS name
090 */
091 public String getOSName() {
092 return _osName;
093 }
094
095 /**
096 * The OS version.
097 *
098 * @return the OS version
099 */
100 public String getOSVersion() {
101 return _osVersion;
102 }
103
104 /**
105 * The Java runtime name.
106 *
107 * @return the Java runtime name
108 */
109 public String getJavaRuntimeName() {
110 return _javaRuntimeName;
111 }
112
113 /**
114 * The Java runtime version.
115 *
116 * @return the Java runtime version
117 */
118 public String getJavaRuntimeVersion() {
119 return _javaRuntimeVersion;
120 }
121
122 /**
123 * The Java version.
124 *
125 * @return the Java version
126 */
127 public String getJavaVersion() {
128 return _javaVersion;
129 }
130
131 /**
132 * The Java VM name.
133 *
134 * @return the Java VM name
135 */
136 public String getJavaVMName() {
137 return _javaVMName;
138 }
139
140 /**
141 * Return the Java VM version.
142 *
143 * @return the Java VM version
144 */
145 public String getJavaVMVersion() {
146 return _javaVMVersion;
147 }
148
149 @Override
150 public int hashCode() {
151 return Hash.of(getClass())
152 .and(_osName)
153 .and(_osVersion)
154 .and(_osArch)
155 .and(_javaVersion)
156 .and(_javaRuntimeName)
157 .and(_javaRuntimeVersion)
158 .and(_javaVMName)
159 .and(_javaVMVersion).value();
160 }
161
162 @Override
163 public boolean equals(final Object obj) {
164 return obj instanceof Env &&
165 _osName.equals(((Env)obj)._osName) &&
166 _osVersion.equals(((Env)obj)._osVersion) &&
167 _osArch.equals(((Env)obj)._osArch) &&
168 _javaVersion.equals(((Env)obj)._javaVersion) &&
169 _javaRuntimeName.equals(((Env)obj)._javaRuntimeName) &&
170 _javaRuntimeVersion.equals(((Env)obj)._javaRuntimeVersion) &&
171 _javaVMName.equals(((Env)obj)._javaVMName) &&
172 _javaVMVersion.equals(((Env)obj)._javaVMVersion);
173 }
174
175 @Override
176 public String toString() {
177 return
178 "OS name: " + _osName + "\n" +
179 "OS version: " + _osVersion + "\n" +
180 "OS architecture: " + _osArch + "\n" +
181 "Java version: " + _javaVersion + "\n" +
182 "Java runtime name: " + _javaRuntimeName + "\n" +
183 "Java runtime version: " + _javaRuntimeName + "\n" +
184 "VM name: " + _javaVMName + "\n" +
185 "VM version: " + _javaVMVersion;
186 }
187
188 /**
189 * Return a new {@code Env} object with the given parameters.
190 *
191 * @param osName the OS name
192 * @param osVersion the OS version
193 * @param osArch the OS architecture
194 * @param javaVersion the Java version
195 * @param javaRuntimeName the Java runtime name
196 * @param javaRuntimeVersion the Java runtime version
197 * @param javaVMName the Java VM name
198 * @param javaVMVersion the Java VM version
199 * @throws NullPointerException if one of the parameters is {@code null}
200 * @return a new {@code Env} object
201 */
202 public static Env of(
203 final String osName,
204 final String osVersion,
205 final String osArch,
206 final String javaVersion,
207 final String javaRuntimeName,
208 final String javaRuntimeVersion,
209 final String javaVMName,
210 final String javaVMVersion
211 ) {
212 return new Env(
213 osName,
214 osVersion,
215 osArch,
216 javaVersion,
217 javaRuntimeName,
218 javaRuntimeVersion,
219 javaVMName,
220 javaVMVersion
221 );
222 }
223
224 /**
225 * Return the <i>current</i> environment values.
226 *
227 * @return the <i>current</i> environment values
228 */
229 public static Env of() {
230 return of(
231 System.getProperty("os.name"),
232 System.getProperty("os.version"),
233 System.getProperty("os.arch"),
234 System.getProperty("java.version"),
235 System.getProperty("java.runtime.name"),
236 System.getProperty("java.runtime.version"),
237 System.getProperty("java.vm.name"),
238 System.getProperty("java.vm.version")
239 );
240 }
241
242 /* *************************************************************************
243 * JAXB object serialization
244 * ************************************************************************/
245
246 @XmlRootElement(name = "environment")
247 @XmlType(name = "org.jenetics.tool.trial.Env")
248 @XmlAccessorType(XmlAccessType.FIELD)
249 static final class Model {
250
251 @XmlElement(name = "os-name")
252 public String osName;
253
254 @XmlElement(name = "os-version")
255 public String osVersion;
256
257 @XmlElement(name = "os-architecture")
258 public String osArch;
259
260 @XmlElement(name = "java-version")
261 public String javaVersion;
262
263 @XmlElement(name = "java-runtime-name")
264 public String javaRuntimeName;
265
266 @XmlElement(name = "java-runtime-version")
267 public String javaRuntimeVersion;
268
269 @XmlElement(name = "java-vm-name")
270 public String javaVMName;
271
272 @XmlElement(name = "java-vm-version")
273 public String javaVMVersion;
274
275 public static final class Adapter extends XmlAdapter<Model, Env> {
276 @Override
277 public Model marshal(final Env env) {
278 final Model model = new Model();
279 model.osName = env.getOSName();
280 model.osVersion = env.getOSVersion();
281 model.osArch = env.getOSArch();
282 model.javaVersion = env.getJavaVersion();
283 model.javaRuntimeName = env.getJavaRuntimeName();
284 model.javaRuntimeVersion = env.getJavaRuntimeVersion();
285 model.javaVMName = env.getJavaVMName();
286 model.javaVMVersion = env.getJavaVMVersion();
287 return model;
288 }
289
290 @Override
291 public Env unmarshal(final Model model) {
292 return Env.of(
293 model.osName,
294 model.osVersion,
295 model.osArch,
296 model.javaVersion,
297 model.javaRuntimeName,
298 model.javaRuntimeVersion,
299 model.javaVMName,
300 model.javaVMVersion
301 );
302 }
303 }
304 }
305
306 }
|