[vcs-log] minor: remove unused imports
[idea/community.git] / platform / vcs-log / impl / src / com / intellij / vcs / log / data / index / VcsLogUserIndex.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 com.intellij.vcs.log.data.index;
17
18 import com.intellij.openapi.Disposable;
19 import com.intellij.openapi.diagnostic.Logger;
20 import com.intellij.util.Consumer;
21 import com.intellij.util.containers.ContainerUtil;
22 import com.intellij.util.indexing.DataIndexer;
23 import com.intellij.util.indexing.ScalarIndexExtension;
24 import com.intellij.util.indexing.StorageException;
25 import com.intellij.vcs.log.VcsFullCommitDetails;
26 import com.intellij.vcs.log.VcsUser;
27 import com.intellij.vcs.log.data.VcsUserRegistryImpl;
28 import com.intellij.vcs.log.impl.FatalErrorHandler;
29 import gnu.trove.THashMap;
30 import gnu.trove.TIntHashSet;
31 import org.jetbrains.annotations.NotNull;
32
33 import java.io.IOException;
34 import java.util.Map;
35 import java.util.Set;
36
37 import static com.intellij.vcs.log.data.index.VcsLogPersistentIndex.getVersion;
38
39 public class VcsLogUserIndex extends VcsLogFullDetailsIndex<Void> {
40   private static final Logger LOG = Logger.getInstance(VcsLogUserIndex.class);
41   public static final String USERS = "users";
42   @NotNull private final VcsUserRegistryImpl myUserRegistry;
43
44   public VcsLogUserIndex(@NotNull String logId,
45                          @NotNull VcsUserRegistryImpl userRegistry,
46                          @NotNull FatalErrorHandler consumer,
47                          @NotNull Disposable disposableParent) throws IOException {
48     super(logId, USERS, getVersion(), new UserIndexer(userRegistry), ScalarIndexExtension.VOID_DATA_EXTERNALIZER,
49           consumer, disposableParent);
50     myUserRegistry = userRegistry;
51     ((UserIndexer)myIndexer).setFatalErrorConsumer(e -> consumer.consume(this, e));
52   }
53
54   public TIntHashSet getCommitsForUsers(@NotNull Set<VcsUser> users) throws IOException, StorageException {
55     Set<Integer> ids = ContainerUtil.newHashSet();
56     for (VcsUser user : users) {
57       ids.add(myUserRegistry.getUserId(user));
58     }
59     return getCommitsWithAnyKey(ids);
60   }
61
62   private static class UserIndexer implements DataIndexer<Integer, Void, VcsFullCommitDetails> {
63     @NotNull private final VcsUserRegistryImpl myRegistry;
64     @NotNull private Consumer<Exception> myFatalErrorConsumer = LOG::error;
65
66     public UserIndexer(@NotNull VcsUserRegistryImpl registry) {
67       myRegistry = registry;
68     }
69
70     @NotNull
71     @Override
72     public Map<Integer, Void> map(@NotNull VcsFullCommitDetails inputData) {
73       Map<Integer, Void> result = new THashMap<>();
74
75       try {
76         result.put(myRegistry.getUserId(inputData.getAuthor()), null);
77       }
78       catch (IOException e) {
79         myFatalErrorConsumer.consume(e);
80       }
81
82       return result;
83     }
84
85     public void setFatalErrorConsumer(@NotNull Consumer<Exception> fatalErrorConsumer) {
86       myFatalErrorConsumer = fatalErrorConsumer;
87     }
88   }
89 }