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
|
}
|