1 package org.cateproject.controller.agent;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.UUID;
6
7 import org.cateproject.controller.Cacheable;
8 import org.cateproject.controller.GenericController;
9 import org.cateproject.controller.common.IdentifiableController;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Controller;
12 import org.springframework.web.bind.annotation.PathVariable;
13 import org.springframework.web.bind.annotation.RequestBody;
14 import org.springframework.web.bind.annotation.RequestMapping;
15 import org.springframework.web.bind.annotation.RequestMethod;
16 import org.springframework.web.bind.annotation.RequestParam;
17 import org.springframework.web.servlet.ModelAndView;
18
19 import eu.etaxonomy.cdm.api.service.IAgentService;
20 import eu.etaxonomy.cdm.model.agent.AgentBase;
21 import eu.etaxonomy.cdm.model.agent.Person;
22 import eu.etaxonomy.cdm.model.agent.Team;
23 import eu.etaxonomy.cdm.model.common.CdmBase;
24 import eu.etaxonomy.cdm.persistence.query.OrderHint;
25
26 @Controller
27 @RequestMapping(value = {"/agent/{uuid}"})
28 public class AgentController extends IdentifiableController<AgentBase,IAgentService> {
29
30 @Autowired
31 @Override
32 public void setService(IAgentService service) {
33 this.service = service;
34 }
35
36 public AgentController() {
37 super(AgentBase.class);
38 }
39
40 @Override
41 @RequestMapping(method = RequestMethod.GET)
42 @Cacheable(value="agent/index")
43 public ModelAndView get(@PathVariable(value = "uuid") UUID uuid) {
44 List<String> propertyPaths = new ArrayList<String>();
45 propertyPaths.add("$");
46 propertyPaths.add("media.title");
47 propertyPaths.add("media.representations");
48 propertyPaths.add("media.representations.parts");
49 propertyPaths.add("teamMembers");
50 CdmBase cdmBase = handleLoad(uuid,propertyPaths);
51
52 ModelAndView modelAndView = new ModelAndView("agent/index");
53 modelAndView.addObject(GenericController.RESOURCE_KEY,cdmBase);
54
55 return modelAndView;
56 }
57
58 @RequestMapping(value = "/addresses",method = RequestMethod.GET)
59 @Cacheable(value="agent/addresses")
60 public ModelAndView getAddresses(@PathVariable("uuid") UUID uuid,
61 @RequestParam(value = "page", required = false, defaultValue = GenericController.DEFAULT_PAGE) Integer page,
62 @RequestParam(value = "limit", required = false, defaultValue = GenericController.DEFAULT_LIMIT) Integer limit,
63 @RequestParam(value = "sort", required = false, defaultValue = GenericController.DEFAULT_SORT) List<OrderHint> orderHints) {
64 ModelAndView modelAndView = new ModelAndView("agent/addresses");
65 List<String> propertyPaths = new ArrayList<String>();
66 propertyPaths.add("$");
67 AgentBase agent = handleLoad(uuid,propertyPaths);
68 modelAndView.addObject(GenericController.LIST_KEY,service.getAddresses(agent,limit, page));
69 modelAndView.addObject(GenericController.ORDER_HINTS_KEY,orderHints);
70 modelAndView.addObject(GenericController.RESOURCE_KEY,agent);
71 return modelAndView;
72 }
73
74 @RequestMapping(value = "/institutionalMemberships", method = RequestMethod.GET)
75 @Cacheable(value="agent/institutionalMemberships")
76 public ModelAndView getInstitutionalMemberships(@PathVariable("uuid") UUID uuid,
77 @RequestParam(value = "page", required = false, defaultValue = GenericController.DEFAULT_PAGE) Integer page,
78 @RequestParam(value = "limit", required = false, defaultValue = GenericController.DEFAULT_LIMIT) Integer limit,
79 @RequestParam(value = "sort", required = false, defaultValue = GenericController.DEFAULT_SORT) List<OrderHint> orderHints) {
80 ModelAndView modelAndView = new ModelAndView("agent/institutionalMemberships");
81 List<String> propertyPaths = new ArrayList<String>();
82 propertyPaths.add("$");
83 Person person = (Person)handleLoad(uuid,propertyPaths);
84 modelAndView.addObject(GenericController.LIST_KEY,service.getInstitutionalMemberships(person, limit, page));
85 modelAndView.addObject(GenericController.ORDER_HINTS_KEY,orderHints);
86 modelAndView.addObject(GenericController.RESOURCE_KEY,person);
87 return modelAndView;
88 }
89
90 @RequestMapping(value = "/teamMembers", method = RequestMethod.GET)
91 @Cacheable(value="agent/teamMembers")
92 public ModelAndView getTeamMembers(@PathVariable("uuid") UUID uuid,
93 @RequestParam(value = "page", required = false, defaultValue = GenericController.DEFAULT_PAGE) Integer page,
94 @RequestParam(value = "limit", required = false, defaultValue = GenericController.DEFAULT_LIMIT) Integer limit,
95 @RequestParam(value = "sort", required = false, defaultValue = GenericController.DEFAULT_SORT) List<OrderHint> orderHints) {
96 ModelAndView modelAndView = new ModelAndView("agent/teamMembers");
97 List<String> propertyPaths = new ArrayList<String>();
98 propertyPaths.add("$");
99 Team team = (Team)handleLoad(uuid,propertyPaths);
100 modelAndView.addObject(GenericController.LIST_KEY,service.getMembers(team, limit, page));
101 modelAndView.addObject(GenericController.ORDER_HINTS_KEY,orderHints);
102 modelAndView.addObject(GenericController.RESOURCE_KEY,team);
103 return modelAndView;
104 }
105
106 @Override
107 @RequestMapping(method = RequestMethod.POST)
108 public ModelAndView post(@PathVariable("uuid") UUID uuid, @RequestBody AgentBase newObject) {
109 List<String> propertyPaths = new ArrayList<String>();
110 propertyPaths.add("$");
111 propertyPaths.add("teamMembers");
112
113 AgentBase persistentObject = handleLoad(uuid,propertyPaths);
114 ModelAndView modelAndView = doPost(newObject, persistentObject);
115 modelAndView.setViewName("agent/index");
116 return modelAndView;
117 }
118
119 @Override
120 @RequestMapping(method = RequestMethod.DELETE)
121 public ModelAndView delete(@PathVariable("uuid") UUID uuid) {
122 ModelAndView modelAndView = super.delete(uuid);
123 modelAndView.setViewName("redirect:/agent");
124 return modelAndView;
125 }
126 }