d7dcf2db8b9ce9b295a868e1ca76c4016d1ad0dc
[idea/community.git] / java / openapi / src / org / jetbrains / idea / maven / utils / library / RepositoryLibraryDescription.java
1 /*
2  * Copyright 2000-2017 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.maven.utils.library;
17
18 import com.intellij.codeInsight.CodeInsightBundle;
19 import com.intellij.jarRepository.RepositoryLibraryDefinition;
20 import com.intellij.openapi.roots.DependencyScope;
21 import com.intellij.openapi.util.NlsContexts;
22 import com.intellij.openapi.util.NlsSafe;
23 import com.intellij.util.containers.ContainerUtil;
24 import icons.OpenapiIcons;
25 import org.jetbrains.annotations.NonNls;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28 import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor;
29
30 import javax.swing.*;
31 import java.util.Collections;
32 import java.util.HashMap;
33 import java.util.Map;
34
35 public class RepositoryLibraryDescription {
36   @NotNull @NonNls
37   public static final String LatestVersionId = "LATEST";
38   @NotNull @NonNls
39   public static final String LatestVersionDisplayName = "Latest";
40   @NotNull @NonNls
41   public static final String ReleaseVersionId = "RELEASE";
42   @NotNull @NonNls
43   public static final String DefaultVersionId = ReleaseVersionId;
44   @NotNull @NonNls
45   public static final String ReleaseVersionDisplayName = "Release";
46   @NotNull @NonNls
47   public static final String SnapshotVersionSuffix = "-SNAPSHOT";
48
49   public static final Icon DEFAULT_ICON = OpenapiIcons.RepositoryLibraryLogo;
50   
51   private static volatile Map<String, RepositoryLibraryDescription> ourStaticallyDefinedLibraries;
52   
53   private final String groupId;
54   private final String artifactId;
55   private final @NlsContexts.DialogTitle String libraryName;
56
57   protected RepositoryLibraryDescription(String groupId, String artifactId, @NlsContexts.DialogTitle String libraryName) {
58     this.groupId = groupId == null? "" : groupId;
59     this.artifactId = artifactId == null? "" : artifactId;
60     this.libraryName = libraryName == null ? CodeInsightBundle.message("unknown.node.text") : libraryName;
61   }
62
63   @NotNull
64   public static RepositoryLibraryDescription findDescription(@Nullable final String groupId, @Nullable final String artifactId) {
65     if (ourStaticallyDefinedLibraries == null) {
66       final HashMap<String, RepositoryLibraryDescription> map = new HashMap<>();
67       for (RepositoryLibraryDefinition def : RepositoryLibraryDefinition.EP_NAME.getExtensions()) {
68         final String id = def.groupId + ":" + def.artifactId;
69         map.put(id, new RepositoryLibraryDescription(def.groupId, def.artifactId, def.name));
70       }
71       ourStaticallyDefinedLibraries = Collections.unmodifiableMap(Collections.synchronizedMap(map));
72     }
73     final String id = groupId == null && artifactId == null ? CodeInsightBundle.message("unknown.node.text") : groupId + ":" + artifactId;
74     final RepositoryLibraryDescription description = ourStaticallyDefinedLibraries.get(id);
75     return description != null? description : new RepositoryLibraryDescription(groupId, artifactId, id);
76   }
77
78   @NotNull
79   public static RepositoryLibraryDescription findDescription(@NotNull final RepositoryLibraryProperties properties) {
80     return findDescription(properties.getGroupId(), properties.getArtifactId());
81   }
82
83   @NotNull
84   public static RepositoryLibraryDescription findDescription(@NotNull final JpsMavenRepositoryLibraryDescriptor descriptor) {
85     return findDescription(descriptor.getGroupId(), descriptor.getArtifactId());
86   }
87
88   @NotNull
89   public String getGroupId() {
90     return groupId;
91   }
92
93   @NotNull
94   public String getArtifactId() {
95     return artifactId;
96   }
97
98   @NotNull
99   public @NlsContexts.DialogTitle String getDisplayName() {
100     return libraryName;
101   }
102
103   @NotNull
104   public Icon getIcon() {
105     return DEFAULT_ICON;
106   }
107
108   @Nullable
109   public DependencyScope getSuggestedScope() {
110     return null;
111   }
112
113   // One library could have more then one description - for ex. in different plugins
114   // In this case heaviest description will be used
115   public int getWeight() {
116     return 1000;
117   }
118
119   public RepositoryLibraryProperties createDefaultProperties() {
120     return new RepositoryLibraryProperties(getGroupId(), getArtifactId(), ReleaseVersionId, true, ContainerUtil.emptyList());
121   }
122
123   public String getDisplayName(String version) {
124     if (LatestVersionId.equals(version)) {
125       version = LatestVersionDisplayName;
126     }
127     else if (ReleaseVersionId.equals(version)) {
128       version = ReleaseVersionDisplayName;
129     }
130     return getDisplayName() + (version == null ? "" : ":" + version);
131   }
132
133   public @NlsSafe String getMavenCoordinates(String version) {
134     return getGroupId() + ":" + getArtifactId() + ":" + version;
135   }
136 }