/*
* Java Genetic Algorithm Library (@__identifier__@).
* Copyright (c) @__year__@ Franz Wilhelmstötter
*
* 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.
*
* Author:
* Franz Wilhelmstötter (franz.wilhelmstoetter@gmx.at)
*/
package org.jenetics.tool.trial;
import static java.util.Objects.requireNonNull;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.jenetics.internal.util.Hash;
/**
* Represents the collected runtime information.
*
* @author <a href="mailto:franz.wilhelmstoetter@gmx.at">Franz Wilhelmstötter</a>
* @version 3.4
* @since 3.4
*/
@XmlJavaTypeAdapter(Env.Model.Adapter.class)
public final class Env implements Serializable {
private static final long serialVersionUID = 1L;
private final String _osName;
private final String _osVersion;
private final String _osArch;
private final String _javaVersion;
private final String _javaRuntimeName;
private final String _javaRuntimeVersion;
private final String _javaVMName;
private final String _javaVMVersion;
private Env(
final String osName,
final String osVersion,
final String osArch,
final String javaVersion,
final String javaRuntimeName,
final String javaRuntimeVersion,
final String javaVMName,
final String javaVMVersion
) {
_osName = requireNonNull(osName);
_osVersion = requireNonNull(osVersion);
_osArch = requireNonNull(osArch);
_javaVersion = requireNonNull(javaVersion);
_javaRuntimeName = requireNonNull(javaRuntimeName);
_javaRuntimeVersion = requireNonNull(javaRuntimeVersion);
_javaVMName = requireNonNull(javaVMName);
_javaVMVersion = requireNonNull(javaVMVersion);
}
/**
* The OS architecture.
*
* @return the OS architecture
*/
public String getOSArch() {
return _osArch;
}
/**
* The OS name.
*
* @return the OS name
*/
public String getOSName() {
return _osName;
}
/**
* The OS version.
*
* @return the OS version
*/
public String getOSVersion() {
return _osVersion;
}
/**
* The Java runtime name.
*
* @return the Java runtime name
*/
public String getJavaRuntimeName() {
return _javaRuntimeName;
}
/**
* The Java runtime version.
*
* @return the Java runtime version
*/
public String getJavaRuntimeVersion() {
return _javaRuntimeVersion;
}
/**
* The Java version.
*
* @return the Java version
*/
public String getJavaVersion() {
return _javaVersion;
}
/**
* The Java VM name.
*
* @return the Java VM name
*/
public String getJavaVMName() {
return _javaVMName;
}
/**
* Return the Java VM version.
*
* @return the Java VM version
*/
public String getJavaVMVersion() {
return _javaVMVersion;
}
@Override
public int hashCode() {
return Hash.of(getClass())
.and(_osName)
.and(_osVersion)
.and(_osArch)
.and(_javaVersion)
.and(_javaRuntimeName)
.and(_javaRuntimeVersion)
.and(_javaVMName)
.and(_javaVMVersion).value();
}
@Override
public boolean equals(final Object obj) {
return obj instanceof Env &&
_osName.equals(((Env)obj)._osName) &&
_osVersion.equals(((Env)obj)._osVersion) &&
_osArch.equals(((Env)obj)._osArch) &&
_javaVersion.equals(((Env)obj)._javaVersion) &&
_javaRuntimeName.equals(((Env)obj)._javaRuntimeName) &&
_javaRuntimeVersion.equals(((Env)obj)._javaRuntimeVersion) &&
_javaVMName.equals(((Env)obj)._javaVMName) &&
_javaVMVersion.equals(((Env)obj)._javaVMVersion);
}
@Override
public String toString() {
return
"OS name: " + _osName + "\n" +
"OS version: " + _osVersion + "\n" +
"OS architecture: " + _osArch + "\n" +
"Java version: " + _javaVersion + "\n" +
"Java runtime name: " + _javaRuntimeName + "\n" +
"Java runtime version: " + _javaRuntimeName + "\n" +
"VM name: " + _javaVMName + "\n" +
"VM version: " + _javaVMVersion;
}
/**
* Return a new {@code Env} object with the given parameters.
*
* @param osName the OS name
* @param osVersion the OS version
* @param osArch the OS architecture
* @param javaVersion the Java version
* @param javaRuntimeName the Java runtime name
* @param javaRuntimeVersion the Java runtime version
* @param javaVMName the Java VM name
* @param javaVMVersion the Java VM version
* @throws NullPointerException if one of the parameters is {@code null}
* @return a new {@code Env} object
*/
public static Env of(
final String osName,
final String osVersion,
final String osArch,
final String javaVersion,
final String javaRuntimeName,
final String javaRuntimeVersion,
final String javaVMName,
final String javaVMVersion
) {
return new Env(
osName,
osVersion,
osArch,
javaVersion,
javaRuntimeName,
javaRuntimeVersion,
javaVMName,
javaVMVersion
);
}
/**
* Return the <i>current</i> environment values.
*
* @return the <i>current</i> environment values
*/
public static Env of() {
return of(
System.getProperty("os.name"),
System.getProperty("os.version"),
System.getProperty("os.arch"),
System.getProperty("java.version"),
System.getProperty("java.runtime.name"),
System.getProperty("java.runtime.version"),
System.getProperty("java.vm.name"),
System.getProperty("java.vm.version")
);
}
/* *************************************************************************
* JAXB object serialization
* ************************************************************************/
@XmlRootElement(name = "environment")
@XmlType(name = "org.jenetics.tool.trial.Env")
@XmlAccessorType(XmlAccessType.FIELD)
static final class Model {
@XmlElement(name = "os-name")
public String osName;
@XmlElement(name = "os-version")
public String osVersion;
@XmlElement(name = "os-architecture")
public String osArch;
@XmlElement(name = "java-version")
public String javaVersion;
@XmlElement(name = "java-runtime-name")
public String javaRuntimeName;
@XmlElement(name = "java-runtime-version")
public String javaRuntimeVersion;
@XmlElement(name = "java-vm-name")
public String javaVMName;
@XmlElement(name = "java-vm-version")
public String javaVMVersion;
public static final class Adapter extends XmlAdapter<Model, Env> {
@Override
public Model marshal(final Env env) {
final Model model = new Model();
model.osName = env.getOSName();
model.osVersion = env.getOSVersion();
model.osArch = env.getOSArch();
model.javaVersion = env.getJavaVersion();
model.javaRuntimeName = env.getJavaRuntimeName();
model.javaRuntimeVersion = env.getJavaRuntimeVersion();
model.javaVMName = env.getJavaVMName();
model.javaVMVersion = env.getJavaVMVersion();
return model;
}
@Override
public Env unmarshal(final Model model) {
return Env.of(
model.osName,
model.osVersion,
model.osArch,
model.javaVersion,
model.javaRuntimeName,
model.javaRuntimeVersion,
model.javaVMName,
model.javaVMVersion
);
}
}
}
}