This project has retired. For details please refer to its
Attic page.
DefaultMergedRemoteIndexesScheduler xref
1 package org.apache.archiva.indexer.merger;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.archiva.admin.model.beans.RepositoryGroup;
23 import org.apache.archiva.scheduler.MergedRemoteIndexesScheduler;
24 import org.apache.commons.lang.StringUtils;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27 import org.springframework.scheduling.TaskScheduler;
28 import org.springframework.scheduling.support.CronTrigger;
29 import org.springframework.stereotype.Service;
30
31 import javax.inject.Inject;
32 import javax.inject.Named;
33 import java.nio.file.Path;
34 import java.util.List;
35 import java.util.Map;
36 import java.util.concurrent.ConcurrentHashMap;
37 import java.util.concurrent.ScheduledFuture;
38
39
40
41
42
43 @Service( "mergedRemoteIndexesScheduler#default" )
44 public class DefaultMergedRemoteIndexesScheduler
45 implements MergedRemoteIndexesScheduler
46 {
47
48 private Logger logger = LoggerFactory.getLogger( getClass() );
49
50 @Inject
51 @Named( value = "taskScheduler#mergeRemoteIndexes" )
52 private TaskScheduler taskScheduler;
53
54 @Inject
55 private IndexMerger indexMerger;
56
57 private Map<String, ScheduledFuture> scheduledFutureMap = new ConcurrentHashMap<>();
58
59 @Override
60 public void schedule( RepositoryGroup repositoryGroup, Path directory )
61 {
62 if ( StringUtils.isEmpty( repositoryGroup.getCronExpression() ) )
63 {
64 return;
65 }
66 CronTrigger cronTrigger = new CronTrigger( repositoryGroup.getCronExpression() );
67
68 List<String> repositories = repositoryGroup.getRepositories();
69
70 IndexMergerRequest indexMergerRequest =
71 new IndexMergerRequest( repositories, true, repositoryGroup.getId(), repositoryGroup.getMergedIndexPath(),
72 repositoryGroup.getMergedIndexTtl() ).mergedIndexDirectory( directory );
73
74 MergedRemoteIndexesTaskRequest taskRequest =
75 new MergedRemoteIndexesTaskRequest( indexMergerRequest, indexMerger );
76
77 logger.info( "schedule merge remote index for group {} with cron {}", repositoryGroup.getId(),
78 repositoryGroup.getCronExpression() );
79
80 ScheduledFuture scheduledFuture =
81 taskScheduler.schedule( new MergedRemoteIndexesTask( taskRequest ), cronTrigger );
82 scheduledFutureMap.put( repositoryGroup.getId(), scheduledFuture );
83 }
84
85 @Override
86 public void unschedule( RepositoryGroup repositoryGroup )
87 {
88 ScheduledFuture scheduledFuture = scheduledFutureMap.remove( repositoryGroup.getId() );
89 if ( scheduledFuture != null )
90 {
91 scheduledFuture.cancel( true );
92 }
93 }
94 }