package org.ovirt.engine.api.restapi.types;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.ovirt.engine.api.model.Version;
import org.ovirt.engine.api.model.Versions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class VersionMapper {
private static final Logger log = LoggerFactory.getLogger(VersionMapper.class);
// Regular expression used to extract information from version numbers.
private static final Pattern VERSION_PATTERN = Pattern.compile(
"^(?<major>\\d+)(\\.(?<minor>\\d+)(\\.(?<build>\\d+))?)?[^-]*(-(?<revision>\\d+))?.*$"
);
@Mapping(from = List.class, to = Versions.class)
public static Versions map(List<org.ovirt.engine.core.compat.Version> entity, Versions template) {
Versions model = template != null ? template : new Versions();
for (org.ovirt.engine.core.compat.Version version : entity) {
Version v = new Version();
v.setMajor(version.getMajor());
v.setMinor(version.getMinor());
model.getVersions().add(v);
}
return model;
}
public static Version map(org.ovirt.engine.core.compat.Version versionEngine) {
Version versionApi = new Version();
versionApi.setMajor(versionEngine.getMajor() >= 0 ? versionEngine.getMajor() : null);
versionApi.setMinor(versionEngine.getMinor() >= 0 ? versionEngine.getMinor() : null);
versionApi.setBuild(versionEngine.getBuild() >= 0 ? versionEngine.getBuild() : null);
versionApi.setRevision(versionEngine.getRevision() >= 0 ? versionEngine.getRevision() : null);
return versionApi;
}
public static org.ovirt.engine.core.compat.Version map(Version versionApi) {
return new org.ovirt.engine.core.compat.Version(
versionApi.getMajor() != null ? versionApi.getMajor() : -1,
versionApi.getMinor() != null ? versionApi.getMinor() : -1,
versionApi.getBuild() != null ? versionApi.getBuild() : -1,
versionApi.getRevision() != null ? versionApi.getRevision() : -1);
}
public static Version fromVersionString(String versionString) {
if (versionString == null) {
return null;
}
Version version = new Version();
version.setFullVersion(versionString);
Matcher match = VERSION_PATTERN.matcher(versionString);
if (match.matches()) {
String major = match.group("major");
String minor = match.group("minor");
String build = match.group("build");
String revision = match.group("revision");
if (major != null) {
version.setMajor(Integer.parseInt(major));
}
if (minor != null) {
version.setMinor(Integer.parseInt(minor));
}
if (build != null) {
version.setBuild(Integer.parseInt(build));
}
if (revision != null) {
version.setRevision(Integer.parseInt(revision));
}
}
else {
log.warn(
"The version string \"{}\" doesn't match the expected pattern, only the full version will be reported.",
versionString
);
}
return version;
}
}