[LIB-2] Add snooker-score-api source files
[snooker-score-api.git] / src / main / java / org / hedgecode / snooker / compare / MatchComparators.java
1 /*
2  * Copyright (c) 2017. Developed by Hedgecode.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.hedgecode.snooker.compare;
18
19 import java.util.Comparator;
20
21 import org.hedgecode.snooker.api.Match;
22
23 /**
24  * Set of Comparators for {@link Match}.
25  * 1. Sorting by Round and Number of Match {@link RoundNumberComparator};
26  * 2. Sorting by Event {@link EventComparator}.
27  *
28  * @author Dmitry Samoshin aka gotty
29  */
30 public enum MatchComparators {
31
32     ROUND_NUMBER ( new RoundNumberComparator() ),
33     EVENT        ( new EventComparator() );
34
35     private Comparator<Match> comparator;
36
37     MatchComparators(Comparator<Match> comparator) {
38         this.comparator = comparator;
39     }
40
41     public Comparator<Match> comparator() {
42         return comparator;
43     }
44
45     static class RoundNumberComparator implements Comparator<Match> {
46
47         @Override
48         public int compare(Match match1, Match match2) {
49             return match1.round() == match2.round()
50                     ? match1.number() - match2.round()
51                     : match2.round() - match1.round();
52         }
53
54     }
55
56     static class EventComparator implements Comparator<Match> {
57
58         @Override
59         public int compare(Match match1, Match match2) {
60             return match1.eventId() - match2.eventId();
61         }
62
63     }
64
65 }