Repository: maven-wagon Updated Branches: refs/heads/master b16f26a2e -> 6e87a7ecc
Refactoring encoding logic and shared encoded URL building from other wagons Project: http://git-wip-us.apache.org/repos/asf/maven-wagon/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-wagon/commit/34e6372c Tree: http://git-wip-us.apache.org/repos/asf/maven-wagon/tree/34e6372c Diff: http://git-wip-us.apache.org/repos/asf/maven-wagon/diff/34e6372c Branch: refs/heads/master Commit: 34e6372cf7ee6fb483a186c7678aea161fb0ae33 Parents: 882f606 Author: Roberto Andrade <[email protected]> Authored: Tue Jul 22 19:49:33 2014 -0400 Committer: Roberto Andrade <[email protected]> Committed: Tue Jul 22 19:49:33 2014 -0400 ---------------------------------------------------------------------- .../maven/wagon/shared/http/EncodingUtil.java | 108 +++++++++++++++++++ .../wagon/shared/http/EncodingUtilTest.java | 49 +++++++++ 2 files changed, 157 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/34e6372c/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/EncodingUtil.java ---------------------------------------------------------------------- diff --git a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/EncodingUtil.java b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/EncodingUtil.java new file mode 100644 index 0000000..951df99 --- /dev/null +++ b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/EncodingUtil.java @@ -0,0 +1,108 @@ +package org.apache.maven.wagon.shared.http; + +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; + +import org.apache.commons.lang.StringUtils; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Encoding utility. + */ +public class EncodingUtil +{ + /** + * Parses and returns an encoded version of the given URL string. + * + * @param url Raw/decoded string form of a URL to parse/encode. + * @return Parsed/encoded {@link URI} that represents the string form URL passed in. + * @throws MalformedURLException + * @throws URISyntaxException + */ + public static URI encodeURL( String url ) throws MalformedURLException, URISyntaxException + { + URL urlObject = new URL(url); + + URI uriEncoded = new URI( + urlObject.getProtocol(), + urlObject.getAuthority(), + urlObject.getPath(), + urlObject.getQuery(), + urlObject.getRef() + ); + + return uriEncoded; + } + + /** + * Parses and returns an encoded version of the given URL string. + * Wraps the {@link MalformedURLException} and {@link URISyntaxException} in case the passed URL is invalid. + * + * @param url Raw/decoded string form of a URL to parse/encode. + * @return Parsed/encoded URI (as string) that represents the + * @throws IllegalArgumentException in case the URL string is invalid. + */ + public static String encodeURLToString( String url ) + { + try + { + return encodeURL( url ).toString(); + } + catch ( Exception e ) + { + throw new IllegalArgumentException( String.format( "Error parsing url: %s", url ), e ); + } + } + + /** + * Parses and returns an encoded version of the given URL string alongside the given paths. + * + * @param baseUrl Base URL to use when constructing the final URL, ie: scheme://authority/initial.path. + * @param paths Additional path(s) to append at the end of the base path. + * @return Composed URL (base + paths) already encoded, separating the individual path components by "/". + * @since TODO + */ + public static String encodeURLToString( String baseUrl, String... paths ) + { + StringBuilder url = new StringBuilder( baseUrl ); + + String[] parts = + paths == null ? + new String[0] : + paths.length == 1 ? + StringUtils.split( paths[0], "/" ) : + paths; + + for ( String part : parts ) + { + if ( !url.toString().endsWith( "/" ) ) + { + url.append( '/' ); + } + + url.append( part ); + } + + return encodeURLToString( url.toString() ); + } +} http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/34e6372c/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/EncodingUtilTest.java ---------------------------------------------------------------------- diff --git a/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/EncodingUtilTest.java b/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/EncodingUtilTest.java new file mode 100644 index 0000000..e14133e --- /dev/null +++ b/wagon-providers/wagon-http-shared/src/test/java/org/apache/maven/wagon/shared/http/EncodingUtilTest.java @@ -0,0 +1,49 @@ +package org.apache.maven.wagon.shared.http; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.net.MalformedURLException; +import java.net.URISyntaxException; + +import junit.framework.TestCase; + +public class EncodingUtilTest extends TestCase +{ + public void testEncodeURLWithSpaces() throws URISyntaxException, MalformedURLException + { + String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/path with spaces" ); + + assertEquals( "file://host:1/path%20with%20spaces", encodedURL ); + } + + public void testEncodeURLWithSpacesInPath() throws URISyntaxException, MalformedURLException + { + String encodedURL = EncodingUtil.encodeURLToString( "file://host:1", "path with spaces" ); + + assertEquals( "file://host:1/path%20with%20spaces", encodedURL ); + } + + public void testEncodeURLWithSpacesInBothBaseAndPath() throws URISyntaxException, MalformedURLException + { + String encodedURL = EncodingUtil.encodeURLToString( "file://host:1/with a", "path with spaces" ); + + assertEquals( "file://host:1/with%20a/path%20with%20spaces", encodedURL ); + } +}
