Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Hoepfner2018-07-13 09:08:42 +0000
committerMarcus Hoepfner2018-07-13 09:23:10 +0000
commit565e91ec98d40aa33eb0672a056e677626fee110 (patch)
treeea1b5044fdc2100d30bb551031517a8e4240fdbc
parentaa7f1f2788d90e763fe2f69862935445069c02a6 (diff)
downloadeclipse.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>
-rw-r--r--bundles/org.eclipse.urischeme/src/org/eclipse/urischeme/internal/registration/DesktopFileWriter.java30
-rw-r--r--tests/org.eclipse.tests.urischeme/src/org/eclipse/urischeme/internal/registration/TestUnitDesktopFileWriter.java47
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;");

Back to the top