diff options
4 files changed, 57 insertions, 5 deletions
diff --git a/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/model/RemoteBundleDiscoveryStrategy.java b/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/model/RemoteBundleDiscoveryStrategy.java index 261ea29c..505b3f4e 100644 --- a/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/model/RemoteBundleDiscoveryStrategy.java +++ b/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/model/RemoteBundleDiscoveryStrategy.java @@ -231,11 +231,7 @@ public class RemoteBundleDiscoveryStrategy extends BundleDiscoveryStrategy { Messages.RemoteBundleDiscoveryStrategy_unrecognized_discovery_url, bundleUrl))); continue; } - String lastPathElement = bundleUrl.lastIndexOf('/') == -1 - ? bundleUrl - : bundleUrl.substring(bundleUrl.lastIndexOf('/')); - File target = File.createTempFile( - lastPathElement.replaceAll("^[a-zA-Z0-9_.]", "_") + "_", ".jar", temporaryStorage); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$ + File target = File.createTempFile(WebUtil.getFileNameFor(bundleUrl) + "_", ".jar", temporaryStorage); //$NON-NLS-1$ //$NON-NLS-2$ if (monitor.isCanceled()) { break; diff --git a/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/util/WebUtil.java b/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/util/WebUtil.java index 030509a5..e80ab001 100644 --- a/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/util/WebUtil.java +++ b/org.eclipse.mylyn.discovery.core/src/org/eclipse/mylyn/internal/discovery/core/util/WebUtil.java @@ -165,4 +165,14 @@ public class WebUtil { return getTransport().getLastModified(location, monitor); } + public static String getFileNameFor(String bundleUrl) throws IOException { + if (bundleUrl.charAt(bundleUrl.length() - 1) == '/') { + bundleUrl = bundleUrl.substring(0, bundleUrl.length() - 1); + } + if (bundleUrl.lastIndexOf('/') != -1) { + bundleUrl = bundleUrl.substring(bundleUrl.lastIndexOf('/') + 1); + } + return bundleUrl.replaceAll("[^a-zA-Z0-9_\\.]", "_"); //$NON-NLS-1$ //$NON-NLS-2$ + } + } diff --git a/org.eclipse.mylyn.discovery.tests/src/org/eclipse/mylyn/discovery/tests/AllDiscoveryTests.java b/org.eclipse.mylyn.discovery.tests/src/org/eclipse/mylyn/discovery/tests/AllDiscoveryTests.java index 265bfeec..a7161913 100644 --- a/org.eclipse.mylyn.discovery.tests/src/org/eclipse/mylyn/discovery/tests/AllDiscoveryTests.java +++ b/org.eclipse.mylyn.discovery.tests/src/org/eclipse/mylyn/discovery/tests/AllDiscoveryTests.java @@ -20,6 +20,7 @@ import org.eclipse.mylyn.discovery.tests.core.ConnectorDiscoveryRemoteTest; import org.eclipse.mylyn.discovery.tests.core.ConnectorDiscoveryTest; import org.eclipse.mylyn.discovery.tests.core.DirectoryParserTest; import org.eclipse.mylyn.discovery.tests.core.RemoteBundleDiscoveryStrategyTest; +import org.eclipse.mylyn.discovery.tests.core.util.WebUtilTest; /** * @author Steffen Pingel @@ -35,6 +36,7 @@ public class AllDiscoveryTests { suite.addTestSuite(ConnectorDiscoveryTest.class); suite.addTestSuite(DirectoryParserTest.class); suite.addTestSuite(BundleDiscoveryStrategyTest.class); + suite.addTestSuite(WebUtilTest.class); if (!configuration.isLocalOnly()) { suite.addTestSuite(RemoteBundleDiscoveryStrategyTest.class); suite.addTestSuite(ConnectorDiscoveryRemoteTest.class); diff --git a/org.eclipse.mylyn.discovery.tests/src/org/eclipse/mylyn/discovery/tests/core/util/WebUtilTest.java b/org.eclipse.mylyn.discovery.tests/src/org/eclipse/mylyn/discovery/tests/core/util/WebUtilTest.java new file mode 100644 index 00000000..d8d68c17 --- /dev/null +++ b/org.eclipse.mylyn.discovery.tests/src/org/eclipse/mylyn/discovery/tests/core/util/WebUtilTest.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2013 Tasktop Technologies and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.discovery.tests.core.util; + +import junit.framework.TestCase; + +import org.eclipse.mylyn.internal.discovery.core.util.WebUtil; + +public class WebUtilTest extends TestCase { + + public void testGetFileNameForJar() throws Exception { + assertEquals("org.eclipse.mylyn.discovery_3.10.jar", + WebUtil.getFileNameFor("org.eclipse.mylyn.discovery-3.10.jar")); + } + + public void testGetFileNameForUrl() throws Exception { + assertEquals( + "org.eclipse.mylyn.discovery_3.10.jar", + WebUtil.getFileNameFor("http://www.eclipse.org/downloads/download.php?file=/mylyn/discovery/org.eclipse.mylyn.discovery-3.10.jar")); + } + + public void testGetFileNameForUrlWithQuery() throws Exception { + assertEquals( + "org.eclipse.mylyn.discovery_3.10.jar_r_1_protocol_http", + WebUtil.getFileNameFor("http://www.eclipse.org/downloads/download.php?file=/mylyn/discovery/org.eclipse.mylyn.discovery-3.10.jar&r=1&protocol=http")); + } + + public void testGetFileNameForUrlEndingWithSlash() throws Exception { + assertEquals("a.jar", WebUtil.getFileNameFor("a.jar/")); + } + + public void testGetFileNameForUrlWithFilesystemReservedCharacters() throws Exception { + assertEquals("1_2_3_4_5_6_7_8_9_", WebUtil.getFileNameFor("1<2>3:4\"5\\6|7?8*9+")); + } +} |