1 package fr.ifremer.quadrige3.synchro.server.rest.administration.program;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import com.google.common.collect.ImmutableList;
27 import com.google.common.collect.Lists;
28 import fr.ifremer.quadrige3.core.exception.SaveForbiddenException;
29 import fr.ifremer.quadrige3.core.service.administration.program.ProgramService;
30 import fr.ifremer.quadrige3.core.vo.administration.program.ProgramVO;
31 import fr.ifremer.quadrige3.synchro.server.config.SynchroServerConfiguration;
32 import fr.ifremer.quadrige3.synchro.server.security.SecurityContextHelper;
33 import fr.ifremer.quadrige3.synchro.server.service.ServiceLocator;
34 import fr.ifremer.quadrige3.synchro.server.service.synchro.ReferentialSynchroService;
35 import org.springframework.web.bind.annotation.*;
36
37 import java.util.List;
38 import java.util.Set;
39
40 @RestController
41 @RequestMapping("/program")
42 public class ProgramRestController {
43
44 @RequestMapping(value="/save/list/", method = RequestMethod.POST)
45 public @ResponseBody List<ProgramVO> save(@RequestBody List<ProgramVO> programs) {
46
47 ProgramService service = ServiceLocator.instance().getProgramService();
48
49 if (!SecurityContextHelper.isAuthenticateAsAdmin()) {
50
51 List<String> programCodes = Lists.transform(programs, ProgramVO::getProgCd);
52 boolean hasWriteAccess = service.hasWritePermission(SecurityContextHelper.getPrincipalUserId(), programCodes);
53 if (!hasWriteAccess) {
54 throw new SaveForbiddenException(SaveForbiddenException.Type.PERMISSION, "No write permission on all program to save", programCodes);
55 }
56 }
57
58 List<ProgramVO> savedPrograms = service.save(programs);
59
60
61 ServiceLocator.instance().getCacheService().clearCache(ReferentialSynchroService.REFERENTIAL_UPDATE_DATE_CACHE);
62
63 return savedPrograms;
64 }
65
66 @RequestMapping(value="/save", method = RequestMethod.POST)
67 public @ResponseBody ProgramVO save(@RequestBody ProgramVO program) {
68
69 ProgramService service = ServiceLocator.instance().getProgramService();
70
71 if (!SecurityContextHelper.isAuthenticateAsAdmin()) {
72
73 List<String> programCodes = ImmutableList.of(program.getProgCd());
74 boolean hasWriteAccess = program.getProgCd() == null || service.hasWritePermission(SecurityContextHelper.getPrincipalUserId(), programCodes);
75 if (!hasWriteAccess) {
76 throw new SaveForbiddenException(SaveForbiddenException.Type.PERMISSION, "No write permission on program", programCodes);
77 }
78 }
79
80 ProgramVO result = service.save(program);
81
82
83 ServiceLocator.instance().getCacheService().clearCache(ReferentialSynchroService.REFERENTIAL_UPDATE_DATE_CACHE);
84
85 return result;
86 }
87
88 @RequestMapping(value="/get/{progCd}", method = RequestMethod.GET)
89 public @ResponseBody ProgramVO get(@PathVariable(value="progCd") String progCd) {
90
91 ProgramService service = ServiceLocator.instance().getProgramService();
92 return service.getByCode(progCd);
93 }
94
95 @RequestMapping(value="/compatibleProgramCodes", method = RequestMethod.GET)
96 public @ResponseBody Set<String> getCompatibleList() {
97
98 SynchroServerConfiguration config = SynchroServerConfiguration.getInstance();
99
100 return config.getSynchroProgramCodeIncludes();
101 }
102
103
104 }