001/*-------------------------------------------------------------------------+
002|                                                                          |
003| Copyright 2005-2011 the ConQAT Project                                   |
004|                                                                          |
005| Licensed under the Apache License, Version 2.0 (the "License");          |
006| you may not use this file except in compliance with the License.         |
007| You may obtain a copy of the License at                                  |
008|                                                                          |
009|    http://www.apache.org/licenses/LICENSE-2.0                            |
010|                                                                          |
011| Unless required by applicable law or agreed to in writing, software      |
012| distributed under the License is distributed on an "AS IS" BASIS,        |
013| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
014| See the License for the specific language governing permissions and      |
015| limitations under the License.                                           |
016+-------------------------------------------------------------------------*/
017package com.teamscale.core.migration;
018
019import org.conqat.lib.commons.collections.CollectionUtils;
020import org.conqat.lib.commons.version.Version;
021
022import java.util.Arrays;
023
024/**
025 * Enumeration with all released versions of Teamscale.
026 */
027public enum ETeamscaleVersion {
028
029        /** Version 1.0 released on January, 30th 2014. */
030        VERSION_1_0_0(1, 0, 0),
031
032        /** Version 1.1 released on April, 8th 2014. */
033        VERSION_1_1_0(1, 1, 0),
034
035        /** Version 1.1.1 released on April, 11th 2014. */
036        VERSION_1_1_1(1, 1, 1),
037
038        /** Version 1.2 released on July, 4th 2014. */
039        VERSION_1_2_0(1, 2, 0),
040
041        /** Version 1.2.1 released on July, 17th 2014. */
042        VERSION_1_2_1(1, 2, 1),
043
044        /** Version 1.3 released on October, 10th 2014. */
045        VERSION_1_3_0(1, 3, 0),
046
047        /** Version 1.3.1 released on October, 17th 2014. */
048        VERSION_1_3_1(1, 3, 1),
049
050        /** Version 1.3.2 released on December, 11th 2014. */
051        VERSION_1_3_2(1, 3, 2),
052
053        /** Version 1.4 released on March, 13th 2015. */
054        VERSION_1_4_0(1, 4, 0),
055
056        /** Version 1.5 released on July, 3rd 2015. */
057        VERSION_1_5_0(1, 5, 0),
058
059        /** Version 1.5.1 released on August, 21st 2015. */
060        VERSION_1_5_1(1, 5, 1),
061
062        /** Version 1.6 released on October, 9th 2015. */
063        VERSION_1_6_0(1, 6, 0),
064
065        /** Version 1.6.1 released on December, 17th 2015. */
066        VERSION_1_6_1(1, 6, 1),
067
068        /** Version 1.6.2 released on January, 26th 2016. */
069        VERSION_1_6_2(1, 6, 2),
070
071        /** Version 2.0 released on February, 26th 2016. */
072        VERSION_2_0_0(2, 0, 0),
073
074        /** Version 2.0.1 released on March, 16th 2016. */
075        VERSION_2_0_1(2, 0, 1),
076
077        /** Version 2.0.2 released on April, 26th 2016. */
078        VERSION_2_0_2(2, 0, 2),
079
080        /** Version 2.0.3 released on May, 25th 2016. */
081        VERSION_2_0_3(2, 0, 3),
082
083        /** Version 2.0.4 released on June, 7th 2016. */
084        VERSION_2_0_4(2, 0, 4),
085
086        /** Version 2.0.5 released on July, 11th 2016. */
087        VERSION_2_0_5(2, 0, 5),
088
089        /** Version 2.0.6 released on August, 4th 2016. */
090        VERSION_2_0_6(2, 0, 6),
091
092        /** Version 3.0 released on December, 21st 2016. */
093        VERSION_3_0_0(3, 0, 0),
094
095        /** Version 3.0.1 released on January, 31th 2017. */
096        VERSION_3_0_1(3, 0, 1),
097
098        /** Version 3.0.2 released on January, 20th 2017. */
099        VERSION_3_0_2(3, 0, 2),
100
101        /** Version 3.0.3 released on January, 27th 2017. */
102        VERSION_3_0_3(3, 0, 3),
103
104        /** Version 3.1 released on February, 1st 2017. */
105        VERSION_3_1_0(3, 1, 0),
106
107        /** Version 3.1.1 released on February, 8th 2017. */
108        VERSION_3_1_1(3, 1, 1),
109
110        /** Version 3.1.2 released on February, 15th 2017. */
111        VERSION_3_1_2(3, 1, 2),
112
113        /** Version 3.1.3 released on February, 22th 2017. */
114        VERSION_3_1_3(3, 1, 3),
115
116        /** Version 3.1.4 released on March, 8th 2017. */
117        VERSION_3_1_4(3, 1, 4),
118
119        /** Version 3.1.5 released on March, 9th 2017. */
120        VERSION_3_1_5(3, 1, 5),
121
122        /** Version 3.2.0 released on February, 22th 2017. */
123        VERSION_3_2_0(3, 2, 0),
124
125        /** Version 3.2.1 released on March, 22th 2017. */
126        VERSION_3_2_1(3, 2, 1),
127
128        /** Version 3.2.2 released on March, 29th 2017. */
129        VERSION_3_2_2(3, 2, 2),
130
131        /** Version 3.2.3 released on April, 5th 2017. */
132        VERSION_3_2_3(3, 2, 3),
133
134        /** Version 3.2.4 released on April, 12th 2017. */
135        VERSION_3_2_4(3, 2, 4),
136
137        /** Version 3.2.5 released on April, 19th 2017. */
138        VERSION_3_2_5(3, 2, 5),
139
140        /** Version 3.2.6 released on April, 26th 2017. */
141        VERSION_3_2_6(3, 2, 6),
142
143        /** Released on May 10, 2017. */
144        VERSION_3_2_7(3, 2, 7),
145
146        /** Released April 26, 2017. */
147        VERSION_3_3_0(3, 3, 0),
148
149        /** Released May 3, 2017. */
150        VERSION_3_3_1(3, 3, 1),
151
152        /** Released May 10, 2017. */
153        VERSION_3_3_2(3, 3, 2),
154
155        /** Released May 17, 2017. */
156        VERSION_3_3_3(3, 3, 3),
157
158        /** Released May 24, 2017. */
159        VERSION_3_3_4(3, 3, 4),
160
161        /** Released May 31, 2017. */
162        VERSION_3_3_5(3, 3, 5),
163
164        /** Released June 6, 2017. */
165        VERSION_3_4_0(3, 4, 0),
166
167        /** Released June 13, 2017. */
168        VERSION_3_4_1(3, 4, 1),
169
170        /** Released June 27, 2017. */
171        VERSION_3_4_2(3, 4, 2),
172
173        /** Released June 28, 2017. */
174        VERSION_3_4_3(3, 4, 3),
175
176        /** Released June 30, 2017. */
177        VERSION_3_4_4(3, 4, 4),
178
179        /** Released July 4, 2017. */
180        VERSION_3_4_5(3, 4, 5),
181
182        /** Released July 6, 2017. */
183        VERSION_3_4_6(3, 4, 6),
184
185        /** Released July 11, 2017. */
186        VERSION_3_4_7(3, 4, 7),
187
188        /** Released July 18, 2017. */
189        VERSION_3_4_8(3, 4, 8),
190
191        /** Released July 25, 2017. */
192        VERSION_3_4_9(3, 4, 9),
193
194        /** Released August 1, 2017. */
195        VERSION_3_4_10(3, 4, 10),
196
197        /** Released July 18, 2017. */
198        VERSION_3_5_0(3, 5, 0),
199
200        /** Released July 24, 2017. */
201        VERSION_3_5_1(3, 5, 1),
202
203        /** Released August 1, 2017. */
204        VERSION_3_5_2(3, 5, 2),
205
206        /** Released August 7, 2017. */
207        VERSION_3_5_3(3, 5, 3),
208
209        /** Released August 16, 2017. */
210        VERSION_3_5_4(3, 5, 4),
211
212        /** Released August 22, 2017. */
213        VERSION_3_5_5(3, 5, 5),
214
215        /** Released August 25, 2017. */
216        VERSION_3_5_6(3, 5, 6),
217
218        /** Released August 29, 2017 */
219        VERSION_3_6_0(3, 6, 0),
220
221        /** Released September 25, 2017 */
222        VERSION_3_6_1(3, 6, 1),
223
224        /** Release October 10, 2017 */
225        VERSION_3_6_2(3, 6, 2),
226
227        /** Released October 10, 2017 */
228        VERSION_3_7_0(3, 7, 0),
229
230        /** Released October 12, 2017 */
231        VERSION_3_7_1(3, 7, 1),
232
233        /** Released October 20, 2017 */
234        VERSION_3_7_2(3, 7, 2),
235
236        /** Released November 3, 2017 */
237        VERSION_3_7_3(3, 7, 3),
238
239        /** Released November 16, 2017 */
240        VERSION_3_7_4(3, 7, 4),
241
242        /** Released November 28, 2017 */
243        VERSION_3_7_5(3, 7, 5),
244
245        /** Released November 29, 2017 */
246        VERSION_3_7_6(3, 7, 6),
247
248        /** Released November 21, 2017 */
249        VERSION_3_8_0(3, 8, 0),
250
251        /** Released November 30, 2017 */
252        VERSION_3_8_1(3, 8, 1),
253
254        /** Released December 6, 2017 */
255        VERSION_3_8_2(3, 8, 2),
256
257        /** Released December 12, 2017 */
258        VERSION_3_8_3(3, 8, 3),
259
260        /** Released December 19, 2017 */
261        VERSION_3_8_4(3, 8, 4),
262
263        /** Released February 6, 2018 */
264        VERSION_3_8_5(3, 8, 5),
265
266        /** Released February 13, 2018 */
267        VERSION_3_8_6(3, 8, 6),
268
269        /** Released January 9, 2018 */
270        VERSION_3_9_0(3, 9, 0),
271
272        /** Released January 16, 2018 */
273        VERSION_3_9_1(3, 9, 1),
274
275        /** Released January 25, 2018 */
276        VERSION_3_9_2(3, 9, 2),
277
278        /** Released February 6, 2018 */
279        VERSION_3_9_3(3, 9, 3),
280
281        /** Released February 13, 2018 */
282        VERSION_3_9_4(3, 9, 4),
283
284        /** Released February 20, 2018 */
285        VERSION_3_9_5(3, 9, 5),
286
287        /** Released March 7, 2018 */
288        VERSION_3_9_6(3, 9, 6),
289
290        /** Released February 13, 2018 */
291        VERSION_4_0_0(4, 0, 0),
292
293        /** Released February 20, 2018 */
294        VERSION_4_0_1(4, 0, 1),
295
296        /** Released February 27, 2018 */
297        VERSION_4_0_2(4, 0, 2),
298
299        /** Released March 7, 2018 */
300        VERSION_4_0_3(4, 0, 3),
301
302        /** Released March 20, 2018 */
303        VERSION_4_0_4(4, 0, 4),
304
305        /** Released March 28, 2018 */
306        VERSION_4_0_5(4, 0, 5),
307
308        /** Released April 5, 2018 */
309        VERSION_4_1_0(4, 1, 0),
310
311        /** Released April 11, 2018 */
312        VERSION_4_1_1(4, 1, 1),
313
314        /** Released April 17, 2018 */
315        VERSION_4_1_2(4, 1, 2),
316
317        /** Released April 26, 2018 */
318        VERSION_4_1_3(4, 1, 3),
319
320        /** Released May 8, 2018 */
321        VERSION_4_1_4(4, 1, 4),
322
323        /** Released May 29, 2018 */
324        VERSION_4_1_5(4, 1, 5),
325
326        /** Released May 14, 2018 */
327        VERSION_4_2_0(4, 2, 0),
328
329        /** Released May 22, 2018 */
330        VERSION_4_2_1(4, 2, 1),
331
332        /** Released May 29, 2018 */
333        VERSION_4_2_2(4, 2, 2),
334
335        /** Released June 5, 2018 */
336        VERSION_4_2_3(4, 2, 3),
337
338        /** Released June 12, 2018 */
339        VERSION_4_2_4(4, 2, 4),
340
341        /** Released June 20, 2018 */
342        VERSION_4_2_5(4, 2, 5),
343
344        /** Released June 26, 2018 */
345        VERSION_4_2_6(4, 2, 6),
346
347        /** Released June 29, 2018 */
348        VERSION_4_2_7(4, 2, 7),
349
350        /** Released July 17, 2018 */
351        VERSION_4_2_8(4, 2, 8),
352
353        /** Released June 26, 2018 */
354        VERSION_4_3_0(4, 3, 0),
355
356        /** Released June 29, 2018 */
357        VERSION_4_3_1(4, 3, 1),
358
359        /** Released July 3, 2018 */
360        VERSION_4_3_2(4, 3, 2),
361
362        /** Released July 10, 2018 */
363        VERSION_4_3_3(4, 3, 3),
364
365        /** Released July 17, 2018 */
366        VERSION_4_3_4(4, 3, 4),
367
368        /** Released July 24, 2018 */
369        VERSION_4_3_5(4, 3, 5),
370
371        /** Released July 31, 2018 */
372        VERSION_4_3_6(4, 3, 6),
373
374        /** Released July 31, 2018 */
375        VERSION_4_4_0(4, 4, 0),
376
377        /** Released August 7, 2018 */
378        VERSION_4_4_1(4, 4, 1),
379
380        /** Released August 14, 2018 */
381        VERSION_4_4_2(4, 4, 2),
382
383        /** Released August 28, 2018 */
384        VERSION_4_4_3(4, 4, 3),
385
386        /** Released August 31, 2018 */
387        VERSION_4_4_4(4, 4, 4),
388
389        /** Released September 4, 2018 */
390        VERSION_4_4_5(4, 4, 5),
391
392        /** Released September 11, 2018 */
393        VERSION_4_4_6(4, 4, 6),
394
395        /** Released September 20, 2018 */
396        VERSION_4_4_7(4, 4, 7),
397
398        /** Released October 1, 2018 */
399        VERSION_4_4_8(4, 4, 8),
400
401        /** Released September 11, 2018 */
402        VERSION_4_5_0(4, 5, 0),
403
404        /** Released September 18, 2018 */
405        VERSION_4_5_1(4, 5, 1),
406
407        /** Released September 20, 2018 */
408        VERSION_4_5_2(4, 5, 2),
409
410        /** Released September 25, 2018 */
411        VERSION_4_5_3(4, 5, 3),
412
413        /** Released September 26, 2018 */
414        VERSION_4_5_4(4, 5, 4),
415
416        /** Released October 1, 2018 */
417        VERSION_4_5_5(4, 5, 5),
418
419        /** Released October 9, 2018 */
420        VERSION_4_5_6(4, 5, 6),
421
422        /** Released October 16, 2018 */
423        VERSION_4_5_7(4, 5, 7),
424
425        /** Released October 30, 2018 */
426        VERSION_4_5_8(4, 5, 8),
427
428        /** Released November 20, 2018 */
429        VERSION_4_5_9(4, 5, 9),
430
431        /** Released October 23, 2018 */
432        VERSION_4_6_0(4, 6, 0),
433
434        /** Released October 30, 2018 */
435        VERSION_4_6_1(4, 6, 1),
436
437        /** Released November 5, 2018 */
438        VERSION_4_6_2(4, 6, 2),
439
440        /** Released November 20, 2018 */
441        VERSION_4_6_3(4, 6, 3),
442
443        /** Released November 27, 2018 */
444        VERSION_4_6_4(4, 6, 4),
445
446        /** Released December 4, 2018 */
447        VERSION_4_6_5(4, 6, 5),
448
449        /** Released December 11, 2018 */
450        VERSION_4_6_6(4, 6, 6),
451
452        /** Released January 8, 2019 */
453        VERSION_4_6_7(4, 6, 7),
454
455        /** Released April 2, 2019 */
456        VERSION_4_6_8(4, 6, 8),
457
458        /** Released December 4, 2018 */
459        VERSION_4_7_0(4, 7, 0),
460
461        /** Released December 11, 2018 */
462        VERSION_4_7_1(4, 7, 1),
463
464        /** Released December 18, 2018 */
465        VERSION_4_7_2(4, 7, 2),
466
467        /** Released January 8, 2019 */
468        VERSION_4_7_3(4, 7, 3),
469
470        /** Released January 15, 2019 */
471        VERSION_4_7_4(4, 7, 4),
472
473        /** Released January 22, 2019 */
474        VERSION_4_7_5(4, 7, 5),
475
476        /** Released January 29, 2019 */
477        VERSION_4_7_6(4, 7, 6),
478
479        /** Released February 19, 2019 */
480        VERSION_4_7_7(4, 7, 7),
481
482        /** Released January 29, 2019 */
483        VERSION_4_8_0(4, 8, 0),
484
485        /** Released February 5, 2019 */
486        VERSION_4_8_1(4, 8, 1),
487
488        /** Version 4.8.2 released February 12, 2019 */
489        VERSION_4_8_2(4, 8, 2),
490
491        /** Version 4.8.3 released February 19, 2019 */
492        VERSION_4_8_3(4, 8, 3),
493
494        /** Version 4.8.4 released February 26, 2019 */
495        VERSION_4_8_4(4, 8, 4),
496
497        /** Version 4.8.5 released March 5, 2019 */
498        VERSION_4_8_5(4, 8, 5),
499
500        /** Version 4.8.6 released March 12, 2019 */
501        VERSION_4_8_6(4, 8, 6),
502
503        /** Version 4.8.7 released March 19, 2019 */
504        VERSION_4_8_7(4, 8, 7),
505
506        /** Version 4.8.8 released April 2, 2019 */
507        VERSION_4_8_8(4, 8, 8),
508
509        /** Version 4.9.0 released February 26, 2019 */
510        VERSION_4_9_0(4, 9, 0),
511
512        /** Version 4.9.1 released February 27, 2019 */
513        VERSION_4_9_1(4, 9, 1),
514
515        /** Version 4.9.2 released March 5, 2019 */
516        VERSION_4_9_2(4, 9, 2),
517
518        /** Version 4.9.3 released March 7, 2019 */
519        VERSION_4_9_3(4, 9, 3),
520
521        /** Version 4.9.4 released March 12, 2019 */
522        VERSION_4_9_4(4, 9, 4),
523
524        /** Version 4.9.5 released March 19, 2019 */
525        VERSION_4_9_5(4, 9, 5),
526
527        /** Version 4.9.6 released March 26, 2019 */
528        VERSION_4_9_6(4, 9, 6),
529
530        /** Version 4.9.7 released April 2, 2019 */
531        VERSION_4_9_7(4, 9, 7),
532
533        /** Version 4.9.8 released April 9, 2019 */
534        VERSION_4_9_8(4, 9, 8),
535
536        /** Version 4.9.9 released April 15, 2019 */
537        VERSION_4_9_9(4, 9, 9),
538
539        /** Version 4.9.10 released April 23, 2019 */
540        VERSION_4_9_10(4, 9, 10),
541
542        /** Version 4.9.11 released April 30, 2019 */
543        VERSION_4_9_11(4, 9, 11),
544
545        /** Version 4.9.12 released May 7, 2019 */
546        VERSION_4_9_12(4, 9, 12),
547
548        /** Version 4.9.13 released May 21, 2019 */
549        VERSION_4_9_13(4, 9, 13),
550
551        /** Version 5.0.0 released April 9, 2019 */
552        VERSION_5_0_0(5, 0, 0),
553
554        /** Version 5.0.1 released April 15, 2019 */
555        VERSION_5_0_1(5, 0, 1),
556
557        /** Version 5.0.2 released April 23, 2019 */
558        VERSION_5_0_2(5, 0, 2),
559
560        /** Version 5.0.3 released April 30, 2019 */
561        VERSION_5_0_3(5, 0, 3),
562
563        /** Version 5.0.4 released May 7, 2019 */
564        VERSION_5_0_4(5, 0, 4),
565
566        /** Version 5.0.4 released May 14, 2019 */
567        VERSION_5_0_5(5, 0, 5),
568
569        /** Version 5.0.6 released May 21, 2019 */
570        VERSION_5_0_6(5, 0, 6),
571
572        /** Version 5.0.7 released May 28, 2019 */
573        VERSION_5_0_7(5, 0, 7),
574
575        /** Version 5.0.8 released June 4, 2019 */
576        VERSION_5_0_8(5, 0, 8),
577
578        /** Version 5.0.9 released June 11, 2019 */
579        VERSION_5_0_9(5, 0, 9),
580
581        /** Version 5.0.10 released June 18, 2019 */
582        VERSION_5_0_10(5, 0, 10),
583
584        /** Version 5.0.11 released June 25, 2019 */
585        VERSION_5_0_11(5, 0, 11),
586
587        /** Version 5.0.12 released July 9th, 2019 */
588        VERSION_5_0_12(5, 0, 12),
589
590        /** Version 5.0.13 released July 16th, 2019 */
591        VERSION_5_0_13(5, 0, 13),
592
593        /** Version 5.1.0 released May 21, 2019 */
594        VERSION_5_1_0(5, 1, 0),
595
596        /** Version 5.1.1 released May 28, 2019 */
597        VERSION_5_1_1(5, 1, 1),
598
599        /** Version 5.1.2 released June 4, 2019 */
600        VERSION_5_1_2(5, 1, 2),
601
602        /** Version 5.1.3 released June 11, 2019 */
603        VERSION_5_1_3(5, 1, 3),
604
605        /** Version 5.1.4 released June 18, 2019 */
606        VERSION_5_1_4(5, 1, 4),
607
608        /** Version 5.1.5 released June 25, 2019 */
609        VERSION_5_1_5(5, 1, 5),
610
611        /** Version 5.1.6 released July 2, 2019 */
612        VERSION_5_1_6(5, 1, 6),
613
614        /** Version 5.1.7 released July 9, 2019 */
615        VERSION_5_1_7(5, 1, 7),
616
617        /** Version 5.1.8 released July 16, 2019 */
618        VERSION_5_1_8(5, 1, 8),
619
620        /** Version 5.1.9 released July 23, 2019 */
621        VERSION_5_1_9(5, 1, 9),
622
623        /** Version 5.1.10 released July 30, 2019 */
624        VERSION_5_1_10(5, 1, 10),
625
626        /** Version 5.1.11 released August 6, 2019 */
627        VERSION_5_1_11(5, 1, 11),
628
629        /** Version 5.2.0 released July 2, 2019 */
630        VERSION_5_2_0(5, 2, 0),
631
632        /** Version 5.2.1 released July 9, 2019 */
633        VERSION_5_2_1(5, 2, 1),
634
635        /** Version 5.2.2 released July 16, 2019 */
636        VERSION_5_2_2(5, 2, 2),
637
638        /** Version 5.2.3 released July 23, 2019 */
639        VERSION_5_2_3(5, 2, 3),
640
641        /** Version 5.2.4 released July 30, 2019 */
642        VERSION_5_2_4(5, 2, 4),
643
644        /** Version 5.2.5 released August 6, 2019 */
645        VERSION_5_2_5(5, 2, 5),
646
647        /** Version 5.2.6 released August 13, 2019 */
648        VERSION_5_2_6(5, 2, 6),
649
650        /** Version 5.2.7 released August 20, 2019 */
651        VERSION_5_2_7(5, 2, 7),
652
653        /** Version 5.2.8 released August 27, 2019 */
654        VERSION_5_2_8(5, 2, 8),
655
656        /** Version 5.2.9 released September 3, 2019 */
657        VERSION_5_2_9(5, 2, 9),
658
659        /** Version 5.2.10 released September 10, 2019 */
660        VERSION_5_2_10(5, 2, 10),
661
662        /** Version 5.2.11 released September 17, 2019 */
663        VERSION_5_2_11(5, 2, 11),
664
665        /** Version 5.2.12 released September 24, 2019 */
666        VERSION_5_2_12(5, 2, 12),
667
668        /** Version 5.2.13 released October 1, 2019 */
669        VERSION_5_2_13(5, 2, 13),
670
671        /** Version 5.3.0 released August 13, 2019 */
672        VERSION_5_3_0(5, 3, 0),
673
674        /** Version 5.3.1 released August 20, 2019 */
675        VERSION_5_3_1(5, 3, 1),
676
677        /** Version 5.3.2 released August 27, 2019 */
678        VERSION_5_3_2(5, 3, 2),
679
680        /** Version 5.3.3 released September 3, 2019 */
681        VERSION_5_3_3(5, 3, 3),
682
683        /** Version 5.3.4 released September 10, 2019 */
684        VERSION_5_3_4(5, 3, 4),
685
686        /** Version 5.3.5 released September 17, 2019 */
687        VERSION_5_3_5(5, 3, 5),
688
689        /** Version 5.3.6 released September 24, 2019 */
690        VERSION_5_3_6(5, 3, 6),
691
692        /** Version 5.3.7 released October 1, 2019 */
693        VERSION_5_3_7(5, 3, 7),
694
695        /** Version 5.3.8 released October 8, 2019 */
696        VERSION_5_3_8(5, 3, 8),
697
698        /** Version 5.3.9 released October 15, 2019 */
699        VERSION_5_3_9(5, 3, 9),
700
701        /** Version 5.3.10 released October 22, 2019 */
702        VERSION_5_3_10(5, 3, 10),
703
704        /** Version 5.3.11 released October 29, 2019 */
705        VERSION_5_3_11(5, 3, 11),
706
707        /** Version 5.3.12 released November 5, 2019 */
708        VERSION_5_3_12(5, 3, 12),
709
710        /** Version 5.3.13 released November 19, 2019 */
711        VERSION_5_3_13(5, 3, 13),
712
713        /** Version 5.3.14 released November 26, 2019 */
714        VERSION_5_3_14(5, 3, 14),
715
716        /** Version 5.4.0 released September 24, 2019 */
717        VERSION_5_4_0(5, 4, 0),
718
719        /** Version 5.4.1 released October 1, 2019 */
720        VERSION_5_4_1(5, 4, 1),
721
722        /** Version 5.4.2 released October 8, 2019 */
723        VERSION_5_4_2(5, 4, 2),
724
725        /** Version 5.4.3 released October 15, 2019 */
726        VERSION_5_4_3(5, 4, 3),
727
728        /** Version 5.4.4 released October 22, 2019 */
729        VERSION_5_4_4(5, 4, 4),
730
731        /** Version 5.4.5 released October 29, 2019 */
732        VERSION_5_4_5(5, 4, 5),
733
734        /** Version 5.4.6 released November 5, 2019 */
735        VERSION_5_4_6(5, 4, 6),
736
737        /** Version 5.4.7 released November 12, 2019 */
738        VERSION_5_4_7(5, 4, 7),
739
740        /** Version 5.4.8 released November 19, 2019 */
741        VERSION_5_4_8(5, 4, 8),
742
743        /** Version 5.4.9 released November 26, 2019 */
744        VERSION_5_4_9(5, 4, 9),
745
746        /** Version 5.4.10 released December 3, 2019 */
747        VERSION_5_4_10(5, 4, 10),
748
749        /** Version 5.4.11 released January 14, 2019 */
750        VERSION_5_4_11(5, 4, 11),
751
752        /** Version 5.5.0 released November 5, 2019 */
753        VERSION_5_5_0(5, 5, 0),
754
755        /** Version 5.5.1 released November 12, 2019 */
756        VERSION_5_5_1(5, 5, 1),
757
758        /** Version 5.5.2 released November 19, 2019 */
759        VERSION_5_5_2(5, 5, 2),
760
761        /** Version 5.5.3 released November 26, 2019 */
762        VERSION_5_5_3(5, 5, 3),
763
764        /** Version 5.5.4 released December 3, 2019 */
765        VERSION_5_5_4(5, 5, 4),
766
767        /** Version 5.5.5 released December 10, 2019 */
768        VERSION_5_5_5(5, 5, 5),
769
770        /** Version 5.5.6 released December 17, 2019 */
771        VERSION_5_5_6(5, 5, 6),
772
773        /** Version 5.5.7 released January 7, 2020 */
774        VERSION_5_5_7(5, 5, 7),
775
776        /** Version 5.5.8 released January 14, 2020 */
777        VERSION_5_5_8(5, 5, 8),
778
779        /** Version 5.5.9 released January 21, 2020 */
780        VERSION_5_5_9(5, 5, 9),
781
782        /** Version 5.5.10 released January 28, 2020 */
783        VERSION_5_5_10(5, 5, 10),
784
785        /** Version 5.5.11 released February 4, 2020 */
786        VERSION_5_5_11(5, 5, 11),
787
788        /** Version 5.5.12 released February 11, 2020 */
789        VERSION_5_5_12(5, 5, 12),
790
791        /** Version 5.5.13 released March 3, 2020 */
792        VERSION_5_5_13(5, 5, 13),
793
794        /** Version 5.6.0 released December 17, 2019 */
795        VERSION_5_6_0(5, 6, 0),
796
797        /** Version 5.6.1 released January 7, 2020 */
798        VERSION_5_6_1(5, 6, 1),
799
800        /** Version 5.6.2 released January 14, 2020 */
801        VERSION_5_6_2(5, 6, 2),
802
803        /** Version 5.6.3 released January 21, 2020 */
804        VERSION_5_6_3(5, 6, 3),
805
806        /** Version 5.6.4 released January 28, 2020 */
807        VERSION_5_6_4(5, 6, 4),
808
809        /** Version 5.6.5 released February 4, 2020 */
810        VERSION_5_6_5(5, 6, 5),
811
812        /** Version 5.6.6 released February 11, 2020 */
813        VERSION_5_6_6(5, 6, 6),
814
815        /** Version 5.6.7 released February 18, 2020 */
816        VERSION_5_6_7(5, 6, 7),
817
818        /** Version 5.6.8 released February 25, 2020 */
819        VERSION_5_6_8(5, 6, 8),
820
821        /** Version 5.7.0 released January 28, 2020 */
822        VERSION_5_7_0(5, 7, 0),
823
824        /** Version 5.7.1 released February 4, 2020 */
825        VERSION_5_7_1(5, 7, 1),
826
827        /** Version 5.7.2 released February 11, 2020 */
828        VERSION_5_7_2(5, 7, 2),
829
830        /** Version 5.7.3 released February 18, 2020 */
831        VERSION_5_7_3(5, 7, 3),
832
833        /** Version 5.7.4 released February 25, 2020 */
834        VERSION_5_7_4(5, 7, 4),
835
836        /** Version 5.7.5 released March 3, 2020 */
837        VERSION_5_7_5(5, 7, 5),
838
839        /** Version 5.7.6 released March 10, 2020 */
840        VERSION_5_7_6(5, 7, 6),
841
842        /** Version 5.7.0 released March 10, 2020 */
843        VERSION_5_8_0(5, 8, 0);
844
845        /**
846         * The latest published version of Teamscale. This version is used in
847         * AnalysisProfileMigrationTest to ensure analysis profiles can be migrated.
848         * However as this test can and should only be added once the final release has
849         * been built this test only runs against the published versions. The
850         * unpublished versions are used during development to indicate that services
851         * will be available with the next, yet unpublished release.
852         */
853        public static final ETeamscaleVersion PUBLISHED_VERSION = getCurrentPublishedVersion();
854
855        /** The current version of Teamscale. */
856        public static final ETeamscaleVersion CURRENT_VERSION = values()[values().length - 1];
857
858        /** The minimum supported REST API version. */
859        public static final ETeamscaleVersion MIN_SUPPORTED_API_VERSION = VERSION_5_7_0;
860
861        /** Returns the latest published version. */
862        private static ETeamscaleVersion getCurrentPublishedVersion() {
863                return CollectionUtils.reverse(Arrays.asList(values())).stream().filter(version -> version.published)
864                                .findFirst().get();
865        }
866
867        /** The major version. */
868        public final int major;
869
870        /** The minor version. */
871        public final int minor;
872
873        /** The patch level. */
874        public final int patch;
875
876        /** Whether the version is already published. */
877        private final boolean published;
878
879        /** Constructor. */
880        ETeamscaleVersion(int major, int minor, int patch) {
881                this(major, minor, patch, true);
882        }
883
884        ETeamscaleVersion(int major, int minor, int patch, boolean published) {
885                this.major = major;
886                this.minor = minor;
887                this.patch = patch;
888                this.published = published;
889        }
890
891        /** {@inheritDoc} */
892        @Override
893        public String toString() {
894                String result = major + "." + minor;
895                if (patch > 0) {
896                        result += "." + patch;
897                }
898                return result;
899        }
900
901        /** Creates a new teamscale version object from the given enum literal. */
902        public Version toVersionObject() {
903                return new Version(major, minor, patch);
904        }
905
906        /**
907         * Returns the version as an integer metric by reserving two digits for each
908         * part.
909         */
910        public int toMetric() {
911                return (major * 100 + minor) * 100 + patch;
912        }
913
914        /**
915         * Returns the next version after the current one or null if the current version
916         * is already the most recent version.
917         */
918        public ETeamscaleVersion nextOrNull() {
919                if (ordinal() + 1 >= ETeamscaleVersion.values().length) {
920                        return null;
921                }
922                return ETeamscaleVersion.values()[ordinal() + 1];
923        }
924}