--- LuceneQueryFactory.java 2018-12-18 17:31:10.096232600 +0100 +++ d:\download\java\jackrabbit\2.10.0\jackrabbit-core\src\main\java\org\apache\jackrabbit\core\query\lucene\LuceneQueryFactory.java 2015-04-03 11:55:37.796500400 +0200 @@ -49,7 +49,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -147,13 +146,6 @@ private final PerQueryCache cache = new PerQueryCache(); - - /** - * The excerpt provider or null if none was created yet. - */ - private Map excerptProviders = new HashMap(); - - /** * Creates a new lucene query factory. * @@ -232,7 +224,7 @@ while (node != null) { Row row = null; try { - row = new SelectorRow(session.getValueFactory(), getExcerptProvider(selector.getSelectorName(), qp.mainQuery), columns, evaluator, + row = new SelectorRow(columns, evaluator, selector.getSelectorName(), session.getNodeById(node.getNodeId()), node.getScore()); @@ -268,26 +260,6 @@ } } - - - ExcerptProvider getExcerptProvider(String selectorName, Query query) { - - ExcerptProvider excerptProvider; - if ((excerptProvider=excerptProviders.get(selectorName)) == null) { - try { - excerptProvider = index.createExcerptProvider(query); - excerptProviders.put(selectorName, excerptProvider); - } catch (IOException e) { - } - } - return excerptProvider; - - } - - - - - /** * Creates a lucene query for the given QOM selector. * --- join\AbstractRow.java 2018-12-18 11:52:00.948549500 +0100 +++ d:\download\java\jackrabbit\2.10.0\jackrabbit-core\src\main\java\org\apache\jackrabbit\core\query\lucene\join\AbstractRow.java 2015-04-03 11:55:39.512522400 +0200 @@ -16,39 +16,26 @@ */ package org.apache.jackrabbit.core.query.lucene.join; -import java.io.IOException; import java.util.Map; import javax.jcr.ItemNotFoundException; import javax.jcr.Node; -import javax.jcr.PathNotFoundException; -import javax.jcr.Property; import javax.jcr.RepositoryException; import javax.jcr.Value; -import javax.jcr.ValueFactory; import javax.jcr.query.Row; import javax.jcr.query.qom.Operand; import javax.jcr.query.qom.PropertyValue; import org.apache.jackrabbit.commons.query.qom.OperandEvaluator; -import org.apache.jackrabbit.core.id.NodeId; -import org.apache.jackrabbit.core.query.lucene.ExcerptProvider; -import org.apache.jackrabbit.core.query.lucene.HighlightingExcerptProvider; -import org.apache.jackrabbit.util.ISO9075; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; abstract class AbstractRow implements Row { - private static Logger log = LoggerFactory.getLogger(AbstractRow.class); - - private static final String EXCERPT_PREFIX = "rep:excerpt("; - private final Map columns; private final OperandEvaluator evaluator; - protected AbstractRow(Map columns, OperandEvaluator evaluator) { + protected AbstractRow( + Map columns, OperandEvaluator evaluator) { this.columns = columns; this.evaluator = evaluator; } @@ -62,149 +49,17 @@ return values; } - public Value getValue(String columnName) throws ItemNotFoundException, RepositoryException { + public Value getValue(String columnName) + throws ItemNotFoundException, RepositoryException { Operand operand = columns.get(columnName); if (operand != null) { return evaluator.getValue(operand, this); } else { - if (isExcerptFunction(columnName)) { - // excerpt function with parameter - return getExcerpt(columnName); - } else { - throw new ItemNotFoundException("Column " + columnName + " is not included in this row"); - } - } - } - - /** - * @param name - * a String. - * @return true if name is the rep:excerpt function, false otherwise. - */ - private boolean isExcerptFunction(String name) { - return name.startsWith(EXCERPT_PREFIX); - } - - /** - * Returns an excerpt for the node indicated by the relative path parameter of the rep:excerpt function. The relative path is resolved against the node - * associated with this row. - * - * @param excerptCall - * the rep:excerpt function with the parameter as string. - * @return a StringValue or null if the excerpt cannot be created or an error occurs. - * @throws RepositoryException - * if the function call is not well-formed. - */ - private Value getExcerpt(String excerptCall) throws RepositoryException { - int idx = excerptCall.indexOf(EXCERPT_PREFIX); - int end = excerptCall.lastIndexOf(')'); - if (end == -1) { - throw new RepositoryException("Missing right parenthesis"); - } - String pathStr = excerptCall.substring(idx + EXCERPT_PREFIX.length(), end).trim(); - String decodedPath = ISO9075.decode(pathStr); - - // get node of selector - Node n = null; - try { - n = getNode(decodedPath); - } catch (RepositoryException e) { - // bad selector name - } - if (n != null) { - NodeId id = new NodeId(n.getIdentifier()); - return createExcerpt(decodedPath, id); - } else { - // does not exist or references a property - try { - String sel; - String name; - idx = decodedPath.indexOf('.'); - if (idx >= 0) { - sel = decodedPath.substring(0, idx); - name = decodedPath.substring(idx + 1); - } else { - sel = null; - name = decodedPath; - } - if (sel == null) - return null; - - n = getNode(sel); - Property p = n.getProperty(name); - // JFM 20170505 : traitement des propriétés multivaluées - if (p.isMultiple()) { - StringBuilder text = new StringBuilder(); - Value[] values1 = p.getValues(); - for (Value value : values1) { - text.append(value.getString()); - text.append(' '); - } - return highlight(sel, text.toString()); - } else { - return highlight(sel, p.getValue().getString()); - } - } catch (PathNotFoundException e1) { - // does not exist - return null; - } - } - - } - - /** - * Creates an excerpt for node with the given id. - * - * @param id - * a node id. - * @return a StringValue or null if the excerpt cannot be created or an error occurs. - */ - private Value createExcerpt(String selector, NodeId id) { - try { - if (getExcerptProvider(selector) == null) { - return null; - } - long time = System.currentTimeMillis(); - String excerpt = getExcerptProvider(selector).getExcerpt(id, 3, 150); - time = System.currentTimeMillis() - time; - log.debug("Created excerpt in {} ms.", time); - if (excerpt != null) { - return getValueFactory(selector).createValue(excerpt); - } else { - return null; - } - } catch (IOException | RepositoryException e) { - return null; + throw new ItemNotFoundException( + "Column " + columnName + " is not included in this row"); } } - /** - * Highlights the matching terms in the passed text. - * - * @param text - * the text where to apply highlighting. - * @return a StringValue or null if highlighting fails. - */ - private Value highlight(String selector, String text) { - try { - if (!(getExcerptProvider(selector) instanceof HighlightingExcerptProvider)) { - return null; - } - HighlightingExcerptProvider hep = (HighlightingExcerptProvider) getExcerptProvider(selector); - long time = System.currentTimeMillis(); - text = hep.highlight(text); - time = System.currentTimeMillis() - time; - log.debug("Highlighted text in {} ms.", time); - return getValueFactory(selector).createValue(text); - } catch (IOException | RepositoryException e) { - return null; - } - } - - public abstract ExcerptProvider getExcerptProvider(String selector) throws RepositoryException; - - public abstract ValueFactory getValueFactory(String selector) throws RepositoryException; - public String getPath() throws RepositoryException { Node node = getNode(); if (node != null) { --- join\JoinRow.java 2018-12-18 11:50:48.481141000 +0100 +++ d:\download\java\jackrabbit\2.10.0\jackrabbit-core\src\main\java\org\apache\jackrabbit\core\query\lucene\join\JoinRow.java 2015-04-03 11:55:47.190821100 +0200 @@ -21,12 +21,10 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; -import javax.jcr.ValueFactory; import javax.jcr.query.Row; import javax.jcr.query.qom.PropertyValue; import org.apache.jackrabbit.commons.query.qom.OperandEvaluator; -import org.apache.jackrabbit.core.query.lucene.ExcerptProvider; public class JoinRow extends AbstractRow { @@ -119,24 +117,4 @@ return builder.toString(); } - @Override - public ExcerptProvider getExcerptProvider(String selectorName) throws RepositoryException { - Row row = getRow(selectorName); - if (row != null) { - return ((AbstractRow) row).getExcerptProvider(selectorName); - } else { - return null; - } - } - - @Override - public ValueFactory getValueFactory(String selectorName) throws RepositoryException { - Row row = getRow(selectorName); - if (row != null) { - return ((AbstractRow) row).getValueFactory(selectorName); - } else { - return null; - } - } - } --- join\SelectorRow.java 2018-12-18 11:46:28.472471100 +0100 +++ d:\download\java\jackrabbit\2.10.0\jackrabbit-core\src\main\java\org\apache\jackrabbit\core\query\lucene\join\SelectorRow.java 2015-04-03 11:55:39.717325200 +0200 @@ -20,11 +20,9 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; -import javax.jcr.ValueFactory; import javax.jcr.query.qom.PropertyValue; import org.apache.jackrabbit.commons.query.qom.OperandEvaluator; -import org.apache.jackrabbit.core.query.lucene.ExcerptProvider; /** * A row implementation for a query with just a single selector. @@ -36,22 +34,14 @@ private final Node node; private final double score; - - private final ExcerptProvider excerptProvider; - - private final ValueFactory valueFactory; - - public SelectorRow( - ValueFactory valueFactory, ExcerptProvider excerptProvider, Map columns, OperandEvaluator evaluator, + Map columns, OperandEvaluator evaluator, String selector, Node node, double score) { super(columns, evaluator); this.selector = selector; this.node = node; this.score = score; - this.valueFactory = valueFactory; - this.excerptProvider = excerptProvider; } public Node getNode() { @@ -85,15 +75,4 @@ return "{ " + selector + ": " + node + " }"; } - public ExcerptProvider getExcerptProvider(String selectorName) throws RepositoryException { - checkSelectorName(selectorName); - return excerptProvider; - } - - public ValueFactory getValueFactory(String selectorName) throws RepositoryException { - checkSelectorName(selectorName); - return valueFactory; - } - - }