/** * @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()); } } }