From ddbc14a0d3ef49455eabe288faa4dd02cceec752 Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Wed, 20 Apr 2022 00:58:06 +0200 Subject: [PATCH 1/2] new nb module project wizzard improvements. - use dev snapshot as fallback instead of RELEASE90 - sort the version list properly, newest first - filter out non-apache releases --- .../apisupport/NbmWizardPanelVisual.java | 116 +++++++----------- 1 file changed, 43 insertions(+), 73 deletions(-) diff --git a/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/NbmWizardPanelVisual.java b/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/NbmWizardPanelVisual.java index da8b25de8ba4..356eb1049f17 100644 --- a/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/NbmWizardPanelVisual.java +++ b/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/NbmWizardPanelVisual.java @@ -22,22 +22,17 @@ import java.awt.EventQueue; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; -import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import javax.swing.DefaultComboBoxModel; import javax.swing.SwingUtilities; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.netbeans.api.progress.aggregate.AggregateProgressFactory; import org.netbeans.api.progress.aggregate.AggregateProgressHandle; -import org.netbeans.api.progress.aggregate.ProgressContributor; import org.netbeans.modules.maven.api.MavenValidators; import org.netbeans.modules.maven.api.archetype.Archetype; -import static org.netbeans.modules.maven.apisupport.Bundle.ADD_Module_Name; -import static org.netbeans.modules.maven.apisupport.Bundle.Handle_Download; -import static org.netbeans.modules.maven.apisupport.Bundle.NbmWizardPanelVisual_wait; -import org.netbeans.modules.maven.embedder.exec.ProgressTransferListener; import org.netbeans.modules.maven.indexer.api.NBVersionInfo; import org.netbeans.modules.maven.indexer.api.RepositoryInfo; import org.netbeans.modules.maven.indexer.api.RepositoryPreferences; @@ -51,11 +46,13 @@ import org.netbeans.validation.api.ui.ValidationGroup; import org.netbeans.validation.api.ui.swing.SwingValidationGroup; import org.openide.WizardDescriptor; -import org.openide.util.Exceptions; import org.openide.util.NbBundle; import org.openide.util.NbBundle.Messages; import org.openide.util.RequestProcessor; +import static org.netbeans.modules.maven.apisupport.Bundle.ADD_Module_Name; +import static org.netbeans.modules.maven.apisupport.Bundle.NbmWizardPanelVisual_wait; + /** * * @author mkleint @@ -66,6 +63,10 @@ public class NbmWizardPanelVisual extends javax.swing.JPanel { @Messages("NbmWizardPanelVisual.wait=Searching...") private static final String SEARCHING = NbmWizardPanelVisual_wait(); + private static final String RELEASE_PREFIX = "RELEASE"; + private static final int MINIMUM_VERSION = 111; + private static final Set IGNORE_RELEASES = new HashSet<>(Arrays.asList("RELEASE120")); + private final NbmWizardPanel panel; private ValidationGroup vg = ValidationGroup.create(); private ValidationGroup vgEnabled = ValidationGroup.create(); @@ -73,7 +74,6 @@ public class NbmWizardPanelVisual extends javax.swing.JPanel { private boolean isLoaded = false; private AggregateProgressHandle handle; private final Object HANDLE_LOCK = new Object(); - @SuppressWarnings("unchecked") // SIMPLEVALIDATION-48 @Messages({"ADD_Module_Name=NetBeans Module ArtifactId", @@ -113,70 +113,20 @@ public void run() { } } if (info != null) { - final List versions = new ArrayList(); final Result result = RepositoryQueries.getVersionsResult("org.netbeans.cluster", "platform", Collections.unmodifiableList(info)); - for (NBVersionInfo version : result.getResults()) { // NOI18N - versions.add(version.getVersion()); - } - versions.add(NbmWizardIterator.SNAPSHOT_VERSION); // NOI18N - if (result.isPartial() || versions.size() == 1) { - RP.post(new Runnable() { - //download archetype to figure the default value of the netbeansVersion parameter. - @Override - public void run() { - AggregateProgressHandle hndl = AggregateProgressFactory.createHandle(Handle_Download(), - new ProgressContributor[]{ - AggregateProgressFactory.createProgressContributor("zaloha")}, //NOI18N - ProgressTransferListener.cancellable(), null); - synchronized (HANDLE_LOCK) { - handle = hndl; - } + List versions = filterVersions(result); - try { - arch.resolveArtifacts(hndl); - Map props = arch.loadRequiredProperties(); - String def = props.get("netbeansVersion"); - final List versions3 = new ArrayList(); - if (def != null) { - versions3.add(def); - } - versions3.add(NbmWizardIterator.SNAPSHOT_VERSION); - if (result.isPartial()) { - versions3.add(SEARCHING); - } - EventQueue.invokeLater(new Runnable() { - public @Override - void run() { - versionCombo.setModel(new DefaultComboBoxModel(versions3.toArray())); - versionComboActionPerformed(null); - } - }); - } catch (ArtifactResolutionException ex) { - Exceptions.printStackTrace(ex); - } catch (ArtifactNotFoundException ex) { - Exceptions.printStackTrace(ex); - } finally { - } - } - }); - } if (result.isPartial()) { versions.add(SEARCHING); //we return the values we have and schedule retrieval of the rest. RP.post(new Runnable() { @Override public void run() { - final List versions2 = new ArrayList(); result.waitForSkipped(); - RepositoryPreferences.getInstance().removeTransientRepositories(key); - for (NBVersionInfo version : result.getResults()) { // NOI18N - versions2.add(version.getVersion()); - } - versions2.add(NbmWizardIterator.SNAPSHOT_VERSION); // NOI18N - + List allVersions = filterVersions(result); EventQueue.invokeLater(new Runnable() { public @Override void run() { - versionCombo.setModel(new DefaultComboBoxModel(versions2.toArray())); + versionCombo.setModel(new DefaultComboBoxModel(allVersions.toArray())); versionComboActionPerformed(null); } }); @@ -198,6 +148,27 @@ public void run() { } + private static List filterVersions(Result result) { + List versions = result.getResults().stream() + .map(NBVersionInfo::getVersion) + .filter((v) -> v.startsWith(RELEASE_PREFIX) && v.length() > RELEASE_PREFIX.length()) + .filter((v) -> versionOf(v) >= MINIMUM_VERSION) + .filter((v) -> !IGNORE_RELEASES.contains(v)) + .sorted((v1, v2) -> v2.compareTo(v1)) + .collect(Collectors.toCollection(ArrayList::new)); // must be mutable + versions.add(NbmWizardIterator.SNAPSHOT_VERSION); + return versions; + } + + private static int versionOf(String release) { + int end; + for (end = RELEASE_PREFIX.length(); end < release.length(); end++) { + if (!Character.isDigit(release.charAt(end))) + break; + } + return Integer.parseInt(release.substring(RELEASE_PREFIX.length(), end)); + } + private void initValidators() { if (isApp) { vg.add(txtAddModule, ValidatorUtils.merge( @@ -313,15 +284,14 @@ private void cbAddModuleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-F }//GEN-LAST:event_cbAddModuleActionPerformed private void versionComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_versionComboActionPerformed - String version = (String) versionCombo.getSelectedItem(); - NBVersionInfo nbvi = new NBVersionInfo("x", "x", "x", version, null, null, null, null, null); - if (version != null && (version.equals(NbmWizardIterator.SNAPSHOT_VERSION) || nbvi.compareTo(new NBVersionInfo("x", "x", "x", "RELEASE69-BETA", null, null, null, null, null)) <= 0)) { - cbOsgiDeps.setEnabled(true); - //cbOsgiDeps.setSelected(version.equals("SNAPSHOT") || nbvi.compareTo(new NBVersionInfo("x", "x", "x", "RELEASE71", null, null, null, null, null)) <= 0); - } else { - cbOsgiDeps.setEnabled(false); - cbOsgiDeps.setSelected(false); - } + cbOsgiDeps.setVisible(false); // none of the apache releases support osgi +// String version = (String) versionCombo.getSelectedItem(); +// if (RELEASE90_VERSION.equals(version)) { +// cbOsgiDeps.setEnabled(true); +// } else { +// cbOsgiDeps.setEnabled(false); +// cbOsgiDeps.setSelected(false); +// } vgEnabled.performValidation(); }//GEN-LAST:event_versionComboActionPerformed From 8bc0bf1a81cb0158954853581ad7595fcd57f725 Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Wed, 20 Apr 2022 01:02:49 +0200 Subject: [PATCH 2/2] NbmWizardPanelVisual cleanup: lambdas, boxing, diamonds etc. --- .../apisupport/NbmWizardPanelVisual.java | 122 ++++++++---------- 1 file changed, 52 insertions(+), 70 deletions(-) diff --git a/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/NbmWizardPanelVisual.java b/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/NbmWizardPanelVisual.java index 356eb1049f17..f3ea6c102145 100644 --- a/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/NbmWizardPanelVisual.java +++ b/apisupport/maven.apisupport/src/org/netbeans/modules/maven/apisupport/NbmWizardPanelVisual.java @@ -68,8 +68,9 @@ public class NbmWizardPanelVisual extends javax.swing.JPanel { private static final Set IGNORE_RELEASES = new HashSet<>(Arrays.asList("RELEASE120")); private final NbmWizardPanel panel; - private ValidationGroup vg = ValidationGroup.create(); - private ValidationGroup vgEnabled = ValidationGroup.create(); + private final ValidationGroup vg = ValidationGroup.create(); + private final ValidationGroup vgEnabled = ValidationGroup.create(); + boolean isApp = false; private boolean isLoaded = false; private AggregateProgressHandle handle; @@ -87,62 +88,49 @@ public NbmWizardPanelVisual(NbmWizardPanel panel) { cbAddModule.setVisible(false); txtAddModule.setVisible(false); } - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - initValidators(); - } - }); + SwingUtilities.invokeLater(this::initValidators); - RP.post(new Runnable() { - public @Override void run() { - EventQueue.invokeLater(new Runnable() { - public @Override void run() { - versionCombo.setModel(new DefaultComboBoxModel(new Object[] {SEARCHING})); - } - }); - List info = MavenNbModuleImpl.netbeansRepo(); - final Object key = this; - if (info == null || info.contains(null)) { - try { - //transient remove central, make central transient too - RepositoryPreferences.getInstance().addTransientRepository(key, "central", "central", "https://repo1.maven.org/maven2", RepositoryInfo.MirrorStrategy.NON_WILDCARD); - info = MavenNbModuleImpl.netbeansRepo(); - } catch (URISyntaxException x) { - assert false : x; - } + RP.post(() -> { + + EventQueue.invokeLater(() -> versionCombo.setModel(new DefaultComboBoxModel(new Object[] {SEARCHING}))); + + List info = MavenNbModuleImpl.netbeansRepo(); + final Object key = this; + if (info == null || info.contains(null)) { + try { + //transient remove central, make central transient too + RepositoryPreferences.getInstance().addTransientRepository(key, "central", "central", "https://repo1.maven.org/maven2", RepositoryInfo.MirrorStrategy.NON_WILDCARD); + info = MavenNbModuleImpl.netbeansRepo(); + } catch (URISyntaxException x) { + assert false : x; } - if (info != null) { - final Result result = RepositoryQueries.getVersionsResult("org.netbeans.cluster", "platform", Collections.unmodifiableList(info)); - List versions = filterVersions(result); - - if (result.isPartial()) { - versions.add(SEARCHING); - //we return the values we have and schedule retrieval of the rest. - RP.post(new Runnable() { - @Override - public void run() { - result.waitForSkipped(); - List allVersions = filterVersions(result); - EventQueue.invokeLater(new Runnable() { - public @Override void run() { - versionCombo.setModel(new DefaultComboBoxModel(allVersions.toArray())); - versionComboActionPerformed(null); - } - }); - } - }); - } else { + } + + if (info != null) { + final Result result = RepositoryQueries.getVersionsResult("org.netbeans.cluster", "platform", Collections.unmodifiableList(info)); + List versions = filterVersions(result); + + if (result.isPartial()) { + versions.add(SEARCHING); + //we return the values we have and schedule retrieval of the rest. + RP.post(() -> { + result.waitForSkipped(); RepositoryPreferences.getInstance().removeTransientRepositories(key); - } - isLoaded = true; - EventQueue.invokeLater(new Runnable() { - public @Override void run() { - versionCombo.setModel(new DefaultComboBoxModel(versions.toArray())); - versionComboActionPerformed(null); - } - }); - } + List allVersions = filterVersions(result); + EventQueue.invokeLater(() -> { + versionCombo.setModel(new DefaultComboBoxModel(allVersions.toArray())); + versionComboActionPerformed(null); + }); + }); + } else { + RepositoryPreferences.getInstance().removeTransientRepositories(key); + } + + isLoaded = true; + EventQueue.invokeLater(() -> { + versionCombo.setModel(new DefaultComboBoxModel(versions.toArray())); + versionComboActionPerformed(null); + }); } }); @@ -313,7 +301,7 @@ void store(WizardDescriptor d) { } } - d.putProperty(NbmWizardIterator.OSGIDEPENDENCIES, Boolean.valueOf(cbOsgiDeps.isSelected())); + d.putProperty(NbmWizardIterator.OSGIDEPENDENCIES, cbOsgiDeps.isSelected()); if (isApp) { if (cbAddModule.isSelected()) { d.putProperty(NbmWizardIterator.NBM_ARTIFACTID, txtAddModule.getText().trim()); @@ -325,12 +313,9 @@ void store(WizardDescriptor d) { if (version != null && !version.equals(SEARCHING)) { d.putProperty(NbmWizardIterator.NB_VERSION, version); } - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - panel.getValidationGroup().remove(vg); - panel.getEnabledStateValidationGroup().remove(vgEnabled); - } + SwingUtilities.invokeLater(() -> { + panel.getValidationGroup().remove(vg); + panel.getEnabledStateValidationGroup().remove(vgEnabled); }); } @@ -344,7 +329,7 @@ void read(WizardDescriptor d) { Boolean b = (Boolean) d.getProperty(NbmWizardIterator.OSGIDEPENDENCIES); if (b != null) { - cbOsgiDeps.setSelected(b.booleanValue()); + cbOsgiDeps.setSelected(b); } if (isApp) { String artifId = (String) d.getProperty("artifactId"); @@ -360,13 +345,10 @@ void read(WizardDescriptor d) { if (version != null) { versionCombo.setSelectedItem(version); } - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - panel.getValidationGroup().addItem(vg, true); - panel.getEnabledStateValidationGroup().addItem(vgEnabled, true); - vgEnabled.performValidation(); - } + SwingUtilities.invokeLater(() -> { + panel.getValidationGroup().addItem(vg, true); + panel.getEnabledStateValidationGroup().addItem(vgEnabled, true); + vgEnabled.performValidation(); }); } }