1 package com
.intellij
.facet
.impl
.ui
.libraries
.versions
;
3 import com
.intellij
.facet
.ui
.libraries
.LibraryInfo
;
4 import com
.intellij
.openapi
.Disposable
;
5 import com
.intellij
.openapi
.util
.text
.StringUtil
;
6 import com
.intellij
.util
.ArrayUtil
;
7 import com
.intellij
.util
.containers
.HashMap
;
8 import com
.intellij
.util
.xmlb
.XmlSerializer
;
9 import org
.jetbrains
.annotations
.NotNull
;
10 import org
.jetbrains
.annotations
.Nullable
;
12 import java
.util
.ArrayList
;
13 import java
.util
.List
;
16 public class LibrariesConfigurationManager
implements Disposable
{
18 private static final String STRING_DELIMITER
= ",";
19 private static final String RI_TEMPLATE
= "$RI$";
20 private static final String VERSION_TEMPLATE
= "$VERSION$";
23 public static Map
<LibraryVersionInfo
, List
<LibraryInfo
>> getLibraries(final String
... urls
) {
24 final Map
<LibraryVersionInfo
, List
<LibraryInfo
>> versionLibs
= new HashMap
<LibraryVersionInfo
, List
<LibraryInfo
>>();
26 for (String url
: urls
) {
27 final LibrariesConfigurationInfo libs
=
28 XmlSerializer
.deserialize(LibrariesConfigurationInfo
.class.getResource(url
), LibrariesConfigurationInfo
.class);
31 assert libs
.getLibraryConfigurationInfos() != null;
33 final String defaultVersion
= libs
.getDefaultVersion();
34 final String defaultRI
= libs
.getDefaultRI();
35 final String defaultDownloadUrl
= libs
.getDefaultDownloadUrl();
36 final String defaultPresentationUrl
= libs
.getDefaultPresentationUrl();
39 for (LibraryConfigurationInfo libInfo
: libs
.getLibraryConfigurationInfos()) {
40 String
[] libInfoVersions
= getSplitted(libInfo
.getVersion());
42 if (libInfoVersions
.length
== 0) {
43 addVersionLibrary(null, versionLibs
, defaultVersion
, defaultRI
, defaultDownloadUrl
, defaultPresentationUrl
, libInfo
);
45 for (String infoVersion
: libInfoVersions
) {
46 addVersionLibrary(infoVersion
.trim(), versionLibs
, defaultVersion
, defaultRI
, defaultDownloadUrl
, defaultPresentationUrl
, libInfo
);
54 private static void addVersionLibrary(@Nullable String infoVersion
,
55 Map
<LibraryVersionInfo
, List
<LibraryInfo
>> versionLibs
,
56 String defaultVersion
,
58 String defaultDownloadUrl
,
59 String defaultPresentationUrl
,
60 LibraryConfigurationInfo libInfo
) {
61 final String version
= choose(infoVersion
, defaultVersion
);
63 assert !StringUtil
.isEmptyOrSpaces(version
);
65 final String ri
= choose(libInfo
.getRI(), defaultRI
);
66 final String downloadUrl
= choose(libInfo
.getDownloadUrl(), defaultDownloadUrl
);
67 final String presentationdUrl
= choose(libInfo
.getPresentationdUrl(), defaultPresentationUrl
);
70 final LibraryVersionInfo versionInfo
= new LibraryVersionInfo(version
, ri
);
71 final LibraryInfo info
= createLibraryInfo(downloadUrl
, presentationdUrl
, version
, ri
, libInfo
);
73 if (versionLibs
.get(versionInfo
) == null) versionLibs
.put(versionInfo
, new ArrayList
<LibraryInfo
>());
75 versionLibs
.get(versionInfo
).add(info
);
79 private static String
choose(@Nullable String str
, @Nullable String defaultStr
) {
80 return StringUtil
.isEmptyOrSpaces(str
) ? defaultStr
: str
;
83 private static LibraryInfo
createLibraryInfo(String downloadUrl
,
84 String presentationdUrl
,
87 LibraryConfigurationInfo libInfo
) {
89 downloadUrl
= downloadUrl
.replace(VERSION_TEMPLATE
, version
);
91 downloadUrl
= downloadUrl
.replace(RI_TEMPLATE
, ri
);
94 String jarName
= libInfo
.getJarName();
95 String jarVersion
= libInfo
.getJarVersion();
96 return new LibraryInfo(jarName
, jarVersion
== null ? version
: jarVersion
, downloadUrl
+ jarName
, presentationdUrl
, getSplitted(libInfo
.getRequiredClasses()));
99 private static String
[] getSplitted(@Nullable final String s
) {
100 if (StringUtil
.isEmptyOrSpaces(s
)) return new String
[0];
102 return ArrayUtil
.toStringArray(StringUtil
.split(s
, STRING_DELIMITER
));
105 public void dispose() {