JSF facet configurations added
[fedora-idea.git] / source / com / intellij / facet / impl / ui / libraries / versions / LibrariesConfigurationManager.java
blob6ecf37d49aefaba6814a34ad047b024795baf93e
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;
14 import java.util.Map;
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$";
22 @NotNull
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);
30 assert libs != null;
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);
44 } else {
45 for (String infoVersion : libInfoVersions) {
46 addVersionLibrary(infoVersion.trim(), versionLibs, defaultVersion, defaultRI, defaultDownloadUrl, defaultPresentationUrl, libInfo);
51 return versionLibs;
54 private static void addVersionLibrary(@Nullable String infoVersion,
55 Map<LibraryVersionInfo, List<LibraryInfo>> versionLibs,
56 String defaultVersion,
57 String defaultRI,
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);
78 @Nullable
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,
85 String version,
86 String ri,
87 LibraryConfigurationInfo libInfo) {
89 downloadUrl = downloadUrl.replace(VERSION_TEMPLATE, version);
90 if (ri != null) {
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() {