blob: b7ade4d981ddbf63414be95da5a8ff67cc5c7f88 [file] [log] [blame]
package org.jetbrains.idea.maven.project;
import com.intellij.openapi.util.Comparing;
import com.intellij.util.SmartList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.maven.dom.DependencyConflictId;
import org.jetbrains.idea.maven.model.MavenArtifact;
import org.jetbrains.idea.maven.model.MavenId;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Sergey Evdokimov
*/
public class MavenArtifactIndex {
private static final MavenArtifactIndex EMPTY_INDEX = new MavenArtifactIndex(Collections.<String, Map<String, List<MavenArtifact>>>emptyMap());
private final Map<String, Map<String, List<MavenArtifact>>> myData;
private MavenArtifactIndex(Map<String, Map<String, List<MavenArtifact>>> data) {
myData = data;
}
public Map<String, Map<String, List<MavenArtifact>>> getData() {
return myData;
}
@NotNull
public List<MavenArtifact> findArtifacts(@Nullable String groupId, @Nullable String artifactId) {
Map<String, List<MavenArtifact>> groupMap = myData.get(groupId);
if (groupMap == null) return Collections.emptyList();
List<MavenArtifact> res = groupMap.get(artifactId);
return res == null ? Collections.<MavenArtifact>emptyList() : res;
}
@NotNull
public List<MavenArtifact> findArtifacts(@Nullable MavenId mavenId) {
if (mavenId == null) return Collections.emptyList();
return findArtifacts(mavenId.getGroupId(), mavenId.getArtifactId(), mavenId.getVersion());
}
@Nullable
public MavenArtifact findArtifacts(@NotNull DependencyConflictId id) {
for (MavenArtifact artifact : findArtifacts(id.getGroupId(), id.getArtifactId())) {
if (id.equals(DependencyConflictId.create(artifact))) {
return artifact;
}
}
return null;
}
@NotNull
public List<MavenArtifact> findArtifacts(@Nullable String groupId, @Nullable String artifactId, @Nullable String version) {
Map<String, List<MavenArtifact>> groupMap = myData.get(groupId);
if (groupMap == null) return Collections.emptyList();
List<MavenArtifact> artifacts = groupMap.get(artifactId);
if (artifacts == null) return Collections.emptyList();
List<MavenArtifact> res = new SmartList<MavenArtifact>();
for (MavenArtifact artifact : artifacts) {
if (Comparing.equal(version, artifact.getVersion())) {
res.add(artifact);
}
}
return res;
}
public static MavenArtifactIndex build(@NotNull List<MavenArtifact> dependencies) {
if (dependencies.isEmpty()) return EMPTY_INDEX;
Map<String, Map<String, List<MavenArtifact>>> map = new HashMap<String, Map<String, List<MavenArtifact>>>();
for (MavenArtifact dep : dependencies) {
String groupId = dep.getGroupId();
if (groupId == null) continue;
String artifactId = dep.getArtifactId();
if (artifactId == null) continue;
Map<String, List<MavenArtifact>> groupMap = map.get(groupId);
if (groupMap == null) {
groupMap = new HashMap<String, List<MavenArtifact>>();
map.put(groupId, groupMap);
}
List<MavenArtifact> artifactList = groupMap.get(artifactId);
if (artifactList == null) {
artifactList = new SmartList<MavenArtifact>();
groupMap.put(artifactId, artifactList);
}
artifactList.add(dep);
}
return new MavenArtifactIndex(map);
}
}