com.salmon.security.xacml.demo.springmvc.rest.controller.MarketPlacePopulatorController.java Source code

Java tutorial

Introduction

Here is the source code for com.salmon.security.xacml.demo.springmvc.rest.controller.MarketPlacePopulatorController.java

Source

package com.salmon.security.xacml.demo.springmvc.rest.controller;

import java.io.BufferedReader;
import java.net.URI;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.http.converter.HttpMessageNotReadableException;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.salmon.security.xacml.demo.springmvc.controller.IMarketPlaceController;
import com.salmon.security.xacml.demo.springmvc.domain.Driver;
import com.salmon.security.xacml.demo.springmvc.domain.DriverList;
import com.salmon.security.xacml.demo.springmvc.domain.Vehicle;

@Controller
@RequestMapping("/populators/dvla")
public class MarketPlacePopulatorController {

    private static Logger LOG = LoggerFactory.getLogger(MarketPlaceQueryController.class);

    @Autowired
    IMarketPlaceController marketPlaceController;

    @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json", value = "driveradd")
    @ResponseStatus(HttpStatus.CREATED)
    @ResponseBody
    public ResponseEntity<Driver> createDriver(@RequestBody Driver driver, UriComponentsBuilder builder) {

        marketPlaceController.registerDriver(driver);

        HttpHeaders headers = new HttpHeaders();

        URI newDriverLocation = builder.path("/aggregators/dvla/drivers/{license}")
                .buildAndExpand(driver.getDriversLicense()).toUri();

        LOG.info("REST CREATE DRIVER - new driver @ " + newDriverLocation.toString());

        headers.setLocation(newDriverLocation);

        Driver newDriver = marketPlaceController.getDriverDetails(driver.getDriversLicense());

        return new ResponseEntity<Driver>(newDriver, headers, HttpStatus.CREATED);
    }

    @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json", value = "vehicleadd")
    @ResponseStatus(HttpStatus.CREATED)
    @ResponseBody
    public ResponseEntity<Vehicle> createVehicle(@RequestBody Vehicle vehicle, UriComponentsBuilder builder) {

        LOG.info("REST CREATE Vechicle - " + vehicle.toString());

        marketPlaceController.registerVehicle(vehicle);

        HttpHeaders headers = new HttpHeaders();

        URI newVehicleLocation = builder.path("/aggregators/dvla/vehicles/{plate}")
                .buildAndExpand(vehicle.getPlate()).toUri();

        LOG.info("REST CREATE VEHICLE - new vehicle @ " + newVehicleLocation.toString());

        headers.setLocation(newVehicleLocation);

        return new ResponseEntity<Vehicle>(vehicle, headers, HttpStatus.CREATED);
    }

    @RequestMapping(method = RequestMethod.POST, produces = "application/json", value = "reset")
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public Integer eraseAllData() {

        LOG.info("REST ERASE ALL DATA");

        int drivers = marketPlaceController.eraseAllDrivers();
        int vehicles = marketPlaceController.eraseAllVehicles();

        return new Integer(drivers + vehicles);
    }

    /*
    @RequestMapping(method = RequestMethod.GET, value = "vehicles")
     public ResponseEntity<Vehicle> createVehicle(@RequestBody Vehicle vehicle, UriComponentsBuilder builder) {
        
       marketPlaceController.registerVehicle(vehicle);
       Vehicle newVehicle = marketPlaceController.getVehicleDetails(vehicle.getPlate());
        
    HttpHeaders headers = new HttpHeaders();
    headers.setLocation(
            builder.path("/aggregators/vehicles/{plate}")
                    .buildAndExpand(vehicle.getPlate()).toUri());
        
    return new ResponseEntity<Vehicle>(newVehicle, headers, HttpStatus.CREATED);
     }
        
        
        
    @RequestMapping(method = RequestMethod.GET, value = "xxx")
     @ResponseStatus(HttpStatus.OK)
     @ResponseBody
     public DriverList createDrivers() {
       LOG.info("REST Driver LIST");
       marketPlaceController.registerDriver(new Driver("BARAK", "OBAMA", "OBAMALIC2015"));
       marketPlaceController.registerDriver(new Driver("DAVID", "CAMERON", "CAMERONLIC2014"));
       marketPlaceController.registerDriver(new Driver("HUGO", "CHAVEZ", "CHAVEZLIC2016"));
           
       return marketPlaceController.listDrivers();
    }
        
    @RequestMapping(method = RequestMethod.GET, value = "vehicles")
     @ResponseStatus(HttpStatus.OK)
     @ResponseBody
     public List<Vehicle> createVehicles() {
       LOG.info("REST Driver LIST");
       marketPlaceController.registerVehicle(new Vehicle("AUDI", "A3", "XX34GBR"));
       marketPlaceController.registerVehicle(new Vehicle("AUDI", "Q5", "AB77UGN"))   ;
       marketPlaceController.registerVehicle(new Vehicle("AUDI", "TT", "CD95HTT"))   ;
        
       return marketPlaceController.listVehicles();
    }
    */

    @ExceptionHandler(HttpMessageNotReadableException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public void whenPayloadIsStrange(HttpServletRequest request, HttpMessageNotReadableException ex) {

        StringBuilder sb = new StringBuilder("REQUEST PARTS: ");

        LOG.info("************************ JSON ERROR  ************************ ");
        LOG.info("ContentType " + request.getContentType());
        LOG.info("ContentLength " + request.getContentLength());

        StringBuffer jb = new StringBuffer();
        String line = null;
        try {
            BufferedReader reader = request.getReader();
            while ((line = reader.readLine()) != null)
                jb.append(line);
        } catch (Exception e) {
            /*report an error*/ }

        LOG.info("************************ JSON PARSING  ************************ ");
        LOG.info("Payload: " + jb.toString());
        try {
            ObjectMapper mapper = new ObjectMapper();
            JsonFactory factory = mapper.getFactory();
            JsonParser jp = factory.createParser(jb.toString());
            JsonNode actualObj = mapper.readTree(jp);
            LOG.info("JSON OBJECT CREATED: " + actualObj.toString());

            ObjectMapper driverMapper = new ObjectMapper();
            Driver jsonDriver = driverMapper.readValue(actualObj.toString(), Driver.class);

            LOG.info("DRIVER OBJECT CREATED: " + jsonDriver.toString());

        } catch (Exception e) {
            LOG.error("JSON Parsing Exception " + e.getMessage());
        }

    }
}