1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.jar.identification.exposers;
20
21 import javax.inject.Named;
22 import javax.inject.Singleton;
23
24 import java.io.BufferedReader;
25 import java.io.IOException;
26 import java.io.InputStream;
27 import java.io.InputStreamReader;
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.jar.JarEntry;
31
32 import org.apache.maven.shared.jar.JarAnalyzer;
33 import org.apache.maven.shared.jar.identification.JarIdentification;
34 import org.apache.maven.shared.jar.identification.JarIdentificationExposer;
35 import org.codehaus.plexus.util.StringUtils;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39
40
41
42
43 @Singleton
44 @Named("textFile")
45 public class TextFileExposer implements JarIdentificationExposer {
46 private final Logger logger = LoggerFactory.getLogger(getClass());
47
48 @Override
49 public void expose(JarIdentification identification, JarAnalyzer jarAnalyzer) {
50 List<String> textFiles = findTextFileVersions(jarAnalyzer);
51 for (String ver : textFiles) {
52 identification.addVersion(ver);
53 }
54 }
55
56 private List<String> findTextFileVersions(JarAnalyzer jarAnalyzer) {
57 List<String> textVersions = new ArrayList<>();
58 List<JarEntry> hits = jarAnalyzer.getVersionEntries();
59
60 for (JarEntry entry : hits) {
61
62 if (!entry.getName().endsWith(".class"))
63 {
64 logger.debug("Version Hit: " + entry.getName());
65 try (InputStream is = jarAnalyzer.getEntryInputStream(entry)) {
66 BufferedReader br = new BufferedReader(new InputStreamReader(is));
67
68 String line = br.readLine();
69
70
71
72 logger.debug(line);
73 if (StringUtils.isNotEmpty(line)) {
74 textVersions.add(line);
75 }
76 } catch (IOException e) {
77 logger.warn("Unable to read line from " + entry.getName(), e);
78 }
79 }
80 }
81 return textVersions;
82 }
83 }