1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.creadur.whisker.app.analysis;
20
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.TreeSet;
24
25 import org.apache.commons.lang3.tuple.ImmutablePair;
26 import org.apache.commons.lang3.tuple.Pair;
27 import org.apache.creadur.whisker.model.Resource;
28 import org.apache.creadur.whisker.model.Visitor;
29 import org.apache.creadur.whisker.model.WithLicense;
30 import org.apache.creadur.whisker.model.WithinDirectory;
31
32
33
34
35 public final class ResourceSourceAuditor extends Visitor {
36
37 private WithLicense lastLicense;
38
39 private WithinDirectory lastDirectory;
40
41 private final Collection<
42 Pair<WithinDirectory, Resource>> resourcesMissingSource
43 = new TreeSet<Pair<WithinDirectory, Resource>>();
44
45 private final Collection<
46 Pair<WithinDirectory, Resource>> resourcesWithSource
47 = new TreeSet<Pair<WithinDirectory, Resource>>();
48
49
50
51
52
53
54 @Override
55 public boolean traversePublicDomain() {
56
57 return false;
58 }
59
60
61
62
63
64
65 public Collection<
66 Pair<WithinDirectory, Resource>> getResourcesWithSource() {
67 return resourcesWithSource;
68 }
69
70
71
72
73
74 public Collection<
75 Pair<WithinDirectory, Resource>> getResourcesMissingSource() {
76 return resourcesMissingSource;
77 }
78
79
80
81
82
83
84 @Override
85 public void visit(final WithinDirectory directory) {
86 this.lastDirectory = directory;
87 }
88
89
90
91
92
93
94
95
96 @Override
97 public void visit(final WithLicense license) {
98 this.lastLicense = license;
99 }
100
101
102
103
104
105
106 @Override
107 @SuppressWarnings("PMD.EmptyIfStmt")
108 public void visit(final Resource resource) {
109 if (lastLicense == null) {
110 throw new IllegalArgumentException(
111 "Last license unexpectedly null for resource "
112 + resource);
113 } else if (lastLicense.isSourceRequired()) {
114 final ImmutablePair<WithinDirectory, Resource> pair =
115 new ImmutablePair<
116 WithinDirectory,
117 Resource>(lastDirectory, resource);
118 if (resource.hasSource()) {
119 resourcesWithSource.add(pair);
120 } else {
121 resourcesMissingSource.add(pair);
122 }
123 } else {
124
125 }
126 }
127
128
129
130
131
132
133 public Collection<Resource> getResourcesRequiringSourceLinks() {
134 final Collection<Resource> results = new ArrayList<Resource>();
135 for (Pair<WithinDirectory, Resource> pair: resourcesWithSource) {
136 results.add(pair.getRight());
137 }
138 return results;
139 }
140
141 }