1 package org.apache.maven.index.reader;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.index.reader.Record.Type;
23
24 import java.util.HashMap;
25 import java.util.Map;
26
27 import static org.apache.maven.index.reader.Utils.FIELD_SEPARATOR;
28 import static org.apache.maven.index.reader.Utils.INFO;
29 import static org.apache.maven.index.reader.Utils.UINFO;
30 import static org.apache.maven.index.reader.Utils.nvl;
31
32
33
34
35
36
37 public class RecordCompactor
38 {
39
40
41
42
43 public Map<String, String> apply( final Record record )
44 {
45 if ( Type.DESCRIPTOR == record.getType() )
46 {
47 return compactDescriptor( record );
48 }
49 else if ( Type.ALL_GROUPS == record.getType() )
50 {
51 return compactAllGroups( record );
52 }
53 else if ( Type.ROOT_GROUPS == record.getType() )
54 {
55 return compactRootGroups( record );
56 }
57 else if ( Type.ARTIFACT_REMOVE == record.getType() )
58 {
59 return compactDeletedArtifact( record );
60 }
61 else if ( Type.ARTIFACT_ADD == record.getType() )
62 {
63 return compactAddedArtifact( record );
64 }
65 else
66 {
67 throw new IllegalArgumentException( "Unknown record: " + record );
68 }
69 }
70
71 private static Map<String, String> compactDescriptor( final Record record )
72 {
73 final Map<String, String> result = new HashMap<String, String>();
74 result.put( "DESCRIPTOR", "NexusIndex" );
75 result.put( "IDXINFO", "1.0|" + record.get( Record.REPOSITORY_ID ) );
76 return result;
77 }
78
79 private static Map<String, String> compactAllGroups( final Record record )
80 {
81 final Map<String, String> result = new HashMap<String, String>();
82 result.put( "allGroups", "allGroups" );
83 putIfNotNullAsStringArray( record.get( Record.ALL_GROUPS ), result, "allGroupsList" );
84 return result;
85 }
86
87 private static Map<String, String> compactRootGroups( final Record record )
88 {
89 final Map<String, String> result = new HashMap<String, String>();
90 result.put( "rootGroups", "allGroups" );
91 putIfNotNullAsStringArray( record.get( Record.ROOT_GROUPS ), result, "rootGroupsList" );
92 return result;
93 }
94
95 private static Map<String, String> compactDeletedArtifact( final Record record )
96 {
97 final Map<String, String> result = new HashMap<String, String>();
98 putIfNotNullTS( record.get( Record.REC_MODIFIED ), result, "m" );
99 result.put( "del", compactUinfo( record ) );
100 return result;
101 }
102
103
104
105
106 private static Map<String, String> compactAddedArtifact( final Record record )
107 {
108 final Map<String, String> result = new HashMap<String, String>();
109
110
111 result.put( UINFO, compactUinfo( record ) );
112
113 StringBuilder info = new StringBuilder();
114 info.append( nvl( record.get( Record.PACKAGING ) ) );
115 info.append( FIELD_SEPARATOR );
116 info.append( record.get( Record.FILE_MODIFIED ) );
117 info.append( FIELD_SEPARATOR );
118 info.append( record.get( Record.FILE_SIZE ) );
119 info.append( FIELD_SEPARATOR );
120 info.append( record.get( Record.HAS_SOURCES ) ? "1" : "0" );
121 info.append( FIELD_SEPARATOR );
122 info.append( record.get( Record.HAS_JAVADOC ) ? "1" : "0" );
123 info.append( FIELD_SEPARATOR );
124 info.append( record.get( Record.HAS_SIGNATURE ) ? "1" : "0" );
125 info.append( FIELD_SEPARATOR );
126 info.append( nvl( record.get( Record.FILE_EXTENSION ) ) );
127 result.put( INFO, info.toString() );
128
129 putIfNotNullTS( record.get( Record.REC_MODIFIED ), result, "m" );
130 putIfNotNull( record.get( Record.NAME ), result, "n" );
131 putIfNotNull( record.get( Record.DESCRIPTION ), result, "d" );
132 putIfNotNull( record.get( Record.SHA1 ), result, "1" );
133
134
135 putIfNotNullAsStringArray( record.get( Record.CLASSNAMES ), result, "classnames" );
136
137
138 putIfNotNull( record.get( Record.PLUGIN_PREFIX ), result, "px" );
139 putIfNotNullAsStringArray( record.get( Record.PLUGIN_GOALS ), result, "gx" );
140
141
142 putIfNotNull( record.get( Record.OSGI_BUNDLE_SYMBOLIC_NAME ), result, "Bundle-SymbolicName" );
143 putIfNotNull( record.get( Record.OSGI_BUNDLE_VERSION ), result, "Bundle-Version" );
144 putIfNotNull( record.get( Record.OSGI_EXPORT_PACKAGE ), result, "Export-Package" );
145 putIfNotNull( record.get( Record.OSGI_EXPORT_SERVICE ), result, "Export-Service" );
146 putIfNotNull( record.get( Record.OSGI_BUNDLE_DESCRIPTION ), result, "Bundle-Description" );
147 putIfNotNull( record.get( Record.OSGI_BUNDLE_NAME ), result, "Bundle-Name" );
148 putIfNotNull( record.get( Record.OSGI_BUNDLE_LICENSE ), result, "Bundle-License" );
149 putIfNotNull( record.get( Record.OSGI_EXPORT_DOCURL ), result, "Bundle-DocURL" );
150 putIfNotNull( record.get( Record.OSGI_IMPORT_PACKAGE ), result, "Import-Package" );
151 putIfNotNull( record.get( Record.OSGI_REQUIRE_BUNDLE ), result, "Require-Bundle" );
152 putIfNotNull( record.get( Record.OSGI_PROVIDE_CAPABILITY ), result, "Provide-Capability" );
153 putIfNotNull( record.get( Record.OSGI_REQUIRE_CAPABILITY ), result, "Require-Capability" );
154 putIfNotNull( record.get( Record.OSGI_FRAGMENT_HOST ), result, "Fragment-Host" );
155 putIfNotNull( record.get( Record.OSGI_BREE ), result, "Bundle-RequiredExecutionEnvironment" );
156 putIfNotNull( record.get( Record.SHA_256 ), result, "sha256" );
157
158 return result;
159 }
160
161
162
163
164 private static String compactUinfo( final Record record )
165 {
166 final String classifier = record.get( Record.CLASSIFIER );
167 StringBuilder sb = new StringBuilder();
168 sb.append( record.get( Record.GROUP_ID ) ).append( FIELD_SEPARATOR ).append(
169 record.get( Record.ARTIFACT_ID ) ).append( FIELD_SEPARATOR ).append( record.get( Record.VERSION ) ).append(
170 FIELD_SEPARATOR ).append( nvl( classifier ) );
171 if ( classifier != null )
172 {
173 sb.append( FIELD_SEPARATOR ).append( record.get( Record.FILE_EXTENSION ) );
174 }
175 return sb.toString();
176 }
177
178
179
180
181 private static void putIfNotNull( final String source, final Map<String, String> target, final String targetName )
182 {
183 if ( source != null )
184 {
185 target.put( targetName, source );
186 }
187 }
188
189
190
191
192 private static void putIfNotNullTS( final Long source, final Map<String, String> target, final String targetName )
193 {
194 if ( source != null )
195 {
196 target.put( targetName, String.valueOf( source ) );
197 }
198 }
199
200
201
202
203
204 private static void putIfNotNullAsStringArray( final String[] source, final Map<String, String> target,
205 final String targetName )
206 {
207 if ( source != null && source.length > 0 )
208 {
209 StringBuilder sb = new StringBuilder();
210 sb.append( source[0] );
211 for ( int i = 1; i < source.length; i++ )
212 {
213 sb.append( FIELD_SEPARATOR ).append( source[i] );
214 }
215 target.put( targetName, sb.toString() );
216 }
217 }
218 }