package de.juwimm.cms.beans;
import java.util.Collection;
import org.apache.log4j.Logger;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import de.juwimm.cms.beans.foreign.TizzitPropertiesBeanSpring;
import de.juwimm.cms.model.ContentHbm;
import de.juwimm.cms.model.ContentHbmDao;
import de.juwimm.cms.model.DocumentHbm;
import de.juwimm.cms.model.DocumentHbmDao;
import de.juwimm.cms.search.beans.SearchengineService;
@Transactional(propagation = Propagation.SUPPORTS, isolation = Isolation.DEFAULT)
public class SearchCronService {
private static Logger log = Logger.getLogger(SearchCronService.class);
private boolean cronIsRunning = false;
private SearchengineService searchengineService;
private TizzitPropertiesBeanSpring tizzitPropertiesBeanSpring;
private ContentHbmDao contentHbmDao;
private DocumentHbmDao documentHbmDao;
@SuppressWarnings("unchecked")
public void cronRunSearchIndexer() throws Exception {
if (!tizzitPropertiesBeanSpring.getSearch().isIndexerEnabled()) {
if (log.isInfoEnabled()) log.info("Cron SearchIndex has been invoked but indexer is disabled");
return;
}
if (cronIsRunning) {
if (log.isInfoEnabled()) log.info("Cron already running, ignoring crontask");
return;
}
if (log.isInfoEnabled()) log.info("Cronjob SearchIndex has been started");
cronIsRunning = true;
try {
Collection<ContentHbm> contentsToUpdate = contentHbmDao.findByUpdateSearchIndex(true);
if (log.isInfoEnabled()) log.info("Found " + contentsToUpdate.size() + " Contents to update");
for (ContentHbm content : contentsToUpdate) {
try {
searchengineService.indexPage(content.getContentId());
} catch (Exception e) {
log.error(e.getMessage(), e);
if (log.isInfoEnabled()) log.info("Error indexing Content " + content.getContentId() + ": " + e.getMessage());
}
}
Collection<DocumentHbm> documentsToUpdate = documentHbmDao.findByUpdateSearchIndex(true);
if (log.isInfoEnabled()) log.info("Found " + documentsToUpdate.size() + " Documents to update");
for (DocumentHbm doc : documentsToUpdate) {
try {
searchengineService.indexDocument(doc.getDocumentId());
} catch (Exception e) {
if (log.isInfoEnabled()) log.info("Error indexing Document " + doc.getDocumentId() + ": " + e.getMessage());
}
}
} catch (Exception exe) {
throw exe;
} finally {
cronIsRunning = false;
}
}
public void setSearchengineService(SearchengineService searchengineService) {
this.searchengineService = searchengineService;
}
public void setTizzitPropertiesBeanSpring(TizzitPropertiesBeanSpring tizzitPropertiesBeanSpring) {
this.tizzitPropertiesBeanSpring = tizzitPropertiesBeanSpring;
}
public void setContentHbmDao(ContentHbmDao contentHbmDao) {
this.contentHbmDao = contentHbmDao;
}
public void setDocumentHbmDao(DocumentHbmDao documentHbmDao) {
this.documentHbmDao = documentHbmDao;
}
}