diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/debug/OutputSearchChain.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/debug/OutputSearchChain.java | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/debug/OutputSearchChain.java b/container-search/src/main/java/com/yahoo/search/debug/OutputSearchChain.java new file mode 100644 index 00000000000..4413ea462c8 --- /dev/null +++ b/container-search/src/main/java/com/yahoo/search/debug/OutputSearchChain.java @@ -0,0 +1,59 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.search.debug; + +import static com.yahoo.protect.Validator.ensureNotNull; + +import com.yahoo.jrt.Request; +import com.yahoo.jrt.StringValue; +import com.yahoo.jrt.Value; +import com.yahoo.yolean.Exceptions; +import com.yahoo.search.handler.SearchHandler; +import com.yahoo.search.searchchain.SearchChain; +import com.yahoo.search.searchchain.SearchChainRegistry; + +/** + * Outputs a human readable representation of a given search chain. + * + * @author tonytv + */ +final class OutputSearchChain implements DebugMethodHandler { + private String getSearchChainName(Request request) { + final int numParameters = request.parameters().size(); + + if (numParameters == 0) + return SearchHandler.defaultSearchChainName; + else if (numParameters == 1) + return request.parameters().get(0).asString(); + else + throw new RuntimeException("Too many parameters given."); + } + + private SearchChain getSearchChain(SearchChainRegistry registry, String searchChainName) { + SearchChain searchChain = registry.getComponent(searchChainName); + ensureNotNull("There is no search chain named '" + searchChainName + "'", searchChain); + return searchChain; + } + + public JrtMethodSignature getSignature() { + String returnTypes = "" + (char)Value.STRING; + String parametersTypes = "*"; //optional string + return new JrtMethodSignature(returnTypes, parametersTypes); + } + + public void invoke(Request request) { + try { + SearchHandler searchHandler = SearcherUtils.getSearchHandler(); + SearchChainRegistry searchChainRegistry = searchHandler.getSearchChainRegistry(); + SearchChain searchChain = getSearchChain(searchChainRegistry, + getSearchChainName(request)); + + SearchChainTextRepresentation textRepresentation = new SearchChainTextRepresentation(searchChain, searchChainRegistry); + request.returnValues().add(new StringValue(textRepresentation.toString())); + } catch (Exception e) { + request.setError(1000, Exceptions.toMessageString(e)); + } + } + + +} + |