|
19 | 19 | import java.net.URI;
|
20 | 20 | import java.util.ArrayDeque;
|
21 | 21 | import java.util.Arrays;
|
| 22 | +import java.util.Collections; |
22 | 23 | import java.util.HashMap;
|
23 | 24 | import java.util.List;
|
24 | 25 | import java.util.Locale;
|
@@ -180,20 +181,29 @@ private <T> Collector<T, ArrayDeque<T>, ArrayDeque<T>> reverseOrder() {
|
180 | 181 | }
|
181 | 182 |
|
182 | 183 | private String iriToReversedHostNameNotation( final IRI iri ) {
|
183 |
| - final URI uri = URI.create( iri.toString().contains( "://" ) ? iri.toString() : "https://" + iri ); |
| 184 | + URI uri; |
| 185 | + try { |
| 186 | + uri = URI.create( iri.toString().contains( "://" ) ? iri.toString() : "https://" + iri ); |
| 187 | + } catch ( IllegalArgumentException e ) { |
| 188 | + throw new IllegalArgumentException( "Incorrect IRI: " + iri, e ); |
| 189 | + } |
184 | 190 |
|
185 |
| - final String[] hostParts = uri.getHost().split( "\\." ); |
186 |
| - final String[] pathParts = uri.getPath().split( "/" ); |
| 191 | + if ( uri.getHost() == null ) { |
| 192 | + throw new IllegalArgumentException( "URI doesn't contain host: " + uri ); |
| 193 | + } |
187 | 194 |
|
188 |
| - final String reversedHost = String.join( ".", Arrays.stream( hostParts ) |
189 |
| - .collect( reverseOrder() ) ); |
| 195 | + final String[] hostParts = uri.getHost().split( "\\." ); |
| 196 | + final List<String> hostPartsList = Arrays.asList( hostParts ); |
| 197 | + Collections.reverse( hostPartsList ); |
| 198 | + final String reversedHost = String.join( ".", hostPartsList ); |
190 | 199 |
|
| 200 | + final String[] pathParts = uri.getPath().split( "/" ); |
191 | 201 | final String path = Arrays.stream( pathParts )
|
192 | 202 | .filter( StringUtils::isNotBlank )
|
193 |
| - .limit( pathParts.length - 2 ) |
| 203 | + .limit( Math.max( 0, pathParts.length - 2 ) ) |
194 | 204 | .collect( Collectors.joining( "." ) );
|
195 | 205 |
|
196 |
| - return reversedHost + "." + path; |
| 206 | + return reversedHost + ( path.isEmpty() ? "" : "." + path ); |
197 | 207 | }
|
198 | 208 |
|
199 | 209 | private Optional<IRI> iri( final String lexicalRepresentation ) {
|
|
0 commit comments