package com.clouck.rest;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.clouck.converter.RepConverter;
import com.clouck.model.Region;
import com.clouck.model.ResourceType;
import com.clouck.model.aws.ec2.Ec2VersionMeta;
import com.clouck.rep.DataTableRep;
import com.clouck.service.AwsService;
import com.clouck.webapp.controller.AbstractController;
@Controller
@RequestMapping(value = "/rest/dataTable/accounts/{accountId}/ec2/versions")
public class DataTableRestController extends AbstractController {
private static final Logger log = LoggerFactory.getLogger(DataTableRestController.class);
@Autowired
private AwsService awsService;
@Autowired
private RepConverter converter;
// @RequestMapping(value = "/{ec2VersionId}", method = RequestMethod.GET)
// public @ResponseBody DataTableRep showDataBable(@PathVariable String ec2VersionId) {
// // TODO: do validation and what happend to account id and version list id is string or not this user
// Collection<AbstractResource<?>> resources = awsService.findResources(ec2VersionId);
// return converter.toDataTableData(resources);
// }
//
// @RequestMapping(value = "/{resourceType}/{timeStamp}/accounts/{accountId}", method = RequestMethod.GET)
// public @ResponseBody DataTableRep showDataBable(@PathVariable String resourceType,
// @PathVariable Long timeStamp, @PathVariable String accountId) {
// // TODO: do validation and what happend to account id and version list id is string or not this user
// log.debug("received call from account id:{}", accountId);
// Collection<AbstractResource<?>> resources = awsService.findResources(accountId,
// ResourceType.find(resourceType), new DateTime(timeStamp));
// return converter.toDataTableData(resources);
// }
@RequestMapping(value = "/{resourceType}", method = RequestMethod.GET)
public @ResponseBody DataTableRep showDataBable(@PathVariable String accountId, @PathVariable String resourceType,
@RequestParam(value = "region", required = false) String regionEndpoint,
@RequestParam Integer sEcho, @RequestParam Integer iDisplayStart,
@RequestParam(required = false) Long ending, @RequestParam(required = false) String uniqueId,
HttpServletRequest request) {
String ctx = request.getContextPath();
ResourceType rt = ResourceType.find(resourceType);
Region region = findRegion(regionEndpoint);
DateTime dt = new DateTime(ending);
Pageable pageable = new PageRequest(iDisplayStart/10, 10);
List<Ec2VersionMeta> ec2VersionMetas = awsService.findEc2VersionMetasOrderByTimeDetectedDesc(accountId, rt, region, pageable, dt, true, uniqueId);
long numOfFilteredEc2VersionMetas = awsService.countEc2VersionMetas(accountId, rt, region, dt, true, uniqueId);
long totalNumEc2VersionMetas = awsService.countEc2VersionMetas(accountId, rt);
return converter.toDataTableData(accountId, resourceType, region, ec2VersionMetas, sEcho, totalNumEc2VersionMetas, numOfFilteredEc2VersionMetas, ctx);
}
}