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