1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.creadur.whisker.model;
20
21 import java.util.Collection;
22 import java.util.TreeSet;
23
24 import org.apache.commons.lang3.tuple.ImmutablePair;
25 import org.apache.commons.lang3.tuple.Pair;
26
27
28
29
30
31 public class ResourceNamesCollator extends Visitor {
32
33
34 private final Collection<Pair<WithinDirectory, Resource>> resources
35 = new TreeSet<Pair<WithinDirectory, Resource>>();
36
37 private final Collection<Pair<WithinDirectory, Resource>> duplicates
38 = new TreeSet<Pair<WithinDirectory, Resource>>();
39
40 private WithinDirectory lastDirectory;
41
42
43
44
45
46 public Collection<String> getNames() {
47 final Collection<String> names = new TreeSet<String>();
48 for (final Pair<WithinDirectory, Resource> pair : this.resources) {
49 names.add(pair.getRight().getName());
50 }
51 return names;
52 }
53
54
55
56
57
58 public Collection<Pair<WithinDirectory, Resource>> getDuplicates() {
59 return this.duplicates;
60 }
61
62
63
64
65
66
67 @Override
68 public void visit(final WithinDirectory directory) {
69 this.lastDirectory = directory;
70 }
71
72
73
74
75
76
77 @Override
78 @SuppressWarnings("PMD.EmptyIfStmt")
79 public void visit(final Resource resource) {
80 if (this.resources.add(new ImmutablePair<WithinDirectory, Resource>(
81 this.lastDirectory, resource))) {
82
83 } else {
84
85 if (this.lastDirectory == null) {
86
87 throw new IllegalArgumentException(
88 "Expected directory to be present");
89 }
90 this.duplicates.add(new ImmutablePair<WithinDirectory, Resource>(
91 this.lastDirectory, resource));
92 }
93 }
94 }