--- LuceneQueryFactory.java 2018-12-14 14:13:01.875691700 +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 @@ -146,13 +146,6 @@ private final PerQueryCache cache = new PerQueryCache(); - - /** - * The excerpt provider or null if none was created yet. - */ - private ExcerptProvider excerptProvider; - - /** * Creates a new lucene query factory. * @@ -231,7 +224,7 @@ while (node != null) { Row row = null; try { - row = new SelectorRow(session.getValueFactory(), getExcerptProvider(query), columns, evaluator, + row = new SelectorRow(columns, evaluator, selector.getSelectorName(), session.getNodeById(node.getNodeId()), node.getScore()); @@ -267,26 +260,6 @@ } } - - - ExcerptProvider getExcerptProvider(Query query) { - - if (excerptProvider == null) { - try { - excerptProvider = index.createExcerptProvider(query); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - return excerptProvider; - - } - - - - - /** * Creates a lucene query for the given QOM selector. * --- AbstractRow.java 2018-12-14 16:25:25.272152200 +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,49 +16,28 @@ */ 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; - private ExcerptProvider excerptProvider; - - - private ValueFactory valueFactory; - - protected AbstractRow(ValueFactory valueFactory, ExcerptProvider excerptProvider, Map columns, OperandEvaluator evaluator) { + protected AbstractRow( + Map columns, OperandEvaluator evaluator) { this.columns = columns; this.evaluator = evaluator; - this.excerptProvider = excerptProvider; - this.valueFactory = valueFactory; } public Value[] getValues() throws RepositoryException { @@ -70,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"); - } + 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(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; - } - - n = sel != null ? getNode(sel) : getNode(); - 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(text.toString()); - }else{ - return highlight(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(NodeId id) { - if (excerptProvider == null) { - return null; - } - try { - long time = System.currentTimeMillis(); - String excerpt = excerptProvider.getExcerpt(id, 3, 150); - time = System.currentTimeMillis() - time; - log.debug("Created excerpt in {} ms.", time); - if (excerpt != null) { - return valueFactory.createValue(excerpt); - } else { - return null; - } - } catch (IOException e) { - return null; - } - } - - /** - * 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 text) { - if (!(excerptProvider instanceof HighlightingExcerptProvider)) { - return null; - } - HighlightingExcerptProvider hep = - (HighlightingExcerptProvider) excerptProvider; - try { - long time = System.currentTimeMillis(); - text = hep.highlight(text); - time = System.currentTimeMillis() - time; - log.debug("Highlighted text in {} ms.", time); - return valueFactory.createValue(text); - } catch (IOException e) { - return null; - } - } - - - public String getPath() throws RepositoryException { Node node = getNode(); if (node != null) { --- ChildNodeJoinMerger.java 2018-12-14 11:32:16.648350000 +0100 +++ d:\download\java\jackrabbit\2.10.0\jackrabbit-core\src\main\java\org\apache\jackrabbit\core\query\lucene\join\ChildNodeJoinMerger.java 2015-04-03 11:55:46.629213900 +0200 @@ -26,7 +26,6 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; -import javax.jcr.ValueFactory; import javax.jcr.query.Row; import javax.jcr.query.qom.ChildNodeJoinCondition; import javax.jcr.query.qom.Constraint; @@ -35,7 +34,6 @@ import javax.jcr.query.qom.QueryObjectModelFactory; import org.apache.jackrabbit.commons.query.qom.OperandEvaluator; -import org.apache.jackrabbit.core.query.lucene.ExcerptProvider; class ChildNodeJoinMerger extends JoinMerger { @@ -43,12 +41,12 @@ private final String parentSelector; - public ChildNodeJoinMerger(ValueFactory valueFactory, ExcerptProvider excerptProvider, + public ChildNodeJoinMerger( Join join, Map columns, OperandEvaluator evaluator, QueryObjectModelFactory factory, ChildNodeJoinCondition condition) throws RepositoryException { - super(valueFactory, excerptProvider, join, columns, evaluator, factory); + super(join, columns, evaluator, factory); this.childSelector = condition.getChildSelectorName(); this.parentSelector = condition.getParentSelectorName(); } --- DescendantNodeJoinMerger.java 2018-12-14 11:33:02.039931500 +0100 +++ d:\download\java\jackrabbit\2.10.0\jackrabbit-core\src\main\java\org\apache\jackrabbit\core\query\lucene\join\DescendantNodeJoinMerger.java 2015-04-03 11:55:39.653924300 +0200 @@ -26,7 +26,6 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; -import javax.jcr.ValueFactory; import javax.jcr.query.Row; import javax.jcr.query.qom.Constraint; import javax.jcr.query.qom.DescendantNodeJoinCondition; @@ -35,7 +34,6 @@ import javax.jcr.query.qom.QueryObjectModelFactory; import org.apache.jackrabbit.commons.query.qom.OperandEvaluator; -import org.apache.jackrabbit.core.query.lucene.ExcerptProvider; class DescendantNodeJoinMerger extends JoinMerger { @@ -43,12 +41,12 @@ private final String ancestorSelector; - public DescendantNodeJoinMerger(ValueFactory valueFactory, ExcerptProvider excerptProvider, + public DescendantNodeJoinMerger( Join join, Map columns, OperandEvaluator evaluator, QueryObjectModelFactory factory, DescendantNodeJoinCondition condition) throws RepositoryException { - super(valueFactory, excerptProvider, join, columns, evaluator, factory); + super(join, columns, evaluator, factory); this.descendantSelector = condition.getDescendantSelectorName(); this.ancestorSelector = condition.getAncestorSelectorName(); } --- EquiJoinMerger.java 2018-12-14 11:28:57.172591700 +0100 +++ d:\download\java\jackrabbit\2.10.0\jackrabbit-core\src\main\java\org\apache\jackrabbit\core\query\lucene\join\EquiJoinMerger.java 2015-04-03 11:55:38.654511400 +0200 @@ -28,7 +28,6 @@ import javax.jcr.RepositoryException; import javax.jcr.Value; -import javax.jcr.ValueFactory; import javax.jcr.query.Row; import javax.jcr.query.qom.Constraint; import javax.jcr.query.qom.EquiJoinCondition; @@ -38,7 +37,6 @@ import javax.jcr.query.qom.QueryObjectModelFactory; import org.apache.jackrabbit.commons.query.qom.OperandEvaluator; -import org.apache.jackrabbit.core.query.lucene.ExcerptProvider; class EquiJoinMerger extends JoinMerger { @@ -46,11 +44,11 @@ private final PropertyValue rightProperty; - public EquiJoinMerger(ValueFactory valueFactory, ExcerptProvider excerptProvider, + public EquiJoinMerger( Join join, Map columns, OperandEvaluator evaluator, QueryObjectModelFactory factory, EquiJoinCondition condition) throws RepositoryException { - super(valueFactory, excerptProvider, join, columns, evaluator, factory); + super(join, columns, evaluator, factory); PropertyValue property1 = factory.propertyValue( condition.getSelector1Name(), condition.getProperty1Name()); --- JoinMerger.java 2018-12-14 11:30:23.977658100 +0100 +++ d:\download\java\jackrabbit\2.10.0\jackrabbit-core\src\main\java\org\apache\jackrabbit\core\query\lucene\join\JoinMerger.java 2015-04-03 11:55:39.701725000 +0200 @@ -31,7 +31,6 @@ import javax.jcr.RepositoryException; import javax.jcr.UnsupportedRepositoryOperationException; -import javax.jcr.ValueFactory; import javax.jcr.query.QueryResult; import javax.jcr.query.Row; import javax.jcr.query.RowIterator; @@ -50,7 +49,6 @@ import org.apache.jackrabbit.commons.iterator.RowIterable; import org.apache.jackrabbit.commons.iterator.RowIteratorAdapter; import org.apache.jackrabbit.commons.query.qom.OperandEvaluator; -import org.apache.jackrabbit.core.query.lucene.ExcerptProvider; /** * A join merger is used by the {@link QueryEngine} class to efficiently @@ -74,26 +72,26 @@ * @return join merger * @throws RepositoryException if the merger can not be created */ - public static JoinMerger getJoinMerger(ValueFactory valueFactory, ExcerptProvider excerptProvider, + public static JoinMerger getJoinMerger( Join join, Map columns, OperandEvaluator evaluator, QueryObjectModelFactory factory) throws RepositoryException { JoinCondition condition = join.getJoinCondition(); if (condition instanceof EquiJoinCondition) { return new EquiJoinMerger( - valueFactory, excerptProvider, join, columns, evaluator, factory, + join, columns, evaluator, factory, (EquiJoinCondition) condition); } else if (condition instanceof SameNodeJoinCondition) { return new SameNodeJoinMerger( - valueFactory, excerptProvider, join, columns, evaluator, factory, + join, columns, evaluator, factory, (SameNodeJoinCondition) condition); } else if (condition instanceof ChildNodeJoinCondition) { return new ChildNodeJoinMerger( - valueFactory, excerptProvider, join, columns, evaluator, factory, + join, columns, evaluator, factory, (ChildNodeJoinCondition) condition); } else if (condition instanceof DescendantNodeJoinCondition) { return new DescendantNodeJoinMerger( - valueFactory, excerptProvider, join, columns, evaluator, factory, + join, columns, evaluator, factory, (DescendantNodeJoinCondition) condition); } else { throw new UnsupportedRepositoryOperationException( @@ -117,11 +115,7 @@ protected final QueryObjectModelFactory factory; - protected final ValueFactory valueFactory; - - protected final ExcerptProvider excerptProvider; - - protected JoinMerger(ValueFactory valueFactory, ExcerptProvider excerptProvider, + protected JoinMerger( Join join, Map columns, OperandEvaluator evaluator, QueryObjectModelFactory factory) throws RepositoryException { @@ -142,8 +136,6 @@ this.evaluator = evaluator; this.factory = factory; - this.valueFactory = valueFactory; - this.excerptProvider = excerptProvider; } public String[] getColumnNames(){ @@ -312,10 +304,8 @@ * @return joined row */ private Row mergeRow(Row left, Row right) { - - return new JoinRow( - valueFactory, excerptProvider, columns, evaluator, + columns, evaluator, left, leftSelectors, right, rightSelectors); } --- JoinRow.java 2018-12-14 14:15:22.418356600 +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 { @@ -39,10 +37,10 @@ private final Set rightSelectors; public JoinRow( - ValueFactory valueFactory, ExcerptProvider excerptProvider, Map columns, OperandEvaluator evaluator, + Map columns, OperandEvaluator evaluator, Row leftRow, Set leftSelectors, Row rightRow, Set rightSelectors) { - super(valueFactory, excerptProvider, columns, evaluator); + super(columns, evaluator); this.leftRow = leftRow; this.leftSelectors = leftSelectors; this.rightRow = rightRow; --- SameNodeJoinMerger.java 2018-12-14 11:31:14.321662000 +0100 +++ d:\download\java\jackrabbit\2.10.0\jackrabbit-core\src\main\java\org\apache\jackrabbit\core\query\lucene\join\SameNodeJoinMerger.java 2015-04-03 11:55:46.598013500 +0200 @@ -27,7 +27,6 @@ import javax.jcr.Node; import javax.jcr.PathNotFoundException; import javax.jcr.RepositoryException; -import javax.jcr.ValueFactory; import javax.jcr.query.Row; import javax.jcr.query.qom.Constraint; import javax.jcr.query.qom.Join; @@ -36,7 +35,6 @@ import javax.jcr.query.qom.SameNodeJoinCondition; import org.apache.jackrabbit.commons.query.qom.OperandEvaluator; -import org.apache.jackrabbit.core.query.lucene.ExcerptProvider; class SameNodeJoinMerger extends JoinMerger { @@ -46,11 +44,11 @@ private final String path; - public SameNodeJoinMerger(ValueFactory valueFactory, ExcerptProvider excerptProvider, + public SameNodeJoinMerger( Join join, Map columns, OperandEvaluator evaluator, QueryObjectModelFactory factory, SameNodeJoinCondition condition) throws RepositoryException { - super(valueFactory, excerptProvider, join, columns, evaluator, factory); + super(join, columns, evaluator, factory); this.selector1 = condition.getSelector1Name(); this.selector2 = condition.getSelector2Name(); this.path = condition.getSelector2Path(); --- SelectorRow.java 2018-12-14 10:58:51.257676600 +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. @@ -38,9 +36,9 @@ private final double score; public SelectorRow( - ValueFactory valueFactory, ExcerptProvider excerptProvider, Map columns, OperandEvaluator evaluator, + Map columns, OperandEvaluator evaluator, String selector, Node node, double score) { - super(valueFactory, excerptProvider, columns, evaluator); + super(columns, evaluator); this.selector = selector; this.node = node; this.score = score;