From f13fe9a4f73fea261bfda6927a7cbbc24a03d85b Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Tue, 19 May 2015 13:13:49 +0200 Subject: [PATCH] LibraryManagerUI: library types order fixed --- .../libraries/LibraryByTypeComparator.java | 12 +++---- .../libraries/LibraryTypeComparator.java | 31 +++++++++++++++++++ .../libraries/ui/LibraryManagerUI.java | 6 ++-- .../LibraryOfTypeComparatorTest.java | 19 ++++++++++++ 4 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 app/src/cc/arduino/contributions/libraries/LibraryTypeComparator.java create mode 100644 app/test/cc/arduino/contributions/libraries/LibraryOfTypeComparatorTest.java diff --git a/app/src/cc/arduino/contributions/libraries/LibraryByTypeComparator.java b/app/src/cc/arduino/contributions/libraries/LibraryByTypeComparator.java index 09d91fc3d..f85e8cfdf 100644 --- a/app/src/cc/arduino/contributions/libraries/LibraryByTypeComparator.java +++ b/app/src/cc/arduino/contributions/libraries/LibraryByTypeComparator.java @@ -1,24 +1,22 @@ package cc.arduino.contributions.libraries; -import java.util.Arrays; import java.util.Comparator; -import java.util.List; public class LibraryByTypeComparator implements Comparator { - private final List types; + private final LibraryTypeComparator libraryTypeComparator; public LibraryByTypeComparator() { - this("Arduino", "Recommended", "Contributed"); + this(new LibraryTypeComparator()); } - public LibraryByTypeComparator(String... types) { - this.types = Arrays.asList(types); + public LibraryByTypeComparator(LibraryTypeComparator libraryTypeComparator) { + this.libraryTypeComparator = libraryTypeComparator; } @Override public int compare(ContributedLibrary o1, ContributedLibrary o2) { - return types.indexOf(o1.getTypes().get(0)) - types.indexOf(o2.getTypes().get(0)); + return libraryTypeComparator.compare(o1.getTypes().get(0), o2.getTypes().get(0)); } } diff --git a/app/src/cc/arduino/contributions/libraries/LibraryTypeComparator.java b/app/src/cc/arduino/contributions/libraries/LibraryTypeComparator.java new file mode 100644 index 000000000..3be77b065 --- /dev/null +++ b/app/src/cc/arduino/contributions/libraries/LibraryTypeComparator.java @@ -0,0 +1,31 @@ +package cc.arduino.contributions.libraries; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +public class LibraryTypeComparator implements Comparator { + + private final List types; + + public LibraryTypeComparator() { + this("Arduino", "Recommended", "Contributed"); + } + + public LibraryTypeComparator(String... types) { + this.types = Arrays.asList(types); + } + + @Override + public int compare(String o1, String o2) { + if (types.contains(o1) && types.contains(o2)) { + return types.indexOf(o1) - types.indexOf(o2); + } else if (types.contains(o1)) { + return -1; + } else if (types.contains(o2)) { + return 1; + } + return o1.compareTo(o2); + } + +} diff --git a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java index 675132019..8a0c4860d 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java +++ b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java @@ -31,6 +31,7 @@ package cc.arduino.contributions.libraries.ui; import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.libraries.LibrariesIndexer; import cc.arduino.contributions.libraries.LibraryInstaller; +import cc.arduino.contributions.libraries.LibraryTypeComparator; import cc.arduino.contributions.packages.DownloadableContribution; import cc.arduino.contributions.ui.InstallerJDialogUncaughtExceptionHandler; import cc.arduino.contributions.ui.*; @@ -41,7 +42,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.Collection; +import java.util.*; import static processing.app.I18n._; @@ -160,7 +161,8 @@ public class LibraryManagerUI extends InstallerJDialog { typeChooser.removeAllItems(); typeChooser.addItem(new DropdownAllItem()); typeChooser.addItem(new DropdownInstalledLibraryItem(indexer.getIndex())); - Collection types = indexer.getIndex().getTypes(); + java.util.List types = new LinkedList(indexer.getIndex().getTypes()); + Collections.sort(types, new LibraryTypeComparator()); for (String type : types) { typeChooser.addItem(new DropdownLibraryOfTypeItem(type)); } diff --git a/app/test/cc/arduino/contributions/libraries/LibraryOfTypeComparatorTest.java b/app/test/cc/arduino/contributions/libraries/LibraryOfTypeComparatorTest.java new file mode 100644 index 000000000..eeb91ee49 --- /dev/null +++ b/app/test/cc/arduino/contributions/libraries/LibraryOfTypeComparatorTest.java @@ -0,0 +1,19 @@ +package cc.arduino.contributions.libraries; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class LibraryOfTypeComparatorTest { + + @Test + public void testSort() throws Exception { + List strings = Arrays.asList("Arduino", "Contributed", "Recommended", "Recommended", "Other", "1yetanother", "Arduino", "Recommended", "Contributed", "Recommended"); + Collections.sort(strings, new LibraryTypeComparator()); + assertEquals(Arrays.asList("Arduino", "Arduino", "Recommended", "Recommended", "Recommended", "Recommended", "Contributed", "Contributed", "1yetanother", "Other"), strings); + } +}