/** Generate external process results (if they have not already been generated). */ @Override public void prepare(ResponseBuilder rb) throws IOException { SolrParams params = rb.req.getParams(); if (!params.getBool(getName(), false)) { return; } XJoinResults<?> results = (XJoinResults<?>) rb.req.getContext().get(getResultsTag()); if (results != null) { return; } // generate external process results, by passing 'external' prefixed parameters // from the query string to our factory String prefix = getName() + "." + XJoinParameters.EXTERNAL_PREFIX + "."; ModifiableSolrParams externalParams = new ModifiableSolrParams(); for (Iterator<String> it = params.getParameterNamesIterator(); it.hasNext(); ) { String name = it.next(); if (name.startsWith(prefix)) { externalParams.set(name.substring(prefix.length()), params.get(name)); } } results = factory.getResults(externalParams); rb.req.getContext().put(getResultsTag(), results); }
/** * Initialise the component by instantiating our factory class, and initialising the join field. */ @Override @SuppressWarnings("rawtypes") public void init(NamedList args) { super.init(args); try { Class<?> factoryClass = Class.forName((String) args.get(XJoinParameters.INIT_RESULTS_FACTORY)); factory = (XJoinResultsFactory<?>) factoryClass.newInstance(); factory.init((NamedList) args.get(XJoinParameters.EXTERNAL_PREFIX)); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { throw new RuntimeException(e); } joinField = (String) args.get(XJoinParameters.INIT_JOIN_FIELD); }