1 package org.apache.onami.converters.net;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.net.MalformedURLException;
23 import java.net.URL;
24
25 import org.apache.onami.converters.core.AbstractConverter;
26 import org.kohsuke.MetaInfServices;
27
28 import com.google.inject.Module;
29 import com.google.inject.TypeLiteral;
30
31
32
33
34 @MetaInfServices( Module.class )
35 public final class URLConverter
36 extends AbstractConverter<URL>
37 {
38
39
40
41
42 public static final String CLASSPATH_URL_PREFIX = "classpath://";
43
44
45
46
47 public Object convert( String value, TypeLiteral<?> toType )
48 {
49 if ( value.startsWith( CLASSPATH_URL_PREFIX ) )
50 {
51 String path = value.substring( CLASSPATH_URL_PREFIX.length() );
52 while ( '/' == path.charAt( 0 ) )
53 {
54 path = path.substring( 1 );
55 }
56
57 ClassLoader classLoader = null;
58 try
59 {
60 classLoader = Thread.currentThread().getContextClassLoader();
61 }
62 catch ( SecurityException t )
63 {
64
65 }
66 if ( classLoader == null )
67 {
68
69 classLoader = URLConverter.class.getClassLoader();
70 }
71 URL url = classLoader.getResource( path );
72 if ( url == null )
73 {
74 throw new IllegalArgumentException( "class path resource '"
75 + path
76 + "' cannot be resolved to URL because it does not exist" );
77 }
78
79 return url;
80 }
81
82 try
83 {
84 return new URL( value );
85 }
86 catch ( MalformedURLException e )
87 {
88 throw new IllegalArgumentException( "String value '" + value + "' is not a valid URL", e );
89 }
90 }
91
92 }