1 package org.apache.maven.index.creator;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24 import java.io.File;
25 import java.util.Arrays;
26 import java.util.Collection;
27 import java.util.Collections;
28 import java.util.zip.ZipFile;
29
30 import org.apache.lucene.document.Document;
31 import org.apache.maven.index.ArtifactContext;
32 import org.apache.maven.index.ArtifactInfo;
33 import org.apache.maven.index.IndexerField;
34
35
36
37
38
39
40
41
42
43 @Singleton
44 @Named( MavenArchetypeArtifactInfoIndexCreator.ID )
45 public class MavenArchetypeArtifactInfoIndexCreator
46 extends AbstractIndexCreator
47 {
48 public static final String ID = "maven-archetype";
49
50 private static final String MAVEN_ARCHETYPE_PACKAGING = "maven-archetype";
51
52 private static final String[] ARCHETYPE_XML_LOCATIONS =
53 { "META-INF/maven/archetype.xml", "META-INF/archetype.xml", "META-INF/maven/archetype-metadata.xml" };
54
55 public MavenArchetypeArtifactInfoIndexCreator()
56 {
57 super( ID, Arrays.asList( MinimalArtifactInfoIndexCreator.ID ) );
58 }
59
60 public void populateArtifactInfo( ArtifactContext ac )
61 {
62 File artifact = ac.getArtifact();
63
64 ArtifactInfo ai = ac.getArtifactInfo();
65
66
67 if ( artifact != null && artifact.isFile() && !MAVEN_ARCHETYPE_PACKAGING.equals( ai.getPackaging() )
68 && artifact.getName().endsWith( ".jar" ) )
69 {
70
71
72
73
74 checkMavenArchetype( ai, artifact );
75 }
76 }
77
78
79
80
81
82
83
84 private void checkMavenArchetype( ArtifactInfo ai, File artifact )
85 {
86 try ( ZipFile zipFile = new ZipFile( artifact ) )
87 {
88 for ( String path : ARCHETYPE_XML_LOCATIONS )
89 {
90 if ( zipFile.getEntry( path ) != null )
91 {
92 ai.setPackaging( MAVEN_ARCHETYPE_PACKAGING );
93
94 return;
95 }
96 }
97 }
98 catch ( Exception e )
99 {
100 if ( getLogger().isDebugEnabled() )
101 {
102 getLogger().info(
103 "Failed to parse Maven artifact " + artifact.getAbsolutePath() + " due to exception:", e );
104 }
105 else
106 {
107 getLogger().info(
108 "Failed to parse Maven artifact " + artifact.getAbsolutePath() + " due to " + e.getMessage() );
109 }
110 }
111 }
112
113 public void updateDocument( ArtifactInfo ai, Document doc )
114 {
115
116 }
117
118 public boolean updateArtifactInfo( Document doc, ArtifactInfo ai )
119 {
120
121
122 return false;
123 }
124
125
126
127 @Override
128 public String toString()
129 {
130 return ID;
131 }
132
133 public Collection<IndexerField> getIndexerFields()
134 {
135
136 return Collections.emptyList();
137 }
138 }