App Engine Python SDK version 1.8.4
[gae.git] / java / src / main / com / google / apphosting / base / VersionId.java
blob0e01d59eafc7334ad04c77c8a86df5c274cbf04e
1 package com.google.apphosting.base;
3 import java.util.regex.Matcher;
4 import java.util.regex.Pattern;
6 /**
7 * A parsed Version Id.
9 */
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;
38 /**
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);
60 /**
61 * @return the majorVersion
63 public String getMajorVersion() {
64 return majorVersion;
67 /**
68 * @return the minorVersion or {@code null} if no minor version was present.
70 public String getMinorVersion() {
71 return minorVersion;
74 /**
75 * @return the serverId
77 public String getEngineId() {
78 return engineId;
81 /**
82 * @return the serverId
84 public String getEngineVersionId() {
85 return engineVersionId;
87 /**
88 * @return the versionId
90 public String getVersionId() {
91 return versionId;
94 public static VersionId parse(String versionId) {
95 return new VersionId(versionId);