java/de/jflex/ucd_generator/ucd/UcdVersions.java (90 lines of code) (raw):
/*
* Copyright (C) 2018-2020 Google, LLC.
* SPDX-License-Identifier: BSD-3-Clause
*/
package de.jflex.ucd_generator.ucd;
import static java.lang.Math.min;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedMap;
import de.jflex.ucd.UcdVersion;
import de.jflex.version.Version;
import java.util.List;
import java.util.Map;
/** A set of {@link UcdVersion}s. */
public class UcdVersions {
// version –> Map<UcdFileType, File>
private final ImmutableSortedMap<Version, UcdVersion> versions;
private UcdVersions(ImmutableSortedMap<Version, UcdVersion> versions) {
this.versions = versions;
}
public ImmutableSet<Version> versionSet() {
return versions.keySet();
}
public List<String> versionsAsList() {
ImmutableList.Builder<String> versionList = ImmutableList.builder();
for (Version v : versions.keySet()) {
versionList.add(v.toString());
}
return versionList.build();
}
public UcdVersion get(Version version) {
return versions.get(version);
}
public Version getLastVersion() {
return versions.lastKey();
}
@SuppressWarnings("unused") // Used in .vm
public static String getClassNameForVersion(String version) {
List<String> v = Splitter.on('.').splitToList(version);
return "Unicode_" + Joiner.on('_').join(v.subList(0, min(2, v.size())));
}
/** Expands the version {@code x.y.z} into {@code x}, {@code x.y}, {@code x.y.z}. */
@SuppressWarnings("unused") // Used in .vm
public static ImmutableList<String> expandVersion(Version version) {
ImmutableList.Builder<String> expandedVersions = ImmutableList.builder();
// Add the major version x if it is a x.0.z version
if (version.minor == -1 || (version.minor == 0 && version.patch != -1)) {
expandedVersions.add(String.valueOf(version.major));
}
if (version.minor != -1) {
expandedVersions.add(version.major + "." + version.minor);
}
if (version.minor != -1 && version.patch != -1) {
expandedVersions.add(version.major + "." + version.minor + "." + version.patch);
}
return expandedVersions.build();
}
public static ImmutableList<String> expandVersion(String version) {
return expandVersion(new Version(version));
}
/**
* Expands all versionSet.
*
* @return the set of all versionSet, in decreasing order.
*/
public List<String> expandAllVersions() {
ImmutableList.Builder<String> expandedVersions = ImmutableList.builder();
for (Version v : versionSet()) {
expandedVersions.addAll(expandVersion(v));
}
return expandedVersions.build();
}
public Builder toBuilder() {
return builder().putAll(versions);
}
@Override
public String toString() {
return "[" + Joiner.on(", ").join(versionsAsList()) + "]";
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
ImmutableSortedMap.Builder<Version, UcdVersion> versions =
ImmutableSortedMap.orderedBy(Version.EXACT_VERSION_COMPARATOR);
public Builder putAll(Map<Version, UcdVersion> versions) {
this.versions.putAll(versions);
return this;
}
private Builder put(Version version, UcdVersion ucdFiles) {
versions.put(version, ucdFiles);
return this;
}
public Builder put(String version, UcdVersion ucdFiles) {
return put(new Version(version), ucdFiles);
}
public UcdVersions build() {
return new UcdVersions(versions.build());
}
}
}