1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.rat.analysis;
20
21 import java.util.Collection;
22 import java.util.Set;
23 import java.util.function.Predicate;
24
25 import org.apache.rat.ConfigurationException;
26 import org.apache.rat.Defaults;
27 import org.apache.rat.ReportConfiguration;
28 import org.apache.rat.api.Document;
29 import org.apache.rat.api.RatException;
30 import org.apache.rat.document.DocumentAnalyser;
31 import org.apache.rat.document.RatDocumentAnalysisException;
32 import org.apache.rat.license.ILicense;
33 import org.apache.rat.license.LicenseSetFactory;
34 import org.apache.rat.utils.DefaultLog;
35 import org.apache.rat.utils.Log;
36 import org.apache.rat.walker.ArchiveWalker;
37
38
39
40
41 public final class AnalyserFactory {
42
43 private AnalyserFactory() {
44
45 }
46
47
48
49
50
51
52
53
54
55 public static DocumentAnalyser createPolicy(final Predicate<ILicense> approvalPredicate) {
56 return document -> {
57 if (document != null) {
58 document.getMetaData().setApprovalPredicate(approvalPredicate);
59 }
60 };
61 }
62
63
64
65
66
67
68 public static DocumentAnalyser createMultiplexer(final DocumentAnalyser... analysers) {
69 return document -> {
70 for (DocumentAnalyser analyser : analysers) {
71 analyser.analyse(document);
72 }
73 };
74 }
75
76
77
78
79
80
81 public static DocumentAnalyser createConfiguredAnalyser(final ReportConfiguration configuration) {
82 LicenseSetFactory licenseSetFactory = configuration.getLicenseSetFactory();
83 Set<ILicense> licenses = licenseSetFactory.getLicenses(LicenseSetFactory.LicenseFilter.ALL);
84 if (licenses.isEmpty()) {
85 throw new ConfigurationException("At least one license must be defined");
86 }
87 if (DefaultLog.getInstance().isEnabled(Log.Level.DEBUG)) {
88 DefaultLog.getInstance().debug("Currently active licenses are:");
89 licenses.forEach(DefaultLog.getInstance()::debug);
90 }
91 return createMultiplexer(createPolicy(licenseSetFactory.getApprovedLicensePredicate()),
92 new DefaultAnalyser(configuration, licenses));
93 }
94
95
96
97
98 private static final class DefaultAnalyser implements DocumentAnalyser {
99
100
101 private final Collection<ILicense> licenses;
102
103 private final ReportConfiguration configuration;
104
105 private final IHeaderMatcher generatedMatcher;
106
107
108
109
110
111
112 DefaultAnalyser(final ReportConfiguration config, final Collection<ILicense> licenses) {
113 this.licenses = licenses;
114 this.configuration = config;
115 this.generatedMatcher = configuration.getGeneratedMatcher();
116 }
117
118
119
120
121
122
123 private Predicate<ILicense> licenseFilter(final ReportConfiguration.Processing proc) {
124 return license -> {
125 switch (proc) {
126 case PRESENCE:
127 return !license.getLicenseFamily().equals(UnknownLicense.INSTANCE.getLicenseFamily());
128 case ABSENCE:
129 return true;
130 default:
131 return false;
132 }
133 };
134 }
135
136 @Override
137 public void analyse(final Document document) throws RatDocumentAnalysisException {
138 Predicate<ILicense> licensePredicate;
139
140 TikaProcessor.process(document);
141 switch (document.getMetaData().getDocumentType()) {
142 case STANDARD:
143 new DocumentHeaderAnalyser(generatedMatcher, licenses).analyse(document);
144 if (configuration.getStandardProcessing() != Defaults.STANDARD_PROCESSING) {
145 licensePredicate = licenseFilter(configuration.getStandardProcessing()).negate();
146 document.getMetaData().removeLicenses(licensePredicate);
147 }
148 break;
149 case ARCHIVE:
150 if (configuration.getArchiveProcessing() != ReportConfiguration.Processing.NOTIFICATION) {
151 ArchiveWalker archiveWalker = new ArchiveWalker(document);
152 try {
153 licensePredicate = licenseFilter(configuration.getArchiveProcessing());
154 for (Document doc : archiveWalker.getDocuments()) {
155 analyse(doc);
156 doc.getMetaData().licenses().filter(licensePredicate).forEach(lic -> document.getMetaData().reportOnLicense(lic));
157 }
158 } catch (RatException e) {
159 throw new RatDocumentAnalysisException(e);
160 }
161 }
162 break;
163 default:
164 break;
165 }
166 }
167 }
168 }