1 package org.apache.maven.index.archetype;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25 import java.util.Properties;
26
27 import javax.inject.Inject;
28
29 import org.apache.lucene.search.Query;
30 import org.apache.maven.archetype.catalog.Archetype;
31 import org.apache.maven.archetype.catalog.ArchetypeCatalog;
32 import org.apache.maven.index.ArtifactInfo;
33 import org.apache.maven.index.FlatSearchRequest;
34 import org.apache.maven.index.FlatSearchResponse;
35 import org.apache.maven.index.Indexer;
36 import org.apache.maven.index.MAVEN;
37 import org.apache.maven.index.context.IndexingContext;
38 import org.apache.maven.index.expr.SourcedSearchExpression;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41
42
43
44
45
46 public abstract class AbstractArchetypeDataSource
47 {
48
49 private final Logger logger = LoggerFactory.getLogger( getClass() );
50
51 protected Logger getLogger()
52 {
53 return logger;
54 }
55
56 private final Indexer indexer;
57
58
59 @Inject
60 protected AbstractArchetypeDataSource( Indexer indexer )
61 {
62 this.indexer = indexer;
63 }
64
65 public ArchetypeCatalog getArchetypeCatalog( final Properties properties )
66 {
67 final ArchetypeCatalog catalog = new ArchetypeCatalog();
68 try
69 {
70 final Map<String, String> repositories = getRepositoryMap();
71 final Query pq =
72 indexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression( "maven-archetype" ) );
73 final FlatSearchRequest searchRequest = new FlatSearchRequest( pq );
74 searchRequest.setContexts( getIndexingContexts() );
75 final FlatSearchResponse searchResponse = indexer.searchFlat( searchRequest );
76 for ( ArtifactInfo info : searchResponse.getResults() )
77 {
78 Archetype archetype = new Archetype();
79 archetype.setGroupId( info.getGroupId() );
80 archetype.setArtifactId( info.getArtifactId() );
81 archetype.setVersion( info.getVersion() );
82 archetype.setDescription( info.getDescription() );
83 archetype.setRepository( repositories.get( info.getRepository() ) );
84 catalog.addArchetype( archetype );
85 }
86 }
87 catch ( Exception ex )
88 {
89 getLogger().error( "Unable to retrieve archetypes", ex );
90 }
91
92 return catalog;
93 }
94
95 private Map<String, String> getRepositoryMap()
96 {
97
98 Map<String, String> repositories = new HashMap<String, String>();
99
100 for ( IndexingContext context : getIndexingContexts() )
101 {
102 String repositoryUrl = context.getRepositoryUrl();
103 if ( repositoryUrl != null )
104 {
105 repositories.put( context.getId(), repositoryUrl );
106 }
107 }
108
109 return repositories;
110 }
111
112 public void updateCatalog( Properties properties, Archetype archetype )
113 {
114
115 }
116
117
118
119 protected abstract List<IndexingContext> getIndexingContexts();
120 }