package org.dicadeveloper.weplantaforest.admin.treeType; import java.io.IOException; import javax.transaction.Transactional; import org.dicadeveloper.weplantaforest.admin.FileSystemInjector; import org.dicadeveloper.weplantaforest.admin.support.Uris; import org.dicadeveloper.weplantaforest.common.image.ImageHelper; import org.dicadeveloper.weplantaforest.common.support.StringHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; 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; import lombok.NonNull; import lombok.RequiredArgsConstructor; @RestController @RequiredArgsConstructor(onConstructor = @__(@Autowired) ) public class TreeTypeController { private @NonNull TreeTypeRepository _treeTypeRepository; private @NonNull ImageHelper _imageHelper; @RequestMapping(value = Uris.TREETYPES, method = RequestMethod.GET) public Iterable<TreeType> getTreeTypes() { return _treeTypeRepository.findAll(); } @RequestMapping(value = Uris.TREETYPE_SAVE, method = RequestMethod.POST) public ResponseEntity<?> saveTreeType(@RequestBody TreeType treeType) { TreeType savedTreeType; try { savedTreeType = _treeTypeRepository.save(treeType); return new ResponseEntity<>(savedTreeType.getId(), HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } @RequestMapping(value = Uris.TREETYPE_DELETE, method = RequestMethod.DELETE) public ResponseEntity<?> deleteTreeType(@RequestParam Long TreeTypeId) { try { _treeTypeRepository.delete(TreeTypeId); return new ResponseEntity<>(HttpStatus.OK); } catch (Exception e) { if (e instanceof DataIntegrityViolationException) { String errorMessage = "Der Baumtyp kann nicht gelöscht werden, weil er bereits Bestandteil in Projekten ist."; return new ResponseEntity<>(errorMessage, HttpStatus.INTERNAL_SERVER_ERROR); } else { return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } } @RequestMapping(value = Uris.TREETYPE_IMAGE_UPLOAD, method = RequestMethod.POST) @Transactional public ResponseEntity<?> uploadUserImage(@RequestParam Long treeTypeId, @RequestParam("file") MultipartFile file) { TreeType treeType = _treeTypeRepository.findOne(treeTypeId); String fileEnding; if (file.getOriginalFilename() .length() > 0) { fileEnding = file.getOriginalFilename() .substring(file.getOriginalFilename() .indexOf(".")); } else { fileEnding = ".png"; } String imageFolder = FileSystemInjector.getTreeTypeFolder(); String imageName = StringHelper.getTextForLanguage(treeType.getName(), "de") + fileEnding; if (!file.isEmpty()) { try { imageName = _imageHelper.storeImage(file, imageFolder, imageName, true); treeType.setImageFile(imageName); _treeTypeRepository.save(treeType); return new ResponseEntity<>(HttpStatus.OK); } catch (IOException e) { return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } else { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } } }