You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2011/09/11 20:57:13 UTC
svn commit: r1169501 [1/2] - in /jackrabbit/branches/JCR-2936: ./
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/
jackrabbit-core/src/main/java/org/apache/jackra...
Author: jukka
Date: Sun Sep 11 18:57:11 2011
New Revision: 1169501
URL: http://svn.apache.org/viewvc?rev=1169501&view=rev
Log:
Merge recent changes from trunk to the JCR-2936 branch
Added:
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleDumper.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleDumper.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/
- copied from r1169494, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/AbstractFieldComparator.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/AbstractFieldComparator.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/DynamicOperandFieldComparator.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/DynamicOperandFieldComparator.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/DynamicOperandFieldComparatorSource.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/DynamicOperandFieldComparatorSource.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/RowComparator.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/RowComparator.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/ValueComparableWrapper.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/sort/ValueComparableWrapper.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2OffsetLimitTest.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2OffsetLimitTest.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2OrderByTest.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2OrderByTest.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/FilterIterator.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/FilterIterator.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/SizedIterator.java
- copied unchanged from r1169494, jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/iterator/SizedIterator.java
Modified:
jackrabbit/branches/JCR-2936/ (props changed)
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FieldComparatorBase.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitIndexSearcher.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SharedFieldComparatorSource.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SortedLuceneQueryHits.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/join/QueryEngine.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java
jackrabbit/branches/JCR-2936/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/pom.xml
jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/BTreeManager.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/FilterIterator.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/TreeTraverser.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntries.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProvider.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/ItemDefinitionProviderImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AbstractRemove.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/AddLabel.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveActivity.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/RemoveLabel.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/Update.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/operation/WorkspaceImport.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/WorkspaceItemStateFactory.java
jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImportHandler.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/ItemInfoBuilder.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/QItemDefinitionImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/QNodeTypeDefinitionImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/QPropertyDefinitionImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/ConsolidatingChangeLog.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/PathParser.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/NameFactoryImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/PathBuilder.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeDefDiff.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeDefinitionFactory.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ValueConstraint.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/OrderQueryNode.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryConstants.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryNode.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/RelationQueryNode.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java
jackrabbit/branches/JCR-2936/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/XPathQueryBuilder.java
jackrabbit/branches/JCR-2936/test/performance/base/src/main/java/org/apache/jackrabbit/performance/AbstractPerformanceTest.java
jackrabbit/branches/JCR-2936/test/performance/base/src/main/java/org/apache/jackrabbit/performance/AbstractTest.java
jackrabbit/branches/JCR-2936/test/performance/base/src/main/java/org/apache/jackrabbit/performance/BigFileReadTest.java
jackrabbit/branches/JCR-2936/test/performance/base/src/main/java/org/apache/jackrabbit/performance/BigFileWriteTest.java
jackrabbit/branches/JCR-2936/test/performance/jackrabbit23/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java
Propchange: jackrabbit/branches/JCR-2936/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Sep 11 18:57:11 2011
@@ -1 +1,2 @@
/jackrabbit/sandbox/JCR-2415-lucene-3.0:1060860-1064038
+/jackrabbit/trunk:1160161-1169494
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java Sun Sep 11 18:57:11 2011
@@ -47,6 +47,11 @@ import javax.jcr.PropertyType;
*/
class BundleReader {
+ /*
+ * Implementation note: if you change this class, also change BundleDumper
+ * accordingly.
+ */
+
/** Logger instance */
private static Logger log = LoggerFactory.getLogger(BundleReader.class);
@@ -578,7 +583,7 @@ class BundleReader {
TimeZone tz;
if ((ts & 1) == 0) {
tz = COMMON_TIMEZONES[0];
- ts >>= 1;
+ ts >>= 1;
} else if ((ts & 2) == 0) {
tz = COMMON_TIMEZONES[((int) ts >> 2) & 0x1f]; // 5 bits;
ts >>= 7;
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java Sun Sep 11 18:57:11 2011
@@ -134,6 +134,7 @@ public class QueryImpl extends AbstractQ
return "query.execute(" + statement + ")";
}
});
+
final QueryStat queryStat = sessionContext.getRepositoryContext()
.getStatManager().getQueryStat();
if (queryStat.isEnabled() || log.isDebugEnabled()) {
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FieldComparatorBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FieldComparatorBase.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FieldComparatorBase.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FieldComparatorBase.java Sun Sep 11 18:57:11 2011
@@ -25,7 +25,7 @@ import java.io.IOException;
* Abstract base class for <code>FieldComparator</code> implementations
* which are based on values in the form of <code>Comparables</code>.
*/
-abstract class FieldComparatorBase extends FieldComparator {
+abstract public class FieldComparatorBase extends FieldComparator {
/**
* The bottom value.
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitIndexSearcher.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitIndexSearcher.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitIndexSearcher.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitIndexSearcher.java Sun Sep 11 18:57:11 2011
@@ -106,8 +106,8 @@ public class JackrabbitIndexSearcher
if (sort.getSort().length == 0) {
hits = new LuceneQueryHits(reader, this, query);
} else {
- hits = new SortedLuceneQueryHits(
- reader, this, query, sort, resultFetchHint);
+ hits = new SortedLuceneQueryHits(this, query, sort,
+ resultFetchHint);
}
}
return hits;
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java Sun Sep 11 18:57:11 2011
@@ -107,6 +107,7 @@ import org.apache.lucene.queryParser.Que
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Sort;
/**
* Factory that creates Lucene queries from QOM elements.
@@ -166,10 +167,30 @@ public class LuceneQueryFactory {
this.primaryTypeField = nsMappings.translateName(JCR_PRIMARYTYPE);
}
- public List<Row> execute(
- Map<String, PropertyValue> columns, Selector selector,
- Constraint constraint) throws RepositoryException, IOException {
+ /**
+ * @param columns
+ * @param selector
+ * @param constraint
+ * @param externalSort
+ * if <code>true</code> it means that the lqf should just let the
+ * QueryEngine take care of sorting and applying applying offset
+ * and limit constraints
+ * @param offsetIn
+ * used in pagination
+ * @param limitIn
+ * used in pagination
+ * @return a list of rows
+ * @throws RepositoryException
+ * @throws IOException
+ */
+ public List<Row> execute(Map<String, PropertyValue> columns,
+ Selector selector, Constraint constraint, Sort sort,
+ boolean externalSort, long offsetIn, long limitIn)
+ throws RepositoryException, IOException {
final IndexReader reader = index.getIndexReader(true);
+ final int offset = offsetIn < 0 ? 0 : (int) offsetIn;
+ final int limit = limitIn < 0 ? Integer.MAX_VALUE : (int) limitIn;
+
QueryHits hits = null;
try {
JackrabbitIndexSearcher searcher = new JackrabbitIndexSearcher(
@@ -192,25 +213,47 @@ public class LuceneQueryFactory {
}
List<Row> rows = new ArrayList<Row>();
- hits = searcher.evaluate(qp.mainQuery);
+
+ // TODO depending on the filters, we could push the offset info
+ // into the searcher
+ hits = searcher.evaluate(qp.mainQuery, sort, offset + limit);
+ int currentNode = 0;
+ int addedNodes = 0;
+
ScoreNode node = hits.nextScoreNode();
while (node != null) {
+ Row row = null;
try {
- Row row = new SelectorRow(
- columns, evaluator, selector.getSelectorName(),
+ row = new SelectorRow(columns, evaluator,
+ selector.getSelectorName(),
session.getNodeById(node.getNodeId()),
node.getScore());
- if (filter.evaluate(row)) {
- rows.add(row);
- }
} catch (ItemNotFoundException e) {
// skip the node
}
+ if (row != null && filter.evaluate(row)) {
+ if (externalSort) {
+ // return everything and not worry about sort
+ rows.add(row);
+ } else {
+ // apply limit and offset rules locally
+ if (currentNode >= offset
+ && currentNode - offset < limit) {
+ rows.add(row);
+ addedNodes++;
+ }
+ currentNode++;
+ // end the loop when going over the limit
+ if (addedNodes == limit) {
+ break;
+ }
+ }
+ }
node = hits.nextScoreNode();
}
return rows;
} finally {
- if(hits != null){
+ if (hits != null) {
hits.close();
}
Util.closeOrRelease(reader);
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java Sun Sep 11 18:57:11 2011
@@ -532,6 +532,9 @@ public class SearchIndex extends Abstrac
indexingConfig = createIndexingConfiguration(nsMappings);
analyzer.setIndexingConfig(indexingConfig);
+ // initialize the Tika parser
+ parser = createParser();
+
index = new MultiIndex(this, excludedIDs);
if (index.numDocs() == 0) {
Path rootPath;
@@ -928,50 +931,51 @@ public class SearchIndex extends Abstrac
*
* @return the configured parser
*/
- public synchronized Parser getParser() {
- if (parser == null) {
- URL url = null;
- if (tikaConfigPath != null) {
- File file = new File(tikaConfigPath);
- if (file.exists()) {
- try {
- url = file.toURI().toURL();
- } catch (MalformedURLException e) {
- log.warn("Invalid Tika configuration path: " + file, e);
- }
- } else {
- ClassLoader loader = SearchIndex.class.getClassLoader();
- url = loader.getResource(tikaConfigPath);
- }
- }
- if (url == null) {
- url = SearchIndex.class.getResource("tika-config.xml");
- }
+ public Parser getParser() {
+ return parser;
+ }
- TikaConfig config = null;
- if (url != null) {
+ private Parser createParser() {
+ URL url = null;
+ if (tikaConfigPath != null) {
+ File file = new File(tikaConfigPath);
+ if (file.exists()) {
try {
- config = new TikaConfig(url);
- } catch (Exception e) {
- log.warn("Tika configuration not available: " + url, e);
+ url = file.toURI().toURL();
+ } catch (MalformedURLException e) {
+ log.warn("Invalid Tika configuration path: " + file, e);
}
+ } else {
+ ClassLoader loader = SearchIndex.class.getClassLoader();
+ url = loader.getResource(tikaConfigPath);
}
- if (config == null) {
- config = TikaConfig.getDefaultConfig();
- }
+ }
+ if (url == null) {
+ url = SearchIndex.class.getResource("tika-config.xml");
+ }
- if (forkJavaCommand == null) {
- parser = new AutoDetectParser(config);
- } else {
- ForkParser forkParser = new ForkParser(
- SearchIndex.class.getClassLoader(),
- new AutoDetectParser(config));
- forkParser.setJavaCommand(forkJavaCommand);
- forkParser.setPoolSize(extractorPoolSize);
- parser = forkParser;
+ TikaConfig config = null;
+ if (url != null) {
+ try {
+ config = new TikaConfig(url);
+ } catch (Exception e) {
+ log.warn("Tika configuration not available: " + url, e);
}
}
- return parser;
+ if (config == null) {
+ config = TikaConfig.getDefaultConfig();
+ }
+
+ if (forkJavaCommand != null) {
+ ForkParser forkParser = new ForkParser(
+ SearchIndex.class.getClassLoader(),
+ new AutoDetectParser(config));
+ forkParser.setJavaCommand(forkJavaCommand);
+ forkParser.setPoolSize(extractorPoolSize);
+ return forkParser;
+ } else {
+ return new AutoDetectParser(config);
+ }
}
/**
@@ -1179,7 +1183,7 @@ public class SearchIndex extends Abstrac
throws RepositoryException {
NodeIndexer indexer = new NodeIndexer(
node, getContext().getItemStateManager(), nsMappings,
- getContext().getExecutor(), getParser());
+ getContext().getExecutor(), parser);
indexer.setSupportHighlighting(supportHighlighting);
indexer.setIndexingConfiguration(indexingConfig);
indexer.setIndexFormatVersion(indexFormatVersion);
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SharedFieldComparatorSource.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SharedFieldComparatorSource.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SharedFieldComparatorSource.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SharedFieldComparatorSource.java Sun Sep 11 18:57:11 2011
@@ -20,6 +20,7 @@ package org.apache.jackrabbit.core.query
import org.apache.jackrabbit.core.HierarchyManager;
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.id.PropertyId;
+import org.apache.jackrabbit.core.query.lucene.sort.AbstractFieldComparator;
import org.apache.jackrabbit.core.state.ItemStateManager;
import org.apache.jackrabbit.core.state.PropertyState;
import org.apache.jackrabbit.core.value.InternalValue;
@@ -34,8 +35,6 @@ import org.apache.lucene.search.FieldCom
import org.apache.lucene.search.FieldComparatorSource;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
/**
* Implements a <code>FieldComparatorSource</code> for <code>FieldComparator</code>s which
@@ -110,122 +109,6 @@ public class SharedFieldComparatorSource
}
/**
- * Abstract base class for <code>FieldComparator</code>s which keep their values
- * (<code>Comparable</code>s) in an array.
- */
- private abstract static class AbstractFieldComparator extends FieldComparatorBase {
-
- /**
- * The values for comparing.
- */
- private final Comparable[] values;
-
- /**
- * The index readers.
- */
-
- protected final List<IndexReader> readers = new ArrayList<IndexReader>();
- /**
- * The document number starts for the {@link #readers}.
- */
- protected int[] starts;
-
- /**
- * Create a new instance with the given number of values.
- *
- * @param numHits the number of values
- */
- protected AbstractFieldComparator(int numHits) {
- values = new Comparable[numHits];
- }
-
- /**
- * Returns the reader index for document <code>n</code>.
- *
- * @param n document number.
- * @return the reader index.
- */
- protected final int readerIndex(int n) {
- int lo = 0;
- int hi = readers.size() - 1;
-
- while (hi >= lo) {
- int mid = (lo + hi) >> 1;
- int midValue = starts[mid];
- if (n < midValue) {
- hi = mid - 1;
- }
- else if (n > midValue) {
- lo = mid + 1;
- }
- else {
- while (mid + 1 < readers.size() && starts[mid + 1] == midValue) {
- mid++;
- }
- return mid;
- }
- }
- return hi;
- }
-
- /**
- * Add the given value to the values array
- *
- * @param slot index into values
- * @param value value for adding
- */
- @Override
- public void setValue(int slot, Comparable value) {
- values[slot] = value;
- }
-
- /**
- * Return a value from the values array
- *
- * @param slot index to retrieve
- * @return the retrieved value
- */
- @Override
- public Comparable getValue(int slot) {
- return values[slot];
- }
-
- @Override
- public void setNextReader(IndexReader reader, int docBase) throws IOException {
- getIndexReaders(readers, reader);
-
- int maxDoc = 0;
- starts = new int[readers.size() + 1];
-
- for (int i = 0; i < readers.size(); i++) {
- IndexReader r = readers.get(i);
- starts[i] = maxDoc;
- maxDoc += r.maxDoc();
- }
- starts[readers.size()] = maxDoc;
- }
-
- /**
- * Checks if <code>reader</code> is of type {@link MultiIndexReader} and if
- * so calls itself recursively for each reader within the
- * <code>MultiIndexReader</code> or otherwise adds the reader to the list.
- *
- * @param readers list of index readers.
- * @param reader reader to decompose
- */
- private static void getIndexReaders(List<IndexReader> readers, IndexReader reader) {
- if (reader instanceof MultiIndexReader) {
- for (IndexReader r : ((MultiIndexReader) reader).getIndexReaders()) {
- getIndexReaders(readers, r);
- }
- }
- else {
- readers.add(reader);
- }
- }
- }
-
- /**
* A <code>FieldComparator</code> which works for order by clauses with properties
* directly on the result nodes.
*/
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SortedLuceneQueryHits.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SortedLuceneQueryHits.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SortedLuceneQueryHits.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SortedLuceneQueryHits.java Sun Sep 11 18:57:11 2011
@@ -16,8 +16,10 @@
*/
package org.apache.jackrabbit.core.query.lucene;
+import java.io.IOException;
+
import org.apache.jackrabbit.core.id.NodeId;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
@@ -25,11 +27,6 @@ import org.apache.lucene.search.TopField
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
/**
* Wraps a lucene query result and adds a close method that allows to release
* resources after a query has been executed and the results have been read
@@ -53,14 +50,9 @@ public final class SortedLuceneQueryHits
private static final int MIN_FETCH_SIZE = 32;
/**
- * The IndexReader in use by the lucene hits.
- */
- private final IndexReader reader;
-
- /**
* The index searcher.
*/
- private final JackrabbitIndexSearcher searcher;
+ private final IndexSearcher searcher;
/**
* The query to execute.
@@ -80,7 +72,7 @@ public final class SortedLuceneQueryHits
/**
* The score docs.
*/
- private final List<ScoreDoc> scoreDocs = new ArrayList<ScoreDoc>();
+ private ScoreDoc[] scoreDocs = new ScoreDoc[0];
/**
* The total number of hits.
@@ -88,26 +80,30 @@ public final class SortedLuceneQueryHits
private int size;
/**
- * Number of hits to retrieve.
+ * Number of hits to be pre-fetched from the lucene index (will be around 2x
+ * resultFetchHint).
*/
private int numHits;
+ private int offset = 0;
+
/**
* Creates a new <code>QueryHits</code> instance wrapping <code>hits</code>.
- *
- * @param reader the IndexReader in use.
- * @param searcher the index searcher.
- * @param query the query to execute.
- * @param sort the sort criteria.
- * @param resultFetchHint a hint on how many results should be fetched.
- * @throws IOException if an error occurs while reading from the index.
- */
- public SortedLuceneQueryHits(IndexReader reader,
- JackrabbitIndexSearcher searcher,
- Query query,
- Sort sort,
- long resultFetchHint) throws IOException {
- this.reader = reader;
+ *
+ * @param searcher
+ * the index searcher.
+ * @param query
+ * the query to execute.
+ * @param sort
+ * the sort criteria.
+ * @param resultFetchHint
+ * a hint on how many results should be pre-fetched from the
+ * lucene index.
+ * @throws IOException
+ * if an error occurs while reading from the index.
+ */
+ public SortedLuceneQueryHits(IndexSearcher searcher, Query query,
+ Sort sort, long resultFetchHint) throws IOException {
this.searcher = searcher;
this.query = query;
this.sort = sort;
@@ -131,13 +127,13 @@ public final class SortedLuceneQueryHits
if (++hitIndex >= size) {
// no more score nodes
return null;
- } else if (hitIndex >= scoreDocs.size()) {
+ } else if (hitIndex - offset >= scoreDocs.length) {
// refill at least numHits or twice hitIndex
this.numHits = Math.max(this.numHits, hitIndex * 2);
getHits();
}
- ScoreDoc doc = scoreDocs.get(hitIndex);
- String uuid = reader.document(doc.doc,
+ ScoreDoc doc = scoreDocs[hitIndex - offset];
+ String uuid = searcher.doc(doc.doc,
FieldSelectors.UUID).get(FieldNames.UUID);
NodeId id = new NodeId(uuid);
return new ScoreNode(id, doc.score, doc.doc);
@@ -159,11 +155,10 @@ public final class SortedLuceneQueryHits
TopFieldCollector collector = TopFieldCollector.create(sort, numHits, false, true, false, false);
searcher.search(query, collector);
size = collector.getTotalHits();
- ScoreDoc[] docs = collector.topDocs().scoreDocs;
- scoreDocs.addAll(Arrays.asList(docs).subList(scoreDocs.size(), docs.length));
- log.debug("getHits() {}/{}", scoreDocs.size(), numHits);
+ offset += scoreDocs.length;
+ scoreDocs = collector.topDocs(offset, numHits).scoreDocs;
+ log.debug("getHits() {}/{}", scoreDocs.length, numHits);
// double hits for next round
numHits *= 2;
}
-
}
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/join/QueryEngine.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/join/QueryEngine.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/join/QueryEngine.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/join/QueryEngine.java Sun Sep 11 18:57:11 2011
@@ -18,13 +18,13 @@ package org.apache.jackrabbit.core.query
import static javax.jcr.query.qom.QueryObjectModelConstants.JCR_JOIN_TYPE_LEFT_OUTER;
import static javax.jcr.query.qom.QueryObjectModelConstants.JCR_JOIN_TYPE_RIGHT_OUTER;
-import static javax.jcr.query.qom.QueryObjectModelConstants.JCR_ORDER_DESCENDING;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -48,18 +48,23 @@ import javax.jcr.query.RowIterator;
import javax.jcr.query.qom.Column;
import javax.jcr.query.qom.Constraint;
import javax.jcr.query.qom.Join;
-import javax.jcr.query.qom.Operand;
import javax.jcr.query.qom.Ordering;
import javax.jcr.query.qom.PropertyValue;
+import javax.jcr.query.qom.QueryObjectModelConstants;
import javax.jcr.query.qom.QueryObjectModelFactory;
import javax.jcr.query.qom.Selector;
import javax.jcr.query.qom.Source;
import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.commons.iterator.RowIteratorAdapter;
import org.apache.jackrabbit.commons.query.qom.OperandEvaluator;
import org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory;
+import org.apache.jackrabbit.core.query.lucene.sort.DynamicOperandFieldComparatorSource;
+import org.apache.jackrabbit.core.query.lucene.sort.RowComparator;
+import org.apache.lucene.search.Sort;
+import org.apache.lucene.search.SortField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -70,58 +75,16 @@ public class QueryEngine {
*/
private static final Logger log = LoggerFactory
.getLogger(QueryEngine.class);
+
+ //TODO remove this when the implementation is stable
+ public static final String NATIVE_SORT_SYSTEM_PROPERTY = "useNativeSort";
- private static final int printIndentStep = 4;
-
- /**
- * Row comparator.
- */
- private static class RowComparator implements Comparator<Row> {
-
- private final ValueComparator comparator = new ValueComparator();
-
- private final Ordering[] orderings;
-
- private final OperandEvaluator evaluator;
-
- private RowComparator(Ordering[] orderings, OperandEvaluator evaluator) {
- this.orderings = orderings;
- this.evaluator = evaluator;
- }
-
- public int compare(Row a, Row b) {
- try {
- for (Ordering ordering : orderings) {
- Operand operand = ordering.getOperand();
- Value[] va = evaluator.getValues(operand, a);
- Value[] vb = evaluator.getValues(operand, b);
- int d = compare(va, vb);
- if (d != 0) {
- if (JCR_ORDER_DESCENDING.equals(ordering.getOrder())) {
- return -d;
- } else {
- return d;
- }
- }
- }
- return 0;
- } catch (RepositoryException e) {
- throw new RuntimeException("Unable to compare rows " + a
- + " and " + b, e);
- }
- }
-
- private int compare(Value[] a, Value[] b) {
- for (int i = 0; i < a.length && i < b.length; i++) {
- int d = comparator.compare(a[i], b[i]);
- if (d != 0) {
- return d;
- }
- }
- return a.length - b.length;
- }
+ private static final boolean NATIVE_SORT = Boolean.valueOf(System
+ .getProperty(NATIVE_SORT_SYSTEM_PROPERTY, "false"));
- }
+ private static final int printIndentStep = 4;
+
+ private final Session session;
private final LuceneQueryFactory lqf;
@@ -135,8 +98,8 @@ public class QueryEngine {
public QueryEngine(Session session, LuceneQueryFactory lqf,
Map<String, Value> variables) throws RepositoryException {
+ this.session = session;
this.lqf = lqf;
-
Workspace workspace = session.getWorkspace();
this.ntManager = workspace.getNodeTypeManager();
this.qomFactory = workspace.getQueryManager().getQOMFactory();
@@ -151,8 +114,8 @@ public class QueryEngine {
long time = System.currentTimeMillis();
QueryResult qr = execute(columns, source, constraint, orderings,
offset, limit, 2);
- log.debug("SQL2 QUERY execute took {} ms.", System.currentTimeMillis()
- - time);
+ log.debug("SQL2 QUERY execute took {} ms. native sort is {}.",
+ System.currentTimeMillis() - time, NATIVE_SORT);
return qr;
}
@@ -251,7 +214,7 @@ public class QueryEngine {
return new SimpleQueryResult(merger.getColumnNames(),
merger.getSelectorNames(), new RowIteratorAdapter(allRows));
}
-
+
Set<Row> leftRows = buildLeftRowsJoin(csInfo, leftCo, printIndentation
+ printIndentStep);
if (log.isDebugEnabled()) {
@@ -483,23 +446,79 @@ public class QueryEngine {
String[] columnNames = columnMap.keySet().toArray(
new String[columnMap.size()]);
+ Sort sort = new Sort();
+ if (NATIVE_SORT) {
+ sort = new Sort(createSortFields(orderings, session));
+ }
+
+ // if true it means that the LuceneQueryFactory should just let the
+ // QueryEngine take care of sorting and applying offset and limit
+ // constraints
+ boolean externalSort = !NATIVE_SORT;
+ RowIterator rows = null;
try {
- RowIterator rows = new RowIteratorAdapter(lqf.execute(columnMap,
- selector, constraint));
- QueryResult result = new SimpleQueryResult(columnNames,
- selectorNames, rows);
- return sort(result, orderings, evaluator, offset, limit);
+ rows = new RowIteratorAdapter(lqf.execute(columnMap, selector,
+ constraint, sort, externalSort, offset, limit));
} catch (IOException e) {
throw new RepositoryException("Failed to access the query index", e);
} finally {
- if (log.isDebugEnabled()) {
- time = System.currentTimeMillis() - time;
- log.debug(genString(printIndentation) + "SQL2 SELECT took "
- + time + " ms. selector: " + selector + ", columns: "
- + Arrays.toString(columnNames) + ", constraint: "
- + constraint);
+ log.debug(
+ "{}SQL2 SELECT took {} ms. selector: {}, columns: {}, constraint: {}, offset {}, limit {}",
+ new Object[] { genString(printIndentation),
+ System.currentTimeMillis() - time, selector,
+ Arrays.toString(columnNames), constraint, offset,
+ limit });
+ }
+ QueryResult result = new SimpleQueryResult(columnNames, selectorNames,
+ rows);
+ if (NATIVE_SORT) {
+ return result;
+ }
+
+ long timeSort = System.currentTimeMillis();
+ QueryResult sorted = sort(result, orderings, evaluator, offset, limit);
+ log.debug("{}SQL2 SORT took {} ms.", genString(printIndentation),
+ System.currentTimeMillis() - timeSort);
+ return sorted;
+ }
+
+ public SortField[] createSortFields(Ordering[] orderings, Session session)
+ throws RepositoryException {
+
+ if (orderings == null || orderings.length == 0) {
+ return new SortField[] { SortField.FIELD_SCORE };
+ }
+ // orderings[] -> (property, ordering)
+ Map<String, Ordering> orderByProperties = new HashMap<String, Ordering>();
+ for (Ordering o : orderings) {
+ final String p = o.toString();
+ if (!orderByProperties.containsKey(p)) {
+ orderByProperties.put(p, o);
+ }
+ }
+ final DynamicOperandFieldComparatorSource dofcs = new DynamicOperandFieldComparatorSource(
+ session, evaluator, orderByProperties);
+
+ List<SortField> sortFields = new ArrayList<SortField>();
+
+ // as it turn out, orderByProperties.keySet() doesn't keep the original
+ // insertion order
+ for (Ordering o : orderings) {
+ final String p = o.toString();
+ // order on jcr:score does not use the natural order as
+ // implemented in lucene. score ascending in lucene means that
+ // higher scores are first. JCR specs that lower score values
+ // are first.
+ boolean isAsc = QueryObjectModelConstants.JCR_ORDER_ASCENDING
+ .equals(o.getOrder());
+ if (JcrConstants.JCR_SCORE.equals(p)) {
+ sortFields.add(new SortField(null, SortField.SCORE, !isAsc));
+ } else {
+ // TODO use native sort if available
+ sortFields.add(new SortField(p, dofcs, isAsc));
}
}
+ return sortFields.toArray(new SortField[sortFields.size()]);
}
private Map<String, PropertyValue> getColumnMap(Column[] columns,
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java Sun Sep 11 18:57:11 2011
@@ -385,9 +385,11 @@ public class FineGrainedISMLocking imple
}
for (int i = 0; i < slots.length; i++) {
Map<ItemId, Integer> locks = slots[i];
- for (ItemId id : locks.keySet()) {
- if (FineGrainedISMLocking.hasDependency(changes, id)) {
- return true;
+ synchronized (locks) {
+ for (ItemId id : locks.keySet()) {
+ if (FineGrainedISMLocking.hasDependency(changes, id)) {
+ return true;
+ }
}
}
}
Modified: jackrabbit/branches/JCR-2936/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java Sun Sep 11 18:57:11 2011
@@ -70,6 +70,8 @@ public class TestAll extends TestCase {
suite.addTestSuite(SQL2PathEscapingTest.class);
suite.addTestSuite(SQL2QueryResultTest.class);
suite.addTestSuite(LimitedAccessQueryTest.class);
+ suite.addTestSuite(SQL2OffsetLimitTest.class);
+ suite.addTestSuite(SQL2OrderByTest.class);
return suite;
}
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/pom.xml?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/pom.xml (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/pom.xml Sun Sep 11 18:57:11 2011
@@ -46,8 +46,13 @@
org.apache.jackrabbit.util.Base64
</Main-Class>
<Export-Package>
+ !org.apache.jackrabbit.api.*,
org.apache.jackrabbit.*;version=${project.version}
</Export-Package>
+ <Import-Package>
+ *,
+ org.apache.jackrabbit.api.security.user;version="[2.2,3)";resolution:=optional
+ </Import-Package>
</instructions>
</configuration>
</plugin>
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JcrUtils.java Sun Sep 11 18:57:11 2011
@@ -29,6 +29,7 @@ import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import java.util.StringTokenizer;
import javax.imageio.spi.ServiceRegistry;
import javax.jcr.Binary;
@@ -41,6 +42,7 @@ import javax.jcr.PropertyType;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.RepositoryFactory;
+import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
import javax.jcr.query.QueryResult;
@@ -864,4 +866,275 @@ public class JcrUtils {
}
}
+ /**
+ * Creates or gets the {@link javax.jcr.Node Node} at the given Path.
+ * In case it has to create the Node all non-existent intermediate path-elements
+ * will be created with the given NodeType.
+ *
+ * <p>
+ * Changes made are not saved by this method, so <code>session.save()</code>
+ * has to be called to persist them.
+ *
+ * @param absolutePath absolute path to create
+ * @param nodeType to use for creation of nodes If <code>null</code> the node type
+ * is determined by the child node definitions of the parent node.
+ * @param session to use
+ * @return the Node at path
+ * @throws RepositoryException in case of exception accessing the Repository
+ */
+ public static Node getOrCreateByPath(String absolutePath, String nodeType, Session session)
+ throws RepositoryException {
+ return getOrCreateByPath(absolutePath, false, nodeType, nodeType, session, false);
+ }
+
+ /**
+ * Creates or gets the {@link javax.jcr.Node Node} at the given Path.
+ * In case it has to create the Node all non-existent intermediate path-elements
+ * will be created with the given intermediate node type and the returned node
+ * will be created with the given nodeType.
+ *
+ * @param absolutePath absolute path to create
+ * @param intermediateNodeType to use for creation of intermediate nodes. If <code>null</code> the node type
+ * is determined by the child node definitions of the parent node.
+ * @param nodeType to use for creation of the final node. If <code>null</code> the node type
+ * is determined by the child node definitions of the parent node.
+ * @param session to use
+ * @param autoSave Should save be called when a new node is created?
+ * @return the Node at absolutePath
+ * @throws RepositoryException in case of exception accessing the Repository
+ */
+ public static Node getOrCreateByPath(String absolutePath,
+ String intermediateNodeType,
+ String nodeType,
+ Session session,
+ boolean autoSave)
+ throws RepositoryException {
+ return getOrCreateByPath(absolutePath, false, intermediateNodeType, nodeType, session, autoSave);
+ }
+
+ /**
+ * Creates a {@link javax.jcr.Node Node} at the given Path. In case it has
+ * to create the Node all non-existent intermediate path-elements will be
+ * created with the given intermediate node type and the returned node will
+ * be created with the given nodeType.
+ *
+ * <p>
+ * If the path points to an existing node, the leaf node name will be
+ * regarded as a name hint and a unique node name will be created by
+ * appending a number to the given name (eg. <code>/some/path/foobar2</code>).
+ * Please note that <b>the uniqueness check is not an atomic JCR operation</b>,
+ * so it is possible that you get a {@link RepositoryException} (path
+ * already exists) if another concurrent session created the same node in
+ * the meantime.
+ *
+ * <p>
+ * Changes made are not saved by this method, so <code>session.save()</code>
+ * has to be called to persist them.
+ *
+ * @param pathHint
+ * path to create
+ * @param nodeType
+ * to use for creation of nodes. . If <code>null</code> the node type
+ * is determined by the child node definitions of the parent node.
+ * @param session
+ * to use
+ * @return the newly created Node
+ * @throws RepositoryException
+ * in case of exception accessing the Repository
+ */
+ public static Node getOrCreateUniqueByPath(String pathHint, String nodeType, Session session)
+ throws RepositoryException {
+ return getOrCreateByPath(pathHint, true, nodeType, nodeType, session, false);
+ }
+
+ /**
+ * Creates or gets the {@link javax.jcr.Node Node} at the given Path. In
+ * case it has to create the Node all non-existent intermediate
+ * path-elements will be created with the given intermediate node type and
+ * the returned node will be created with the given nodeType.
+ *
+ * <p>
+ * If the parameter <code>createUniqueLeaf</code> is set, it will not get
+ * an existing node but rather try to create a unique node by appending a
+ * number to the last path element (leaf node). Please note that <b>the
+ * uniqueness check is not an atomic JCR operation</b>, so it is possible
+ * that you get a {@link RepositoryException} (path already exists) if
+ * another concurrent session created the same node in the meantime.
+ *
+ * @param absolutePath
+ * absolute path to create
+ * @param createUniqueLeaf
+ * whether the leaf of the path should be regarded as a name hint
+ * and a unique node name should be created by appending a number
+ * to the given name (eg. <code>/some/path/foobar2</code>)
+ * @param intermediateNodeType
+ * to use for creation of intermediate nodes. If <code>null</code> the node type
+ * is determined by the child node definitions of the parent node.
+ * @param nodeType
+ * to use for creation of the final node. If <code>null</code> the node type
+ * is determined by the child node definitions of the parent node.
+ * @param session
+ * to use
+ * @param autoSave
+ * Should save be called when a new node is created?
+ * @return the Node at absolutePath
+ * @throws RepositoryException
+ * in case of exception accessing the Repository
+ */
+ public static Node getOrCreateByPath(String absolutePath,
+ boolean createUniqueLeaf,
+ String intermediateNodeType,
+ String nodeType,
+ Session session,
+ boolean autoSave)
+ throws RepositoryException {
+ if (absolutePath == null || absolutePath.length() == 0 || "/".equals(absolutePath)) {
+ // path denotes root node
+ return session.getRootNode();
+ }
+ // create path relative to the root node
+ return getOrCreateByPath(session.getRootNode(), absolutePath.substring(1),
+ createUniqueLeaf, intermediateNodeType, nodeType, autoSave);
+ }
+
+ /**
+ * Creates or gets the {@link javax.jcr.Node Node} at the given Path. In
+ * case it has to create the Node all non-existent intermediate
+ * path-elements will be created with the given intermediate node type and
+ * the returned node will be created with the given nodeType.
+ *
+ * <p>
+ * If the node name points to an existing node, the node name will be
+ * regarded as a name hint and a unique node name will be created by
+ * appending a number to the given name (eg. <code>/some/path/foobar2</code>).
+ * Please note that <b>the uniqueness check is not an atomic JCR operation</b>,
+ * so it is possible that you get a {@link RepositoryException} (path
+ * already exists) if another concurrent session created the same node in
+ * the meantime.
+ *
+ * <p>
+ * Changes made are not saved by this method, so <code>session.save()</code>
+ * has to be called to persist them.
+ *
+ * @param parent
+ * existing parent node for the new node
+ * @param nodeNameHint
+ * name hint for the new node
+ * @param nodeType
+ * to use for creation of the node. If <code>null</code> the node type
+ * is determined by the child node definitions of the parent node.
+ * @return the newly created Node
+ * @throws RepositoryException
+ * in case of exception accessing the Repository
+ */
+ public static Node getOrCreateUniqueByPath(Node parent,
+ String nodeNameHint,
+ String nodeType)
+ throws RepositoryException {
+ return getOrCreateByPath(parent, nodeNameHint, true, nodeType, nodeType, false);
+ }
+
+ /**
+ * Creates or gets the {@link javax.jcr.Node Node} at the given path
+ * relative to the baseNode. In case it has to create the Node all
+ * non-existent intermediate path-elements will be created with the given
+ * intermediate node type and the returned node will be created with the
+ * given nodeType.
+ *
+ * <p>
+ * If the parameter <code>createUniqueLeaf</code> is set, it will not get
+ * an existing node but rather try to create a unique node by appending a
+ * number to the last path element (leaf node). Please note that <b>the
+ * uniqueness check is not an atomic JCR operation</b>, so it is possible
+ * that you get a {@link RepositoryException} (path already exists) if
+ * another concurrent session created the same node in the meantime.
+ *
+ * @param baseNode
+ * existing node that should be the base for the relative path
+ * @param path
+ * relative path to create
+ * @param createUniqueLeaf
+ * whether the leaf of the path should be regarded as a name hint
+ * and a unique node name should be created by appending a number
+ * to the given name (eg. <code>/some/path/foobar2</code>)
+ * @param intermediateNodeType
+ * to use for creation of intermediate nodes. If <code>null</code> the node type
+ * is determined by the child node definitions of the parent node.
+ * @param nodeType
+ * to use for creation of the final node. If <code>null</code> the node type
+ * is determined by the child node definitions of the parent node.
+ * @param autoSave
+ * Should save be called when a new node is created?
+ * @return the Node at path
+ * @throws RepositoryException
+ * in case of exception accessing the Repository
+ */
+ public static Node getOrCreateByPath(Node baseNode,
+ String path,
+ boolean createUniqueLeaf,
+ String intermediateNodeType,
+ String nodeType,
+ boolean autoSave)
+ throws RepositoryException {
+
+ if (!createUniqueLeaf && baseNode.hasNode(path)) {
+ // node at path already exists, quicker way
+ return baseNode.getNode(path);
+ }
+
+ Node node = baseNode;
+ int pos = path.lastIndexOf('/');
+
+ // intermediate path elements
+ if (pos != -1) {
+ final StringTokenizer st = new StringTokenizer(path.substring(0, pos), "/");
+ while (st.hasMoreTokens()) {
+ final String token = st.nextToken();
+ if (!node.hasNode(token)) {
+ try {
+ if ( intermediateNodeType != null ) {
+ node.addNode(token, intermediateNodeType);
+ } else {
+ node.addNode(token);
+ }
+ if (autoSave) node.getSession().save();
+ } catch (RepositoryException e) {
+ // we ignore this as this folder might be created from a different task
+ node.refresh(false);
+ }
+ }
+ node = node.getNode(token);
+ }
+ path = path.substring(pos + 1);
+ }
+
+ // last path element (path = leaf node name)
+ if (!node.hasNode(path)) {
+ if ( nodeType != null ) {
+ node.addNode(path, nodeType);
+ } else {
+ node.addNode(path);
+ }
+ if (autoSave) node.getSession().save();
+ } else if (createUniqueLeaf) {
+ // leaf node already exists, create new unique name
+ String leafNodeName;
+ int i = 0;
+ do {
+ leafNodeName = path + String.valueOf(i);
+ i++;
+ } while (node.hasNode(leafNodeName));
+
+ Node leaf;
+ if ( nodeType != null ) {
+ leaf = node.addNode(leafNodeName, nodeType);
+ } else {
+ leaf = node.addNode(leafNodeName);
+ }
+ if (autoSave) node.getSession().save();
+ return leaf;
+ }
+
+ return node.getNode(path);
+ }
}
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/BTreeManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/BTreeManager.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/BTreeManager.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/BTreeManager.java Sun Sep 11 18:57:11 2011
@@ -17,6 +17,8 @@
package org.apache.jackrabbit.commons.flat;
import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.commons.iterator.FilterIterator;
+import org.apache.jackrabbit.commons.iterator.SizedIterator;
import org.apache.jackrabbit.commons.predicate.Predicate;
import javax.jcr.Item;
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/FilterIterator.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/FilterIterator.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/FilterIterator.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/FilterIterator.java Sun Sep 11 18:57:11 2011
@@ -24,53 +24,18 @@ import java.util.NoSuchElementException;
/**
* Iterator filtering out items which do not match a given predicate.
* @param <T>
+ * @deprecated use {@link org.apache.jackrabbit.commons.iterator.FilterIterator}
*/
-public class FilterIterator<T> implements Iterator<T> {
- private final Iterator<T> iterator;
- private final Predicate predicate;
-
- private T next = null;
+public class FilterIterator<T> extends org.apache.jackrabbit.commons.iterator.FilterIterator<T> {
/**
* Create a new filtered iterator based on the given <code>iterator</code>.
*
* @param iterator iterator to filter
- * @param predicate only item matching this predicate are included
- */
- public FilterIterator(Iterator<T> iterator, Predicate predicate) {
- super();
- this.iterator = iterator;
- this.predicate = predicate;
- }
-
- public boolean hasNext() {
- while (next == null && iterator.hasNext()) {
- T e = iterator.next();
- if (predicate.evaluate(e)) {
- next = e;
- }
- }
-
- return next != null;
- }
-
- public T next() {
- if (hasNext()) {
- T e = next;
- next = null;
- return e;
- }
- else {
- throw new NoSuchElementException();
- }
- }
-
- /**
- * @throws UnsupportedOperationException always
- * @see java.util.Iterator#remove()
+ * @param predicate only item matching this predicate are included
*/
- public void remove() {
- throw new UnsupportedOperationException();
+ public FilterIterator(Iterator<T> tIterator, Predicate predicate) {
+ super(tIterator, predicate);
}
}
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java Sun Sep 11 18:57:11 2011
@@ -19,17 +19,11 @@ package org.apache.jackrabbit.commons.fl
import java.util.Iterator;
/**
- * <code>SizedIterator</code> extends {@link Iterator} with a
+ * <code>SizedIterator</code> extends {@link java.util.Iterator} with a
* <code>getSize</code> method.
*
* @param <T> the type of elements of this iterator
+ * @deprecated use {@link org.apache.jackrabbit.commons.iterator.SizedIterator}
*/
-public interface SizedIterator<T> extends Iterator<T> {
-
- /**
- * The number of elements of this iterator or -1 if not known.
- *
- * @return number of elements.
- */
- long getSize();
+public interface SizedIterator<T> extends org.apache.jackrabbit.commons.iterator.SizedIterator<T> {
}
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/TreeTraverser.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/TreeTraverser.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/TreeTraverser.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/TreeTraverser.java Sun Sep 11 18:57:11 2011
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.commons.fl
import static org.apache.jackrabbit.commons.iterator.LazyIteratorChain.chain;
+import org.apache.jackrabbit.commons.iterator.FilterIterator;
import org.apache.jackrabbit.commons.predicate.Predicate;
import javax.jcr.Item;
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemImpl.java Sun Sep 11 18:57:11 2011
@@ -322,7 +322,7 @@ public abstract class ItemImpl implement
/**
* Nothing to do for
* - Status#EXISTING : modifications reverted or saved
- * inform listeneres about an update (status was MODIFIED before)
+ * inform listeners about an update (status was MODIFIED before)
* or a simple refresh without modification (status was INVALIDATED).
*/
case Status.EXISTING:
@@ -335,7 +335,7 @@ public abstract class ItemImpl implement
* - Status#EXISTING_MODIFIED : transient modification
* - Status#STALE_MODIFIED : external modifications while transient changes pending
* - Status#STALE_DESTROYED : external modifications while transient changes pending
- * - Status#MODIFIED : externaly modified -> marker for sessionISM states only
+ * - Status#MODIFIED : externally modified -> marker for sessionISM states only
* - Status#EXISTING_REMOVED : transient removal
*/
case Status.EXISTING_MODIFIED:
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManager.java Sun Sep 11 18:57:11 2011
@@ -34,7 +34,7 @@ import javax.jcr.Property;
* instance. It is the factory for <code>Node</code> and <code>Property</code>
* instances.
* <p/>
- * The <code>ItemManager</code>'s responsabilities are:
+ * The <code>ItemManager</code>'s responsibilities are:
* <ul>
* <li>providing access to <code>Item</code> instances by <code>ItemState</code>
* whereas <code>Node</code> and <code>Item</code> are only providing relative access.
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java Sun Sep 11 18:57:11 2011
@@ -46,7 +46,7 @@ public class Jcr2spiRepositoryFactory im
/**
* This parameter determines the {@link RepositoryServiceFactory} to create the
* {@link RepositoryService}. This is either an instance of <code>RepositoryServiceFactory
- * </code> or a fully quallyfied class name of a <code>RepositoryServiceFactory</code>
+ * </code> or a fully qualified class name of a <code>RepositoryServiceFactory</code>
* having a no argument constructor.
*/
public static final String PARAM_REPOSITORY_SERVICE_FACTORY = "org.apache.jackrabbit.spi.RepositoryServiceFactory";
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java Sun Sep 11 18:57:11 2011
@@ -334,7 +334,7 @@ public class JcrVersionManager implement
* after successful completion of the operation must reside within scope
* defined by this session.
* <br>
- * In addition this method varifies that the passed node is of type nt:activity.
+ * In addition this method verifies that the passed node is of type nt:activity.
*
* @param activityNode
* @param methodName
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Sun Sep 11 18:57:11 2011
@@ -714,7 +714,7 @@ public class NodeImpl extends ItemImpl i
checkIsWritable();
Name mixinQName = getQName(mixinName);
- // get mixin types present in the jcr:mixintypes property without
+ // get mixin types present in the jcr:mixinTypes property without
// modifying the NodeState.
List<Name> mixinValue = getMixinTypes();
if (!mixinValue.contains(mixinQName) && !isNodeType(mixinQName)) {
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java Sun Sep 11 18:57:11 2011
@@ -553,7 +553,7 @@ public class WorkspaceManager
/**
* Create a new workspace with the specified <code>name</code>. If
* <code>srcWorkspaceName</code> isn't <code>null</code> the content of
- * that workspace is used as inital content, otherwise an empty workspace
+ * that workspace is used as initial content, otherwise an empty workspace
* will be created.
*
* @param name The name of the workspace to be created.
@@ -742,7 +742,7 @@ public class WorkspaceManager
//--------------------------------------------------------------------------
/**
- * Called when local or external events occured. This method is called after
+ * Called when local or external events occurred. This method is called after
* changes have been applied to the repository.
*
* @param eventBundles the event bundles generated by the repository service
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntries.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntries.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntries.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntries.java Sun Sep 11 18:57:11 2011
@@ -120,7 +120,7 @@ public interface ChildNodeEntries {
void add(NodeEntry entry, int index, NodeEntry beforeEntry);
/**
- * Removes the child node entry refering to the node state.
+ * Removes the child node entry referring to the node state.
*
* @param childEntry the entry to be removed.
* @return the removed entry or <code>null</code> if there is no such entry.
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java Sun Sep 11 18:57:11 2011
@@ -105,7 +105,7 @@ final class ChildNodeEntriesImpl impleme
/**
* @param childEntry
- * @return The node entry that directly preceeds the given <code>childEntry</code>
+ * @return The node entry that directly precedes the given <code>childEntry</code>
* or <code>null</code> if the given <code>childEntry</code> is the first
* or was not found in this <code>ChildNodeEntries</code>.
*/
@@ -318,7 +318,7 @@ final class ChildNodeEntriesImpl impleme
}
/**
- * Removes the child node entry refering to the node state.
+ * Removes the child node entry referring to the node state.
*
* @param childEntry the entry to be removed.
* @return the removed entry or <code>null</code> if there is no such entry.
@@ -414,7 +414,7 @@ final class ChildNodeEntriesImpl impleme
break;
} else if (ln != insertLN && insertName.equals(ln.qName)) {
position++;
- } // else: ln == inserLN OR no SNS -> not relevant for position count
+ } // else: ln == insertLN OR no SNS -> not relevant for position count
}
}
entriesByName.reorder(insertName, insertLN, position);
@@ -728,10 +728,10 @@ final class ChildNodeEntriesImpl impleme
private final Map<Name, LinkedEntries.LinkNode> nameMap = new HashMap<Name, LinkedEntries.LinkNode>();
/**
- * Return true if more than one NodeEnty with the given name exists.
+ * Return true if more than one NodeEntry with the given name exists.
*
* @param qName
- * @return true if more than one NodeEnty with the given name exists.
+ * @return true if more than one NodeEntry with the given name exists.
*/
public boolean containsSiblings(Name qName) {
return snsMap.containsKey(qName);
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntry.java Sun Sep 11 18:57:11 2011
@@ -176,7 +176,7 @@ public interface HierarchyEntry {
/**
* The required generation of this <code>HierarchyEntry</code> . This is used by the
- * {@link ItemInfoCache} to determine wheter an item info in the cache is up to date or not.
+ * {@link ItemInfoCache} to determine whether an item info in the cache is up to date or not.
* That is whether the generation of the item info in the cache is the same or more recent
* as the required generation of this entry.
*/
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEventListener.java Sun Sep 11 18:57:11 2011
@@ -60,7 +60,7 @@ public class HierarchyEventListener impl
filter = wspManager.createEventFilter(Event.ALL_TYPES, root, true, null, null, true);
} catch (RepositoryException e) {
// SPI does not support observation, or another error occurred.
- log.debug("Creating event filter for cache behavoir observation failed", e);
+ log.debug("Creating event filter for cache behavior observation failed", e);
}
if (filter == null) {
this.eventFilter = Collections.emptyList();
@@ -189,7 +189,7 @@ public class HierarchyEventListener impl
}
break;
case Event.PROPERTY_CHANGED:
- // notify parent in case jcr:mixintypes or jcr:uuid was changed.
+ // notify parent in case jcr:mixinTypes or jcr:uuid was changed.
// if parent is 'null' (i.e. not yet loaded) the prop-entry does
// not exist either -> no need to inform propEntry
if (parent != null) {
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntry.java Sun Sep 11 18:57:11 2011
@@ -70,7 +70,7 @@ public interface NodeEntry extends Hiera
public void setUniqueID(String uniqueID);
/**
- * @return the index of this child node entry to suppport same-name siblings.
+ * @return the index of this child node entry to support same-name siblings.
* If the index of this entry cannot be determined
* {@link org.apache.jackrabbit.spi.Path#INDEX_UNDEFINED} is returned.
* @throws InvalidItemStateException
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/lock/LockManagerImpl.java Sun Sep 11 18:57:11 2011
@@ -138,7 +138,7 @@ public class LockManagerImpl implements
/**
* If the session created a lock on the node with the given state, we already
- * know the lock. Otherwise, the node state and its ancestores are searched
+ * know the lock. Otherwise, the node state and its ancestors are searched
* for properties indicating a lock.<br>
* Note, that the flag indicating session-scoped lock cannot be retrieved
* unless the current session is the lock holder.
@@ -288,7 +288,7 @@ public class LockManagerImpl implements
* verification regarding nodetypes present.
*
* @param nodeState <code>NodeState</code> from which searching starts.
- * Note, that the given state must not have an overlayed state.
+ * Note, that the given state must not have an overlaid state.
* @return a state holding a lock or <code>null</code> if neither the
* given state nor any of its ancestors is locked.
*/
@@ -657,7 +657,7 @@ public class LockManagerImpl implements
/**
*
* @param lockState
- * Note, that the given state must not have an overlayed state.
+ * Note, that the given state must not have an overlaid state.
* @param lockHoldingNode the lock holding <code>Node</code> itself.
*/
public LockImpl(LockState lockState, Node lockHoldingNode) {
Modified: jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java?rev=1169501&r1=1169500&r2=1169501&view=diff
==============================================================================
--- jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java (original)
+++ jackrabbit/branches/JCR-2936/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java Sun Sep 11 18:57:11 2011
@@ -269,7 +269,7 @@ class BitsetENTCacheImpl implements Effe
/**
* Creates a ew bitset key.
* @param names the node type names
- * @param maxBit the approximative number of the geatest bit
+ * @param maxBit the approximate number of the greatest bit
*/
public BitsetKey(Name[] names, int maxBit) {
this.names = names;