1 package com
.google
.apphosting
.base
;
3 import java
.util
.regex
.Matcher
;
4 import java
.util
.regex
.Pattern
;
10 public class VersionId
{
11 public static final String DEFAULT_ENGINE_ID
= "default";
12 public static final String BUILTINS_PREFIX
= "ah-builtin-";
14 private static final int ENGINE_ID_MAX_LENGTH
= 63;
15 private static final int ENGINE_VERSION_ID_MAX_LENGTH
= 100;
16 private static final int MINOR_VERSION_ID_LENGTH
= 20;
18 private static final String ENGINE_ID_RE
=
19 String
.format("[a-z\\d][a-z\\d\\-]{0,%d}", ENGINE_ID_MAX_LENGTH
- 1);
21 private static final String ENGINE_VERSION_ID_RE
=
22 String
.format("[a-z\\d][a-z\\d\\-]{0,%d}", ENGINE_VERSION_ID_MAX_LENGTH
- 1);
24 private static final String MAJOR_VERSION_RE
=
25 String
.format("(?:(?:(%s):)?)(%s)", ENGINE_ID_RE
, ENGINE_VERSION_ID_RE
);
27 private static final String FULL_VERSION_RE
=
28 String
.format("(%s)(\\.(\\d{1,%d}))?", MAJOR_VERSION_RE
, MINOR_VERSION_ID_LENGTH
);
30 private static final Pattern FULL_VERSION_PATTERN
= Pattern
.compile(FULL_VERSION_RE
);
32 private final String versionId
;
33 private final String majorVersion
;
34 private final String engineId
;
35 private final String engineVersionId
;
36 private final String minorVersion
;
39 * Create a new VersionId based on an versionId formatted as follows:
41 * [(engine):](engine version)[.(minor version)]
43 * @param versionId The versionId to parse.
45 private VersionId(String versionId
) {
46 if (versionId
== null) {
47 throw new NullPointerException();
49 Matcher matcher
= FULL_VERSION_PATTERN
.matcher(versionId
);
50 if (!matcher
.matches()) {
51 throw new IllegalArgumentException("Malformed versionId: " + versionId
);
53 this.versionId
= versionId
;
54 this.majorVersion
= matcher
.group(1);
55 this.engineId
= matcher
.group(2) == null ? DEFAULT_ENGINE_ID
: matcher
.group(2);
56 this.engineVersionId
= matcher
.group(3);
57 this.minorVersion
= matcher
.group(5);
61 * @return the majorVersion
63 public String
getMajorVersion() {
68 * @return the minorVersion or {@code null} if no minor version was present.
70 public String
getMinorVersion() {
75 * @return the serverId
77 public String
getEngineId() {
82 * @return the serverId
84 public String
getEngineVersionId() {
85 return engineVersionId
;
88 * @return the versionId
90 public String
getVersionId() {
94 public static VersionId
parse(String versionId
) {
95 return new VersionId(versionId
);