]> source.dussan.org Git - archiva.git/blob
00378c706472a99244bf9d599e442553fb3d9545
[archiva.git] /
1 package org.apache.archiva.consumers.lucene;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.Date;
27 import java.util.List;
28
29 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
30 import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
31 import org.apache.maven.archiva.consumers.ConsumerException;
32 import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
33 import org.apache.maven.archiva.repository.content.ManagedDefaultRepositoryContent;
34 import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler;
35 import org.apache.maven.archiva.scheduled.tasks.ArtifactIndexingTask;
36 import org.apache.maven.archiva.scheduled.tasks.TaskCreator;
37 import org.codehaus.plexus.taskqueue.TaskQueueException;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
40 import org.sonatype.nexus.index.context.IndexingContext;
41 import org.sonatype.nexus.index.context.UnsupportedExistingLuceneIndexException;
42
43 /**
44  * Consumer for indexing the repository to provide search and IDE integration features.
45  */
46 public class NexusIndexerConsumer
47     extends AbstractMonitoredConsumer
48     implements KnownRepositoryContentConsumer
49 {
50     private static final Logger log = LoggerFactory.getLogger( NexusIndexerConsumer.class );
51
52     private ManagedDefaultRepositoryContent repositoryContent;
53
54     private File managedRepository;
55
56     private ArchivaTaskScheduler scheduler;
57
58     private IndexingContext context;
59
60     public NexusIndexerConsumer( ArchivaTaskScheduler scheduler )
61     {
62         this.scheduler = scheduler;
63     }
64
65     public String getDescription()
66     {
67         return "Indexes the repository to provide search and IDE integration features";
68     }
69
70     public String getId()
71     {
72         return "index-content";
73     }
74
75     public boolean isPermanent()
76     {
77         return false;
78     }
79
80     public void beginScan( ManagedRepositoryConfiguration repository, Date whenGathered )
81         throws ConsumerException
82     {
83         managedRepository = new File( repository.getLocation() );
84
85         repositoryContent = new ManagedDefaultRepositoryContent();
86         repositoryContent.setRepository( repository );
87
88         try
89         {
90             context = TaskCreator.createContext( repository );
91         }
92         catch ( IOException e )
93         {
94             throw new ConsumerException( e.getMessage(), e );
95         }
96         catch ( UnsupportedExistingLuceneIndexException e )
97         {
98             throw new ConsumerException( e.getMessage(), e );
99         }
100     }
101
102     public void processFile( String path )
103         throws ConsumerException
104     {
105         File artifactFile = new File( managedRepository, path );
106
107         ArtifactIndexingTask task =
108             TaskCreator.createIndexingTask( repositoryContent.getRepository(), artifactFile,
109                                             ArtifactIndexingTask.Action.ADD, context );
110         try
111         {
112             log.debug( "Queueing indexing task + '" + task + "' to add or update the artifact in the index." );
113             scheduler.queueIndexingTask( task );
114         }
115         catch ( TaskQueueException e )
116         {
117             throw new ConsumerException( e.getMessage(), e );
118         }
119     }
120
121     public void completeScan()
122     {
123         ArtifactIndexingTask task =
124             TaskCreator.createIndexingTask( repositoryContent.getRepository(), null,
125                                             ArtifactIndexingTask.Action.FINISH, context );
126         try
127         {
128             log.debug( "Queueing indexing task + '" + task + "' to finish indexing." );
129             scheduler.queueIndexingTask( task );
130         }
131         catch ( TaskQueueException e )
132         {
133             log.error( "Error queueing task: " + task + ": " + e.getMessage(), e );
134         }
135     }
136
137     public List<String> getExcludes()
138     {
139         return new ArrayList<String>();
140     }
141
142     public List<String> getIncludes()
143     {
144         return Arrays.asList( "**/*" );
145     }
146 }