Java tutorial
/* * 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); } } }