Project

General

Profile

1
package eu.dnetlib.data.search.web.servlet;
2

    
3
import eu.dnetlib.api.data.SearchService;
4
import eu.dnetlib.data.search.app.SearchServiceImpl;
5
import eu.dnetlib.domain.data.FormattedSearchResult;
6
import org.apache.commons.lang.IncompleteArgumentException;
7
import org.apache.commons.lang.StringEscapeUtils;
8
import org.apache.log4j.Logger;
9
import org.springframework.context.ApplicationContext;
10
import org.springframework.web.context.support.WebApplicationContextUtils;
11

    
12
import javax.servlet.ServletConfig;
13
import javax.servlet.ServletException;
14
import javax.servlet.http.HttpServlet;
15
import javax.servlet.http.HttpServletRequest;
16
import javax.servlet.http.HttpServletResponse;
17
import java.io.PrintWriter;
18
import java.util.ArrayList;
19
import java.util.Collection;
20

    
21
@SuppressWarnings("serial")
22
public class SearchServlet extends HttpServlet{
23

    
24
	private SearchServiceImpl searchService = null;
25
	private ApplicationContext context = null;
26
	private static Logger logger = Logger.getLogger(SearchService.class); 
27
	
28
	public void init(ServletConfig config) throws ServletException {
29
		super.init(config);
30
		context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
31
		searchService = (SearchServiceImpl) context.getBean("searchService");
32
	}
33
	
34
	@Override
35
	public void doGet(HttpServletRequest request, HttpServletResponse response) {		
36
		PrintWriter writer = null;
37
		FormattedSearchResult formattedSearchResult = null;
38
		
39
		String action = request.getParameter("action");
40
		if (action == null) {
41
			throw new UnsupportedOperationException("Undefined action.");
42
		}
43

    
44
		String query = request.getParameter("query");
45
		if (query == null) {
46
			throw new IncompleteArgumentException("Undefined query. Search request");
47
		}
48
		
49
		String format = (request.getParameter("format") != null) ?
50
				request.getParameter("format") : "xml";
51
		
52
		String locale = request.getParameter("locale");
53
	
54
		int page = readParameter(request, "page", 1); 					
55
		int size = readParameter(request, "size", 10);
56
		
57
		String sTransformer = request.getParameter("sTransformer");
58
		String rTransformer = request.getParameter("rTransformer");
59
		
60
		Collection<String> fields = readParameter(request, "fields");
61
		
62
		response.setContentType("text/xml;charset=UTF-8");
63

    
64
		try {			
65
			writer = response.getWriter();	
66
			if(action.equals("search")) {				
67
				if (sTransformer == null) {
68
					throw new IncompleteArgumentException("Undefined search transformer. Search request");
69
				}				
70
				
71
				formattedSearchResult = searchService.search(query, sTransformer, format, locale, page, size);
72
				
73
			} else if(action.equals("refine")) {
74
				if(rTransformer == null) {
75
					throw new IncompleteArgumentException("Undefined refine transformer. Refine request");
76
				}
77
				
78
				if(fields == null) {
79
					throw new IncompleteArgumentException("Undefined refine fields. Refine request");
80
				}
81
				
82
				formattedSearchResult = searchService.refine(query, rTransformer, format, locale, fields);
83
			
84
			} else if(action.equals("searchNrefine")) {								
85

    
86
				if(sTransformer == null) {
87
					throw new IncompleteArgumentException("Undefined search transformer. Search and Refine request");
88
				}
89
				
90
				if(rTransformer == null) {
91
					throw new IncompleteArgumentException("Undefined refine transformer. Search and Refine request");
92
				}
93
				
94
				if(fields == null) {
95
					throw new IncompleteArgumentException("Undefined refine fields. Search and Refine request");
96
				}
97
								
98
				formattedSearchResult = searchService.searchNrefine(query, sTransformer, rTransformer, format, locale, page, size, fields);
99
				
100
			} else {
101
				throw new UnsupportedOperationException("The action " + action + " is not supported.");
102
			}
103
			
104
			writer.append(formattedSearchResult.getFormattedResult());	
105
			
106
		} catch (Exception e) {			
107
			writer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
108
			writer.append("<error>");
109
			writer.append("<exception>").append(StringEscapeUtils.escapeXml(e.getClass().getName())).append("</exception>");
110
			if (e.getMessage() != null) {
111
				writer.append("<message>").append(StringEscapeUtils.escapeXml(e.getMessage())).append("</message>");
112
			}
113
			if (e.getCause() != null) {
114
				writer.append("<cause>").append(StringEscapeUtils.escapeXml(e.getCause().toString())).append("</cause>");
115
			}
116
			
117
			StackTraceElement[] trace = e.getStackTrace();
118
			writer.append("<trace>");
119
			for (int i = 0; i < trace.length; i++) {
120
				writer.append(StringEscapeUtils.escapeXml(trace[i].toString())).append("\n");
121
			}
122
			writer.append("</trace>");
123
			
124
			writer.append("</error>");
125
			
126
		} finally {
127
			writer.close();
128
		}
129
	}
130

    
131
	private Collection<String> readParameter(HttpServletRequest request, String parameterName) {
132
		Collection<String> fields = null;
133
		String[] paramfields = request.getParameterValues(parameterName);
134
		if (paramfields != null) {
135
			fields = new ArrayList<String>(); 
136
			for (int i=0; i<paramfields.length; i++)
137
				fields.add(paramfields[i]);
138
		}
139
		return fields;
140
	}
141
	
142
	public int readParameter(HttpServletRequest request, String parameterName, int defaultValue) {
143
		String param = request.getParameter(parameterName);
144
		return (param != null)?Integer.parseInt(param):defaultValue;
145
	}
146
}
    (1-1/1)