<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>MtasRequestHandler.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">MTAS</a> > <a href="index.source.html" class="el_package">mtas.solr.handler</a> > <span class="el_source">MtasRequestHandler.java</span></div><h1>MtasRequestHandler.java</h1><pre class="source lang-java linenums">package mtas.solr.handler; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.solr.common.util.ContentStream; import org.apache.solr.handler.RequestHandlerBase; import org.apache.solr.request.SolrQueryRequest; import org.apache.solr.response.SolrQueryResponse; import org.noggit.JSONParser; import org.noggit.ObjectBuilder; import mtas.analysis.MtasTokenizer; import mtas.analysis.util.MtasFetchData; import mtas.analysis.util.MtasParserException; /** * The Class MtasRequestHandler. */ <span class="fc" id="L30">public class MtasRequestHandler extends RequestHandlerBase {</span> /** The log. */ <span class="fc" id="L33"> private static Log log = LogFactory.getLog(MtasRequestHandler.class);</span> /** The Constant ERROR. */ private static final String ERROR = "error"; /** The Constant ACTION_CONFIG_FILES. */ private static final String ACTION_CONFIG_FILES = "files"; /** The Constant ACTION_CONFIG_FILE. */ private static final String ACTION_CONFIG_FILE = "file"; /** The Constant ACTION_MAPPING. */ private static final String ACTION_MAPPING = "mapping"; /** The Constant PARAM_ACTION. */ private static final String PARAM_ACTION = "action"; /** The Constant PARAM_CONFIG_FILE. */ private static final String PARAM_CONFIG_FILE = "file"; /** The Constant PARAM_MAPPING_CONFIGURATION. */ private static final String PARAM_MAPPING_CONFIGURATION = "configuration"; /** The Constant PARAM_MAPPING_DOCUMENT. */ private static final String PARAM_MAPPING_DOCUMENT = "document"; /** The Constant PARAM_MAPPING_DOCUMENT_URL. */ private static final String PARAM_MAPPING_DOCUMENT_URL = "url"; /* * (non-Javadoc) * * @see * org.apache.solr.handler.RequestHandlerBase#handleRequestBody(org.apache. * solr.request.SolrQueryRequest, org.apache.solr.response.SolrQueryResponse) */ @Override public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws IOException { <span class="nc" id="L73"> String configDir = req.getCore().getResourceLoader().getConfigDir();</span> // generate list of files <span class="nc" id="L75"> if (req.getParams().get(PARAM_ACTION, "false")</span> <span class="nc bnc" id="L76" title="All 2 branches missed."> .equals(ACTION_CONFIG_FILES)) {</span> <span class="nc" id="L77"> rsp.add(ACTION_CONFIG_FILES, getFiles(configDir, null));</span> // get file <span class="nc" id="L79"> } else if (req.getParams().get(PARAM_ACTION, "false")</span> <span class="nc bnc" id="L80" title="All 2 branches missed."> .equals(ACTION_CONFIG_FILE)) {</span> <span class="nc" id="L81"> String file = req.getParams().get(PARAM_CONFIG_FILE, null);</span> <span class="nc bnc" id="L82" title="All 4 branches missed."> if (file != null && !file.contains("..")) {</span> InputStream is; try { <span class="nc" id="L85"> is = req.getCore().getResourceLoader().openResource(file);</span> <span class="nc" id="L86"> rsp.add(ACTION_CONFIG_FILE,</span> <span class="nc" id="L87"> IOUtils.toString(is, StandardCharsets.UTF_8));</span> <span class="nc" id="L88"> } catch (IOException e) {</span> <span class="nc" id="L89"> log.debug(e);</span> <span class="nc" id="L90"> rsp.add(ERROR, e.getMessage());</span> <span class="nc" id="L91"> }</span> } // test mapping <span class="nc" id="L94"> } else if (req.getParams().get(PARAM_ACTION, "false")</span> <span class="nc bnc" id="L95" title="All 2 branches missed."> .equals(ACTION_MAPPING)) {</span> <span class="nc" id="L96"> String configuration = null;</span> <span class="nc" id="L97"> String document = null;</span> <span class="nc" id="L98"> String documentUrl = null;</span> <span class="nc bnc" id="L99" title="All 2 branches missed."> if (req.getContentStreams() != null) {</span> <span class="nc" id="L100"> Iterator<ContentStream> it = req.getContentStreams().iterator();</span> <span class="nc bnc" id="L101" title="All 2 branches missed."> if (it.hasNext()) {</span> <span class="nc" id="L102"> ContentStream cs = it.next();</span> <span class="nc" id="L103"> Map<String, String> params = new HashMap<>();</span> <span class="nc" id="L104"> getParamsFromJSON(params, IOUtils.toString(cs.getReader()));</span> <span class="nc" id="L105"> configuration = params.get(PARAM_MAPPING_CONFIGURATION);</span> <span class="nc" id="L106"> document = params.get(PARAM_MAPPING_DOCUMENT);</span> <span class="nc" id="L107"> documentUrl = params.get(PARAM_MAPPING_DOCUMENT_URL);</span> } <span class="nc" id="L109"> } else {</span> <span class="nc" id="L110"> configuration = req.getParams().get(PARAM_MAPPING_CONFIGURATION);</span> <span class="nc" id="L111"> document = req.getParams().get(PARAM_MAPPING_DOCUMENT);</span> <span class="nc" id="L112"> documentUrl = req.getParams().get(PARAM_MAPPING_DOCUMENT_URL);</span> } <span class="nc bnc" id="L114" title="All 4 branches missed."> if (configuration != null && documentUrl != null) {</span> <span class="nc" id="L115"> InputStream stream = IOUtils.toInputStream(configuration,</span> StandardCharsets.UTF_8); <span class="nc" id="L117"> try (MtasTokenizer tokenizer = new MtasTokenizer(stream);) {</span> <span class="nc" id="L118"> MtasFetchData fetchData = new MtasFetchData(</span> new StringReader(documentUrl)); <span class="nc" id="L120"> rsp.add(ACTION_MAPPING,</span> <span class="nc" id="L121"> tokenizer.getList(fetchData.getUrl(null, null)));</span> <span class="nc" id="L122"> tokenizer.close();</span> <span class="nc bnc" id="L123" title="All 8 branches missed."> } catch (IOException | MtasParserException e) {</span> <span class="nc" id="L124"> log.debug(e);</span> <span class="nc" id="L125"> rsp.add(ERROR, e.getMessage());</span> } finally { <span class="nc" id="L127"> stream.close();</span> <span class="nc" id="L128"> }</span> <span class="nc bnc" id="L129" title="All 4 branches missed."> } else if (configuration != null && document != null) {</span> <span class="nc" id="L130"> InputStream stream = IOUtils.toInputStream(configuration,</span> StandardCharsets.UTF_8); <span class="nc" id="L132"> try (MtasTokenizer tokenizer = new MtasTokenizer(stream);) {</span> <span class="nc" id="L133"> rsp.add(ACTION_MAPPING,</span> <span class="nc" id="L134"> tokenizer.getList(new StringReader(document)));</span> <span class="nc" id="L135"> tokenizer.close();</span> <span class="nc bnc" id="L136" title="All 8 branches missed."> } catch (IOException e) {</span> <span class="nc" id="L137"> log.debug(e);</span> <span class="nc" id="L138"> rsp.add(ERROR, e.getMessage());</span> } finally { <span class="nc" id="L140"> stream.close();</span> <span class="nc" id="L141"> }</span> } } <span class="nc" id="L144"> }</span> /** * Gets the files. * * @param dir the dir * @param subDir the sub dir * @return the files */ private ArrayList<String> getFiles(String dir, String subDir) { <span class="nc" id="L154"> ArrayList<String> files = new ArrayList<>();</span> <span class="nc bnc" id="L155" title="All 2 branches missed."> String fullDir = subDir == null ? dir : dir + File.separator + subDir;</span> <span class="nc" id="L156"> File[] listOfFiles = (new File(fullDir)).listFiles();</span> <span class="nc bnc" id="L157" title="All 2 branches missed."> if (listOfFiles != null) {</span> <span class="nc bnc" id="L158" title="All 2 branches missed."> for (File file : listOfFiles) {</span> <span class="nc bnc" id="L159" title="All 2 branches missed."> String fullName = subDir == null ? file.getName()</span> <span class="nc" id="L160"> : subDir + File.separator + file.getName();</span> <span class="nc bnc" id="L161" title="All 2 branches missed."> if (file.isFile()) {</span> <span class="nc" id="L162"> files.add(fullName);</span> <span class="nc bnc" id="L163" title="All 2 branches missed."> } else if (file.isDirectory()) {</span> <span class="nc" id="L164"> files.addAll(getFiles(dir, fullName));</span> } } } <span class="nc" id="L168"> return files;</span> } /* * (non-Javadoc) * * @see org.apache.solr.handler.RequestHandlerBase#getDescription() */ @Override public String getDescription() { <span class="nc" id="L178"> return "Mtas Request Handler";</span> } /** * Gets the params from JSON. * * @param params the params * @param json the json * @return the params from JSON */ @SuppressWarnings("unchecked") private static void getParamsFromJSON(Map<String, String> params, String json) { <span class="nc" id="L191"> JSONParser parser = new JSONParser(json);</span> try { <span class="nc" id="L193"> Object o = ObjectBuilder.getVal(parser);</span> <span class="nc bnc" id="L194" title="All 2 branches missed."> if (!(o instanceof Map))</span> <span class="nc" id="L195"> return;</span> <span class="nc" id="L196"> Map<String, Object> map = (Map<String, Object>) o;</span> // To make consistent with json.param handling, we should make query // params come after json params (i.e. query params should // appear to overwrite json params. // Solr params are based on String though, so we need to convert <span class="nc bnc" id="L202" title="All 2 branches missed."> for (Map.Entry<String, Object> entry : map.entrySet()) {</span> <span class="nc" id="L203"> String key = entry.getKey();</span> <span class="nc" id="L204"> Object val = entry.getValue();</span> <span class="nc bnc" id="L205" title="All 2 branches missed."> if (params.get(key) != null) {</span> <span class="nc" id="L206"> continue;</span> } <span class="nc bnc" id="L209" title="All 2 branches missed."> if (val == null) {</span> <span class="nc" id="L210"> params.remove(key);</span> <span class="nc bnc" id="L211" title="All 2 branches missed."> } else if (val instanceof String) {</span> <span class="nc" id="L212"> params.put(key, (String) val);</span> } <span class="nc" id="L214"> }</span> <span class="nc" id="L215"> } catch (Exception e) {</span> <span class="nc" id="L216"> log.debug(</span> "ignore parse exceptions at this stage, they may be caused by incomplete macro expansions", e); <span class="nc" id="L219"> return;</span> <span class="nc" id="L220"> }</span> <span class="nc" id="L221"> }</span> } </pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.7.9.201702052155</span></div></body></html>