/**
* @author ishaikh
*
*/
package com.transformuk.bdt.service;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.elasticsearch.common.joda.time.DateTime;
import org.elasticsearch.common.joda.time.Period;
import org.elasticsearch.common.joda.time.format.DateTimeFormatter;
import org.elasticsearch.common.joda.time.format.PeriodFormatter;
import org.elasticsearch.common.joda.time.format.PeriodFormatterBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import com.transformuk.bdt.domain.MapIt;
import com.transformuk.bdt.repository.MapItRepository;
@Service
public class MapItMongoService {
private static final int LIC_ALERT = 590000;
@Autowired
private MapItRepository mapItRepository;
@Autowired
private MongoTemplate mongoTemplate;
private static final String MAPIT_ID = "MAPIT_COUNT";
private static final PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendYears()
.printZeroNever()
.toFormatter();
private static final Logger logger = Logger
.getLogger(MapItMongoService.class);
public boolean create(MapIt mapIt) {
Assert.isNull(mapIt.getId());
mapItRepository.save(mapIt);
return true;
}
public MapIt save(MapIt mapIt) {
Assert.notNull(mapIt.getId());
return mapItRepository.save(mapIt);
}
public List<MapIt> findAll() {
return mapItRepository.findAll();
}
public void updateCount() {
MapIt updatedMapItRecord = mongoTemplate.findAndModify(new Query(Criteria.where("_id")
.is(MAPIT_ID)), new Update().inc("hitcount", 1),
new FindAndModifyOptions().returnNew(true),
MapIt.class,
"mapit");
DateTime now = new DateTime();
DateTime startDate = new DateTime(updatedMapItRecord.getStartdate());
Period period = new Period(startDate, now);
String elapsed = formatter.print(period);
if ( (elapsed.equals("")) && (updatedMapItRecord.getHitcount() >= LIC_ALERT)) {
//we have almost reached the ceiling within this year!
logger.warn("***Reaching max hits ceiling for this year, current count:"
+updatedMapItRecord.getHitcount());
}
}
}