1 package com.atlassian.marketplace.client.api;
2
3 import com.atlassian.fugue.Option;
4
5 import static com.atlassian.fugue.Option.none;
6 import static com.atlassian.marketplace.client.api.QueryProperties.describeOptEnum;
7 import static com.atlassian.marketplace.client.api.QueryProperties.describeParams;
8 import static com.atlassian.marketplace.client.api.QueryProperties.describeValues;
9 import static com.google.common.base.Preconditions.checkNotNull;
10
11
12
13
14
15 public final class AddonVersionsQuery implements QueryProperties.AccessToken,
16 QueryProperties.ApplicationCriteria,
17 QueryProperties.Bounds,
18 QueryProperties.Cost,
19 QueryProperties.Hosting
20 {
21 private static final AddonVersionsQuery DEFAULT_QUERY = builder().build();
22
23 private final Option<String> accessToken;
24 private final QueryBuilderProperties.ApplicationCriteriaHelper app;
25 private final Option<Cost> cost;
26 private final Option<HostingType> hosting;
27 private final QueryBounds bounds;
28 private final Option<String> afterVersionName;
29
30
31
32
33 public static Builder builder()
34 {
35 return new Builder();
36 }
37
38
39
40
41 public static AddonVersionsQuery any()
42 {
43 return DEFAULT_QUERY;
44 }
45
46 public static Builder fromAddonQuery(AddonQuery aq)
47 {
48 return builder()
49 .accessToken(aq.getAccessToken())
50 .application(aq.getApplication())
51 .appBuildNumber(aq.getAppBuildNumber())
52 .cost(aq.getCost())
53 .hosting(aq.getHosting())
54 .bounds(aq.getBounds());
55 }
56
57
58
59
60 public static Builder builder(AddonVersionsQuery query)
61 {
62 Builder builder = builder()
63 .application(query.getApplication())
64 .appBuildNumber(query.getAppBuildNumber())
65 .cost(query.getCost())
66 .hosting(query.getHosting())
67 .bounds(query.getBounds());
68
69 return builder;
70 }
71
72 private AddonVersionsQuery(Builder builder)
73 {
74 accessToken = builder.accessToken;
75 app = builder.app;
76 cost = builder.cost;
77 hosting = builder.hosting;
78 bounds = builder.bounds;
79 afterVersionName = builder.afterVersionName;
80 }
81
82 @Override
83 public Option<String> getAccessToken()
84 {
85 return accessToken;
86 }
87
88 @Override
89 public Option<ApplicationKey> getApplication()
90 {
91 return app.application;
92 }
93
94 @Override
95 public Option<Integer> getAppBuildNumber()
96 {
97 return app.appBuildNumber;
98 }
99
100 @Override
101 public Option<Cost> getCost()
102 {
103 return cost;
104 }
105
106 @Override
107 public Option<HostingType> getHosting()
108 {
109 return hosting;
110 }
111
112 @Override
113 public QueryBounds getBounds()
114 {
115 return bounds;
116 }
117
118
119
120
121
122
123 public Option<String> getAfterVersionName()
124 {
125 return afterVersionName;
126 }
127
128 @SuppressWarnings("unchecked")
129 @Override
130 public String toString()
131 {
132 return describeParams("AddonVersionsQuery",
133 describeValues("accessToken", accessToken),
134 app.describe(),
135 describeOptEnum("cost", cost),
136 describeOptEnum("hosting", hosting),
137 bounds.describe(),
138 describeValues("afterVersion", afterVersionName)
139 );
140 }
141
142 @Override
143 public boolean equals(Object other)
144 {
145 return (other instanceof AddonVersionsQuery) ? toString().equals(other.toString()) : false;
146 }
147
148 @Override
149 public int hashCode()
150 {
151 return toString().hashCode();
152 }
153
154
155
156
157 public static class Builder implements QueryBuilderProperties.AccessToken<Builder>,
158 QueryBuilderProperties.ApplicationCriteria<Builder>,
159 QueryBuilderProperties.Bounds<Builder>,
160 QueryBuilderProperties.Cost<Builder>,
161 QueryBuilderProperties.Hosting<Builder>
162 {
163 private Option<String> accessToken = none();
164 private QueryBuilderProperties.ApplicationCriteriaHelper app = new QueryBuilderProperties.ApplicationCriteriaHelper();
165 private Option<Cost> cost = none();
166 private Option<HostingType> hosting = none();
167 private QueryBounds bounds = QueryBounds.defaultBounds();
168 private Option<String> afterVersionName = none();
169
170
171
172
173 public AddonVersionsQuery build()
174 {
175 return new AddonVersionsQuery(this);
176 }
177
178 @Override
179 public Builder accessToken(Option<String> accessToken)
180 {
181 this.accessToken = checkNotNull(accessToken);
182 return this;
183 }
184
185 @Override
186 public Builder application(Option<ApplicationKey> application)
187 {
188 app = app.application(application);
189 return this;
190 }
191
192 @Override
193 public Builder appBuildNumber(Option<Integer> appBuildNumber)
194 {
195 app = app.appBuildNumber(appBuildNumber);
196 return this;
197 }
198
199 @Override
200 public Builder cost(Option<Cost> cost)
201 {
202 this.cost = checkNotNull(cost);
203 return this;
204 }
205
206 @Override
207 public Builder hosting(Option<HostingType> hosting)
208 {
209 this.hosting = checkNotNull(hosting);
210 return this;
211 }
212
213
214
215
216
217
218
219
220
221
222 public Builder afterVersion(Option<String> versionName)
223 {
224 this.afterVersionName = checkNotNull(versionName);
225 return this;
226 }
227
228 @Override
229 public Builder bounds(QueryBounds bounds)
230 {
231 this.bounds = checkNotNull(bounds);
232 return this;
233 }
234 }
235 }