hr.softwarecity.osijek.controllers.PersonController.java Source code

Java tutorial

Introduction

Here is the source code for hr.softwarecity.osijek.controllers.PersonController.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package hr.softwarecity.osijek.controllers;

import hr.softwarecity.osijek.model.Person;
import hr.softwarecity.osijek.repositories.PersonRepository;
import hr.softwarecity.osijek.utility.Multimedia;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.FileSystemException;
import java.util.HashMap;
import java.util.List;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.jboss.logging.Logger;
import org.jboss.logging.Logger.Level;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
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.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/person")
public class PersonController {

    PersonRepository personRepository;

    @Autowired
    public PersonController(PersonRepository personRepository) {
        this.personRepository = personRepository;
    }

    /**
     * Method for fetching all persons from database
     * @param request
     * @return list of persons in json format
     */
    @RequestMapping(value = "/")
    public List<Person> findAll(HttpServletRequest request) {
        //        Logger.getLogger("PersonController.java").log(Level.INFO, "Session: " + session.getAttribute("person"));
        //        if(session.getAttribute("person") == null) {
        //            return null;
        //        }
        Logger.getLogger("PersonController.java").log(Level.INFO, "Recognized request to / root path");
        Logger.getLogger("PersonController.java").log(Level.INFO, "Returning list of persons");
        return personRepository.findAll();
    }

    /**
     * Method for validating user login
     * @param username username input value
     * @param password password input value
     * @param request session inject object
     * @return person information in json format
     */
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public ResponseEntity<Person> checkLogin(@RequestParam("username") String username,
            @RequestParam("password") String password, ServletRequest request) {
        // log stuff
        Logger.getLogger("PersonController.java").log(Level.INFO, "Recognized request to /login path");
        Logger.getLogger("PersonController.java").log(Level.INFO,
                "Recieved username " + username + " with password " + password);
        Logger.getLogger("PersonController.java").log(Level.INFO, "Validating username and password");

        // username and password validation
        if (username == null || password == null || username.trim().isEmpty() || password.trim().isEmpty()) {
            Logger.getLogger("PersonController.java").log(Level.WARN, "Username and password validation failed");
            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
        }

        // fetching person
        Person found = personRepository.findByUsernameAndPassword(username, password);

        if (found != null) {
            Logger.getLogger("PersonController.java").log(Level.INFO, "Returning " + found.toString());
            ((HttpServletRequest) request).getSession().setAttribute("person", found);
            Logger.getLogger("PersonController.java").log(Level.INFO, "Created session " + found.toString());
            return new ResponseEntity<>(found, HttpStatus.OK);
        } else {
            Logger.getLogger("PersonController.java").log(Level.WARN, "No person found");
            return new ResponseEntity<>(found, HttpStatus.NOT_FOUND);
        }
    }

    /**
     * Method for updating person data
     * @param id person id
     * @param person person object with new values
     * @return HTTP 200
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
    public ResponseEntity update(@PathVariable("id") long id, @RequestBody Person person) {
        Logger.getLogger("PersonController.java").log(Level.INFO, "Recognized request to path /person/" + id);
        Logger.getLogger("PersonController.java").log(Level.INFO,
                "Attempting to update person with id" + person.getId());
        Person update = personRepository.findById(id);

        update.setEmail(person.getEmail());
        update.setName(person.getEmail());
        update.setSurname(person.getSurname());
        update.setUsername(person.getUsername());

        personRepository.save(update);
        Logger.getLogger("PersonController.java").log(Level.INFO, "Successfully saved person " + person.getId());
        return new ResponseEntity(HttpStatus.OK);
    }

    /**
     * Method for fetching person data
     * @param id person id
     * @return HTTP 200
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public ResponseEntity<Person> getPerson(@PathVariable("id") long id) {
        Logger.getLogger("PersonController.java").log(Level.INFO, "Recognized request to path /person/" + id);
        Person found = personRepository.findById(id);
        Logger.getLogger("PersonController.java").log(Level.INFO, "Returning person data " + found.toString());
        return new ResponseEntity(found, HttpStatus.OK);
    }

    /**
     * Method for person registration
     * @param person person to register
     * @return HTTP 200
     */
    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public ResponseEntity<Person> registerUser(@RequestBody Person person) {
        Logger.getLogger("PersonController.java").log(Level.INFO, "Recognized request to path /person/register");
        Logger.getLogger("PersonController.java").log(Level.INFO, "Attempting to add person " + person.toString());
        Person newPerson = personRepository.save(person);
        Logger.getLogger("PersonController.java").log(Level.INFO, "Successfully added person " + person.toString());
        return new ResponseEntity(person, HttpStatus.OK);
    }

    /**
     * Method for changing person password
     * @param id person id
     * @param request new value
     * @return HTTP 200
     */
    @RequestMapping(value = "/{id}/password", method = RequestMethod.POST)
    public ResponseEntity changeFieldValue(@PathVariable("id") long id, @RequestParam("request") String request) {
        Logger.getLogger("PersonController.java").log(Level.INFO, "Recognized request to path /person/" + id);

        Logger.getLogger("PersonController.java").log(Level.INFO, "Fetching person with id " + id);
        Person found = personRepository.findById(id);
        Logger.getLogger("PersonController.java").log(Level.INFO, "Fetched " + found.toString());

        Logger.getLogger("PersonController.java").log(Level.INFO, "Attempting to update person password");
        found.setPassword(request);
        personRepository.save(found);
        Logger.getLogger("PersonController.java").log(Level.INFO, "Successfully changed password");
        return new ResponseEntity(HttpStatus.OK);
    }

    /**
     * Method for user image upload
     * @param id
     * @param file
     * @return HTTP OK or HTTP
     */
    @RequestMapping(value = "/{id}/image", method = RequestMethod.POST)
    public ResponseEntity<HashMap<String, String>> setUserImage(@PathVariable("id") long id,
            @RequestParam("file") MultipartFile file) {
        String path = null;
        try {
            path = Multimedia.handleFileUpload("/var/www/html/app/img", file);
        } catch (IOException ex) {
            Logger.getLogger("PersonController.java").log(Logger.Level.ERROR,
                    "File failed to upload, cannot write to path");
        }
        if (path != null) {
            path = "/app/img/" + file.getOriginalFilename();
            Person person = personRepository.findById(id);
            person.setImage(path);
            personRepository.save(person);
            Logger.getLogger("PersonController.java").log(Logger.Level.INFO, "New user image saved");
            HashMap<String, String> map = new HashMap<>();
            map.put("path", path);
            return new ResponseEntity<>(map, HttpStatus.OK);
        } else {
            return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
        }
    }

}