View Javadoc

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 }