35 private final String buildNum;
36
37 private OpenJDKTag(Tag tag, String prefix, String version, String buildPrefix, String buildNum) {
38 this.tag = tag;
39 this.prefix = prefix;
40 this.version = version;
41 this.buildPrefix = buildPrefix;
42 this.buildNum = buildNum;
43 }
44
45 /**
46 * The patterns have the following groups:
47 *
48 * prefix version update buildPrefix buildNum
49 * ------- ------- ------ ----------- ------
50 * jdk-9.1+27 -> jdk-9.1 9.1 + 27
51 * jdk8-b90 -> jdk8 8 -b 90
52 * jdk7u40-b20 -> jdk7u40 7u40 u20 -b 29
53 * hs24-b30 -> hs24 24 -b 30
54 * hs23.6-b19 -> hs23.6 23.6 .6 -b 19
55 */
56
57 private final static String legacyOpenJDKVersionPattern = "(jdk([0-9]{1,2}(u[0-9]{1,3})?))";
58 private final static String legacyHSVersionPattern = "((hs[0-9]{1,2}(\\.[0-9]{1,3})?))";
59 private final static String legacyBuildPattern = "(-b)([0-9]{2,3})";
60 private final static String OpenJDKVersionPattern = "(jdk-([0-9]+(\\.[0-9]){0,3}))(\\+)([0-9]+)";
61
62 private final static List<Pattern> tagPatterns = List.of(Pattern.compile(legacyOpenJDKVersionPattern + legacyBuildPattern),
63 Pattern.compile(legacyHSVersionPattern + legacyBuildPattern),
64 Pattern.compile(OpenJDKVersionPattern));
65
66 /**
67 * Attempts to create an OpenJDKTag instance from a general Tag.
68 *
69 * This will succeed if the tag follows the OpenJDK tag formatting
70 * conventions.
71 * @param tag
72 * @return
73 */
74 public static Optional<OpenJDKTag> create(Tag tag) {
75 for (var pattern : tagPatterns) {
76 var matcher = pattern.matcher(tag.name());
77 if (matcher.matches()) {
78 return Optional.of(new OpenJDKTag(tag, matcher.group(1), matcher.group(2), matcher.group(4), matcher.group(5)));
79 }
80 }
81
82 return Optional.empty();
83 }
84
89 */
90 public Tag tag() {
91 return tag;
92 }
93
94 /**
95 * Version number, such as 11, 9.1, 8, 7u20.
96 *
97 * @return
98 */
99 public String version() {
100 return version;
101 }
102
103 /**
104 * Build number.
105 *
106 * @return
107 */
108 public int buildNum() {
109 return Integer.parseInt(buildNum);
110 }
111
112 /**
113 * Tag of the previous build (if any).
114 *
115 * @return
116 */
117 public Optional<OpenJDKTag> previous() {
118 if (buildNum() == 0) {
119 return Optional.empty();
120 }
121
122 // Make sure build numbers < 10 for JDK 9 tags are not prefixed with '0'
123 var previousBuildNum = buildNum() - 1;
124 var formattedBuildNum = String.format(buildPrefix.equals("+") ? "%d" : "%02d", previousBuildNum);
125 var tagName = prefix + buildPrefix + formattedBuildNum;
126 var tag = new Tag(tagName);
127 return create(tag);
128 }
|
35 private final String buildNum;
36
37 private OpenJDKTag(Tag tag, String prefix, String version, String buildPrefix, String buildNum) {
38 this.tag = tag;
39 this.prefix = prefix;
40 this.version = version;
41 this.buildPrefix = buildPrefix;
42 this.buildNum = buildNum;
43 }
44
45 /**
46 * The patterns have the following groups:
47 *
48 * prefix version update buildPrefix buildNum
49 * ------- ------- ------ ----------- ------
50 * jdk-9.1+27 -> jdk-9.1 9.1 + 27
51 * jdk8-b90 -> jdk8 8 -b 90
52 * jdk7u40-b20 -> jdk7u40 7u40 u20 -b 29
53 * hs24-b30 -> hs24 24 -b 30
54 * hs23.6-b19 -> hs23.6 23.6 .6 -b 19
55 * 11.1+22 -> 11.1 11.1 .1 + 22
56 */
57
58 private final static String legacyOpenJDKVersionPattern = "(jdk([0-9]{1,2}(u[0-9]{1,3})?))";
59 private final static String legacyHSVersionPattern = "((hs[0-9]{1,2}(\\.[0-9]{1,3})?))";
60 private final static String legacyBuildPattern = "(-b)([0-9]{2,3})";
61 private final static String OpenJDKVersionPattern = "(jdk-([0-9]+(\\.[0-9]){0,3}))(\\+)([0-9]+)";
62 private final static String OpenJFXVersionPattern = "((?:jdk-){0,1}([1-9](?:(?:[0-9]*)(\\.(?:0|[1-9][0-9]*)){0,3})))(?:(\\+)([0-9]+)|(-ga))";
63
64 private final static List<Pattern> tagPatterns = List.of(Pattern.compile(legacyOpenJDKVersionPattern + legacyBuildPattern),
65 Pattern.compile(legacyHSVersionPattern + legacyBuildPattern),
66 Pattern.compile(OpenJDKVersionPattern),
67 Pattern.compile(OpenJFXVersionPattern));
68
69 /**
70 * Attempts to create an OpenJDKTag instance from a general Tag.
71 *
72 * This will succeed if the tag follows the OpenJDK tag formatting
73 * conventions.
74 * @param tag
75 * @return
76 */
77 public static Optional<OpenJDKTag> create(Tag tag) {
78 for (var pattern : tagPatterns) {
79 var matcher = pattern.matcher(tag.name());
80 if (matcher.matches()) {
81 return Optional.of(new OpenJDKTag(tag, matcher.group(1), matcher.group(2), matcher.group(4), matcher.group(5)));
82 }
83 }
84
85 return Optional.empty();
86 }
87
92 */
93 public Tag tag() {
94 return tag;
95 }
96
97 /**
98 * Version number, such as 11, 9.1, 8, 7u20.
99 *
100 * @return
101 */
102 public String version() {
103 return version;
104 }
105
106 /**
107 * Build number.
108 *
109 * @return
110 */
111 public int buildNum() {
112 if (buildNum == null) {
113 return 0;
114 }
115 return Integer.parseInt(buildNum);
116 }
117
118 /**
119 * Tag of the previous build (if any).
120 *
121 * @return
122 */
123 public Optional<OpenJDKTag> previous() {
124 if (buildNum() == 0) {
125 return Optional.empty();
126 }
127
128 // Make sure build numbers < 10 for JDK 9 tags are not prefixed with '0'
129 var previousBuildNum = buildNum() - 1;
130 var formattedBuildNum = String.format(buildPrefix.equals("+") ? "%d" : "%02d", previousBuildNum);
131 var tagName = prefix + buildPrefix + formattedBuildNum;
132 var tag = new Tag(tagName);
133 return create(tag);
134 }
|