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 private final Set<Field> uniqueFields = new HashSet<>();
39
40 private final Set<String> gas = new HashSet<>();
41
42 public UniqueArtifactFilterPostprocessor()
43 {
44 }
45
46 public UniqueArtifactFilterPostprocessor( Set<Field> uniqueFields )
47 {
48 this.uniqueFields.addAll( uniqueFields );
49 }
50
51 public boolean accepts( IndexingContext ctx, ArtifactInfo ai )
52 {
53 StringBuilder sb = new StringBuilder();
54
55 for ( Field field : uniqueFields )
56 {
57 sb.append( ai.getFieldValue( field ) ).append( ":" );
58 }
59
60 String key = sb.toString().substring( 0, sb.length() - 1 );
61
62 if ( gas.contains( key ) )
63 {
64 return false;
65 }
66 else
67 {
68 gas.add( key );
69
70 postprocess( ctx, ai );
71
72 return true;
73 }
74 }
75
76 public void postprocess( IndexingContext ctx, ArtifactInfo ai )
77 {
78 for ( Field field : ai.getFields() )
79 {
80 if ( !uniqueFields.contains( field ) )
81 {
82 ai.setFieldValue( field, COLLAPSED );
83 }
84 }
85 }
86
87 public void addField( Field field )
88 {
89 uniqueFields.add( field );
90 }
91 }