1 package com.atlassian.plugins.codegen;
2
3 import com.atlassian.fugue.Option;
4
5 import static com.atlassian.fugue.Option.none;
6 import static com.atlassian.fugue.Option.some;
7 import static com.google.common.base.Preconditions.checkNotNull;
8
9
10
11
12
13 public final class VersionId
14 {
15 private final Option<String> version;
16 private final Option<String> propertyName;
17
18 public static VersionId version(String version)
19 {
20 return new VersionId(some(version), none(String.class));
21 }
22
23 public static VersionId versionProperty(String propertyName, String defaultVersion)
24 {
25 return new VersionId(some(defaultVersion), some(propertyName));
26 }
27
28 public static VersionId noVersion()
29 {
30 return new VersionId(none(String.class), none(String.class));
31 }
32
33 private VersionId(Option<String> version, Option<String> propertyName)
34 {
35 this.version = checkNotNull(version, "version");
36 this.propertyName = checkNotNull(propertyName, "propertyName");
37 }
38
39 public Option<String> getVersion()
40 {
41 return version;
42 }
43
44 public Option<String> getPropertyName()
45 {
46 return propertyName;
47 }
48
49 public boolean isDefined()
50 {
51 return version.isDefined() || propertyName.isDefined();
52 }
53
54
55
56
57
58 public Option<String> getVersionOrPropertyPlaceholder()
59 {
60 for (String p : propertyName)
61 {
62 return some(placeholder(p));
63 }
64 return version;
65 }
66
67 @Override
68 public String toString()
69 {
70 for (String p : propertyName)
71 {
72 for (String v : version)
73 {
74 return placeholder(p) + " (" + v + ")";
75 }
76 return placeholder(p);
77 }
78 for (String v : version)
79 {
80 return v;
81 }
82 return "?";
83 }
84
85 private String placeholder(String p)
86 {
87 return "${" + p + "}";
88 }
89
90 @Override
91 public boolean equals(Object other)
92 {
93 if (other instanceof VersionId)
94 {
95 VersionId v = (VersionId) other;
96 return version.equals(v.version) && propertyName.equals(v.propertyName);
97 }
98 return false;
99 }
100
101 @Override
102 public int hashCode()
103 {
104 return toString().hashCode();
105 }
106 }