Skip to content

Commit bfeb994

Browse files
author
Federico Fissore
committed
Moved ContributedLibraryReleases out of LibrariesIndexTableModel and introduced its own special comparator. Will help with #4195
1 parent 6d03d26 commit bfeb994

5 files changed

+153
-73
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/*
2+
* This file is part of Arduino.
3+
*
4+
* Copyright 2015 Arduino LLC (http://www.arduino.cc/)
5+
*
6+
* Arduino is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation; either version 2 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program; if not, write to the Free Software
18+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*
20+
* As a special exception, you may use this file as part of a free software
21+
* library without restriction. Specifically, if other files instantiate
22+
* templates or use macros or inline functions from this file, or you compile
23+
* this file and link it with other files to produce an executable, this
24+
* file does not by itself cause the resulting executable to be covered by
25+
* the GNU General Public License. This exception does not however
26+
* invalidate any other reasons why the executable file might be covered by
27+
* the GNU General Public License.
28+
*/
29+
30+
package cc.arduino.contributions.libraries.ui;
31+
32+
import cc.arduino.contributions.DownloadableContributionBuiltInAtTheBottomComparator;
33+
import cc.arduino.contributions.filters.InstalledPredicate;
34+
import cc.arduino.contributions.libraries.ContributedLibrary;
35+
import cc.arduino.contributions.ui.FilteredAbstractTableModel;
36+
37+
import java.util.Collections;
38+
import java.util.LinkedList;
39+
import java.util.List;
40+
import java.util.stream.Collectors;
41+
42+
public class ContributedLibraryReleases {
43+
44+
private final ContributedLibrary library;
45+
private final List<ContributedLibrary> releases;
46+
private final List<String> versions;
47+
48+
private ContributedLibrary selected;
49+
50+
public ContributedLibraryReleases(ContributedLibrary library) {
51+
this.library = library;
52+
this.versions = new LinkedList<>();
53+
this.releases = new LinkedList<>();
54+
this.selected = null;
55+
add(library);
56+
}
57+
58+
public ContributedLibrary getLibrary() {
59+
return library;
60+
}
61+
62+
public List<ContributedLibrary> getReleases() {
63+
return releases;
64+
}
65+
66+
public boolean shouldContain(ContributedLibrary lib) {
67+
return lib.getName().equals(library.getName());
68+
}
69+
70+
public void add(ContributedLibrary library) {
71+
releases.add(library);
72+
String version = library.getParsedVersion();
73+
if (version != null) {
74+
versions.add(version);
75+
}
76+
selected = getLatest();
77+
}
78+
79+
public ContributedLibrary getInstalled() {
80+
List<ContributedLibrary> installedReleases = releases.stream().filter(new InstalledPredicate()).collect(Collectors.toList());
81+
Collections.sort(installedReleases, new DownloadableContributionBuiltInAtTheBottomComparator());
82+
83+
if (installedReleases.isEmpty()) {
84+
return null;
85+
}
86+
87+
return installedReleases.get(0);
88+
}
89+
90+
public ContributedLibrary getLatest() {
91+
return FilteredAbstractTableModel.getLatestOf(releases);
92+
}
93+
94+
public ContributedLibrary getSelected() {
95+
return selected;
96+
}
97+
98+
public void select(ContributedLibrary value) {
99+
for (ContributedLibrary plat : releases) {
100+
if (plat == value) {
101+
selected = plat;
102+
return;
103+
}
104+
}
105+
}
106+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* This file is part of Arduino.
3+
*
4+
* Copyright 2015 Arduino LLC (http://www.arduino.cc/)
5+
*
6+
* Arduino is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation; either version 2 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program; if not, write to the Free Software
18+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*
20+
* As a special exception, you may use this file as part of a free software
21+
* library without restriction. Specifically, if other files instantiate
22+
* templates or use macros or inline functions from this file, or you compile
23+
* this file and link it with other files to produce an executable, this
24+
* file does not by itself cause the resulting executable to be covered by
25+
* the GNU General Public License. This exception does not however
26+
* invalidate any other reasons why the executable file might be covered by
27+
* the GNU General Public License.
28+
*/
29+
30+
package cc.arduino.contributions.libraries.ui;
31+
32+
import java.util.Comparator;
33+
34+
public class ContributedLibraryReleasesComparator implements Comparator<ContributedLibraryReleases> {
35+
36+
@Override
37+
public int compare(ContributedLibraryReleases o1, ContributedLibraryReleases o2) {
38+
return o1.getLibrary().getName().compareToIgnoreCase(o2.getLibrary().getName());
39+
}
40+
41+
}

app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCell.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ public Component getTableCellRendererComponent(JTable table, Object value,
204204
return component;
205205
}
206206

207-
private LibrariesIndexTableModel.ContributedLibraryReleases editorValue;
207+
private ContributedLibraryReleases editorValue;
208208
private JTable parentTable;
209209

210210
@Override
@@ -217,12 +217,12 @@ public Component getTableCellEditorComponent(JTable table, Object value,
217217
boolean isSelected, int row,
218218
int column) {
219219
parentTable = table;
220-
editorValue = (LibrariesIndexTableModel.ContributedLibraryReleases) value;
220+
editorValue = (ContributedLibraryReleases) value;
221221
setEnabled(true);
222222

223223
final ContributedLibrary installed = editorValue.getInstalled();
224224

225-
List<ContributedLibrary> releases = editorValue.releases.stream().filter(new OnlyUpstreamReleasePredicate()).collect(Collectors.toList());
225+
List<ContributedLibrary> releases = editorValue.getReleases().stream().filter(new OnlyUpstreamReleasePredicate()).collect(Collectors.toList());
226226
List<ContributedLibrary> uninstalledReleases = releases.stream().filter(new InstalledPredicate().negate()).collect(Collectors.toList());
227227

228228
List<ContributedLibrary> installedBuiltIn = releases.stream().filter(new InstalledPredicate()).filter(new BuiltInPredicate()).collect(Collectors.toList());
@@ -263,7 +263,7 @@ public Component getTableCellEditorComponent(JTable table, Object value,
263263
}
264264

265265
private Component getUpdatedCellComponent(Object value, boolean isSelected, int row, boolean hasBuiltInRelease) {
266-
LibrariesIndexTableModel.ContributedLibraryReleases releases = (LibrariesIndexTableModel.ContributedLibraryReleases) value;
266+
ContributedLibraryReleases releases = (ContributedLibraryReleases) value;
267267

268268
JTextPane description = makeNewDescription(panel);
269269

app/src/cc/arduino/contributions/libraries/ui/LibrariesIndexTableModel.java

Lines changed: 1 addition & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -29,89 +29,22 @@
2929

3030
package cc.arduino.contributions.libraries.ui;
3131

32-
import cc.arduino.contributions.DownloadableContributionBuiltInAtTheBottomComparator;
33-
import cc.arduino.contributions.filters.InstalledPredicate;
3432
import cc.arduino.contributions.libraries.ContributedLibrary;
3533
import cc.arduino.contributions.libraries.LibrariesIndexer;
3634
import cc.arduino.contributions.packages.ContributedPlatform;
3735
import cc.arduino.contributions.ui.FilteredAbstractTableModel;
3836

3937
import java.util.ArrayList;
4038
import java.util.Collections;
41-
import java.util.LinkedList;
4239
import java.util.List;
4340
import java.util.function.Predicate;
44-
import java.util.stream.Collectors;
4541
import java.util.stream.Stream;
4642

4743
@SuppressWarnings("serial")
4844
public class LibrariesIndexTableModel extends FilteredAbstractTableModel<ContributedLibrary> {
4945

5046
public final static int DESCRIPTION_COL = 0;
5147

52-
public static class ContributedLibraryReleases implements Comparable<ContributedLibraryReleases> {
53-
54-
public final String name;
55-
public final List<ContributedLibrary> releases;
56-
public final List<String> versions;
57-
58-
public ContributedLibrary selected;
59-
60-
public ContributedLibraryReleases(ContributedLibrary library) {
61-
this.name = library.getName();
62-
this.versions = new LinkedList<>();
63-
this.releases = new LinkedList<>();
64-
this.selected = null;
65-
add(library);
66-
}
67-
68-
public boolean shouldContain(ContributedLibrary lib) {
69-
return lib.getName().equals(name);
70-
}
71-
72-
public void add(ContributedLibrary library) {
73-
releases.add(library);
74-
String version = library.getParsedVersion();
75-
if (version != null) {
76-
versions.add(version);
77-
}
78-
selected = getLatest();
79-
}
80-
81-
public ContributedLibrary getInstalled() {
82-
List<ContributedLibrary> installedReleases = releases.stream().filter(new InstalledPredicate()).collect(Collectors.toList());
83-
Collections.sort(installedReleases, new DownloadableContributionBuiltInAtTheBottomComparator());
84-
85-
if (installedReleases.isEmpty()) {
86-
return null;
87-
}
88-
89-
return installedReleases.get(0);
90-
}
91-
92-
public ContributedLibrary getLatest() {
93-
return getLatestOf(releases);
94-
}
95-
96-
public ContributedLibrary getSelected() {
97-
return selected;
98-
}
99-
100-
public void select(ContributedLibrary value) {
101-
for (ContributedLibrary plat : releases) {
102-
if (plat == value) {
103-
selected = plat;
104-
return;
105-
}
106-
}
107-
}
108-
109-
@Override
110-
public int compareTo(ContributedLibraryReleases o) {
111-
return name.compareToIgnoreCase(o.name);
112-
}
113-
}
114-
11548
private final List<ContributedLibraryReleases> contributions = new ArrayList<>();
11649

11750
private final String[] columnNames = {"Description"};
@@ -271,7 +204,7 @@ private void updateContributions() {
271204
contributions.clear();
272205
indexer.getIndex().getLibraries().forEach(this::applyFilterToLibrary);
273206
indexer.getInstalledLibraries().forEach(this::applyFilterToLibrary);
274-
Collections.sort(contributions);
207+
Collections.sort(contributions, new ContributedLibraryReleasesComparator());
275208
}
276209

277210
}

app/src/cc/arduino/contributions/ui/FilteredAbstractTableModel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public abstract class FilteredAbstractTableModel<T> extends AbstractTableModel {
4343

4444
abstract public void updateIndexFilter(String[] filters, Stream<Predicate<T>> additionalFilters);
4545

46-
protected static <T extends DownloadableContribution> T getLatestOf(List<T> contribs) {
46+
public static <T extends DownloadableContribution> T getLatestOf(List<T> contribs) {
4747
contribs = new LinkedList<>(contribs);
4848
final VersionComparator versionComparator = new VersionComparator();
4949
Collections.sort(contribs, (contrib1, contrib2) -> versionComparator.compare(contrib1.getParsedVersion(), contrib2.getParsedVersion()));

0 commit comments

Comments
 (0)