package pl.edu.agh.dsm.front.mocks; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.ExposesResourceFor; import org.springframework.hateoas.Resource; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import pl.edu.agh.dsm.front.core.model.rest.dto.MeasurementDto; import pl.edu.agh.dsm.front.mocks.dto.DataLimit; import pl.edu.agh.dsm.front.mocks.dto.MeasurementDataDto; import java.util.LinkedList; import java.util.List; import java.util.Random; import java.util.UUID; import static org.springframework.web.bind.annotation.RequestMethod.GET; @ExposesResourceFor(MeasurementDto.class) @RequestMapping("measurements") @RestController public class MeasurementControllerMock { @Autowired MockRepository mockRepository; @Autowired MockImplementation mockImplementation; @RequestMapping(method = GET, value = "/{id}/data", produces = MediaType.APPLICATION_JSON_VALUE) public List<MeasurementDataDto> getData( @PathVariable("id") UUID uuid, @RequestParam(value = "limit", defaultValue = "all") DataLimit limit, @RequestParam(value = "value", defaultValue = "1") int value) { LinkedList<MeasurementDataDto> list = new LinkedList<>(); int count = 10; if(limit == DataLimit.last) count = 1; for(int i=0;i<count;i++) { list.add(new MeasurementDataDto ( new java.util.Date().getTime()-i*1000, generateNewData(uuid))); } return list; } @RequestMapping(method = GET, value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) public Resource<MeasurementDto> getMeasurement(@PathVariable("id") UUID uuid) { return mockImplementation.getMeasurement(uuid); } double generateNewData(UUID id) { MeasurementDto measurement = mockRepository.getMeasurementById(id); if(measurement.getUnit().isEmpty()) { return new Random().nextBoolean() ? 1 : 0; } else if(measurement.getUnit().contains("B")) { return new Random().nextInt(10000000); } else { return new Random().nextDouble() * 100.0; } } }