1 package hu.user.mediacube.indexer.service;
\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.JsonProperties;
\r
20 import hu.user.mediacube.indexer.db.IndexerDescription;
\r
21 import hu.user.mediacube.indexer.db.IndexerViewMapper;
\r
22 import hu.user.mediacube.indexer.db.MediadescriptionMapper;
\r
23 import hu.user.mediacube.indexer.lucene.LuceneIndexer;
\r
27 public class IndexerService implements Runnable {
\r
28 private static Logger logger = LoggerFactory.getLogger(IndexerService.class);
\r
29 private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
\r
30 private ScheduledFuture<?> beeperHandle;
\r
33 private IndexerViewMapper mapper;
\r
35 private MediadescriptionMapper mmapper;
\r
37 private LuceneIndexer indexer;
\r
39 private JsonProperties config;
\r
44 logger.info("Reading index");
\r
45 List<IndexerDescription> indexerDescriptions = mapper.selectAll();
\r
47 LogFactory.useLog4J2Logging();
\r
49 int logStep = indexerDescriptions.size() / 10;
\r
51 for (IndexerDescription indexerDescription : indexerDescriptions) {
\r
53 String description = mapper.selectDescription(indexerDescription);
\r
54 indexerDescription.setDescription(description);
\r
55 // logger.info("{}", indexerDescription);
\r
56 boolean putLog = ++i % logStep == 0;
\r
57 boolean lastRow = i == indexerDescriptions.size();
\r
59 indexer.index(indexerDescription);
\r
61 if (putLog || lastRow)
\r
62 logger.info("Processed {} / {}", i, indexerDescriptions.size());
\r
66 logger.error("Index committed");
\r
68 } catch (IOException e) {
\r
69 logger.error("Can not create index, caused by {} : {}", e.getClass().getSimpleName(), e.getMessage(),
\r
77 public void schedule() {
\r
78 // beeperHandle = scheduler.scheduleAtFixedRate(this, 0, 5, SECONDS);
\r
79 beeperHandle = scheduler.schedule(this, 0, SECONDS);
\r
81 // scheduler.schedule(new Runnable() {
\r
83 // public void run() {
\r
84 // beeperHandle.cancel(true);
\r
86 // }, 60 * 60, SECONDS);
\r
90 public void start() {
\r
91 logger.info("start");
\r
93 if (config.isResetIndex())
\r
98 public void stop() {
\r
99 if (beeperHandle != null)
\r
100 beeperHandle.cancel(true);
\r
102 // scheduler.awaitTermination(2, TimeUnit.SECONDS);
\r
103 // } catch (InterruptedException e) {
\r
104 // logger.error("Scheduler termination error", e);
\r
106 logger.info("stop");
\r