vcs: Removed unused "RevisionChangesNotSupportedException"
[idea/community.git] / plugins / svn4idea / src / org / jetbrains / idea / svn / integrate / QuantitySelection.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
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 package org.jetbrains.idea.svn.integrate;
17
18 import org.jetbrains.annotations.NotNull;
19
20 import java.util.Set;
21
22 import static com.intellij.util.containers.ContainerUtil.newHashSet;
23
24 public class QuantitySelection<T> {
25   @NotNull private final Group<T> mySelected;
26   @NotNull private final Group<T> myUnselected;
27
28   public QuantitySelection(boolean startFromSelectAll) {
29     mySelected = new Group<>();
30     myUnselected = new Group<>();
31     if (startFromSelectAll) {
32       mySelected.setAll();
33     } else {
34       myUnselected.setAll();
35     }
36   }
37
38   public void add(T t) {
39     if (mySelected.hasAll()) {
40       myUnselected.remove(t);
41     } else {
42       mySelected.add(t);
43     }
44   }
45
46   public void remove(T t) {
47     if (mySelected.hasAll()) {
48       myUnselected.add(t);
49     } else {
50       mySelected.remove(t);
51     }
52   }
53
54   public void clearAll() {
55     mySelected.clearAll();
56     myUnselected.setAll();
57   }
58
59   public void setAll() {
60     myUnselected.clearAll();
61     mySelected.setAll();
62   }
63
64   @NotNull
65   public Set<T> getSelected() {
66     return mySelected.getItems();
67   }
68
69   @NotNull
70   public Set<T> getUnselected() {
71     return myUnselected.getItems();
72   }
73
74   public boolean isSelected(T t) {
75     return mySelected.hasAll() && !myUnselected.has(t) || myUnselected.hasAll() && mySelected.has(t);
76   }
77
78   public boolean areAllSelected() {
79     return mySelected.hasAll();
80   }
81
82   private static class Group<T> {
83     private boolean myAll;
84     @NotNull private final Set<T> myItems = newHashSet();
85
86     public void add(T t) {
87       myItems.add(t);
88     }
89
90     public void remove(T t) {
91       myAll = false;
92       myItems.remove(t);
93     }
94
95     public void clearAll() {
96       myAll = false;
97       myItems.clear();
98     }
99
100     public void setAll() {
101       myAll = true;
102       myItems.clear();
103     }
104
105     @NotNull
106     public Set<T> getItems() {
107       return myItems;
108     }
109
110     public boolean hasAll() {
111       return myAll;
112     }
113
114     public boolean has(T t) {
115       return myItems.contains(t);
116     }
117   }
118 }