diff options
author | Marcus Hoepfner | 2018-07-13 09:08:42 +0000 |
---|---|---|
committer | Marcus Hoepfner | 2018-07-13 09:23:10 +0000 |
commit | 565e91ec98d40aa33eb0672a056e677626fee110 (patch) | |
tree | ea1b5044fdc2100d30bb551031517a8e4240fdbc | |
parent | aa7f1f2788d90e763fe2f69862935445069c02a6 (diff) | |
download | eclipse.platform.ui-565e91ec98d40aa33eb0672a056e677626fee110.tar.gz eclipse.platform.ui-565e91ec98d40aa33eb0672a056e677626fee110.tar.xz eclipse.platform.ui-565e91ec98d40aa33eb0672a056e677626fee110.zip |
Bug 530835: query the registered schemes for linux
Change-Id: Id19f4660c6607e49a22e57b4265a763be1c1ee2f
Signed-off-by: Marcus Hoepfner <marcus.hoepfner@sap.com>
2 files changed, 75 insertions, 2 deletions
diff --git a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/DesktopFileWriter.java b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/DesktopFileWriter.java index 4defd3e2d80..22a071bb129 100644 --- a/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/DesktopFileWriter.java +++ b/bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/DesktopFileWriter.java @@ -10,13 +10,18 @@ *******************************************************************************/ package org.eclipse.urischeme.internal.registration; +import static java.util.stream.Collectors.joining; +import static java.util.stream.Collectors.toList; + +import java.util.Collection; +import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.function.Function; -import java.util.stream.Collectors; +import java.util.function.Predicate; /** * Used to change the MimeType property of a Linux .desktop file. Adds handler @@ -46,6 +51,27 @@ public class DesktopFileWriter { } /** + * Takes the given schemes and checks whether they are registered. Returns a + * list with these schemes that are registered. + * + * @param schemes The schemes that should be checked for registrations. + * @return the registered schemes. + */ + public List<String> getRegisteredSchemes(Collection<String> schemes) { + String mimeType = properties.get(KEY_MIME_TYPE); + if (mimeType == null || mimeType.isEmpty()) { + return Collections.emptyList(); + } + Predicate<String> matchingSchemes = scheme -> { + Util.assertUriSchemeIsLegal(scheme); + String handlerPlusScheme = getHandlerPlusScheme(scheme); + return mimeType.contains(handlerPlusScheme); + }; + + return schemes.stream().filter(matchingSchemes).collect(toList()); + } + + /** * Adds an entry "x-scheme-handler/givenScheme;" to the MimeType property of the * .desktop file. Creates the MimeType property if not yet existing. Otherwise * adds to the entry separated by ";". @@ -135,7 +161,7 @@ public class DesktopFileWriter { }; String result = this.properties.entrySet().stream() // .map(toList) // - .collect(Collectors.joining(LINE_SEPARATOR)); + .collect(joining(LINE_SEPARATOR)); return result.getBytes(); } diff --git a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitDesktopFileWriter.java b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitDesktopFileWriter.java index 2a307b7a83c..468fd8700c1 100644 --- a/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitDesktopFileWriter.java +++ b/tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitDesktopFileWriter.java @@ -10,7 +10,9 @@ *******************************************************************************/ package org.eclipse.urischeme.internal.registration; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; @@ -204,6 +206,51 @@ public class TestUnitDesktopFileWriter { } @Test + public void returnsRegisteredSchemeOnerequested() { + DesktopFileWriter writer = getWriterFor( + fileContentWith("Exec=/usr/bin/eclipse %u", "MimeType=x-scheme-handler/adt;")); + + List<String> schemes = writer.getRegisteredSchemes(Arrays.asList("adt")); + assertEquals(1, schemes.size()); + assertTrue(schemes.contains("adt")); + } + + @Test + public void returnsRegisteredSchemeTwoRequested() { + DesktopFileWriter writer = getWriterFor( + fileContentWith("Exec=/usr/bin/eclipse %u", "MimeType=x-scheme-handler/adt;")); + + List<String> schemes = writer.getRegisteredSchemes(Arrays.asList("adt", "other")); + assertEquals(1, schemes.size()); + assertTrue(schemes.contains("adt")); + } + + @Test + public void returnsNoRegisteredSchemeTwoRequested() { + DesktopFileWriter writer = getWriterFor( + fileContentWith("Exec=/usr/bin/eclipse %u", "MimeType=x-scheme-handler/yetAnother;")); + + List<String> schemes = writer.getRegisteredSchemes(Arrays.asList("adt", "other")); + assertEquals(0, schemes.size()); + } + + @Test + public void returnsNoRegisteredSchemeTwoRequestedNoneRegistered() { + DesktopFileWriter writer = getWriterFor(fileContentWith("Exec=/usr/bin/eclipse %u", "")); + + List<String> schemes = writer.getRegisteredSchemes(Arrays.asList("adt", "other")); + assertEquals(0, schemes.size()); + } + + @Test(expected = IllegalArgumentException.class) + public void getRegisteredFailsOnIllegalScheme() { + DesktopFileWriter writer = getWriterFor( + fileContentWith("Exec=/usr/bin/eclipse %u", "MimeType=x-scheme-handler/adt;")); + + writer.getRegisteredSchemes(Arrays.asList("&/%")); + } + + @Test public void keepsPropertiesOrder() { // in the other we just check that lines are contained, not the order List<String> fileContent = fileContentWith("Exec=/usr/bin/eclipse %u", "MimeType=x-scheme-handler/adt;"); |