1 | |
package org.apache.maven.index; |
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
|
18 | |
|
19 | |
|
20 | |
|
21 | |
|
22 | |
import java.util.HashSet; |
23 | |
import java.util.Set; |
24 | |
|
25 | |
import org.apache.maven.index.context.IndexingContext; |
26 | |
|
27 | |
|
28 | |
|
29 | |
|
30 | |
|
31 | |
|
32 | |
|
33 | |
public class UniqueArtifactFilterPostprocessor |
34 | |
implements ArtifactInfoFilter |
35 | |
{ |
36 | |
public static final String COLLAPSED = "COLLAPSED"; |
37 | |
|
38 | 2 | private final Set<Field> uniqueFields = new HashSet<Field>(); |
39 | |
|
40 | 2 | private final Set<String> gas = new HashSet<String>(); |
41 | |
|
42 | |
public UniqueArtifactFilterPostprocessor() |
43 | 1 | { |
44 | 1 | } |
45 | |
|
46 | |
public UniqueArtifactFilterPostprocessor( Set<Field> uniqueFields ) |
47 | 1 | { |
48 | 1 | this.uniqueFields.addAll( uniqueFields ); |
49 | 1 | } |
50 | |
|
51 | |
public boolean accepts( IndexingContext ctx, ArtifactInfo ai ) |
52 | |
{ |
53 | 45 | StringBuilder sb = new StringBuilder(); |
54 | |
|
55 | 45 | for ( Field field : uniqueFields ) |
56 | |
{ |
57 | 90 | sb.append( ai.getFieldValue( field ) ).append( ":" ); |
58 | |
} |
59 | |
|
60 | 45 | String key = sb.toString().substring( 0, sb.length() - 1 ); |
61 | |
|
62 | 45 | if ( gas.contains( key ) ) |
63 | |
{ |
64 | 40 | return false; |
65 | |
} |
66 | |
else |
67 | |
{ |
68 | 5 | gas.add( key ); |
69 | |
|
70 | 5 | postprocess( ctx, ai ); |
71 | |
|
72 | 5 | return true; |
73 | |
} |
74 | |
} |
75 | |
|
76 | |
public void postprocess( IndexingContext ctx, ArtifactInfo ai ) |
77 | |
{ |
78 | 5 | for ( Field field : ai.getFields() ) |
79 | |
{ |
80 | 50 | if ( !uniqueFields.contains( field ) ) |
81 | |
{ |
82 | 40 | ai.setFieldValue( field, COLLAPSED ); |
83 | |
} |
84 | |
} |
85 | 5 | } |
86 | |
|
87 | |
public void addField( Field field ) |
88 | |
{ |
89 | 2 | uniqueFields.add( field ); |
90 | 2 | } |
91 | |
} |