diff: improve javadoc for DiffRequestChain
[idea/community.git] / platform / diff-api / src / com / intellij / diff / chains / SimpleDiffRequestChain.java
1 /*
2  * Copyright 2000-2015 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 com.intellij.diff.chains;
17
18 import com.intellij.diff.requests.DiffRequest;
19 import com.intellij.openapi.ListSelection;
20 import com.intellij.openapi.diff.DiffBundle;
21 import com.intellij.openapi.progress.ProcessCanceledException;
22 import com.intellij.openapi.progress.ProgressIndicator;
23 import com.intellij.openapi.util.UserDataHolder;
24 import com.intellij.openapi.util.UserDataHolderBase;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27
28 import java.util.Collections;
29 import java.util.List;
30 import java.util.Objects;
31
32 public class SimpleDiffRequestChain extends UserDataHolderBase implements DiffRequestSelectionChain {
33   @NotNull private final ListSelection<? extends DiffRequestProducer> myRequests;
34
35   public SimpleDiffRequestChain(@NotNull DiffRequest request) {
36     this(Collections.singletonList(request));
37   }
38
39   public SimpleDiffRequestChain(@NotNull List<? extends DiffRequest> requests) {
40     this(requests, 0);
41   }
42
43   public SimpleDiffRequestChain(@NotNull List<? extends DiffRequest> requests, int selectedIndex) {
44     myRequests = ListSelection.createAt(requests, selectedIndex).map(request -> new DiffRequestProducerWrapper(request));
45   }
46
47   private SimpleDiffRequestChain(@NotNull ListSelection<? extends DiffRequestProducer> requests, @Nullable Object constructorFlag) {
48     assert constructorFlag == null;
49     myRequests = requests;
50   }
51
52   public static SimpleDiffRequestChain fromProducer(@NotNull DiffRequestProducer producer) {
53     return fromProducers(Collections.singletonList(producer));
54   }
55
56   public static SimpleDiffRequestChain fromProducers(@NotNull List<? extends DiffRequestProducer> producers) {
57     return fromProducers(producers, -1);
58   }
59
60   public static SimpleDiffRequestChain fromProducers(@NotNull List<? extends DiffRequestProducer> producers, int selectedIndex) {
61     return fromProducers(ListSelection.createAt(producers, selectedIndex));
62   }
63
64   public static SimpleDiffRequestChain fromProducers(@NotNull ListSelection<? extends DiffRequestProducer> producers) {
65     return new SimpleDiffRequestChain(producers, null);
66   }
67
68   @Override
69   public @NotNull ListSelection<? extends DiffRequestProducer> getListSelection() {
70     return myRequests;
71   }
72
73   public static class DiffRequestProducerWrapper implements DiffRequestProducer {
74     @NotNull private final DiffRequest myRequest;
75
76     public DiffRequestProducerWrapper(@NotNull DiffRequest request) {
77       myRequest = request;
78     }
79
80     @NotNull
81     public DiffRequest getRequest() {
82       return myRequest;
83     }
84
85     @NotNull
86     @Override
87     public String getName() {
88       String title = myRequest.getTitle();
89       if (title != null) return title;
90       return DiffBundle.message("diff.files.generic.request.title");
91     }
92
93     @NotNull
94     @Override
95     public DiffRequest process(@NotNull UserDataHolder context, @NotNull ProgressIndicator indicator)
96       throws ProcessCanceledException {
97       return myRequest;
98     }
99
100     @Override
101     public boolean equals(Object o) {
102       if (this == o) return true;
103       if (o == null || getClass() != o.getClass()) return false;
104       DiffRequestProducerWrapper wrapper = (DiffRequestProducerWrapper)o;
105       return myRequest == wrapper.myRequest;
106     }
107
108     @Override
109     public int hashCode() {
110       return Objects.hash(myRequest);
111     }
112   }
113 }