1 package hu.user.mediacube.indexer;
\r
3 import static java.util.concurrent.TimeUnit.SECONDS;
\r
5 import java.io.IOException;
\r
6 import java.util.List;
\r
7 import java.util.concurrent.Executors;
\r
8 import java.util.concurrent.ScheduledExecutorService;
\r
9 import java.util.concurrent.ScheduledFuture;
\r
11 import javax.annotation.PreDestroy;
\r
13 import org.apache.ibatis.logging.LogFactory;
\r
14 import org.slf4j.Logger;
\r
15 import org.slf4j.LoggerFactory;
\r
16 import org.springframework.beans.factory.annotation.Autowired;
\r
17 import org.springframework.stereotype.Component;
\r
19 import hu.user.mediacube.indexer.db.IndexerDescription;
\r
20 import hu.user.mediacube.indexer.db.IndexerViewMapper;
\r
21 import hu.user.mediacube.indexer.db.MediadescriptionMapper;
\r
22 import hu.user.mediacube.indexer.lucene.LuceneIndexer;
\r
26 public class IndexerService implements Runnable {
\r
27 private static Logger logger = LoggerFactory.getLogger(IndexerService.class);
\r
28 private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
\r
29 private ScheduledFuture<?> beeperHandle;
\r
32 private IndexerViewMapper mapper;
\r
34 private MediadescriptionMapper mmapper;
\r
36 private LuceneIndexer indexer;
\r
38 private JsonProperties config;
\r
43 logger.info("Reading index");
\r
44 List<IndexerDescription> indexerDescriptions = mapper.selectAll();
\r
46 LogFactory.useLog4J2Logging();
\r
48 int logStep = indexerDescriptions.size() / 10;
\r
50 for (IndexerDescription indexerDescription : indexerDescriptions) {
\r
52 String description = mapper.selectDescription(indexerDescription);
\r
53 indexerDescription.setDescription(description);
\r
54 //logger.info("{}", indexerDescription);
\r
55 boolean putLog = ++i % logStep == 0;
\r
56 boolean lastRow = i == indexerDescriptions.size();
\r
58 indexer.index(indexerDescription);
\r
60 if (putLog || lastRow)
\r
61 logger.info("Processed {} / {}", i, indexerDescriptions.size());
\r
65 logger.error("Index committed");
\r
67 } catch (IOException e) {
\r
68 logger.error("Can not create index, caused by {} : {}", e.getClass().getSimpleName(), e.getMessage(), e);
\r
75 public void schedule() {
\r
76 // beeperHandle = scheduler.scheduleAtFixedRate(this, 0, 5, SECONDS);
\r
77 beeperHandle = scheduler.schedule(this, 0, SECONDS);
\r
79 // scheduler.schedule(new Runnable() {
\r
81 // public void run() {
\r
82 // beeperHandle.cancel(true);
\r
84 // }, 60 * 60, SECONDS);
\r
88 public void start() {
\r
89 logger.info("start");
\r
91 if (config.isResetIndex())
\r
96 public void stop() {
\r
97 if (beeperHandle != null)
\r
98 beeperHandle.cancel(true);
\r
100 // scheduler.awaitTermination(2, TimeUnit.SECONDS);
\r
101 // } catch (InterruptedException e) {
\r
102 // logger.error("Scheduler termination error", e);
\r
104 logger.info("stop");
\r