// Copyright © 2015 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.
package fi.hsl.parkandride.front;
import fi.hsl.parkandride.core.domain.Operator;
import fi.hsl.parkandride.core.domain.OperatorSearch;
import fi.hsl.parkandride.core.domain.SearchResults;
import fi.hsl.parkandride.core.domain.User;
import fi.hsl.parkandride.core.service.OperatorService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;
import javax.inject.Inject;
import static fi.hsl.parkandride.front.UrlSchema.*;
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.OK;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.*;
@RestController
public class OperatorController {
private final Logger log = LoggerFactory.getLogger(OperatorController.class);
@Inject
OperatorService operatorService;
@RequestMapping(method = POST, value = OPERATORS, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Operator> createOperator(@RequestBody Operator operator,
User currentUser,
UriComponentsBuilder builder) {
log.info("createOperator");
Operator newOperator = operatorService.createOperator(operator, currentUser);
log.info("createOperator({})", newOperator.id);
HttpHeaders headers = new HttpHeaders();
headers.setLocation(builder.path(OPERATOR).buildAndExpand(newOperator.id).toUri());
return new ResponseEntity<>(newOperator, headers, CREATED);
}
@RequestMapping(method = PUT, value = OPERATOR, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Operator> updateOperator(@PathVariable(OPERATOR_ID) long operatorId,
@RequestBody Operator operator,
User currentUser) {
log.info("updateOperator({})", operatorId);
Operator response = operatorService.updateOperator(operatorId, operator, currentUser);
return new ResponseEntity<>(response, OK);
}
@RequestMapping(method = GET, value = OPERATOR, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Operator> getOperator(@PathVariable(OPERATOR_ID) long operatorId) {
Operator operator = operatorService.getOperator(operatorId);
return new ResponseEntity<>(operator, OK);
}
@RequestMapping(method = GET, value = OPERATORS, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<SearchResults<Operator>> findOperators(OperatorSearch search) {
SearchResults<Operator> results = operatorService.search(search);
return new ResponseEntity<>(results, OK);
}
}