From fedb1ad5548491b14b913f7d12453f996c31f72e Mon Sep 17 00:00:00 2001 From: Sergey Vasiliev Date: Mon, 13 Apr 2009 17:33:48 +0400 Subject: [PATCH] JSF facet configurations added --- .../versions/LibrariesConfigurationManager.java | 60 +++++++++++------ .../versions/LibraryConfigurationInfo.java | 13 +++- .../ui/libraries/versions/VersionsComponent.java | 75 ++++++++++++++++------ 3 files changed, 107 insertions(+), 41 deletions(-) diff --git a/source/com/intellij/facet/impl/ui/libraries/versions/LibrariesConfigurationManager.java b/source/com/intellij/facet/impl/ui/libraries/versions/LibrariesConfigurationManager.java index abf7b98b40..6ecf37d49a 100644 --- a/source/com/intellij/facet/impl/ui/libraries/versions/LibrariesConfigurationManager.java +++ b/source/com/intellij/facet/impl/ui/libraries/versions/LibrariesConfigurationManager.java @@ -15,7 +15,7 @@ import java.util.Map; public class LibrariesConfigurationManager implements Disposable { - private static final String REQUIRED_CLASSES_DELIMITER = ","; + private static final String STRING_DELIMITER = ","; private static final String RI_TEMPLATE = "$RI$"; private static final String VERSION_TEMPLATE = "$VERSION$"; @@ -37,24 +37,42 @@ public class LibrariesConfigurationManager implements Disposable { for (LibraryConfigurationInfo libInfo : libs.getLibraryConfigurationInfos()) { - final String version = choose(libInfo.getVersion(), defaultVersion); + String[] libInfoVersions = getSplitted(libInfo.getVersion()); + + if (libInfoVersions.length == 0) { + addVersionLibrary(null, versionLibs, defaultVersion, defaultRI, defaultDownloadUrl, defaultPresentationUrl, libInfo); + } else { + for (String infoVersion : libInfoVersions) { + addVersionLibrary(infoVersion.trim(), versionLibs, defaultVersion, defaultRI, defaultDownloadUrl, defaultPresentationUrl, libInfo); + } + } + } + } + return versionLibs; + } - assert !StringUtil.isEmptyOrSpaces(version); + private static void addVersionLibrary(@Nullable String infoVersion, + Map> versionLibs, + String defaultVersion, + String defaultRI, + String defaultDownloadUrl, + String defaultPresentationUrl, + LibraryConfigurationInfo libInfo) { + final String version = choose(infoVersion, defaultVersion); - final String ri = choose(libInfo.getRI(), defaultRI); - final String downloadUrl = choose(libInfo.getDownloadUrl(), defaultDownloadUrl); - final String presentationdUrl = choose(libInfo.getPresentationdUrl(), defaultPresentationUrl); + assert !StringUtil.isEmptyOrSpaces(version); + final String ri = choose(libInfo.getRI(), defaultRI); + final String downloadUrl = choose(libInfo.getDownloadUrl(), defaultDownloadUrl); + final String presentationdUrl = choose(libInfo.getPresentationdUrl(), defaultPresentationUrl); - final LibraryVersionInfo versionInfo = new LibraryVersionInfo(version, ri); - final LibraryInfo info = createLibraryInfo(downloadUrl, presentationdUrl, version, ri, libInfo); - if (versionLibs.get(versionInfo) == null) versionLibs.put(versionInfo, new ArrayList()); + final LibraryVersionInfo versionInfo = new LibraryVersionInfo(version, ri); + final LibraryInfo info = createLibraryInfo(downloadUrl, presentationdUrl, version, ri, libInfo); - versionLibs.get(versionInfo).add(info); - } - } - return versionLibs; + if (versionLibs.get(versionInfo) == null) versionLibs.put(versionInfo, new ArrayList()); + + versionLibs.get(versionInfo).add(info); } @Nullable @@ -62,7 +80,10 @@ public class LibrariesConfigurationManager implements Disposable { return StringUtil.isEmptyOrSpaces(str) ? defaultStr : str; } - private static LibraryInfo createLibraryInfo(String downloadUrl, String presentationdUrl, String version, String ri, + private static LibraryInfo createLibraryInfo(String downloadUrl, + String presentationdUrl, + String version, + String ri, LibraryConfigurationInfo libInfo) { downloadUrl = downloadUrl.replace(VERSION_TEMPLATE, version); @@ -71,13 +92,14 @@ public class LibrariesConfigurationManager implements Disposable { } String jarName = libInfo.getJarName(); - return new LibraryInfo(jarName, version, downloadUrl + jarName, presentationdUrl, - getRequredClasses(libInfo.getRequiredClasses())); + String jarVersion = libInfo.getJarVersion(); + return new LibraryInfo(jarName, jarVersion == null ? version : jarVersion, downloadUrl + jarName, presentationdUrl, getSplitted(libInfo.getRequiredClasses())); } - private static String[] getRequredClasses(final String requiredClasses) { - final List strings = StringUtil.split(requiredClasses, REQUIRED_CLASSES_DELIMITER); - return ArrayUtil.toStringArray(strings); + private static String[] getSplitted(@Nullable final String s) { + if (StringUtil.isEmptyOrSpaces(s)) return new String[0]; + + return ArrayUtil.toStringArray(StringUtil.split(s, STRING_DELIMITER)); } public void dispose() { diff --git a/source/com/intellij/facet/impl/ui/libraries/versions/LibraryConfigurationInfo.java b/source/com/intellij/facet/impl/ui/libraries/versions/LibraryConfigurationInfo.java index b5527fc008..255fb27d9d 100644 --- a/source/com/intellij/facet/impl/ui/libraries/versions/LibraryConfigurationInfo.java +++ b/source/com/intellij/facet/impl/ui/libraries/versions/LibraryConfigurationInfo.java @@ -34,11 +34,14 @@ public class LibraryConfigurationInfo { @Attribute("download-url") public String myDownloadUrl; - @Attribute("presentation-url") + @Attribute("presentation-url") public String myPresentationdUrl; - @Attribute("required-classes") - public String myRequiredClasses; + @Attribute("required-classes") + public String myRequiredClasses; + + @Attribute("jar-version") + public String myJarVersion; public String getRI() { return myRI; @@ -63,4 +66,8 @@ public class LibraryConfigurationInfo { public String getRequiredClasses() { return myRequiredClasses; } + + public String getJarVersion() { + return myJarVersion; + } } \ No newline at end of file diff --git a/source/com/intellij/facet/impl/ui/libraries/versions/VersionsComponent.java b/source/com/intellij/facet/impl/ui/libraries/versions/VersionsComponent.java index e12917d9ed..737ca20723 100644 --- a/source/com/intellij/facet/impl/ui/libraries/versions/VersionsComponent.java +++ b/source/com/intellij/facet/impl/ui/libraries/versions/VersionsComponent.java @@ -12,6 +12,7 @@ import com.intellij.util.containers.HashSet; import com.intellij.util.containers.hash.HashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.NonNls; import javax.swing.*; import java.awt.*; @@ -33,6 +34,8 @@ public abstract class VersionsComponent { private Map> myButtons = new HashMap>(); + private LibraryVersionInfo myCurrentVersion = null; + public VersionsComponent(@Nullable final Module module, FacetLibrariesValidator validator) { myModule = module; myValidator = validator; @@ -45,6 +48,11 @@ public abstract class VersionsComponent { return myMainPanel; } + @Nullable + public LibraryVersionInfo getCurrentLibraryVersionInfo() { + return myCurrentVersion; + } + private void init() { myMainPanel = new JPanel(new GridBagLayout()); @@ -55,25 +63,21 @@ public abstract class VersionsComponent { addSingletonReferenceImplementationUI(ri); } else { - LibraryVersionInfo currentVersion = null; - for (String ri : referenceImplementations) { addMultipleReferenceImplementationUI(ri); - if (currentVersion == null) { - currentVersion = getCurrentVersion(ri); + if (myCurrentVersion == null) { + myCurrentVersion = getCurrentVersion(ri); } } - if (currentVersion != null) { - Pair currentPair = myButtons.get(currentVersion.getRI()); + if (myCurrentVersion != null) { + Pair currentPair = myButtons.get(myCurrentVersion.getRI()); if (currentPair != null) { currentPair.first.setSelected(true); - currentPair.second.setSelectedItem(currentVersion); + currentPair.second.setSelectedItem(myCurrentVersion); for (Pair buttonsPair : myButtons.values()) { - if (buttonsPair != currentPair) { - buttonsPair.second.setEnabled(false); - } + buttonsPair.second.setEnabled(buttonsPair == currentPair); } } } @@ -94,11 +98,16 @@ public abstract class VersionsComponent { if (detectionClass != null && myModule != null) { final String version = JarVersionDetectionUtil.detectJarVersion(detectionClass, myModule); if (version != null) { + LibraryVersionInfo approximatedVersion = null; for (LibraryVersionInfo info : getLibraries().keySet()) { if (version.equals(info.getVersion())) { return info; } + if (version.startsWith(info.getVersion())) { + approximatedVersion = info; + } } + return approximatedVersion; } } @@ -129,6 +138,8 @@ public abstract class VersionsComponent { final JRadioButton radioButton = createRadioButton(ri); final JComboBox comboBox = createComboBox(ri); + comboBox.setEnabled(false); + addToPanel(radioButton, comboBox); myButtons.put(ri, new Pair(radioButton, comboBox)); @@ -157,7 +168,12 @@ public abstract class VersionsComponent { comboBox.setSelectedItem(currentVersion); } else { - comboBox.setSelectedItem(getLastElement(getSupportedVersions(ri))); + if (comboBox.getSelectedIndex() < 0) { + comboBox.setSelectedItem(getAppropriateVersion(getSupportedVersions(ri))); + } + else { + updateCurrentVersion(comboBox); // activate already selected + } } } else { @@ -177,21 +193,42 @@ public abstract class VersionsComponent { comboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - final LibraryVersionInfo versionInfo = getSelectedVersion(comboBox); - - if (versionInfo != null) { - myValidator.setDescription(new FacetLibrariesValidatorDescription(versionInfo.getVersion())); - myValidator.setRequiredLibraries(getRequiredLibraries(versionInfo)); - } + updateCurrentVersion(comboBox); } }); return comboBox; } + private void updateCurrentVersion(JComboBox comboBox) { + final LibraryVersionInfo versionInfo = getSelectedVersion(comboBox); + + if (versionInfo != null) { + myCurrentVersion = versionInfo; + myValidator.setDescription(getFacetLibrariesValidatorDescription(versionInfo)); + myValidator.setRequiredLibraries(getRequiredLibraries(versionInfo)); + } + } + + protected FacetLibrariesValidatorDescription getFacetLibrariesValidatorDescription(LibraryVersionInfo versionInfo) { + return new FacetLibrariesValidatorDescription(versionInfo.getVersion()) { + @NonNls + public String getDefaultLibraryName() { + if (myCurrentVersion != null) { + String ri = myCurrentVersion.getRI(); + String version = myCurrentVersion.getVersion(); + + return StringUtil.isEmptyOrSpaces(ri) ? version : ri + "." + version; + } + + return super.getDefaultLibraryName(); + } + }; + } + @Nullable - private static LibraryVersionInfo getLastElement(List versions) { - return versions.size() > 0 ? versions.get(versions.size() - 1) : null; + private static LibraryVersionInfo getAppropriateVersion(List versions) { + return versions.size() > 0 ? versions.get(0) : null; } private LibraryInfo[] getRequiredLibraries(LibraryVersionInfo versionInfo) { -- 2.11.4.GIT