Project

General

Profile

Download (5.81 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2009 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.cdm.remote.controller;
11

    
12
import java.io.IOException;
13
import java.util.Arrays;
14
import java.util.List;
15
import java.util.UUID;
16

    
17
import javax.servlet.http.HttpServletRequest;
18
import javax.servlet.http.HttpServletResponse;
19

    
20
import org.springframework.beans.factory.annotation.Autowired;
21
import org.springframework.stereotype.Controller;
22
import org.springframework.web.bind.annotation.RequestMapping;
23
import org.springframework.web.bind.annotation.RequestMethod;
24
import org.springframework.web.bind.annotation.RequestParam;
25
import org.springframework.web.servlet.ModelAndView;
26

    
27
import eu.etaxonomy.cdm.api.service.ITermService;
28
import eu.etaxonomy.cdm.api.service.IVocabularyService;
29
import eu.etaxonomy.cdm.api.service.pager.Pager;
30
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
31
import eu.etaxonomy.cdm.model.common.OrderedTermBase;
32
import eu.etaxonomy.cdm.model.common.TermVocabulary;
33
import eu.etaxonomy.cdm.model.location.NamedArea;
34
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
35
import eu.etaxonomy.cdm.model.location.NamedAreaType;
36

    
37
/**
38
 * TODO write controller documentation
39
 * 
40
 * @author a.kohlbecker
41
 * @date 23.06.2009
42
 *
43
 */
44
@Controller
45
@RequestMapping(value = {"/*/term/", "/*/term/?*", "/*/term/?*/*", "/*/term/*/compareTo/?*"})
46
public class TermListController extends BaseListController<DefinedTermBase, ITermService> {
47
	
48
	private static final List<String> VOCABULARY_LIST_INIT_STRATEGY = Arrays.asList(new String []{
49
			"representations"
50
	});
51
	
52
	private static final List<String> TERM_COMPARE_INIT_STRATEGY = Arrays.asList(new String []{
53
			"vocabulary"
54
	});
55
	
56
	private static final List<String> VOCABULARY_INIT_STRATEGY = Arrays.asList(new String []{
57
			"$",
58
			"representations",
59
			"terms.representations"
60
	});
61
	
62
	private IVocabularyService vocabularyService;
63
	
64
	@Autowired
65
	public void setVocabularyService(IVocabularyService vocabularyService) {
66
		this.vocabularyService = vocabularyService;
67
	}
68

    
69
	/* (non-Javadoc)
70
	 * @see eu.etaxonomy.cdm.remote.controller.AbstractListController#setService(eu.etaxonomy.cdm.api.service.IService)
71
	 */
72
	@Autowired
73
	@Override
74
	public void setService(ITermService service) {
75
		this.service = service;
76
	}
77
	
78
	/**
79
	 * TODO write controller method documentation
80
	 * 
81
	 * @param page
82
	 * @param pageSize
83
	 * @return
84
	 */
85
	@SuppressWarnings("unchecked")
86
	@RequestMapping(method = RequestMethod.GET,
87
		value = "/*/term/")
88
	public Pager<TermVocabulary> doGetVocabularies(
89
			@RequestParam(value = "page", required = false) Integer page,
90
			@RequestParam(value = "pageSize", required = false) Integer pageSize) {
91
		
92
		if(page == null){ page = DEFAULT_PAGE_NUMBER;}
93
		if(pageSize == null){ pageSize = DEFAULT_PAGESIZE;}
94
		
95
		return (Pager<TermVocabulary>) vocabularyService.page(null,pageSize, page, null, VOCABULARY_LIST_INIT_STRATEGY);
96
	}
97
	
98
	/**
99
	 * TODO write controller method documentation
100
	 * 
101
	 * @param request
102
	 * @param response
103
	 * @return
104
	 * @throws IOException
105
	 */
106
	@RequestMapping(method = RequestMethod.GET,
107
		value = "/*/term/?*")
108
	public TermVocabulary<DefinedTermBase> doGetTerms(HttpServletRequest request, HttpServletResponse response) throws IOException {
109
		UUID uuid = readValueUuid(request, "^/(?:[^/]+)/term/([^/?#&\\.]+).*");
110
		TermVocabulary<DefinedTermBase> vocab = vocabularyService.load(uuid, VOCABULARY_INIT_STRATEGY);
111
		return vocab;
112
	}
113
	
114
	/**
115
	 * TODO write controller method documentation
116
	 * 
117
	 * @param request
118
	 * @param response
119
	 * @return
120
	 * @throws IOException
121
	 */
122
	@RequestMapping(method = RequestMethod.GET,
123
		value = "/*/term/*/compareTo/?*")
124
	public ModelAndView doCompare(HttpServletRequest request, HttpServletResponse response) throws IOException {
125
		ModelAndView mv = new ModelAndView();
126
		UUID uuidThis = readValueUuid(request, "^/(?:[^/]+)/term/([^/?#&\\.]+).*");
127
		UUID uuidThat = readValueUuid(request, "^/(?:[^/]+)/term/(?:[^/]+)/compareTo/([^/?#&\\.]+).*");
128
		DefinedTermBase thisTerm = service.load(uuidThis, TERM_COMPARE_INIT_STRATEGY);
129
		DefinedTermBase thatTerm = service.load(uuidThat, TERM_COMPARE_INIT_STRATEGY);
130
		if(thisTerm.getVocabulary().equals(thatTerm.getVocabulary())){
131
			if(OrderedTermBase.class.isAssignableFrom(thisTerm.getClass())){
132
				Integer result = ((OrderedTermBase)thisTerm).compareTo((OrderedTermBase)thatTerm);
133
				mv.addObject(result);
134
				return mv;
135
			}
136
			response.sendError(400, "Only ordered term types can be compared");
137
			return mv;
138
		}
139
		response.sendError(400, "Terms of different vocabuaries can not be compared");
140
		return mv;
141
	}
142
	
143
	/**
144
	 * TODO write controller method documentation
145
	 * 
146
	 * @param request
147
	 * @param response
148
	 * @return
149
	 * @throws IOException
150
	 */
151
	@RequestMapping(method = RequestMethod.GET,
152
		value = "/*/term/tdwg/*")
153
	public List<NamedArea> doGetTdwgLevel(HttpServletRequest request, HttpServletResponse response) throws IOException {
154
		
155
		String path = request.getServletPath();
156
		String[] pathTokens = path.split("/");
157
		String levelStr = pathTokens[4];
158
		if(levelStr.indexOf('.') > -1){
159
			levelStr = levelStr.substring(0, levelStr.indexOf('.'));
160
		}
161
		Integer levelId = Integer.valueOf(levelStr);
162
		NamedAreaLevel level = null;
163
		switch(levelId){
164
			case 1: level = NamedAreaLevel.TDWG_LEVEL1(); break;
165
			case 2: level = NamedAreaLevel.TDWG_LEVEL2(); break;
166
			case 3: level = NamedAreaLevel.TDWG_LEVEL3(); break;
167
			case 4: level = NamedAreaLevel.TDWG_LEVEL4(); break;
168
		}
169
		Pager<NamedArea> p = service.list(level, (NamedAreaType)null, null, null, null, null);
170
		return p.getRecords();
171
	}
172

    
173
	
174
	
175

    
176
}
(31-31/31)