|
13 | 13 |
|
14 | 14 | package io.openmanufacturing.sds.aspectmodel.resolver;
|
15 | 15 |
|
| 16 | +import java.io.File; |
16 | 17 | import java.io.FileNotFoundException;
|
17 | 18 | import java.io.IOException;
|
18 | 19 | import java.io.InputStream;
|
19 | 20 | import java.net.URL;
|
20 | 21 | import java.nio.charset.StandardCharsets;
|
| 22 | +import java.util.ArrayList; |
21 | 23 | import java.util.Arrays;
|
22 | 24 | import java.util.Comparator;
|
| 25 | +import java.util.Enumeration; |
| 26 | +import java.util.List; |
| 27 | +import java.util.jar.JarEntry; |
| 28 | +import java.util.jar.JarFile; |
23 | 29 | import java.util.stream.Stream;
|
24 | 30 |
|
25 | 31 | import org.apache.commons.io.IOUtils;
|
| 32 | +import org.apache.commons.lang3.StringUtils; |
26 | 33 | import org.apache.jena.rdf.model.Model;
|
27 | 34 | import org.slf4j.Logger;
|
28 | 35 | import org.slf4j.LoggerFactory;
|
@@ -87,15 +94,38 @@ protected URL resourceUrl( final String directory, final String filename ) {
|
87 | 94 | return getClass().getClassLoader().getResource( directory + "/" + filename );
|
88 | 95 | }
|
89 | 96 |
|
90 |
| - protected Stream<String> filesInDirectory( String dir ) { |
91 |
| - final String directory = dir.startsWith( "/" ) ? dir : "/" + dir; |
| 97 | + protected Stream<String> filesInDirectory( final String directory ) { |
92 | 98 | try {
|
93 |
| - final InputStream directoryUrl = getClass().getResourceAsStream( directory ); |
94 |
| - if ( directoryUrl == null ) { |
95 |
| - LOG.warn( "No such classpath directory {}", directory ); |
96 |
| - return Stream.empty(); |
| 99 | + final String url = getClass().getClassLoader().getResource( directory ).toString(); |
| 100 | + final int jarIndex = url.indexOf( ".jar" ); |
| 101 | + final String path = jarIndex > 0 ? url.substring( 0, jarIndex +4 ).replace( "jar:file:", "" ) : url; |
| 102 | + final File jarFile = new File(path); |
| 103 | + if(jarFile.isFile()) { |
| 104 | + final List<String> fileList = new ArrayList<>(); |
| 105 | + final JarFile jar = new JarFile(jarFile); |
| 106 | + final Enumeration<JarEntry> entries = jar.entries(); |
| 107 | + final String dir = directory.endsWith( "/" ) ? directory : directory + "/"; |
| 108 | + while(entries.hasMoreElements()) { |
| 109 | + final String name = entries.nextElement().getName(); |
| 110 | + if(name.contains( dir )) |
| 111 | + { |
| 112 | + final String fileName = name.replace( dir, "" ); |
| 113 | + if(StringUtils.isNotBlank( fileName )) |
| 114 | + { |
| 115 | + fileList.add( fileName ); |
| 116 | + } |
| 117 | + } |
| 118 | + } |
| 119 | + jar.close(); |
| 120 | + return fileList.stream(); |
| 121 | + } else { |
| 122 | + final InputStream directoryUrl = getClass().getClassLoader().getResourceAsStream( directory ); |
| 123 | + if ( directoryUrl == null ) { |
| 124 | + LOG.warn( "No such classpath directory {}", directory ); |
| 125 | + return Stream.empty(); |
| 126 | + } |
| 127 | + return Arrays.stream( IOUtils.toString( directoryUrl, StandardCharsets.UTF_8 ).split( "\\n" ) ); |
97 | 128 | }
|
98 |
| - return Arrays.stream( IOUtils.toString( directoryUrl, StandardCharsets.UTF_8 ).split( "\\n" ) ); |
99 | 129 | } catch ( final IOException exception ) {
|
100 | 130 | LOG.warn( "Could not list files in classpath directory {}", directory, exception );
|
101 | 131 | return Stream.empty();
|
|
0 commit comments