Project

General

Profile

1
package eu.dnetlib.functionality.modular.ui.lightui;
2

    
3
import java.io.StringReader;
4
import java.util.Map;
5

    
6
import com.google.common.collect.Maps;
7
import eu.dnetlib.functionality.modular.ui.lightui.clients.ISLookupLightUIClient;
8
import eu.dnetlib.functionality.modular.ui.lightui.clients.IndexLightUIClient;
9
import eu.dnetlib.functionality.modular.ui.lightui.objects.SearchResult;
10
import org.apache.commons.lang3.math.NumberUtils;
11
import org.dom4j.Document;
12
import org.dom4j.Node;
13
import org.dom4j.io.SAXReader;
14
import org.springframework.core.io.ClassPathResource;
15
import org.springframework.core.io.Resource;
16
import org.springframework.stereotype.Controller;
17
import org.springframework.web.bind.annotation.RequestMapping;
18
import org.springframework.web.bind.annotation.RequestParam;
19
import org.springframework.web.bind.annotation.ResponseBody;
20

    
21
@Controller
22
public class LightUiInternalController {
23

    
24
	private static final int DEFAULT_MAX_BROWSE_VALUES = 20;
25
	private static final int DEFAULT_MAX_SINGLE_BROWSE_FIELD_VALUES = 20;
26
	private static final int DEFAULT_PAGESIZE = 10;
27

    
28
	@javax.annotation.Resource
29
	private IndexLightUIClient indexClient;
30

    
31
	@javax.annotation.Resource
32
	private ISLookupLightUIClient isLookupClient;
33

    
34
	@RequestMapping("/ui/lightui_browse")
35
	public
36
	@ResponseBody
37
	String browse(@RequestParam(value = "ui", required = true) final String lightuiId,
38
			@RequestParam(value = "query", required = true) final String query)
39
			throws Exception {
40
		final Node browseNode = getConfigurationNode(lightuiId, "//BROWSE");
41
		final int max = NumberUtils.toInt(browseNode.valueOf("@max"), DEFAULT_MAX_BROWSE_VALUES);
42
		final Resource xslt = new ClassPathResource(browseNode.valueOf("./FORMATTER/@xslt"));
43

    
44
		final Map<String, String> browseFields = LightUIUtils.getBrowseFields(browseNode);
45

    
46
		return indexClient.browse(query, LightUIUtils.calculateIndexConfiguration(browseNode), browseFields, max, xslt);
47
	}
48

    
49
	@RequestMapping("/ui/lightui_browse_one")
50
	public
51
	@ResponseBody
52
	String browseOne(@RequestParam(value = "ui", required = true) final String lightuiId,
53
			@RequestParam(value = "query", required = true) final String query,
54
			@RequestParam(value = "field", required = true) final String field,
55
			@RequestParam(value = "label", required = true) final String label) throws Exception {
56

    
57
		final Node browseNode = getConfigurationNode(lightuiId, "//BROWSE_SINGLE_FIELD");
58
		final int max = NumberUtils.toInt(browseNode.valueOf("@max"), DEFAULT_MAX_SINGLE_BROWSE_FIELD_VALUES);
59

    
60
		final Resource xslt = new ClassPathResource(browseNode.valueOf("./FORMATTER/@xslt"));
61
		final Map<String, String> browseFields = Maps.newHashMap();
62
		browseFields.put(field, label);
63

    
64
		return indexClient.browse(query, LightUIUtils.calculateIndexConfiguration(browseNode), browseFields, max, xslt);
65
	}
66

    
67
	@RequestMapping("/ui/lightui_search")
68
	public
69
	@ResponseBody
70
	SearchResult search(@RequestParam(value = "ui", required = true) final String lightuiId,
71
			@RequestParam(value = "query", required = true) final String query,
72
			@RequestParam(value = "page", required = true) final int page) throws Exception {
73

    
74
		final Node searchNode = getConfigurationNode(lightuiId, "//SEARCH");
75
		final Resource xslt = new ClassPathResource(searchNode.valueOf("./FORMATTER/@xslt"));
76
		final int pageSize = NumberUtils.toInt(searchNode.valueOf("@pageSize"), DEFAULT_PAGESIZE);
77

    
78
		return indexClient.search(query, LightUIUtils.calculateIndexConfiguration(searchNode), page, pageSize, xslt);
79
	}
80

    
81
	@RequestMapping("/ui/lightui_findone")
82
	public
83
	@ResponseBody
84
	String getDocument(@RequestParam(value = "ui", required = true) final String lightuiId,
85
			@RequestParam(value = "field", required = true) final String field,
86
			@RequestParam(value = "id", required = true) final String id) throws Exception {
87
		final Node searchNode = getConfigurationNode(lightuiId, "//DOCUMENT");
88
		final Resource xslt = new ClassPathResource(searchNode.valueOf("./FORMATTER/@xslt"));
89

    
90
		return indexClient.getDocument(LightUIUtils.calculateIndexConfiguration(searchNode), field, id, xslt);
91
	}
92

    
93
	private Node getConfigurationNode(final String lightuiId, final String xpath) throws Exception {
94
		final SAXReader reader = new SAXReader();
95
		final Document doc = reader.read(new StringReader(isLookupClient.getLightUiProfile(lightuiId)));
96
		return doc.selectSingleNode(xpath);
97
	}
98

    
99
}
(3-3/3)