From f2b7905266b83f49b5e28d74b6200cf0319da0ae Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 08:48:09 -0500 Subject: [PATCH 01/27] Replace use of obsolete Vector collection --- .../java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java b/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java index 8c1804529f9..73d5d7e84e8 100644 --- a/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java +++ b/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java @@ -23,13 +23,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Enumeration; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; -import java.util.Vector; import javax.servlet.RequestDispatcher; import javax.servlet.ServletInputStream; @@ -198,7 +198,7 @@ public String getContentType() { @SuppressWarnings({ "rawtypes", "unchecked" }) public Enumeration getHeaders(String name) { if (name != null && contentTypes.length > 0 && name.toLowerCase(Locale.ENGLISH).equals("content-type")) { - return new Vector(Arrays.asList(contentTypes)).elements(); + return Collections.enumeration(Arrays.asList(contentTypes)); } else { return null; } From f8dbd9b434ab43634f6c370488a7d5ba69bbb6a7 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 13:08:26 -0500 Subject: [PATCH 02/27] Use String.contains() --- .../java/org/apache/jackrabbit/util/ISO9075.java | 4 ++-- .../jackrabbit/test/api/NodeReadMethodsTest.java | 16 ++++++++-------- .../jackrabbit/test/api/TreeComparator.java | 6 +----- .../apache/jackrabbit/test/api/util/ISO9075.java | 4 ++-- .../jackrabbit/webdav/xml/ResultHelper.java | 2 +- 5 files changed, 14 insertions(+), 18 deletions(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java index f836ea109e7..ef683f41c0b 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java @@ -50,7 +50,7 @@ public static String encode(String name) { if (name.length() == 0) { return name; } - if (XMLChar.isValidName(name) && name.indexOf("_x") < 0) { + if (XMLChar.isValidName(name) && !name.contains("_x")) { // already valid return name; } else { @@ -122,7 +122,7 @@ public static String encodePath(String path) { */ public static String decode(String name) { // quick check - if (name.indexOf("_x") < 0) { + if (!name.contains("_x")) { // not encoded return name; } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java index 78e7ed2c6f8..9f81feb6efa 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java @@ -411,13 +411,13 @@ public void testGetNodesNamePattern() Node n = nodes4.nextNode(); assertTrue(assertString4 + "name comparison failed: *" + shortenName + "* not found in " + n.getName(), - n.getName().indexOf(shortenName) != -1); + n.getName().contains(shortenName)); } // test if the number of found nodes is correct int numExpected4 = 0; for (int i = 0; i < allNodes.size(); i++) { Node n = allNodes.get(i); - if (n.getName().indexOf(shortenName) != -1) { + if (n.getName().contains(shortenName)) { numExpected4++; } } @@ -533,13 +533,13 @@ public void testGetNodesNamePatternArray() Node n = nodes5.nextNode(); assertTrue(assertString5 + "name comparison failed: *" + shortenName + "* not found in " + n.getName(), - n.getName().indexOf(shortenName) != -1); + n.getName().contains(shortenName)); } // test if the number of found nodes is correct int numExpected5 = 0; for (int i = 0; i < allNodes.size(); i++) { Node n = allNodes.get(i); - if (n.getName().indexOf(shortenName) != -1) { + if (n.getName().contains(shortenName)) { numExpected5++; } } @@ -700,13 +700,13 @@ public void testGetPropertiesNamePattern() Property p = properties4.nextProperty(); assertTrue(assertString4 + "name comparison failed: *" + shortenName + "* not found in " + p.getName(), - p.getName().indexOf(shortenName) != -1); + p.getName().contains(shortenName)); } // test if the number of found properties is correct int numExpected4 = 0; for (int i = 0; i < allProperties.size(); i++) { Property p = allProperties.get(i); - if (p.getName().indexOf(shortenName) != -1) { + if (p.getName().contains(shortenName)) { numExpected4++; } } @@ -808,13 +808,13 @@ public void testGetPropertiesNamePatternArray() Property p = properties5.nextProperty(); assertTrue(assertString5 + "name comparison failed: *" + shortenName + "* not found in " + p.getName(), - p.getName().indexOf(shortenName) != -1); + p.getName().contains(shortenName)); } // test if the number of found properties is correct int numExpected5 = 0; for (int i = 0; i < allProperties.size(); i++) { Property p = allProperties.get(i); - if (p.getName().indexOf(shortenName) != -1) { + if (p.getName().contains(shortenName)) { numExpected5++; } } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java index 590819a6861..0f5f1504ec2 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java @@ -521,11 +521,7 @@ public void compareValue(String n, String p, Value a, Value b) { * change. */ public boolean propertyValueMayChange(String propertyName) { - if (sc.propertyValueMayChange.indexOf(" " + propertyName + " ") < 0) { - return false; - } else { - return true; - } + return sc.propertyValueMayChange.contains(" " + propertyName + " "); } /** diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java index b929648feab..99fbbeb8949 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java @@ -52,7 +52,7 @@ public static String encode(String name) { if (name.length() == 0) { return name; } - if (XMLChar.isValidName(name) && name.indexOf("_x") < 0) { + if (XMLChar.isValidName(name) && !name.contains("_x")) { // already valid return name; } else { @@ -124,7 +124,7 @@ public static String encodePath(String path) { */ public static String decode(String name) { // quick check - if (name.indexOf("_x") < 0) { + if (!name.contains("_x")) { // not encoded return name; } diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java index b201750682d..4852c98d256 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java @@ -96,7 +96,7 @@ private static boolean needsXmlnsAttributes() { probe.endElement("uri", "e", "p:e"); probe.endPrefixMapping("p"); probe.endDocument(); - return writer.toString().indexOf("xmlns") == -1; + return !writer.toString().contains("xmlns"); } catch (Exception e) { throw new UnsupportedOperationException("XML serialization fails"); } From 8d555acf8906a5e4c7b3e341ea6a4ccbff2abf91 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 13:17:59 -0500 Subject: [PATCH 03/27] Remove unused variable assignments --- .../src/main/java/org/apache/jackrabbit/aws/ext/Utils.java | 4 ++-- .../java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java | 2 +- .../org/apache/jackrabbit/aws/ext/ds/TestS3DSWithSSES3.java | 2 +- .../java/org/apache/jackrabbit/core/data/FSBackend.java | 2 +- .../java/org/apache/jackrabbit/core/data/LocalCache.java | 2 +- .../org/apache/jackrabbit/data/core/TransactionContext.java | 2 +- .../java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java | 6 ++---- .../jackrabbit/test/api/security/AccessControlListTest.java | 2 +- .../jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java | 1 - .../main/java/org/apache/jackrabbit/spi2dav/EventImpl.java | 2 +- .../apache/jackrabbit/spi2davex/RepositoryServiceImpl.java | 2 +- .../jackrabbit/webdav/util/LinkHeaderFieldParser.java | 2 +- 12 files changed, 13 insertions(+), 16 deletions(-) diff --git a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/Utils.java b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/Utils.java index 88c0fc85f22..a7de8577f95 100644 --- a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/Utils.java +++ b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/Utils.java @@ -82,7 +82,7 @@ private Utils() { public static AmazonS3Client openService(final Properties prop) { String accessKey = prop.getProperty(S3Constants.ACCESS_KEY); String secretKey = prop.getProperty(S3Constants.SECRET_KEY); - AmazonS3Client s3service = null; + AmazonS3Client s3service; if (StringUtils.isNullOrEmpty(accessKey) || StringUtils.isNullOrEmpty(secretKey)) { LOG.info("Configuring Amazon Client from environment"); @@ -95,7 +95,7 @@ public static AmazonS3Client openService(final Properties prop) { getClientConfiguration(prop)); } String region = prop.getProperty(S3Constants.S3_REGION); - String endpoint = null; + String endpoint; String propEndPoint = prop.getProperty(S3Constants.S3_END_POINT); if ((propEndPoint != null) && !"".equals(propEndPoint)) { endpoint = propEndPoint; diff --git a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java index 01e87ddb403..852220622ec 100644 --- a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java +++ b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java @@ -265,7 +265,7 @@ public boolean exists(DataIdentifier identifier, boolean touch) throws DataStoreException { long start = System.currentTimeMillis(); String key = getKeyName(identifier); - ObjectMetadata objectMetaData = null; + ObjectMetadata objectMetaData; boolean retVal = false; ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try { diff --git a/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3DSWithSSES3.java b/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3DSWithSSES3.java index 45a29482494..7e0f83f69d6 100644 --- a/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3DSWithSSES3.java +++ b/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3DSWithSSES3.java @@ -82,7 +82,7 @@ public void testDataMigration() { assertRecord(data, rec); randomGen.nextBytes(data); - rec = s3ds.addRecord(new ByteArrayInputStream(data)); + s3ds.addRecord(new ByteArrayInputStream(data)); s3ds.close(); } catch (Exception e) { diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FSBackend.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FSBackend.java index 1437178d556..4bb11ce304e 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FSBackend.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FSBackend.java @@ -62,7 +62,7 @@ public class FSBackend extends AbstractBackend { public void init(CachingDataStore store, String homeDir, String config) throws DataStoreException { super.init(store, homeDir, config); - Properties initProps = null; + Properties initProps; // Check is configuration is already provided. That takes precedence // over config provided via file based config if (this.properties != null) { diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java index ab1abb3f0ab..6086588e581 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java @@ -213,7 +213,7 @@ public AsyncUploadCacheResult store(String fileName, File src, AsyncUploadCacheResult result = new AsyncUploadCacheResult(); result.setFile(src); result.setAsyncUpload(false); - boolean destExists = false; + boolean destExists; if ((destExists = dest.exists()) || (src.exists() && !dest.exists() && !src.equals(dest) && canAdmitFile(src.length()) diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java index 054a1301a4d..eab8a686c3e 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java @@ -210,7 +210,7 @@ public synchronized void commit() throws XAException { cleanCurrentXid(); if (txe != null) { - XAException e = null; + XAException e; if (heuristicCommit) { e = new XAException(XAException.XA_HEURMIX); } else { diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java index c4215740e30..ea4b7057489 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java @@ -123,8 +123,7 @@ private static String escape(String str) { String escaped = escapeChar(c); buf.append(escaped); } else { - String substr = str.substring(i, str.length()); - if (canMisinterpret(substr)) { + if (canMisinterpret(str.substring(i))) { buf.append(escapeChar(c)); } else { buf.append(c); @@ -134,8 +133,7 @@ private static String escape(String str) { if (!XMLChar.isName(c)) { buf.append(escapeChar(c)); } else { - String substr = str.substring(i, str.length()); - if (canMisinterpret(substr)) { + if (canMisinterpret(str.substring(i))) { buf.append(escapeChar(c)); } else { buf.append(c); diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java index 096b952cfc7..a70173a9171 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java @@ -412,7 +412,7 @@ public void testRemoveAccessControlEntryAndSetPolicy() throws NotExecutableExcep // try to re-access the modifiable ACL in order to remove the ACE // added before. acl = getList(acMgr, path); - AccessControlEntry ace = null; + AccessControlEntry ace; AccessControlEntry[] aces = acl.getAccessControlEntries(); if (aces.length == 0) { throw new NotExecutableException(); diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java index 6a579858e79..7549d20bbb8 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java @@ -740,7 +740,6 @@ public String toString() { StringBuilder builder = new StringBuilder(); for (QNodeTypeDefinition ntd : getValues()) { builder.append(ntd.getName()); - Name[] supertypes = ntd.getSupertypes(); builder.append("\n\tSupertypes"); for (Name supertype : ntd.getSupertypes()) { builder.append("\n\t\t").append(supertype); diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java index 820e21c6000..2fba3fcbe63 100644 --- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java +++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java @@ -136,7 +136,7 @@ private static Name[] getNames(ElementIterator elements, while (elements.hasNext()) { String rawname = DomUtil.getText(elements.nextElement()); - Name name = null; + Name name; try { name = resolver.getQName(rawname); diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java index 071667f4be0..2ab3e5debd3 100644 --- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java +++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java @@ -353,7 +353,7 @@ public Iterator getItemInfos(SessionInfo sessionInfo, ItemId int depth = batchReadConfig.getDepth(path, this.getNamePathResolver(sessionInfo)); HttpGet request = new HttpGet(uri + "." + depth + ".json"); - HttpResponse response = null; + HttpResponse response; try { response = executeRequest(sessionInfo, request); int statusCode = response.getStatusLine().getStatusCode(); diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParser.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParser.java index bc183959219..23d876081a8 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParser.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParser.java @@ -104,7 +104,7 @@ private void addFields(List l, String fieldValue) { insideDoubleQuotes = c != '"'; if (c == '\\' && i < fieldValue.length() - 1) { // skip over next character - c = fieldValue.charAt(++i); + ++i; } } else { insideAngleBrackets = c == '<'; From 29f5cccd7fa4dc98bbe4015f6a794b965f84a7f9 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 15:07:26 -0500 Subject: [PATCH 04/27] Use isEmpty() to check whether a collection is (or isn't) empty The use of isEmpty() is generally to be preferred because it is possible for a size() implementation to be slow, but isEmpty() to be fast. --- .../jackrabbit/core/ItemSaveOperation.java | 2 +- .../jackrabbit/core/cache/CacheManager.java | 2 +- .../core/nodetype/EffectiveNodeType.java | 60 +++++++++---------- .../core/query/lucene/ChildAxisQuery.java | 4 +- .../core/query/lucene/ConsistencyCheck.java | 2 +- .../core/query/lucene/IndexInfos.java | 4 ++ .../core/query/lucene/IndexMerger.java | 2 +- .../core/query/lucene/LuceneQueryBuilder.java | 6 +- .../core/query/lucene/MultiIndex.java | 4 +- .../core/query/lucene/QueryImpl.java | 2 +- .../core/query/lucene/QueryResultImpl.java | 2 +- .../core/query/lucene/SearchIndex.java | 2 +- .../core/retention/RetentionManagerImpl.java | 4 +- .../core/state/ChildNodeEntries.java | 2 +- .../apache/jackrabbit/core/AddMoveTest.java | 2 +- .../core/ConcurrentAddMoveRemoveTest.java | 2 +- .../jackrabbit/core/MoveRemoveTest.java | 2 +- .../jackrabbit/commons/query/sql2/Parser.java | 2 +- .../remoting/davex/JsonDiffHandler.java | 2 +- .../nodetype/EffectiveNodeTypeImpl.java | 48 +++++++-------- .../observation/ObservationManagerImpl.java | 2 +- .../spi/commons/query/OrderQueryNode.java | 8 +-- .../commons/query/sql/JCRSQLQueryBuilder.java | 2 +- .../src/main/javacc/xpath/javacc.xsl | 2 +- .../compact/CompactNodeTypeDefTest.java | 2 +- .../apache/jackrabbit/spi2dav/EventImpl.java | 2 +- .../spi2dav/RepositoryServiceImpl.java | 2 +- 27 files changed, 90 insertions(+), 86 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemSaveOperation.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemSaveOperation.java index 26a84e57ff4..5c2332e3d66 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemSaveOperation.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemSaveOperation.java @@ -102,7 +102,7 @@ public Object perform(SessionContext context) throws RepositoryException { context.getSessionImpl().logout(); throw e; } - if (dirty.size() == 0) { + if (dirty.isEmpty()) { // no transient items, nothing to do here return this; } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cache/CacheManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cache/CacheManager.java index 9073645a188..795c27444f9 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cache/CacheManager.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cache/CacheManager.java @@ -188,7 +188,7 @@ private void resizeAll() { synchronized (caches) { list.addAll(caches.keySet()); } - if (list.size() == 0) { + if (list.isEmpty()) { // nothing to do return; } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java index 4d30d76b55d..bfa0a0a1f14 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java @@ -283,7 +283,7 @@ public Name[] getAllNodeTypes() { } public QItemDefinition[] getAllItemDefs() { - if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { return QItemDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); @@ -291,28 +291,28 @@ public QItemDefinition[] getAllItemDefs() { defs.addAll(itemDefs); } defs.addAll(unnamedItemDefs); - if (defs.size() == 0) { + if (defs.isEmpty()) { return QItemDefinition.EMPTY_ARRAY; } return defs.toArray(new QItemDefinition[defs.size()]); } public QItemDefinition[] getNamedItemDefs() { - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QItemDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); for (List itemDefs : namedItemDefs.values()) { defs.addAll(itemDefs); } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QItemDefinition.EMPTY_ARRAY; } return defs.toArray(new QItemDefinition[defs.size()]); } public QItemDefinition[] getUnnamedItemDefs() { - if (unnamedItemDefs.size() == 0) { + if (unnamedItemDefs.isEmpty()) { return QItemDefinition.EMPTY_ARRAY; } return unnamedItemDefs.toArray(new QItemDefinition[unnamedItemDefs.size()]); @@ -324,14 +324,14 @@ public boolean hasNamedItemDef(Name name) { public QItemDefinition[] getNamedItemDefs(Name name) { List defs = namedItemDefs.get(name); - if (defs == null || defs.size() == 0) { + if (defs == null || defs.isEmpty()) { return QItemDefinition.EMPTY_ARRAY; } return defs.toArray(new QItemDefinition[defs.size()]); } public QNodeDefinition[] getAllNodeDefs() { - if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); @@ -347,14 +347,14 @@ public QNodeDefinition[] getAllNodeDefs() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); } public QNodeDefinition[] getNamedNodeDefs() { - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -365,7 +365,7 @@ public QNodeDefinition[] getNamedNodeDefs() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); @@ -373,7 +373,7 @@ public QNodeDefinition[] getNamedNodeDefs() { public QNodeDefinition[] getNamedNodeDefs(Name name) { List list = namedItemDefs.get(name); - if (list == null || list.size() == 0) { + if (list == null || list.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(list.size()); @@ -382,14 +382,14 @@ public QNodeDefinition[] getNamedNodeDefs(Name name) { defs.add((QNodeDefinition) def); } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); } public QNodeDefinition[] getUnnamedNodeDefs() { - if (unnamedItemDefs.size() == 0) { + if (unnamedItemDefs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(unnamedItemDefs.size()); @@ -398,7 +398,7 @@ public QNodeDefinition[] getUnnamedNodeDefs() { defs.add((QNodeDefinition) def); } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); @@ -407,7 +407,7 @@ public QNodeDefinition[] getUnnamedNodeDefs() { public QNodeDefinition[] getAutoCreateNodeDefs() { // since auto-create items must have a name, // we're only searching the named item definitions - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -418,14 +418,14 @@ public QNodeDefinition[] getAutoCreateNodeDefs() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); } public QPropertyDefinition[] getAllPropDefs() { - if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); @@ -441,14 +441,14 @@ public QPropertyDefinition[] getAllPropDefs() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); } public QPropertyDefinition[] getNamedPropDefs() { - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -459,7 +459,7 @@ public QPropertyDefinition[] getNamedPropDefs() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); @@ -467,7 +467,7 @@ public QPropertyDefinition[] getNamedPropDefs() { public QPropertyDefinition[] getNamedPropDefs(Name name) { List list = namedItemDefs.get(name); - if (list == null || list.size() == 0) { + if (list == null || list.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(list.size()); @@ -476,14 +476,14 @@ public QPropertyDefinition[] getNamedPropDefs(Name name) { defs.add((QPropertyDefinition) def); } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); } public QPropertyDefinition[] getUnnamedPropDefs() { - if (unnamedItemDefs.size() == 0) { + if (unnamedItemDefs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(unnamedItemDefs.size()); @@ -492,7 +492,7 @@ public QPropertyDefinition[] getUnnamedPropDefs() { defs.add((QPropertyDefinition) def); } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); @@ -501,7 +501,7 @@ public QPropertyDefinition[] getUnnamedPropDefs() { public QPropertyDefinition[] getAutoCreatePropDefs() { // since auto-create items must have a name, // we're only searching the named item definitions - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -512,7 +512,7 @@ public QPropertyDefinition[] getAutoCreatePropDefs() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); @@ -521,7 +521,7 @@ public QPropertyDefinition[] getAutoCreatePropDefs() { public QPropertyDefinition[] getMandatoryPropDefs() { // since mandatory items must have a name, // we're only searching the named item definitions - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -532,7 +532,7 @@ public QPropertyDefinition[] getMandatoryPropDefs() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); @@ -541,7 +541,7 @@ public QPropertyDefinition[] getMandatoryPropDefs() { public QNodeDefinition[] getMandatoryNodeDefs() { // since mandatory items must have a name, // we're only searching the named item definitions - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -552,7 +552,7 @@ public QNodeDefinition[] getMandatoryNodeDefs() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java index 52aff368ab5..c442db451a8 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java @@ -497,7 +497,7 @@ private boolean indexIsValid(int i) throws IOException { List childNodes = state.getChildNodeEntries(); if (position == LocationStepQueryNode.LAST) { // only select last - if (childNodes.size() == 0 + if (childNodes.isEmpty() || !(childNodes.get(childNodes.size() - 1)).getId().equals(id)) { return false; } @@ -522,7 +522,7 @@ private boolean indexIsValid(int i) throws IOException { // only use the last one Name name = entry.getName(); List childNodes = state.getChildNodeEntries(name); - if (childNodes.size() == 0 + if (childNodes.isEmpty() || !(childNodes.get(childNodes.size() - 1)).getId().equals(id)) { return false; } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java index 8192984366c..2873aef872e 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java @@ -180,7 +180,7 @@ static ConsistencyCheck run(MultiIndex index, SearchIndex handler, final Set errors = check.getErrors(); - if (errors.size() == 0) { + if (errors.isEmpty()) { log.info("No errors detected."); } for (ConsistencyCheckError err : errors) { diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/retention/RetentionManagerImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/retention/RetentionManagerImpl.java index a3f4d2222be..8eefe7d3e85 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/retention/RetentionManagerImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/retention/RetentionManagerImpl.java @@ -140,7 +140,7 @@ public void removeHold(String absPath, Hold hold) throws } } if (newValues.size() < vls.length) { - if (newValues.size() == 0) { + if (newValues.isEmpty()) { removeItem(p); } else { setProperty(n, REP_HOLD, newValues.toArray(new Value[newValues.size()])); @@ -205,4 +205,4 @@ public void removeRetentionPolicy(String absPath) throws throw new RepositoryException("Cannot remove retention policy at absPath."); } } -} \ No newline at end of file +} diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java index 0eeaddfbd95..73ccb229afa 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ChildNodeEntries.java @@ -193,7 +193,7 @@ public ChildNodeEntry remove(Name nodeName, int index) { } // clean up name lookup map if necessary - if (siblings.size() == 0) { + if (siblings.isEmpty()) { // no more entries with that name left: // remove from name lookup map as well nameMap.remove(nodeName); diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AddMoveTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AddMoveTest.java index db367258c86..ac3f2432e7e 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AddMoveTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AddMoveTest.java @@ -60,7 +60,7 @@ public void testAddMove() throws RepositoryException, NotExecutableException { //for (ReportItem item : consistencyReport.getItems()) { // System.out.println(item.getMessage()); //} - assertTrue(consistencyReport.getItems().size() == 0); + assertTrue(consistencyReport.getItems().isEmpty()); } /** diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/ConcurrentAddMoveRemoveTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/ConcurrentAddMoveRemoveTest.java index ff6b4b4390b..35bad023586 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/ConcurrentAddMoveRemoveTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/ConcurrentAddMoveRemoveTest.java @@ -55,7 +55,7 @@ public void tearDown() throws Exception { //for (ReportItem item : consistencyReport.getItems()) { // System.out.println(item.getMessage()); //} - assertTrue(consistencyReport.getItems().size() == 0); + assertTrue(consistencyReport.getItems().isEmpty()); super.tearDown(); } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveRemoveTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveRemoveTest.java index e62dac68e3c..bd346e46f20 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveRemoveTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveRemoveTest.java @@ -59,6 +59,6 @@ public void testMoveRemove() throws RepositoryException, NotExecutableException //for (ReportItem item : consistencyReport.getItems()) { // System.out.println(item.getMessage()); //} - assertTrue(consistencyReport.getItems().size() == 0); + assertTrue(consistencyReport.getItems().isEmpty()); } } diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/Parser.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/Parser.java index d2a00ecdd2b..d8c33b3124a 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/Parser.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/Parser.java @@ -955,7 +955,7 @@ private void readDecimal(int start, int i) throws RepositoryException { } private InvalidQueryException getSyntaxError() { - if (expected == null || expected.size() == 0) { + if (expected == null || expected.isEmpty()) { return getSyntaxError(null); } else { StringBuilder buff = new StringBuilder(); diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java index fed6cda07b3..6f53e764327 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java @@ -1000,7 +1000,7 @@ void startValueElement(ContentHandler contentHandler) throws IOException { try { // Multi-valued property with values present in the request // multi-part - if (values.size() == 0) { + if (values.isEmpty()) { values = Arrays.asList(extractValuesFromRequest(getPath())); } diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java index 6d68ec8468e..89c882ef6f9 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java @@ -106,7 +106,7 @@ public Name[] getMergedNodeTypes() { * @see EffectiveNodeType#getAllQNodeDefinitions() */ public QNodeDefinition[] getAllQNodeDefinitions() { - if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); @@ -123,7 +123,7 @@ public QNodeDefinition[] getAllQNodeDefinitions() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); @@ -133,7 +133,7 @@ public QNodeDefinition[] getAllQNodeDefinitions() { * @see EffectiveNodeType#getAllQPropertyDefinitions() */ public QPropertyDefinition[] getAllQPropertyDefinitions() { - if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); @@ -149,7 +149,7 @@ public QPropertyDefinition[] getAllQPropertyDefinitions() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); @@ -161,7 +161,7 @@ public QPropertyDefinition[] getAllQPropertyDefinitions() { public QNodeDefinition[] getAutoCreateQNodeDefinitions() { // since auto-create items must have a name, // we're only searching the named item definitions - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -172,7 +172,7 @@ public QNodeDefinition[] getAutoCreateQNodeDefinitions() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); @@ -184,7 +184,7 @@ public QNodeDefinition[] getAutoCreateQNodeDefinitions() { public QPropertyDefinition[] getAutoCreateQPropertyDefinitions() { // since auto-create items must have a name, // we're only searching the named item definitions - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -195,7 +195,7 @@ public QPropertyDefinition[] getAutoCreateQPropertyDefinitions() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); @@ -207,7 +207,7 @@ public QPropertyDefinition[] getAutoCreateQPropertyDefinitions() { public QPropertyDefinition[] getMandatoryQPropertyDefinitions() { // since mandatory items must have a name, // we're only searching the named item definitions - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -218,7 +218,7 @@ public QPropertyDefinition[] getMandatoryQPropertyDefinitions() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); @@ -230,7 +230,7 @@ public QPropertyDefinition[] getMandatoryQPropertyDefinitions() { public QNodeDefinition[] getMandatoryQNodeDefinitions() { // since mandatory items must have a name, // we're only searching the named item definitions - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); @@ -241,7 +241,7 @@ public QNodeDefinition[] getMandatoryQNodeDefinitions() { } } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); @@ -252,7 +252,7 @@ public QNodeDefinition[] getMandatoryQNodeDefinitions() { */ public QNodeDefinition[] getNamedQNodeDefinitions(Name name) { List list = namedItemDefs.get(name); - if (list == null || list.size() == 0) { + if (list == null || list.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(list.size()); @@ -261,7 +261,7 @@ public QNodeDefinition[] getNamedQNodeDefinitions(Name name) { defs.add(qDef); } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); @@ -271,7 +271,7 @@ public QNodeDefinition[] getNamedQNodeDefinitions(Name name) { * @see EffectiveNodeType#getUnnamedQNodeDefinitions() */ public QNodeDefinition[] getUnnamedQNodeDefinitions() { - if (unnamedItemDefs.size() == 0) { + if (unnamedItemDefs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(unnamedItemDefs.size()); @@ -280,7 +280,7 @@ public QNodeDefinition[] getUnnamedQNodeDefinitions() { defs.add(qDef); } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return defs.toArray(new QNodeDefinition[defs.size()]); @@ -291,7 +291,7 @@ public QNodeDefinition[] getUnnamedQNodeDefinitions() { */ public QPropertyDefinition[] getNamedQPropertyDefinitions(Name name) { List list = namedItemDefs.get(name); - if (list == null || list.size() == 0) { + if (list == null || list.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(list.size()); @@ -300,7 +300,7 @@ public QPropertyDefinition[] getNamedQPropertyDefinitions(Name name) { defs.add(qDef); } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); @@ -310,7 +310,7 @@ public QPropertyDefinition[] getNamedQPropertyDefinitions(Name name) { * @see EffectiveNodeType#getUnnamedQPropertyDefinitions() */ public QPropertyDefinition[] getUnnamedQPropertyDefinitions() { - if (unnamedItemDefs.size() == 0) { + if (unnamedItemDefs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(unnamedItemDefs.size()); @@ -319,7 +319,7 @@ public QPropertyDefinition[] getUnnamedQPropertyDefinitions() { defs.add(qDef); } } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QPropertyDefinition.EMPTY_ARRAY; } return defs.toArray(new QPropertyDefinition[defs.size()]); @@ -437,14 +437,14 @@ private static boolean hasRemoveConstraint(QItemDefinition[] defs) { } private QItemDefinition[] getNamedItemDefs() { - if (namedItemDefs.size() == 0) { + if (namedItemDefs.isEmpty()) { return QItemDefinition.EMPTY_ARRAY; } ArrayList defs = new ArrayList(namedItemDefs.size()); for (List list : namedItemDefs.values()) { defs.addAll(list); } - if (defs.size() == 0) { + if (defs.isEmpty()) { return QItemDefinition.EMPTY_ARRAY; } return defs.toArray(new QItemDefinition[defs.size()]); @@ -452,14 +452,14 @@ private QItemDefinition[] getNamedItemDefs() { private QItemDefinition[] getNamedItemDefs(Name name) { List list = namedItemDefs.get(name); - if (list == null || list.size() == 0) { + if (list == null || list.isEmpty()) { return QNodeDefinition.EMPTY_ARRAY; } return list.toArray(new QItemDefinition[list.size()]); } private QItemDefinition[] getUnnamedItemDefs() { - if (unnamedItemDefs.size() == 0) { + if (unnamedItemDefs.isEmpty()) { return QItemDefinition.EMPTY_ARRAY; } return unnamedItemDefs.toArray(new QItemDefinition[unnamedItemDefs.size()]); diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/ObservationManagerImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/ObservationManagerImpl.java index d854c3d0435..efa3d590931 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/ObservationManagerImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/ObservationManagerImpl.java @@ -119,7 +119,7 @@ public void removeEventListener(EventListener listener) throws RepositoryExcepti readOnlySubscriptions = null; } } - if (subscriptions.size() == 0) { + if (subscriptions.isEmpty()) { wspManager.removeEventListener(this); } else { wspManager.updateEventFilters(); diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/OrderQueryNode.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/OrderQueryNode.java index f5a1d244073..b692a4f6cb9 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/OrderQueryNode.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/OrderQueryNode.java @@ -71,7 +71,7 @@ public void newOrderSpec() { * @throws IllegalStateException if no order specification is set */ public void setAscending(boolean value) { - if (specs.size() == 0) { + if (specs.isEmpty()) { throw new IllegalStateException("No order specification set"); } @@ -87,7 +87,7 @@ public void setAscending(boolean value) { * @throws IllegalStateException if no order specification is set */ public void setPath(Path path) { - if (specs.size() == 0) { + if (specs.isEmpty()) { throw new IllegalStateException("No order specification set"); } @@ -103,10 +103,10 @@ public void setPath(Path path) { * @throws IllegalStateException if no order specification is set */ public void setFunction(String name) { - if (specs.size() == 0) { + if (specs.isEmpty()) { throw new IllegalStateException("No order specification set"); } - + OrderSpec orderSpec = specs.get(specs.size() - 1); orderSpec.setFunction(name); } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java index 01835182fbf..6eea6723fb9 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java @@ -217,7 +217,7 @@ public Object visit(ASTQuery node, Object data) { // use //* if no path has been set PathQueryNode pathNode = root.getLocationNode(); pathNode.setAbsolute(true); - if (pathConstraints.size() == 0) { + if (pathConstraints.isEmpty()) { LocationStepQueryNode step = factory.createLocationStepQueryNode(pathNode); step.setNameTest(null); step.setIncludeDescendants(true); diff --git a/jackrabbit-spi-commons/src/main/javacc/xpath/javacc.xsl b/jackrabbit-spi-commons/src/main/javacc/xpath/javacc.xsl index 28df9fdf3ab..cc8bb7975d4 100644 --- a/jackrabbit-spi-commons/src/main/javacc/xpath/javacc.xsl +++ b/jackrabbit-spi-commons/src/main/javacc/xpath/javacc.xsl @@ -279,7 +279,7 @@ TOKEN_MGR_DECLS : { */ private void popState() { - if (stateStack.size() == 0) + if (stateStack.isEmpty()) { printLinePos(); } diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/compact/CompactNodeTypeDefTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/compact/CompactNodeTypeDefTest.java index f5b8205e73b..7d7b3708589 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/compact/CompactNodeTypeDefTest.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/compact/CompactNodeTypeDefTest.java @@ -59,7 +59,7 @@ public void testCompactNodeTypeDef() throws Exception { List ntdList2 = cndReader.getNodeTypeDefinitions(); - if (ntdList1.size() == 0 || ntdList1.size() != ntdList2.size()) { + if (ntdList1.isEmpty() || ntdList1.size() != ntdList2.size()) { fail("Exported node type definition was not successfully read back in"); } else { for(int k = 0; k < ntdList1.size(); k++) { diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java index 2fba3fcbe63..d7b4c6b7b0f 100644 --- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java +++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java @@ -141,7 +141,7 @@ private static Name[] getNames(ElementIterator elements, try { name = resolver.getQName(rawname); - if (results.size() == 0) { + if (results.isEmpty()) { results = Collections.singletonList(name); } else if (results.size() == 1) { results = new ArrayList(results); diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java index d2f6dfa2799..4dbf27fed2c 100644 --- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java +++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java @@ -2183,7 +2183,7 @@ public EventFilter createEventFilter(SessionInfo sessionInfo, if (nodeTypeNames != null) { resolvedTypeNames = new HashSet(); // make sure node type definitions are available - if (nodeTypeDefinitions.size() == 0) { + if (nodeTypeDefinitions.isEmpty()) { getQNodeTypeDefinitions(sessionInfo); } synchronized (nodeTypeDefinitions) { From c122cc79917843db698b9b67afb96db4108e778d Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 15:07:41 -0500 Subject: [PATCH 05/27] Correct typos --- .../main/java/org/apache/jackrabbit/test/api/util/Text.java | 4 ++-- .../jackrabbit/spi/commons/query/sql/TokenMgrError.java | 2 +- .../webdav/version/report/LocateByHistoryReport.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java index 7e85448488a..5034f7c4beb 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java @@ -182,12 +182,12 @@ public static String implode(String[] arr, String delim) { } /** - * Replaces all occurences of oldString in text + * Replaces all occurrences of oldString in text * with newString. * * @param text * @param oldString old substring to be replaced with newString - * @param newString new substring to replace occurences of oldString + * @param newString new substring to replace occurrences of oldString * @return a string */ public static String replace(String text, String oldString, String newString) { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java index bd462b4fe13..950e0c43567 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java @@ -50,7 +50,7 @@ public class TokenMgrError extends Error int errorCode; /** - * Replaces unprintable characters by their espaced (or unicode escaped) + * Replaces unprintable characters by their escaped (or unicode escaped) * equivalents in the given string */ protected static final String addEscapes(String str) { diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java index fb7e7863113..f40f998d99e 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java @@ -37,7 +37,7 @@ import java.util.Set; /** - * LocateByHistoryReport encapsulates the DAV:locate-by-hisotry + * LocateByHistoryReport encapsulates the DAV:locate-by-history * report, that may be used to locate a version-controlled resource for that * version history. The DAV:locate-by-history report can be applied to a collection * to locate the collection member that is a version-controlled resource for a From 2ca85275c04ec31e6276ebba35ea5c0248317d44 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 15:08:14 -0500 Subject: [PATCH 06/27] Supply type information --- .../authentication/token/TokenProvider.java | 2 +- .../core/state/XAItemStateManager.java | 7 ++++--- .../core/AbstractConcurrencyTest.java | 6 +++--- .../jackrabbit/commons/json/JsonParser.java | 2 +- .../jackrabbit/webdav/jcr/RootCollection.java | 2 +- .../commons/namespace/NamespaceExtractor.java | 4 ++-- .../commons/nodetype/NodeTypeTemplateImpl.java | 8 ++++---- .../jackrabbit/standalone/cli/JcrParser.java | 18 ++++++++---------- .../jackrabbit/webdav/search/SearchInfo.java | 2 +- 9 files changed, 25 insertions(+), 26 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java index f9d8a0c05bf..a69298cc403 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java @@ -76,7 +76,7 @@ public class TokenProvider extends ProtectedItemModifier { private static final char DELIM = '_'; - private static final Set RESERVED_ATTRIBUTES = new HashSet(3); + private static final Set RESERVED_ATTRIBUTES = new HashSet(3); static { RESERVED_ATTRIBUTES.add(TOKEN_ATTRIBUTE); RESERVED_ATTRIBUTES.add(TOKEN_ATTRIBUTE_EXPIRY); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java index 30ac2c69a36..8c058b36d23 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java @@ -60,7 +60,8 @@ public class XAItemStateManager extends LocalItemStateManager implements Interna * manager is in one of the {@link #prepare}, {@link #commit}, {@link * #rollback} methods. */ - private final Map commitLogs = Collections.synchronizedMap(new IdentityHashMap()); + private final Map commitLogs = + Collections.synchronizedMap(new IdentityHashMap()); /** * Current instance-local change log. @@ -213,7 +214,7 @@ public void afterOperation(TransactionContext tx) { * change log was found. */ public ChangeLog getChangeLog() { - ChangeLog changeLog = (ChangeLog) commitLogs.get(Thread.currentThread()); + ChangeLog changeLog = commitLogs.get(Thread.currentThread()); if (changeLog == null) { changeLog = txLog; } @@ -578,7 +579,7 @@ private void removeVirtualReference( * in a subsequent transaction (see JCR-1554). */ public void stateModified(ItemState modified) { - ChangeLog changeLog = (ChangeLog) commitLogs.get(Thread.currentThread()); + ChangeLog changeLog = commitLogs.get(Thread.currentThread()); if (changeLog != null) { ItemState local; if (modified.getContainer() != this) { diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java index d3706f58726..2a1f2a06f7a 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java @@ -153,11 +153,11 @@ protected long getOneYearAhead() { */ protected static void dumpStacks(Thread[] threads) { try { - Method m = Thread.class.getMethod("getStackTrace", null); - StringBuffer dumps = new StringBuffer(); + Method m = Thread.class.getMethod("getStackTrace", (Class[]) null); + StringBuilder dumps = new StringBuilder(); for (int t = 0; t < threads.length; t++) { StackTraceElement[] elements = (StackTraceElement[]) m.invoke( - threads[t], null); + threads[t], (Object[]) null); dumps.append(threads[t].toString()).append('\n'); for (int i = 0; i < elements.length; i++) { dumps.append("\tat " + elements[i]).append('\n'); diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java index 529d48690b6..a5ba905418d 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java @@ -84,7 +84,7 @@ public void parse(Reader reader) throws IOException { StringBuffer value = new StringBuffer(); int state; - Stack complexVStack = new Stack(); + Stack complexVStack = new Stack(); int next = reader.read(); if (next == '{') { diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java index a86a3694b6b..dd146e14eaf 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java @@ -229,7 +229,7 @@ public void addMember(DavResource resource, InputContext inputContext) throws Da */ @Override public DavResourceIterator getMembers() { - List memberList = new ArrayList(); + List memberList = new ArrayList(); try { String[] wsNames = getRepositorySession().getWorkspace().getAccessibleWorkspaceNames(); for (String wsName : wsNames) { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java index 54bd1fd7d71..5248d69098e 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java @@ -44,7 +44,7 @@ public class NamespaceExtractor { private static Logger log = LoggerFactory.getLogger(NamespaceExtractor.class); private final NamespaceMapping mapping = new NamespaceMapping(); - private final Map basePrefixes = new HashMap(); + private final Map basePrefixes = new HashMap(); private String defaultBasePrefix; /** @@ -89,7 +89,7 @@ public void startPrefixMapping(String prefix, String uri) throws SAXException { // if prefix already used if (mapping.hasPrefix(prefix)){ int c; - Integer co = (Integer) basePrefixes.get(prefix); + Integer co = basePrefixes.get(prefix); if (co == null) { basePrefixes.put(prefix, new Integer(1)); c = 1; diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeTemplateImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeTemplateImpl.java index bf1b14fce6f..c7043db09d5 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeTemplateImpl.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeTemplateImpl.java @@ -94,14 +94,14 @@ public class NodeTypeTemplateImpl implements NodeTypeTemplate { NodeDefinition[] nodeDefs = def.getDeclaredChildNodeDefinitions(); if (nodeDefs != null) { - List list = getNodeDefinitionTemplates(); + List list = getNodeDefinitionTemplates(); for (NodeDefinition nodeDef : nodeDefs) { list.add(new NodeDefinitionTemplateImpl(nodeDef, resolver)); } } PropertyDefinition[] propDefs = def.getDeclaredPropertyDefinitions(); if (propDefs != null) { - List list = getPropertyDefinitionTemplates(); + List list = getPropertyDefinitionTemplates(); for (PropertyDefinition propDef : propDefs) { list.add(new PropertyDefinitionTemplateImpl(propDef, resolver)); } @@ -178,7 +178,7 @@ public void setPrimaryItemName(String name) throws ConstraintViolationException /** * {@inheritDoc} */ - public List getPropertyDefinitionTemplates() { + public List getPropertyDefinitionTemplates() { if (propertyDefinitionTemplates == null) { propertyDefinitionTemplates = new LinkedList(); } @@ -188,7 +188,7 @@ public List getPropertyDefinitionTemplates() { /** * {@inheritDoc} */ - public List getNodeDefinitionTemplates() { + public List getNodeDefinitionTemplates() { if (nodeDefinitionTemplates == null) { nodeDefinitionTemplates = new LinkedList(); } diff --git a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java index f0e8602578a..eaad0925adb 100644 --- a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java +++ b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java @@ -82,11 +82,10 @@ public void parse(String input) throws JcrParserException, } // Extract arguments - LinkedList args = this.getArguments(input); + List args = this.getArguments(input); // The first arg is the command name - String cmdName = (String) args.getFirst(); - args.removeFirst(); + String cmdName = args.remove(0); // Get the command line descriptor cl = CommandLineFactory.getInstance().getCommandLine(cmdName); @@ -116,8 +115,8 @@ public void parse(String input) throws JcrParserException, * the user's input * @return a List containing the arguments */ - private LinkedList getArguments(String input) { - LinkedList args = new LinkedList(); + private List getArguments(String input) { + List args = new LinkedList(); int length = input.length(); boolean insideSingleQuote = false; @@ -214,10 +213,9 @@ public Command getCommand() { * @throws JcrParserException * if the user's input is illegal */ - private void populate(CommandLine cl, List valList) + private void populate(CommandLine cl, List valList) throws JcrParserException { - String[] values = (String[]) valList - .toArray(new String[valList.size()]); + String[] values = valList.toArray(new String[valList.size()]); // Command Line parameters Map options = cl.getOptions(); @@ -225,7 +223,7 @@ private void populate(CommandLine cl, List valList) Map clArgs = cl.getArguments(); // Input arguments - List args = new ArrayList(); + List args = new ArrayList(); for (int i = 0; i < values.length; i++) { String value = values[i]; @@ -260,7 +258,7 @@ private void populate(CommandLine cl, List valList) } // set arguments - String[] argValues = (String[]) args.toArray(new String[args.size()]); + String[] argValues = args.toArray(new String[args.size()]); for (int j = 0; j < argValues.length; j++) { Argument arg = (Argument) clArgs.get(new Integer(j)); if (arg == null) { diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchInfo.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchInfo.java index cae113caaa2..0595084b591 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchInfo.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchInfo.java @@ -102,7 +102,7 @@ public SearchInfo(String language, Namespace languageNamespace, String query, this.language = language; this.languageNamespace = languageNamespace; this.query = query; - this.namespaces = Collections.unmodifiableMap(new HashMap(namespaces)); + this.namespaces = Collections.unmodifiableMap(new HashMap(namespaces)); } /** From 39ff25fd8766632e4c1304c923c121a4c5b9d918 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 15:09:06 -0500 Subject: [PATCH 07/27] Use enhanced for loops --- .../data/core/TransactionContext.java | 20 +++-- .../test/api/nodetype/NodeTypeTest.java | 32 ++++---- .../test/api/query/qom/AbstractQOMTest.java | 6 +- .../api/security/AccessControlListTest.java | 73 +++++++++---------- .../api/security/AccessControlPolicyTest.java | 32 ++++---- .../hierarchy/ChildNodeEntriesImpl.java | 6 +- .../state/AbstractItemStateFactory.java | 10 +-- .../jackrabbit/jcr2spi/state/ChangeLog.java | 12 +-- .../constraint/NameConstraintTest.java | 9 +-- .../constraint/ReferenceConstraintTest.java | 9 +-- .../constraint/ValueConstraintTest.java | 39 +++++----- .../jackrabbit/vfs/ext/ds/VFSBackend.java | 5 +- .../webdav/property/AbstractDavProperty.java | 5 +- 13 files changed, 121 insertions(+), 137 deletions(-) diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java index eab8a686c3e..988a5572547 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java @@ -138,14 +138,14 @@ public synchronized void prepare() throws XAException { beforeOperation(); TransactionException txe = null; - for (int i = 0; i < resources.length; i++) { + for (InternalXAResource resource : resources) { try { - resources[i].prepare(this); + resource.prepare(this); } catch (TransactionException e) { txe = e; break; } catch (Exception e) { - txe = new TransactionException("Error while preparing resource " + resources, e); + txe = new TransactionException("Error while preparing resource " + resource, e); break; } } @@ -185,8 +185,7 @@ public synchronized void commit() throws XAException { beforeOperation(); TransactionException txe = null; - for (int i = 0; i < resources.length; i++) { - InternalXAResource resource = resources[i]; + for (InternalXAResource resource : resources) { if (txe != null) { try { resource.rollback(this); @@ -235,8 +234,7 @@ public synchronized void rollback() throws XAException { beforeOperation(); int errors = 0; - for (int i = 0; i < resources.length; i++) { - InternalXAResource resource = resources[i]; + for (InternalXAResource resource : resources) { try { resource.rollback(this); } catch (Exception e) { @@ -259,8 +257,8 @@ public synchronized void rollback() throws XAException { * methods. */ private void beforeOperation() { - for (int i = 0; i < resources.length; i++) { - resources[i].beforeOperation(this); + for (InternalXAResource resource : resources) { + resource.beforeOperation(this); } } @@ -269,8 +267,8 @@ private void beforeOperation() { * methods. */ private void afterOperation() { - for (int i = 0; i < resources.length; i++) { - resources[i].afterOperation(this); + for (InternalXAResource resource : resources) { + resource.afterOperation(this); } } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeTest.java index 955bb67429d..96976e51eea 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeTest.java @@ -18,7 +18,6 @@ import java.util.Arrays; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; import javax.jcr.ItemNotFoundException; @@ -187,8 +186,8 @@ public void testGetSupertypes() NodeType supertypes[] = type.getSupertypes(); boolean hasNTBase = false; - for (int i = 0; i < supertypes.length; i++) { - if (supertypes[i].getName().equals(ntBase)) { + for (NodeType supertype : supertypes) { + if (supertype.getName().equals(ntBase)) { hasNTBase = true; break; } @@ -242,11 +241,10 @@ public void testGetDeclaredSubtypes() subtypeNames.containsAll(declaredSubtypeNames)); // check the reverse relation - for (Iterator it = subtypeNames.iterator(); it.hasNext(); ) { - String subtypename = it.next(); - boolean isDeclared = declaredSubtypeNames.contains(subtypename); + for (String subtypeName : subtypeNames) { + boolean isDeclared = declaredSubtypeNames.contains(subtypeName); - NodeType subtype = manager.getNodeType(subtypename); + NodeType subtype = manager.getNodeType(subtypeName); Set supertypeNames = asSetOfNames(subtype.getSupertypes()); assertTrue(name + " should occur in set of super types: " + supertypeNames, @@ -334,10 +332,10 @@ public void testGetDeclaredPropertyDefs() PropertyDefinition defs[] = type.getPropertyDefinitions(); try { - for (int i = 0; i < declaredDefs.length; i++) { + for (PropertyDefinition declaredDef : declaredDefs) { boolean exists = false; - for (int j = 0; j < defs.length; j++) { - if (defs[j].getName().equals(declaredDefs[i].getName())) { + for (PropertyDefinition def : defs) { + if (def.getName().equals(declaredDef.getName())) { exists = true; break; } @@ -368,8 +366,8 @@ public void testGetPropertyDefs() NodeType type = types.nextNodeType(); PropertyDefinition defs[] = type.getPropertyDefinitions(); boolean hasJCRPrimaryType = false; - for (int i = 0; i < defs.length; i++) { - if (defs[i].getName().equals(jcrPrimaryType)) { + for (PropertyDefinition def : defs) { + if (def.getName().equals(jcrPrimaryType)) { hasJCRPrimaryType = true; break; } @@ -395,10 +393,10 @@ public void testGetDeclaredChildNodeDefs() NodeDefinition defs[] = type.getChildNodeDefinitions(); try { - for (int i = 0; i < declaredDefs.length; i++) { + for (NodeDefinition declaredDef : declaredDefs) { boolean exists = false; - for (int j = 0; j < defs.length; j++) { - if (defs[j].getName().equals(declaredDefs[i].getName())) { + for (NodeDefinition def : defs) { + if (def.getName().equals(declaredDef.getName())) { exists = true; break; } @@ -488,8 +486,8 @@ private Node locateNodeWithoutPrimaryItem(Node node) */ private Set asSetOfNames(NodeType[] types) { Set result = new HashSet(); - for (int i = 0; i < types.length; i++) { - result.add(types[i].getName()); + for (NodeType type : types) { + result.add(type.getName()); } return result; } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java index 7836a6c11a5..470116f90f0 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java @@ -164,13 +164,11 @@ protected void checkResult(QueryResult result, } // check if all expected are in result - for (Iterator it = expectedPaths.iterator(); it.hasNext();) { - String path = it.next(); + for (String path : expectedPaths) { assertTrue(path + " is not part of the result set", resultPaths.contains(path)); } // check result does not contain more than expected - for (Iterator it = resultPaths.iterator(); it.hasNext();) { - String path = it.next(); + for (String path : resultPaths) { assertTrue(path + " is not expected to be part of the result set", expectedPaths.contains(path)); } } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java index a70173a9171..065d55cb9d2 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java @@ -85,8 +85,7 @@ protected void tearDown() throws Exception { // restore original entries (remove others). AccessControlList list = getList(acMgr, path); AccessControlEntry[] entries = list.getAccessControlEntries(); - for (int i = 0; i < entries.length; i++) { - AccessControlEntry ace = entries[i]; + for (AccessControlEntry ace : entries) { if (testPrincipal.equals(ace.getPrincipal())) { list.removeAccessControlEntry(ace); } @@ -113,9 +112,9 @@ private static AccessControlList getList(AccessControlManager acMgr, String path } } AccessControlPolicy[] acps = acMgr.getPolicies(path); - for (int i = 0; i < acps.length; i++) { - if (acps[i] instanceof AccessControlList) { - return (AccessControlList) acps[i] ; + for (AccessControlPolicy acp : acps) { + if (acp instanceof AccessControlList) { + return (AccessControlList) acp; } } throw new NotExecutableException("No AccessControlList at " + path); @@ -124,8 +123,7 @@ private static AccessControlList getList(AccessControlManager acMgr, String path private static List currentPrivileges(AccessControlList acl, Principal principal) throws RepositoryException { List privileges = new ArrayList(); AccessControlEntry[] entries = acl.getAccessControlEntries(); - for (int i = 0; i < entries.length; i++) { - AccessControlEntry ace = entries[i]; + for (AccessControlEntry ace : entries) { if (principal.equals(ace.getPrincipal())) { privileges.addAll(Arrays.asList(ace.getPrivileges())); } @@ -140,9 +138,9 @@ public void testGetAccessControlEntries() throws RepositoryException, AccessDeni // call must succeed. AccessControlEntry[] entries = acl.getAccessControlEntries(); assertNotNull("AccessControlList#getAccessControlEntries must not return null.", entries); - for (int i = 0; i < entries.length; i++) { - assertNotNull("An ACE must contain a principal", entries[i].getPrincipal()); - Privilege[] privs = entries[i].getPrivileges(); + for (AccessControlEntry ace : entries) { + assertNotNull("An ACE must contain a principal", ace.getPrincipal()); + Privilege[] privs = ace.getPrivileges(); assertTrue("An ACE must contain at least a single privilege", privs != null && privs.length > 0); } } @@ -156,10 +154,9 @@ public void testAddAccessControlEntry() throws NotExecutableException, Repositor AccessControlEntry entry = null; if (acl.addAccessControlEntry(testPrincipal, privileges)) { AccessControlEntry[] aces = acl.getAccessControlEntries(); - for (int i = 0; i < aces.length; i++) { - if (aces[i].getPrincipal().equals(testPrincipal) && - Arrays.asList(privileges).equals(Arrays.asList(aces[i].getPrivileges()))) { - entry = aces[i]; + for (AccessControlEntry ace : aces) { + if (ace.getPrincipal().equals(testPrincipal) && Arrays.asList(privileges).equals(Arrays.asList(ace.getPrivileges()))) { + entry = ace; } } if (entry == null) throw new NotExecutableException(); @@ -175,9 +172,9 @@ public void testAddAggregatePrivilege() throws NotExecutableException, Repositor checkCanModifyAc(path); Privilege aggregate = null; - for (int i = 0; i < privs.length; i++) { - if (privs[i].isAggregate()) { - aggregate = privs[i]; + for (Privilege priv : privs) { + if (priv.isAggregate()) { + aggregate = priv; break; } } @@ -199,9 +196,9 @@ public void testAddAggregatedPrivilegesSeparately() throws NotExecutableExceptio checkCanModifyAc(path); Privilege aggregate = null; - for (int i = 0; i < privs.length; i++) { - if (privs[i].isAggregate()) { - aggregate = privs[i]; + for (Privilege priv : privs) { + if (priv.isAggregate()) { + aggregate = priv; break; } } @@ -213,8 +210,8 @@ public void testAddAggregatedPrivilegesSeparately() throws NotExecutableExceptio acl.addAccessControlEntry(testPrincipal, new Privilege[] {aggregate}); Privilege[] privs = aggregate.getAggregatePrivileges(); - for (int i = 0; i < privs.length; i++) { - boolean modified = acl.addAccessControlEntry(testPrincipal, new Privilege[] {privs[i]}); + for (Privilege priv : privs) { + boolean modified = acl.addAccessControlEntry(testPrincipal, new Privilege[] { priv }); assertFalse("Adding the aggregated privs individually later on must not modify the policy", modified); } } @@ -224,9 +221,9 @@ public void testAddAbstractPrivilege() throws NotExecutableException, Repository Privilege abstractPriv = null; Privilege[] allPrivs = acMgr.privilegeFromName(Privilege.JCR_ALL).getAggregatePrivileges(); - for (int i = 0; i < allPrivs.length; i++) { - if (allPrivs[i].isAbstract()) { - abstractPriv = allPrivs[i]; + for (Privilege priv : allPrivs) { + if (priv.isAbstract()) { + abstractPriv = priv; break; } } @@ -251,25 +248,25 @@ public void testAddPrivilegesPresentInEntries() throws NotExecutableException, R Set assignedPrivs = new HashSet(); AccessControlEntry[] entries = acl.getAccessControlEntries(); - for (int i = 0; i < entries.length; i++) { - if (entries[i].getPrincipal().equals(testPrincipal)) { - Privilege[] prvs = entries[i].getPrivileges(); - for (int j = 0; j < prvs.length; j++) { - if (prvs[j].isAggregate()) { - assignedPrivs.addAll(Arrays.asList(prvs[j].getAggregatePrivileges())); + for (AccessControlEntry ace : entries) { + if (ace.getPrincipal().equals(testPrincipal)) { + Privilege[] prvs = ace.getPrivileges(); + for (Privilege prv : prvs) { + if (prv.isAggregate()) { + assignedPrivs.addAll(Arrays.asList(prv.getAggregatePrivileges())); } else { - assignedPrivs.add(prvs[j]); + assignedPrivs.add(prv); } } } } Set expected = new HashSet(); - for (int i = 0; i < privs.length; i++) { - if (privs[i].isAggregate()) { - expected.addAll(Arrays.asList(privs[i].getAggregatePrivileges())); + for (Privilege priv : privs) { + if (priv.isAggregate()) { + expected.addAll(Arrays.asList(priv.getAggregatePrivileges())); } else { - expected.add(privs[i]); + expected.add(priv); } } assertTrue("getAccessControlEntries must contain an entry or entries that grant at least the added privileges.", assignedPrivs.containsAll(expected)); @@ -392,8 +389,8 @@ public void testRemoveAddedAccessControlEntry() throws NotExecutableException, R acl.addAccessControlEntry(testPrincipal, privs); AccessControlEntry[] aces = acl.getAccessControlEntries(); - for (int i = 0; i < aces.length; i++) { - acl.removeAccessControlEntry(aces[i]); + for (AccessControlEntry ace : aces) { + acl.removeAccessControlEntry(ace); } assertEquals("After removing all ACEs the ACL must be empty", 0, acl.getAccessControlEntries().length); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlPolicyTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlPolicyTest.java index 7661351e8c9..814e39b18d3 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlPolicyTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlPolicyTest.java @@ -19,7 +19,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -62,8 +61,7 @@ protected void setUp() throws Exception { protected void tearDown() throws Exception { try { - for (Iterator it = addedPolicies.keySet().iterator(); it.hasNext();) { - String path = it.next(); + for (String path : addedPolicies.keySet()) { AccessControlPolicy policy = addedPolicies.get(path); acMgr.removePolicy(path, policy); } @@ -110,11 +108,11 @@ public void testGetPolicies() throws RepositoryException, AccessDeniedException, AccessControlPolicy[] policies = acMgr.getPolicies(path); assertNotNull("AccessControlManager.getPolicies must never return null.", policies); - for (int i = 0; i < policies.length; i++) { - if (policies[i] instanceof NamedAccessControlPolicy) { - assertNotNull("The name of an NamedAccessControlPolicy must not be null.", ((NamedAccessControlPolicy) policies[i]).getName()); - } else if (policies[i] instanceof AccessControlList) { - assertNotNull("The entries of an AccessControlList must not be null.", ((AccessControlList) policies[i]).getAccessControlEntries()); + for (AccessControlPolicy policy : policies) { + if (policy instanceof NamedAccessControlPolicy) { + assertNotNull("The name of an NamedAccessControlPolicy must not be null.", ((NamedAccessControlPolicy) policy).getName()); + } else if (policy instanceof AccessControlList) { + assertNotNull("The entries of an AccessControlList must not be null.", ((AccessControlList) policy).getAccessControlEntries()); } } } @@ -150,8 +148,8 @@ public void testApplicablePoliciesAreDistintFromSetPolicies() throws RepositoryE } AccessControlPolicy[] policies = acMgr.getPolicies(path); - for (int i = 0; i < policies.length; i++) { - assertFalse("The applicable policies obtained should not be present among the policies obtained through AccessControlManager.getPolicies.", acps.contains(policies[i])); + for (AccessControlPolicy policy : policies) { + assertFalse("The applicable policies obtained should not be present among the policies obtained through AccessControlManager.getPolicies.", acps.contains(policy)); } } @@ -201,9 +199,9 @@ public void testGetPolicyAfterSet() throws RepositoryException, AccessDeniedExce AccessControlPolicy policy = it.nextAccessControlPolicy(); acMgr.setPolicy(path, policy); - AccessControlPolicy[] policies = acMgr.getPolicies(path); - for (int i = 0; i < policies.length; i++) { - if (policy.equals(policies[i])) { + AccessControlPolicy[] plcs = acMgr.getPolicies(path); + for (AccessControlPolicy plc : plcs) { + if (policy.equals(plc)) { // ok return; } @@ -228,8 +226,8 @@ public void testResetPolicy() throws RepositoryException, AccessDeniedException, // access the policies already present at path and test if updating // (resetting) the policies works as well. AccessControlPolicy[] policies = acMgr.getPolicies(path); - for (int i = 0; i < policies.length; i++) { - acMgr.setPolicy(path, policies[i]); + for (AccessControlPolicy policy : policies) { + acMgr.setPolicy(path, policy); } } @@ -342,8 +340,8 @@ public void testRemovePolicy() throws RepositoryException, AccessDeniedException acMgr.removePolicy(path, policy); AccessControlPolicy[] plcs = acMgr.getPolicies(path); - for (int i = 0; i < plcs.length; i++) { - if (plcs[i].equals(policy)) { + for (AccessControlPolicy plc : plcs) { + if (plc.equals(policy)) { fail("RemovePolicy must remove the policy that has been set before."); } } diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java index 8fb4637147e..49e83c47104 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java @@ -753,8 +753,7 @@ private Object get(Name qName) { List l = snsMap.get(qName); if (l != null) { List nodeEntries = new ArrayList(l.size()); - for (Iterator it = l.iterator(); it.hasNext();) { - LinkedEntries.LinkNode ln = it.next(); + for (LinkedEntries.LinkNode ln : l) { nodeEntries.add(ln.getNodeEntry()); } return nodeEntries; @@ -833,8 +832,7 @@ public LinkedEntries.LinkNode getLinkNode(Name name, int index, String uniqueID) // look in snsMap List l = snsMap.get(name); if (l != null) { - for (Iterator it = l.iterator(); it.hasNext();) { - LinkedEntries.LinkNode ln = it.next(); + for (LinkedEntries.LinkNode ln : l) { if (uniqueID.equals(ln.getNodeEntry().getUniqueID())) { return ln; } diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/AbstractItemStateFactory.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/AbstractItemStateFactory.java index 4394c05a7cb..eb9f142aa67 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/AbstractItemStateFactory.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/AbstractItemStateFactory.java @@ -67,11 +67,11 @@ private ItemStateCreationListener[] getListeners() { */ void notifyCreated(ItemState createdState) { ItemStateCreationListener[] listeners = getListeners(); - for (int i = 0; i < listeners.length; i++) { + for (ItemStateCreationListener listener : listeners) { // notify listeners when this item state is saved or invalidated - createdState.addListener(listeners[i]); + createdState.addListener(listener); // now inform about creation - listeners[i].created(createdState); + listener.created(createdState); } } @@ -81,9 +81,9 @@ void notifyCreated(ItemState createdState) { */ void notifyUpdated(ItemState state, int previousStatus) { ItemStateCreationListener[] listeners = getListeners(); - for (int i = 0; i < listeners.length; i++) { + for (ItemStateCreationListener listener : listeners) { // now inform about creation - listeners[i].statusChanged(state, previousStatus); + listener.statusChanged(state, previousStatus); } } } \ No newline at end of file diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java index 0d7356309b0..14a185081b3 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java @@ -84,12 +84,12 @@ public void persisted() throws RepositoryException { List changedPrimaryTypes = new ArrayList(); Operation[] ops = operations.toArray(new Operation[operations.size()]); - for (int i = 0; i < ops.length; i++) { - ops[i].persisted(); - if (ops[i] instanceof SetMixin) { - changedMixins.add(((SetMixin) ops[i]).getNodeState()); - } else if (ops[i] instanceof SetPrimaryType) { - changedPrimaryTypes.add(((SetPrimaryType) ops[i]).getNodeState()); + for (Operation op : ops) { + op.persisted(); + if (op instanceof SetMixin) { + changedMixins.add(((SetMixin) op).getNodeState()); + } else if (op instanceof SetPrimaryType) { + changedPrimaryTypes.add(((SetPrimaryType) op).getNodeState()); } } // process all remaining states that were not covered by the diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/NameConstraintTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/NameConstraintTest.java index f6ecffe4908..933df1e9c89 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/NameConstraintTest.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/NameConstraintTest.java @@ -61,12 +61,11 @@ protected QValue createOtherValueType() throws RepositoryException { public void testGetDefinition() throws RepositoryException { String[] qDefs = getQDefinitions(); - for (int i = 0; i < qDefs.length; i++) { - ValueConstraint vc = createValueConstraint(qDefs[i]); + for (String qDef : qDefs) { + ValueConstraint vc = createValueConstraint(qDef); String jcrConstraint = vc.getDefinition(resolver); - - assertFalse(qDefs[i].equals(jcrConstraint)); - assertEquals(resolver.getJCRName(ValueConstraint.NAME_FACTORY.create(qDefs[i])), jcrConstraint); + assertFalse(qDef.equals(jcrConstraint)); + assertEquals(resolver.getJCRName(ValueConstraint.NAME_FACTORY.create(qDef)), jcrConstraint); } } } diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ReferenceConstraintTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ReferenceConstraintTest.java index 162b74f6b1a..25539a33fa3 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ReferenceConstraintTest.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ReferenceConstraintTest.java @@ -69,12 +69,11 @@ public void testCheckNonMatchingValue() throws RepositoryException { public void testGetDefinition() throws RepositoryException { String[] qDefs = getQDefinitions(); - for (int i = 0; i < qDefs.length; i++) { - ValueConstraint vc = createValueConstraint(qDefs[i]); + for (String qDef : qDefs) { + ValueConstraint vc = createValueConstraint(qDef); String jcrConstraint = vc.getDefinition(resolver); - - assertFalse(qDefs[i].equals(jcrConstraint)); - assertEquals(resolver.getJCRName(ValueConstraint.NAME_FACTORY.create(qDefs[i])), jcrConstraint); + assertFalse(qDef.equals(jcrConstraint)); + assertEquals(resolver.getJCRName(ValueConstraint.NAME_FACTORY.create(qDef)), jcrConstraint); } } } diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ValueConstraintTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ValueConstraintTest.java index 6453ceabef1..2b654aaea59 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ValueConstraintTest.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ValueConstraintTest.java @@ -88,17 +88,17 @@ public void testCreateFromNull() { public void testCreateValueConstraints() throws RepositoryException { String[] defs = getDefinitions(); - for (int i = 0; i < defs.length; i++) { - ValueConstraint vc = createValueConstraint(defs[i], resolver); - assertEquals(defs[i], vc.getDefinition(resolver)); + for (String def : defs) { + ValueConstraint vc = createValueConstraint(def, resolver); + assertEquals(def, vc.getDefinition(resolver)); } } public void testCreateValueConstraints2() throws RepositoryException { String[] qDefs = getQDefinitions(); - for (int i = 0; i < qDefs.length; i++) { - ValueConstraint vc = createValueConstraint(qDefs[i]); - assertEquals(qDefs[i], vc.getString()); + for (String qDef : qDefs) { + ValueConstraint vc = createValueConstraint(qDef); + assertEquals(qDef, vc.getString()); } } @@ -118,26 +118,26 @@ public void testCreateInvalidValueConstraints() throws RepositoryException { public void testGetDefinition() throws RepositoryException { String[] qDefs = getQDefinitions(); - for (int i = 0; i < qDefs.length; i++) { - ValueConstraint vc = createValueConstraint(qDefs[i]); + for (String qDef : qDefs) { + ValueConstraint vc = createValueConstraint(qDef); String jcrConstraint = vc.getDefinition(resolver); assertNotNull(jcrConstraint); - assertEquals(qDefs[i], jcrConstraint); + assertEquals(qDef, jcrConstraint); } } public void testGetString() throws RepositoryException { String[] qDefs = getQDefinitions(); - for (int i = 0; i < qDefs.length; i++) { - ValueConstraint vc = createValueConstraint(qDefs[i]); - assertEquals(qDefs[i], vc.getString()); + for (String qDef : qDefs) { + ValueConstraint vc = createValueConstraint(qDef); + assertEquals(qDef, vc.getString()); } } public void testCheckNullValue() throws RepositoryException { String[] qDefs = getQDefinitions(); - for (int i = 0; i < qDefs.length; i++) { - ValueConstraint vc = createValueConstraint(qDefs[i]); + for (String qDef : qDefs) { + ValueConstraint vc = createValueConstraint(qDef); try { vc.check(null); fail("ValueConstraint.check(null) should throw ConstraintViolationException."); @@ -169,8 +169,8 @@ public void testCheckNonMatchingValue() throws RepositoryException { public void testCheckWrongValueType() throws RepositoryException { QValue val = createOtherValueType(); String[] qDefs = getQDefinitions(); - for (int i = 0; i < qDefs.length; i++) { - ValueConstraint vc = createValueConstraint(qDefs[i]); + for (String qDef : qDefs) { + ValueConstraint vc = createValueConstraint(qDef); try { vc.check(val); fail("ValueConstraint.check() with non-matching value should throw ConstraintViolationException."); @@ -182,11 +182,10 @@ public void testCheckWrongValueType() throws RepositoryException { public void testEquals() throws RepositoryException { String[] qDefs = getQDefinitions(); - for (int i = 0; i < qDefs.length; i++) { - ValueConstraint vc = createValueConstraint(qDefs[i]); - ValueConstraint vc2 = createValueConstraint(qDefs[i]); + for (String qDef : qDefs) { + ValueConstraint vc = createValueConstraint(qDef); + ValueConstraint vc2 = createValueConstraint(qDef); assertEquals(vc, vc2); - vc2 = createValueConstraint(vc.getString()); assertEquals(vc, vc2); } diff --git a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSBackend.java b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSBackend.java index 3b2a7f92a1e..5515bb7548e 100644 --- a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSBackend.java +++ b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSBackend.java @@ -349,9 +349,8 @@ protected FileObject getExistingFileObject(DataIdentifier identifier) throws Dat FileObject tempFileObject = getBaseFolderObject(); try { - for (int i = 0; i < segments.length; i++) { - tempFileObject = tempFileObject.getChild(segments[i]); - + for (String segment : segments) { + tempFileObject = tempFileObject.getChild(segment); if (tempFileObject == null) { return null; } diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java index 45d3f9ddceb..2fabcb4c352 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java @@ -118,8 +118,9 @@ public Element toXml(Document document) { Node n = document.importNode((Node)value, true); elem.appendChild(n); } else if (value instanceof Node[]) { - for (int i = 0; i < ((Node[])value).length; i++) { - Node n = document.importNode(((Node[])value)[i], true); + Node[] nodes = (Node[]) value; + for (Node node : nodes) { + Node n = document.importNode(node, true); elem.appendChild(n); } } else if (value instanceof Collection) { From fecd057c0491a7867fab167b85c163aca2f97b44 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 16:05:23 -0500 Subject: [PATCH 08/27] Use StringBuilder rather than StringBuffer if synchronization is unnecessary StringBuilder is generally to be preferred over StringBuffer where synchronization is not necessary. Other efficiency improvements: * Use append(char) when only one character is appended * Chain append() calls rather than append a string concatenation * Append subsequences directly to avoid creating a new object * Re-use StringBuilders rather than create new ones --- .../apache/jackrabbit/core/ItemManager.java | 4 +- .../core/query/lucene/AbstractExcerpt.java | 2 +- .../core/query/lucene/AggregateRuleImpl.java | 2 +- .../core/query/lucene/CaseTermQuery.java | 12 ++-- .../core/query/lucene/ChildAxisQuery.java | 4 +- .../core/query/lucene/DateField.java | 4 +- .../core/query/lucene/DefaultHighlighter.java | 6 +- .../core/query/lucene/DerefQuery.java | 4 +- .../query/lucene/DescendantSelfAxisQuery.java | 4 +- .../jackrabbit/core/query/lucene/DocId.java | 12 ++-- .../core/query/lucene/DocNumberCache.java | 6 +- .../core/query/lucene/DoubleField.java | 2 +- .../lucene/IndexingConfigurationImpl.java | 2 +- .../query/lucene/JackrabbitQueryParser.java | 4 +- .../core/query/lucene/LongField.java | 2 +- .../core/query/lucene/LuceneQueryBuilder.java | 6 +- .../core/query/lucene/LuceneQueryFactory.java | 4 +- .../core/query/lucene/MoreLikeThis.java | 16 ++--- .../core/query/lucene/MultiIndex.java | 12 ++-- .../core/query/lucene/NameRangeQuery.java | 2 +- .../core/query/lucene/OffsetCharSequence.java | 2 +- .../core/query/lucene/ParentAxisQuery.java | 2 +- .../query/lucene/PredicateDerefQuery.java | 4 +- .../core/query/lucene/RangeQuery.java | 8 +-- .../core/query/lucene/ScoreNode.java | 8 +-- .../query/lucene/SimpleExcerptProvider.java | 6 +- .../jackrabbit/core/query/lucene/Util.java | 2 +- .../query/lucene/WeightedHighlighter.java | 6 +- .../core/query/lucene/WildcardNameQuery.java | 6 +- .../core/query/lucene/WildcardQuery.java | 2 +- .../core/query/lucene/WildcardTermEnum.java | 6 +- .../token/CompatTokenProvider.java | 2 +- .../principalbased/ACLEditor.java | 4 +- .../core/AbstractConcurrencyTest.java | 2 +- .../core/CachingHierarchyManagerTest.java | 2 +- .../core/integration/AxisQueryTest.java | 4 +- .../random/operation/Operation.java | 2 +- .../core/query/AbstractQueryTest.java | 6 +- .../core/query/FulltextQueryTest.java | 4 +- .../core/query/UpperLowerCaseQueryTest.java | 6 +- .../query/lucene/TextExtractionQueryTest.java | 4 +- .../jackrabbit/commons/AbstractNode.java | 2 +- .../jackrabbit/commons/AbstractProperty.java | 2 +- .../commons/cnd/CompactNodeTypeDefWriter.java | 2 +- .../commons/cnd/ParseException.java | 7 ++- .../jackrabbit/commons/json/JsonParser.java | 12 ++-- .../jackrabbit/commons/json/JsonUtil.java | 2 +- .../apache/jackrabbit/commons/query/GQL.java | 48 +++++++-------- .../org/apache/jackrabbit/util/ISO9075.java | 10 ++-- .../jackrabbit/server/io/ZipHandler.java | 2 +- .../server/remoting/davex/DiffParser.java | 18 +++--- .../remoting/davex/JsonDiffHandler.java | 6 +- .../webdav/jcr/DavLocatorFactoryImpl.java | 2 +- .../webdav/jcr/DefaultItemCollection.java | 4 +- .../jcr/VersionControlledItemCollection.java | 2 +- .../version/VersionHistoryItemCollection.java | 2 +- .../jcr/version/VersionItemCollection.java | 2 +- .../webdav/simple/LocatorFactoryImpl.java | 2 +- .../simple/VersionControlledResourceImpl.java | 2 +- .../jackrabbit/test/AbstractJCRTest.java | 2 +- .../org/apache/jackrabbit/test/ISO8601.java | 6 +- .../jackrabbit/test/api/EscapeJCRUtil.java | 18 +++--- .../test/api/ExportDocViewTest.java | 6 +- .../api/NodeDiscoveringNodeTypesTest.java | 4 +- .../test/api/NodeReadMethodsTest.java | 4 +- .../test/api/SessionReadMethodsTest.java | 8 +-- .../jackrabbit/test/api/TreeComparator.java | 10 ++-- .../test/api/nodetype/NodeTypeUtil.java | 10 ++-- .../api/nodetype/PredefinedNodeTypeTest.java | 2 +- .../test/api/query/AbstractQueryTest.java | 4 +- .../test/api/query/DerefQueryLevel1Test.java | 6 +- .../test/api/query/SQLJoinTest.java | 32 +++++----- .../test/api/query/SQLOrderByTest.java | 2 +- .../test/api/query/SQLQueryLevel2Test.java | 6 +- .../test/api/query/XPathPosIndexTest.java | 2 +- .../test/api/query/qom/AbstractQOMTest.java | 16 ++--- .../test/api/query/qom/NodeLocalNameTest.java | 4 +- .../test/api/query/qom/NodeNameTest.java | 4 +- .../jackrabbit/test/api/util/ISO9075.java | 10 ++-- .../apache/jackrabbit/test/api/util/Text.java | 36 +++++------ .../test/api/version/MergeActivityTest.java | 6 +- .../test/api/version/MergeShallowTest.java | 12 ++-- .../test/api/version/simple/RestoreTest.java | 50 ++++++++-------- .../jcr2spi/nodetype/BitsetENTCacheImpl.java | 6 +- .../jcr2spi/nodetype/DefinitionValidator.java | 18 +++--- .../jcr2spi/nodetype/NodeTypeManagerImpl.java | 60 ++++++++++--------- .../nodetype/NodeTypeRegistryImpl.java | 12 ++-- .../jcr2spi/observation/EventImpl.java | 2 +- .../jackrabbit/jcr2spi/util/LogUtil.java | 2 +- .../jcr2spi/xml/TargetImportHandler.java | 2 +- .../jcr2spi/AbstractJCR2SPITest.java | 2 +- .../spi/commons/EventFilterImpl.java | 6 +- .../jackrabbit/spi/commons/EventImpl.java | 6 +- .../spi/commons/batch/AbstractChangeLog.java | 2 +- .../conversion/ParsingPathResolver.java | 2 +- .../commons/identifier/AbstractIdFactory.java | 4 +- .../spi/commons/logging/Slf4jLogWriter.java | 8 +-- .../spi/commons/logging/WriterLogWriter.java | 8 +-- .../jackrabbit/spi/commons/name/Pattern.java | 36 +++++------ .../nodetype/constraint/PathConstraint.java | 2 +- .../commons/query/sql/JCRSQLQueryBuilder.java | 2 +- .../spi/commons/query/sql/ParseException.java | 6 +- .../spi/commons/query/sql/TokenMgrError.java | 4 +- .../jackrabbit/spi/commons/name/JcrName.java | 2 +- .../jackrabbit/spi/commons/name/JcrPath.java | 2 +- .../jackrabbit/spi/commons/name/PathTest.java | 6 +- .../constraint/DateConstraintTest.java | 6 +- .../spi/commons/query/sql2/ParserTest.java | 2 +- .../jackrabbit/spi2davex/ChildInfoImpl.java | 8 +-- .../spi2davex/ItemInfoJSONHandler.java | 2 +- .../jackrabbit/standalone/cli/JcrParser.java | 14 +++-- .../jackrabbit/standalone/cli/info/Help.java | 2 +- .../standalone/cli/info/PrintHelper.java | 2 +- .../jackrabbit/j2ee/AbstractConfig.java | 4 +- .../webdav/AbstractLocatorFactory.java | 4 +- .../jackrabbit/webdav/DavCompliance.java | 4 +- .../jackrabbit/webdav/header/IfHeader.java | 8 +-- .../jackrabbit/webdav/util/EncodeUtil.java | 2 +- .../apache/jackrabbit/webdav/xml/DomUtil.java | 10 ++-- 119 files changed, 436 insertions(+), 417 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java index 7b1ca35b7cc..1fbe82b0186 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java @@ -1047,7 +1047,7 @@ public void itemDestroyed(ItemId id, ItemData data) { */ public synchronized String toString() { StringBuilder builder = new StringBuilder(); - builder.append("ItemManager (" + super.toString() + ")\n"); + builder.append("ItemManager (").append(super.toString()).append(")\n"); builder.append("Items in cache:\n"); synchronized (itemCache) { for (ItemId id : itemCache.keySet()) { @@ -1062,7 +1062,7 @@ public synchronized String toString() { } else { builder.append(" "); } - builder.append(id + "\t" + safeGetJCRPath(id) + " (" + item + ")\n"); + builder.append(id).append('\t').append(safeGetJCRPath(id)).append(" (").append(item).append(")\n"); } } return builder.toString(); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java index 7113ea08846..4568e066604 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java @@ -110,7 +110,7 @@ public String getExcerpt(NodeId id, int maxFragments, int maxFragmentSize) exProvider.init(query, index); return exProvider.getExcerpt(id, maxFragments, maxFragmentSize); } - StringBuffer text = new StringBuffer(); + StringBuilder text = new StringBuilder(); String separator = ""; for (int i = 0; i < fields.length; i++) { if (fields[i].stringValue().length() == 0) { diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java index b6303b7e7c2..350e757173e 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java @@ -345,7 +345,7 @@ private long getRecursiveAggregationLimit(Node config) * @return the text content of the node. */ private static String getTextContent(Node node) { - StringBuffer content = new StringBuffer(); + StringBuilder content = new StringBuilder(); NodeList nodes = node.getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) { Node n = nodes.item(i); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java index 6b21326bdf8..29e7fc286ac 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java @@ -61,7 +61,7 @@ protected FilteredTermEnum getEnum(IndexReader reader) throws IOException { /** Prints a user-readable version of this query. */ @Override public String toString(String field) { - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); if (!term.field().equals(field)) { buffer.append(term.field()); buffer.append(':'); @@ -107,23 +107,25 @@ private final class CaseTermEnum extends FilteredTermEnum { // character of the value. if (term.text().length() > nameLength) { // start with initial lower case - StringBuffer lowerLimit = new StringBuffer(propName); + StringBuilder lowerLimit = new StringBuilder(propName); String termStr = termText.toString(); String upperTermStr = termStr.toUpperCase(); String lowerTermStr = termStr.toLowerCase(); lowerLimit.append(upperTermStr); lowerLimit.setCharAt(nameLength, Character.toLowerCase(lowerLimit.charAt(nameLength))); - StringBuffer upperLimit = new StringBuffer(propName); + StringBuilder upperLimit = new StringBuilder(propName); upperLimit.append(lowerTermStr); rangeScans.add(new RangeScan(reader, new Term(term.field(), lowerLimit.toString()), new Term(term.field(), upperLimit.toString()))); // second scan with upper case start - lowerLimit = new StringBuffer(propName); + lowerLimit.setLength(0); + lowerLimit.append(propName); lowerLimit.append(upperTermStr); - upperLimit = new StringBuffer(propName); + upperLimit.setLength(0); + upperLimit.append(propName); upperLimit.append(lowerTermStr); upperLimit.setCharAt(nameLength, Character.toUpperCase(upperLimit.charAt(nameLength))); rangeScans.add(new RangeScan(reader, diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java index c442db451a8..71843c20f03 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java @@ -239,7 +239,7 @@ public Query rewrite(IndexReader reader) throws IOException { * {@inheritDoc} */ public String toString(String field) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("ChildAxisQuery("); sb.append(contextQuery); sb.append(", "); @@ -248,7 +248,7 @@ public String toString(String field) { sb.append(", "); sb.append(position); } - sb.append(")"); + sb.append(')'); return sb.toString(); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java index 7342f9710cc..50bd5694c73 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java @@ -94,9 +94,9 @@ public static String timeToString(long time) { // Pad with leading zeros if (s.length() < DATE_LEN) { - StringBuffer sb = new StringBuffer(s); + StringBuilder sb = new StringBuilder(s); while (sb.length() < DATE_LEN) { - sb.insert(0, 0); + sb.insert(0, '0'); } s = sb.toString(); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java index 4408c26f3ad..d8c2ebe534a 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java @@ -305,7 +305,7 @@ protected String mergeFragments(TermVectorOffsetInfo[] offsets, // merge #maxFragments fragments StringReader reader = new StringReader(text); - StringBuffer sb = new StringBuffer(excerptStart); + StringBuilder sb = new StringBuilder(excerptStart); int pos = 0; char[] cbuf; int skip; @@ -461,12 +461,12 @@ protected String createDefaultExcerpt(String text, String fragmentEnd, int maxLength) throws IOException { StringReader reader = new StringReader(text); - StringBuffer excerpt = new StringBuffer(excerptStart); + StringBuilder excerpt = new StringBuilder(excerptStart); excerpt.append(fragmentStart); int min = excerpt.length(); char[] buf = new char[maxLength]; int len = reader.read(buf); - StringBuffer tmp = new StringBuffer(); + StringBuilder tmp = new StringBuilder(); tmp.append(buf, 0, len); if (len == buf.length) { for (int i = tmp.length() - 1; i > min; i--) { diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java index 86d3c8624c3..9127ba99781 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java @@ -114,14 +114,14 @@ public Weight createWeight(Searcher searcher) { * @return 'DerefQuery'. */ public String toString(String field) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("DerefQuery("); sb.append(refProperty); sb.append(", "); sb.append(contextQuery); sb.append(", "); sb.append(nameTest); - sb.append(")"); + sb.append(')'); return sb.toString(); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java index 1318b93a1c9..541994cdb3b 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java @@ -183,14 +183,14 @@ public Weight createWeight(Searcher searcher) { * {@inheritDoc} */ public String toString(String field) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("DescendantSelfAxisQuery("); sb.append(contextQuery); sb.append(", "); sb.append(subQuery); sb.append(", "); sb.append(minLevels); - sb.append(")"); + sb.append(')'); return sb.toString(); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocId.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocId.java index 26055a02900..8b28a8a272e 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocId.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocId.java @@ -368,14 +368,16 @@ boolean isValid(BitSet deleted) { * @return a String representation for this DocId. */ public String toString() { - StringBuffer sb = new StringBuffer("MultiUUIDDocId("); - String separator = ""; + StringBuilder sb = new StringBuilder("MultiUUIDDocId("); + boolean first = true; for (UUIDDocId docId : docIds) { - sb.append(separator); - separator = ", "; + if (!first) { + sb.append(", "); + } sb.append(docId.id); + first = false; } - sb.append(")"); + sb.append(')'); return sb.toString(); } } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java index bc1c74c1434..52ffa585001 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java @@ -141,17 +141,17 @@ Entry get(String uuid) { if (misses != 0) { ratio -= misses * 100L / accesses; } - StringBuffer statistics = new StringBuffer(); + StringBuilder statistics = new StringBuilder(); int inUse = 0; for (LRUMap docNumber : docNumbers) { inUse += docNumber.size(); } statistics.append("size=").append(inUse); - statistics.append("/").append(docNumbers[0].maxSize() * CACHE_SEGMENTS); + statistics.append('/').append(docNumbers[0].maxSize() * CACHE_SEGMENTS); statistics.append(", #accesses=").append(accesses); statistics.append(", #hits=").append((accesses - misses)); statistics.append(", #misses=").append(misses); - statistics.append(", cacheRatio=").append(ratio).append("%"); + statistics.append(", cacheRatio=").append(ratio).append('%'); log.info(statistics.toString()); accesses = 0; misses = 0; diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DoubleField.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DoubleField.java index 1e132ede91f..723a79934a1 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DoubleField.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DoubleField.java @@ -33,7 +33,7 @@ private DoubleField() { public static String doubleToString(double value) { long longValue = Double.doubleToLongBits(value); - StringBuffer sb = new StringBuffer(STRING_DOUBLE_LEN); + StringBuilder sb = new StringBuilder(STRING_DOUBLE_LEN); if ((longValue & SIGN_MASK) == 0) { // positive diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java index 479e5503695..b3013468539 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java @@ -577,7 +577,7 @@ private PathExpression getCondition(Node config) * @return the text content of the node. */ private static String getTextContent(Node node) { - StringBuffer content = new StringBuffer(); + StringBuilder content = new StringBuilder(); NodeList nodes = node.getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) { Node n = nodes.item(i); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitQueryParser.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitQueryParser.java index dff9dcdd798..8246d424de2 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitQueryParser.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitQueryParser.java @@ -70,7 +70,7 @@ public JackrabbitQueryParser(String fieldName, */ public Query parse(String textsearch) throws ParseException { // replace escaped ' with just ' - StringBuffer rewritten = new StringBuffer(); + StringBuilder rewritten = new StringBuilder(textsearch.length()); // the default lucene query parser recognizes 'AND' and 'NOT' as // keywords. textsearch = textsearch.replaceAll("AND", "and"); @@ -211,7 +211,7 @@ protected Query getWildcardQuery(String field, String termStr) * @return the translated String. */ private String translateWildcards(String input) { - StringBuffer translated = new StringBuffer(input.length()); + StringBuilder translated = new StringBuilder(input.length()); boolean escaped = false; for (int i = 0; i < input.length(); i++) { if (input.charAt(i) == '\\') { diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LongField.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LongField.java index b003f82c43b..c9732f005fb 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LongField.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LongField.java @@ -28,7 +28,7 @@ private LongField() { } public static String longToString(long value) { - StringBuffer sb = new StringBuffer(STRING_LONG_LEN); + StringBuilder sb = new StringBuilder(STRING_LONG_LEN); if (value < 0) { // shift value value += Long.MAX_VALUE; diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java index 9dba968e8ce..decde2ffa28 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java @@ -237,7 +237,7 @@ public static Query createQuery(QueryRootNode root, Query q = builder.createLuceneQuery(); if (builder.exceptions.size() > 0) { - StringBuffer msg = new StringBuffer(); + StringBuilder msg = new StringBuilder(); for (Exception exception : builder.exceptions) { msg.append(exception.toString()).append('\n'); } @@ -415,9 +415,9 @@ public Object visit(TextsearchQueryNode node, Object data) { } else { // final path element is a property name Name propName = relPath.getName(); - StringBuffer tmp = new StringBuffer(); + StringBuilder tmp = new StringBuilder(); tmp.append(nsMappings.getPrefix(propName.getNamespaceURI())); - tmp.append(":").append(FieldNames.FULLTEXT_PREFIX); + tmp.append(':').append(FieldNames.FULLTEXT_PREFIX); tmp.append(propName.getLocalName()); fieldname = tmp.toString(); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java index fb8fb21c9fd..6e95276eabf 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java @@ -318,9 +318,9 @@ public Query create(FullTextSearchImpl fts) throws RepositoryException { } else { // final path element is a property name Name propName = fts.getPropertyQName(); - StringBuffer tmp = new StringBuffer(); + StringBuilder tmp = new StringBuilder(); tmp.append(nsMappings.getPrefix(propName.getNamespaceURI())); - tmp.append(":").append(FieldNames.FULLTEXT_PREFIX); + tmp.append(':').append(FieldNames.FULLTEXT_PREFIX); tmp.append(propName.getLocalName()); fieldname = tmp.toString(); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MoreLikeThis.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MoreLikeThis.java index eb0ed9ce966..36d0f9cd119 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MoreLikeThis.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MoreLikeThis.java @@ -650,10 +650,10 @@ private PriorityQueue createQueue(Map words) throws IOException { * Describe the parameters that control how the "more like this" query is formed. */ public String describeParams() { - StringBuffer sb = new StringBuffer(); - sb.append("\tmaxQueryTerms : ").append(maxQueryTerms).append("\n"); - sb.append("\tminWordLen : ").append(minWordLen).append("\n"); - sb.append("\tmaxWordLen : ").append(maxWordLen).append("\n"); + StringBuilder sb = new StringBuilder(); + sb.append("\tmaxQueryTerms : ").append(maxQueryTerms).append('\n'); + sb.append("\tminWordLen : ").append(minWordLen).append('\n'); + sb.append("\tmaxWordLen : ").append(maxWordLen).append('\n'); sb.append("\tfieldNames : "); String delim = ""; for (int i = 0; i < fieldNames.length; i++) { @@ -661,10 +661,10 @@ public String describeParams() { sb.append(delim).append(fieldName); delim = ", "; } - sb.append("\n"); - sb.append("\tboost : ").append(boost).append("\n"); - sb.append("\tminTermFreq : ").append(minTermFreq).append("\n"); - sb.append("\tminDocFreq : ").append(minDocFreq).append("\n"); + sb.append('\n'); + sb.append("\tboost : ").append(boost).append('\n'); + sb.append("\tminTermFreq : ").append(minTermFreq).append('\n'); + sb.append("\tminDocFreq : ").append(minDocFreq).append('\n'); return sb.toString(); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java index 0171dde47c2..ec0b2f1f72b 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java @@ -1650,7 +1650,7 @@ public void execute(MultiIndex index) throws IOException { * @inheritDoc */ public String toString() { - StringBuffer logLine = new StringBuffer(); + StringBuilder logLine = new StringBuilder(); logLine.append(Long.toString(getTransactionId())); logLine.append(' '); logLine.append(Action.ADD_INDEX); @@ -1742,7 +1742,7 @@ public void execute(MultiIndex index) throws IOException { * @inheritDoc */ public String toString() { - StringBuffer logLine = new StringBuffer(ENTRY_LENGTH); + StringBuilder logLine = new StringBuilder(ENTRY_LENGTH); logLine.append(Long.toString(getTransactionId())); logLine.append(' '); logLine.append(Action.ADD_NODE); @@ -1858,7 +1858,7 @@ public void undo(MultiIndex index) throws IOException { * @inheritDoc */ public String toString() { - StringBuffer logLine = new StringBuffer(); + StringBuilder logLine = new StringBuilder(); logLine.append(Long.toString(getTransactionId())); logLine.append(' '); logLine.append(Action.CREATE_INDEX); @@ -1933,7 +1933,7 @@ public void execute(MultiIndex index) throws IOException { * @inheritDoc */ public String toString() { - StringBuffer logLine = new StringBuffer(); + StringBuilder logLine = new StringBuilder(); logLine.append(Long.toString(getTransactionId())); logLine.append(' '); logLine.append(Action.DELETE_INDEX); @@ -2021,7 +2021,7 @@ public void execute(MultiIndex index) throws IOException { * @inheritDoc */ public String toString() { - StringBuffer logLine = new StringBuffer(ENTRY_LENGTH); + StringBuilder logLine = new StringBuilder(ENTRY_LENGTH); logLine.append(Long.toString(getTransactionId())); logLine.append(' '); logLine.append(Action.DELETE_NODE); @@ -2124,7 +2124,7 @@ public void execute(MultiIndex index) throws IOException { * @inheritDoc */ public String toString() { - StringBuffer logLine = new StringBuffer(); + StringBuilder logLine = new StringBuilder(); logLine.append(Long.toString(getTransactionId())); logLine.append(' '); logLine.append(Action.VOLATILE_COMMIT); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NameRangeQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NameRangeQuery.java index 5232ae926d0..bf47cb86b13 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NameRangeQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NameRangeQuery.java @@ -118,7 +118,7 @@ public Query rewrite(IndexReader reader) throws IOException { * {@inheritDoc} */ public String toString(String field) { - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); buffer.append("name():"); buffer.append(inclusive ? "[" : "{"); buffer.append(lowerName != null ? lowerName.toString() : "null"); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/OffsetCharSequence.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/OffsetCharSequence.java index ddebe7f4791..0fbf8ca7a57 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/OffsetCharSequence.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/OffsetCharSequence.java @@ -111,7 +111,7 @@ public String toString() { return base.subSequence(offset, base.length()).toString(); } else { int len = length(); - StringBuffer buf = new StringBuffer(len); + StringBuilder buf = new StringBuilder(len); for (int i = 0; i < len; i++) { buf.append(charAt(i)); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ParentAxisQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ParentAxisQuery.java index 03765d23c38..6d3f95a14f1 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ParentAxisQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ParentAxisQuery.java @@ -121,7 +121,7 @@ public Query rewrite(IndexReader reader) throws IOException { * @return 'ParentAxisQuery'. */ public String toString(String field) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("ParentAxisQuery("); sb.append(contextQuery); sb.append(", "); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java index b09d829812c..4627d1de9fe 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java @@ -111,14 +111,14 @@ public Weight createWeight(Searcher searcher) { * @return 'DerefQuery'. */ public String toString(String field) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("PredicateDerefQuery("); sb.append(subQuery); sb.append(", "); sb.append(nameTest); sb.append(", "); sb.append(refProperty); - sb.append(")"); + sb.append(')'); return sb.toString(); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java index c227dc58fca..e47648e677c 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java @@ -185,7 +185,7 @@ public Weight createWeight(Searcher searcher) { * @return a string representation of this query. */ public String toString(String field) { - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); if (!getField().equals(field)) { buffer.append(getField()); buffer.append(":"); @@ -334,7 +334,7 @@ private final class RangeQueryScorer extends Scorer { PerQueryCache cache) { super(similarity); this.reader = reader; - StringBuffer key = new StringBuffer(); + StringBuilder key = new StringBuilder(); key.append(lowerTerm != null ? lowerTerm.field() : upperTerm.field()); key.append('\uFFFF'); key.append(lowerTerm != null ? lowerTerm.text() : ""); @@ -435,8 +435,8 @@ private void calculateHits() throws IOException { startTerms.add(lowerTerm); } else { // first enumerate terms using lower case start character - StringBuffer termText = new StringBuffer(propNameLength + 1); - termText.append(lowerTerm.text().subSequence(0, propNameLength)); + StringBuilder termText = new StringBuilder(propNameLength + 1); + termText.append(lowerTerm.text(), 0, propNameLength); char startCharacter = lowerTerm.text().charAt(propNameLength); termText.append(Character.toLowerCase(startCharacter)); startTerms.add(new Term(lowerTerm.field(), termText.toString())); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ScoreNode.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ScoreNode.java index c0919b9f6fe..2d769e05465 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ScoreNode.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ScoreNode.java @@ -117,14 +117,14 @@ public int getDoc(IndexReader reader) throws IOException { } public String toString() { - StringBuffer sb = new StringBuffer(id.toString()); - sb.append("("); + StringBuilder sb = new StringBuilder(id.toString()); + sb.append('('); if (doc != -1) { sb.append(doc); } else { - sb.append("?"); + sb.append('?'); } - sb.append(")"); + sb.append(')'); return sb.toString(); } } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SimpleExcerptProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SimpleExcerptProvider.java index 06ff2e29211..c6c751937fe 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SimpleExcerptProvider.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SimpleExcerptProvider.java @@ -56,7 +56,7 @@ public void init(Query query, SearchIndex index) throws IOException { */ public String getExcerpt(NodeId id, int maxFragments, int maxFragmentSize) throws IOException { - StringBuffer text = new StringBuffer(); + StringBuilder text = new StringBuilder(); try { NodeState nodeState = (NodeState) ism.getItemState(id); String separator = ""; @@ -85,6 +85,8 @@ public String getExcerpt(NodeId id, int maxFragments, int maxFragmentSize) } text.append(" ..."); } - return "" + text.toString() + ""; + text.insert(0, ""); + text.append(""); + return text.toString(); } } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java index e8fe0bf4907..ec05c92a086 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java @@ -381,7 +381,7 @@ public static Pattern createRegexp(String likePattern) { // - escape all non alphabetic characters // - escape constructs like \ into \\ // - replace non escaped _ % into . and .* - StringBuffer regexp = new StringBuffer(); + StringBuilder regexp = new StringBuilder(); boolean escaped = false; for (int i = 0; i < likePattern.length(); i++) { if (likePattern.charAt(i) == '\\') { diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WeightedHighlighter.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WeightedHighlighter.java index da8d555cb8a..50daddd33dc 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WeightedHighlighter.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WeightedHighlighter.java @@ -182,7 +182,7 @@ protected String mergeFragments(TermVectorOffsetInfo[] offsets, } // create excerpts - StringBuffer sb = new StringBuffer(excerptStart); + StringBuilder sb = new StringBuilder(excerptStart); it = infos.iterator(); while (it.hasNext()) { FragmentInfo fi = it.next(); @@ -226,7 +226,7 @@ protected String mergeFragments(TermVectorOffsetInfo[] offsets, * @return the length of the start fragment that was appended to * sb. */ - private int startFragment(StringBuffer sb, String text, int offset, int limit) { + private int startFragment(StringBuilder sb, String text, int offset, int limit) { if (limit == 0) { // append all sb.append(escape(text.substring(0, offset))); @@ -259,7 +259,7 @@ private int startFragment(StringBuffer sb, String text, int offset, int limit) { * @param offset the end offset of the last matching term in the fragment. * @param limit do not go further than limit. */ - private void endFragment(StringBuffer sb, String text, int offset, int limit) { + private void endFragment(StringBuilder sb, String text, int offset, int limit) { if (limit == text.length()) { // append all sb.append(escape(text.substring(offset))); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardNameQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardNameQuery.java index cb6ba646174..005de4819c7 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardNameQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardNameQuery.java @@ -58,7 +58,7 @@ private static String convertPattern(String pattern, if (idx != -1) { prefix = pattern.substring(0, idx); } - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); // translate prefix try { sb.append(nsMappings.getPrefix(resolver.getURI(prefix))); @@ -68,9 +68,9 @@ private static String convertPattern(String pattern, // -> ignore and use empty string for index internal prefix // this will not match anything } - sb.append(":"); + sb.append(':'); // remaining pattern, may also be whole pattern - sb.append(pattern.substring(idx + 1)); + sb.append(pattern, idx + 1, pattern.length()); return sb.toString(); } } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java index 1c1dfdbddad..c359b474ab1 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java @@ -210,7 +210,7 @@ protected FilteredTermEnum getEnum(IndexReader reader) /** Prints a user-readable version of this query. */ @Override public String toString(String field) { - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); buffer.append(field); buffer.append(':'); buffer.append(ToStringUtils.boost(getBoost())); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardTermEnum.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardTermEnum.java index 7eadf50d7d0..ee17e25c3df 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardTermEnum.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardTermEnum.java @@ -207,11 +207,11 @@ public LowerUpperCaseTermEnum(IndexReader reader, new Term(field, prefix), new Term(field, limit))); } else { // start with initial lower case - StringBuffer lowerLimit = new StringBuffer(patternPrefix.toUpperCase()); + StringBuilder lowerLimit = new StringBuilder(patternPrefix.toUpperCase()); lowerLimit.setCharAt(0, Character.toLowerCase(lowerLimit.charAt(0))); String prefix = tvf.createValue(lowerLimit.toString()); - StringBuffer upperLimit = new StringBuffer(patternPrefix.toLowerCase()); + StringBuilder upperLimit = new StringBuilder(patternPrefix.toLowerCase()); upperLimit.append('\uFFFF'); String limit = tvf.createValue(upperLimit.toString()); rangeScans.add(new RangeScan(reader, @@ -219,7 +219,7 @@ public LowerUpperCaseTermEnum(IndexReader reader, // second scan with upper case start prefix = tvf.createValue(patternPrefix.toUpperCase()); - upperLimit = new StringBuffer(patternPrefix.toLowerCase()); + upperLimit = new StringBuilder(patternPrefix.toLowerCase()); upperLimit.setCharAt(0, Character.toUpperCase(upperLimit.charAt(0))); upperLimit.append('\uFFFF'); limit = tvf.createValue(upperLimit.toString()); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/CompatTokenProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/CompatTokenProvider.java index 900c2ed884b..6d4dad4d48c 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/CompatTokenProvider.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/CompatTokenProvider.java @@ -261,7 +261,7 @@ private static String generateKey(int size) { byte key[] = new byte[size]; random.nextBytes(key); - StringBuffer res = new StringBuffer(key.length * 2); + StringBuilder res = new StringBuilder(key.length * 2); for (byte b : key) { res.append(Text.hexTable[(b >> 4) & 15]); res.append(Text.hexTable[b & 15]); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLEditor.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLEditor.java index 8038513075f..3872bae845f 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLEditor.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLEditor.java @@ -373,11 +373,11 @@ private void checkValidPolicy(String nodePath, AccessControlPolicy policy) * @throws RepositoryException if an error occurs */ String getPathToAcNode(Principal principal) throws RepositoryException { - StringBuffer princPath = new StringBuffer(acRootPath); + StringBuilder princPath = new StringBuilder(acRootPath); if (principal instanceof ItemBasedPrincipal) { princPath.append(((ItemBasedPrincipal) principal).getPath()); } else { - princPath.append("/"); + princPath.append('/'); princPath.append(Text.escapeIllegalJcrChars(principal.getName())); } return princPath.toString(); diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java index 2a1f2a06f7a..63776cf32a8 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java @@ -160,7 +160,7 @@ protected static void dumpStacks(Thread[] threads) { threads[t], (Object[]) null); dumps.append(threads[t].toString()).append('\n'); for (int i = 0; i < elements.length; i++) { - dumps.append("\tat " + elements[i]).append('\n'); + dumps.append("\tat ").append(elements[i]).append('\n'); } dumps.append('\n'); } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/CachingHierarchyManagerTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/CachingHierarchyManagerTest.java index 7406c942d01..8c7254d398f 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/CachingHierarchyManagerTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/CachingHierarchyManagerTest.java @@ -577,7 +577,7 @@ public boolean hasNodeReferences(NodeId id) { * @return path */ private static Path toPath(String s) { - StringBuffer buf = new StringBuffer("{}"); + StringBuilder buf = new StringBuilder("{}"); int start = 1, length = s.length(); while (start < length) { int end = s.indexOf('/', start); diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/AxisQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/AxisQueryTest.java index 6531439ec1e..e57180df676 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/AxisQueryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/AxisQueryTest.java @@ -95,8 +95,8 @@ public void testExecuteQueries() throws RepositoryException { Node testLocation = superuser.getRootNode().getNode(relTestLocation); long end = System.currentTimeMillis() + 1000 * RUN_NUM_SECONDS; while (end > System.currentTimeMillis()) { - StringBuffer statement = new StringBuffer(relTestLocation); - StringBuffer regexp = new StringBuffer(absTestLocation); + StringBuilder statement = new StringBuilder(relTestLocation); + StringBuilder regexp = new StringBuilder(absTestLocation); int numSteps = rand.nextInt(NUM_LEVELS) + 1; // at least one step while (numSteps-- > 0) { String axis = getRandomAxis(); diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Operation.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Operation.java index 7232e1d8a7e..1dfca579716 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Operation.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Operation.java @@ -108,7 +108,7 @@ protected static NodeIterator wrapWithIterator(Node node) { } protected String getRandomText(int numChars) { - StringBuffer tmp = new StringBuffer(numChars); + StringBuilder tmp = new StringBuilder(numChars); for (int i = 0; i < numChars; i++) { char c = (char) (rand.nextInt(('z' + 1) - 'a') + 'a'); tmp.append(c); diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java index 8b51baa571d..8061e7a1efa 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java @@ -100,8 +100,8 @@ protected void checkResult(QueryResult result, int hits, int columns) int count = 0; log.println("Properties:"); String[] propNames = result.getColumnNames(); - for (RowIterator it = result.getRows(); it.hasNext(); count++) { - StringBuffer msg = new StringBuffer(); + StringBuilder msg = new StringBuilder(); + for (RowIterator it = result.getRows(); it.hasNext(); count++, msg.setLength(0)) { Value[] values = it.nextRow().getValues(); for (int i = 0; i < propNames.length; i++) { msg.append(" ").append(propNames[i]).append(": "); @@ -111,7 +111,7 @@ protected void checkResult(QueryResult result, int hits, int columns) msg.append(values[i].getString()); } } - log.println(msg); + log.println(msg.toString()); } if (count == 0) { log.println(" NONE"); diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java index b4c3c7a1383..d2b26ddd9f2 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java @@ -339,7 +339,7 @@ private void executeContainsQuery(String statement, private void assertContainsQuery(String statement, boolean match) throws InvalidQueryException, RepositoryException { - StringBuffer stmt = new StringBuffer(); + StringBuilder stmt = new StringBuilder(); stmt.append("/jcr:root").append(testRoot).append("/*"); stmt.append("[jcr:contains(., '").append(statement); stmt.append("')]"); @@ -347,7 +347,7 @@ private void assertContainsQuery(String statement, boolean match) Query q = superuser.getWorkspace().getQueryManager().createQuery(stmt.toString(), Query.XPATH); checkResult(q.execute(), match ? 1 : 0); - stmt = new StringBuffer(); + stmt.setLength(0); stmt.append("SELECT * FROM nt:base "); stmt.append("WHERE jcr:path LIKE '").append(testRoot).append("/%' "); stmt.append("AND CONTAINS(., '").append(statement).append("')"); diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/UpperLowerCaseQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/UpperLowerCaseQueryTest.java index 6b66ff77df8..7a18b50bbc9 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/UpperLowerCaseQueryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/UpperLowerCaseQueryTest.java @@ -227,7 +227,7 @@ private void check(String[] values, Operator operator, String queryTerm, boolean throw new IllegalArgumentException("values and matches must have same length"); } // create log message - StringBuffer logMsg = new StringBuffer(); + StringBuilder logMsg = new StringBuilder(); logMsg.append("queryTerm: ").append(queryTerm); logMsg.append(" values: "); String separator = ""; @@ -235,9 +235,9 @@ private void check(String[] values, Operator operator, String queryTerm, boolean logMsg.append(separator); separator = ", "; if (matches[i]) { - logMsg.append("+"); + logMsg.append('+'); } else { - logMsg.append("-"); + logMsg.append('-'); } logMsg.append(values[i]); } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TextExtractionQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TextExtractionQueryTest.java index 692d7839a72..1716fec089e 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TextExtractionQueryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TextExtractionQueryTest.java @@ -79,7 +79,7 @@ private void assertFileContains(String name, String type, private void assertContainsQuery(String statement, boolean match) throws InvalidQueryException, RepositoryException { - StringBuffer stmt = new StringBuffer(); + StringBuilder stmt = new StringBuilder(); stmt.append("/jcr:root").append(testRoot).append("/*"); stmt.append("[jcr:contains(., '").append(statement); stmt.append("')]"); @@ -87,7 +87,7 @@ private void assertContainsQuery(String statement, boolean match) Query q = qm.createQuery(stmt.toString(), Query.XPATH); checkResult(q.execute(), match ? 1 : 0); - stmt = new StringBuffer(); + stmt.setLength(0); stmt.append("SELECT * FROM nt:base "); stmt.append("WHERE jcr:path LIKE '").append(testRoot).append("/%' "); stmt.append("AND CONTAINS(., '").append(statement).append("')"); diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractNode.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractNode.java index abacc332c58..bdd0683627a 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractNode.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractNode.java @@ -117,7 +117,7 @@ public void accept(ItemVisitor visitor) throws RepositoryException { */ public String getPath() throws RepositoryException { try { - StringBuffer buffer = new StringBuffer(getParent().getPath()); + StringBuilder buffer = new StringBuilder(getParent().getPath()); if (buffer.length() > 1) { buffer.append('/'); } diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractProperty.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractProperty.java index 69f020e31cc..45532dff364 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractProperty.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractProperty.java @@ -89,7 +89,7 @@ public void accept(ItemVisitor visitor) throws RepositoryException { * @throws RepositoryException if an error occurs */ public String getPath() throws RepositoryException { - StringBuffer buffer = new StringBuffer(getParent().getPath()); + StringBuilder buffer = new StringBuilder(getParent().getPath()); if (buffer.length() > 1) { buffer.append('/'); } diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefWriter.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefWriter.java index c01c6477c72..f14f4752093 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefWriter.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefWriter.java @@ -510,7 +510,7 @@ private void writeJcrName(String name) throws IOException { * @return the escaped string */ private String escape(String s) { - StringBuffer sb = new StringBuffer(s); + StringBuilder sb = new StringBuilder(s); for (int i = 0; i < sb.length(); i++) { if (sb.charAt(i) == '\\') { sb.insert(i, '\\'); diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/ParseException.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/ParseException.java index ecce9df6c60..0adf7d2f29b 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/ParseException.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/ParseException.java @@ -105,7 +105,12 @@ public ParseException(Throwable rootCause, int lineNumber, int colNumber, String */ public String getMessage() { String message = super.getMessage(); - StringBuffer b = new StringBuffer(message == null ? "" : message); + StringBuilder b; + if (message == null) { + b = new StringBuilder(); + } else { + b = new StringBuilder(message); + } String delim = " ("; if (systemId != null && !systemId.equals("")) { b.append(delim); diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java index a5ba905418d..a500ba51019 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java @@ -80,8 +80,8 @@ public void parse(InputStream input, String charSetName) throws IOException { */ public void parse(Reader reader) throws IOException { - //StringBuffer key = new StringBuffer(); - StringBuffer value = new StringBuffer(); + //StringBuilder key = new StringBuilder(); + StringBuilder value = new StringBuilder(); int state; Stack complexVStack = new Stack(); @@ -202,7 +202,7 @@ public void parse(Reader reader) throws IOException { */ private static String nextString(Reader r, char quote) throws IOException { int c; - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); for (;;) { c = r.read(); switch (c) { @@ -248,7 +248,7 @@ private static String nextString(Reader r, char quote) throws IOException { } private static String next(Reader r, int n) throws IOException { - StringBuffer b = new StringBuffer(n); + StringBuilder b = new StringBuilder(n); while (n-- > 0) { int c = r.read(); if (c < 0) { @@ -274,7 +274,7 @@ private static int readIgnoreWhitespace(Reader reader) throws IOException { return next; } - private StringBuffer resetValue(StringBuffer value) throws IOException { + private StringBuilder resetValue(StringBuilder value) throws IOException { if (value != null && value.length() > 0) { String v = value.toString(); if (NULL.equals(v)) { @@ -291,6 +291,6 @@ private StringBuffer resetValue(StringBuffer value) throws IOException { handler.value(l); } } - return new StringBuffer(); + return new StringBuilder(); } } \ No newline at end of file diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonUtil.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonUtil.java index e6805802715..0cbbe8cd310 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonUtil.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonUtil.java @@ -34,7 +34,7 @@ public static String getJsonString(String str) { } int len = str.length(); - StringBuffer sb = new StringBuffer(len + 2); + StringBuilder sb = new StringBuilder(len + 2); // leading quote sb.append('"'); // append passed string escaping characters as required diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/GQL.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/GQL.java index 9773f76f50e..686b50ad962 100755 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/GQL.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/GQL.java @@ -481,7 +481,7 @@ public void term(String property, String value, boolean optional) pushExpression(property, value, optional); } }); - StringBuffer stmt = new StringBuffer(); + StringBuilder stmt = new StringBuilder(); // path constraint stmt.append(pathConstraint); // predicate @@ -493,13 +493,13 @@ public void term(String property, String value, boolean optional) predicate.addOperand(condition); } if (predicate.getSize() > 0) { - stmt.append("["); + stmt.append('['); } predicate.toString(stmt); if (predicate.getSize() > 0) { - stmt.append("]"); + stmt.append(']'); } - stmt.append(" "); + stmt.append(' '); // order by orderBy.toString(stmt); return stmt.toString(); @@ -720,8 +720,8 @@ private void parse(ParserCallback callback) throws RepositoryException { char[] stmt = new char[statement.length() + 1]; statement.getChars(0, statement.length(), stmt, 0); stmt[statement.length()] = ' '; - StringBuffer property = new StringBuffer(); - StringBuffer value = new StringBuffer(); + StringBuilder property = new StringBuilder(); + StringBuilder value = new StringBuilder(); boolean quoted = false; boolean escaped = false; boolean optional = false; @@ -900,7 +900,7 @@ private static String checkProhibited(String value) { */ private interface Expression { - void toString(StringBuffer buffer) throws RepositoryException; + void toString(StringBuilder buffer) throws RepositoryException; } /** @@ -927,11 +927,11 @@ private abstract class ValueComparison extends PropertyExpression { super(property, value); } - public void toString(StringBuffer buffer) + public void toString(StringBuilder buffer) throws RepositoryException { - buffer.append("@"); + buffer.append('@'); buffer.append(ISO9075.encode(resolvePropertyName(property))); - buffer.append("='").append(value).append("'"); + buffer.append("='").append(value).append('\''); } } @@ -971,7 +971,7 @@ private static class NameExpression implements Expression { this.value = tmp; } - public void toString(StringBuffer buffer) + public void toString(StringBuilder buffer) throws RepositoryException { buffer.append("jcr:like(fn:lower-case(fn:name()), '"); buffer.append(value); @@ -991,7 +991,7 @@ private final class ContainsExpression extends PropertyExpression { this.prohibited = value.startsWith("-"); } - public void toString(StringBuffer buffer) + public void toString(StringBuilder buffer) throws RepositoryException { if (property.equals(NATIVE_XPATH)) { buffer.append(value); @@ -1000,11 +1000,11 @@ public void toString(StringBuffer buffer) if (prohibited) { buffer.append("not("); } - buffer.append(JCR_CONTAINS).append("("); + buffer.append(JCR_CONTAINS).append('('); if (property.length() == 0) { // node scope if (commonPathPrefix == null) { - buffer.append("."); + buffer.append('.'); } else { buffer.append(ISO9075.encodePath(commonPathPrefix)); } @@ -1013,7 +1013,7 @@ public void toString(StringBuffer buffer) String[] parts = Text.explode(property, '/'); if (commonPathPrefix != null) { buffer.append(ISO9075.encodePath(commonPathPrefix)); - buffer.append("/"); + buffer.append('/'); } String slash = ""; for (int i = 0; i < parts.length; i++) { @@ -1021,7 +1021,7 @@ public void toString(StringBuffer buffer) if (!parts[i].equals(".")) { // last part buffer.append(slash); - buffer.append("@"); + buffer.append('@'); buffer.append(ISO9075.encode( resolvePropertyName(parts[i]))); } @@ -1044,7 +1044,7 @@ public void toString(StringBuffer buffer) } buffer.append("')"); if (prohibited) { - buffer.append(")"); + buffer.append(')'); } } } @@ -1056,10 +1056,10 @@ private abstract class NAryExpression implements Expression { private final List operands = new ArrayList(); - public void toString(StringBuffer buffer) + public void toString(StringBuilder buffer) throws RepositoryException { if (operands.size() > 1) { - buffer.append("("); + buffer.append('('); } String op = ""; for (Expression expr : operands) { @@ -1068,7 +1068,7 @@ public void toString(StringBuffer buffer) op = getOperation(); } if (operands.size() > 1) { - buffer.append(")"); + buffer.append(')'); } } @@ -1118,7 +1118,7 @@ private class OrderByExpression implements Expression { this.value = value; } - public void toString(StringBuffer buffer) + public void toString(StringBuilder buffer) throws RepositoryException { int start = buffer.length(); buffer.append("order by "); @@ -1147,7 +1147,7 @@ public void toString(StringBuffer buffer) name = createPropertyName(resolvePropertyName(name)); buffer.append(name); if (!asc) { - buffer.append(" ").append(DESCENDING); + buffer.append(' ').append(DESCENDING); } comma = ", "; } @@ -1177,8 +1177,8 @@ private String createPropertyName(String name) { } } - private void defaultOrderBy(StringBuffer buffer) { - buffer.append("@").append(JCR_SCORE).append(" ").append(DESCENDING); + private void defaultOrderBy(StringBuilder buffer) { + buffer.append('@').append(JCR_SCORE).append(' ').append(DESCENDING); } } diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java index ef683f41c0b..ed86c0ff5b3 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java @@ -55,7 +55,7 @@ public static String encode(String name) { return name; } else { // encode - StringBuffer encoded = new StringBuffer(); + StringBuilder encoded = new StringBuilder(); for (int i = 0; i < name.length(); i++) { if (i == 0) { // first character of name @@ -95,7 +95,7 @@ public static String encode(String name) { */ public static String encodePath(String path) { String[] names = Text.explode(path, '/', true); - StringBuffer encoded = new StringBuffer(path.length()); + StringBuilder encoded = new StringBuilder(path.length()); for (int i = 0; i < names.length; i++) { // detect index String index = null; @@ -149,15 +149,15 @@ public static String decode(String name) { *

* Example: ' ' (the space character) is encoded to: _x0020_ * @param c the character to encode - * @param b the encoded character is appended to StringBuffer + * @param b the encoded character is appended to StringBuilder * b. */ - private static void encode(char c, StringBuffer b) { + private static void encode(char c, StringBuilder b) { b.append("_x"); String hex = Integer.toHexString(c); b.append(PADDING, 0, 4 - hex.length()); b.append(hex); - b.append("_"); + b.append('_'); } /** diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/ZipHandler.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/ZipHandler.java index a99585b96bb..97db2fbdd2a 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/ZipHandler.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/ZipHandler.java @@ -260,7 +260,7 @@ private static String makeValidJCRPath(String label, boolean appendLeadingSlash) if (appendLeadingSlash && !label.startsWith("/")) { label = "/" + label; } - StringBuffer ret = new StringBuffer(label.length()); + StringBuilder ret = new StringBuilder(label.length()); for (int i=0; i calculate item path. - itemPath = new StringBuffer(requestItemPath); + itemPath = new StringBuilder(requestItemPath); if (!requestItemPath.endsWith("/")) { itemPath.append('/'); } itemPath.append(diffPath); } else { - itemPath = new StringBuffer(diffPath); + itemPath = new StringBuilder(diffPath); } return normalize(itemPath.toString()); } diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java index 391452ceaf7..251c92c122f 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java @@ -77,7 +77,7 @@ protected String getRepositoryPath(String resourcePath, String wspPath) { @Override protected String getResourcePath(String repositoryPath, String wspPath) { if (wspPath != null) { - StringBuffer b = new StringBuffer(wspPath); + StringBuilder b = new StringBuilder(wspPath); if (repositoryPath != null) { b.append(ItemResourceConstants.ROOT_ITEM_RESOURCEPATH); if (!ItemResourceConstants.ROOT_ITEM_PATH.equals(repositoryPath)) { diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java index b6e3efff1bb..73dda32f0fa 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java @@ -164,7 +164,7 @@ public long getModificationTime() { public String getSupportedMethods() { String ms = super.getSupportedMethods(); if (isOrderable()) { - StringBuffer sb = new StringBuffer(ms); + StringBuilder sb = new StringBuilder(ms); sb.append(", ").append(OrderingResource.METHODS); return sb.toString(); } else { @@ -485,7 +485,7 @@ public void addMember(DavResource resource, InputContext inputContext) } else { BufferedReader r = new BufferedReader(new InputStreamReader(inputContext.getInputStream(), charSet)); String line; - StringBuffer value = new StringBuffer(); + StringBuilder value = new StringBuilder(); while ((line = r.readLine()) != null) { value.append(line); } diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java index 7542b8e8c8b..6f09a7f3bc9 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java @@ -98,7 +98,7 @@ public VersionControlledItemCollection(DavResourceLocator locator, */ @Override public String getSupportedMethods() { - StringBuffer sb = new StringBuffer(super.getSupportedMethods()); + StringBuilder sb = new StringBuilder(super.getSupportedMethods()); // Versioning support sb.append(", ").append(VersionableResource.METHODS); if (isVersionControlled()) { diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java index 08ca099b1ff..2b320bca95e 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java @@ -75,7 +75,7 @@ public VersionHistoryItemCollection(DavResourceLocator resourcePath, */ @Override public String getSupportedMethods() { - StringBuffer sb = new StringBuffer(ItemResourceConstants.METHODS); + StringBuilder sb = new StringBuilder(ItemResourceConstants.METHODS); sb.append(", ").append(VersionHistoryResource.METHODS); return sb.toString(); } diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java index 3fa576158c8..bf9f8649a26 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java @@ -127,7 +127,7 @@ public DavProperty getProperty(DavPropertyName name) { */ @Override public String getSupportedMethods() { - StringBuffer sb = new StringBuffer(ItemResourceConstants.METHODS); + StringBuilder sb = new StringBuilder(ItemResourceConstants.METHODS); sb.append(", ").append(VersionResource.METHODS); return sb.toString(); } diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java index 70421e634cb..a66f1a678b9 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java @@ -39,7 +39,7 @@ public LocatorFactoryImpl(String repositoryPrefix) { public DavResourceLocator createResourceLocator(String prefix, String href) { // build prefix string and remove all prefixes from the given href. - StringBuffer b = new StringBuffer(""); + StringBuilder b = new StringBuilder(); if (prefix != null && prefix.length() > 0) { b.append(prefix); if (href.startsWith(prefix)) { diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/VersionControlledResourceImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/VersionControlledResourceImpl.java index d98a279dc4f..e7b4042e05f 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/VersionControlledResourceImpl.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/VersionControlledResourceImpl.java @@ -98,7 +98,7 @@ public VersionControlledResourceImpl(DavResourceLocator locator, DavResourceFact */ @Override public String getSupportedMethods() { - StringBuffer sb = new StringBuffer(super.getSupportedMethods()); + StringBuilder sb = new StringBuilder(super.getSupportedMethods()); // Versioning support sb.append(", ").append(VersionableResource.METHODS); if (isVersionControlled()) { diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java index 25fd2e44979..f7fddc31146 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java @@ -677,7 +677,7 @@ protected String getNonExistingWorkspaceName(Session session) throws RepositoryE */ protected String createRandomString(int numChars) { Random rand = new Random(System.currentTimeMillis()); - StringBuffer tmp = new StringBuffer(numChars); + StringBuilder tmp = new StringBuilder(numChars); for (int i = 0; i < numChars; i++) { char c = (char) (rand.nextInt(('z' + 1) - 'a') + 'a'); tmp.append(c); diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/ISO8601.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/ISO8601.java index e418ec27d43..193c672c563 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/ISO8601.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/ISO8601.java @@ -222,7 +222,7 @@ public static String format(Calendar cal) throws IllegalArgumentException { * note that we cannot use java.text.SimpleDateFormat for * formatting because it can't handle years <= 0 and TZD's */ - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(30); // year ([-]YYYY) appendZeroPaddedInt(buf, getYear(cal), 4); buf.append('-'); @@ -294,11 +294,11 @@ public static int getYear(Calendar cal) throws IllegalArgumentException { * This is an internal helper method which doesn't perform any * validation on the given arguments. * - * @param buf String buffer to append to + * @param buf String builder to append to * @param n number to append * @param precision number of digits to append */ - private static void appendZeroPaddedInt(StringBuffer buf, int n, int precision) { + private static void appendZeroPaddedInt(StringBuilder buf, int n, int precision) { if (n < 0) { buf.append('-'); n = -n; diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java index ea4b7057489..fa1229ef9ce 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java @@ -55,10 +55,9 @@ private static String escapeNames(String str) { } private static String escapeValues(String str) { - char[] chars = str.toCharArray(); - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < chars.length; i++) { - char c = chars[i]; + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); if (c == '\u0020' || c == '\u0009' || c == '\n' @@ -97,11 +96,11 @@ private static boolean canMisinterpret(String str) { */ private static String escapeChar(char c) { String unicodeRepr = Integer.toHexString(c); - StringBuffer escaped = new StringBuffer(); + StringBuilder escaped = new StringBuilder(); escaped.append("_x"); escaped.append(Utf16Padding, 0, utf16length - unicodeRepr.length()); escaped.append(unicodeRepr); - escaped.append("_"); + escaped.append('_'); return escaped.toString(); } @@ -112,11 +111,10 @@ private static String escapeChar(char c) { * @return */ private static String escape(String str) { - char[] chars = str.toCharArray(); - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); - for (int i = 0; i < chars.length; i++) { - char c = chars[i]; + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); // handle start character if (i == 0) { if (!XMLChar.isNameStart(c)) { diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/ExportDocViewTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/ExportDocViewTest.java index 90ed34dfab8..3fb4aa644bb 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/ExportDocViewTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/ExportDocViewTest.java @@ -968,7 +968,7 @@ private static String exportValues(Property prop, boolean isBinary) Value[] vals = prop.getValues(); // order of multi values is preserved. // multival with empty array is exported as empty string - StringBuffer exportedVal = new StringBuffer(); + StringBuilder exportedVal = new StringBuilder(); String space = ""; if (isBinary) { @@ -1067,7 +1067,7 @@ private long countChildElems(Element elem) { */ private List getChildTextNodeValues(Element elem) { List textValues = new ArrayList(); - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); org.w3c.dom.Node child = elem.getFirstChild(); // collect the characters of successive text nodes while (child != null) { @@ -1078,7 +1078,7 @@ private List getChildTextNodeValues(Element elem) { child = child.getNextSibling(); } textValues.add(buf.toString()); - buf = new StringBuffer(); + buf.setLength(0); } else { child = child.getNextSibling(); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeDiscoveringNodeTypesTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeDiscoveringNodeTypesTest.java index 84d6124a90d..eb33b89f95c 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeDiscoveringNodeTypesTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeDiscoveringNodeTypesTest.java @@ -126,9 +126,9 @@ public void testGetMixinNodeTypes() types.length, names.length); - StringBuffer namesString = new StringBuffer(); + StringBuilder namesString = new StringBuilder(); for (int i = 0; i < names.length; i++) { - namesString.append("|" + names[i].getString() + "|"); + namesString.append('|').append(names[i].getString()).append('|'); } for (int i = 0; i < types.length; i++) { diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java index 9f81feb6efa..6e984a97b5a 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java @@ -731,11 +731,11 @@ public void testGetPropertiesNamePatternArray() } PropertyIterator allPropertiesIt = node.getProperties(); List allProperties = new ArrayList(); - StringBuffer notExistingPropertyName = new StringBuffer(); + StringBuilder notExistingPropertyName = new StringBuilder(); while (allPropertiesIt.hasNext()) { Property p = allPropertiesIt.nextProperty(); allProperties.add(p); - notExistingPropertyName.append(p.getName() + "X"); + notExistingPropertyName.append(p.getName()).append('X'); } // all tests are running using root's first property diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionReadMethodsTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionReadMethodsTest.java index 3220d862ad9..b8e8d45b1b6 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionReadMethodsTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionReadMethodsTest.java @@ -159,7 +159,7 @@ public void testGetAttribute() throws NotExecutableException { */ public void testGetAttributeFailure() { String names[] = session.getAttributeNames(); - StringBuffer notExistingName = new StringBuffer("X"); + StringBuilder notExistingName = new StringBuilder("X"); for (int i = 0; i < names.length; i++) { notExistingName.append(names[i]); } @@ -206,16 +206,16 @@ public void testIsLive() { */ private String getNonExistingPath() throws RepositoryException { // build path to a node that does not exist - StringBuffer tmp = new StringBuffer(); + StringBuilder tmp = new StringBuilder(); if (testRootNode.getName().length() > 0) { - tmp.append("/").append(testRootNode.getName()); + tmp.append('/').append(testRootNode.getName()); } int count = 0; String nodeName = "node"; while (testRootNode.hasNode(nodeName + count)) { count++; } - tmp.append("/").append(nodeName + count); + tmp.append('/').append(nodeName + count); return tmp.toString(); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java index 0f5f1504ec2..0e28b1bc184 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java @@ -561,18 +561,18 @@ public void showTree() { * Recursive display of source and target tree */ public void showTree(Node n, int level) throws RepositoryException { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); for (int t = 0; t < level; t++) { sb.append("-"); } - sb.append(n.getName() + " "); - sb.append(n.getPrimaryNodeType().getName() + " [ "); + sb.append(n.getName()).append(' '); + sb.append(n.getPrimaryNodeType().getName()).append(" [ "); PropertyIterator pi = n.getProperties(); while (pi.hasNext()) { Property p = (Property) pi.next(); - sb.append(p.getName() + " "); + sb.append(p.getName()).append(' '); } - sb.append("]"); + sb.append(']'); sc.log(sb.toString()); NodeIterator ni = n.getNodes(); diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java index f1d561f669e..00abc8a18e8 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java @@ -479,7 +479,7 @@ public static PropertyDefinition locatePropertyDef(Session session, public static String getUndefinedChildNodeName(NodeType nodeType) { NodeDefinition nodeDefs[] = nodeType.getChildNodeDefinitions(); - StringBuffer s = new StringBuffer("X"); + StringBuilder s = new StringBuilder("X"); for (int i = 0; i < nodeDefs.length; i++) { s.append(nodeDefs[i].getName()); @@ -620,7 +620,7 @@ public static Value getValueAccordingToValueConstraints(Session session, } if (satisfied) { // build a binary value absMin < size > absMax - StringBuffer content = new StringBuffer(); + StringBuilder content = new StringBuilder(); for (int i = 0; i <= absMin + 1; i++) { content.append("X"); } @@ -865,7 +865,7 @@ public static Value getValueAccordingToValueConstraints(Session session, return null; } else { // build a name that is for sure not part of the constraints - StringBuffer name = new StringBuffer("X"); + StringBuilder name = new StringBuilder("X"); for (int i = 0; i < constraints.length; i++) { name.append(constraints[i].replaceAll(":", "")); } @@ -880,7 +880,7 @@ public static Value getValueAccordingToValueConstraints(Session session, return null; } else { // build a path that is for sure not part of the constraints - StringBuffer path = new StringBuffer("X"); + StringBuilder path = new StringBuilder("X"); for (int i = 0; i < constraints.length; i++) { path.append(constraints[i]); } @@ -908,7 +908,7 @@ public static Value getValueAccordingToValueConstraints(Session session, return null; } else { // build a string that will probably not satisfy the constraints - StringBuffer value = new StringBuffer("X"); + StringBuilder value = new StringBuilder("X"); for (int i = 0; i < constraints.length; i++) { value.append(constraints[i]); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/PredefinedNodeTypeTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/PredefinedNodeTypeTest.java index e08cf16d00f..8ce384b1a11 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/PredefinedNodeTypeTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/PredefinedNodeTypeTest.java @@ -310,7 +310,7 @@ public void testResource() throws NotExecutableException { private void testPredefinedNodeType(String name, boolean propsVariant) throws NotExecutableException { try { - StringBuffer spec = new StringBuffer(); + StringBuilder spec = new StringBuilder(); String resource = "org/apache/jackrabbit/test/api/nodetype/spec/" + name.replace(':', '-') + ".txt"; diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/AbstractQueryTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/AbstractQueryTest.java index 97c788a87f2..cc0371b34be 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/AbstractQueryTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/AbstractQueryTest.java @@ -241,7 +241,7 @@ protected void checkResult(QueryResult result, int hits, int properties) log.println("Properties:"); String[] propNames = result.getColumnNames(); for (RowIterator it = result.getRows(); it.hasNext();) { - StringBuffer msg = new StringBuffer(); + StringBuilder msg = new StringBuilder(); Value[] values = it.nextRow().getValues(); for (int i = 0; i < propNames.length; i++, count++) { msg.append(" ").append(propNames[i]).append(": "); @@ -251,7 +251,7 @@ protected void checkResult(QueryResult result, int hits, int properties) msg.append(values[i].getString()); } } - log.println(msg); + log.println(msg.toString()); } if (count == 0) { log.println(" NONE"); diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/DerefQueryLevel1Test.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/DerefQueryLevel1Test.java index df97e628bf7..c0aac81d4ec 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/DerefQueryLevel1Test.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/DerefQueryLevel1Test.java @@ -155,9 +155,9 @@ public void testDerefMultiPropWithNodeStar() */ private String createStatement(Property refProperty, String nameTest) throws RepositoryException { - StringBuffer stmt = new StringBuffer(); - stmt.append("/").append(jcrRoot).append(refProperty.getParent().getPath()); - stmt.append("/").append(jcrDeref).append("(@"); + StringBuilder stmt = new StringBuilder(); + stmt.append('/').append(jcrRoot).append(refProperty.getParent().getPath()); + stmt.append('/').append(jcrDeref).append("(@"); stmt.append(refProperty.getName()).append(", '"); stmt.append(nameTest).append("')"); return stmt.toString(); diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java index 97059ed5f6d..faba78e3a9d 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java @@ -54,14 +54,14 @@ public void testJoin() throws RepositoryException, NotExecutableException { assertFalse("Node at " + n2.getPath() + " should not have mixin " + testMixin, n2.isNodeType(testMixin)); - StringBuffer query = new StringBuffer("SELECT * FROM "); + StringBuilder query = new StringBuilder("SELECT * FROM "); query.append(testNodeType).append(", ").append(testMixin); query.append(" WHERE "); - query.append(testNodeType).append(".").append(jcrPath); + query.append(testNodeType).append('.').append(jcrPath); query.append(" = "); - query.append(testMixin).append(".").append(jcrPath); + query.append(testMixin).append('.').append(jcrPath); query.append(" AND ").append(jcrPath).append(" LIKE "); - query.append("'").append(testRoot).append("/%'"); + query.append('\'').append(testRoot).append("/%'"); executeSqlQuery(superuser, query.toString(), new Node[]{n1}); } @@ -87,14 +87,14 @@ public void testJoinNtBase() throws RepositoryException, assertFalse("Node at " + n2.getPath() + " should not have mixin " + testMixin, n2.isNodeType(testMixin)); - StringBuffer query = new StringBuffer("SELECT * FROM "); + StringBuilder query = new StringBuilder("SELECT * FROM "); query.append(testNodeType).append(", ").append(testMixin); query.append(" WHERE "); - query.append(testNodeType).append(".").append(jcrPath); + query.append(testNodeType).append('.').append(jcrPath); query.append(" = "); - query.append(testMixin).append(".").append(jcrPath); + query.append(testMixin).append('.').append(jcrPath); query.append(" AND ").append(jcrPath).append(" LIKE "); - query.append("'").append(testRoot).append("/%'"); + query.append('\'').append(testRoot).append("/%'"); executeSqlQuery(superuser, query.toString(), new Node[]{n1}); } @@ -111,14 +111,14 @@ public void testJoinFilterPrimaryType() ensureMixinType(n2, mixReferenceable); testRootNode.getSession().save(); - StringBuffer query = new StringBuffer("SELECT * FROM "); + StringBuilder query = new StringBuilder("SELECT * FROM "); query.append(testNodeType).append(", ").append(ntBase); query.append(" WHERE "); - query.append(testNodeType).append(".").append(jcrPath); + query.append(testNodeType).append('.').append(jcrPath); query.append(" = "); - query.append(ntBase).append(".").append(jcrPath); + query.append(ntBase).append('.').append(jcrPath); query.append(" AND ").append(jcrPath).append(" LIKE "); - query.append("'").append(testRoot).append("/%'"); + query.append('\'').append(testRoot).append("/%'"); executeSqlQuery(superuser, query.toString(), new Node[]{n1}); } @@ -144,14 +144,14 @@ public void testJoinSNS() throws RepositoryException, NotExecutableException { ensureMixinType(n2, mixReferenceable); testRootNode.getSession().save(); - StringBuffer query = new StringBuffer("SELECT * FROM "); + StringBuilder query = new StringBuilder("SELECT * FROM "); query.append(testNodeType).append(", ").append(mixReferenceable); query.append(" WHERE "); - query.append(testNodeType).append(".").append(jcrPath); + query.append(testNodeType).append('.').append(jcrPath); query.append(" = "); - query.append(mixReferenceable).append(".").append(jcrPath); + query.append(mixReferenceable).append('.').append(jcrPath); query.append(" AND ").append(jcrPath).append(" LIKE "); - query.append("'").append(testRoot).append("/%'"); + query.append('\'').append(testRoot).append("/%'"); executeSqlQuery(superuser, query.toString(), new Node[]{n1, n2}); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLOrderByTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLOrderByTest.java index 2a1e151aea6..2feae344354 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLOrderByTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLOrderByTest.java @@ -40,7 +40,7 @@ protected void setUp() throws Exception { isReadOnly = true; super.setUp(); // setup common base statement - StringBuffer tmp = new StringBuffer("SELECT ").append(escapeIdentifierForSQL(propertyName1)); + StringBuilder tmp = new StringBuilder("SELECT ").append(escapeIdentifierForSQL(propertyName1)); tmp.append(" FROM ").append(escapeIdentifierForSQL(testNodeType)); tmp.append(" WHERE ").append(escapeIdentifierForSQL(propertyName1)).append(" IS NOT NULL"); tmp.append(" ORDER BY "); diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLQueryLevel2Test.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLQueryLevel2Test.java index 2d68785b337..6c8468766c3 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLQueryLevel2Test.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLQueryLevel2Test.java @@ -126,7 +126,7 @@ public void testPathColumn() throws Exception { * and excluding with a word */ private Statement getFullTextStatement() { - StringBuffer tmp = new StringBuffer("SELECT "); + StringBuilder tmp = new StringBuilder("SELECT "); tmp.append(escapeIdentifierForSQL(propertyName1)); tmp.append(" FROM ").append(escapeIdentifierForSQL(testNodeType)); tmp.append(" WHERE CONTAINS(., '\"quick brown\" -cat')"); @@ -140,7 +140,7 @@ private Statement getFullTextStatement() { * property */ private Statement getMultiValueStatement() { - StringBuffer tmp = new StringBuffer("SELECT "); + StringBuilder tmp = new StringBuilder("SELECT "); tmp.append(escapeIdentifierForSQL(propertyName1)); tmp.append(" FROM ").append(escapeIdentifierForSQL(testNodeType)); tmp.append(" WHERE 'two' IN "); @@ -156,7 +156,7 @@ private Statement getMultiValueStatement() { * @return Statement selecting nodes by its range in {@link #propertyName1} */ private Statement getRangeStatement() { - StringBuffer tmp = new StringBuffer("SELECT "); + StringBuilder tmp = new StringBuilder("SELECT "); tmp.append(escapeIdentifierForSQL(propertyName1)); tmp.append(" FROM ").append(escapeIdentifierForSQL(testNodeType)); tmp.append(" WHERE "); diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathPosIndexTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathPosIndexTest.java index 97ab8367d09..f3ac799f65b 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathPosIndexTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathPosIndexTest.java @@ -50,7 +50,7 @@ protected void setUp() throws Exception { */ public void testDocOrderIndexedNotation() throws Exception { String path = testRoot + "/" + nodeName1 + "[2]"; - StringBuffer tmp = new StringBuffer("/"); + StringBuilder tmp = new StringBuilder("/"); tmp.append(jcrRoot).append(path); docOrderTest(new Statement(tmp.toString(), qsXPATH), path); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java index 470116f90f0..95165e2e76b 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java @@ -71,10 +71,10 @@ protected void checkResultOrder(QueryResult result, List expectedPaths = new ArrayList(); log.println("expected:"); for (int i = 0; i < nodes.length; i++) { - StringBuffer aggregatedPaths = new StringBuffer(); + StringBuilder aggregatedPaths = new StringBuilder(); for (int j = 0; j < nodes[i].length; j++) { aggregatedPaths.append(getPath(nodes[i][j])); - aggregatedPaths.append("|"); + aggregatedPaths.append('|'); } expectedPaths.add(aggregatedPaths.toString()); log.println(aggregatedPaths.toString()); @@ -84,10 +84,10 @@ protected void checkResultOrder(QueryResult result, log.println("result:"); for (RowIterator it = result.getRows(); it.hasNext();) { Row r = it.nextRow(); - StringBuffer aggregatedPaths = new StringBuffer(); + StringBuilder aggregatedPaths = new StringBuilder(); for (int i = 0; i < selectorNames.length; i++) { aggregatedPaths.append(getPath(r.getNode(selectorNames[i]))); - aggregatedPaths.append("|"); + aggregatedPaths.append('|'); } resultPaths.add(aggregatedPaths.toString()); log.println(aggregatedPaths.toString()); @@ -141,10 +141,10 @@ protected void checkResult(QueryResult result, Set expectedPaths = new HashSet(); log.println("expected:"); for (int i = 0; i < nodes.length; i++) { - StringBuffer aggregatedPaths = new StringBuffer(); + StringBuilder aggregatedPaths = new StringBuilder(); for (int j = 0; j < nodes[i].length; j++) { aggregatedPaths.append(getPath(nodes[i][j])); - aggregatedPaths.append("|"); + aggregatedPaths.append('|'); } expectedPaths.add(aggregatedPaths.toString()); log.println(aggregatedPaths.toString()); @@ -154,10 +154,10 @@ protected void checkResult(QueryResult result, log.println("result:"); for (RowIterator it = result.getRows(); it.hasNext();) { Row r = it.nextRow(); - StringBuffer aggregatedPaths = new StringBuffer(); + StringBuilder aggregatedPaths = new StringBuilder(); for (int i = 0; i < selectorNames.length; i++) { aggregatedPaths.append(getPath(r.getNode(selectorNames[i]))); - aggregatedPaths.append("|"); + aggregatedPaths.append('|'); } resultPaths.add(aggregatedPaths.toString()); log.println(aggregatedPaths.toString()); diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeLocalNameTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeLocalNameTest.java index 09f2adba28c..8113c5ab3ef 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeLocalNameTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeLocalNameTest.java @@ -220,13 +220,13 @@ private void checkOperatorSingleLiteral(String literal, } private String createLexicographicallyGreater(String name) { - StringBuffer tmp = new StringBuffer(name); + StringBuilder tmp = new StringBuilder(name); tmp.setCharAt(tmp.length() - 1, (char) (tmp.charAt(tmp.length() - 1) + 1)); return tmp.toString(); } private String createLexicographicallyLesser(String name) { - StringBuffer tmp = new StringBuffer(name); + StringBuilder tmp = new StringBuilder(name); tmp.setCharAt(tmp.length() - 1, (char) (tmp.charAt(tmp.length() - 1) - 1)); return tmp.toString(); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java index a26fa1ca4dc..518b727f2ab 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java @@ -317,13 +317,13 @@ private void checkOperatorSingleLiteral(String literal, } private String createLexicographicallyGreater(String name) { - StringBuffer tmp = new StringBuffer(name); + StringBuilder tmp = new StringBuilder(name); tmp.setCharAt(tmp.length() - 1, (char) (tmp.charAt(tmp.length() - 1) + 1)); return tmp.toString(); } private String createLexicographicallyLesser(String name) { - StringBuffer tmp = new StringBuffer(name); + StringBuilder tmp = new StringBuilder(name); tmp.setCharAt(tmp.length() - 1, (char) (tmp.charAt(tmp.length() - 1) - 1)); return tmp.toString(); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java index 99fbbeb8949..0aeb1fa05a6 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java @@ -57,7 +57,7 @@ public static String encode(String name) { return name; } else { // encode - StringBuffer encoded = new StringBuffer(); + StringBuilder encoded = new StringBuilder(); for (int i = 0; i < name.length(); i++) { if (i == 0) { // first character of name @@ -97,7 +97,7 @@ public static String encode(String name) { */ public static String encodePath(String path) { String[] names = Text.explode(path, '/', true); - StringBuffer encoded = new StringBuffer(path.length()); + StringBuilder encoded = new StringBuilder(path.length()); for (int i = 0; i < names.length; i++) { // detect index String index = null; @@ -151,15 +151,15 @@ public static String decode(String name) { *

* Example: ' ' (the space character) is encoded to: _x0020_ * @param c the character to encode - * @param b the encoded character is appended to StringBuffer + * @param b the encoded character is appended to StringBuilder * b. */ - private static void encode(char c, StringBuffer b) { + private static void encode(char c, StringBuilder b) { b.append("_x"); String hex = Integer.toHexString(c); b.append(PADDING, 0, 4 - hex.length()); b.append(hex); - b.append("_"); + b.append('_'); } /** diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java index 5034f7c4beb..5daf728cb22 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java @@ -106,7 +106,7 @@ public static String digest(String algorithm, byte[] data) MessageDigest md = MessageDigest.getInstance(algorithm); byte[] digest = md.digest(data); - StringBuffer res = new StringBuffer(digest.length * 2); + StringBuilder res = new StringBuilder(digest.length * 2); for (int i = 0; i < digest.length; i++) { byte b = digest[i]; res.append(hexTable[(b >> 4) & 15]); @@ -171,7 +171,7 @@ public static String[] explode(String str, int ch, boolean respectEmpty) { * @return the concatenated string */ public static String implode(String[] arr, String delim) { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); for (int i = 0; i < arr.length; i++) { if (i > 0) { buf.append(delim); @@ -199,15 +199,15 @@ public static String replace(String text, String oldString, String newString) { return text; } int lastPos = 0; - StringBuffer sb = new StringBuffer(text.length()); + StringBuilder sb = new StringBuilder(text.length()); while (pos != -1) { - sb.append(text.substring(lastPos, pos)); + sb.append(text, lastPos, pos); sb.append(newString); lastPos = pos + oldString.length(); pos = text.indexOf(oldString, lastPos); } if (lastPos < text.length()) { - sb.append(text.substring(lastPos)); + sb.append(text, lastPos, text.length()); } return sb.toString(); } @@ -223,7 +223,7 @@ public static String encodeIllegalXMLCharacters(String text) { if (text == null) { throw new IllegalArgumentException("null argument"); } - StringBuffer buf = null; + StringBuilder buf = null; int length = text.length(); int pos = 0; for (int i = 0; i < length; i++) { @@ -235,10 +235,10 @@ public static String encodeIllegalXMLCharacters(String text) { case '"': case '\'': if (buf == null) { - buf = new StringBuffer(); + buf = new StringBuilder(); } if (i > 0) { - buf.append(text.substring(pos, i)); + buf.append(text, pos, i); } pos = i + 1; break; @@ -261,7 +261,7 @@ public static String encodeIllegalXMLCharacters(String text) { return text; } else { if (pos < length) { - buf.append(text.substring(pos)); + buf.append(text, pos, text.length()); } return buf.toString(); } @@ -342,7 +342,7 @@ public static String escape(String string, char escape, boolean isPath) { try { BitSet validChars = isPath ? URISaveEx : URISave; byte[] bytes = string.getBytes("utf-8"); - StringBuffer out = new StringBuffer(bytes.length); + StringBuilder out = new StringBuilder(bytes.length); for (int i = 0; i < bytes.length; i++) { int c = bytes[i] & 0xff; if (validChars.get(c) && c != escape) { @@ -468,7 +468,7 @@ public static String unescape(String string) { * @return the escaped name */ public static String escapeIllegalJcrChars(String name) { - StringBuffer buffer = new StringBuffer(name.length() * 2); + StringBuilder buffer = new StringBuilder(name.length() * 2); for (int i = 0; i < name.length(); i++) { char ch = name.charAt(i); if (ch == '%' || ch == '/' || ch == ':' || ch == '[' || ch == ']' @@ -495,8 +495,8 @@ public static String escapeIllegalJcrChars(String name) { * @return the escaped string */ public static String escapeIllegalXpathSearchChars(String s) { - StringBuffer sb = new StringBuffer(); - sb.append(s.substring(0, (s.length() - 1))); + StringBuilder sb = new StringBuilder(); + sb.append(s, 0, s.length() - 1); char c = s.charAt(s.length() - 1); // NOTE: keep this in sync with _ESCAPED_CHAR below! if (c == '!' || c == '(' || c == ':' || c == '^' @@ -519,10 +519,10 @@ public static String escapeIllegalXpathSearchChars(String s) { * @return the unescaped name */ public static String unescapeIllegalJcrChars(String name) { - StringBuffer buffer = new StringBuffer(name.length()); + StringBuilder buffer = new StringBuilder(name.length()); int i = name.indexOf('%'); while (i > -1 && i + 2 < name.length()) { - buffer.append(name.toCharArray(), 0, i); + buffer.append(name, 0, i); int a = Character.digit(name.charAt(i + 1), 16); int b = Character.digit(name.charAt(i + 2), 16); if (a > -1 && b > -1) { @@ -736,7 +736,7 @@ public static String getAbsoluteParent(String path, int level) { public static String replaceVariables(Properties variables, String value, boolean ignoreMissing) throws IllegalArgumentException { - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); // Value: // +--+-+--------+-+-----------------+ @@ -744,7 +744,7 @@ public static String replaceVariables(Properties variables, String value, // +--+-+--------+-+-----------------+ int p = 0, q = value.indexOf("${"); // Find first ${ while (q != -1) { - result.append(value.substring(p, q)); // Text before ${ + result.append(value, p, q); // Text before ${ p = q; q = value.indexOf("}", q + 2); // Find } if (q != -1) { @@ -763,7 +763,7 @@ public static String replaceVariables(Properties variables, String value, q = value.indexOf("${", p); // Find next ${ } } - result.append(value.substring(p, value.length())); // Trailing text + result.append(value, p, value.length()); // Trailing text return result.toString(); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeActivityTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeActivityTest.java index 243a9963896..aaa6dbd35a3 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeActivityTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeActivityTest.java @@ -55,11 +55,11 @@ public void testMergeActivity() throws RepositoryException { VersionManager vm2 = testRootNodeW2.getSession().getWorkspace().getVersionManager(); NodeIterator iter = vm2.merge(activityNode); if (iter.hasNext()) { - StringBuffer failed = new StringBuffer(); - while (iter.hasNext()) { + StringBuilder failed = new StringBuilder(); + do { failed.append(iter.nextNode().getPath()); failed.append(", "); - } + } while (iter.hasNext()); fail("Merge must not fail. failed nodes: " + failed); return; } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeShallowTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeShallowTest.java index 6b0ae0ef152..7cd7d5246c3 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeShallowTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeShallowTest.java @@ -53,11 +53,11 @@ public void testMergeRecursive() throws RepositoryException { NodeIterator iter = vm2.merge(nodeToMerge.getPath(), superuser.getWorkspace().getName(), true, false); if (iter.hasNext()) { - StringBuffer failed = new StringBuffer(); - while (iter.hasNext()) { + StringBuilder failed = new StringBuilder(); + do { failed.append(iter.nextNode().getPath()); failed.append(", "); - } + } while (iter.hasNext()); fail("Merge must not fail. failed nodes: " + failed); return; } @@ -76,11 +76,11 @@ public void testMergeShallow() throws RepositoryException { NodeIterator iter = vm2.merge(nodeToMerge.getPath(), superuser.getWorkspace().getName(), true, true); if (iter.hasNext()) { - StringBuffer failed = new StringBuffer(); - while (iter.hasNext()) { + StringBuilder failed = new StringBuilder(); + do { failed.append(iter.nextNode().getPath()); failed.append(", "); - } + } while (iter.hasNext()); fail("Merge must not fail. failed nodes: " + failed); return; } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java index d70ddb81cf7..f904394ec7d 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java @@ -1394,20 +1394,20 @@ public void testRestoreOrder2Jcr2_4() throws RepositoryException, public void testLinearVersions() throws Exception { // first get all linear versions VersionIterator iter = versionableNode.getVersionHistory().getAllLinearVersions(); - StringBuffer expected = new StringBuffer(); + StringBuilder expected = new StringBuilder(); while (iter.hasNext()) { - expected.append(iter.nextVersion().getName()).append(","); + expected.append(iter.nextVersion().getName()).append(','); } // restore version versionableNode.restore(version, true); // append new base version - expected.append(versionableNode.getBaseVersion().getName()).append(","); + expected.append(versionableNode.getBaseVersion().getName()).append(','); // get the version names again iter = versionableNode.getVersionHistory().getAllLinearVersions(); - StringBuffer actual = new StringBuffer(); + StringBuilder actual = new StringBuilder(); while (iter.hasNext()) { - actual.append(iter.nextVersion().getName()).append(","); + actual.append(iter.nextVersion().getName()).append(','); } assertEquals("Node.restore() on simple versioning must create a new version.", expected.toString(), actual.toString()); @@ -1420,20 +1420,20 @@ public void testLinearVersions() throws Exception { public void testLinearVersionsJcr2() throws Exception { // first get all linear versions VersionIterator iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); - StringBuffer expected = new StringBuffer(); + StringBuilder expected = new StringBuilder(); while (iter.hasNext()) { - expected.append(iter.nextVersion().getName()).append(","); + expected.append(iter.nextVersion().getName()).append(','); } // restore version versionManager.restore(version, true); // append new base version - expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(","); + expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(','); // get the version names again iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); - StringBuffer actual = new StringBuffer(); + StringBuilder actual = new StringBuilder(); while (iter.hasNext()) { - actual.append(iter.nextVersion().getName()).append(","); + actual.append(iter.nextVersion().getName()).append(','); } assertEquals("Node.restore() on simple versioning must create a new version.", expected.toString(), actual.toString()); @@ -1446,20 +1446,20 @@ public void testLinearVersionsJcr2() throws Exception { public void testLinearVersionsJcr2_2() throws Exception { // first get all linear versions VersionIterator iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); - StringBuffer expected = new StringBuffer(); + StringBuilder expected = new StringBuilder(); while (iter.hasNext()) { - expected.append(iter.nextVersion().getName()).append(","); + expected.append(iter.nextVersion().getName()).append(','); } // restore version versionManager.restore(version, true); // append new base version - expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(","); + expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(','); // get the version names again iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); - StringBuffer actual = new StringBuffer(); + StringBuilder actual = new StringBuilder(); while (iter.hasNext()) { - actual.append(iter.nextVersion().getName()).append(","); + actual.append(iter.nextVersion().getName()).append(','); } assertEquals("Node.restore() on simple versioning must create a new version.", expected.toString(), actual.toString()); @@ -1472,20 +1472,20 @@ public void testLinearVersionsJcr2_2() throws Exception { public void testLinearVersionsJcr2_3() throws Exception { // first get all linear versions VersionIterator iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); - StringBuffer expected = new StringBuffer(); + StringBuilder expected = new StringBuilder(); while (iter.hasNext()) { - expected.append(iter.nextVersion().getName()).append(","); + expected.append(iter.nextVersion().getName()).append(','); } // restore version versionManager.restore(versionableNode.getPath(), version.getName(), true); // append new base version - expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(","); + expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(','); // get the version names again iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); - StringBuffer actual = new StringBuffer(); + StringBuilder actual = new StringBuilder(); while (iter.hasNext()) { - actual.append(iter.nextVersion().getName()).append(","); + actual.append(iter.nextVersion().getName()).append(','); } assertEquals("Node.restore() on simple versioning must create a new version.", expected.toString(), actual.toString()); @@ -1498,20 +1498,20 @@ public void testLinearVersionsJcr2_3() throws Exception { public void testLinearVersionsJcr2_4() throws Exception { // first get all linear versions VersionIterator iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); - StringBuffer expected = new StringBuffer(); + StringBuilder expected = new StringBuilder(); while (iter.hasNext()) { - expected.append(iter.nextVersion().getName()).append(","); + expected.append(iter.nextVersion().getName()).append(','); } // restore version versionManager.restore(new Version[] {version}, true); // append new base version - expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(","); + expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(','); // get the version names again iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); - StringBuffer actual = new StringBuffer(); + StringBuilder actual = new StringBuilder(); while (iter.hasNext()) { - actual.append(iter.nextVersion().getName()).append(","); + actual.append(iter.nextVersion().getName()).append(','); } assertEquals("Node.restore() on simple versioning must create a new version.", expected.toString(), actual.toString()); diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java index a04cc1b4fab..32afc7a6f52 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java @@ -233,7 +233,7 @@ public Object clone() { */ public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("EffectiveNodeTypeCache (" + super.toString() + ")\n"); + builder.append("EffectiveNodeTypeCache (").append(super.toString()).append(")\n"); builder.append("EffectiveNodeTypes in cache:\n"); for (Key k : sortedKeys) { builder.append(k); @@ -490,11 +490,11 @@ public int hashCode() { */ @Override public String toString() { - StringBuffer buf = new StringBuffer("w="); + StringBuilder buf = new StringBuilder("w="); buf.append(names.length); int i = nextSetBit(0); while (i>=0) { - buf.append(", ").append(i).append("="); + buf.append(", ").append(i).append('='); buf.append(BitsetENTCacheImpl.this.getName(i)); i = nextSetBit(i+1); } diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java index 3d2ee79972b..0410cfd343b 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java @@ -104,15 +104,15 @@ public Map validateNodeTypeDefs(Collecti } } if (list.size() > 0) { - StringBuffer msg = new StringBuffer(); + StringBuilder msg = new StringBuilder(); msg.append("the following node types could not be registered because of unresolvable dependencies: "); - Iterator iterator = list.iterator(); - while (iterator.hasNext()) { - msg.append(iterator.next().getName()); - msg.append(" "); + for (QNodeTypeDefinition ntd : list) { + msg.append(ntd.getName()); + msg.append(' '); } - log.error(msg.toString()); - throw new InvalidNodeTypeDefinitionException(msg.toString()); + String msgAsString = msg.toString(); + log.error(msgAsString); + throw new InvalidNodeTypeDefinitionException(msgAsString); } return ntMap; } @@ -473,7 +473,7 @@ private void checkForCircularInheritance(Name[] supertypes, Stack inherita Name stName = supertypes[i]; int pos = inheritanceChain.lastIndexOf(stName); if (pos >= 0) { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); for (int j = 0; j < inheritanceChain.size(); j++) { if (j == pos) { buf.append("--> "); @@ -517,7 +517,7 @@ private void checkForCircularNodeAutoCreation(EffectiveNodeType childNodeENT, Name nt = childNodeNTs[i]; int pos = definingParentNTs.lastIndexOf(nt); if (pos >= 0) { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); for (int j = 0; j < definingParentNTs.size(); j++) { if (j == pos) { buf.append("--> "); diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java index 41b438b4da3..a926188eb65 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java @@ -410,7 +410,7 @@ public void unregisterNodeTypes(String[] names) throws RepositoryException { */ public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("NodeTypeManager (" + super.toString() + ")\n"); + builder.append("NodeTypeManager (").append(super.toString()).append(")\n"); builder.append("All NodeTypes:\n"); try { NodeTypeIterator iter = this.getAllNodeTypes(); @@ -419,68 +419,72 @@ public String toString() { builder.append(nt.getName()); builder.append("\n\tSupertypes"); for (NodeType supertype : nt.getSupertypes()) { - builder.append("\n\t\t" + supertype.getName()); + builder.append("\n\t\t").append(supertype.getName()); } - builder.append("\n\tMixin\t" + nt.isMixin()); - builder.append("\n\tOrderableChildNodes\t" + nt.hasOrderableChildNodes()); - builder.append("\n\tPrimaryItemName\t" + (nt.getPrimaryItemName() == null ? "" : nt.getPrimaryItemName())); + builder.append("\n\tMixin\t").append(nt.isMixin()); + builder.append("\n\tOrderableChildNodes\t").append(nt.hasOrderableChildNodes()); + builder.append("\n\tPrimaryItemName\t").append(nt.getPrimaryItemName() == null ? "" : nt.getPrimaryItemName()); for (PropertyDefinition aPd : nt.getPropertyDefinitions()) { builder.append("\n\tPropertyDefinition"); - builder.append(" (declared in " + aPd.getDeclaringNodeType().getName() + ") "); - builder.append("\n\t\tName\t\t" + (aPd.getName())); + builder.append(" (declared in ").append(aPd.getDeclaringNodeType().getName()).append(") "); + builder.append("\n\t\tName\t\t").append(aPd.getName()); String type = aPd.getRequiredType() == 0 ? "null" : PropertyType.nameFromValue(aPd.getRequiredType()); - builder.append("\n\t\tRequiredType\t" + type); + builder.append("\n\t\tRequiredType\t").append(type); String[] vca = aPd.getValueConstraints(); - StringBuffer constraints = new StringBuffer(); + final String constraintsAsString; if (vca == null) { - constraints.append(""); + constraintsAsString = ""; } else { + StringBuilder constraints = new StringBuilder(); for (String aVca : vca) { if (constraints.length() > 0) { constraints.append(", "); } constraints.append(aVca); } + constraintsAsString = constraints.toString(); } - builder.append("\n\t\tValueConstraints\t" + constraints.toString()); + builder.append("\n\t\tValueConstraints\t").append(constraintsAsString); Value[] defVals = aPd.getDefaultValues(); - StringBuffer defaultValues = new StringBuffer(); + final String defaultValuesAsString; if (defVals == null) { - defaultValues.append(""); + defaultValuesAsString = ""; } else { + StringBuilder defaultValues = new StringBuilder(); for (Value defVal : defVals) { if (defaultValues.length() > 0) { defaultValues.append(", "); } defaultValues.append(defVal.getString()); } + defaultValuesAsString = defaultValues.toString(); } - builder.append("\n\t\tDefaultValue\t" + defaultValues.toString()); - builder.append("\n\t\tAutoCreated\t" + aPd.isAutoCreated()); - builder.append("\n\t\tMandatory\t" + aPd.isMandatory()); - builder.append("\n\t\tOnVersion\t" + OnParentVersionAction.nameFromValue(aPd.getOnParentVersion())); - builder.append("\n\t\tProtected\t" + aPd.isProtected()); - builder.append("\n\t\tMultiple\t" + aPd.isMultiple()); + builder.append("\n\t\tDefaultValue\t").append(defaultValuesAsString); + builder.append("\n\t\tAutoCreated\t").append(aPd.isAutoCreated()); + builder.append("\n\t\tMandatory\t").append(aPd.isMandatory()); + builder.append("\n\t\tOnVersion\t").append(OnParentVersionAction.nameFromValue(aPd.getOnParentVersion())); + builder.append("\n\t\tProtected\t").append(aPd.isProtected()); + builder.append("\n\t\tMultiple\t").append(aPd.isMultiple()); } for (NodeDefinition aNd : nt.getChildNodeDefinitions()) { builder.append("\n\tNodeDefinition"); - builder.append(" (declared in " + aNd.getDeclaringNodeType() + ") "); - builder.append("\n\t\tName\t\t" + aNd.getName()); + builder.append(" (declared in ").append(aNd.getDeclaringNodeType()).append(") "); + builder.append("\n\t\tName\t\t").append(aNd.getName()); NodeType[] reqPrimaryTypes = aNd.getRequiredPrimaryTypes(); if (reqPrimaryTypes != null && reqPrimaryTypes.length > 0) { for (NodeType reqPrimaryType : reqPrimaryTypes) { - builder.append("\n\t\tRequiredPrimaryType\t" + reqPrimaryType.getName()); + builder.append("\n\t\tRequiredPrimaryType\t").append(reqPrimaryType.getName()); } } NodeType defPrimaryType = aNd.getDefaultPrimaryType(); if (defPrimaryType != null) { - builder.append("\n\t\tDefaultPrimaryType\t" + defPrimaryType.getName()); + builder.append("\n\t\tDefaultPrimaryType\t").append(defPrimaryType.getName()); } - builder.append("\n\t\tAutoCreated\t" + aNd.isAutoCreated()); - builder.append("\n\t\tMandatory\t" + aNd.isMandatory()); - builder.append("\n\t\tOnVersion\t" + OnParentVersionAction.nameFromValue(aNd.getOnParentVersion())); - builder.append("\n\t\tProtected\t" + aNd.isProtected()); - builder.append("\n\t\tAllowsSameNameSiblings\t" + aNd.allowsSameNameSiblings()); + builder.append("\n\t\tAutoCreated\t").append(aNd.isAutoCreated()); + builder.append("\n\t\tMandatory\t").append(aNd.isMandatory()); + builder.append("\n\t\tOnVersion\t").append(OnParentVersionAction.nameFromValue(aNd.getOnParentVersion())); + builder.append("\n\t\tProtected\t").append(aNd.isProtected()); + builder.append("\n\t\tAllowsSameNameSiblings\t").append(aNd.allowsSameNameSiblings()); } } } catch (RepositoryException e) { diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java index 7549d20bbb8..9ea8e40fd4c 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java @@ -192,11 +192,11 @@ public synchronized void unregisterNodeTypes(Collection nodeTypeNames) Set dependents = registeredNTDefs.getDependentNodeTypes(ntName); dependents.removeAll(nodeTypeNames); if (dependents.size() > 0) { - StringBuffer msg = new StringBuffer(); + StringBuilder msg = new StringBuilder(); msg.append(ntName).append(" can not be removed because the following node types depend on it: "); for (Name name : dependents) { msg.append(name); - msg.append(" "); + msg.append(' '); } throw new RepositoryException(msg.toString()); } @@ -769,10 +769,11 @@ public String toString() { } } QValue[] defVals = pd.getDefaultValues(); - StringBuffer defaultValues = new StringBuffer(); + final String defaultValuesAsString; if (defVals == null) { - defaultValues.append(""); + defaultValuesAsString = ""; } else { + StringBuilder defaultValues = new StringBuilder(); for (QValue defVal : defVals) { if (defaultValues.length() > 0) { defaultValues.append(", "); @@ -783,8 +784,9 @@ public String toString() { defaultValues.append(defVal.toString()); } } + defaultValuesAsString = defaultValues.toString(); } - builder.append("\n\t\tDefaultValue\t").append(defaultValues.toString()); + builder.append("\n\t\tDefaultValue\t").append(defaultValuesAsString); builder.append("\n\t\tAutoCreated\t").append(pd.isAutoCreated()); builder.append("\n\t\tMandatory\t").append(pd.isMandatory()); builder.append("\n\t\tOnVersion\t").append(OnParentVersionAction.nameFromValue(pd.getOnParentVersion())); diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java index 7846c3bffc3..68f190d181f 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java @@ -154,7 +154,7 @@ public long getDate() throws RepositoryException { @Override public String toString() { if (stringValue == null) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("Event: Path: "); try { sb.append(getPath()); diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/LogUtil.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/LogUtil.java index 85266ccdd00..154a684efe8 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/LogUtil.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/LogUtil.java @@ -106,7 +106,7 @@ public static String saveGetIdString(ItemId itemId, PathResolver pathResolver) { if (p == null || pathResolver == null) { return itemId.toString(); } else { - StringBuffer bf = new StringBuffer(); + StringBuilder bf = new StringBuilder(); String uniqueID = itemId.getUniqueID(); if (uniqueID != null) { bf.append(uniqueID).append(" - "); diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/TargetImportHandler.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/TargetImportHandler.java index 5e1d64bbc03..8078f8280ef 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/TargetImportHandler.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/TargetImportHandler.java @@ -261,7 +261,7 @@ public String retrieve() throws IOException { if (tmpFile.length() > Integer.MAX_VALUE) { throw new IOException("size of value is too big, use reader()"); } - StringBuffer sb = new StringBuffer((int) tmpFile.length()); + StringBuilder sb = new StringBuilder((int) tmpFile.length()); char[] chunk = new char[0x2000]; int read; Reader reader = new FileReader(tmpFile); diff --git a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java index c8832cd7bc9..af5f589eb95 100644 --- a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java +++ b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java @@ -119,7 +119,7 @@ public void createChildInfos(NodeId id, Iterator childInfos) { */ public static final String toJCRPath(Path path) { Element[] elems = path.getElements(); - StringBuffer jcrPath = new StringBuffer(); + StringBuilder jcrPath = new StringBuilder(); for (int k = 0; k < elems.length; k++) { jcrPath.append(elems[k].getName().getLocalName()); diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventFilterImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventFilterImpl.java index d0c4edb5298..119dddb6a0c 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventFilterImpl.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventFilterImpl.java @@ -190,15 +190,15 @@ public boolean getNoLocal() { */ @Override public String toString() { - return new StringBuffer(getClass().getName()) - .append("[") + return new StringBuilder(getClass().getName()) + .append('[') .append("eventTypes: ").append(eventTypes).append(", ") .append("absPath: ").append(absPath).append(", ") .append("isDeep: ").append(isDeep).append(", ") .append("uuids: ").append(uuids).append(", ") .append("nodeTypeNames: ").append(nodeTypeNames).append(", ") .append("noLocal: ").append(noLocal) - .append("]") + .append(']') .toString(); } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java index 2baa3c8baa7..47d13904885 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java @@ -187,8 +187,8 @@ public long getDate() throws RepositoryException { //-------------------------------------------------------------< Object >--- @Override public String toString() { - return new StringBuffer(getClass().getName()) - .append("[") + return new StringBuilder(getClass().getName()) + .append('[') .append("eventTypes: ").append(type).append(", ") .append("absPath: ").append(path).append(", ") .append("itemId: ").append(itemId).append(", ") @@ -196,7 +196,7 @@ public String toString() { .append("primaryNodeTypeName: ").append(primaryNodeTypeName).append(", ") .append("mixinTypeNames: ").append(Arrays.toString(mixinTypeNames)).append(", ") .append("userId").append(userId) - .append("]") + .append(']') .toString(); } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/AbstractChangeLog.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/AbstractChangeLog.java index d7e085791c3..aacf33aa767 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/AbstractChangeLog.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/AbstractChangeLog.java @@ -63,7 +63,7 @@ public Batch apply(Batch batch) throws RepositoryException { @Override public String toString() { - StringBuffer b = new StringBuffer(); + StringBuilder b = new StringBuilder(); for (Iterator it = operations.iterator(); it.hasNext(); ) { b.append(it.next()); if (it.hasNext()) { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/ParsingPathResolver.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/ParsingPathResolver.java index 1a6d78e91cc..f673b74e8bd 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/ParsingPathResolver.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/ParsingPathResolver.java @@ -100,7 +100,7 @@ public Path getQPath(String jcrPath, boolean normalizeIdentifier) throws Malform * @see PathResolver#getJCRPath(org.apache.jackrabbit.spi.Path) */ public String getJCRPath(Path path) throws NamespaceException { - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); Path.Element[] elements = path.getElements(); for (int i = 0; i < elements.length; i++) { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java index d283161481e..31ba3d0f305 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java @@ -88,7 +88,7 @@ public String toJcrIdentifier(NodeId nodeId) { } else if (uniqueId == null) { return DELIMITER + path.toString(); } else { - StringBuffer bf = new StringBuffer(); + StringBuilder bf = new StringBuilder(); bf.append(Text.escape(uniqueId, DELIMITER)); bf.append(DELIMITER); bf.append(path.toString()); @@ -212,7 +212,7 @@ public int hashCode() { */ @Override public String toString() { - StringBuffer b = new StringBuffer(); + StringBuilder b = new StringBuilder(); if (uniqueID != null) { b.append(uniqueID); } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/Slf4jLogWriter.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/Slf4jLogWriter.java index 77a96ef1850..75115fb2d46 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/Slf4jLogWriter.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/Slf4jLogWriter.java @@ -83,13 +83,13 @@ public void error(final String methodName, final Object[] args, final Exception // -----------------------------------------------------< private >--- private String formatArgs(Object[] args) { - StringBuffer b = new StringBuffer(); + StringBuilder b = new StringBuilder(); formatArgs(args, b); return b.toString(); } private String formatResult(Object result) { - StringBuffer b = new StringBuffer(); + StringBuilder b = new StringBuilder(); formatArg(result, b); return b.toString(); } @@ -100,7 +100,7 @@ private String formatException(Exception e) { return sw.toString(); } - private void formatArgs(Object[] args, StringBuffer b) { + private void formatArgs(Object[] args, StringBuilder b) { String separator = ""; for (int k = 0; k < args.length; k++) { b.append(separator); @@ -109,7 +109,7 @@ private void formatArgs(Object[] args, StringBuffer b) { } } - private void formatArg(Object arg, StringBuffer b) { + private void formatArg(Object arg, StringBuilder b) { if (arg instanceof Object[]) { b.append('['); formatArgs((Object[]) arg, b); diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/WriterLogWriter.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/WriterLogWriter.java index 1aa0883e257..2a3b2a38dd1 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/WriterLogWriter.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/WriterLogWriter.java @@ -87,13 +87,13 @@ private void print(String msg) { // -----------------------------------------------------< private >--- private String formatArgs(Object[] args) { - StringBuffer b = new StringBuffer(); + StringBuilder b = new StringBuilder(); formatArgs(args, b); return b.toString(); } private String formatResult(Object result) { - StringBuffer b = new StringBuffer(); + StringBuilder b = new StringBuilder(); formatArg(result, b); return b.toString(); } @@ -104,7 +104,7 @@ private String formatException(Exception e) { return sw.toString(); } - private void formatArgs(Object[] args, StringBuffer b) { + private void formatArgs(Object[] args, StringBuilder b) { String separator = ""; for (Object arg : args) { b.append(separator); @@ -113,7 +113,7 @@ private void formatArgs(Object[] args, StringBuffer b) { } } - private void formatArg(Object arg, StringBuffer b) { + private void formatArg(Object arg, StringBuilder b) { if (arg instanceof Object[]) { b.append('['); formatArgs((Object[]) arg, b); diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/Pattern.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/Pattern.java index 4ea720ab48b..22ecc56e34e 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/Pattern.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/Pattern.java @@ -275,12 +275,12 @@ protected Context match(Context input) throws RepositoryException { } public String toString() { - return new StringBuffer() - .append("(") + return new StringBuilder() + .append('(') .append(pattern1) - .append("|") + .append('|') .append(pattern2) - .append(")") + .append(')') .toString(); } } @@ -308,12 +308,12 @@ protected Context match(Context input) throws RepositoryException { } public String toString() { - return new StringBuffer() - .append("(") + return new StringBuilder() + .append('(') .append(pattern1) .append(", ") .append(pattern2) - .append(")") + .append(')') .toString(); } } @@ -362,8 +362,8 @@ private boolean hasBounds() { } public String toString() { - return new StringBuffer() - .append("(") + return new StringBuilder() + .append('(') .append(pattern) .append(")*") .toString(); @@ -410,10 +410,10 @@ protected Context match(Context input) throws RepositoryException { } public String toString() { - return new StringBuffer() - .append("\"") + return new StringBuilder() + .append('"') .append(path) - .append("\"") + .append('"') .toString(); } } @@ -458,10 +458,10 @@ protected boolean matches(Element element) { } public String toString() { - return new StringBuffer() - .append("\"") + return new StringBuilder() + .append('"') .append(name) - .append("\"") + .append('"') .toString(); } } @@ -491,12 +491,12 @@ protected boolean matches(Element element) { } public String toString() { - return new StringBuffer() + return new StringBuilder() .append("\"{") .append(namespaceUriStr) - .append("}") + .append('}') .append(localNameStr) - .append("\"") + .append('"') .toString(); } } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/PathConstraint.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/PathConstraint.java index b7b16c864ca..18d38f81b4e 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/PathConstraint.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/PathConstraint.java @@ -77,7 +77,7 @@ static PathConstraint create(String jcrPath, PathResolver resolver) } path = resolver.getQPath(jcrPath); } - StringBuffer definition = new StringBuffer(path.getString()); + StringBuilder definition = new StringBuilder(path.getString()); if (deep) { definition.append(WILDCARD); } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java index 6eea6723fb9..c4f9efbfe19 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java @@ -768,7 +768,7 @@ private static String translateEscaping(String pattern, char from, char to) { if (from == to || (pattern.indexOf(from) < 0 && pattern.indexOf(to) < 0)) { return pattern; } - StringBuffer translated = new StringBuffer(pattern.length()); + StringBuilder translated = new StringBuilder(pattern.length()); boolean escaped = false; for (int i = 0; i < pattern.length(); i++) { if (pattern.charAt(i) == from) { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ParseException.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ParseException.java index 4a51710046a..f6aa4447d67 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ParseException.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ParseException.java @@ -114,7 +114,7 @@ public String getMessage() { if (!specialConstructor) { return super.getMessage(); } - StringBuffer expected = new StringBuffer(); + StringBuilder expected = new StringBuilder(); int maxSize = 0; for (int i = 0; i < expectedTokenSequences.length; i++) { if (maxSize < expectedTokenSequences[i].length) { @@ -161,7 +161,7 @@ public String getMessage() { * string literal. */ protected String add_escapes(String str) { - StringBuffer retval = new StringBuffer(); + StringBuilder retval = new StringBuilder(str.length()); char ch; for (int i = 0; i < str.length(); i++) { switch (str.charAt(i)) @@ -195,7 +195,7 @@ protected String add_escapes(String str) { default: if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { String s = "0000" + Integer.toString(ch, 16); - retval.append("\\u" + s.substring(s.length() - 4, s.length())); + retval.append("\\u").append(s, s.length() - 4, s.length()); } else { retval.append(ch); } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java index 950e0c43567..26b6a33af74 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java @@ -54,7 +54,7 @@ public class TokenMgrError extends Error * equivalents in the given string */ protected static final String addEscapes(String str) { - StringBuffer retval = new StringBuffer(); + StringBuilder retval = new StringBuilder(str.length()); char ch; for (int i = 0; i < str.length(); i++) { switch (str.charAt(i)) @@ -88,7 +88,7 @@ protected static final String addEscapes(String str) { default: if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { String s = "0000" + Integer.toString(ch, 16); - retval.append("\\u" + s.substring(s.length() - 4, s.length())); + retval.append("\\u").append(s, s.length() - 4, s.length()); } else { retval.append(ch); } diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrName.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrName.java index bed4ec10f39..05db27d0e7c 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrName.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrName.java @@ -112,7 +112,7 @@ public boolean isValid() { } public String toString() { - StringBuffer b = new StringBuffer(jcrName); + StringBuilder b = new StringBuilder(jcrName); if (isValid()) { b.append(",VAL"); } diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java index 4c05ffb6ce0..47143bd0295 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java @@ -155,7 +155,7 @@ public boolean isValid() { } public String toString() { - StringBuffer b = new StringBuffer(path); + StringBuilder b = new StringBuilder(path); if (normalizedPath!=null) { b.append(" -> ").append(normalizedPath); } diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/PathTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/PathTest.java index e27bf39d80d..2e2fd604df3 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/PathTest.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/PathTest.java @@ -82,8 +82,10 @@ public void testGetAncestorOfRelativePath() throws RepositoryException { if (test.isValid() && !test.isAbsolute()) { Path p = resolver.getQPath(test.path); - StringBuffer expJcrAnc = new StringBuffer(test.path); - expJcrAnc.append((test.path.endsWith("/") ? "" : "/")); + StringBuilder expJcrAnc = new StringBuilder(test.path); + if (!test.path.endsWith("/")) { + expJcrAnc.append('/'); + } expJcrAnc.append("../../../../.."); Path ancestor = resolver.getQPath(expJcrAnc.toString()).getNormalizedPath(); diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/DateConstraintTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/DateConstraintTest.java index 9e2b1ec99ce..995256ad4d8 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/DateConstraintTest.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/DateConstraintTest.java @@ -48,11 +48,11 @@ protected String[] getDefinitions() throws RepositoryException { Calendar c2 = Calendar.getInstance(); c2.setTime(new Date()); - StringBuffer b = new StringBuffer("("); + StringBuilder b = new StringBuilder("("); b.append(new DateValue(c1).getString()); - b.append(","); + b.append(','); b.append(new DateValue(c2).getString()); - b.append(")"); + b.append(')'); return new String[] {b.toString()}; } diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java index f74b3540a75..169ea58e5c8 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java @@ -242,7 +242,7 @@ public void testParseScript() throws Exception { public void fuzz(String query) throws Exception { for (int i = 0; i < 100; i++) { - StringBuffer buff = new StringBuffer(query); + StringBuilder buff = new StringBuilder(query); int changes = 1 + (int) Math.abs(random.nextGaussian() * 2); for (int j = 0; j < changes; j++) { char newChar; diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java index e831f185b69..db498d23dfb 100644 --- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java +++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java @@ -86,11 +86,11 @@ public int getIndex() { public int hashCode() { // build hashCode (format: ///) if (hashCode == 0) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append(name.toString()); - sb.append("/"); + sb.append('/'); sb.append(index); - sb.append("/"); + sb.append('/'); if (uniqueId != null) { sb.append(uniqueId); } @@ -120,7 +120,7 @@ public boolean equals(Object object) { */ @Override public String toString() { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append(name.toString()); sb.append(" : ").append(index); sb.append(" : ").append((uniqueId == null) ? "-" : uniqueId); diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ItemInfoJSONHandler.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ItemInfoJSONHandler.java index 9337ad19062..a6d31b92177 100644 --- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ItemInfoJSONHandler.java +++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ItemInfoJSONHandler.java @@ -355,7 +355,7 @@ private List getCurrentPropInfos() { private String getValueURI() throws RepositoryException { Path propertyPath = pFactory.create(getCurrentNodeInfo().getPath(), name, true); - StringBuffer sb = new StringBuffer(rootURI); + StringBuilder sb = new StringBuilder(rootURI); sb.append(Text.escapePath(resolver.getJCRPath(propertyPath))); return sb.toString(); } diff --git a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java index eaad0925adb..320bbae7b54 100644 --- a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java +++ b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java @@ -123,7 +123,7 @@ private List getArguments(String input) { boolean insideDoubleQuote = false; int escape = -1; - StringBuffer arg = new StringBuffer(); + StringBuilder arg = new StringBuilder(); for (int i = 0; i < length; ++i) { char c = input.charAt(i); @@ -131,9 +131,10 @@ private List getArguments(String input) { // end of argument? if ((!insideSingleQuote && !insideDoubleQuote && Character .isWhitespace(c))) { - if (arg.toString().trim().length() > 0) { - args.add(arg.toString().trim()); - arg = new StringBuffer(); + final String trimmedArg = arg.toString().trim(); + if (trimmedArg.length() > 0) { + args.add(trimmedArg); + arg.setLength(0); } continue; } @@ -158,8 +159,9 @@ private List getArguments(String input) { } } - if (arg.toString().trim().length() > 0) { - args.add(arg.toString()); + final String trimmedArg = arg.toString().trim(); + if (trimmedArg.length() > 0) { + args.add(trimmedArg); } return args; diff --git a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/Help.java b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/Help.java index 01bd470697c..0c6e18c18d6 100644 --- a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/Help.java +++ b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/Help.java @@ -89,7 +89,7 @@ private void helpAll(Context ctx) throws CommandException { iter = descriptors.iterator(); while (iter.hasNext()) { CommandLine desc = (CommandLine) iter.next(); - StringBuffer buf = new StringBuffer(desc.getName()); + StringBuilder buf = new StringBuilder(desc.getName()); buf.setLength(tabPos); for (int i = desc.getName().length(); i < buf.length(); i++) { buf.setCharAt(i, ' '); diff --git a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/PrintHelper.java b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/PrintHelper.java index 36a3c9c9031..6dcdac9c89a 100644 --- a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/PrintHelper.java +++ b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/PrintHelper.java @@ -131,7 +131,7 @@ public static void printRow(Context ctx, int[] width, Collection texts) } else if (o instanceof String) { text[column] = (String) o; } else if (o instanceof Collection) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); Iterator i = ((Collection) o).iterator(); while (i.hasNext()) { String str = (String) i.next(); diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/AbstractConfig.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/AbstractConfig.java index 4c2c4b2ef30..48739773d62 100644 --- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/AbstractConfig.java +++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/AbstractConfig.java @@ -79,12 +79,12 @@ public void init(ServletConfig ctx) throws ServletException { } public String toMapName(String name, char delim) { - StringBuffer ret = new StringBuffer(); + StringBuilder ret = new StringBuilder(); String[] elems = Text.explode(name, delim); ret.append(elems[0]); for (int i=1; i 0) { @@ -242,7 +242,7 @@ private DavResourceLocatorImpl(String prefix, String workspacePath, String resou } int length = buf.length(); if (length == 0 || (length > 0 && buf.charAt(length - 1) != '/')) { - buf.append("/"); + buf.append('/'); } this.href = buf.toString(); } diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java index de09b5b605d..f52b2defc38 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java @@ -60,10 +60,10 @@ private DavCompliance() {} public static final String OBSERVATION = "observation"; public static String concatComplianceClasses(String[] complianceClasses) { - StringBuffer b = new StringBuffer(); + StringBuilder b = new StringBuilder(); for (int i = 0; i < complianceClasses.length; i++) { if (i > 0) { - b.append(","); + b.append(','); } b.append(complianceClasses[i]); } diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java index 63d272865b6..f212c747734 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java @@ -110,11 +110,11 @@ public class IfHeader implements Header { */ public IfHeader(String[] tokens) { allTokens.addAll(Arrays.asList(tokens)); - StringBuffer b = new StringBuffer(); + StringBuilder b = new StringBuilder(); for (String token : tokens) { - b.append("(").append("<"); + b.append("(<"); b.append(token); - b.append(">").append(")"); + b.append(">)"); } headerValue = b.toString(); ifHeader = parse(); @@ -460,7 +460,7 @@ private int readWhiteSpace(Reader reader) throws IOException { * @throws IOException if a problem occurs during reading. */ private String readWord(Reader reader, char end) throws IOException { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); // read the word value int c = reader.read(); diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/EncodeUtil.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/EncodeUtil.java index bf0b5cfc3af..9e730278f2a 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/EncodeUtil.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/EncodeUtil.java @@ -129,7 +129,7 @@ private static String escape(String string, char escape, boolean isPath) { try { BitSet validChars = isPath ? URISaveEx : URISave; byte[] bytes = string.getBytes("utf-8"); - StringBuffer out = new StringBuffer(bytes.length); + StringBuilder out = new StringBuilder(bytes.length); for (byte aByte : bytes) { int c = aByte & 0xff; if (validChars.get(c) && c != escape) { diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java index 3a0f8ff4857..94cbb5c14a4 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java @@ -157,7 +157,7 @@ public static Attr[] getNamespaceAttributes(Element element) { * @see #isText(Node) */ public static String getText(Element element) { - StringBuffer content = new StringBuffer(); + StringBuilder content = new StringBuilder(); if (element != null) { NodeList nodes = element.getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) { @@ -744,8 +744,8 @@ public static String getExpandedName(String localName, Namespace namespace) { if (namespace == null || namespace.equals(Namespace.EMPTY_NAMESPACE)) { return localName; } - StringBuffer b = new StringBuffer("{"); - b.append(namespace.getURI()).append("}"); + StringBuilder b = new StringBuilder("{"); + b.append(namespace.getURI()).append('}'); b.append(localName); return b.toString(); } @@ -769,8 +769,8 @@ public static String getPrefixedName(String localName, Namespace namespace) { || Namespace.EMPTY_NAMESPACE.getPrefix().equals(namespace.getPrefix())) { return localName; } - StringBuffer buf = new StringBuffer(namespace.getPrefix()); - buf.append(":"); + StringBuilder buf = new StringBuilder(namespace.getPrefix()); + buf.append(':'); buf.append(localName); return buf.toString(); } From 7a3482de5091eb19ca230c7d0c6f8236387b0556 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 16:24:22 -0500 Subject: [PATCH 09/27] Remove unnecessary boxing/unboxing --- .../jackrabbit/core/data/LocalCache.java | 4 ++-- .../core/fs/local/LocalFileSystem.java | 2 +- .../util/db/Oracle10R1ConnectionHelper.java | 4 ++-- .../jackrabbit/core/data/TestCaseBase.java | 2 +- .../rmi/observation/ClientEventPoll.java | 8 ++++---- .../commons/namespace/NamespaceExtractor.java | 6 +++--- .../src/main/javacc/xpath/javacc.xsl | 18 +++++++++--------- .../jackrabbit/standalone/cli/JcrParser.java | 2 +- .../org/apache/jackrabbit/j2ee/RMIConfig.java | 4 ++-- 9 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java index 6086588e581..33a1b357f21 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java @@ -484,7 +484,7 @@ public synchronized Long remove(final Object key) { if (flength != null) { LOG.debug("cache entry [{}], with size [{}] removed.", fileName, flength); - currentSizeInBytes -= flength.longValue(); + currentSizeInBytes -= flength; } } else if (!getFile(fileName).exists()) { // second attempt. remove from cache if file doesn't exists @@ -493,7 +493,7 @@ public synchronized Long remove(final Object key) { LOG.debug( "file not exists. cache entry [{}], with size [{}] removed.", fileName, flength); - currentSizeInBytes -= flength.longValue(); + currentSizeInBytes -= flength; } } else { LOG.info("not able to remove cache entry [{}], size [{}]", key, diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java index d5d32aeb758..9b4f703d7be 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java @@ -78,7 +78,7 @@ public void setRoot(File root) { * @param enable */ public void setEnableHandleMonitor(String enable) { - setEnableHandleMonitor(Boolean.valueOf(enable).booleanValue()); + setEnableHandleMonitor(Boolean.valueOf(enable)); } /** diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/Oracle10R1ConnectionHelper.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/Oracle10R1ConnectionHelper.java index f4efdb7cd02..d4c348f7e27 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/Oracle10R1ConnectionHelper.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/Oracle10R1ConnectionHelper.java @@ -72,8 +72,8 @@ public void init() throws Exception { try { con = dataSource.getConnection(); blobClass = con.getClass().getClassLoader().loadClass("oracle.sql.BLOB"); - durationSessionConstant = new Integer(blobClass.getField("DURATION_SESSION").getInt(null)); - modeReadWriteConstant = new Integer(blobClass.getField("MODE_READWRITE").getInt(null)); + durationSessionConstant = blobClass.getField("DURATION_SESSION").getInt(null); + modeReadWriteConstant = blobClass.getField("MODE_READWRITE").getInt(null); } finally { if (con != null) { DbUtility.close(con, null, null); diff --git a/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java b/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java index dad1e093806..5be2f38f94b 100644 --- a/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java +++ b/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java @@ -552,7 +552,7 @@ void doTest(DataStore ds, int offset) throws Exception { RandomInputStream in = new RandomInputStream(size + offset, size); DataRecord rec = ds.addRecord(in); list.add(rec); - map.put(rec, new Integer(size)); + map.put(rec, size); } Random random = new Random(1); for (int i = 0; i < list.size(); i++) { diff --git a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java index d11daa5a3cc..30d7778aa47 100644 --- a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java +++ b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java @@ -131,10 +131,10 @@ public ClientEventPoll(RemoteObservationManager remote, Session session) * listener. */ public synchronized long addListener(EventListener listener) { - Long id = new Long(counter++); + Long id = counter++; listenerMap.put(id, listener); idMap.put(listener, id); - return id.longValue(); + return id; } /** @@ -150,7 +150,7 @@ public synchronized long removeListener(EventListener listener) { Long key = (Long) idMap.remove(listener); if (key != null) { listenerMap.remove(key); - return key.longValue(); + return key; } return -1; @@ -208,7 +208,7 @@ public void run() { // extract the listener id from the remote event and find // the locally registered event listener - Long id = new Long(remoteEvent.getListenerId()); + Long id = remoteEvent.getListenerId(); EventListener listener = (EventListener) listenerMap.get(id); // if the listener is not registered (anymore), the event is diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java index 5248d69098e..25f53405718 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java @@ -91,11 +91,11 @@ public void startPrefixMapping(String prefix, String uri) throws SAXException { int c; Integer co = basePrefixes.get(prefix); if (co == null) { - basePrefixes.put(prefix, new Integer(1)); + basePrefixes.put(prefix, 1); c = 1; } else { - c = co.intValue() + 1; - basePrefixes.put(prefix, new Integer(c)); + c = co + 1; + basePrefixes.put(prefix, c); } prefix = prefix + "_" + c; } diff --git a/jackrabbit-spi-commons/src/main/javacc/xpath/javacc.xsl b/jackrabbit-spi-commons/src/main/javacc/xpath/javacc.xsl index cc8bb7975d4..77574472c85 100644 --- a/jackrabbit-spi-commons/src/main/javacc/xpath/javacc.xsl +++ b/jackrabbit-spi-commons/src/main/javacc/xpath/javacc.xsl @@ -252,7 +252,7 @@ TOKEN_MGR_DECLS : { - private Stack stateStack = new Stack(); + private Stack<Integer> stateStack = new Stack<Integer>(); // private Vector persistentLexStates = new Vector(); static final int PARENMARKER = 2000; @@ -262,7 +262,7 @@ TOKEN_MGR_DECLS : { private void pushState() { // System.err.println("pushing: "+curLexState); printLinePos(); - stateStack.addElement(new Integer(curLexState)); + stateStack.addElement(curLexState); } /** @@ -271,7 +271,7 @@ TOKEN_MGR_DECLS : { */ private void pushState(int state) { - stateStack.push(new Integer(state)); + stateStack.push(state); } /** @@ -284,7 +284,7 @@ TOKEN_MGR_DECLS : { printLinePos(); } - int nextState = ((Integer) stateStack.pop()).intValue(); + int nextState = stateStack.pop(); // System.err.println("pop "+nextState); printLinePos(); if(nextState == PARENMARKER) printLinePos(); @@ -298,7 +298,7 @@ TOKEN_MGR_DECLS : { private boolean isState(int state) { for (int i = 0; i < stateStack.size(); i++) { - if(((Integer) stateStack.elementAt(i)).intValue() == state) + if(stateStack.elementAt(i) == state) { return true; } @@ -314,9 +314,9 @@ TOKEN_MGR_DECLS : { */ private void pushParenState(int commaState, int rparState) { - stateStack.push(new Integer(rparState)); - stateStack.push(new Integer(commaState)); - stateStack.push(new Integer(PARENMARKER)); + stateStack.push(rparState); + stateStack.push(commaState); + stateStack.push(PARENMARKER); SwitchTo(commaState); } @@ -1031,4 +1031,4 @@ we use ]]> as a single token. --> - \ No newline at end of file + diff --git a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java index 320bbae7b54..7d5d81896be 100644 --- a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java +++ b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java @@ -262,7 +262,7 @@ private void populate(CommandLine cl, List valList) // set arguments String[] argValues = args.toArray(new String[args.size()]); for (int j = 0; j < argValues.length; j++) { - Argument arg = (Argument) clArgs.get(new Integer(j)); + Argument arg = (Argument) clArgs.get(j); if (arg == null) { throw new JcrParserException("exception.more.arguments.than.expected"); } diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RMIConfig.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RMIConfig.java index 6b77e6c6ef9..859a69cca33 100644 --- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RMIConfig.java +++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RMIConfig.java @@ -89,7 +89,7 @@ public String getRmiEnabled() { } public void setRmiEnabled(String rmiEnabled) { - this.rmiEnabled = Boolean.valueOf(rmiEnabled).booleanValue(); + this.rmiEnabled = Boolean.parseBoolean(rmiEnabled); } public int rmiPort() { @@ -101,7 +101,7 @@ public String getRmiPort() { } public void setRmiPort(String rmiPort) { - this.rmiPort = Integer.decode(rmiPort).intValue(); + this.rmiPort = Integer.decode(rmiPort); } public String getRmiHost() { From 11d38b554578ccdc5c3911f6973fcd595ca32132 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 16:48:52 -0500 Subject: [PATCH 10/27] LoggingPrintStream.println() should atomically access/modify its buffer --- .../core/query/lucene/AbstractIndex.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java index 0aa4017a996..fd45d0b187f 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java @@ -599,7 +599,7 @@ private static Field.TermVector getTermVectorParameter(Fieldable f) { private static final class LoggingPrintStream extends PrintStream { /** Buffer print calls until a newline is written */ - private StringBuffer buffer = new StringBuffer(); + private final StringBuilder buffer = new StringBuilder(); public LoggingPrintStream() { super(new OutputStream() { @@ -610,13 +610,17 @@ public void write(int b) { } public void print(String s) { - buffer.append(s); + synchronized (buffer) { + buffer.append(s); + } } public void println(String s) { - buffer.append(s); - log.debug(buffer.toString()); - buffer.setLength(0); + synchronized (buffer) { + buffer.append(s); + log.debug(buffer.toString()); + buffer.setLength(0); + } } } } From e8419840eecba1c20cf077db8f80d85fc0411e5a Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 16:49:39 -0500 Subject: [PATCH 11/27] Correct potentially confusing whitespace indentation --- .../jackrabbit/core/query/lucene/LuceneQueryBuilder.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java index decde2ffa28..ed9b70057b3 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java @@ -769,8 +769,7 @@ public Object visit(PropertyFunctionQueryNode node, Object data) { Query q; if (transform[0] == TransformConstants.TRANSFORM_UPPER_CASE) { q = new CaseTermQuery.Upper(t); - } else - if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { + } else if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { q = new CaseTermQuery.Lower(t); } else { q = new JackrabbitTermQuery(t); @@ -853,8 +852,7 @@ public Object visit(PropertyFunctionQueryNode node, Object data) { Query q; if (transform[0] == TransformConstants.TRANSFORM_UPPER_CASE) { q = new CaseTermQuery.Upper(t); - } else - if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { + } else if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { q = new CaseTermQuery.Lower(t); } else { q = new JackrabbitTermQuery(t); @@ -882,8 +880,7 @@ public Object visit(PropertyFunctionQueryNode node, Object data) { Query q; if (transform[0] == TransformConstants.TRANSFORM_UPPER_CASE) { q = new CaseTermQuery.Upper(t); - } else - if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { + } else if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { q = new CaseTermQuery.Lower(t); } else { q = new JackrabbitTermQuery(t); From 8f801da0021c5020c093851741b100df8c0e7d2d Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 17:18:40 -0500 Subject: [PATCH 12/27] Use Collections.emptyMap() rather than EMPTY_MAP --- .../core/security/authorization/acl/ReadTest.java | 12 ++++++------ .../jackrabbit/test/api/RepositoryFactoryTest.java | 2 +- .../jackrabbit/acl/AccessControlListImpl.java | 4 ++-- .../org/apache/jackrabbit/spi/commons/EventImpl.java | 2 +- .../apache/jackrabbit/spi2jcr/ServiceStubImpl.java | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ReadTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ReadTest.java index dcd187330a7..0dde642026e 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ReadTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ReadTest.java @@ -355,7 +355,7 @@ public void testEmptyGlobRestriction()throws Exception{ // first deny access to 'path' (read-access is granted in the test setup) Privilege[] read = privilegesFromName(Privilege.JCR_READ); - withdrawPrivileges(path, read, Collections.EMPTY_MAP); + withdrawPrivileges(path, read, Collections.emptyMap()); Session testSession = getTestSession(); assertFalse(testSession.nodeExists(path)); @@ -378,7 +378,7 @@ public void testEmptyGlobRestriction()throws Exception{ assertFalse(canGetNode(testSession, ccPath)); assertFalse(testSession.propertyExists(childNPath + '/' + JcrConstants.JCR_PRIMARYTYPE)); - givePrivileges(ccPath, read, Collections.EMPTY_MAP); + givePrivileges(ccPath, read, Collections.emptyMap()); assertTrue(testSession.nodeExists(ccPath)); assertTrue(canGetNode(testSession, ccPath)); assertTrue(testSession.propertyExists(ccPath + '/' + JcrConstants.JCR_PRIMARYTYPE)); @@ -395,7 +395,7 @@ public void testEmptyGlobRestriction2()throws Exception{ // first deny access to 'path' (read-access is granted in the test setup) Privilege[] read = privilegesFromName(Privilege.JCR_READ); - withdrawPrivileges(path, read, Collections.EMPTY_MAP); + withdrawPrivileges(path, read, Collections.emptyMap()); Session testSession = getTestSession(); assertFalse(testSession.nodeExists(path)); @@ -441,17 +441,17 @@ public void testEmptyGlobRestriction3()throws Exception{ Privilege[] read = privilegesFromName(Privilege.JCR_READ); - withdrawPrivileges(path, group1.getPrincipal(), read, Collections.EMPTY_MAP); + withdrawPrivileges(path, group1.getPrincipal(), read, Collections.emptyMap()); Map emptyStringRestriction = new HashMap(getRestrictions(superuser, path)); emptyStringRestriction.put(AccessControlConstants.P_GLOB.toString(), vf.createValue("")); givePrivileges(path, group1.getPrincipal(), read, emptyStringRestriction); - withdrawPrivileges(childNPath, group2.getPrincipal(), read, Collections.EMPTY_MAP); + withdrawPrivileges(childNPath, group2.getPrincipal(), read, Collections.emptyMap()); emptyStringRestriction = new HashMap(getRestrictions(superuser, childNPath)); emptyStringRestriction.put(AccessControlConstants.P_GLOB.toString(), vf.createValue("")); givePrivileges(childNPath, group2.getPrincipal(), read, emptyStringRestriction); - withdrawPrivileges(childNPath2, group3.getPrincipal(), read, Collections.EMPTY_MAP); + withdrawPrivileges(childNPath2, group3.getPrincipal(), read, Collections.emptyMap()); emptyStringRestriction = new HashMap(getRestrictions(superuser, childNPath2)); emptyStringRestriction.put(AccessControlConstants.P_GLOB.toString(), vf.createValue("")); givePrivileges(childNPath2, group3.getPrincipal(), read, emptyStringRestriction); diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java index 2f39caedca2..69259f6676f 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java @@ -37,7 +37,7 @@ public void testDefaultRepository() throws Exception { public void testEmptyParameters() throws Exception { // must not throw - getRepositoryFactory().getRepository(Collections.EMPTY_MAP); + getRepositoryFactory().getRepository(Collections.emptyMap()); } protected RepositoryFactory getRepositoryFactory() diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImpl.java index 33c41b581b8..39fd5f77b9e 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImpl.java @@ -111,7 +111,7 @@ public AccessControlListImpl(String jcrPath, NamePathResolver resolver, QValueFa // the isAllow flag boolean isAllow = NT_REP_GRANT_ACE.equals(aceNode.getNodeTypeName()); // build the entry - AccessControlEntry ace = new AccessControlEntryImpl(principal, privileges, isAllow, restrictions, Collections.EMPTY_MAP, resolver, qValueFactory); + AccessControlEntry ace = new AccessControlEntryImpl(principal, privileges, isAllow, restrictions, Collections.emptyMap(), resolver, qValueFactory); entries.add(ace); } catch (RepositoryException e) { log.debug("Fail to create Entry for "+ aceNode.getName().toString()); @@ -183,7 +183,7 @@ public boolean addEntry(Principal principal, Privilege[] privileges, public boolean addEntry(Principal principal, Privilege[] privileges, boolean isAllow, Map restrictions) throws AccessControlException, RepositoryException { - return addEntry(principal, privileges, isAllow, restrictions, Collections.EMPTY_MAP); + return addEntry(principal, privileges, isAllow, restrictions, Collections.emptyMap()); } @Override diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java index 47d13904885..de41c0e5d93 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java @@ -84,7 +84,7 @@ public class EventImpl implements Event, Serializable { public EventImpl(int type, Path path, ItemId itemId, NodeId parentId, Name primaryNodeTypeName, Name[] mixinTypeNames, String userId) { - this(type, path, itemId, parentId, primaryNodeTypeName, mixinTypeNames, userId, null, Long.MIN_VALUE, Collections.EMPTY_MAP); + this(type, path, itemId, parentId, primaryNodeTypeName, mixinTypeNames, userId, null, Long.MIN_VALUE, Collections.emptyMap()); } /** diff --git a/jackrabbit-spi2jcr/src/test/java/org/apache/jackrabbit/spi2jcr/ServiceStubImpl.java b/jackrabbit-spi2jcr/src/test/java/org/apache/jackrabbit/spi2jcr/ServiceStubImpl.java index b10cd431ad7..f3581b7836b 100644 --- a/jackrabbit-spi2jcr/src/test/java/org/apache/jackrabbit/spi2jcr/ServiceStubImpl.java +++ b/jackrabbit-spi2jcr/src/test/java/org/apache/jackrabbit/spi2jcr/ServiceStubImpl.java @@ -49,7 +49,7 @@ public RepositoryService getRepositoryService() throws RepositoryException { if (service == null) { Repository repository; try { - repository = RepositoryStub.getInstance(Collections.EMPTY_MAP).getRepository(); + repository = RepositoryStub.getInstance(Collections.emptyMap()).getRepository(); } catch (RepositoryStubException e) { throw new RepositoryException(e); } From 282ddff34647aa4de2d13e628edd661b9998d567 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 17:21:26 -0500 Subject: [PATCH 13/27] Delete unused imports --- .../org/apache/jackrabbit/core/query/FulltextQueryTest.java | 2 -- .../org/apache/jackrabbit/core/fs/local/LocalFileSystem.java | 2 -- .../java/org/apache/jackrabbit/core/util/db/StreamWrapper.java | 1 - .../test/java/org/apache/jackrabbit/core/data/TestCaseBase.java | 1 - .../apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java | 1 - 5 files changed, 7 deletions(-) diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java index d2b26ddd9f2..34f21f06f03 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java @@ -16,8 +16,6 @@ */ package org.apache.jackrabbit.core.query; -import java.util.ArrayList; -import java.util.List; import java.util.TreeSet; import javax.jcr.Node; diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java index 9b4f703d7be..1195d2f4c72 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java @@ -18,8 +18,6 @@ import org.apache.jackrabbit.core.fs.FileSystem; import org.apache.jackrabbit.core.fs.FileSystemException; -import org.apache.jackrabbit.core.fs.local.FileUtil; -import org.apache.jackrabbit.core.fs.local.HandleMonitor; import org.apache.jackrabbit.util.LazyFileInputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java index ba38415c6dd..71b2f39fdde 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java @@ -22,7 +22,6 @@ import java.sql.SQLException; import org.apache.commons.io.input.CloseShieldInputStream; -import org.apache.jackrabbit.core.util.db.ConnectionHelper.RetryManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java b/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java index 5be2f38f94b..7436b29b9f8 100644 --- a/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java +++ b/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.SequenceInputStream; -import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java index 79b867e182b..ddf5b7dd5c9 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java @@ -27,7 +27,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.jackrabbit.JcrConstants; -import org.apache.jackrabbit.util.Text; import org.apache.jackrabbit.webdav.DavException; import org.apache.jackrabbit.webdav.DavMethods; import org.apache.jackrabbit.webdav.DavResource; From cb5a9c65188b31204fce0232d99a56cdc03fd10e Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 17:37:05 -0500 Subject: [PATCH 14/27] Guard against integer overflow --- .../jackrabbit/test/api/nodetype/NodeTypeUtil.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java index 00abc8a18e8..d59da195cf6 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java @@ -635,8 +635,16 @@ public static Value getValueAccordingToValueConstraints(Session session, return session.getValueFactory().createValue("0", PropertyType.BINARY); } else if (!maxBoundless) { // build a binary value of size > absMax - StringBuffer content = new StringBuffer(); - for (int i = 0; i <= absMax; i = i + 10) { + final int absMaxAsInt; + if (absMax < 0) { + absMaxAsInt = -1; + } else if (absMax + 10L >= Integer.MAX_VALUE) { + absMaxAsInt = Integer.MAX_VALUE - 11; + } else { + absMaxAsInt = (int)absMax; + } + StringBuilder content = new StringBuilder(absMax < 0 ? 0 : absMaxAsInt + 10); + for (int i = 0; i <= absMaxAsInt; i += 10) { content.append("0123456789"); } return session.getValueFactory().createValue(content.toString(), PropertyType.BINARY); From 4a84ab4a933c4ad19d034949b5994d14374610a9 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 17:39:51 -0500 Subject: [PATCH 15/27] LogPrintWriter.println() should atomically access/modify the buffer --- .../jackrabbit/test/LogPrintWriter.java | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/LogPrintWriter.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/LogPrintWriter.java index 435fcca1dc0..74c068d95d2 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/LogPrintWriter.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/LogPrintWriter.java @@ -31,7 +31,7 @@ public class LogPrintWriter extends PrintWriter { /** * Internal buffer. */ - private StringBuffer buffer = new StringBuffer(); + private final StringBuilder buffer = new StringBuilder(); /** * Logger for message output. @@ -97,42 +97,52 @@ public void flush() { } public void write(int c) { - buffer.append(c); + synchronized (buffer) { + buffer.append(c); + } } public void write(char cbuf[], int off, int len) { - buffer.append(cbuf, off, len); + synchronized (buffer) { + buffer.append(cbuf, off, len); + } } public void write(String str, int off, int len) { - buffer.append(str.substring(off, off + len)); + synchronized (buffer) { + buffer.append(str, off, off + len); + } } public void println() { - if (log == null) { - // only add newline when operating on a writer - buffer.append('\n'); + synchronized (buffer) { + if (log == null) { + // only add newline when operating on a writer + buffer.append('\n'); + } + flushBuffer(); } - flushBuffer(); } //-----------------------< private methods >-------------------------------- private void flushBuffer() { - if (buffer.length() == 0) { - return; - } - if (log != null) { - log.debug(buffer.toString()); - } else { - try { - out.write(buffer.toString()); - } catch (IOException e) { - this.setError(); + synchronized (buffer) { + if (buffer.length() == 0) { + return; + } + if (log != null) { + log.debug(buffer.toString()); + } else { + try { + out.write(buffer.toString()); + } catch (IOException e) { + this.setError(); + } } + // reset buffer + buffer.setLength(0); } - // reset buffer - buffer.setLength(0); } //------------------------< inter classes >--------------------------------- From 081e61b611da299fe817e1d752b95883420542c0 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 17:42:35 -0500 Subject: [PATCH 16/27] Fields storing cached values should be marked transient --- .../org/apache/jackrabbit/jcr2spi/observation/EventImpl.java | 2 +- .../java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java index 68f190d181f..cf8e3a35166 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java @@ -62,7 +62,7 @@ final class EventImpl implements Event { /** * Cached String value of this Event instance. */ - private String stringValue; + private transient String stringValue; /** * Creates a new {@link javax.jcr.observation.Event} instance based on an diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java index db498d23dfb..2e46680bf72 100644 --- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java +++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java @@ -39,7 +39,7 @@ public class ChildInfoImpl implements ChildInfo { */ private final int index; - private int hashCode; + private transient int hashCode; /** * Creates a new serializable ChildInfoImpl. From 40bbb7579b786e8a2e5a74f316ad35b80615d94f Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 20:36:56 -0500 Subject: [PATCH 17/27] Improve indentation --- .../hierarchy/ChildNodeEntriesImpl.java | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java index 49e83c47104..15dbebdd554 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java @@ -444,34 +444,34 @@ private void reorderAfter(LinkedEntries.LinkNode insertLN, LinkedEntries.LinkNod log.debug("Already ordered behind 'afterEntry'."); // nothing to do return; - } else { - // reorder named map - Name insertName = insertLN.qName; - if (entriesByName.containsSiblings(insertName)) { - int position = -1; // default: reorder to the end. - if (afterLN == entries.getHeader()) { - // move to the beginning - position = 0; - } else { - // count all SNS-entries that are before 'afterLN' in order to - // determine the new position of the reordered node regarding - // his siblings. - position = 0; - for (Iterator it = entries.linkNodeIterator(); it.hasNext(); ) { - LinkedEntries.LinkNode ln = it.next(); - if (insertName.equals(ln.qName) && (ln != insertLN)) { - position++; - } - if (ln == afterLN) { - break; - } + } + + // reorder named map + Name insertName = insertLN.qName; + if (entriesByName.containsSiblings(insertName)) { + int position = -1; // default: reorder to the end. + if (afterLN == entries.getHeader()) { + // move to the beginning + position = 0; + } else { + // count all SNS-entries that are before 'afterLN' in order to + // determine the new position of the reordered node regarding + // his siblings. + position = 0; + for (Iterator it = entries.linkNodeIterator(); it.hasNext(); ) { + LinkedEntries.LinkNode ln = it.next(); + if (insertName.equals(ln.qName) && (ln != insertLN)) { + position++; + } + if (ln == afterLN) { + break; } } - entriesByName.reorder(insertName, insertLN, position); } - // reorder in linked list - entries.reorderNode(insertLN, currentAfter); + entriesByName.reorder(insertName, insertLN, position); } + // reorder in linked list + entries.reorderNode(insertLN, currentAfter); } //-------------------------------------------------< AbstractLinkedList >--- From 7fba6ba955fd25881d6118ae8da1d72c657cf757 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 20:37:28 -0500 Subject: [PATCH 18/27] Simplify ChildNodeAttic.remove(NodeEntry) --- .../apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java index 20db0dccacd..90f02050a3e 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java @@ -112,10 +112,7 @@ void add(NodeEntryImpl movedEntry) { } boolean remove(NodeEntry movedEntry) { - if (attic.contains(movedEntry)) { - return attic.remove(movedEntry); - } - return false; + return attic.remove(movedEntry); } Iterator iterator() { From 571b82eb0dd6e365e45fc39786a9531ea752ecad Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 20:38:37 -0500 Subject: [PATCH 19/27] Use addAll(Arrays.asList(...)) to add each array element --- .../jackrabbit/webdav/simple/DefaultItemFilter.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java index bc1bb537827..9dea3d0591a 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java @@ -25,6 +25,7 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -46,9 +47,7 @@ public DefaultItemFilter() { */ public void setFilteredURIs(String[] uris) { if (uris != null) { - for (String uri : uris) { - uriFilter.add(uri); - } + uriFilter.addAll(Arrays.asList(uris)); } } @@ -57,9 +56,7 @@ public void setFilteredURIs(String[] uris) { */ public void setFilteredPrefixes(String[] prefixes) { if (prefixes != null) { - for (String prefix : prefixes) { - prefixFilter.add(prefix); - } + prefixFilter.addAll(Arrays.asList(prefixes)); } } @@ -68,9 +65,7 @@ public void setFilteredPrefixes(String[] prefixes) { */ public void setFilteredNodetypes(String[] nodetypeNames) { if (nodetypeNames != null) { - for (String nodetypeName : nodetypeNames) { - nodetypeFilter.add(nodetypeName); - } + nodetypeFilter.addAll(Arrays.asList(nodetypeNames)); } } From 65069d00894ddd0779d124e2f906a58aae080fd6 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 20:56:07 -0500 Subject: [PATCH 20/27] Utilize Commons Lang StrBuilder StrBuilder is like StringBuilder with some extra utility methods that improve the efficiency of certain code that builds strings. --- jackrabbit-jcr-tests/pom.xml | 4 +++ .../jackrabbit/test/api/NodeMixinUtil.java | 5 +-- .../test/api/NodeReadMethodsTest.java | 32 +++++++++---------- .../api/nodetype/NodeTypeManagerTest.java | 5 +-- jackrabbit-parent/pom.xml | 5 +++ jackrabbit-spi2dav/pom.xml | 4 +++ .../jackrabbit/spi2dav/URIResolverImpl.java | 7 ++-- jackrabbit-webdav/pom.xml | 4 +++ .../webdav/AbstractLocatorFactory.java | 5 +-- 9 files changed, 46 insertions(+), 25 deletions(-) diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index e52e0ebfc28..92eb39aa440 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -66,6 +66,10 @@ concurrent concurrent + + commons-lang + commons-lang + diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeMixinUtil.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeMixinUtil.java index 34e3f3a33e8..2a9afc9c975 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeMixinUtil.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeMixinUtil.java @@ -26,6 +26,7 @@ import javax.jcr.nodetype.NodeTypeIterator; import javax.jcr.nodetype.NodeTypeManager; +import org.apache.commons.lang.text.StrBuilder; import org.apache.jackrabbit.test.AbstractJCRTest; /** @@ -83,11 +84,11 @@ public static String getNonExistingMixinName(Session session) NodeTypeManager manager = session.getWorkspace().getNodeTypeManager(); NodeTypeIterator mixins = manager.getMixinNodeTypes(); - StringBuffer s = new StringBuffer("X"); + StrBuilder s = new StrBuilder("X"); while (mixins.hasNext()) { s.append(mixins.nextNodeType().getName()); } - return s.toString().replaceAll(":", ""); + return s.deleteAll(':').toString(); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java index 6e984a97b5a..0706eec0971 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.test.api; +import org.apache.commons.lang.text.StrBuilder; import org.apache.jackrabbit.test.AbstractJCRTest; import org.apache.jackrabbit.test.NotExecutableException; @@ -266,7 +267,7 @@ public void visit(Node node) throws RepositoryException { public void testGetNode() throws NotExecutableException, RepositoryException { - StringBuffer notExistingPath = new StringBuffer("X"); + StrBuilder notExistingPath = new StrBuilder("X"); NodeIterator nodes = testRootNode.getNodes(); while (nodes.hasNext()) { // build a path that for sure is not existing @@ -275,7 +276,7 @@ public void testGetNode() } try { - testRootNode.getNode(notExistingPath.toString().replaceAll(":", "")); + testRootNode.getNode(notExistingPath.deleteAll(':').toString()); fail("getNode(String relPath) must throw a PathNotFoundException" + "if no node exists at relPath"); } catch (PathNotFoundException e) { @@ -555,7 +556,7 @@ public void testGetNodesNamePatternArray() */ public void testGetProperty() throws NotExecutableException, RepositoryException { - StringBuffer notExistingPath = new StringBuffer("X"); + StrBuilder notExistingPath = new StrBuilder("X"); PropertyIterator properties = testRootNode.getProperties(); while (properties.hasNext()) { // build a path that for sure is not existing @@ -564,7 +565,7 @@ public void testGetProperty() } try { - testRootNode.getProperty(notExistingPath.toString().replaceAll(":", "")); + testRootNode.getProperty(notExistingPath.deleteAll(':').toString()); fail("getProperty(String relPath) must throw a " + "PathNotFoundException if no node exists at relPath"); } catch (PathNotFoundException e) { @@ -607,17 +608,16 @@ public void testGetPropertiesNamePattern() } PropertyIterator allPropertiesIt = node.getProperties(); List allProperties = new ArrayList(); - StringBuffer notExistingPropertyName = new StringBuffer(); + StrBuilder notExistingPropertyName = new StrBuilder(); while (allPropertiesIt.hasNext()) { Property p = allPropertiesIt.nextProperty(); allProperties.add(p); - notExistingPropertyName.append(p.getName() + "X"); + notExistingPropertyName.append(p.getName()).append('X'); } - // test that an empty NodeIterator is returned // when the pattern is not matching any child node - String pattern0 = notExistingPropertyName.toString().replaceAll(":", ""); + String pattern0 = notExistingPropertyName.deleteAll(':').toString(); NodeIterator properties0 = node.getNodes(pattern0); try { properties0.nextNode(); @@ -991,22 +991,22 @@ public void testHasNode() Node node = testRootNode; NodeIterator nodes = node.getNodes(); - StringBuffer notExistingNodeName = new StringBuffer(); + StrBuilder notExistingNodeName = new StrBuilder(); while (nodes.hasNext()) { Node n = nodes.nextNode(); assertTrue("hasNode(String relPath) returns false although " + "node at relPath is existing", node.hasNode(n.getName())); - notExistingNodeName.append(n.getName() + "X"); + notExistingNodeName.append(n.getName()).append('X'); } - if (notExistingNodeName.toString().equals("")) { + if (notExistingNodeName.length() == 0) { throw new NotExecutableException("Workspace does not have sufficient content for this test. " + "Root node must have at least one child node."); } assertFalse("hasNode(String relPath) returns true although " + "node at relPath is not existing", - node.hasNode(notExistingNodeName.toString().replaceAll(":", ""))); + node.hasNode(notExistingNodeName.deleteAll(':').toString())); } /** @@ -1044,21 +1044,21 @@ public void testHasProperty() Node node = testRootNode; PropertyIterator properties = node.getProperties(); - StringBuffer notExistingPropertyName = new StringBuffer(); + StrBuilder notExistingPropertyName = new StrBuilder(); while (properties.hasNext()) { Property p = properties.nextProperty(); assertTrue("node.hasProperty(\"relPath\") returns false " + "although property at relPath is existing", node.hasProperty(p.getName())); - notExistingPropertyName.append(p.getName() + "X"); + notExistingPropertyName.append(p.getName()).append('X'); } - if (notExistingPropertyName.toString().equals("")) { + if (notExistingPropertyName.length() == 0) { fail("Root node must at least have one property: jcr:primaryType"); } assertFalse("node.hasProperty(\"relPath\") returns true " + "although property at relPath is not existing", - node.hasProperty(notExistingPropertyName.toString().replaceAll(":", ""))); + node.hasProperty(notExistingPropertyName.deleteAll(':').toString())); } /** diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeManagerTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeManagerTest.java index 52aa0ceb57e..d52096e97f7 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeManagerTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeManagerTest.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.test.api.nodetype; +import org.apache.commons.lang.text.StrBuilder; import org.apache.jackrabbit.test.AbstractJCRTest; import javax.jcr.RepositoryException; @@ -77,7 +78,7 @@ public void testGetNodeType() throws RepositoryException { type.getName()); - StringBuffer notExistingName = new StringBuffer("X"); + StrBuilder notExistingName = new StrBuilder("X"); NodeTypeIterator types = manager.getAllNodeTypes(); while (types.hasNext()) { // build a name which is for sure not existing @@ -85,7 +86,7 @@ public void testGetNodeType() throws RepositoryException { notExistingName.append(types.nextNodeType().getName()); } try { - manager.getNodeType(notExistingName.toString().replaceAll(":", "")); + manager.getNodeType(notExistingName.deleteAll(':').toString()); fail("getNodeType(String nodeTypeName) must throw a " + "NoSuchNodeTypeException if no according NodeType " + "does exist"); diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 6474c9efb7e..9f008a12bdb 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -427,6 +427,11 @@ commons-io 2.5 + + commons-lang + commons-lang + 2.6 + org.apache.geronimo.specs geronimo-jta_1.0.1B_spec diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index 317b4acac14..d6e27cfefc1 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -115,6 +115,10 @@ + + commons-lang + commons-lang + org.apache.jackrabbit jackrabbit-spi diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java index ff2c3f37c89..c117b07d288 100644 --- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java +++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.spi2dav; +import org.apache.commons.lang.text.StrBuilder; import org.apache.http.HttpResponse; import org.apache.jackrabbit.commons.webdav.JcrRemotingConstants; import org.apache.jackrabbit.spi.commons.conversion.NameException; @@ -101,7 +102,7 @@ String getItemUri(ItemId itemId, String workspaceName, SessionInfo sessionInfo) if (cache.containsItemId(itemId)) { return cache.getUri(itemId); } else { - StringBuffer uriBuffer = new StringBuffer(); + StrBuilder uriBuffer = new StrBuilder(); Path path = itemId.getPath(); String uniqueID = itemId.getUniqueID(); @@ -152,8 +153,8 @@ String getItemUri(ItemId itemId, String workspaceName, SessionInfo sessionInfo) // resolve relative-path part unless it denotes the root-item if (path != null && !path.denotesRoot()) { String jcrPath = service.getNamePathResolver(sessionInfo).getJCRPath(path); - if (!path.isAbsolute() && !uriBuffer.toString().endsWith("/")) { - uriBuffer.append("/"); + if (!path.isAbsolute() && !uriBuffer.endsWith("/")) { + uriBuffer.append('/'); } uriBuffer.append(Text.escapePath(jcrPath)); } diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index 7be774900e6..2b0a9966824 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -74,6 +74,10 @@ commons-codec 1.10 + + commons-lang + commons-lang + org.apache.httpcomponents httpclient diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/AbstractLocatorFactory.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/AbstractLocatorFactory.java index 628b8ad3025..f896ac881bd 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/AbstractLocatorFactory.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/AbstractLocatorFactory.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.webdav; +import org.apache.commons.lang.text.StrBuilder; import org.apache.jackrabbit.webdav.util.EncodeUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -90,7 +91,7 @@ public DavResourceLocator createResourceLocator(String prefix, String href) { } // build prefix string and remove all prefixes from the given href. - StringBuffer b = new StringBuffer(""); + StrBuilder b = new StrBuilder(); if (prefix != null && prefix.length() > 0) { b.append(prefix); if (href.startsWith(prefix)) { @@ -98,7 +99,7 @@ public DavResourceLocator createResourceLocator(String prefix, String href) { } } if (pathPrefix != null && pathPrefix.length() > 0) { - if (!b.toString().endsWith(pathPrefix)) { + if (!b.endsWith(pathPrefix)) { b.append(pathPrefix); } if (href.startsWith(pathPrefix)) { From b16be2e0230c3887da685f69964bb685fab4f81a Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 21:00:06 -0500 Subject: [PATCH 21/27] Use StringUtils' null-safe equals() and endsWith() --- jackrabbit-core/pom.xml | 4 ++++ .../apache/jackrabbit/core/query/lucene/TermDocsCache.java | 3 ++- jackrabbit-jcr-server/pom.xml | 4 ++++ .../apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java | 3 ++- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 268c4879bc6..6eee3240e43 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -237,6 +237,10 @@ org.apache.jackrabbit.test.api.query.qom.NodeLocalNameTest#testURILiteral commons-dbcp 1.3 + + commons-lang + commons-lang + javax.jcr jcr diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/TermDocsCache.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/TermDocsCache.java index 153e8e95ccb..a70daa51b5c 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/TermDocsCache.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/TermDocsCache.java @@ -24,6 +24,7 @@ import java.util.Iterator; import java.util.LinkedHashMap; +import org.apache.commons.lang.StringUtils; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.TermDocs; import org.apache.lucene.index.Term; @@ -94,7 +95,7 @@ public TermDocsCache(IndexReader reader, String field) { * @throws IOException if an error occurs while reading from the index. */ public TermDocs termDocs(final Term t) throws IOException { - if (t == null || t.field() != field) { + if (t == null || !StringUtils.equals(t.field(), field)) { return reader.termDocs(t); } diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index ce3baa256b5..5dc182eaf8a 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -209,6 +209,10 @@ commons-fileupload commons-fileupload + + commons-lang + commons-lang + diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java index a66f1a678b9..7b92e61c1ed 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.webdav.simple; +import org.apache.commons.lang.StringUtils; import org.apache.jackrabbit.util.Text; import org.apache.jackrabbit.webdav.DavLocatorFactory; import org.apache.jackrabbit.webdav.DavResourceLocator; @@ -46,7 +47,7 @@ public DavResourceLocator createResourceLocator(String prefix, String href) { href = href.substring(prefix.length()); } } - if (repositoryPrefix != null && repositoryPrefix.length() > 0 && !prefix.endsWith(repositoryPrefix)) { + if (repositoryPrefix != null && repositoryPrefix.length() > 0 && !StringUtils.endsWith(prefix, repositoryPrefix)) { b.append(repositoryPrefix); if (href.startsWith(repositoryPrefix)) { href = href.substring(repositoryPrefix.length()); From cd2217dc3831b8f0fdf425cb323c1339c7b8b2dc Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 21:02:03 -0500 Subject: [PATCH 22/27] Don't recompute name.indexOf('[') --- .../apache/jackrabbit/test/api/NodeReadMethodsTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java index 0706eec0971..1a92c8fb338 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java @@ -119,9 +119,10 @@ public void testGetName() throws RepositoryException, NotExecutableException { // build name from path String path = childNode.getPath(); - String name = path.substring(path.lastIndexOf("/") + 1); - if (name.indexOf("[") != -1) { - name = name.substring(0, name.indexOf("[")); + String name = path.substring(path.lastIndexOf('/') + 1); + final int leftSquareBracketPos = name.indexOf('['); + if (leftSquareBracketPos != -1) { + name = name.substring(0, leftSquareBracketPos); } assertEquals("getName() must be the same as the last item in the path", name, From 748fc815156563ac889e6a46089c2896ba285222 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 21:24:56 -0500 Subject: [PATCH 23/27] Supply type information --- changes.patch | 13430 ++++++++++++++++ .../rmi/observation/ClientEventPoll.java | 14 +- 2 files changed, 13437 insertions(+), 7 deletions(-) create mode 100644 changes.patch diff --git a/changes.patch b/changes.patch new file mode 100644 index 00000000000..4f821f50eda --- /dev/null +++ b/changes.patch @@ -0,0 +1,13430 @@ +diff --git a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/Utils.java b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/Utils.java +index 88c0fc8..f845cfb 100644 +--- a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/Utils.java ++++ b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/Utils.java +@@ -82,7 +82,7 @@ public final class Utils { + public static AmazonS3Client openService(final Properties prop) { + String accessKey = prop.getProperty(S3Constants.ACCESS_KEY); + String secretKey = prop.getProperty(S3Constants.SECRET_KEY); +- AmazonS3Client s3service = null; ++ AmazonS3Client s3service; + if (StringUtils.isNullOrEmpty(accessKey) + || StringUtils.isNullOrEmpty(secretKey)) { + LOG.info("Configuring Amazon Client from environment"); +@@ -95,7 +95,7 @@ public final class Utils { + getClientConfiguration(prop)); + } + String region = prop.getProperty(S3Constants.S3_REGION); +- String endpoint = null; ++ String endpoint; + String propEndPoint = prop.getProperty(S3Constants.S3_END_POINT); + if ((propEndPoint != null) && !"".equals(propEndPoint)) { + endpoint = propEndPoint; +@@ -188,7 +188,7 @@ public final class Utils { + private static void deleteIfPossible(final File file) { + boolean deleted = file.delete(); + if (!deleted) { +- LOG.warn("Could not delete " + file.getAbsolutePath()); ++ LOG.warn("Could not delete {}", file.getAbsolutePath()); + } + } + +diff --git a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java +index 01e87dd..2c9cfa4 100644 +--- a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java ++++ b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java +@@ -265,7 +265,7 @@ public class S3Backend extends AbstractBackend { + throws DataStoreException { + long start = System.currentTimeMillis(); + String key = getKeyName(identifier); +- ObjectMetadata objectMetaData = null; ++ ObjectMetadata objectMetaData; + boolean retVal = false; + ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); + try { +@@ -362,12 +362,11 @@ public class S3Backend extends AbstractBackend { + copReq.setNewObjectMetadata(new ObjectMetadata()); + Copy copy = tmx.copy(s3ReqDecorator.decorate(copReq)); + copy.waitForCompletion(); +- LOG.debug("[{}] touched. time taken [{}] ms ", new Object[] { +- identifier, (System.currentTimeMillis() - start) }); ++ LOG.debug("[{}] touched. time taken [{}] ms ", ++ identifier, System.currentTimeMillis() - start); + } else { + LOG.trace("[{}] touch not required. time taken [{}] ms ", +- new Object[] { identifier, +- (System.currentTimeMillis() - start) }); ++ identifier, System.currentTimeMillis() - start); + } + + } catch (Exception e) { +@@ -499,8 +498,8 @@ public class S3Backend extends AbstractBackend { + Thread.currentThread().setContextClassLoader( + getClass().getClassLoader()); + s3service.deleteObject(bucket, key); +- LOG.debug("Identifier [{}] deleted. It took [{}]ms.", new Object[] { +- identifier, (System.currentTimeMillis() - start) }); ++ LOG.debug("Identifier [{}] deleted. It took [{}]ms.", ++ identifier, System.currentTimeMillis() - start); + } catch (AmazonServiceException e) { + throw new DataStoreException( + "Could not getLastModified of dataIdentifier " + identifier, e); +@@ -826,8 +825,8 @@ public class S3Backend extends AbstractBackend { + copy.waitForCopyResult(); + LOG.debug("[{}] renamed to [{}] ", oldKey, newS3Key); + } catch (InterruptedException ie) { +- LOG.error(" Exception in renaming [{}] to [{}] ", +- new Object[] { ie, oldKey, newS3Key }); ++ LOG.error("Exception in renaming [{}] to [{}]", ++ new Object[] { oldKey, newS3Key, ie }); + } + } finally { + if (contextClassLoader != null) { +@@ -912,8 +911,8 @@ public class S3Backend extends AbstractBackend { + try { + write(identifier, file, true, callback); + } catch (DataStoreException e) { +- LOG.error("Could not upload [" + identifier + "], file[" + file +- + "]", e); ++ LOG.error("Could not upload [{}], file[{}]", ++ new Object[] { identifier, file, e }); + } + + } +diff --git a/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/TestAll.java b/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/TestAll.java +index fb289ad..2c2f503 100644 +--- a/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/TestAll.java ++++ b/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/TestAll.java +@@ -46,7 +46,7 @@ public class TestAll extends TestCase { + public static Test suite() { + TestSuite suite = new TestSuite("S3 tests"); + String config = System.getProperty(TestCaseBase.CONFIG); +- LOG.info("config= " + config); ++ LOG.info("config= {}", config); + if (config != null && !"".equals(config.trim())) { + suite.addTestSuite(TestS3Ds.class); + suite.addTestSuite(TestS3DSAsyncTouch.class); +diff --git a/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3DSWithSSES3.java b/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3DSWithSSES3.java +index 45a2948..7e0f83f 100644 +--- a/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3DSWithSSES3.java ++++ b/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3DSWithSSES3.java +@@ -82,7 +82,7 @@ public class TestS3DSWithSSES3 extends TestS3Ds { + assertRecord(data, rec); + + randomGen.nextBytes(data); +- rec = s3ds.addRecord(new ByteArrayInputStream(data)); ++ s3ds.addRecord(new ByteArrayInputStream(data)); + s3ds.close(); + + } catch (Exception e) { +diff --git a/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3Ds.java b/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3Ds.java +index 36c256c..36fcadb 100644 +--- a/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3Ds.java ++++ b/jackrabbit-aws-ext/src/test/java/org/apache/jackrabbit/aws/ext/ds/TestS3Ds.java +@@ -106,7 +106,7 @@ public class TestS3Ds extends TestCaseBase { + } + + public void deleteBucket(String bucket) throws Exception { +- LOG.info("deleting bucket [" + bucket + "]"); ++ LOG.info("deleting bucket [{}]", bucket); + Properties props = Utils.readConfig(config); + AmazonS3Client s3service = Utils.openService(props); + TransferManager tmx = new TransferManager(s3service); +@@ -132,10 +132,10 @@ public class TestS3Ds extends TestCaseBase { + } + } + s3service.deleteBucket(bucket); +- LOG.info("bucket [ " + bucket + "] deleted"); ++ LOG.info("bucket [{}] deleted", bucket); + + } else { +- LOG.info("bucket [" + bucket + "] doesn't exists"); ++ LOG.info("bucket [{}] doesn't exists", bucket); + } + tmx.shutdownNow(); + s3service.shutdown(); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java +index 0bc3500..65d7f3c 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java +@@ -235,7 +235,7 @@ public class CachingHierarchyManager extends HierarchyManagerImpl + try { + cache(((NodeState) state).getNodeId(), builder.getPath()); + } catch (MalformedPathException mpe) { +- log.warn("Failed to build path of " + state.getId()); ++ log.warn("Failed to build path of {}", state.getId()); + } + } + } +@@ -411,16 +411,15 @@ public class CachingHierarchyManager extends HierarchyManagerImpl + nodeAdded(state, path, id); + checkConsistency(); + } catch (PathNotFoundException e) { +- log.warn("Unable to get path of node " + state.getNodeId() +- + ", event ignored."); ++ log.warn("Unable to get path of node {}, event ignored.", state.getNodeId()); + } catch (MalformedPathException e) { +- log.warn("Unable to create path of " + id, e); ++ log.warn("Unable to create path of {}", id, e); + } catch (ItemNotFoundException e) { +- log.warn("Unable to find item " + state.getNodeId(), e); ++ log.warn("Unable to find item {}", state.getNodeId(), e); + } catch (ItemStateException e) { +- log.warn("Unable to find item " + id, e); ++ log.warn("Unable to find item {}", id, e); + } catch (RepositoryException e) { +- log.warn("Unable to get path of " + state.getNodeId(), e); ++ log.warn("Unable to get path of {}", state.getNodeId(), e); + } + } else if (state.getParentId() == null && idCache.containsKey(id)) { + // A top level node was added +@@ -497,16 +496,15 @@ public class CachingHierarchyManager extends HierarchyManagerImpl + nodeRemoved(state, path, id); + checkConsistency(); + } catch (PathNotFoundException e) { +- log.warn("Unable to get path of node " + state.getNodeId() +- + ", event ignored."); ++ log.warn("Unable to get path of node {}, event ignored.", state.getNodeId()); + } catch (MalformedPathException e) { +- log.warn("Unable to create path of " + id, e); ++ log.warn("Unable to create path of {}", id, e); + } catch (ItemStateException e) { +- log.warn("Unable to find item " + id, e); ++ log.warn("Unable to find item {}", id, e); + } catch (ItemNotFoundException e) { +- log.warn("Unable to get path of " + state.getNodeId(), e); ++ log.warn("Unable to get path of {}", state.getNodeId(), e); + } catch (RepositoryException e) { +- log.warn("Unable to get path of " + state.getNodeId(), e); ++ log.warn("Unable to get path of {}", state.getNodeId(), e); + } + } else if (state.getParentId() == null && idCache.containsKey(id)) { + // A top level node was removed +@@ -1060,10 +1058,10 @@ public class CachingHierarchyManager extends HierarchyManagerImpl + long now = System.currentTimeMillis(); + final String msg = "Cache id = {};size = {};max = {}"; + if (log.isTraceEnabled()) { +- log.trace(msg, new Object[]{id, this.cache.size(), upperLimit}, new Exception()); ++ log.trace(msg, new Object[] { id, this.cache.size(), upperLimit, new Exception()}); + } else if (now > timeStamp + CACHE_STATISTICS_LOG_INTERVAL_MILLIS) { + timeStamp = now; +- log.debug(msg, new Object[]{id, this.cache.size(), upperLimit}, new Exception()); ++ log.debug(msg, new Object[] { id, this.cache.size(), upperLimit, new Exception()}); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/DefaultSecurityManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/DefaultSecurityManager.java +index 955a0f3..5eb9220 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/DefaultSecurityManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/DefaultSecurityManager.java +@@ -171,9 +171,9 @@ public class DefaultSecurityManager implements JackrabbitSecurityManager { + // build AuthContextProvider based on appName + optional LoginModuleConfig + authContextProvider = new AuthContextProvider(config.getAppName(), loginModConf); + if (authContextProvider.isLocal()) { +- log.info("init: use Repository Login-Configuration for " + config.getAppName()); ++ log.info("init: use Repository Login-Configuration for {}", config.getAppName()); + } else if (authContextProvider.isJAAS()) { +- log.info("init: use JAAS login-configuration for " + config.getAppName()); ++ log.info("init: use JAAS login-configuration for {}", config.getAppName()); + } else { + String msg = "Neither JAAS nor RepositoryConfig contained a valid configuration for " + config.getAppName(); + log.error(msg); +@@ -359,9 +359,9 @@ public class DefaultSecurityManager implements JackrabbitSecurityManager { + } + } + // all principals found with the given p-Class were Group principals +- log.debug("Only Group principals found with class '" + cl.getName() + "' -> Not used for UserID."); ++ log.debug("Only Group principals found with class '{}' -> Not used for UserID.", cl.getName()); + } else { +- log.debug("No principal found with class '" + cl.getName() + "'."); ++ log.debug("No principal found with class '{}'.", cl.getName()); + } + } + +@@ -624,7 +624,7 @@ public class DefaultSecurityManager implements JackrabbitSecurityManager { + if (!userManager.isAutoSave()) { + session.save(); + } +- log.info("... created admin-user with id \'" + adminId + "\' ..."); ++ log.info("... created admin-user with id '{}' ...", adminId); + } + } + +@@ -636,7 +636,7 @@ public class DefaultSecurityManager implements JackrabbitSecurityManager { + if (!userManager.isAutoSave()) { + session.save(); + } +- log.info("... created anonymous user with id \'" + anonymousId + "\' ..."); ++ log.info("... created anonymous user with id '{}' ...", anonymousId); + } catch (RepositoryException e) { + // exception while creating the anonymous user. + // log an error but don't abort the repository start-up +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java +index 7b1ca35..ace9033 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java +@@ -223,7 +223,7 @@ public class ItemManager implements ItemStateListener { + def = ent.getApplicableChildNodeDef( + cne.getName(), state.getNodeTypeName(), ntReg); + log.warn("Fallback to nt:unstructured due to unknown child " + +- "node definition for type '" + state.getNodeTypeName() + "'"); ++ "node definition for type '{}'", state.getNodeTypeName()); + } + return sessionContext.getNodeTypeManager().getNodeDefinition(def); + } catch (NodeTypeConflictException e) { +@@ -272,7 +272,7 @@ public class ItemManager implements ItemStateListener { + def = ent.getApplicablePropertyDef(state.getName(), + state.getType(), state.isMultiValued()); + log.warn("Fallback to nt:unstructured due to unknown property " + +- "definition for '" + state.getName() + "'"); ++ "definition for '{}'", state.getName()); + } + return sessionContext.getNodeTypeManager().getPropertyDefinition(def); + } catch (ItemStateException e) { +@@ -933,7 +933,7 @@ public class ItemManager implements ItemStateListener { + } + ItemId id = data.getId(); + if (itemCache.containsKey(id)) { +- log.debug("overwriting cached item " + id); ++ log.debug("overwriting cached item {}", id); + } + if (log.isDebugEnabled()) { + log.debug("caching item " + id); +@@ -993,7 +993,7 @@ public class ItemManager implements ItemStateListener { + try { + return session.getJCRPath(path); + } catch (NamespaceException e) { +- log.error("failed to convert " + path.toString() + " to JCR path."); ++ log.error("failed to convert {} to JCR path.", path); + // return string representation of internal path as a fallback + return path.toString(); + } +@@ -1010,7 +1010,7 @@ public class ItemManager implements ItemStateListener { + try { + return safeGetJCRPath(hierMgr.getPath(id)); + } catch (RepositoryException re) { +- log.error(id + ": failed to determine path to"); ++ log.error("{}: failed to determine path to", id); + // return string representation if id as a fallback + return id.toString(); + } +@@ -1047,7 +1047,7 @@ public class ItemManager implements ItemStateListener { + */ + public synchronized String toString() { + StringBuilder builder = new StringBuilder(); +- builder.append("ItemManager (" + super.toString() + ")\n"); ++ builder.append("ItemManager (").append(super.toString()).append(")\n"); + builder.append("Items in cache:\n"); + synchronized (itemCache) { + for (ItemId id : itemCache.keySet()) { +@@ -1062,7 +1062,7 @@ public class ItemManager implements ItemStateListener { + } else { + builder.append(" "); + } +- builder.append(id + "\t" + safeGetJCRPath(id) + " (" + item + ")\n"); ++ builder.append(id).append('\t').append(safeGetJCRPath(id)).append(" (").append(item).append(")\n"); + } + } + return builder.toString(); +@@ -1261,7 +1261,7 @@ public class ItemManager implements ItemStateListener { + } + Object old = map.put(data.getPrimaryParentId(), data); + if (old != null) { +- log.debug("overwriting cached item: " + old); ++ log.debug("overwriting cached item: {}", old); + } + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemSaveOperation.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemSaveOperation.java +index 26a84e5..86a2522 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemSaveOperation.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemSaveOperation.java +@@ -173,7 +173,7 @@ class ItemSaveOperation implements SessionWriteOperation { + } + } catch (ItemStateException ise) { + // should never get here +- log.warn("failed to retrieve transient state: " + newParentId, ise); ++ log.warn("failed to retrieve transient state: {}", newParentId, ise); + } + } + } +@@ -330,8 +330,7 @@ class ItemSaveOperation implements SessionWriteOperation { + + "removed externally: " + this); + + default: +- log.warn("Unexpected item state status: " +- + transientState.getStatus() + " of " + this); ++ log.warn("Unexpected item state status: {} of {}", transientState.getStatus(), this); + // ignore + break; + } +@@ -360,8 +359,7 @@ class ItemSaveOperation implements SessionWriteOperation { + + " removed externally: " + this); + + default: +- log.warn("Unexpected item state status:" +- + state.getStatus() + " of " + this); ++ log.warn("Unexpected item state status:{} of {}", state.getStatus(), this); + // ignore + break; + } +@@ -896,7 +894,7 @@ class ItemSaveOperation implements SessionWriteOperation { + String msg = itemMgr.safeGetJCRPath(id) + + ": failed to restore transient state"; + if (log.isDebugEnabled()) { +- log.warn(msg, re); ++ log.debug(msg, re); + } else { + log.warn(msg); + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java +index eb08c56..6770bfd 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemValidator.java +@@ -539,7 +539,7 @@ public class ItemValidator { + // return string representation of id as a fallback + return id.toString(); + } catch (RepositoryException e) { +- log.error(id + ": failed to build path"); ++ log.error("{}: failed to build path", id); + // return string representation of id as a fallback + return id.toString(); + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/LazyItemIterator.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/LazyItemIterator.java +index 21b5843..836ce48 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/LazyItemIterator.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/LazyItemIterator.java +@@ -122,7 +122,7 @@ public class LazyItemIterator implements NodeIterator, PropertyIterator { + next = itemMgr.getItem(id); + } + } catch (ItemNotFoundException e) { +- log.debug("ignoring nonexistent item " + id); ++ log.debug("ignoring nonexistent item {}", id); + // remove invalid id + idList.remove(pos); + +@@ -145,12 +145,12 @@ public class LazyItemIterator implements NodeIterator, PropertyIterator { + + // try next + } catch (AccessDeniedException e) { +- log.debug("ignoring nonexistent item " + id); ++ log.debug("ignoring nonexistent item {}", id); + // remove invalid id + idList.remove(pos); + // try next + } catch (RepositoryException e) { +- log.error("failed to fetch item " + id + ", skipping...", e); ++ log.error("failed to fetch item {}, skipping...", id, e); + // remove invalid id + idList.remove(pos); + // try next +@@ -222,7 +222,7 @@ public class LazyItemIterator implements NodeIterator, PropertyIterator { + ItemId id = idList.get(pos); + // eliminate invalid items from this iterator + while (!itemMgr.itemExists(id)) { +- log.debug("ignoring nonexistent item " + id); ++ log.debug("ignoring nonexistent item {}", id); + // remove invalid id + idList.remove(pos); + if (pos >= idList.size()) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java +index 3519d92..093019e 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java +@@ -155,8 +155,7 @@ public class NodeImpl extends ItemImpl implements Node, JackrabbitNode { + * todo need proper way of handling inconsistent/corrupt node type references + * e.g. 'flag' nodes that refer to non-registered node types + */ +- log.warn("Fallback to nt:unstructured due to unknown node type '" +- + state.getNodeTypeName() + "' of " + this); ++ log.warn("Fallback to nt:unstructured due to unknown node type '{}' of {}", state.getNodeTypeName(), this); + data.getNodeState().setNodeTypeName(NameConstants.NT_UNSTRUCTURED); + } + List unknown = null; +@@ -166,8 +165,7 @@ public class NodeImpl extends ItemImpl implements Node, JackrabbitNode { + unknown = new ArrayList(); + } + unknown.add(mixinName); +- log.warn("Ignoring unknown mixin type '" + mixinName + +- "' of " + this); ++ log.warn("Ignoring unknown mixin type '{}' of {}", mixinName, this); + } + } + if (unknown != null) { +@@ -630,7 +628,7 @@ public class NodeImpl extends ItemImpl implements Node, JackrabbitNode { + // we need to check if the item doesn't exist in the ism + ItemStateManager ism = sessionContext.getItemStateManager(); + if (!ism.hasItemState(childId)) { +- log.warn("Node " + childId + " not found, ignore", e); ++ log.warn("Node {} not found, ignore", childId, e); + ignoreError = true; + } + } +@@ -704,10 +702,12 @@ public class NodeImpl extends ItemImpl implements Node, JackrabbitNode { + // we need to check if the item doesn't exist in the ism + ItemStateManager ism = sessionContext.getItemStateManager(); + if (!ism.hasItemState(childId)) { +- log.warn("Child named " + entry.getName() + " (index " + entry.getIndex() + ", " + +- "node id " + childId + ") " + +- "not found when trying to remove " + getPath() + " " + +- "(node id " + getNodeId() + ") - ignored", e); ++ if (log.isWarnEnabled()) { ++ log.warn("Child named " + entry.getName() + " (index " + entry.getIndex() + ", " + ++ "node id " + childId + ") " + ++ "not found when trying to remove " + getPath() + " " + ++ "(node id " + getNodeId() + ") - ignored", e); ++ } + ignoreError = true; + } + } +@@ -859,7 +859,7 @@ public class NodeImpl extends ItemImpl implements Node, JackrabbitNode { + @Override + protected void makePersistent() throws RepositoryException { + if (!isTransient()) { +- log.debug(this + " (" + id + "): there's no transient state to persist"); ++ log.debug("{} ({}): there's no transient state to persist", this, id); + return; + } + +@@ -3248,7 +3248,7 @@ public class NodeImpl extends ItemImpl implements Node, JackrabbitNode { + + Name ntName = sessionContext.getQName(nodeTypeName); + if (ntName.equals(state.getNodeTypeName())) { +- log.debug("Node already has " + nodeTypeName + " as primary node type."); ++ log.debug("Node already has {} as primary node type.", nodeTypeName); + return; + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java +index e89f245..20fa838 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/PropertyImpl.java +@@ -136,7 +136,7 @@ public class PropertyImpl extends ItemImpl implements Property { + @Override + protected void makePersistent() throws InvalidItemStateException { + if (!isTransient()) { +- log.debug(this + " (" + id + "): there's no transient state to persist"); ++ log.debug("{} ({}): there's no transient state to persist", this, id); + return; + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java +index 9174927..f93da13 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java +@@ -107,9 +107,8 @@ class RepositoryChecker { + internalFix(true); + } + +- log.info("RepositoryChecker finished; checked " + totalNodes +- + " nodes in " + (System.currentTimeMillis() - startTime) +- + "ms, problems found: " + brokenNodes); ++ log.info("RepositoryChecker finished; checked {} nodes in {}ms, problems found: {}", ++ new Object[] { totalNodes, System.currentTimeMillis() - startTime, brokenNodes }); + } + + private void internalCheck(NodeId id, boolean recurse, +@@ -155,7 +154,7 @@ class RepositoryChecker { + } + } else { + if (verbose) { +- log.info("No " + store + " inconsistencies found"); ++ log.info("No {} inconsistencies found", store); + } + } + } +@@ -182,7 +181,7 @@ class RepositoryChecker { + try { + String type = isVersioned ? "in-use" : "candidate"; + +- log.debug("Checking " + type + " version history of node {}", nid); ++ log.debug("Checking {} version history of node {}", type, nid); + + String intro = "Removing references to an inconsistent " + type + + " version history of node " + nid; +@@ -247,8 +246,8 @@ class RepositoryChecker { + NodeId nvhid = e.getVersionHistoryNodeId(); + if (nvhid != null) { + if (vhid != null && !nvhid.equals(vhid)) { +- log.error("vhrid returned with InconsistentVersioningState does not match the id we already had: " +- + vhid + " vs " + nvhid); ++ log.error("vhrid returned with InconsistentVersioningState does not match the id we already had: {} vs {}", ++ vhid, nvhid); + } + vhid = nvhid; + } +@@ -287,7 +286,7 @@ class RepositoryChecker { + // a future attempt to put the node under version control again + // (see JCR-3115) + +- log.info("trying to rename version history of node " + node.getId()); ++ log.info("trying to rename version history of node {}", node.getId()); + + NameFactory nf = NameFactoryImpl.getInstance(); + +@@ -314,7 +313,7 @@ class RepositoryChecker { + vworkspaceChanges.modified(modifiedParent); + } + else { +- log.info("child node entry " + vhrname + " for version history not found inside parent folder."); ++ log.info("child node entry {} for version history not found inside parent folder.", vhrname); + } + } catch (Exception ex) { + log.error("while trying to rename the version history", ex); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java +index 06645e3..d93367c 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java +@@ -363,9 +363,9 @@ public class RepositoryImpl extends AbstractRepository + } + + succeeded = true; +- log.info("Repository started (" + (System.currentTimeMillis() - t0) + "ms)"); ++ log.info("Repository started ({}ms)", System.currentTimeMillis() - t0); + } catch (RepositoryException e) { +- log.error("failed to start Repository: " + e.getMessage(), e); ++ log.error("failed to start Repository: {}", e.getMessage(), e); + throw e; + } finally { + if (!succeeded) { +@@ -451,7 +451,7 @@ public class RepositoryImpl extends AbstractRepository + securityMgr = smc.newInstance(JackrabbitSecurityManager.class); + } + +- log.info("SecurityManager = " + securityMgr.getClass()); ++ log.info("SecurityManager = {}", securityMgr.getClass()); + + context.setSecurityManager(securityMgr); + +@@ -547,7 +547,7 @@ public class RepositoryImpl extends AbstractRepository + } + } catch (RepositoryException e) { + // if default workspace failed to initialize, shutdown again +- log.error("Failed to initialize workspace '" + wspName + "'", e); ++ log.error("Failed to initialize workspace '{}'", wspName, e); + log.error("Unable to start repository, forcing shutdown..."); + shutdown(); + throw e; +@@ -709,7 +709,7 @@ public class RepositoryImpl extends AbstractRepository + try { + wspInfo.initialize(); + } catch (RepositoryException e) { +- log.error("Unable to initialize workspace '" + workspaceName + "'", e); ++ log.error("Unable to initialize workspace '{}'", workspaceName, e); + throw new NoSuchWorkspaceException(workspaceName); + } + return wspInfo; +@@ -1540,7 +1540,7 @@ public class RepositoryImpl extends AbstractRepository + try { + return (v == null) ? null : v.getString(); + } catch (RepositoryException e) { +- log.error("corrupt descriptor value: " + key, e); ++ log.error("corrupt descriptor value: {}", key, e); + return null; + } + } +@@ -2031,11 +2031,11 @@ public class RepositoryImpl extends AbstractRepository + // already initialized, some other thread was quicker, we're done + return false; + } +- log.info("initializing workspace '" + getName() + "'..."); ++ log.info("initializing workspace '{}'...", getName()); + doInitialize(); + initialized = true; + doPostInitialize(); +- log.info("workspace '" + getName() + "' initialized"); ++ log.info("workspace '{}' initialized", getName()); + return true; + } finally { + initLock.writeLock().release(); +@@ -2067,7 +2067,7 @@ public class RepositoryImpl extends AbstractRepository + itemStateMgr.addVirtualItemStateProvider( + virtNTMgr.getVirtualItemStateProvider()); + } catch (Exception e) { +- log.error("Unable to add vmgr: " + e.toString(), e); ++ log.error("Unable to add vmgr: {}", e, e); + } + ClusterNode clusterNode = context.getClusterNode(); + if (clusterNode != null && config.isClustered()) { +@@ -2139,7 +2139,7 @@ public class RepositoryImpl extends AbstractRepository + | Event.PROPERTY_CHANGED, + "/", true, null, null, false); + } +- log.debug("SearchManager initialized (" + (System.currentTimeMillis() - t0) + "ms)"); ++ log.debug("SearchManager initialized ({}ms)", System.currentTimeMillis() - t0); + } + + /** +@@ -2166,9 +2166,8 @@ public class RepositoryImpl extends AbstractRepository + } else { + if ((currentTS - idleTimestamp) > maxIdleTime) { + // temporarily shutdown workspace +- log.info("disposing workspace '" + getName() +- + "' which has been idle for " +- + (currentTS - idleTimestamp) + " ms"); ++ log.info("disposing workspace '{}' which has been idle for {} ms", ++ getName(), currentTS - idleTimestamp); + dispose(); + } + } +@@ -2192,14 +2191,14 @@ public class RepositoryImpl extends AbstractRepository + return; + } + +- log.info("shutting down workspace '" + getName() + "'..."); ++ log.info("shutting down workspace '{}'...", getName()); + doDispose(); + // reset idle timestamp + idleTimestamp = 0; + + active = false; + initialized = false; +- log.info("workspace '" + getName() + "' has been shutdown"); ++ log.info("workspace '{}' has been shutdown", getName()); + } finally { + initLock.writeLock().release(); + } +@@ -2251,8 +2250,8 @@ public class RepositoryImpl extends AbstractRepository + try { + persistMgr.close(); + } catch (Exception e) { +- log.error("error while closing persistence manager of workspace " +- + config.getName(), e); ++ log.error("error while closing persistence manager of workspace {}", ++ config.getName(), e); + } + persistMgr = null; + +@@ -2272,7 +2271,7 @@ public class RepositoryImpl extends AbstractRepository + try { + fs.close(); + } catch (FileSystemException fse) { +- log.error("error while closing file system of workspace " + config.getName(), fse); ++ log.error("error while closing file system of workspace {}", config.getName(), fse); + } + fs = null; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java +index 05cd8fc..49f9175 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java +@@ -393,9 +393,9 @@ public class SearchManager implements SynchronousEventListener { + // an external event + EventImpl e = addedNodes.get(id); + if (e == null || !e.isExternal()) { +- log.error("Unable to index node " + id + ": does not exist"); ++ log.error("Unable to index node {}: does not exist", id); + } else { +- log.info("Node no longer available " + id + ", skipped."); ++ log.info("Node no longer available {}, skipped.", id); + } + } + return item; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java +index 65c3359..0cf2b72 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java +@@ -967,7 +967,7 @@ public class SessionImpl extends AbstractSession + try { + manager.removeEventListener(listener); + } catch (RepositoryException e) { +- log.warn("Error removing event listener: " + listener, e); ++ log.warn("Error removing event listener: {}", listener, e); + } + } + } catch (RepositoryException e) { +@@ -1006,7 +1006,7 @@ public class SessionImpl extends AbstractSession + try { + loginContext.logout(); + } catch (javax.security.auth.login.LoginException le) { +- log.warn("failed to logout current subject: " + le.getMessage()); ++ log.warn("failed to logout current subject: {}", le.getMessage()); + } + loginContext = null; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java +index c1c6b5f..b6fe7bc 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java +@@ -834,7 +834,7 @@ public class WorkspaceImpl extends AbstractWorkspace + names.add(name); + } + } catch (NoSuchWorkspaceException e) { +- log.warn("Workspace disappeared unexpectedly: " + name, e); ++ log.warn("Workspace disappeared unexpectedly: {}", name, e); + } + } + return names.toArray(new String[names.size()]); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java +index 1fdadc9..3ab4383 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java +@@ -855,7 +855,7 @@ public class ClusterNode implements Runnable, + * {@inheritDoc} + */ + public void consume(Record record) { +- log.info("Processing revision: " + record.getRevision()); ++ log.info("Processing revision: {}", record.getRevision()); + + try { + deserializer.deserialize(record).process(this); +@@ -872,7 +872,7 @@ public class ClusterNode implements Runnable, + try { + instanceRevision.set(revision); + } catch (JournalException e) { +- log.warn("Unable to set current revision to " + revision + ".", e); ++ log.warn("Unable to set current revision to {}.", revision, e); + } + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/ConfigurationErrorHandler.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/ConfigurationErrorHandler.java +index be192af..a6b26a2 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/ConfigurationErrorHandler.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/ConfigurationErrorHandler.java +@@ -38,7 +38,7 @@ public class ConfigurationErrorHandler implements ErrorHandler { + } + + private void log(String type, SAXParseException exception) { +- log.warn(type + " parsing the configuration at line " + exception.getLineNumber() + " using system id " + exception.getSystemId() + ": " + exception.toString()); ++ log.warn("{} parsing the configuration at line {} using system id {}: {}", new Object[] { type, exception.getLineNumber(), exception.getSystemId(), exception }); + } + + /** +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java +index b87e310..ce6cdf3 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java +@@ -593,7 +593,7 @@ public class RepositoryConfig + if (!workspaces.containsKey(defaultWorkspace)) { + if (!workspaces.isEmpty()) { + log.warn("Potential misconfiguration. No configuration found " +- + "for default workspace: " + defaultWorkspace); ++ + "for default workspace: {}", defaultWorkspace); + } + // create initial default workspace + createWorkspaceConfig(defaultWorkspace, (StringBuffer)null); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SecurityManagerConfig.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SecurityManagerConfig.java +index 1260803..0a144fd 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SecurityManagerConfig.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SecurityManagerConfig.java +@@ -79,7 +79,7 @@ public class SecurityManagerConfig extends BeanConfig { + try { + cl = Class.forName(uidClassConfig.getClassName(), true, uidClassConfig.getClassLoader()); + } catch (ClassNotFoundException e) { +- log.error("Configured bean implementation class " + uidClassConfig.getClassName() + " was not found -> Ignoring UserIdClass element.", e); ++ log.error("Configured bean implementation class {} was not found -> Ignoring UserIdClass element.", uidClassConfig.getClassName(), e); + } + } + this.uidClass = cl; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/gc/GarbageCollector.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/gc/GarbageCollector.java +index 634938f..98d9e02 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/gc/GarbageCollector.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/gc/GarbageCollector.java +@@ -264,8 +264,8 @@ public class GarbageCollector implements DataStoreGarbageCollector { + NodeId lastId = null; + for (NodeInfo info : batch.values()) { + count++; +- if (count % 1000 == 0) { +- LOG.debug(pm.toString() + " ("+pmCount + "/" + pmList.length + "): analyzed " + count + " nodes..."); ++ if (count % 1000 == 0 && LOG.isDebugEnabled()) { ++ LOG.debug(pm + " (" + pmCount + "/" + pmList.length + "): analyzed " + count + " nodes..."); + } + lastId = info.getId(); + if (callback != null) { +@@ -309,7 +309,9 @@ public class GarbageCollector implements DataStoreGarbageCollector { + try { + Set> futures = new HashSet>(); + List> lists = splitIntoParts(allNodeIds, splits); +- LOG.debug(splits + " concurrent Threads will be started. Split Size: " + lists.get(0).size()+" Total Size: " + overAllCount); ++ if (LOG.isDebugEnabled()) { ++ LOG.debug(splits + " concurrent Threads will be started. Split Size: " + lists.get(0).size() + " Total Size: " + overAllCount); ++ } + for (int i = 0; i < splits; i++) { + List subList = lists.get(i); + futures.add(executorService.submit(new ScanNodeIdListTask(i + 1, subList, pm, pmCount))); +@@ -332,11 +334,11 @@ public class GarbageCollector implements DataStoreGarbageCollector { + int count = 0; + for (NodeId id : nodeList) { + count++; +- if (count % 1000 == 0) { ++ if (count % 1000 == 0 && LOG.isDebugEnabled()) { + if (split > 0) { +- LOG.debug("[Split " + split + "] " + pm.toString() + " (" + pmCount + "/" + pmList.length + "): analyzed " + count + " nodes [" + nodeList.size() + "]..."); ++ LOG.debug("[Split " + split + "] " + pm + " (" + pmCount + "/" + pmList.length + "): analyzed " + count + " nodes [" + nodeList.size() + "]..."); + } else { +- LOG.debug(pm.toString() + " (" + pmCount + "/" + pmList.length + "): analyzed " + count + " nodes [" + nodeList.size() + "]..."); ++ LOG.debug(pm + " (" + pmCount + "/" + pmList.length + "): analyzed " + count + " nodes [" + nodeList.size() + "]..."); + } + } + if (callback != null) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractJournal.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractJournal.java +index 4829983..c7ebaf0 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractJournal.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractJournal.java +@@ -247,8 +247,8 @@ public abstract class AbstractJournal implements Journal { + while (iterator.hasNext()) { + Record record = iterator.nextRecord(); + if (record.getJournalId().equals(id)) { +- log.debug("Record with revision '" + record.getRevision() +- + "' created by this journal, skipped."); ++ log.debug("Record with revision '{}" ++ + "' created by this journal, skipped.", record.getRevision()); + } else { + RecordConsumer consumer = getConsumer(record.getProducerId()); + if (consumer != null) { +@@ -258,7 +258,7 @@ public abstract class AbstractJournal implements Journal { + stopRevision = record.getRevision(); + } + } catch (IllegalStateException e) { +- log.error("Could not synchronize to revision: " + (stopRevision + 1) + " due illegal state of RecordConsumer."); ++ log.error("Could not synchronize to revision: {} due illegal state of RecordConsumer.",stopRevision + 1); + } finally { + iterator.close(); + } +@@ -267,7 +267,7 @@ public abstract class AbstractJournal implements Journal { + for (RecordConsumer consumer : consumers.values()) { + consumer.setRevision(stopRevision); + } +- log.debug("Synchronized from revision " + startRevision + " to revision: " + stopRevision); ++ log.debug("Synchronized from revision {} to revision: {}", startRevision, stopRevision); + } + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java +index 1231ffb..c5b0b0b 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java +@@ -270,8 +270,7 @@ public class AppendRecord extends AbstractRecord { + try { + in.close(); + } catch (IOException e) { +- String msg = "I/O error while closing stream."; +- log.warn(msg, e); ++ log.warn("I/O error while closing stream.", e); + } + } + } finally { +@@ -371,8 +370,7 @@ public class AppendRecord extends AbstractRecord { + try { + dataOut.close(); + } catch (IOException e) { +- String msg = "I/O error while closing stream."; +- log.warn(msg, e); ++ log.warn("I/O error while closing stream.", e); + } finally { + outputClosed = true; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java +index 0cfefbf..4aac198 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java +@@ -371,14 +371,14 @@ public class DatabaseJournal extends AbstractJournal implements DatabaseAware { + // Now write the localFileRevision (or 0 if it does not exist) to the LOCAL_REVISIONS + // table, but only if the LOCAL_REVISIONS table has no entry yet for this cluster node + long localRevision = databaseRevision.init(localFileRevision); +- log.info("Initialized local revision to " + localRevision); ++ log.info("Initialized local revision to {}", localRevision); + + // Start the clean-up thread if necessary. + if (janitorEnabled) { + janitorThread = new Thread(new RevisionTableJanitor(), "Jackrabbit-ClusterRevisionJanitor"); + janitorThread.setDaemon(true); + janitorThread.start(); +- log.info("Cluster revision janitor thread started; first run scheduled at " + janitorNextRun.getTime()); ++ log.info("Cluster revision janitor thread started; first run scheduled at {}", janitorNextRun.getTime()); + } else { + log.info("Cluster revision janitor thread not started"); + } +@@ -856,7 +856,7 @@ public class DatabaseJournal extends AbstractJournal implements DatabaseAware { + public void run() { + while (!Thread.currentThread().isInterrupted()) { + try { +- log.info("Next clean-up run scheduled at " + janitorNextRun.getTime()); ++ log.info("Next clean-up run scheduled at {}", janitorNextRun.getTime()); + long sleepTime = janitorNextRun.getTimeInMillis() - System.currentTimeMillis(); + if (sleepTime > 0) { + Thread.sleep(sleepTime); +@@ -886,7 +886,7 @@ public class DatabaseJournal extends AbstractJournal implements DatabaseAware { + // Clean up if necessary: + if (cleanUp) { + conHelper.exec(cleanRevisionStmtSQL, minRevision); +- log.info("Cleaned old revisions up to revision " + minRevision + "."); ++ log.info("Cleaned old revisions up to revision {}.", minRevision); + } + + } catch (Exception e) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/FileJournal.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/FileJournal.java +index ab4f06e..a4f71ea 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/FileJournal.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/FileJournal.java +@@ -115,7 +115,7 @@ public class FileJournal extends AbstractJournal { + throw new JournalException(msg); + } + String revision = new File(repHome, DEFAULT_INSTANCE_FILE_NAME).getPath(); +- log.info("Revision not specified, using: " + revision); ++ log.info("Revision not specified, using: {}", revision); + setRevision(revision); + } + if (directory == null) { +@@ -142,7 +142,7 @@ public class FileJournal extends AbstractJournal { + journalFile = new File(rootDirectory, basename + "." + LOG_EXTENSION); + globalRevision = new LockableFileRevision(new File(rootDirectory, REVISION_NAME)); + +- log.info("FileJournal initialized at path: " + directory); ++ log.info("FileJournal initialized at path: {}", directory); + } + + /** +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/LockableFileRevision.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/LockableFileRevision.java +index c5840d4..07cb693 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/LockableFileRevision.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/LockableFileRevision.java +@@ -67,8 +67,7 @@ class LockableFileRevision { + file.createNewFile(); + } + } catch (IOException e) { +- String msg = "I/O error while attempting to create new file '" + file + "': " + e.getMessage(); +- log.warn(msg); ++ log.warn("I/O error while attempting to create new file '{}': {}", file, e.getMessage()); + } + } + +@@ -90,8 +89,7 @@ class LockableFileRevision { + try { + raf.close(); + } catch (IOException e) { +- String msg = "I/O error while closing file " + file.getPath() + ": " + e.getMessage(); +- log.warn(msg); ++ log.warn("I/O error while closing file {}: {}", file.getPath(), e.getMessage()); + } + raf = null; + } +@@ -108,8 +106,7 @@ class LockableFileRevision { + try { + lock.release(); + } catch (IOException e) { +- String msg = "I/O error while releasing lock: " + e.getMessage(); +- log.warn(msg); ++ log.warn("I/O error while releasing lock: {}", e.getMessage()); + } + lock = null; + +@@ -117,8 +114,7 @@ class LockableFileRevision { + try { + raf.close(); + } catch (IOException e) { +- String msg = "I/O error while closing file: " + e.getMessage(); +- log.warn(msg); ++ log.warn("I/O error while closing file: {}", e.getMessage()); + } + } + raf = null; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/RotatingLogFile.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/RotatingLogFile.java +index 604b63a..1d751af 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/RotatingLogFile.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/RotatingLogFile.java +@@ -160,8 +160,8 @@ public class RotatingLogFile implements Comparable { + try { + l.add(new RotatingLogFile(directory, basename, file)); + } catch (IllegalArgumentException e) { +- log.warn("Bogusly named journal file, skipped: " + files[i] + +- ", reason: " + e.getMessage()); ++ log.warn("Bogusly named journal file, skipped: {}, reason: {}", ++ files[i], e.getMessage()); + } + } + RotatingLogFile[] logFiles = new RotatingLogFile[l.size()]; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java +index e4e1471..3d92951 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java +@@ -194,7 +194,7 @@ public class LockManagerImpl + log.debug("Try to unlock expired lock. NodeId {}", id); + unlock(holder.getNodeById(id)); + } catch (RepositoryException e) { +- log.warn("Unable to expire the lock. NodeId " + id, e); ++ log.warn("Unable to expire the lock. NodeId {}", id, e); + } + } + } +@@ -236,8 +236,7 @@ public class LockManagerImpl + try { + timeoutHint = Long.parseLong(parts[1]); + } catch (NumberFormatException e) { +- log.warn("Unexpected timeout hint " +- + parts[1] + " for lock token " + token, e); ++ log.warn("Unexpected timeout hint {} for lock token {}", new Object[] { parts[1], token, e }); + } + } + +@@ -256,7 +255,7 @@ public class LockManagerImpl + info.setLive(true); + lockMap.put(path, info); + } catch (RepositoryException e) { +- log.warn("Unable to recreate lock '" + token + "': " + e.getMessage()); ++ log.warn("Unable to recreate lock '{}': {}", token, e.getMessage()); + log.debug("Root cause: ", e); + } finally { + release(); +@@ -300,12 +299,10 @@ public class LockManagerImpl + writer.newLine(); + } + } catch (FileSystemException fse) { +- log.warn("I/O error while saving locks to '" +- + locksFile.getPath() + "': " + fse.getMessage()); ++ log.warn("I/O error while saving locks to '{}': {}", locksFile.getPath(), fse.getMessage()); + log.debug("Root cause: ", fse); + } catch (IOException ioe) { +- log.warn("I/O error while saving locks to '" +- + locksFile.getPath() + "': " + ioe.getMessage()); ++ log.warn("I/O error while saving locks to '{}': {}", locksFile.getPath(), ioe.getMessage()); + log.debug("Root cause: ", ioe); + } finally { + IOUtils.closeQuietly(writer); +@@ -480,7 +477,7 @@ public class LockManagerImpl + try { + lockMap.put(element.getPath(), info); + } catch (MalformedPathException e) { +- log.warn("Ignoring invalid lock path: " + info, e); ++ log.warn("Ignoring invalid lock path: {}", info, e); + } + } + } +@@ -1131,10 +1128,10 @@ public class LockManagerImpl + sysSession.getQPath(event.getPath()).getNormalizedPath(), + event.getType()); + } catch (MalformedPathException e) { +- log.info("Unable to get event's path: " + e.getMessage()); ++ log.info("Unable to get event's path: {}", e.getMessage()); + continue; + } catch (RepositoryException e) { +- log.info("Unable to get event's path: " + e.getMessage()); ++ log.info("Unable to get event's path: {}", e.getMessage()); + continue; + } + +@@ -1311,7 +1308,7 @@ public class LockManagerImpl + NodeImpl node = (NodeImpl) systemSession.getItemManager().getItem(getId()); + node.unlock(); + } catch (RepositoryException re) { +- log.warn("Unable to remove session-scoped lock on node '" + getLockToken() + "': " + e.getMessage()); ++ log.warn("Unable to remove session-scoped lock on node '{}': {}", getLockToken(), e.getMessage()); + log.debug("Root cause: ", e); + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java +index 4d30d76..4f85ef9 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/EffectiveNodeType.java +@@ -283,7 +283,7 @@ public class EffectiveNodeType implements Cloneable { + } + + public QItemDefinition[] getAllItemDefs() { +- if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { + return QItemDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); +@@ -291,28 +291,28 @@ public class EffectiveNodeType implements Cloneable { + defs.addAll(itemDefs); + } + defs.addAll(unnamedItemDefs); +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QItemDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QItemDefinition[defs.size()]); + } + + public QItemDefinition[] getNamedItemDefs() { +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QItemDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); + for (List itemDefs : namedItemDefs.values()) { + defs.addAll(itemDefs); + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QItemDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QItemDefinition[defs.size()]); + } + + public QItemDefinition[] getUnnamedItemDefs() { +- if (unnamedItemDefs.size() == 0) { ++ if (unnamedItemDefs.isEmpty()) { + return QItemDefinition.EMPTY_ARRAY; + } + return unnamedItemDefs.toArray(new QItemDefinition[unnamedItemDefs.size()]); +@@ -324,14 +324,14 @@ public class EffectiveNodeType implements Cloneable { + + public QItemDefinition[] getNamedItemDefs(Name name) { + List defs = namedItemDefs.get(name); +- if (defs == null || defs.size() == 0) { ++ if (defs == null || defs.isEmpty()) { + return QItemDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QItemDefinition[defs.size()]); + } + + public QNodeDefinition[] getAllNodeDefs() { +- if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); +@@ -347,14 +347,14 @@ public class EffectiveNodeType implements Cloneable { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); + } + + public QNodeDefinition[] getNamedNodeDefs() { +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -365,7 +365,7 @@ public class EffectiveNodeType implements Cloneable { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); +@@ -373,7 +373,7 @@ public class EffectiveNodeType implements Cloneable { + + public QNodeDefinition[] getNamedNodeDefs(Name name) { + List list = namedItemDefs.get(name); +- if (list == null || list.size() == 0) { ++ if (list == null || list.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(list.size()); +@@ -382,14 +382,14 @@ public class EffectiveNodeType implements Cloneable { + defs.add((QNodeDefinition) def); + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); + } + + public QNodeDefinition[] getUnnamedNodeDefs() { +- if (unnamedItemDefs.size() == 0) { ++ if (unnamedItemDefs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(unnamedItemDefs.size()); +@@ -398,7 +398,7 @@ public class EffectiveNodeType implements Cloneable { + defs.add((QNodeDefinition) def); + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); +@@ -407,7 +407,7 @@ public class EffectiveNodeType implements Cloneable { + public QNodeDefinition[] getAutoCreateNodeDefs() { + // since auto-create items must have a name, + // we're only searching the named item definitions +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -418,14 +418,14 @@ public class EffectiveNodeType implements Cloneable { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); + } + + public QPropertyDefinition[] getAllPropDefs() { +- if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); +@@ -441,14 +441,14 @@ public class EffectiveNodeType implements Cloneable { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); + } + + public QPropertyDefinition[] getNamedPropDefs() { +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -459,7 +459,7 @@ public class EffectiveNodeType implements Cloneable { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); +@@ -467,7 +467,7 @@ public class EffectiveNodeType implements Cloneable { + + public QPropertyDefinition[] getNamedPropDefs(Name name) { + List list = namedItemDefs.get(name); +- if (list == null || list.size() == 0) { ++ if (list == null || list.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(list.size()); +@@ -476,14 +476,14 @@ public class EffectiveNodeType implements Cloneable { + defs.add((QPropertyDefinition) def); + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); + } + + public QPropertyDefinition[] getUnnamedPropDefs() { +- if (unnamedItemDefs.size() == 0) { ++ if (unnamedItemDefs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(unnamedItemDefs.size()); +@@ -492,7 +492,7 @@ public class EffectiveNodeType implements Cloneable { + defs.add((QPropertyDefinition) def); + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); +@@ -501,7 +501,7 @@ public class EffectiveNodeType implements Cloneable { + public QPropertyDefinition[] getAutoCreatePropDefs() { + // since auto-create items must have a name, + // we're only searching the named item definitions +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -512,7 +512,7 @@ public class EffectiveNodeType implements Cloneable { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); +@@ -521,7 +521,7 @@ public class EffectiveNodeType implements Cloneable { + public QPropertyDefinition[] getMandatoryPropDefs() { + // since mandatory items must have a name, + // we're only searching the named item definitions +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -532,7 +532,7 @@ public class EffectiveNodeType implements Cloneable { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); +@@ -541,7 +541,7 @@ public class EffectiveNodeType implements Cloneable { + public QNodeDefinition[] getMandatoryNodeDefs() { + // since mandatory items must have a name, + // we're only searching the named item definitions +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -552,7 +552,7 @@ public class EffectiveNodeType implements Cloneable { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); +@@ -988,7 +988,7 @@ public class EffectiveNodeType implements Cloneable { + for (Name aNta : nta) { + if (includesNodeType(aNta)) { + // redundant node type +- log.debug("node type '" + aNta + "' is already contained."); ++ log.debug("node type '{}' is already contained.", aNta); + includedCount++; + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/virtual/VirtualNodeTypeStateManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/virtual/VirtualNodeTypeStateManager.java +index 5a91155..e94442f 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/virtual/VirtualNodeTypeStateManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/virtual/VirtualNodeTypeStateManager.java +@@ -162,7 +162,7 @@ public class VirtualNodeTypeStateManager implements NodeTypeRegistryListener { + NODE_TYPES_PATH, null); + } + } catch (RepositoryException e) { +- log.error("Unable to index new nodetype: " + e.toString()); ++ log.error("Unable to index new nodetype: {}", (Object) e); + } + } + +@@ -199,7 +199,7 @@ public class VirtualNodeTypeStateManager implements NodeTypeRegistryListener { + virtProvider.onNodeTypesRemoved(names); + } + } catch (RepositoryException e) { +- log.error("Unable to index removed nodetypes: " + names, e); ++ log.error("Unable to index removed nodetypes: {}", names, e); + } + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java +index e80c08a..2aa6b0e 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventConsumer.java +@@ -158,7 +158,7 @@ class EventConsumer { + try { + granted = canRead(state); + } catch (RepositoryException e) { +- log.warn("Unable to check access rights for item: " + targetId); ++ log.warn("Unable to check access rights for item: {}", targetId); + } + if (!granted) { + if (denied == null) { +@@ -196,7 +196,7 @@ class EventConsumer { + try { + granted = canRead(evState); + } catch (RepositoryException e) { +- log.warn("Unable to check access rights for item: " + targetId); ++ log.warn("Unable to check access rights for item: {}", targetId); + } + if (!granted) { + if (denied == null) { +@@ -248,10 +248,8 @@ class EventConsumer { + long time = System.currentTimeMillis(); + listener.onEvent(it); + time = System.currentTimeMillis() - time; +- if (log.isDebugEnabled()) { +- log.debug("listener {} processed events in {} ms.", +- listener.getClass().getName(), time); +- } ++ log.debug("listener {} processed events in {} ms.", ++ listener.getClass().getName(), time); + } else { + // otherwise skip this listener + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventImpl.java +index 9b71875..3e22759 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventImpl.java +@@ -276,7 +276,7 @@ public final class EventImpl implements JackrabbitEvent, AdditionalEventInfo, Ev + try { + sb.append(getPath()); + } catch (RepositoryException e) { +- log.error("Exception retrieving path: " + e); ++ log.error("Exception retrieving path: {}", (Object) e); + sb.append("[Error retrieving path]"); + } + sb.append(", ").append(EventState.valueOf(getType())).append(": "); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventState.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventState.java +index 87d3ec6..193c036 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventState.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventState.java +@@ -687,7 +687,7 @@ public class EventState { + try { + tmp.add(ntMgr.getNodeType(nodeType)); + } catch (NoSuchNodeTypeException e) { +- log.warn("Unknown node type: " + nodeType); ++ log.warn("Unknown node type: {}", nodeType); + } + Iterator it = mixins.iterator(); + while (it.hasNext()) { +@@ -695,7 +695,7 @@ public class EventState { + try { + tmp.add(ntMgr.getNodeType(mixinName)); + } catch (NoSuchNodeTypeException e) { +- log.warn("Unknown node type: " + mixinName); ++ log.warn("Unknown node type: {}", mixinName); + } + } + allTypes = Collections.unmodifiableSet(tmp); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java +index 5f795e0..4aeb820 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/EventStateCollection.java +@@ -218,10 +218,10 @@ public final class EventStateCollection { + // error since in this case we can't generate the + // correct REMOVE event. + log.error( +- "The old parent (node id " + oldParentId ++ "The old parent (node id {}" + + ") of a moved node (old path " +- + oldPath + ") is no longer available." +- + " No REMOVE event generated!"); ++ + "{}) is no longer available." ++ + " No REMOVE event generated!", oldParentId, oldPath); + } + + NodeState newParent = (NodeState) changes.get(newParentId); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationDispatcher.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationDispatcher.java +index f527717..e4f734e 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationDispatcher.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationDispatcher.java +@@ -154,15 +154,14 @@ public final class ObservationDispatcher extends EventDispatcher + + eventQueueSize.getAndAdd(-action.getEventStates().size()); + log.debug("got EventStateCollection"); +- log.debug("event delivery to " + action.getEventConsumers().size() + " consumers started..."); ++ log.debug("event delivery to {} consumers started...", action.getEventConsumers().size()); + for (Iterator it = action.getEventConsumers().iterator(); it.hasNext();) { + EventConsumer c = it.next(); + try { + c.consumeEvents(action.getEventStates()); + } catch (Throwable t) { +- log.warn("EventConsumer " + +- c.getEventListener().getClass().getName() + +- " threw exception", t); ++ log.warn("EventConsumer {} threw exception", ++ c.getEventListener().getClass().getName(), t); + // move on to the next consumer + } + } +@@ -249,7 +248,7 @@ public final class ObservationDispatcher extends EventDispatcher + // log a warning at most every 5 seconds (to avoid filling the log file) + if (lastError == 0 || now > lastError + 5000) { + logWarning = true; +- log.warn("More than " + MAX_QUEUED_EVENTS + " events in the queue", new Exception("Stack Trace")); ++ log.warn("More than {} events in the queue", MAX_QUEUED_EVENTS, new Exception("Stack Trace")); + lastError = now; + } + if (Thread.currentThread() == notificationThread) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java +index 612db75..e9170a0 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/observation/ObservationManagerImpl.java +@@ -189,7 +189,7 @@ public class ObservationManagerImpl implements EventStateCollectionFactory, + EventListenerIterator it = getRegisteredEventListeners(); + while (it.hasNext()) { + EventListener l = it.nextEventListener(); +- log.debug("removing EventListener: " + l); ++ log.debug("removing EventListener: {}", l); + removeEventListener(l); + } + } catch (RepositoryException e) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java +index 2eb8b2a..529a29a 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java +@@ -665,7 +665,7 @@ public abstract class AbstractBundlePersistenceManager implements + // check consistency + NodeId parentId = state.getParentId(); + if (!modified.containsKey(parentId) && !deleted.contains(parentId)) { +- log.warn("Deleted node state's parent is not modified or deleted: " + parentId + "/" + state.getId()); ++ log.warn("Deleted node state's parent is not modified or deleted: {}/{}", parentId, state.getId()); + } + } else { + PropertyId id = (PropertyId) state.getId(); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleFsPersistenceManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleFsPersistenceManager.java +index ec1910b..3492fe6 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleFsPersistenceManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/BundleFsPersistenceManager.java +@@ -308,7 +308,7 @@ public class BundleFsPersistenceManager extends AbstractBundlePersistenceManager + } + } catch (Exception e) { + String msg = "failed to write bundle: " + bundle.getId(); +- BundleFsPersistenceManager.log.error(msg, e); ++ log.error(msg, e); + throw new ItemStateException(msg, e); + } + } +@@ -325,7 +325,7 @@ public class BundleFsPersistenceManager extends AbstractBundlePersistenceManager + throw (NoSuchItemStateException) e; + } + String msg = "failed to delete bundle: " + bundle.getId(); +- BundleFsPersistenceManager.log.error(msg, e); ++ log.error(msg, e); + throw new ItemStateException(msg, e); + } + } +@@ -353,7 +353,7 @@ public class BundleFsPersistenceManager extends AbstractBundlePersistenceManager + throw e; + } catch (Exception e) { + String msg = "failed to read references: " + targetId; +- BundleFsPersistenceManager.log.error(msg, e); ++ log.error(msg, e); + throw new ItemStateException(msg, e); + } finally { + IOUtils.closeQuietly(in); +@@ -382,7 +382,7 @@ public class BundleFsPersistenceManager extends AbstractBundlePersistenceManager + out.close(); + } catch (Exception e) { + String msg = "failed to write " + refs; +- BundleFsPersistenceManager.log.error(msg, e); ++ log.error(msg, e); + throw new ItemStateException(msg, e); + } + } +@@ -402,7 +402,7 @@ public class BundleFsPersistenceManager extends AbstractBundlePersistenceManager + throw (NoSuchItemStateException) e; + } + String msg = "failed to delete " + refs; +- BundleFsPersistenceManager.log.error(msg, e); ++ log.error(msg, e); + throw new ItemStateException(msg, e); + } + } +@@ -419,7 +419,7 @@ public class BundleFsPersistenceManager extends AbstractBundlePersistenceManager + return itemFs.exists(buf.toString()); + } catch (Exception e) { + String msg = "failed to check existence of node references: " + targetId; +- BundleFsPersistenceManager.log.error(msg, e); ++ log.error(msg, e); + throw new ItemStateException(msg, e); + } + } +@@ -431,12 +431,11 @@ public class BundleFsPersistenceManager extends AbstractBundlePersistenceManager + */ + protected void logException(String message, SQLException se) { + if (message != null) { +- BundleFsPersistenceManager.log.error(message); ++ log.error(message); + } +- BundleFsPersistenceManager.log.error(" Reason: " + se.getMessage()); +- BundleFsPersistenceManager.log.error( +- " State/Code: " + se.getSQLState() + "/" + se.getErrorCode()); +- BundleFsPersistenceManager.log.debug(" dump:", se); ++ log.error(" Reason: {}", se.getMessage()); ++ log.error(" State/Code: {}/{}", se.getSQLState(), se.getErrorCode()); ++ log.debug(" dump:", se); + } + + /** +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/ConsistencyCheckerImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/ConsistencyCheckerImpl.java +index 88c7f98..6a45be0 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/ConsistencyCheckerImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/ConsistencyCheckerImpl.java +@@ -233,7 +233,7 @@ public class ConsistencyCheckerImpl { + + count++; + if (count % 1000 == 0) { +- log.info(pm + ": loaded " + count + " infos..."); ++ log.info("{}: loaded {} infos...", pm, count); + } + + } +@@ -290,7 +290,7 @@ public class ConsistencyCheckerImpl { + + count++; + if (count % 1000 == 0 && listener == null) { +- log.info(pm + ": checked " + count + "/" + idList.size() + " bundles..."); ++ log.info("{}: checked {}/{} bundles...", new Object[] { pm, count, idList.size() }); + } + } + } catch (ItemStateException ignored) { +@@ -299,7 +299,7 @@ public class ConsistencyCheckerImpl { + } + } + +- log.info(pm + ": checked " + count + " bundles."); ++ log.info("{}: checked {} bundles.", pm, count); + + return count; + } +@@ -385,8 +385,11 @@ public class ConsistencyCheckerImpl { + + private void info(String id, String message) { + if (this.listener == null) { +- String idstring = id == null ? "" : ("Node " + id + ": "); +- log.info(idstring + message); ++ if (id == null) { ++ log.info(message); ++ } else { ++ log.info("Node {}: {}", id, message); ++ } + } else { + listener.info(id, message); + } +@@ -394,16 +397,22 @@ public class ConsistencyCheckerImpl { + + private void error(String id, String message) { + if (this.listener == null) { +- String idstring = id == null ? "" : ("Node " + id + ": "); +- log.error(idstring + message); ++ if (id == null) { ++ log.error(message); ++ } else { ++ log.error("Node {}: {}", id, message); ++ } + } else { + listener.error(id, message); + } + } + + private void error(String id, String message, Throwable ex) { +- String idstring = id == null ? "" : ("Node " + id + ": "); +- log.error(idstring + message, ex); ++ if (id == null) { ++ log.error(message, ex); ++ } else { ++ log.error("Node {}: {}", new Object[] { id, message, ex }); ++ } + if (listener != null) { + listener.error(id, message); + } +@@ -416,7 +425,7 @@ public class ConsistencyCheckerImpl { + pm.storeBundle(bundle); + pm.evictBundle(bundle.getId()); + } catch (ItemStateException e) { +- log.error(pm + ": Error storing fixed bundle: " + e); ++ log.error("{}: Error storing fixed bundle: {}", pm, e); + } + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/db/DatabasePersistenceManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/db/DatabasePersistenceManager.java +index fd5b39e..4219598 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/db/DatabasePersistenceManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/db/DatabasePersistenceManager.java +@@ -220,8 +220,8 @@ public abstract class DatabasePersistenceManager extends AbstractPersistenceMana + + DatabaseMetaData meta = con.getMetaData(); + try { +- log.info("Database: " + meta.getDatabaseProductName() + " / " + meta.getDatabaseProductVersion()); +- log.info("Driver: " + meta.getDriverName() + " / " + meta.getDriverVersion()); ++ log.info("Database: {} / {}", meta.getDatabaseProductName(), meta.getDatabaseProductVersion()); ++ log.info("Driver: {} / {}", meta.getDriverName(), meta.getDriverVersion()); + } catch (SQLException e) { + log.warn("Can not retrieve database and driver name / version", e); + } +@@ -566,7 +566,7 @@ public abstract class DatabasePersistenceManager extends AbstractPersistenceMana + try { + blobStore.remove(blobId); + } catch (Exception e) { +- log.warn("failed to remove from BLOBStore: " + blobId, e); ++ log.warn("failed to remove from BLOBStore: {}", blobId, e); + } + } + } +@@ -973,8 +973,8 @@ public abstract class DatabasePersistenceManager extends AbstractPersistenceMana + if (message != null) { + log.error(message); + } +- log.error(" reason: " + se.getMessage()); +- log.error("state/code: " + se.getSQLState() + "/" + se.getErrorCode()); ++ log.error(" reason: {}", se.getMessage()); ++ log.error("state/code: {}/{}", se.getSQLState(), se.getErrorCode()); + log.debug(" dump:", se); + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java +index 8d5a6cd..e272452 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java +@@ -500,8 +500,8 @@ public class BundleDbPersistenceManager + assert !isIntegrityConstraintViolation(e.getCause()); + } + failures++; +- log.error("Failed to persist ChangeLog (stacktrace on DEBUG log level), blockOnConnectionLoss = " +- + blockOnConnectionLoss + ": " + lastException); ++ log.error("Failed to persist ChangeLog (stacktrace on DEBUG log level), blockOnConnectionLoss = {}: {}", ++ blockOnConnectionLoss, lastException); + log.debug("Failed to persist ChangeLog", lastException); + if (blockOnConnectionLoss || failures <= 1) { // if we're going to try again + try { +@@ -898,7 +898,7 @@ public class BundleDbPersistenceManager + } catch (SQLException e) { + String msg = "failed to read bundle (stacktrace on DEBUG log level): " + id + ": " + e; + log.error(msg); +- log.debug("failed to read bundle: " + id, e); ++ log.debug("failed to read bundle: {}", id, e); + throw new ItemStateException(msg, e); + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java +index f272b23..c164bd4 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java +@@ -355,7 +355,7 @@ class BundleReader { + } + } catch (IOException e) { + if (binding.errorHandling.ignoreMissingBlobs()) { +- log.warn("Ignoring error while reading blob-resource: " + e); ++ log.warn("Ignoring error while reading blob-resource: {}", (Object) e); + val = InternalValue.create(new byte[0]); + } else { + throw e; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java +index 7724f17..afabe7a 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java +@@ -256,8 +256,8 @@ class BundleWriter { + values[i] = InternalValue.create(blobStore.get(blobId)); + } + } catch (Exception e) { +- log.error("Error while reloading blob. truncating. id=" +- + state.getId() + " idx=" + i + " size=" + size, e); ++ log.error("Error while reloading blob. truncating. id={} idx={} size={}", ++ new Object[] { state.getId(), i, size, e }); + values[i] = InternalValue.create(new byte[0]); + } + val.discard(); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java +index 57d4a93..1980425 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java +@@ -724,7 +724,7 @@ public class NodePropBundle { + blobStore.remove(blobIds[i]); + log.debug("removed blob {}", blobIds[i]); + } catch (Exception e) { +- log.error("Ignoring error while removing blob " + blobIds[i], e); ++ log.error("Ignoring error while removing blob {}", blobIds[i], e); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java +index 615200c..f938adf 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/xml/XMLPersistenceManager.java +@@ -367,8 +367,8 @@ public class XMLPersistenceManager extends AbstractPersistenceManager { + } + } else { + // empty non-STRING value +- log.warn(state.getPropertyId() + ": ignoring empty value of type " +- + PropertyType.nameFromValue(type)); ++ log.warn("{}: ignoring empty value of type {}", ++ state.getPropertyId(), PropertyType.nameFromValue(type)); + } + } + walker.leaveElement(); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/PropertyTypeRegistry.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/PropertyTypeRegistry.java +index 6fbe9c4..a715850 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/PropertyTypeRegistry.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/PropertyTypeRegistry.java +@@ -110,7 +110,7 @@ public class PropertyTypeRegistry implements NodeTypeRegistryListener { + } + } + } catch (NoSuchNodeTypeException e) { +- log.error("Unable to get newly registered node type definition for name: " + ntName); ++ log.error("Unable to get newly registered node type definition for name: {}", ntName); + } + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java +index 7113ea0..4568e06 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractExcerpt.java +@@ -110,7 +110,7 @@ public abstract class AbstractExcerpt implements HighlightingExcerptProvider { + exProvider.init(query, index); + return exProvider.getExcerpt(id, maxFragments, maxFragmentSize); + } +- StringBuffer text = new StringBuffer(); ++ StringBuilder text = new StringBuilder(); + String separator = ""; + for (int i = 0; i < fields.length; i++) { + if (fields[i].stringValue().length() == 0) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java +index 0aa4017..8ebb954 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java +@@ -415,7 +415,7 @@ abstract class AbstractIndex { + try { + indexWriter.close(); + } catch (IOException e) { +- log.warn("Exception closing index writer: " + e.toString()); ++ log.warn("Exception closing index writer: {}", (Object) e); + } + indexWriter = null; + } +@@ -423,7 +423,7 @@ abstract class AbstractIndex { + try { + indexReader.close(); + } catch (IOException e) { +- log.warn("Exception closing index reader: " + e.toString()); ++ log.warn("Exception closing index reader: {}", (Object) e); + } + indexReader = null; + } +@@ -431,7 +431,7 @@ abstract class AbstractIndex { + try { + readOnlyReader.release(); + } catch (IOException e) { +- log.warn("Exception closing index reader: " + e.toString()); ++ log.warn("Exception closing index reader: {}", (Object) e); + } + readOnlyReader = null; + } +@@ -439,7 +439,7 @@ abstract class AbstractIndex { + try { + sharedReader.release(); + } catch (IOException e) { +- log.warn("Exception closing index reader: " + e.toString()); ++ log.warn("Exception closing index reader: {}", (Object) e); + } + sharedReader = null; + } +@@ -599,7 +599,7 @@ abstract class AbstractIndex { + private static final class LoggingPrintStream extends PrintStream { + + /** Buffer print calls until a newline is written */ +- private StringBuffer buffer = new StringBuffer(); ++ private final StringBuilder buffer = new StringBuilder(); + + public LoggingPrintStream() { + super(new OutputStream() { +@@ -610,13 +610,17 @@ abstract class AbstractIndex { + } + + public void print(String s) { +- buffer.append(s); ++ synchronized (buffer) { ++ buffer.append(s); ++ } + } + + public void println(String s) { +- buffer.append(s); +- log.debug(buffer.toString()); +- buffer.setLength(0); ++ synchronized (buffer) { ++ buffer.append(s); ++ log.debug(buffer.toString()); ++ buffer.setLength(0); ++ } + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java +index b6303b7..350e757 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AggregateRuleImpl.java +@@ -345,7 +345,7 @@ class AggregateRuleImpl implements AggregateRule { + * @return the text content of the node. + */ + private static String getTextContent(Node node) { +- StringBuffer content = new StringBuffer(); ++ StringBuilder content = new StringBuilder(); + NodeList nodes = node.getChildNodes(); + for (int i = 0; i < nodes.getLength(); i++) { + Node n = nodes.item(i); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java +index 21d1d34..691d182 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CachingIndexReader.java +@@ -643,9 +643,7 @@ class CachingIndexReader extends FilterIndexReader { + io.writeInt(parent); + } + } catch (Exception e) { +- log.error( +- "Error saving " + FILE_CACHE_NAME_ARRAY + ": " +- + e.getMessage(), e); ++ log.error("Error saving " + FILE_CACHE_NAME_ARRAY + ": {}", e.getMessage(), e); + } finally { + if (io != null) { + io.close(); +@@ -670,10 +668,8 @@ class CachingIndexReader extends FilterIndexReader { + for (int i = 0; i < inSegmentParents.length; i++) { + inSegmentParents[i] = ii.readInt(); + } +- log.debug( +- "persisted cache initialized {} DocIds in {} ms", +- new Object[] { inSegmentParents.length, +- System.currentTimeMillis() - time }); ++ log.debug("persisted cache initialized {} DocIds in {} ms", ++ inSegmentParents.length, System.currentTimeMillis() - time); + return true; + } catch (FileNotFoundException ignore) { + // expected in the case where the file-based cache has not been +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java +index 6b21326..29e7fc2 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java +@@ -61,7 +61,7 @@ abstract class CaseTermQuery extends MultiTermQuery implements TransformConstant + /** Prints a user-readable version of this query. */ + @Override + public String toString(String field) { +- StringBuffer buffer = new StringBuffer(); ++ StringBuilder buffer = new StringBuilder(); + if (!term.field().equals(field)) { + buffer.append(term.field()); + buffer.append(':'); +@@ -107,23 +107,25 @@ abstract class CaseTermQuery extends MultiTermQuery implements TransformConstant + // character of the value. + if (term.text().length() > nameLength) { + // start with initial lower case +- StringBuffer lowerLimit = new StringBuffer(propName); ++ StringBuilder lowerLimit = new StringBuilder(propName); + String termStr = termText.toString(); + String upperTermStr = termStr.toUpperCase(); + String lowerTermStr = termStr.toLowerCase(); + + lowerLimit.append(upperTermStr); + lowerLimit.setCharAt(nameLength, Character.toLowerCase(lowerLimit.charAt(nameLength))); +- StringBuffer upperLimit = new StringBuffer(propName); ++ StringBuilder upperLimit = new StringBuilder(propName); + upperLimit.append(lowerTermStr); + rangeScans.add(new RangeScan(reader, + new Term(term.field(), lowerLimit.toString()), + new Term(term.field(), upperLimit.toString()))); + + // second scan with upper case start +- lowerLimit = new StringBuffer(propName); ++ lowerLimit.setLength(0); ++ lowerLimit.append(propName); + lowerLimit.append(upperTermStr); +- upperLimit = new StringBuffer(propName); ++ upperLimit.setLength(0); ++ upperLimit.append(propName); + upperLimit.append(lowerTermStr); + upperLimit.setCharAt(nameLength, Character.toUpperCase(upperLimit.charAt(nameLength))); + rangeScans.add(new RangeScan(reader, +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java +index 52aff36..2db1553 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java +@@ -239,7 +239,7 @@ class ChildAxisQuery extends Query implements JackrabbitQuery { + * {@inheritDoc} + */ + public String toString(String field) { +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + sb.append("ChildAxisQuery("); + sb.append(contextQuery); + sb.append(", "); +@@ -248,7 +248,7 @@ class ChildAxisQuery extends Query implements JackrabbitQuery { + sb.append(", "); + sb.append(position); + } +- sb.append(")"); ++ sb.append(')'); + return sb.toString(); + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java +index 8192984..0361b56 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ConsistencyCheck.java +@@ -139,7 +139,7 @@ public class ConsistencyCheck { + pathBuilder.addLast(NameConstants.JCR_NODETYPES); + try { + Path path = pathBuilder.getPath(); +- log.info("consistency check will skip " + path); ++ log.info("consistency check will skip {}", path); + ignoredPaths.add(path); + } catch (MalformedPathException e) { + //will never happen +@@ -190,12 +190,12 @@ public class ConsistencyCheck { + if (error.repairable()) { + error.repair(); + } else { +- log.warn("Not repairable: " + error); ++ log.warn("Not repairable: {}", error); + notRepairable++; + } + } catch (Exception e) { + if (ignoreFailure) { +- log.warn("Exception while repairing: " + error, e); ++ log.warn("Exception while repairing: {}", error, e); + } else if (e instanceof IOException) { + throw (IOException) e; + } else { +@@ -203,9 +203,9 @@ public class ConsistencyCheck { + } + } + } +- log.info("Repaired " + (errors.size() - notRepairable) + " errors."); ++ log.info("Repaired {} errors.", errors.size() - notRepairable); + if (notRepairable > 0) { +- log.warn("" + notRepairable + " error(s) not repairable."); ++ log.warn("{} error(s) not repairable.", notRepairable); + } + } + +@@ -222,7 +222,7 @@ public class ConsistencyCheck { + * @throws IOException if an error occurs while running the check. + */ + private void run() throws IOException { +- log.info("Checking index of workspace " + handler.getContext().getWorkspace()); ++ log.info("Checking index of workspace {}", handler.getContext().getWorkspace()); + loadNodes(); + if (nodeIds != null) { + checkIndexConsistency(); +@@ -246,7 +246,7 @@ public class ConsistencyCheck { + try { + final ConsistencyCheckError error = iterator.next(); + if (!error.doubleCheck(handler, stateMgr)) { +- log.info("False positive: " + error.toString()); ++ log.info("False positive: {}", error); + iterator.remove(); + } + } catch (RepositoryException e) { +@@ -271,7 +271,7 @@ public class ConsistencyCheck { + + count++; + if (count % 1000 == 0) { +- log.info(pm + ": loaded " + count + " node ids..."); ++ log.info("{}: loaded {} node ids...", pm, count); + } + + nodeIds.put(nodeId, Boolean.FALSE); +@@ -301,7 +301,7 @@ public class ConsistencyCheck { + for (int i = 0; i < reader.maxDoc(); i++) { + if (i > 10 && i % (reader.maxDoc() / 5) == 0) { + long progress = Math.round((100.0 * (float) i) / ((float) reader.maxDoc() * 2f)); +- log.info("progress: " + progress + "%"); ++ log.info("progress: {}%", progress); + } + if (reader.isDeleted(i)) { + continue; +@@ -335,7 +335,7 @@ public class ConsistencyCheck { + for (int i = 0; i < reader.maxDoc(); i++) { + if (i > 10 && i % (reader.maxDoc() / 5) == 0) { + long progress = Math.round((100.0 * (float) i) / ((float) reader.maxDoc() * 2f)); +- log.info("progress: " + (progress + 50) + "%"); ++ log.info("progress: {}%",progress + 50); + } + if (reader.isDeleted(i)) { + continue; +@@ -394,7 +394,7 @@ public class ConsistencyCheck { + try { + if (++i > 10 && i % (size / 10) == 0) { + long progress = Math.round((100.0 * (float) i) / (float) size); +- log.info("progress: " + progress + "%"); ++ log.info("progress: {}%", progress); + } + if (!indexed && !isIgnored(nodeId) && !isExcluded(nodeId)) { + NodeState nodeState = getNodeState(nodeId); +@@ -403,7 +403,7 @@ public class ConsistencyCheck { + } + } + } catch (ItemStateException e) { +- log.error("Failed to check node: " + nodeId, e); ++ log.error("Failed to check node: {}", nodeId, e); + } + } + } +@@ -449,11 +449,11 @@ public class ConsistencyCheck { + if (parentId != null) { + final NodeState parentState = getNodeState(parentId); + if (parentState == null) { +- log.warn("Node missing from index is orphaned node: " + nodeId); ++ log.warn("Node missing from index is orphaned node: {}", nodeId); + return true; + } + if (!parentState.hasChildNodeEntry(nodeId)) { +- log.warn("Node missing from index is abandoned node: " + nodeId); ++ log.warn("Node missing from index is abandoned node: {}", nodeId); + return true; + } + } +@@ -531,7 +531,7 @@ public class ConsistencyCheck { + NodeId ancestorId = parentId; + while (ancestorId != null && nodeIds.containsKey(ancestorId) && nodeIds.get(ancestorId)) { + NodeState n = (NodeState) stateMgr.getItemState(ancestorId); +- log.info("Repairing missing node " + getPath(n) + " (" + ancestorId + ")"); ++ log.info("Repairing missing node {} ({})", getPath(n), ancestorId); + Document d = index.createDocument(n); + index.addDocument(d); + nodeIds.put(n.getNodeId(), Boolean.TRUE); +@@ -581,7 +581,7 @@ public class ConsistencyCheck { + * No operation. + */ + public void repair() { +- log.warn("Unknown parent for " + id + " cannot be repaired"); ++ log.warn("Unknown parent for {} cannot be repaired", id); + } + + @Override +@@ -626,7 +626,7 @@ public class ConsistencyCheck { + index.removeAllDocuments(id); + try { + NodeState node = (NodeState) stateMgr.getItemState(id); +- log.info("Re-indexing node with wrong parent in index: " + getPath(node)); ++ log.info("Re-indexing node with wrong parent in index: {}", getPath(node)); + Document d = index.createDocument(node); + index.addDocument(d); + nodeIds.put(node.getNodeId(), Boolean.TRUE); +@@ -681,7 +681,7 @@ public class ConsistencyCheck { + // then re-index the node + try { + NodeState node = (NodeState) stateMgr.getItemState(id); +- log.info("Re-indexing duplicate node occurrences in index: " + getPath(node)); ++ log.info("Re-indexing duplicate node occurrences in index: {}", getPath(node)); + Document d = index.createDocument(node); + index.addDocument(d); + nodeIds.put(node.getNodeId(), Boolean.TRUE); +@@ -719,7 +719,7 @@ public class ConsistencyCheck { + * @throws IOException if an error occurs while repairing. + */ + public void repair() throws IOException { +- log.info("Removing deleted node from index: " + id); ++ log.info("Removing deleted node from index: {}", id); + index.removeDocument(id); + } + +@@ -751,7 +751,7 @@ public class ConsistencyCheck { + void repair() throws Exception { + try { + NodeState nodeState = (NodeState) stateMgr.getItemState(id); +- log.info("Adding missing node to index: " + getPath(nodeState)); ++ log.info("Adding missing node to index: {}", getPath(nodeState)); + final Iterator remove = Collections.emptyList().iterator(); + final Iterator add = Collections.singletonList(nodeState).iterator(); + handler.updateNodes(remove, add); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java +index 7342f97..50bd569 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java +@@ -94,9 +94,9 @@ public class DateField { + + // Pad with leading zeros + if (s.length() < DATE_LEN) { +- StringBuffer sb = new StringBuffer(s); ++ StringBuilder sb = new StringBuilder(s); + while (sb.length() < DATE_LEN) { +- sb.insert(0, 0); ++ sb.insert(0, '0'); + } + s = sb.toString(); + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java +index 4408c26..d8c2ebe 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java +@@ -305,7 +305,7 @@ public class DefaultHighlighter { + + // merge #maxFragments fragments + StringReader reader = new StringReader(text); +- StringBuffer sb = new StringBuffer(excerptStart); ++ StringBuilder sb = new StringBuilder(excerptStart); + int pos = 0; + char[] cbuf; + int skip; +@@ -461,12 +461,12 @@ public class DefaultHighlighter { + String fragmentEnd, + int maxLength) throws IOException { + StringReader reader = new StringReader(text); +- StringBuffer excerpt = new StringBuffer(excerptStart); ++ StringBuilder excerpt = new StringBuilder(excerptStart); + excerpt.append(fragmentStart); + int min = excerpt.length(); + char[] buf = new char[maxLength]; + int len = reader.read(buf); +- StringBuffer tmp = new StringBuffer(); ++ StringBuilder tmp = new StringBuilder(); + tmp.append(buf, 0, len); + if (len == buf.length) { + for (int i = tmp.length() - 1; i > min; i--) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultRedoLog.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultRedoLog.java +index efbcb70..ab2d9a7 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultRedoLog.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultRedoLog.java +@@ -230,7 +230,7 @@ class DefaultRedoLog implements RedoLog { + try { + collector.collect(MultiIndex.Action.fromString(line)); + } catch (IllegalArgumentException e) { +- log.warn("Malformed redo entry: " + e.getMessage()); ++ log.warn("Malformed redo entry: {}", e.getMessage()); + } + } + } finally { +@@ -238,7 +238,7 @@ class DefaultRedoLog implements RedoLog { + try { + in.close(); + } catch (IOException e) { +- log.warn("Exception while closing redo log: " + e.toString()); ++ log.warn("Exception while closing redo log: {}", (Object) e); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java +index 86d3c86..9127ba9 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java +@@ -114,14 +114,14 @@ class DerefQuery extends Query { + * @return 'DerefQuery'. + */ + public String toString(String field) { +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + sb.append("DerefQuery("); + sb.append(refProperty); + sb.append(", "); + sb.append(contextQuery); + sb.append(", "); + sb.append(nameTest); +- sb.append(")"); ++ sb.append(')'); + return sb.toString(); + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java +index 1318b93..541994c 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java +@@ -183,14 +183,14 @@ class DescendantSelfAxisQuery extends Query implements JackrabbitQuery { + * {@inheritDoc} + */ + public String toString(String field) { +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + sb.append("DescendantSelfAxisQuery("); + sb.append(contextQuery); + sb.append(", "); + sb.append(subQuery); + sb.append(", "); + sb.append(minLevels); +- sb.append(")"); ++ sb.append(')'); + return sb.toString(); + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocId.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocId.java +index 26055a0..8b28a8a 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocId.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocId.java +@@ -368,14 +368,16 @@ abstract class DocId { + * @return a String representation for this DocId. + */ + public String toString() { +- StringBuffer sb = new StringBuffer("MultiUUIDDocId("); +- String separator = ""; ++ StringBuilder sb = new StringBuilder("MultiUUIDDocId("); ++ boolean first = true; + for (UUIDDocId docId : docIds) { +- sb.append(separator); +- separator = ", "; ++ if (!first) { ++ sb.append(", "); ++ } + sb.append(docId.id); ++ first = false; + } +- sb.append(")"); ++ sb.append(')'); + return sb.toString(); + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java +index bc1c74c..52ffa58 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocNumberCache.java +@@ -141,17 +141,17 @@ final class DocNumberCache { + if (misses != 0) { + ratio -= misses * 100L / accesses; + } +- StringBuffer statistics = new StringBuffer(); ++ StringBuilder statistics = new StringBuilder(); + int inUse = 0; + for (LRUMap docNumber : docNumbers) { + inUse += docNumber.size(); + } + statistics.append("size=").append(inUse); +- statistics.append("/").append(docNumbers[0].maxSize() * CACHE_SEGMENTS); ++ statistics.append('/').append(docNumbers[0].maxSize() * CACHE_SEGMENTS); + statistics.append(", #accesses=").append(accesses); + statistics.append(", #hits=").append((accesses - misses)); + statistics.append(", #misses=").append(misses); +- statistics.append(", cacheRatio=").append(ratio).append("%"); ++ statistics.append(", cacheRatio=").append(ratio).append('%'); + log.info(statistics.toString()); + accesses = 0; + misses = 0; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocOrderScoreNodeIterator.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocOrderScoreNodeIterator.java +index 2ab79f7..9444e70 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocOrderScoreNodeIterator.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DocOrderScoreNodeIterator.java +@@ -185,7 +185,7 @@ class DocOrderScoreNodeIterator implements ScoreNodeIterator { + try { + node1 = (NodeImpl) itemMgr.getItem(n1.getNodeId()); + } catch (RepositoryException e) { +- log.warn("Node " + n1.getNodeId() + " does not exist anymore: " + e); ++ log.warn("Node {} does not exist anymore: {}", n1.getNodeId(), e); + // node does not exist anymore + invalidIDs.add(n1.getNodeId()); + SortFailedException sfe = new SortFailedException(); +@@ -196,7 +196,7 @@ class DocOrderScoreNodeIterator implements ScoreNodeIterator { + try { + node2 = (NodeImpl) itemMgr.getItem(n2.getNodeId()); + } catch (RepositoryException e) { +- log.warn("Node " + n2.getNodeId() + " does not exist anymore: " + e); ++ log.warn("Node {} does not exist anymore: {}", n2.getNodeId(), e); + // node does not exist anymore + invalidIDs.add(n2.getNodeId()); + SortFailedException sfe = new SortFailedException(); +@@ -242,10 +242,10 @@ class DocOrderScoreNodeIterator implements ScoreNodeIterator { + } + } + log.error("Internal error: unable to determine document order of nodes:"); +- log.error("\tNode1: " + node1.getPath()); +- log.error("\tNode2: " + node2.getPath()); ++ log.error("\tNode1: {}", node1.getPath()); ++ log.error("\tNode2: {}", node2.getPath()); + } catch (RepositoryException e) { +- log.error("Exception while sorting nodes in document order: " + e.toString(), e); ++ log.error("Exception while sorting nodes in document order: {}", e, e); + } + // if we get here something went wrong + // remove both uuids from array +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DoubleField.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DoubleField.java +index 1e132ed..723a799 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DoubleField.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DoubleField.java +@@ -33,7 +33,7 @@ public class DoubleField { + + public static String doubleToString(double value) { + long longValue = Double.doubleToLongBits(value); +- StringBuffer sb = new StringBuffer(STRING_DOUBLE_LEN); ++ StringBuilder sb = new StringBuilder(STRING_DOUBLE_LEN); + + if ((longValue & SIGN_MASK) == 0) { + // positive +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FileBasedNamespaceMappings.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FileBasedNamespaceMappings.java +index 67c18a0..4c2e1e3 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FileBasedNamespaceMappings.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FileBasedNamespaceMappings.java +@@ -117,7 +117,7 @@ public class FileBasedNamespaceMappings extends AbstractNamespaceMappings { + prefix = String.valueOf(prefixCount); + prefixToURI.put(prefix, uri); + uriToPrefix.put(uri, prefix); +- log.debug("adding new namespace mapping: " + prefix + " -> " + uri); ++ log.debug("adding new namespace mapping: {} -> {}", prefix, uri); + try { + store(); + } catch (IOException e) { +@@ -146,7 +146,7 @@ public class FileBasedNamespaceMappings extends AbstractNamespaceMappings { + for (Object o : props.keySet()) { + String prefix = (String) o; + String uri = props.getProperty(prefix); +- log.debug(prefix + " -> " + uri); ++ log.debug("{} -> {}", prefix, uri); + prefixToURI.put(prefix, uri); + uriToPrefix.put(uri, prefix); + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FilterMultiColumnQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FilterMultiColumnQuery.java +index c0a7098..6daddd1 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FilterMultiColumnQuery.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/FilterMultiColumnQuery.java +@@ -68,7 +68,9 @@ public class FilterMultiColumnQuery implements MultiColumnQuery { + searcher, orderings, resultFetchHint)) { + + { +- log.debug(Arrays.asList(getSelectorNames()).toString()); ++ if (log.isDebugEnabled()) { ++ log.debug(Arrays.asList(getSelectorNames()).toString()); ++ } + } + + public ScoreNode[] nextScoreNodes() throws IOException { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexHistory.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexHistory.java +index 6f327e1..3e091f6 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexHistory.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexHistory.java +@@ -88,7 +88,7 @@ class IndexHistory { + IndexInfos infos = new IndexInfos(dir, INDEXES, gen); + indexInfosMap.put(gen, infos); + } catch (IOException e) { +- log.warn("ignoring invalid index infos file: " + name); ++ log.warn("ignoring invalid index infos file: {}", name); + } + } + } +@@ -134,12 +134,12 @@ class IndexHistory { + */ + void pruneOutdated() { + long threshold = System.currentTimeMillis() - maxAge; +- log.debug("Pruning index infos older than: " + threshold + "(" + indexDir + ")"); ++ log.debug("Pruning index infos older than: {}({})", threshold, indexDir); + Iterator it = indexInfosMap.values().iterator(); + // never prune the current generation + if (it.hasNext()) { + IndexInfos infos = it.next(); +- log.debug("Skipping first index infos. generation=" + infos.getGeneration()); ++ log.debug("Skipping first index infos. generation={}", infos.getGeneration()); + } + while (it.hasNext()) { + IndexInfos infos = (IndexInfos) it.next(); +@@ -160,7 +160,7 @@ class IndexHistory { + log.debug("Deleted redo log with generation={}, timestamp={}", + infos.getGeneration(), lastModified); + } catch (IOException e) { +- log.warn("Unable to delete: " + indexDir + "/" + logName); ++ log.warn("Unable to delete: {}/{}", indexDir, logName); + continue; + } + } +@@ -171,7 +171,7 @@ class IndexHistory { + infos.getGeneration()); + it.remove(); + } catch (IOException e) { +- log.warn("Unable to delete: " + indexDir + "/" + infos.getFileName()); ++ log.warn("Unable to delete: {}/{}", indexDir, infos.getFileName()); + } + } catch (IOException e) { + log.warn("Failed to check if {} is outdated: {}", +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexInfos.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexInfos.java +index 9b752a1..9099d38 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexInfos.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexInfos.java +@@ -114,7 +114,7 @@ class IndexInfos implements Cloneable { + break; + } catch (EOFException e) { + String fileName = getFileName(gens[i]); +- log.warn("deleting invalid index infos file: " + fileName); ++ log.warn("deleting invalid index infos file: {}", fileName); + dir.deleteFile(fileName); + // reset generation + this.generation = 0; +@@ -190,7 +190,7 @@ class IndexInfos implements Cloneable { + try { + directory.deleteFile(newName); + } catch (IOException e) { +- log.warn("Unable to delete file: " + directory + "/" + newName); ++ log.warn("Unable to delete file: {}/{}", directory, newName); + } + generation--; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java +index 846a321..a82a998 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMerger.java +@@ -211,7 +211,7 @@ class IndexMerger implements IndexListener { + * @inheritDoc + */ + public void documentDeleted(Term id) { +- log.debug("document deleted: " + id.text()); ++ log.debug("document deleted: {}", id.text()); + synchronized (busyMergers) { + for (Worker w : busyMergers) { + w.documentDeleted(id); +@@ -245,7 +245,7 @@ class IndexMerger implements IndexListener { + try { + indexReplacement.writeLock().lockInterruptibly(); + } catch (InterruptedException e) { +- log.warn("Interrupted while acquiring index replacement exclusive lock: " + e); ++ log.warn("Interrupted while acquiring index replacement exclusive lock: {}", (Object) e); + // try to stop IndexMerger without the sync + } + +@@ -529,13 +529,13 @@ class IndexMerger implements IndexListener { + for (IndexReader reader : readers) { + docCount += reader.numDocs(); + } +- log.info("merged " + docCount + " documents in " + time + " ms into " + index.getName() + "."); ++ log.info("merged {} documents in {} ms into {}.", new Object[] { docCount, time, index.getName() }); + } finally { + for (IndexReader reader : readers) { + try { + Util.closeOrRelease(reader); + } catch (IOException e) { +- log.warn("Unable to close IndexReader: " + e); ++ log.warn("Unable to close IndexReader: {}", (Object) e); + } + } + } +@@ -559,7 +559,7 @@ class IndexMerger implements IndexListener { + } finally { + if (!success) { + // delete index +- log.debug("deleting index " + index.getName()); ++ log.debug("deleting index {}", index.getName()); + multiIndex.deleteIndex(index); + // add task again and retry + addMergeTask(task); +@@ -585,7 +585,7 @@ class IndexMerger implements IndexListener { + * @inheritDoc + */ + public void documentDeleted(Term id) { +- log.debug("document deleted: " + id.text()); ++ log.debug("document deleted: {}", id.text()); + deletedDocuments.add(id); + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMigration.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMigration.java +index 3422af8..98bfe13 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMigration.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexMigration.java +@@ -140,7 +140,7 @@ public class IndexMigration { + if (!directoryManager.rename(migrationName, index.getName())) { + throw new IOException("failed to move migrated directory " + migrationDir); + } +- log.info("Migrated " + index.getName()); ++ log.info("Migrated {}", index.getName()); + } + + //---------------------------< internal helper >---------------------------- +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java +index 479e550..056bb80 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingConfigurationImpl.java +@@ -177,9 +177,9 @@ public class IndexingConfigurationImpl + + FieldNames.FULLTEXT_PREFIX + fieldName.substring(idx + 1); + Object prevAnalyzer = analyzers.put(fieldName, analyzer); + if (prevAnalyzer != null) { +- log.warn("Property " + propName.getLocalName() ++ log.warn("Property {}" + + " has been configured for multiple analyzers. " +- + " Last configured analyzer is used"); ++ + " Last configured analyzer is used", propName.getLocalName()); + } + } + } +@@ -577,7 +577,7 @@ public class IndexingConfigurationImpl + * @return the text content of the node. + */ + private static String getTextContent(Node node) { +- StringBuffer content = new StringBuffer(); ++ StringBuilder content = new StringBuilder(); + NodeList nodes = node.getChildNodes(); + for (int i = 0; i < nodes.getLength(); i++) { + Node n = nodes.item(i); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingQueue.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingQueue.java +index 4be7f64..66d8ed8 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingQueue.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingQueue.java +@@ -102,7 +102,7 @@ class IndexingQueue { + log.debug("added node {}. New size of indexing queue: {}", + uuid, pendingDocuments.size()); + } catch (IllegalArgumentException e) { +- log.warn("Invalid UUID in indexing queue store: " + uuid); ++ log.warn("Invalid UUID in indexing queue store: {}", uuid); + } catch (RepositoryException e) { + // node does not exist anymore + log.debug("Node with uuid {} does not exist anymore", uuid); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitAnalyzer.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitAnalyzer.java +index 9a07ca0..093e9d6 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitAnalyzer.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitAnalyzer.java +@@ -57,14 +57,14 @@ public class JackrabbitAnalyzer extends Analyzer { + try { + analyzerClass = Class.forName(className); + } catch (ClassNotFoundException e) { +- log.warn(className + " could not be found", e); ++ log.warn("{} could not be found", className, e); + return DEFAULT_ANALYZER; + } + if (!Analyzer.class.isAssignableFrom(analyzerClass)) { +- log.warn(className + " is not a Lucene Analyzer"); ++ log.warn("{} is not a Lucene Analyzer", className); + return DEFAULT_ANALYZER; + } else if (JackrabbitAnalyzer.class.isAssignableFrom(analyzerClass)) { +- log.warn(className + " can not be used as a JackrabbitAnalyzer component"); ++ log.warn("{} can not be used as a JackrabbitAnalyzer component", className); + return DEFAULT_ANALYZER; + } + +@@ -90,7 +90,7 @@ public class JackrabbitAnalyzer extends Analyzer { + } + } + +- log.warn(className + " could not be instantiated", cause); ++ log.warn("{} could not be instantiated", className, cause); + return DEFAULT_ANALYZER; + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitQueryParser.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitQueryParser.java +index dff9dcd..8246d42 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitQueryParser.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JackrabbitQueryParser.java +@@ -70,7 +70,7 @@ public class JackrabbitQueryParser extends QueryParser { + */ + public Query parse(String textsearch) throws ParseException { + // replace escaped ' with just ' +- StringBuffer rewritten = new StringBuffer(); ++ StringBuilder rewritten = new StringBuilder(textsearch.length()); + // the default lucene query parser recognizes 'AND' and 'NOT' as + // keywords. + textsearch = textsearch.replaceAll("AND", "and"); +@@ -211,7 +211,7 @@ public class JackrabbitQueryParser extends QueryParser { + * @return the translated String. + */ + private String translateWildcards(String input) { +- StringBuffer translated = new StringBuffer(input.length()); ++ StringBuilder translated = new StringBuilder(input.length()); + boolean escaped = false; + for (int i = 0; i < input.length(); i++) { + if (input.charAt(i) == '\\') { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LongField.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LongField.java +index b003f82..c9732f0 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LongField.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LongField.java +@@ -28,7 +28,7 @@ public class LongField { + } + + public static String longToString(long value) { +- StringBuffer sb = new StringBuffer(STRING_LONG_LEN); ++ StringBuilder sb = new StringBuilder(STRING_LONG_LEN); + if (value < 0) { + // shift value + value += Long.MAX_VALUE; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java +index be35057..b4f2a69 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryBuilder.java +@@ -237,7 +237,7 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + + Query q = builder.createLuceneQuery(); + if (builder.exceptions.size() > 0) { +- StringBuffer msg = new StringBuffer(); ++ StringBuilder msg = new StringBuilder(); + for (Exception exception : builder.exceptions) { + msg.append(exception.toString()).append('\n'); + } +@@ -391,7 +391,7 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + } catch (RepositoryException e) { + exceptions.add(e); + } +- if (terms.size() == 0) { ++ if (terms.isEmpty()) { + // exception occured + return new BooleanQuery(); + } else if (terms.size() == 1) { +@@ -415,9 +415,9 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + } else { + // final path element is a property name + Name propName = relPath.getName(); +- StringBuffer tmp = new StringBuffer(); ++ StringBuilder tmp = new StringBuilder(); + tmp.append(nsMappings.getPrefix(propName.getNamespaceURI())); +- tmp.append(":").append(FieldNames.FULLTEXT_PREFIX); ++ tmp.append(':').append(FieldNames.FULLTEXT_PREFIX); + tmp.append(propName.getLocalName()); + fieldname = tmp.toString(); + } +@@ -769,8 +769,7 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + Query q; + if (transform[0] == TransformConstants.TRANSFORM_UPPER_CASE) { + q = new CaseTermQuery.Upper(t); +- } else +- if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { ++ } else if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { + q = new CaseTermQuery.Lower(t); + } else { + q = new JackrabbitTermQuery(t); +@@ -853,8 +852,7 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + Query q; + if (transform[0] == TransformConstants.TRANSFORM_UPPER_CASE) { + q = new CaseTermQuery.Upper(t); +- } else +- if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { ++ } else if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { + q = new CaseTermQuery.Lower(t); + } else { + q = new JackrabbitTermQuery(t); +@@ -882,8 +880,7 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + Query q; + if (transform[0] == TransformConstants.TRANSFORM_UPPER_CASE) { + q = new CaseTermQuery.Upper(t); +- } else +- if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { ++ } else if (transform[0] == TransformConstants.TRANSFORM_LOWER_CASE) { + q = new CaseTermQuery.Lower(t); + } else { + q = new JackrabbitTermQuery(t); +@@ -1086,11 +1083,11 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + try { + Name n = session.getQName(literal); + values.add(nsMappings.translateName(n)); +- log.debug("Coerced " + literal + " into NAME."); ++ log.debug("Coerced {} into NAME.", literal); + } catch (NameException e) { +- log.debug("Unable to coerce '" + literal + "' into a NAME: " + e.toString()); ++ log.debug("Unable to coerce '{}' into a NAME: {}", literal, e); + } catch (NamespaceException e) { +- log.debug("Unable to coerce '" + literal + "' into a NAME: " + e.toString()); ++ log.debug("Unable to coerce '{}' into a NAME: {}", literal, e); + } + break; + case PropertyType.PATH: +@@ -1098,11 +1095,11 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + try { + Path p = session.getQPath(literal); + values.add(resolver.getJCRPath(p)); +- log.debug("Coerced " + literal + " into PATH."); ++ log.debug("Coerced {} into PATH.", literal); + } catch (NameException e) { +- log.debug("Unable to coerce '" + literal + "' into a PATH: " + e.toString()); ++ log.debug("Unable to coerce '{}' into a PATH: {}", literal, e); + } catch (NamespaceException e) { +- log.debug("Unable to coerce '" + literal + "' into a PATH: " + e.toString()); ++ log.debug("Unable to coerce '{}' into a PATH: {}", literal, e); + } + break; + case PropertyType.DATE: +@@ -1110,9 +1107,9 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + Calendar c = ISO8601.parse(literal); + if (c != null) { + values.add(DateField.timeToString(c.getTimeInMillis())); +- log.debug("Coerced " + literal + " into DATE."); ++ log.debug("Coerced {} into DATE.", literal); + } else { +- log.debug("Unable to coerce '" + literal + "' into a DATE."); ++ log.debug("Unable to coerce '{}' into a DATE.", literal); + } + break; + case PropertyType.DOUBLE: +@@ -1120,9 +1117,9 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + try { + double d = Double.parseDouble(literal); + values.add(DoubleField.doubleToString(d)); +- log.debug("Coerced " + literal + " into DOUBLE."); ++ log.debug("Coerced {} into DOUBLE.", literal); + } catch (NumberFormatException e) { +- log.debug("Unable to coerce '" + literal + "' into a DOUBLE: " + e.toString()); ++ log.debug("Unable to coerce '{}' into a DOUBLE: {}", literal, e); + } + break; + case PropertyType.LONG: +@@ -1130,9 +1127,9 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + try { + long l = Long.parseLong(literal); + values.add(LongField.longToString(l)); +- log.debug("Coerced " + literal + " into LONG."); ++ log.debug("Coerced {} into LONG.", literal); + } catch (NumberFormatException e) { +- log.debug("Unable to coerce '" + literal + "' into a LONG: " + e.toString()); ++ log.debug("Unable to coerce '{}' into a LONG: {}", literal, e); + } + break; + case PropertyType.DECIMAL: +@@ -1140,20 +1137,20 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + try { + BigDecimal d = new BigDecimal(literal); + values.add(DecimalField.decimalToString(d)); +- log.debug("Coerced " + literal + " into DECIMAL."); ++ log.debug("Coerced {} into DECIMAL.", literal); + } catch (NumberFormatException e) { +- log.debug("Unable to coerce '" + literal + "' into a DECIMAL: " + e.toString()); ++ log.debug("Unable to coerce '{}' into a DECIMAL: {}", literal, e); + } + break; + case PropertyType.URI: + // fall through... TODO: correct? + case PropertyType.STRING: + values.add(literal); +- log.debug("Using literal " + literal + " as is."); ++ log.debug("Using literal {} as is.", literal); + break; + } + } +- if (values.size() == 0) { ++ if (values.isEmpty()) { + // use literal as is then try to guess other types + values.add(literal); + +@@ -1162,7 +1159,7 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + // might be a path + try { + values.add(resolver.getJCRPath(session.getQPath(literal))); +- log.debug("Coerced " + literal + " into PATH."); ++ log.debug("Coerced {} into PATH.", literal); + } catch (Exception e) { + // not a path + } +@@ -1172,7 +1169,7 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + try { + Name n = session.getQName(literal); + values.add(nsMappings.translateName(n)); +- log.debug("Coerced " + literal + " into NAME."); ++ log.debug("Coerced {} into NAME.", literal); + } catch (Exception e) { + // not a name + } +@@ -1182,19 +1179,19 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + Calendar c = ISO8601.parse(literal); + if (c != null) { + values.add(DateField.timeToString(c.getTimeInMillis())); +- log.debug("Coerced " + literal + " into DATE."); ++ log.debug("Coerced {} into DATE.", literal); + } + } else { + // long or double are possible at this point + try { + values.add(LongField.longToString(Long.parseLong(literal))); +- log.debug("Coerced " + literal + " into LONG."); ++ log.debug("Coerced {} into LONG.", literal); + } catch (NumberFormatException e) { + // not a long + // try double + try { + values.add(DoubleField.doubleToString(Double.parseDouble(literal))); +- log.debug("Coerced " + literal + " into DOUBLE."); ++ log.debug("Coerced {} into DOUBLE.", literal); + } catch (NumberFormatException e1) { + // not a double + } +@@ -1202,9 +1199,9 @@ public class LuceneQueryBuilder implements QueryNodeVisitor { + } + } + // if still no values use literal as is +- if (values.size() == 0) { ++ if (values.isEmpty()) { + values.add(literal); +- log.debug("Using literal " + literal + " as is."); ++ log.debug("Using literal {} as is.", literal); + } + return values.toArray(new String[values.size()]); + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java +index fb8fb21..6e95276 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactory.java +@@ -318,9 +318,9 @@ public class LuceneQueryFactory { + } else { + // final path element is a property name + Name propName = fts.getPropertyQName(); +- StringBuffer tmp = new StringBuffer(); ++ StringBuilder tmp = new StringBuilder(); + tmp.append(nsMappings.getPrefix(propName.getNamespaceURI())); +- tmp.append(":").append(FieldNames.FULLTEXT_PREFIX); ++ tmp.append(':').append(FieldNames.FULLTEXT_PREFIX); + tmp.append(propName.getLocalName()); + fieldname = tmp.toString(); + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MoreLikeThis.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MoreLikeThis.java +index eb0ed9c..36d0f9c 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MoreLikeThis.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MoreLikeThis.java +@@ -650,10 +650,10 @@ public final class MoreLikeThis { + * Describe the parameters that control how the "more like this" query is formed. + */ + public String describeParams() { +- StringBuffer sb = new StringBuffer(); +- sb.append("\tmaxQueryTerms : ").append(maxQueryTerms).append("\n"); +- sb.append("\tminWordLen : ").append(minWordLen).append("\n"); +- sb.append("\tmaxWordLen : ").append(maxWordLen).append("\n"); ++ StringBuilder sb = new StringBuilder(); ++ sb.append("\tmaxQueryTerms : ").append(maxQueryTerms).append('\n'); ++ sb.append("\tminWordLen : ").append(minWordLen).append('\n'); ++ sb.append("\tmaxWordLen : ").append(maxWordLen).append('\n'); + sb.append("\tfieldNames : "); + String delim = ""; + for (int i = 0; i < fieldNames.length; i++) { +@@ -661,10 +661,10 @@ public final class MoreLikeThis { + sb.append(delim).append(fieldName); + delim = ", "; + } +- sb.append("\n"); +- sb.append("\tboost : ").append(boost).append("\n"); +- sb.append("\tminTermFreq : ").append(minTermFreq).append("\n"); +- sb.append("\tminDocFreq : ").append(minDocFreq).append("\n"); ++ sb.append('\n'); ++ sb.append("\tboost : ").append(boost).append('\n'); ++ sb.append("\tminTermFreq : ").append(minTermFreq).append('\n'); ++ sb.append("\tminDocFreq : ").append(minDocFreq).append('\n'); + return sb.toString(); + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java +index 0eacf22..3ba6d3d 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java +@@ -279,7 +279,7 @@ public class MultiIndex { + // an index that has been deleted, but indexNames has not been + // written to disk. + if (!directoryManager.hasDirectory(name)) { +- log.debug("index does not exist anymore: " + name); ++ log.debug("index does not exist anymore: {}", name); + // move on to next index + continue; + } +@@ -905,7 +905,7 @@ public class MultiIndex { + indexes.remove(index); + indexNames.removeName(index.getName()); + synchronized (deletable) { +- log.debug("Moved " + index.getName() + " to deletable"); ++ log.debug("Moved {} to deletable", index.getName()); + deletable.put(index.getName(), System.currentTimeMillis()); + } + } +@@ -1295,8 +1295,7 @@ public class MultiIndex { + && idleTime > handler.getVolatileIdleTime() * 1000) { + try { + if (redoLog.hasEntries()) { +- log.debug("Flushing index after being idle for " +- + idleTime + " ms."); ++ log.debug("Flushing index after being idle for {} ms.", idleTime); + safeFlush(); + } + } catch (IOException e) { +@@ -1650,7 +1649,7 @@ public class MultiIndex { + * @inheritDoc + */ + public String toString() { +- StringBuffer logLine = new StringBuffer(); ++ StringBuilder logLine = new StringBuilder(); + logLine.append(Long.toString(getTransactionId())); + logLine.append(' '); + logLine.append(Action.ADD_INDEX); +@@ -1742,7 +1741,7 @@ public class MultiIndex { + * @inheritDoc + */ + public String toString() { +- StringBuffer logLine = new StringBuffer(ENTRY_LENGTH); ++ StringBuilder logLine = new StringBuilder(ENTRY_LENGTH); + logLine.append(Long.toString(getTransactionId())); + logLine.append(' '); + logLine.append(Action.ADD_NODE); +@@ -1858,7 +1857,7 @@ public class MultiIndex { + * @inheritDoc + */ + public String toString() { +- StringBuffer logLine = new StringBuffer(); ++ StringBuilder logLine = new StringBuilder(); + logLine.append(Long.toString(getTransactionId())); + logLine.append(' '); + logLine.append(Action.CREATE_INDEX); +@@ -1933,7 +1932,7 @@ public class MultiIndex { + * @inheritDoc + */ + public String toString() { +- StringBuffer logLine = new StringBuffer(); ++ StringBuilder logLine = new StringBuilder(); + logLine.append(Long.toString(getTransactionId())); + logLine.append(' '); + logLine.append(Action.DELETE_INDEX); +@@ -2021,7 +2020,7 @@ public class MultiIndex { + * @inheritDoc + */ + public String toString() { +- StringBuffer logLine = new StringBuffer(ENTRY_LENGTH); ++ StringBuilder logLine = new StringBuilder(ENTRY_LENGTH); + logLine.append(Long.toString(getTransactionId())); + logLine.append(' '); + logLine.append(Action.DELETE_NODE); +@@ -2124,7 +2123,7 @@ public class MultiIndex { + * @inheritDoc + */ + public String toString() { +- StringBuffer logLine = new StringBuffer(); ++ StringBuilder logLine = new StringBuilder(); + logLine.append(Long.toString(getTransactionId())); + logLine.append(' '); + logLine.append(Action.VOLATILE_COMMIT); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NameRangeQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NameRangeQuery.java +index 5232ae9..bf47cb8 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NameRangeQuery.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NameRangeQuery.java +@@ -118,7 +118,7 @@ public class NameRangeQuery extends Query { + * {@inheritDoc} + */ + public String toString(String field) { +- StringBuffer buffer = new StringBuffer(); ++ StringBuilder buffer = new StringBuilder(); + buffer.append("name():"); + buffer.append(inclusive ? "[" : "{"); + buffer.append(lowerName != null ? lowerName.toString() : "null"); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java +index 61a6a6f..e6bf988 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java +@@ -197,8 +197,7 @@ class NodeIteratorImpl implements NodeIterator { + next = (NodeImpl) itemMgr.getItem( + sn[selectorIndex].getNodeId()); + } catch (RepositoryException e) { +- log.warn("Failed to retrieve query result node " +- + sn[selectorIndex].getNodeId(), e); ++ log.warn("Failed to retrieve query result node {}", sn[selectorIndex].getNodeId(), e); + // try next + invalid++; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/OffsetCharSequence.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/OffsetCharSequence.java +index ddebe7f..0fbf8ca 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/OffsetCharSequence.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/OffsetCharSequence.java +@@ -111,7 +111,7 @@ final class OffsetCharSequence implements CharSequence, Comparable= resultNodes.size()) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java +index c227dc5..e47648e 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java +@@ -185,7 +185,7 @@ public class RangeQuery extends Query implements Transformable { + * @return a string representation of this query. + */ + public String toString(String field) { +- StringBuffer buffer = new StringBuffer(); ++ StringBuilder buffer = new StringBuilder(); + if (!getField().equals(field)) { + buffer.append(getField()); + buffer.append(":"); +@@ -334,7 +334,7 @@ public class RangeQuery extends Query implements Transformable { + PerQueryCache cache) { + super(similarity); + this.reader = reader; +- StringBuffer key = new StringBuffer(); ++ StringBuilder key = new StringBuilder(); + key.append(lowerTerm != null ? lowerTerm.field() : upperTerm.field()); + key.append('\uFFFF'); + key.append(lowerTerm != null ? lowerTerm.text() : ""); +@@ -435,8 +435,8 @@ public class RangeQuery extends Query implements Transformable { + startTerms.add(lowerTerm); + } else { + // first enumerate terms using lower case start character +- StringBuffer termText = new StringBuffer(propNameLength + 1); +- termText.append(lowerTerm.text().subSequence(0, propNameLength)); ++ StringBuilder termText = new StringBuilder(propNameLength + 1); ++ termText.append(lowerTerm.text(), 0, propNameLength); + char startCharacter = lowerTerm.text().charAt(propNameLength); + termText.append(Character.toLowerCase(startCharacter)); + startTerms.add(new Term(lowerTerm.field(), termText.toString())); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ScoreNode.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ScoreNode.java +index c0919b9..2d769e0 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ScoreNode.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ScoreNode.java +@@ -117,14 +117,14 @@ public final class ScoreNode { + } + + public String toString() { +- StringBuffer sb = new StringBuffer(id.toString()); +- sb.append("("); ++ StringBuilder sb = new StringBuilder(id.toString()); ++ sb.append('('); + if (doc != -1) { + sb.append(doc); + } else { +- sb.append("?"); ++ sb.append('?'); + } +- sb.append(")"); ++ sb.append(')'); + return sb.toString(); + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java +index d4ae5d3..b8ee23d 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java +@@ -592,7 +592,7 @@ public class SearchIndex extends AbstractQueryHandler { + check.repair(true); + } else { + List errors = check.getErrors(); +- if (errors.size() == 0) { ++ if (errors.isEmpty()) { + log.info("No errors detected."); + } + for (ConsistencyCheckError err : errors) { +@@ -600,15 +600,14 @@ public class SearchIndex extends AbstractQueryHandler { + } + } + } catch (Exception e) { +- log.warn("Failed to run consistency check on index: " + e); ++ log.warn("Failed to run consistency check on index: {}", (Object) e); + } + } + + // initialize spell checker + spellChecker = createSpellChecker(); + +- log.info("Index initialized: {} Version: {}", +- new Object[]{path, index.getIndexFormatVersion()}); ++ log.info("Index initialized: {} Version: {}", path, index.getIndexFormatVersion()); + if (!index.getIndexFormatVersion().equals(getIndexFormatVersion())) { + log.warn("Using Version {} for reading. Please re-index version " + + "storage for optimal performance.", +@@ -676,8 +675,7 @@ public class SearchIndex extends AbstractQueryHandler { + state, getNamespaceMappings(), + index.getIndexFormatVersion())); + } catch (RepositoryException e) { +- log.warn("Exception while creating document for node: " +- + state.getNodeId() + ": " + e.toString()); ++ log.warn("Exception while creating document for node: {}: {}", state.getNodeId(), e); + } + } + } +@@ -702,8 +700,7 @@ public class SearchIndex extends AbstractQueryHandler { + state, getNamespaceMappings(), + index.getIndexFormatVersion())); + } catch (RepositoryException e) { +- log.warn("Exception while creating document for node: " +- + state.getNodeId(), e); ++ log.warn("Exception while creating document for node: {}", state.getNodeId(), e); + } + } + +@@ -840,7 +837,7 @@ public class SearchIndex extends AbstractQueryHandler { + getContext().destroy(); + super.close(); + closed = true; +- log.info("Index closed: " + path); ++ log.info("Index closed: {}", path); + } + + /** +@@ -1004,7 +1001,7 @@ public class SearchIndex extends AbstractQueryHandler { + try { + url = file.toURI().toURL(); + } catch (MalformedURLException e) { +- log.warn("Invalid Tika configuration path: " + file, e); ++ log.warn("Invalid Tika configuration path: {}", file, e); + } + } else { + ClassLoader loader = SearchIndex.class.getClassLoader(); +@@ -1020,7 +1017,7 @@ public class SearchIndex extends AbstractQueryHandler { + try { + config = new TikaConfig(url); + } catch (Exception e) { +- log.warn("Tika configuration not available: " + url, e); ++ log.warn("Tika configuration not available: {}", url, e); + } + } + if (config == null) { +@@ -1288,10 +1285,9 @@ public class SearchIndex extends AbstractQueryHandler { + idxCfg.init(docElement, getContext(), namespaceMappings); + return idxCfg; + } catch (Exception e) { +- log.warn("Exception initializing indexing configuration from: " +- + indexingConfigPath, e); ++ log.warn("Exception initializing indexing configuration from: {}", indexingConfigPath, e); + } +- log.warn(indexingConfigPath + " ignored."); ++ log.warn("{} ignored.", indexingConfigPath); + return null; + } + +@@ -1306,8 +1302,7 @@ public class SearchIndex extends AbstractQueryHandler { + sp = (SynonymProvider) synonymProviderClass.newInstance(); + sp.initialize(createSynonymProviderConfigResource()); + } catch (Exception e) { +- log.warn("Exception initializing synonym provider: " +- + synonymProviderClass, e); ++ log.warn("Exception initializing synonym provider: {}", synonymProviderClass, e); + sp = null; + } + } +@@ -1419,8 +1414,7 @@ public class SearchIndex extends AbstractQueryHandler { + spCheck = (SpellChecker) spellCheckerClass.newInstance(); + spCheck.init(this); + } catch (Exception e) { +- log.warn("Exception initializing spell checker: " +- + spellCheckerClass, e); ++ log.warn("Exception initializing spell checker: {}", spellCheckerClass, e); + } + } + return spCheck; +@@ -1449,11 +1443,11 @@ public class SearchIndex extends AbstractQueryHandler { + + if (configStream == null) { + // only warn if not available also in the classpath +- log.warn("File does not exist: " + indexingConfigPath); ++ log.warn("File does not exist: {}", indexingConfigPath); + return null; + } + } else if (!config.canRead()) { +- log.warn("Cannot read file: " + indexingConfigPath); ++ log.warn("Cannot read file: {}", indexingConfigPath); + return null; + } + try { +@@ -1472,9 +1466,9 @@ public class SearchIndex extends AbstractQueryHandler { + } catch (ParserConfigurationException e) { + log.warn("Unable to create XML parser", e); + } catch (IOException e) { +- log.warn("Exception parsing " + indexingConfigPath, e); ++ log.warn("Exception parsing {}", indexingConfigPath, e); + } catch (SAXException e) { +- log.warn("Exception parsing " + indexingConfigPath, e); ++ log.warn("Exception parsing {}", indexingConfigPath, e); + } finally { + if (configStream != null) { + try { +@@ -1611,8 +1605,7 @@ public class SearchIndex extends AbstractQueryHandler { + state.getNodeId(), e.getMessage()); + } catch (Exception e) { + // do not fail if aggregate cannot be created +- log.warn("Exception while building indexing aggregate for " +- + state.getNodeId(), e); ++ log.warn("Exception while building indexing aggregate for {}", state.getNodeId(), e); + } + } + } +@@ -1697,7 +1690,7 @@ public class SearchIndex extends AbstractQueryHandler { + try { + root = aggregateRule.getAggregateRoot(state); + } catch (Exception e) { +- log.warn("Unable to get aggregate root for " + state.getNodeId(), e); ++ log.warn("Unable to get aggregate root for {}", state.getNodeId(), e); + } + if (root == null) { + continue; +@@ -2418,7 +2411,7 @@ public class SearchIndex extends AbstractQueryHandler { + Class similarityClass = Class.forName(className); + similarity = (Similarity) similarityClass.newInstance(); + } catch (Exception e) { +- log.warn("Invalid Similarity class: " + className, e); ++ log.warn("Invalid Similarity class: {}", className, e); + } + } + +@@ -2640,9 +2633,7 @@ public class SearchIndex extends AbstractQueryHandler { + try { + r = deserializer.deserialize(record); + } catch (JournalException e) { +- log.error( +- "Unable to read revision '" + record.getRevision() +- + "'.", e); ++ log.error("Unable to read revision '{}'.", record.getRevision(), e); + } + if (r == null) { + continue; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SimpleExcerptProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SimpleExcerptProvider.java +index 06ff2e2..c6c7519 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SimpleExcerptProvider.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SimpleExcerptProvider.java +@@ -56,7 +56,7 @@ public class SimpleExcerptProvider implements ExcerptProvider { + */ + public String getExcerpt(NodeId id, int maxFragments, int maxFragmentSize) + throws IOException { +- StringBuffer text = new StringBuffer(); ++ StringBuilder text = new StringBuilder(); + try { + NodeState nodeState = (NodeState) ism.getItemState(id); + String separator = ""; +@@ -85,6 +85,8 @@ public class SimpleExcerptProvider implements ExcerptProvider { + } + text.append(" ..."); + } +- return "" + text.toString() + ""; ++ text.insert(0, ""); ++ text.append(""); ++ return text.toString(); + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/TermDocsCache.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/TermDocsCache.java +index 153e8e9..727a840 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/TermDocsCache.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/TermDocsCache.java +@@ -94,7 +94,7 @@ public class TermDocsCache { + * @throws IOException if an error occurs while reading from the index. + */ + public TermDocs termDocs(final Term t) throws IOException { +- if (t == null || t.field() != field) { ++ if (t == null || (field == null ? t.field() != null : !field.equals(t.field()))) { + return reader.termDocs(t); + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java +index e8fe0bf..068b549 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java +@@ -62,7 +62,7 @@ public class Util { + field.dispose(); + } + } catch (IOException ex) { +- log.warn("Exception while disposing index document: " + ex); ++ log.warn("Exception while disposing index document: {}", (Object) ex); + } + } + } +@@ -381,7 +381,7 @@ public class Util { + // - escape all non alphabetic characters + // - escape constructs like \ into \\ + // - replace non escaped _ % into . and .* +- StringBuffer regexp = new StringBuffer(); ++ StringBuilder regexp = new StringBuilder(); + boolean escaped = false; + for (int i = 0; i < likePattern.length(); i++) { + if (likePattern.charAt(i) == '\\') { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WeightedHighlighter.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WeightedHighlighter.java +index da8d555..50daddd 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WeightedHighlighter.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WeightedHighlighter.java +@@ -182,7 +182,7 @@ public class WeightedHighlighter extends DefaultHighlighter { + } + + // create excerpts +- StringBuffer sb = new StringBuffer(excerptStart); ++ StringBuilder sb = new StringBuilder(excerptStart); + it = infos.iterator(); + while (it.hasNext()) { + FragmentInfo fi = it.next(); +@@ -226,7 +226,7 @@ public class WeightedHighlighter extends DefaultHighlighter { + * @return the length of the start fragment that was appended to + * sb. + */ +- private int startFragment(StringBuffer sb, String text, int offset, int limit) { ++ private int startFragment(StringBuilder sb, String text, int offset, int limit) { + if (limit == 0) { + // append all + sb.append(escape(text.substring(0, offset))); +@@ -259,7 +259,7 @@ public class WeightedHighlighter extends DefaultHighlighter { + * @param offset the end offset of the last matching term in the fragment. + * @param limit do not go further than limit. + */ +- private void endFragment(StringBuffer sb, String text, int offset, int limit) { ++ private void endFragment(StringBuilder sb, String text, int offset, int limit) { + if (limit == text.length()) { + // append all + sb.append(escape(text.substring(offset))); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardNameQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardNameQuery.java +index cb6ba64..4ce3f38 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardNameQuery.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardNameQuery.java +@@ -58,19 +58,19 @@ public class WildcardNameQuery extends WildcardQuery { + if (idx != -1) { + prefix = pattern.substring(0, idx); + } +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + // translate prefix + try { + sb.append(nsMappings.getPrefix(resolver.getURI(prefix))); + } catch (NamespaceException e) { + // prefix in pattern is probably unknown +- log.debug("unknown namespace prefix in pattern: " + pattern); ++ log.debug("unknown namespace prefix in pattern: {}", pattern); + // -> ignore and use empty string for index internal prefix + // this will not match anything + } +- sb.append(":"); ++ sb.append(':'); + // remaining pattern, may also be whole pattern +- sb.append(pattern.substring(idx + 1)); ++ sb.append(pattern, idx + 1, pattern.length()); + return sb.toString(); + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java +index 1c1dfdb..c359b47 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java +@@ -210,7 +210,7 @@ public class WildcardQuery extends Query implements Transformable { + /** Prints a user-readable version of this query. */ + @Override + public String toString(String field) { +- StringBuffer buffer = new StringBuffer(); ++ StringBuilder buffer = new StringBuilder(); + buffer.append(field); + buffer.append(':'); + buffer.append(ToStringUtils.boost(getBoost())); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardTermEnum.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardTermEnum.java +index 7eadf50..ee17e25 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardTermEnum.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardTermEnum.java +@@ -207,11 +207,11 @@ class WildcardTermEnum extends FilteredTermEnum implements TransformConstants { + new Term(field, prefix), new Term(field, limit))); + } else { + // start with initial lower case +- StringBuffer lowerLimit = new StringBuffer(patternPrefix.toUpperCase()); ++ StringBuilder lowerLimit = new StringBuilder(patternPrefix.toUpperCase()); + lowerLimit.setCharAt(0, Character.toLowerCase(lowerLimit.charAt(0))); + String prefix = tvf.createValue(lowerLimit.toString()); + +- StringBuffer upperLimit = new StringBuffer(patternPrefix.toLowerCase()); ++ StringBuilder upperLimit = new StringBuilder(patternPrefix.toLowerCase()); + upperLimit.append('\uFFFF'); + String limit = tvf.createValue(upperLimit.toString()); + rangeScans.add(new RangeScan(reader, +@@ -219,7 +219,7 @@ class WildcardTermEnum extends FilteredTermEnum implements TransformConstants { + + // second scan with upper case start + prefix = tvf.createValue(patternPrefix.toUpperCase()); +- upperLimit = new StringBuffer(patternPrefix.toLowerCase()); ++ upperLimit = new StringBuilder(patternPrefix.toLowerCase()); + upperLimit.setCharAt(0, Character.toUpperCase(upperLimit.charAt(0))); + upperLimit.append('\uFFFF'); + limit = tvf.createValue(upperLimit.toString()); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/hits/AdaptingHits.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/hits/AdaptingHits.java +index 0485596..9ff8a0c 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/hits/AdaptingHits.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/hits/AdaptingHits.java +@@ -90,8 +90,7 @@ public class AdaptingHits implements Hits { + int intArraySize = docCount * 4; + int bitSetSize = maxDoc / 8; + if (bitSetSize < intArraySize) { +- log.debug("BitSet is smaller than int[]: " +- + bitSetSize + " vs " + intArraySize); ++ log.debug("BitSet is smaller than int[]: {} vs {}", bitSetSize, intArraySize); + BitSetHits bitSetHits = new BitSetHits(); + int i = 0; + while (i > -1) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/retention/RetentionRegistryImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/retention/RetentionRegistryImpl.java +index bc2329c..77929b6 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/retention/RetentionRegistryImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/retention/RetentionRegistryImpl.java +@@ -138,7 +138,7 @@ public class RetentionRegistryImpl implements RetentionRegistry, SynchronousEven + // node doesn't exist any more or hold/retention has been removed. + // ignore. upon close() the file will not contain the given nodeId + // any more. +- log.warn("Unable to read retention policy / holds from node '" + nodeId + "': " + e.getMessage()); ++ log.warn("Unable to read retention policy / holds from node '{}': {}", nodeId, e.getMessage()); + } + } + } finally { +@@ -183,9 +183,9 @@ public class RetentionRegistryImpl implements RetentionRegistry, SynchronousEven + } + } + } catch (FileSystemException fse) { +- log.error("Error while saving locks to '" + retentionFile.getPath() + "': " + fse.getMessage()); ++ log.error("Error while saving locks to '{}': {}", retentionFile.getPath(), fse.getMessage()); + } catch (IOException ioe) { +- log.error("Error while saving locks to '" + retentionFile.getPath() + "': " + ioe.getMessage()); ++ log.error("Error while saving locks to '{}': {}", retentionFile.getPath(), ioe.getMessage()); + } finally { + IOUtils.closeQuietly(writer); + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/DefaultAccessManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/DefaultAccessManager.java +index 0327f4c..fe82a89 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/DefaultAccessManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/DefaultAccessManager.java +@@ -341,7 +341,7 @@ public class DefaultAccessManager extends AbstractAccessControlManager implement + AccessControlPolicy[] applicable = editor.editAccessControlPolicies(absPath); + return new AccessControlPolicyIteratorAdapter(Arrays.asList(applicable)); + } catch (AccessControlException e) { +- log.debug("No applicable policy at " + absPath); ++ log.debug("No applicable policy at {}", absPath); + } + } + // no applicable policies -> return empty iterator. +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/AbstractLoginModule.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/AbstractLoginModule.java +index d2b5237..1026a56 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/AbstractLoginModule.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/AbstractLoginModule.java +@@ -169,7 +169,7 @@ public abstract class AbstractLoginModule implements LoginModule { + return; // abort. not even a default principal provider + } + } +- log.debug("- PrincipalProvider -> '" + principalProvider.getClass().getName() + "'"); ++ log.debug("- PrincipalProvider -> '{}'", principalProvider.getClass().getName()); + + // call implementation for additional setup + doInit(callbackHandler, repositoryCb.getSession(), options); +@@ -313,7 +313,7 @@ public abstract class AbstractLoginModule implements LoginModule { + if (creds == null) { + log.debug("No credentials available -> try default (anonymous) authentication."); + } else if (!supportsCredentials(creds)) { +- log.debug("Unsupported credentials implementation : " + creds.getClass().getName()); ++ log.debug("Unsupported credentials implementation : {}", creds.getClass().getName()); + return false; + } + +@@ -518,9 +518,9 @@ public abstract class AbstractLoginModule implements LoginModule { + callbackHandler.handle(new Callback[]{impers}); + impersonator = impers.getImpersonator(); + } catch (UnsupportedCallbackException e) { +- log.warn(e.getCallback().getClass().getName() + " not supported: Unable to perform Impersonation."); ++ log.warn("{} not supported: Unable to perform Impersonation.", e.getCallback().getClass().getName()); + } catch (IOException e) { +- log.error("Impersonation-Callback failed: " + e.getMessage() + ": Unable to perform Impersonation."); ++ log.error("Impersonation-Callback failed: {}: Unable to perform Impersonation.", e.getMessage()); + } + } else if (credentials instanceof SimpleCredentials) { + SimpleCredentials sc = (SimpleCredentials) credentials; +@@ -563,7 +563,7 @@ public abstract class AbstractLoginModule implements LoginModule { + } catch (UnsupportedCallbackException e) { + log.warn("Credentials-Callback not supported try Name-Callback"); + } catch (IOException e) { +- log.error("Credentials-Callback failed: " + e.getMessage() + ": try Name-Callback"); ++ log.error("Credentials-Callback failed: {}: try Name-Callback", e.getMessage()); + } + } + // if still no credentials -> try to retrieve them from the subject. +@@ -630,7 +630,7 @@ public abstract class AbstractLoginModule implements LoginModule { + } catch (UnsupportedCallbackException e) { + log.warn("Credentials- or NameCallback must be supported"); + } catch (IOException e) { +- log.error("Name-Callback failed: " + e.getMessage()); ++ log.error("Name-Callback failed: {}", e.getMessage()); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/DefaultLoginModule.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/DefaultLoginModule.java +index 9a7dd74..c77b23d 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/DefaultLoginModule.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/DefaultLoginModule.java +@@ -141,7 +141,7 @@ public class DefaultLoginModule extends AbstractLoginModule { + try { + this.session = (SessionImpl) session; + userManager = this.session.getUserManager(); +- log.debug("- UserManager -> '" + userManager.getClass().getName() + "'"); ++ log.debug("- UserManager -> '{}'", userManager.getClass().getName()); + } catch (RepositoryException e) { + throw new LoginException("Unable to initialize LoginModule: " + e.getMessage()); + } +@@ -149,12 +149,12 @@ public class DefaultLoginModule extends AbstractLoginModule { + // configuration options related to token based authentication + if (options.containsKey(PARAM_DISABLE_TOKEN_AUTH)) { + disableTokenAuth = Boolean.parseBoolean(options.get(PARAM_DISABLE_TOKEN_AUTH).toString()); +- log.debug("- Token authentication disabled -> '" + disableTokenAuth + "'"); ++ log.debug("- Token authentication disabled -> '{}'", disableTokenAuth); + } + if (options.containsKey(PARAM_TOKEN_EXPIRATION)) { + try { + tokenExpiration = Long.parseLong(options.get(PARAM_TOKEN_EXPIRATION).toString()); +- log.debug("- Token expiration -> '" + tokenExpiration + "'"); ++ log.debug("- Token expiration -> '{}'", tokenExpiration); + } catch (NumberFormatException e) { + log.warn("Unabled to parse token expiration: {}", e.getMessage()); + } +@@ -181,7 +181,7 @@ public class DefaultLoginModule extends AbstractLoginModule { + user = (User) authrz; + if (user.isDisabled()) { + // log message and return null -> login module returns false. +- log.debug("User " + userId + " has been disabled."); ++ log.debug("User {} has been disabled.", userId); + } else { + principal = user.getPrincipal(); + } +@@ -228,9 +228,9 @@ public class DefaultLoginModule extends AbstractLoginModule { + return TokenBasedAuthentication.getUserId(tokenCredentials, session); + } catch (RepositoryException e) { + if (log.isDebugEnabled()) { +- log.warn("Failed to retrieve UserID from token-based credentials", e); ++ log.debug("Failed to retrieve UserID from token-based credentials", e); + } else { +- log.warn("Failed to retrieve UserID from token-based credentials: {}", e.toString()); ++ log.warn("Failed to retrieve UserID from token-based credentials: {}", (Object) e); + } + } + // failed to retrieve the user from loginToken. +@@ -290,7 +290,7 @@ public class DefaultLoginModule extends AbstractLoginModule { + throw new FailedLoginException("attempt to impersonate denied for " + principal.getName()); + } + } else { +- log.debug("Failed to retrieve user to impersonate for principal name " + principal.getName()); ++ log.debug("Failed to retrieve user to impersonate for principal name {}", principal.getName()); + return false; + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/SimpleCredentialsAuthentication.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/SimpleCredentialsAuthentication.java +index c233c39..67fb96c 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/SimpleCredentialsAuthentication.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/SimpleCredentialsAuthentication.java +@@ -60,7 +60,7 @@ class SimpleCredentialsAuthentication implements Authentication { + throw new RepositoryException(e); + } + } else { +- log.warn("No Credentials found with user " + user.getID()); ++ log.warn("No Credentials found with user {}", user.getID()); + this.creds = null; + } + } +@@ -103,9 +103,9 @@ class SimpleCredentialsAuthentication implements Authentication { + return true; + } + } catch (NoSuchAlgorithmException e) { +- log.debug("Failed to verify Credentials with {}: {}.", credentials.toString(), e); ++ log.debug("Failed to verify Credentials with {}: {}.", credentials, e); + } catch (UnsupportedEncodingException e) { +- log.debug("Failed to verify Credentials with {}: {}.", credentials.toString(), e); ++ log.debug("Failed to verify Credentials with {}: {}.", credentials, e); + } + return false; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/CompatTokenProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/CompatTokenProvider.java +index 900c2ed..6d4dad4 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/CompatTokenProvider.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/CompatTokenProvider.java +@@ -261,7 +261,7 @@ class CompatTokenProvider { + byte key[] = new byte[size]; + random.nextBytes(key); + +- StringBuffer res = new StringBuffer(key.length * 2); ++ StringBuilder res = new StringBuilder(key.length * 2); + for (byte b : key) { + res.append(Text.hexTable[(b >> 4) & 15]); + res.append(Text.hexTable[b & 15]); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java +index f9d8a0c..a69298c 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java +@@ -76,7 +76,7 @@ public class TokenProvider extends ProtectedItemModifier { + + private static final char DELIM = '_'; + +- private static final Set RESERVED_ATTRIBUTES = new HashSet(3); ++ private static final Set RESERVED_ATTRIBUTES = new HashSet(3); + static { + RESERVED_ATTRIBUTES.add(TOKEN_ATTRIBUTE); + RESERVED_ATTRIBUTES.add(TOKEN_ATTRIBUTE_EXPIRY); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlProviderFactoryImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlProviderFactoryImpl.java +index 82fb6de..0d290d3 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlProviderFactoryImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlProviderFactoryImpl.java +@@ -77,7 +77,7 @@ public class AccessControlProviderFactoryImpl implements AccessControlProviderFa + prov = bc.newInstance(AccessControlProvider.class); + props = bc.getParameters(); + } else { +- log.debug("No ac-provider configuration for workspace " + workspaceName + " -> using defaults."); ++ log.debug("No ac-provider configuration for workspace {} -> using defaults.", workspaceName); + if (workspaceName.equals(secWorkspaceName) && !workspaceName.equals(defaultWorkspaceName)) { + // UserAccessControlProvider is designed to work with an extra + // workspace storing user and groups. therefore avoid returning +@@ -86,7 +86,7 @@ public class AccessControlProviderFactoryImpl implements AccessControlProviderFa + } else { + prov = new ACLProvider(); + } +- log.debug("Default provider for workspace " + workspaceName + " = " + prov.getClass().getName()); ++ log.debug("Default provider for workspace {} = {}", workspaceName, prov.getClass().getName()); + props = Collections.emptyMap(); + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeManagerImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeManagerImpl.java +index 9004ec6..56fcba3 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeManagerImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeManagerImpl.java +@@ -236,7 +236,7 @@ public final class PrivilegeManagerImpl implements PrivilegeManager, PrivilegeRe + try { + privs.add(getPrivilege(n)); + } catch (RepositoryException e) { +- log.error("Internal error: invalid privilege name " + n.toString()); ++ log.error("Internal error: invalid privilege name {}", n); + } + } + return privs; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeRegistry.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeRegistry.java +index 57ad32f..84958f8 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeRegistry.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeRegistry.java +@@ -855,9 +855,9 @@ public final class PrivilegeRegistry implements PrivilegeEventListener { + throw new RepositoryException("Declared aggregate name '"+ declaredAggregateName.toString() +"'refers to the same custom privilege."); + } + if (registeredPrivileges.containsKey(declaredAggregateName)) { +- log.debug("Declared aggregate name '"+ declaredAggregateName.toString() +"' referring to registered privilege."); ++ log.debug("Declared aggregate name '{}' referring to registered privilege.", declaredAggregateName); + } else if (toRegister.containsKey(declaredAggregateName)) { +- log.debug("Declared aggregate name '"+ declaredAggregateName.toString() +"' referring to un-registered privilege."); ++ log.debug("Declared aggregate name '{}' referring to un-registered privilege.", declaredAggregateName); + // need to check for circular aggregates + if (isCircularAggregation(stub, declaredAggregateName, toRegister)) { + throw new RepositoryException("Detected circular aggregation within custom privilege caused by " + declaredAggregateName.toString()); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLEditor.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLEditor.java +index f5c11fb..6b7b21a 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLEditor.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLEditor.java +@@ -374,8 +374,8 @@ public class ACLEditor extends ProtectedItemModifier implements AccessControlEdi + try { + NameParser.checkFormat(name); + } catch (NameException e) { ++ log.debug("Invalid path name for Permission: {}. Defaulting to: " + DEFAULT_ACE_NAME, name); + name = DEFAULT_ACE_NAME; +- log.debug("Invalid path name for Permission: " + name + "."); + } + } + int i = 0; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLProvider.java +index c6c9382..0c8541a 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLProvider.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLProvider.java +@@ -170,7 +170,7 @@ public class ACLProvider extends AbstractAccessControlProvider implements Access + // no access control information can be retrieved for the specified + // node, since neither the node nor any of its parents is access + // controlled. TODO: there should be a default policy in this case (see JCR-2331) +- log.warn("No access controlled node present in item hierarchy starting from " + targetNode.getPath()); ++ log.warn("No access controlled node present in item hierarchy starting from {}", targetNode.getPath()); + } + return acls.toArray(new AccessControlList[acls.size()]); + } +@@ -365,7 +365,7 @@ public class ACLProvider extends AbstractAccessControlProvider implements Access + log.info("No applicable ACL available for the root node -> skip initialization of the root node's ACL."); + } + } catch (RepositoryException e) { +- log.error("Failed to set-up minimal access control for root node of workspace " + session.getWorkspace().getName()); ++ log.error("Failed to set-up minimal access control for root node of workspace {}", session.getWorkspace().getName()); + session.getRootNode().refresh(false); + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLTemplate.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLTemplate.java +index 4a804e6..3df8127 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLTemplate.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/ACLTemplate.java +@@ -145,7 +145,7 @@ class ACLTemplate extends AbstractACLTemplate { + String principalName = aceNode.getProperty(P_PRINCIPAL_NAME).getString(); + Principal princ = principalMgr.getPrincipal(principalName); + if (princ == null) { +- log.debug("Principal with name " + principalName + " unknown to PrincipalManager."); ++ log.debug("Principal with name {} unknown to PrincipalManager.", principalName); + princ = new PrincipalImpl(principalName); + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/CachingEntryCollector.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/CachingEntryCollector.java +index 351550f..8c418fe 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/CachingEntryCollector.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/CachingEntryCollector.java +@@ -70,12 +70,12 @@ class CachingEntryCollector extends EntryCollector { + throw new RepositoryException("Invalid value " + strategy + " specified for system property " + propname); + } + +- log.info("Cache Update Strategy: " + strategy); ++ log.info("Cache Update Strategy: {}", strategy); + + propname = "org.apache.jackrabbit.core.security.authorization.acl.CachingEntryCollector.cacheNoACL"; + cacheNoAcl = Boolean.parseBoolean(System.getProperty(propname, "false")); + +- log.info("Caching entries with no ACLs: " + cacheNoAcl); ++ log.info("Caching entries with no ACLs: {}", cacheNoAcl); + } + + @Override +@@ -352,21 +352,21 @@ class CachingEntryCollector extends EntryCollector { + @SuppressWarnings("unchecked") + public EntryCache() { + int maxsize = 5000; +- String propname = "org.apache.jackrabbit.core.security.authorization.acl.CachingEntryCollector.maxsize"; ++ final String propname = "org.apache.jackrabbit.core.security.authorization.acl.CachingEntryCollector.maxsize"; + try { + maxsize = Integer.parseInt(System.getProperty(propname, Integer.toString(maxsize))); + } catch (NumberFormatException ex) { +- log.debug("Parsing system property " + propname + " with value: " + System.getProperty(propname), ex); ++ log.debug("Parsing system property " + propname + " with value: {}", System.getProperty(propname), ex); + } + +- log.info("Creating cache with max size of: " + maxsize); ++ log.info("Creating cache with max size of: {}", maxsize); + + cache = new GrowingLRUMap(1024, maxsize); + + String propsrname = "org.apache.jackrabbit.core.security.authorization.acl.CachingEntryCollector.scroot"; + specialCaseRoot = Boolean.parseBoolean(System.getProperty(propsrname, "true")); + +- log.info("Root is special-cased: " + specialCaseRoot); ++ log.info("Root is special-cased: {}", specialCaseRoot); + } + + public boolean specialCasesRoot() { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/EntryCollector.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/EntryCollector.java +index 887ff03..d90e6f2 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/EntryCollector.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/acl/EntryCollector.java +@@ -304,7 +304,7 @@ public class EntryCollector extends AccessControlObserver implements AccessContr + } + } catch (RepositoryException e) { + // should not get here +- log.warn("Failed to process ACL event: " + event, e); ++ log.warn("Failed to process ACL event: {}", event, e); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/combined/CombinedEditor.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/combined/CombinedEditor.java +index b6b9cfe..b9c7c95 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/combined/CombinedEditor.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/combined/CombinedEditor.java +@@ -113,7 +113,7 @@ class CombinedEditor implements AccessControlEditor { + // return as soon as the first editor successfully handled the + // specified template + editor.setPolicy(nodePath, template); +- log.debug("Set template " + template + " using " + editor); ++ log.debug("Set template {} using {}", template, editor); + return; + } catch (AccessControlException e) { + log.debug(e.getMessage()); +@@ -135,7 +135,7 @@ class CombinedEditor implements AccessControlEditor { + // return as soon as the first editor successfully handled the + // specified template + editor.removePolicy(nodePath, policy); +- log.debug("Removed template " + policy + " using " + editor); ++ log.debug("Removed template {} using {}", policy, editor); + return; + } catch (AccessControlException e) { + log.debug(e.getMessage()); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/combined/CombinedProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/combined/CombinedProvider.java +index e7615b0..0f260ba 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/combined/CombinedProvider.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/combined/CombinedProvider.java +@@ -215,7 +215,7 @@ public class CombinedProvider extends AbstractAccessControlProvider { + cPermissions.add((AbstractCompiledPermissions) cp); + } else { + // TODO: deal with other implementations +- log.warn("AbstractCompiledPermissions expected. Found " + cp.getClass().getName() + " -> ignore."); ++ log.warn("AbstractCompiledPermissions expected. Found {} -> ignore.", cp.getClass().getName()); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLEditor.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLEditor.java +index 8038513..042510d 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLEditor.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLEditor.java +@@ -90,7 +90,7 @@ public class ACLEditor extends ProtectedItemModifier implements AccessControlEdi + } + if (acl == null) { + // no policy for the given principal +- log.debug("No policy template for Principal " + principal.getName()); ++ log.debug("No policy template for Principal {}", principal.getName()); + } + return acl; + } +@@ -373,11 +373,11 @@ public class ACLEditor extends ProtectedItemModifier implements AccessControlEdi + * @throws RepositoryException if an error occurs + */ + String getPathToAcNode(Principal principal) throws RepositoryException { +- StringBuffer princPath = new StringBuffer(acRootPath); ++ StringBuilder princPath = new StringBuilder(acRootPath); + if (principal instanceof ItemBasedPrincipal) { + princPath.append(((ItemBasedPrincipal) principal).getPath()); + } else { +- princPath.append("/"); ++ princPath.append('/'); + princPath.append(Text.escapeIllegalJcrChars(principal.getName())); + } + return princPath.toString(); +@@ -451,7 +451,7 @@ public class ACLEditor extends ProtectedItemModifier implements AccessControlEdi + if (principal == null) { + // use fall back in order to be able to get/remove the policy + String principalName = getPathName(acNode.getPath()); +- log.warn("Principal with name " + principalName + " unknown to PrincipalManager."); ++ log.warn("Principal with name {} unknown to PrincipalManager.", principalName); + principal = new PrincipalImpl(principalName); + } + return new ACLTemplate(principal, acNode); +@@ -473,7 +473,7 @@ public class ACLEditor extends ProtectedItemModifier implements AccessControlEdi + NameParser.checkFormat(name); + } catch (NameException e) { + name = DEFAULT_ACE_NAME; +- log.debug("Invalid path name for Permission: " + name + "."); ++ log.debug("Invalid path name for Permission: {}.", name); + } + } + int i = 0; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLProvider.java +index cf3a9d3..040a11a 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLProvider.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLProvider.java +@@ -131,7 +131,7 @@ public class ACLProvider extends AbstractAccessControlProvider implements Access + + session.save(); + } catch (RepositoryException e) { +- log.error("Failed to set-up minimal access control for root node of workspace " + session.getWorkspace().getName()); ++ log.error("Failed to set-up minimal access control for root node of workspace {}", session.getWorkspace().getName()); + session.getRootNode().refresh(false); + } + } +@@ -149,10 +149,10 @@ public class ACLProvider extends AbstractAccessControlProvider implements Access + acl.addEntry(principal, privs, true, restrictions); + editor.setPolicy(acl.getPath(), acl); + } else { +- log.debug("... policy for principal '"+principal.getName()+"' already present."); ++ log.debug("... policy for principal '{}' already present.", principal.getName()); + } + } else { +- log.debug("... policy for principal '"+principal.getName()+"' already present."); ++ log.debug("... policy for principal '{}' already present.", principal.getName()); + } + } + +@@ -271,7 +271,7 @@ public class ACLProvider extends AbstractAccessControlProvider implements Access + } + } + +- log.debug("Unable to build access control editor " + ACLEditor.class.getName() + "."); ++ log.debug("Unable to build access control editor {}.", ACLEditor.class.getName()); + return null; + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLTemplate.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLTemplate.java +index b86b125..cda696b 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLTemplate.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/ACLTemplate.java +@@ -133,7 +133,7 @@ class ACLTemplate extends AbstractACLTemplate { + AccessControlEntry entry = new Entry(principal, privilegeMgr.getBits(privilegeNames), isAllow, restrictions); + entries.add(entry); + } else { +- log.warn("ACE must be of nodetype rep:ACE -> ignored child-node " + aceNode.getPath()); ++ log.warn("ACE must be of nodetype rep:ACE -> ignored child-node {}", aceNode.getPath()); + } + } + } // else: no-node at all or no acl-node present. +@@ -235,7 +235,7 @@ class ACLTemplate extends AbstractACLTemplate { + boolean isAllow, Map restrictions) + throws AccessControlException, RepositoryException { + if (restrictions == null || restrictions.isEmpty()) { +- log.debug("Restrictions missing. Using default: rep:nodePath = " + getPath() + "; rep:glob = null."); ++ log.debug("Restrictions missing. Using default: rep:nodePath = {}; rep:glob = null.", getPath()); + // default restrictions: + restrictions = Collections.singletonMap(jcrNodePathName, + valueFactory.createValue(getPath(), PropertyType.PATH)); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/EntriesCache.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/EntriesCache.java +index bac78a1..958f124 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/EntriesCache.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/principalbased/EntriesCache.java +@@ -192,7 +192,7 @@ class EntriesCache extends AccessControlObserver implements AccessControlConstan + implementation -> ignore + */ + } else { +- log.debug("Cannot process NODE_REMOVED event. Parent " + parentPath + " doesn't exist (anymore)."); ++ log.debug("Cannot process NODE_REMOVED event. Parent {} doesn't exist (anymore).", parentPath); + } + break; + case Event.PROPERTY_CHANGED: +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/DefaultPrincipalProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/DefaultPrincipalProvider.java +index 1e9fc06..e429254 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/DefaultPrincipalProvider.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/DefaultPrincipalProvider.java +@@ -129,7 +129,7 @@ public class DefaultPrincipalProvider extends AbstractPrincipalProvider implemen + return everyonePrincipal; + } + } catch (RepositoryException e) { +- log.error("Failed to access Authorizable for Principal " + principalName, e); ++ log.error("Failed to access Authorizable for Principal {}", principalName, e); + } + return null; + } +@@ -274,10 +274,10 @@ public class DefaultPrincipalProvider extends AbstractPrincipalProvider implemen + membership.add(gp); + } + } else { +- log.debug("Cannot find authorizable for principal " + princ.getName()); ++ log.debug("Cannot find authorizable for principal {}", princ.getName()); + } + } catch (RepositoryException e) { +- log.warn("Failed to determine membership for " + princ.getName(), e.getMessage()); ++ log.warn("Failed to determine membership for {}", princ.getName(), e); + } + return membership; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleSecurityManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleSecurityManager.java +index 581968c..ab0e350 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleSecurityManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/simple/SimpleSecurityManager.java +@@ -134,9 +134,9 @@ public class SimpleSecurityManager implements JackrabbitSecurityManager { + LoginModuleConfig loginModConf = config.getLoginModuleConfig(); + authCtxProvider = new AuthContextProvider(config.getAppName(), loginModConf); + if (authCtxProvider.isLocal()) { +- log.info("init: using Repository LoginModule configuration for " + config.getAppName()); ++ log.info("init: using Repository LoginModule configuration for {}", config.getAppName()); + } else if (authCtxProvider.isJAAS()) { +- log.info("init: using JAAS LoginModule configuration for " + config.getAppName()); ++ log.info("init: using JAAS LoginModule configuration for {}", config.getAppName()); + } else { + String msg = "No valid LoginModule configuriation for " + config.getAppName(); + log.error(msg); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/AuthorizableImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/AuthorizableImpl.java +index 9bbc087..4ae8b75 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/AuthorizableImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/AuthorizableImpl.java +@@ -188,7 +188,7 @@ abstract class AuthorizableImpl implements Authorizable, UserConstants { + node.save(); + } + } catch (RepositoryException e) { +- log.debug("Failed to set Property " + name + " for " + this, e); ++ log.debug("Failed to set Property {} for {}", new Object[] { name, this, e }); + node.refresh(false); + throw e; + } +@@ -225,7 +225,7 @@ abstract class AuthorizableImpl implements Authorizable, UserConstants { + node.save(); + } + } catch (RepositoryException e) { +- log.debug("Failed to set Property " + name + " for " + this, e); ++ log.debug("Failed to set Property {} for {}", new Object[] { name, this, e }); + node.refresh(false); + throw e; + } +@@ -251,7 +251,7 @@ abstract class AuthorizableImpl implements Authorizable, UserConstants { + // no such property or wasn't a property of this authorizable. + return false; + } catch (RepositoryException e) { +- log.debug("Failed to remove Property " + relPath + " from " + this, e); ++ log.debug("Failed to remove Property {} from {}", new Object[] { relPath, this, e }); + node.refresh(false); + throw e; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java +index 1de3f69..b3a5188 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java +@@ -655,7 +655,7 @@ class GroupImpl extends AuthorizableImpl implements Group { + try { + return ((GroupImpl) authorizable).getMembers(true, type); + } catch (RepositoryException e) { +- log.warn("Could not determine members of " + authorizable, e); ++ log.warn("Could not determine members of {}", authorizable, e); + } + } + return Iterators.empty(); +@@ -682,7 +682,7 @@ class GroupImpl extends AuthorizableImpl implements Group { + return seenAuthorizables.add(authorizable.getID()); + } + catch (RepositoryException e) { +- log.warn("Could not determine id of " + authorizable, e); ++ log.warn("Could not determine id of {}", authorizable, e); + return true; + } + } +@@ -790,7 +790,7 @@ class GroupImpl extends AuthorizableImpl implements Group { + log.debug("Authorizable node referenced by {} doesn't exist any more -> " + + "Ignored from member list.", safeGetID()); + } catch (RepositoryException e) { +- log.debug("Error pre-fetching member for " + safeGetID(), e); ++ log.debug("Error pre-fetching member for {}", safeGetID(), e); + } + + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ImpersonationImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ImpersonationImpl.java +index 6a4a6d2..973c079 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ImpersonationImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ImpersonationImpl.java +@@ -67,7 +67,7 @@ class ImpersonationImpl implements Impersonation, UserConstants { + for (String pName : impersonators) { + Principal p = pMgr.getPrincipal(pName); + if (p == null) { +- log.debug("Impersonator " + pName + " does not correspond to a known Principal."); ++ log.debug("Impersonator {} does not correspond to a known Principal.", pName); + p = new PrincipalImpl(pName); + } + s.add(p); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/MembershipCache.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/MembershipCache.java +index 45eebc9..b23a16d 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/MembershipCache.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/MembershipCache.java +@@ -554,7 +554,7 @@ public class MembershipCache implements UserConstants, SynchronousEventListener, + try { + refs = session.getNodeByIdentifier(authorizableNodeIdentifier).getWeakReferences(null); + } catch (RepositoryException e) { +- log.error("Failed to retrieve membership references of " + authorizableNodeIdentifier + ".", e); ++ log.error("Failed to retrieve membership references of {}.", authorizableNodeIdentifier, e); + } + return refs; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/PasswordUtility.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/PasswordUtility.java +index 32236b7..fb60cbc 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/PasswordUtility.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/PasswordUtility.java +@@ -153,7 +153,7 @@ public class PasswordUtility { + MessageDigest.getInstance(algorithm); + return algorithm; + } catch (NoSuchAlgorithmException e) { +- log.debug("Invalid algorithm detected " + algorithm); ++ log.debug("Invalid algorithm detected {}", algorithm); + } + } + } +@@ -229,7 +229,7 @@ public class PasswordUtility { + try { + return Integer.parseInt(str); + } catch (NumberFormatException e) { +- log.debug("Expected number of iterations. Found: " + str); ++ log.debug("Expected number of iterations. Found: {}", str); + } + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolver.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolver.java +index 75e9c5a..c87800c 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolver.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolver.java +@@ -73,7 +73,7 @@ class TraversingNodeResolver extends NodeResolver { + return collectNode(nodeName, ntName, root.getNodes()); + } catch (PathNotFoundException e) { + // should not get here +- log.warn("Error while retrieving node " + sr); ++ log.warn("Error while retrieving node {}", sr, e); + } + } // else: searchRoot does not exist yet -> omit the search + return null; +@@ -97,7 +97,7 @@ class TraversingNodeResolver extends NodeResolver { + } + } catch (PathNotFoundException e) { + // should not get here +- log.warn("Error while retrieving node " + sr); ++ log.warn("Error while retrieving node {}", sr, e); + } + } // else: searchRoot does not exist yet -> omit the search + return null; +@@ -118,7 +118,7 @@ class TraversingNodeResolver extends NodeResolver { + return new NodeIteratorAdapter(matchSet); + } catch (PathNotFoundException e) { + // should not get here +- log.warn("Error while retrieving node " + sr); ++ log.warn("Error while retrieving node {}", sr, e); + } + } // else: searchRoot does not exist yet -> omit the search + return NodeIteratorAdapter.EMPTY; +@@ -142,7 +142,7 @@ class TraversingNodeResolver extends NodeResolver { + return new NodeIteratorAdapter(matchingNodes.values()); + } catch (PathNotFoundException e) { + // should not get here +- log.warn("Error while retrieving node " + sr); ++ log.warn("Error while retrieving node {}", sr, e); + } + } // else: searchRoot does not exist yet -> omit the search + return NodeIteratorAdapter.EMPTY; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserAccessControlProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserAccessControlProvider.java +index d0646b4..7cc741d 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserAccessControlProvider.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserAccessControlProvider.java +@@ -334,7 +334,7 @@ public class UserAccessControlProvider extends AbstractAccessControlProvider + auth = uMgr.createGroup(prnc); + } else { + if (!auth.isGroup()) { +- log.warn("Cannot create group '" + principalName + "'; User with that principal already exists."); ++ log.warn("Cannot create group '{}'; User with that principal already exists.", principalName); + auth = null; + } + } +@@ -412,7 +412,7 @@ public class UserAccessControlProvider extends AbstractAccessControlProvider + if (userNode == null) { + // no Node corresponding to user for which the permissions are + // calculated -> no permissions/privileges. +- log.debug("No node at " + userNodePath); ++ log.debug("No node at {}", userNodePath); + return Result.EMPTY; + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserImporter.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserImporter.java +index e8b1087..c07f1c5 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserImporter.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserImporter.java +@@ -211,7 +211,7 @@ public class UserImporter implements ProtectedPropertyImporter, ProtectedNodeImp + {@link UserManager#createGroup} respectively. */ + Authorizable a = userManager.getAuthorizable(parent); + if (a == null) { +- log.warn("Cannot handle protected PropInfo " + protectedPropInfo + ". Node " + parent + " doesn't represent a valid Authorizable."); ++ log.warn("Cannot handle protected PropInfo {}. Node {} doesn't represent a valid Authorizable.", protectedPropInfo, parent); + return false; + } + +@@ -437,7 +437,7 @@ public class UserImporter implements ProtectedPropertyImporter, ProtectedNodeImp + + // handling non-existing members in case of best-effort + if (!nonExisting.isEmpty()) { +- log.info("ImportBehavior.BESTEFFORT: Found " + nonExisting.size() + " entries of rep:members pointing to non-existing authorizables. Adding to rep:members."); ++ log.info("ImportBehavior.BESTEFFORT: Found {} entries of rep:members pointing to non-existing authorizables. Adding to rep:members.", nonExisting.size()); + final NodeImpl groupNode = ((AuthorizableImpl) gr).getNode(); + + if (userManager.hasMemberSplitSize()) { +@@ -559,7 +559,7 @@ public class UserImporter implements ProtectedPropertyImporter, ProtectedNodeImp + } + Authorizable auth = userManager.getAuthorizable(groupNode); + if (auth == null) { +- log.debug("Cannot handle protected node " + protectedParent + ". It nor one of its parents represent a valid Authorizable."); ++ log.debug("Cannot handle protected node {}. It nor one of its parents represent a valid Authorizable.", protectedParent); + return false; + } else { + currentMembership = new Membership(auth.getID()); +@@ -744,7 +744,7 @@ public class UserImporter implements ProtectedPropertyImporter, ProtectedNodeImp + } else if (NAME_ABORT.equalsIgnoreCase(behaviorString)) { + return ABORT; + } else { +- log.error("Invalid behavior " + behaviorString + " -> Using default: ABORT."); ++ log.error("Invalid behavior {} -> Using default: ABORT.", behaviorString); + return ABORT; + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java +index 7562859..ac0ff62 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java +@@ -351,7 +351,8 @@ public class UserManagerImpl extends ProtectedItemModifier + try { + nr = new IndexNodeResolver(session, session); + } catch (RepositoryException e) { +- log.debug("UserManager: no QueryManager available for workspace '" + session.getWorkspace().getName() + "' -> Use traversing node resolver."); ++ log.debug("UserManager: no QueryManager available for workspace '{}' -> Use traversing node resolver.", ++ session.getWorkspace().getName()); + nr = new TraversingNodeResolver(session, session); + } + authResolver = nr; +@@ -398,7 +399,7 @@ public class UserManagerImpl extends ProtectedItemModifier + public int getMemberSplitSize() { + int splitSize = config.getConfigValue(PARAM_GROUP_MEMBERSHIP_SPLIT_SIZE, 0); + if (splitSize != 0 && splitSize < 4) { +- log.warn("Invalid value {} for {}. Expected integer >= 4", splitSize, PARAM_GROUP_MEMBERSHIP_SPLIT_SIZE); ++ log.warn("Invalid value {} for " + PARAM_GROUP_MEMBERSHIP_SPLIT_SIZE + ". Expected integer >= 4", splitSize); + splitSize = 0; + } + return splitSize; +@@ -601,7 +602,7 @@ public class UserManagerImpl extends ProtectedItemModifier + session.save(); + } + +- log.debug("User created: " + userID + "; " + userNode.getPath()); ++ log.debug("User created: {}; {}", userID, userNode.getPath()); + return user; + } catch (RepositoryException e) { + // something went wrong -> revert changes and re-throw +@@ -686,7 +687,7 @@ public class UserManagerImpl extends ProtectedItemModifier + session.save(); + } + +- log.debug("Group created: " + groupID + "; " + groupNode.getPath()); ++ log.debug("Group created: {}; {}", groupID, groupNode.getPath()); + return group; + } catch (RepositoryException e) { + session.refresh(false); +@@ -844,18 +845,18 @@ public class UserManagerImpl extends ProtectedItemModifier + authorz = createUser(n); + } else { + /* user node outside of configured tree -> return null */ +- log.error("User node '" + path + "' outside of configured user tree ('" + usersPath + "') -> Not a valid user."); ++ log.error("User node '{}' outside of configured user tree ('{}') -> Not a valid user.", path, usersPath); + } + } else if (n.isNodeType(NT_REP_GROUP)) { + if (Text.isDescendant(groupsPath, path)) { + authorz = createGroup(n); + } else { + /* group node outside of configured tree -> return null */ +- log.error("Group node '" + path + "' outside of configured group tree ('" + groupsPath + "') -> Not a valid group."); ++ log.error("Group node '{}' outside of configured group tree ('{}') -> Not a valid group.", path, groupsPath); + } + } else { + /* else some other node type -> return null. */ +- log.warn("Unexpected user/group node type " + n.getPrimaryNodeType().getName()); ++ log.warn("Unexpected user/group node type {}", n.getPrimaryNodeType().getName()); + } + } /* else no matching node -> return null */ + return authorz; +@@ -1027,21 +1028,21 @@ public class UserManagerImpl extends ProtectedItemModifier + if (!isAutoSave()) { + session.save(); + } +- log.info("... created admin user with id \'" + adminId + "\' and default pw."); ++ log.info("... created admin user with id '{}' and default pw.", adminId); + } catch (ItemExistsException e) { + NodeImpl conflictingNode = session.getNodeById(buildNodeId(adminId)); + String conflictPath = conflictingNode.getPath(); +- log.error("Detected conflicting node " + conflictPath + " of node type " + conflictingNode.getPrimaryNodeType().getName() + "."); ++ log.error("Detected conflicting node {} of node type {}.", conflictPath, conflictingNode.getPrimaryNodeType().getName()); + + // TODO move conflicting node of type rep:User instead of removing and recreating. + conflictingNode.remove(); +- log.info("Removed conflicting node at " + conflictPath); ++ log.info("Removed conflicting node at {}", conflictPath); + + admin = createUser(adminId, adminId); + if (!isAutoSave()) { + session.save(); + } +- log.info("Resolved conflict and (re)created admin user with id \'" + adminId + "\' and default pw."); ++ log.info("Resolved conflict and (re)created admin user with id '{}' and default pw.", adminId); + } + return admin; + } +@@ -1396,13 +1397,13 @@ public class UserManagerImpl extends ProtectedItemModifier + if (config != null) { + d = config.getConfigValue(PARAM_DEFAULT_DEPTH, DEFAULT_DEPTH); + if (d <= 0) { +- log.warn("Invalid defaultDepth '" + d + "' -> using default."); ++ log.warn("Invalid defaultDepth '{}' -> using default.", d); + d = DEFAULT_DEPTH; + } + expand = config.getConfigValue(PARAM_AUTO_EXPAND_TREE, false); + size = config.getConfigValue(PARAM_AUTO_EXPAND_SIZE, DEFAULT_SIZE); + if (expand && size <= 0) { +- log.warn("Invalid autoExpandSize '" + size + "' -> using default."); ++ log.warn("Invalid autoExpandSize '{}' -> using default.", size); + size = DEFAULT_SIZE; + } + } +@@ -1440,7 +1441,7 @@ public class UserManagerImpl extends ProtectedItemModifier + while (((NodeImpl) folder).hasNode(nodeName)) { + NodeImpl colliding = ((NodeImpl) folder).getNode(nodeName); + if (colliding.isNodeType(NT_REP_AUTHORIZABLE_FOLDER)) { +- log.warn("Existing folder node collides with user/group to be created. Expanding path: " + colliding.getPath()); ++ log.warn("Existing folder node collides with user/group to be created. Expanding path: {}", colliding.getPath()); + folder = colliding; + } else { + // should never get here as folder creation above already +@@ -1567,7 +1568,7 @@ public class UserManagerImpl extends ProtectedItemModifier + - note, that this behavior has been preferred over tmp. + removing and recreating the colliding authorizable node. + */ +- log.warn("Auto-expanding aborted. An existing authorizable node '" + n.getName() +"'conflicts with intermediate folder to be created."); ++ log.warn("Auto-expanding aborted. An existing authorizable node '{}' conflicts with intermediate folder to be created.", n.getName()); + break; + } else { + // should never get here: some other, unexpected node type +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java +index 6b72400..335b944 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java +@@ -77,7 +77,7 @@ public class XPathQueryEvaluator implements XPathQueryBuilder.ConditionVisitor { + Direction sortDir = builder.getSortDirection(); + if (bound != null) { + if (sortCol == null) { +- log.warn("Ignoring bound {} since no sort order is specified"); ++ log.warn("Ignoring bound {} since no sort order is specified", bound); + } else { + Condition boundCondition = builder.property(sortCol, getCollation(sortDir), bound); + condition = condition == null +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/action/AccessControlAction.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/action/AccessControlAction.java +index 6b9a0b4..0c845eb 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/action/AccessControlAction.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/action/AccessControlAction.java +@@ -167,7 +167,7 @@ public class AccessControlAction extends AbstractAuthorizableAction { + } + + if (acl == null) { +- log.warn("Cannot process AccessControlAction: no applicable ACL at " + path); ++ log.warn("Cannot process AccessControlAction: no applicable ACL at {}", path); + } else { + // setup acl according to configuration. + Principal principal = new UnknownPrincipal(authorizable.getPrincipal().getName()); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionSaveOperation.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionSaveOperation.java +index c7ebf1e..560e8cc 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionSaveOperation.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionSaveOperation.java +@@ -52,7 +52,7 @@ public class SessionSaveOperation implements SessionWriteOperation { + ItemImpl item = context.getItemManager().getItem(transientRoot); + path = item.getPath(); + } catch (Exception e) { +- LOG.warn("Could not get the path", e); ++ LOG.debug("Could not get the path", e); + path = "?"; + } + if (LOG_WITH_STACKTRACE) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java +index d296368..910de47 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/session/SessionState.java +@@ -173,14 +173,16 @@ public class SessionState { + if (!lock.tryLock()) { + if (isWriteOperation + && operation instanceof SessionWriteOperation) { +- Exception trace = new Exception( +- "Stack trace of concurrent access to " + session); +- log.warn("Attempt to perform " + operation +- + " while another thread is concurrently writing" +- + " to " + session + ". Blocking until the other" +- + " thread is finished using this session. Please" +- + " review your code to avoid concurrent use of" +- + " a session.", trace); ++ if (log.isWarnEnabled()) { ++ Exception trace = new Exception( ++ "Stack trace of concurrent access to " + session); ++ log.warn("Attempt to perform " + operation ++ + " while another thread is concurrently writing" ++ + " to " + session + ". Blocking until the other" ++ + " thread is finished using this session. Please" ++ + " review your code to avoid concurrent use of" ++ + " a session.", trace); ++ } + } else if (log.isDebugEnabled()) { + Exception trace = new Exception( + "Stack trace of concurrent access to " + session); +@@ -260,13 +262,15 @@ public class SessionState { + String session = context.getSessionImpl().toString(); + + if (!lock.tryLock()) { +- Exception trace = new Exception( +- "Stack trace of concurrent access to " + session); +- log.warn("Attempt to close " + session + " while another" +- + " thread is concurrently accessing this session." +- + " Blocking until the other thread is finished" +- + " using this session. Please review your code" +- + " to avoid concurrent use of a session.", trace); ++ if (log.isWarnEnabled()) { ++ Exception trace = new Exception( ++ "Stack trace of concurrent access to " + session); ++ log.warn("Attempt to close " + session + " while another" ++ + " thread is concurrently accessing this session." ++ + " Blocking until the other thread is finished" ++ + " using this session. Please review your code" ++ + " to avoid concurrent use of a session.", trace); ++ } + lock.lock(); + } + try { +@@ -277,15 +281,17 @@ public class SessionState { + + " was originally closed"); + return true; + } else { +- Exception trace = new Exception( +- "Stack trace of the duplicate attempt to close " +- + session); +- log.warn("Attempt to close " + session + " after it has" +- + " already been closed. Please review your code" +- + " for proper session management.", trace); +- log.warn(session + " has already been closed. See the" +- + " attached exception for a trace of where this" +- + " session was closed.", closed); ++ if (log.isWarnEnabled()) { ++ Exception trace = new Exception( ++ "Stack trace of the duplicate attempt to close " ++ + session); ++ log.warn("Attempt to close " + session + " after it has" ++ + " already been closed. Please review your code" ++ + " for proper session management.", trace); ++ log.warn(session + " has already been closed. See the" ++ + " attached exception for a trace of where this" ++ + " session was closed.", closed); ++ } + return false; + } + } finally { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemState.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemState.java +index e926daf..25e756b 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemState.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemState.java +@@ -122,7 +122,7 @@ public abstract class ItemState { + + case STATUS_UNDEFINED: + // see http://issues.apache.org/jira/browse/JCR-897 +- log.debug("creating ItemState instance with initialStatus=" + STATUS_UNDEFINED + ", id=" + overlayedState.getId()); ++ log.debug("creating ItemState instance with initialStatus=" + STATUS_UNDEFINED + ", id={}", overlayedState.getId()); + status = initialStatus; + break; + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java +index af85c4a..4acef11 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java +@@ -176,7 +176,7 @@ public class ItemStateReferenceCache implements ItemStateCache { + ItemState s = segment.put(id, state); + // overwriting the same instance is OK + if (s != null && s != state) { +- log.warn("overwriting cached entry " + id); ++ log.warn("overwriting cached entry {}", id); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java +index 30ac2c6..642e594 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/XAItemStateManager.java +@@ -60,7 +60,8 @@ public class XAItemStateManager extends LocalItemStateManager implements Interna + * manager is in one of the {@link #prepare}, {@link #commit}, {@link + * #rollback} methods. + */ +- private final Map commitLogs = Collections.synchronizedMap(new IdentityHashMap()); ++ private final Map commitLogs = ++ Collections.synchronizedMap(new IdentityHashMap()); + + /** + * Current instance-local change log. +@@ -213,7 +214,7 @@ public class XAItemStateManager extends LocalItemStateManager implements Interna + * change log was found. + */ + public ChangeLog getChangeLog() { +- ChangeLog changeLog = (ChangeLog) commitLogs.get(Thread.currentThread()); ++ ChangeLog changeLog = commitLogs.get(Thread.currentThread()); + if (changeLog == null) { + changeLog = txLog; + } +@@ -578,7 +579,7 @@ public class XAItemStateManager extends LocalItemStateManager implements Interna + * in a subsequent transaction (see JCR-1554). + */ + public void stateModified(ItemState modified) { +- ChangeLog changeLog = (ChangeLog) commitLogs.get(Thread.currentThread()); ++ ChangeLog changeLog = commitLogs.get(Thread.currentThread()); + if (changeLog != null) { + ItemState local; + if (modified.getContainer() != this) { +@@ -589,7 +590,7 @@ public class XAItemStateManager extends LocalItemStateManager implements Interna + local.pull(); + } + } catch (NoSuchItemStateException e) { +- log.warn("Modified state marked for deletion: " + modified.getId()); ++ log.warn("Modified state marked for deletion: {}", modified.getId()); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/StatManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/StatManager.java +index d71c017..abd9025 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/StatManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/StatManager.java +@@ -47,9 +47,7 @@ public class StatManager { + boolean allEnabled = getBoolean(ALL_STATS_ENABLED_PROPERTY); + queryStat.setEnabled(allEnabled + || getBoolean(QUERY_STATS_ENABLED_PROPERTY)); +- log.debug( +- "Started StatManager. QueryStat is enabled {}", +- new Object[] { queryStat.isEnabled() }); ++ log.debug("Started StatManager. QueryStat is enabled {}", queryStat.isEnabled()); + } + + public QueryStatCore getQueryStat() { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/CooperativeFileLock.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/CooperativeFileLock.java +index a8fa45d..bdbcbe7 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/CooperativeFileLock.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/CooperativeFileLock.java +@@ -99,7 +99,7 @@ public class CooperativeFileLock implements RepositoryLockMechanism { + } + } + } catch (Exception e) { +- LOG.warn("Error unlocking " + fileName, e); ++ LOG.warn("Error unlocking {}", fileName, e); + } finally { + locked = false; + } +@@ -108,7 +108,7 @@ public class CooperativeFileLock implements RepositoryLockMechanism { + watchdog.interrupt(); + } + } catch (Exception e) { +- LOG.debug("Error stopping watchdog " + fileName, e); ++ LOG.debug("Error stopping watchdog {}", fileName, e); + } + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/RepositoryLock.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/RepositoryLock.java +index d9268a7..4b5295d 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/RepositoryLock.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/RepositoryLock.java +@@ -131,8 +131,8 @@ public class RepositoryLock implements RepositoryLockMechanism { + */ + public void acquire() throws RepositoryException { + if (file.exists()) { +- LOG.warn("Existing lock file " + file + " detected." +- + " Repository was not shut down properly."); ++ LOG.warn("Existing lock file {} detected." ++ + " Repository was not shut down properly.", file); + } + try { + tryLock(); +@@ -187,7 +187,7 @@ public class RepositoryLock implements RepositoryLockMechanism { + try { + System.setProperty(identifier, identifier); + } catch (SecurityException e) { +- LOG.warn("Unable to set system property: " + identifier, e); ++ LOG.warn("Unable to set system property: {}", identifier, e); + } + } + } +@@ -201,7 +201,7 @@ public class RepositoryLock implements RepositoryLockMechanism { + try { + randomAccessFile.close(); + } catch (IOException e) { +- LOG.warn("Unable to close the random access file " + file, e); ++ LOG.warn("Unable to close the random access file {}", file, e); + } + randomAccessFile = null; + } +@@ -232,7 +232,7 @@ public class RepositoryLock implements RepositoryLockMechanism { + try { + System.getProperties().remove(identifier); + } catch (SecurityException e) { +- LOG.error("Unable to clear system property: " + identifier, e); ++ LOG.error("Unable to clear system property: {}", identifier, e); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInDataStore.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInDataStore.java +index e6730ce..98c4583 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInDataStore.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInDataStore.java +@@ -95,7 +95,7 @@ class BLOBInDataStore extends BLOBFileValue implements ReferenceBinary { + try { + return getDataRecord().getLength(); + } catch (DataStoreException e) { +- log.warn("getSize for " + identifier + " failed", e); ++ log.warn("getSize for {} failed", identifier, e); + return -1; + } + } +@@ -109,7 +109,7 @@ class BLOBInDataStore extends BLOBFileValue implements ReferenceBinary { + try { + return getDataRecord().getReference(); + } catch (DataStoreException e) { +- log.warn("Unable to access the reference to " + identifier, e); ++ log.warn("Unable to access the reference to {}", identifier, e); + return null; + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInResource.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInResource.java +index bdd167c..0d05994 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInResource.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/BLOBInResource.java +@@ -86,8 +86,7 @@ class BLOBInResource extends BLOBFileValue { + try { + fsResource.delete(pruneEmptyParentDirs); + } catch (FileSystemException fse) { +- // ignore +- LOG.warn("Error while deleting BLOBFileValue: " + fse.getMessage()); ++ LOG.warn("Error while deleting BLOBFileValue: {}", fse.getMessage()); + } + + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java +index 5f356b2..da2dd29 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java +@@ -143,7 +143,7 @@ class InternalVersionHistoryImpl extends InternalVersionItemImpl + if (node.getState().hasChildNodeEntry(id)) { + labelCache.put(labelName, node.getState().getChildNodeEntry(id).getName()); + } else { +- log.warn("Error while resolving label reference. Version missing: " + id); ++ log.warn("Error while resolving label reference. Version missing: {}", id); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java +index 2f27af9..8678211 100755 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java +@@ -97,7 +97,7 @@ abstract class InternalVersionManagerBase implements InternalVersionManager { + // lock handling via getItem() + InternalVersion v = (InternalVersion) getItem(id); + if (v == null) { +- log.warn("Versioning item not found: " + id); ++ log.warn("Versioning item not found: {}", id); + } + return v; + } +@@ -109,9 +109,9 @@ abstract class InternalVersionManagerBase implements InternalVersionManager { + // lock handling via getItem() + InternalVersionItem item = getItem(id); + if (item == null) { +- log.warn("Versioning item not found: " + id); ++ log.warn("Versioning item not found: {}", id); + } else if (!(item instanceof InternalBaseline)) { +- log.warn("Versioning item is not a baseline: " + id); ++ log.warn("Versioning item is not a baseline: {}", id); + item = null; + } + return (InternalBaseline) item; +@@ -124,7 +124,7 @@ abstract class InternalVersionManagerBase implements InternalVersionManager { + // lock handling via getItem() + InternalActivity v = (InternalActivity) getItem(id); + if (v == null) { +- log.warn("Versioning item not found: " + id); ++ log.warn("Versioning item not found: {}", id); + } + return v; + } +@@ -453,9 +453,7 @@ abstract class InternalVersionManagerBase implements InternalVersionManager { + // end update + operation.save(); + +- log.debug( +- "Created new version history " + history.getNodeId() +- + " for " + node + "."); ++ log.debug("Created new version history {} for {}.", history.getNodeId(), node); + return history; + } catch (ItemStateException e) { + throw new RepositoryException(e); +@@ -486,8 +484,7 @@ abstract class InternalVersionManagerBase implements InternalVersionManager { + // end update + operation.save(); + +- log.debug("Created new activity " + activityId +- + " with title " + title + "."); ++ log.debug("Created new activity {} with title {}.", activityId, title); + return pNode; + } catch (ItemStateException e) { + throw new RepositoryException(e); +@@ -535,7 +532,7 @@ abstract class InternalVersionManagerBase implements InternalVersionManager { + } + operation.save(); + } catch (ItemStateException e) { +- log.error("Error while storing: " + e.toString()); ++ log.error("Error while storing: {}", (Object) e); + } finally { + operation.close(); + } +@@ -780,7 +777,7 @@ abstract class InternalVersionManagerBase implements InternalVersionManager { + history.removeVersion(name); + operation.save(); + } catch (ItemStateException e) { +- log.error("Error while storing: " + e.toString()); ++ log.error("Error while storing: {}", (Object) e); + } finally { + operation.close(); + } +@@ -803,7 +800,7 @@ abstract class InternalVersionManagerBase implements InternalVersionManager { + parent.store(); + operation.save(); + } catch (ItemStateException e) { +- log.error("Error while storing: " + e.toString()); ++ log.error("Error while storing: {}", (Object) e); + } finally { + operation.close(); + } +@@ -830,7 +827,7 @@ abstract class InternalVersionManagerBase implements InternalVersionManager { + operation.save(); + return v; + } catch (ItemStateException e) { +- log.error("Error while storing: " + e.toString()); ++ log.error("Error while storing: {}", (Object) e); + return null; + } finally { + operation.close(); +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerImpl.java +index b137448..6ade13f 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerImpl.java +@@ -497,7 +497,7 @@ public class InternalVersionManagerImpl extends InternalVersionManagerBase + vh.reload(); + versionItems.put(vh.getId(), vh); + } catch (RepositoryException e) { +- log.warn("Unable to update version history: " + e.toString()); ++ log.warn("Unable to update version history: {}", (Object) e); + } + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java +index 770cac2..1da4e86 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionHistoryImpl.java +@@ -293,7 +293,7 @@ public class VersionHistoryImpl extends NodeImpl implements VersionHistory { + InternalVersionHistory other = ((VersionHistoryImpl) otherItem).getInternalVersionHistory(); + return other.getId().equals(getInternalVersionHistory().getId()); + } catch (RepositoryException e) { +- log.warn("Unable to retrieve internal version history objects: " + e.getMessage()); ++ log.warn("Unable to retrieve internal version history objects: {}", e.getMessage()); + log.debug("Stack dump:", e); + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionImpl.java +index e0b4aa4..58cc62a 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionImpl.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionImpl.java +@@ -165,7 +165,7 @@ public class VersionImpl extends NodeImpl implements Version { + InternalVersion other = ((VersionImpl) otherItem).getInternalVersion(); + return other.getId().equals(getInternalVersion().getId()); + } catch (RepositoryException e) { +- log.warn("Unable to retrieve internal version objects: " + e.getMessage()); ++ log.warn("Unable to retrieve internal version objects: {}", e.getMessage()); + log.debug("Stack dump:", e); + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionItemStateManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionItemStateManager.java +index 8c63863..9e09562 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionItemStateManager.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionItemStateManager.java +@@ -114,7 +114,7 @@ public class VersionItemStateManager extends SharedItemStateManager { + } + return true; + } catch (ItemStateException e) { +- log.error("Error while setting references: " + e.toString()); ++ log.error("Error while setting references: {}", (Object) e); + return false; + } + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplBase.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplBase.java +index ee35207..cf6c513 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplBase.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplBase.java +@@ -145,15 +145,13 @@ abstract public class VersionManagerImplBase { + if (isCheckedOut(state)) { + if (checkout && !checkin) { + // pure checkout +- String msg = safeGetJCRPath(state) + ": Node is already checked-out. ignoring."; +- log.debug(msg); ++ log.debug("{}: Node is already checked-out. ignoring.", safeGetJCRPath(state)); + return null; + } + } else { + if (!checkout) { + // pure checkin +- String msg = safeGetJCRPath(state) + ": Node is already checked-in. ignoring."; +- log.debug(msg); ++ log.debug("{}: Node is already checked-in. ignoring.", safeGetJCRPath(state)); + if (isFull) { + return getBaseVersionId(state); + } else { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplRestore.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplRestore.java +index 1082f0d..84b9e97 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplRestore.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplRestore.java +@@ -457,9 +457,9 @@ abstract public class VersionManagerImplRestore extends VersionManagerImplBase { + || opv == OnParentVersionAction.ABORT) { + toDelete.addFirst(entry); + } else if (opv == OnParentVersionAction.INITIALIZE) { +- log.warn("OPV.INITIALIZE not supported yet on restore of existing child nodes: " + safeGetJCRPath(child)); ++ log.warn("OPV.INITIALIZE not supported yet on restore of existing child nodes: {}", safeGetJCRPath(child)); + } else if (opv == OnParentVersionAction.COMPUTE) { +- log.warn("OPV.COMPUTE not supported yet on restore of existing child nodes: " + safeGetJCRPath(child)); ++ log.warn("OPV.COMPUTE not supported yet on restore of existing child nodes: {}", safeGetJCRPath(child)); + } + } + } +@@ -613,16 +613,16 @@ abstract public class VersionManagerImplRestore extends VersionManagerImplBase { + try { + internalRestore(restoredChild, v, vsel, removeExisting); + } catch (RepositoryException e) { +- log.error("Error while restoring node: " + e); +- log.error(" child path: " + restoredChild); +- log.error(" selected version: " + v.getName()); ++ log.error("Error while restoring node: {}", (Object) e); ++ log.error(" child path: {}", restoredChild); ++ log.error(" selected version: {}", v.getName()); + StringBuilder avail = new StringBuilder(); + for (Name name: vh.getVersionNames()) { + avail.append(name); + avail.append(", "); + } +- log.error(" available versions: " + avail); +- log.error(" versionselector: " + vsel); ++ log.error(" available versions: {}", avail); ++ log.error(" versionselector: {}", vsel); + throw e; + } + // add this version to set +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java +index 661ea2c..d7ba551 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/AbstractVISProvider.java +@@ -223,14 +223,14 @@ public abstract class AbstractVISProvider implements VirtualItemStateProvider, I + try { + getItemState(new PropertyId(state.getNodeId(), name)).discard(); + } catch (ItemStateException e) { +- log.warn("Unable to discard virtual property " + name, e); ++ log.warn("Unable to discard virtual property {}", name, e); + } + } + for (ChildNodeEntry entry : state.getChildNodeEntries()) { + try { + discardTree((NodeState) getItemState(entry.getId())); + } catch (ItemStateException e) { +- log.warn("Unable to discard virtual node " + entry.getId(), e); ++ log.warn("Unable to discard virtual node {}", entry.getId(), e); + } + } + state.discard(); +@@ -365,7 +365,7 @@ public abstract class AbstractVISProvider implements VirtualItemStateProvider, I + protected NodeState cache(NodeState state) { + if (state != null) { + nodes.put(state.getNodeId(), state); +- log.debug("item added to cache. size=" + nodes.size()); ++ log.debug("item added to cache. size={}", nodes.size()); + } + return state; + } +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/DocViewImportHandler.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/DocViewImportHandler.java +index ed29a75..2be55f5 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/DocViewImportHandler.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/DocViewImportHandler.java +@@ -202,9 +202,7 @@ class DocViewImportHandler extends TargetImportHandler { + } catch (IllegalNameException ine) { + // decoded name would be illegal according to jsr 170, + // use encoded name as a fallback +- log.warn("encountered illegal encoded name '" +- + name.getLocalName() + "': " +- + ine.getMessage()); ++ log.warn("encountered illegal encoded name '{}': {}", name.getLocalName(), ine.getMessage()); + } + } + return name; +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/ImportHandler.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/ImportHandler.java +index bde4ced..4475472 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/ImportHandler.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/ImportHandler.java +@@ -85,9 +85,8 @@ public class ImportHandler extends DefaultHandler { + @Override + public void warning(SAXParseException e) throws SAXException { + // log exception and carry on... +- log.warn("warning encountered at line: " + e.getLineNumber() +- + ", column: " + e.getColumnNumber() +- + " while parsing XML stream", e); ++ log.warn("warning encountered at line: {}, column: {} while parsing XML stream", ++ new Object[] { e.getLineNumber(), e.getColumnNumber(), e }); + } + + /** +@@ -96,9 +95,8 @@ public class ImportHandler extends DefaultHandler { + @Override + public void error(SAXParseException e) throws SAXException { + // log exception and carry on... +- log.error("error encountered at line: " + e.getLineNumber() +- + ", column: " + e.getColumnNumber() +- + " while parsing XML stream: " + e.toString()); ++ log.error("error encountered at line: {}, column: {} while parsing XML stream: {}", ++ new Object[] { e.getLineNumber(), e.getColumnNumber(), e }); + } + + /** +@@ -107,9 +105,8 @@ public class ImportHandler extends DefaultHandler { + @Override + public void fatalError(SAXParseException e) throws SAXException { + // log and re-throw exception +- log.error("fatal error encountered at line: " + e.getLineNumber() +- + ", column: " + e.getColumnNumber() +- + " while parsing XML stream: " + e.toString()); ++ log.error("fatal error encountered at line: {}, column: {} while parsing XML stream: {}", ++ new Object[] { e.getLineNumber(), e.getColumnNumber(), e }); + throw e; + } + +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java +index 62739fc..e0e6d30 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/SessionImporter.java +@@ -303,7 +303,7 @@ public class SessionImporter implements Importer { + Name[] mixins = nodeInfo.getMixinNames(); + + if (parent == null) { +- log.debug("Skipping node: " + nodeName); ++ log.debug("Skipping node: {}", nodeName); + // parent node was skipped, skip this child node too + parents.push(null); // push null onto stack for skipped node + // notify the p-i-importer +@@ -316,7 +316,7 @@ public class SessionImporter implements Importer { + if (parent.getDefinition().isProtected()) { + // skip protected node + parents.push(null); +- log.debug("Skipping protected node: " + nodeName); ++ log.debug("Skipping protected node: {}", nodeName); + + if (pnImporter != null) { + // pnImporter was already started (current nodeInfo is a sibling) +@@ -364,7 +364,7 @@ public class SessionImporter implements Importer { + is the a leaf in the tree to be imported 'end' will + not have an effect on the importer, that was never started. + */ +- log.debug("Skipping protected node: " + existing); ++ log.debug("Skipping protected node: {}", existing); + parents.push(existing); + return; + } +@@ -409,7 +409,7 @@ public class SessionImporter implements Importer { + if (node == null) { + // no new node has been created, so skip this node + parents.push(null); // push null onto stack for skipped node +- log.debug("Skipping existing node " + nodeInfo.getName()); ++ log.debug("Skipping existing node {}", nodeInfo.getName()); + return; + } + } else { +@@ -427,7 +427,7 @@ public class SessionImporter implements Importer { + QPropertyDefinition def = pi.getApplicablePropertyDef(node.getEffectiveNodeType()); + if (def.isProtected()) { + // skip protected property +- log.debug("Skipping protected property " + pi.getName()); ++ log.debug("Skipping protected property {}", pi.getName()); + + // notify the ProtectedPropertyImporter. + for (ProtectedItemImporter ppi : pItemImporters) { +diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/WorkspaceImporter.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/WorkspaceImporter.java +index e024574..f58d18f 100644 +--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/WorkspaceImporter.java ++++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/xml/WorkspaceImporter.java +@@ -400,8 +400,7 @@ public class WorkspaceImporter implements Importer { + def = itemOps.findApplicablePropertyDefinition(prop.getName(), prop.getType(), prop.isMultiValued(), node); + if (def.isProtected()) { + // skip protected property +- log.debug("skipping protected property " +- + itemOps.safeGetJCRPath(idExisting)); ++ log.debug("skipping protected property {}", itemOps.safeGetJCRPath(idExisting)); + return; + } + if (!def.isAutoCreated() +@@ -415,7 +414,7 @@ public class WorkspaceImporter implements Importer { + def = pInfo.getApplicablePropertyDef(itemOps.getEffectiveNodeType(node)); + if (def.isProtected()) { + // skip protected property +- log.debug("skipping protected property " + name); ++ log.debug("skipping protected property {}", name); + return; + } + +@@ -523,7 +522,7 @@ public class WorkspaceImporter implements Importer { + // parent node was skipped, skip this child node too + parents.push(null); // push null onto stack for skipped node + succeeded = true; +- log.debug("skipping node " + nodeName); ++ log.debug("skipping node {}", nodeName); + return; + } + if (parent.hasChildNodeEntry(nodeName)) { +@@ -544,8 +543,7 @@ public class WorkspaceImporter implements Importer { + // skip protected node + parents.push(null); // push null onto stack for skipped node + succeeded = true; +- log.debug("skipping protected node " +- + itemOps.safeGetJCRPath(existing.getNodeId())); ++ log.debug("skipping protected node {}", itemOps.safeGetJCRPath(existing.getNodeId())); + return; + } + if (def.isAutoCreated() && entExisting.includesNodeType(ntName)) { +@@ -575,7 +573,7 @@ public class WorkspaceImporter implements Importer { + // skip protected node + parents.push(null); // push null onto stack for skipped node + succeeded = true; +- log.debug("skipping protected node " + nodeName); ++ log.debug("skipping protected node {}", nodeName); + return; + } + +@@ -597,7 +595,7 @@ public class WorkspaceImporter implements Importer { + // no new node has been created, so skip this node + parents.push(null); // push null onto stack for skipped node + succeeded = true; +- log.debug("skipping existing node: " + nodeName); ++ log.debug("skipping existing node: {}", nodeName); + return; + } + } catch (ItemNotFoundException e) { +@@ -608,7 +606,7 @@ public class WorkspaceImporter implements Importer { + // skip protected node + parents.push(null); // push null onto stack for skipped node + succeeded = true; +- log.debug("skipping protected node " + nodeName); ++ log.debug("skipping protected node {}", nodeName); + return; + } + +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerCreateGroupTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerCreateGroupTest.java +index 15a093a..9b4ec1b 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerCreateGroupTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerCreateGroupTest.java +@@ -42,7 +42,7 @@ public class UserManagerCreateGroupTest extends AbstractUserTest { + createdGroup.remove(); + superuser.save(); + } catch (RepositoryException e) { +- log.error("Failed to remove Group " + createdGroup.getID() + " during tearDown."); ++ log.error("Failed to remove Group {} during tearDown.", createdGroup.getID()); + } + } + +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerCreateUserTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerCreateUserTest.java +index 684d41a..9eeeda6 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerCreateUserTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerCreateUserTest.java +@@ -43,7 +43,7 @@ public class UserManagerCreateUserTest extends AbstractUserTest { + auth.remove(); + superuser.save(); + } catch (RepositoryException e) { +- log.warn("Failed to remove User " + auth.getID() + " during tearDown."); ++ log.warn("Failed to remove User {} during tearDown.", auth.getID()); + } + } + super.tearDown(); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java +index d3706f5..63776cf 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java +@@ -153,14 +153,14 @@ public abstract class AbstractConcurrencyTest extends AbstractJCRTest { + */ + protected static void dumpStacks(Thread[] threads) { + try { +- Method m = Thread.class.getMethod("getStackTrace", null); +- StringBuffer dumps = new StringBuffer(); ++ Method m = Thread.class.getMethod("getStackTrace", (Class[]) null); ++ StringBuilder dumps = new StringBuilder(); + for (int t = 0; t < threads.length; t++) { + StackTraceElement[] elements = (StackTraceElement[]) m.invoke( +- threads[t], null); ++ threads[t], (Object[]) null); + dumps.append(threads[t].toString()).append('\n'); + for (int i = 0; i < elements.length; i++) { +- dumps.append("\tat " + elements[i]).append('\n'); ++ dumps.append("\tat ").append(elements[i]).append('\n'); + } + dumps.append('\n'); + } +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/CachingHierarchyManagerTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/CachingHierarchyManagerTest.java +index 7406c94..8c7254d 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/CachingHierarchyManagerTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/CachingHierarchyManagerTest.java +@@ -577,7 +577,7 @@ public class CachingHierarchyManagerTest extends TestCase { + * @return path + */ + private static Path toPath(String s) { +- StringBuffer buf = new StringBuffer("{}"); ++ StringBuilder buf = new StringBuilder("{}"); + int start = 1, length = s.length(); + while (start < length) { + int end = s.indexOf('/', start); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/ConcurrentSaveTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/ConcurrentSaveTest.java +index 4f57ef5..5eec660 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/ConcurrentSaveTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/ConcurrentSaveTest.java +@@ -76,9 +76,9 @@ public class ConcurrentSaveTest extends AbstractJCRTest { + for (int i = 0; i < NUM_NODES; i++) { + Node n = testNode.addNode("node" + i); + n.setProperty("foo", "some text"); +- log.info("creating node: node" + i); ++ log.info("creating node: node{}", i); + testNode.save(); +- log.info("created node: node" + i); ++ log.info("created node: node{}", i); + // give other thread a chance to catch up + yield(); + } +@@ -100,9 +100,9 @@ public class ConcurrentSaveTest extends AbstractJCRTest { + Node n = rootNode.getNode("node" + i); + // remove property + n.setProperty("foo", (Value) null); +- log.info("removing property from node: node" + i); ++ log.info("removing property from node: node{}", i); + n.save(); +- log.info("property removed from node: node" + i); ++ log.info("property removed from node: node{}", i); + } + } catch (Exception e) { + exceptions.add(e); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/ConcurrentGcTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/ConcurrentGcTest.java +index 1d947c1..725f420 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/ConcurrentGcTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/ConcurrentGcTest.java +@@ -127,18 +127,18 @@ public class ConcurrentGcTest extends TestCase { + } + + for (int i = 0; i < len && gcException == null; i++) { +- LOG.info("test " + i); ++ LOG.info("test {}", i); + byte[] data = new byte[3]; + r.nextBytes(data); + DataRecord rec = store.addRecord(new ByteArrayInputStream(data)); +- LOG.debug(" added " + rec.getIdentifier()); ++ LOG.debug(" added {}", rec.getIdentifier()); + if (r.nextBoolean()) { +- LOG.debug(" added " + rec.getIdentifier() + " -> keep reference"); ++ LOG.debug(" added {} -> keep reference", rec.getIdentifier()); + ids.add(rec.getIdentifier()); + store.getRecord(rec.getIdentifier()); + } + if (r.nextInt(100) == 0) { +- LOG.debug("clear i: " + i); ++ LOG.debug("clear i: {}", i); + ids.clear(); + } + } +@@ -157,14 +157,14 @@ public class ConcurrentGcTest extends TestCase { + if (ids.size() > 0) { + // store.clearInUse(); + long now = System.currentTimeMillis(); +- LOG.debug("gc now: " + now); ++ LOG.debug("gc now: {}", now); + store.updateModifiedDateOnAccess(now); + for (DataIdentifier id : new ArrayList(ids)) { +- LOG.debug(" gc touch " + id); ++ LOG.debug(" gc touch {}", id); + store.getRecord(id); + } + int count = store.deleteAllOlderThan(now); +- LOG.debug("gc now: " + now + " done, deleted: " + count); ++ LOG.debug("gc now: {} done, deleted: {}", now, count); + } + } + } catch (DataStoreException e) { +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCConcurrentTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCConcurrentTest.java +index c077566..6563d4c 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCConcurrentTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCConcurrentTest.java +@@ -82,7 +82,7 @@ public class GCConcurrentTest extends AbstractJCRTest { + ValueFactory vf = session.getValueFactory(); + n.setProperty("data", vf.createBinary(randomInputStream(i))); + session.save(); +- LOG.debug("saved: " + i); ++ LOG.debug("saved: {}", i); + } + Thread.sleep(10); + for (int i = 0; i < len; i++) { +@@ -92,7 +92,7 @@ public class GCConcurrentTest extends AbstractJCRTest { + InputStream expected = randomInputStream(i); + checkStreams(expected, in); + n.remove(); +- LOG.debug("removed: " + i); ++ LOG.debug("removed: {}", i); + session.save(); + } + Thread.sleep(10); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCEventListenerTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCEventListenerTest.java +index 016a51a..8a68328 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCEventListenerTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCEventListenerTest.java +@@ -95,7 +95,7 @@ public class GCEventListenerTest extends AbstractJCRTest implements MarkEventLis + assertTrue("Not a PM scan - without a real node", gotNode); + } + int deleted = gc.sweep(); +- LOG.debug("Deleted " + deleted); ++ LOG.debug("Deleted {}", deleted); + assertTrue("Should delete at least one item", deleted >= 0); + gc.close(); + } +@@ -114,7 +114,7 @@ public class GCEventListenerTest extends AbstractJCRTest implements MarkEventLis + public void beforeScanning(Node n) throws RepositoryException { + String s = getNodeName(n); + if (s != null) { +- LOG.debug("scanning " + s); ++ LOG.debug("scanning {}", s); + } + } + +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCThread.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCThread.java +index 0b4a047..ff7d24a 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCThread.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GCThread.java +@@ -55,11 +55,11 @@ public class GCThread implements Runnable, MarkEventListener { + LOG.debug("Scanning..."); + gc.mark(); + int count = listIdentifiers(gc); +- LOG.debug("Stop; currently " + count + " identifiers"); ++ LOG.debug("Stop; currently {} identifiers", count); + gc.stopScan(); + int numDeleted = gc.sweep(); + if (numDeleted > 0) { +- LOG.debug("Deleted " + numDeleted + " identifiers"); ++ LOG.debug("Deleted {} identifiers", numDeleted); + } + LOG.debug("Waiting..."); + Thread.sleep(10); +@@ -85,7 +85,7 @@ public class GCThread implements Runnable, MarkEventListener { + int count = 0; + while (it.hasNext()) { + DataIdentifier id = it.next(); +- LOG.debug(" " + id); ++ LOG.debug(" {}", id); + count++; + } + return count; +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java +index 8e6a26e..b2de2ff 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java +@@ -70,7 +70,7 @@ public class GarbageCollectorTest extends AbstractJCRTest implements ScanEventLi + gc.mark(); + fail("Exception 'session has been closed' expected"); + } catch (RepositoryException e) { +- LOG.debug("Expected exception caught: " + e.getMessage()); ++ LOG.debug("Expected exception caught: {}", e.getMessage()); + } + if (ex[0] != null) { + throw ex[0]; +@@ -166,7 +166,7 @@ public class GarbageCollectorTest extends AbstractJCRTest implements ScanEventLi + LOG.debug("scanning..."); + gc.mark(); + int count = listIdentifiers(gc); +- LOG.debug("stop scanning; currently " + count + " identifiers"); ++ LOG.debug("stop scanning; currently {} identifiers", count); + LOG.debug("deleting..."); + gc.getDataStore().clearInUse(); + assertTrue(gc.sweep() > 0); +@@ -243,7 +243,7 @@ public class GarbageCollectorTest extends AbstractJCRTest implements ScanEventLi + Iterator it = gc.getDataStore().getAllIdentifiers(); + while (it.hasNext()) { + DataIdentifier id = it.next(); +- LOG.debug(" " + id); ++ LOG.debug(" {}", id); + count++; + } + return count; +@@ -292,7 +292,7 @@ public class GarbageCollectorTest extends AbstractJCRTest implements ScanEventLi + public void afterScanning(Node n) throws RepositoryException { + if (n != null && n.getPath().startsWith("/testroot/node")) { + String path = n.getPath(); +- LOG.debug("scanned: " + path); ++ LOG.debug("scanned: {}", path); + } + } + +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/AxisQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/AxisQueryTest.java +index 6531439..e57180d 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/AxisQueryTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/AxisQueryTest.java +@@ -95,8 +95,8 @@ public class AxisQueryTest extends AbstractQueryTest { + Node testLocation = superuser.getRootNode().getNode(relTestLocation); + long end = System.currentTimeMillis() + 1000 * RUN_NUM_SECONDS; + while (end > System.currentTimeMillis()) { +- StringBuffer statement = new StringBuffer(relTestLocation); +- StringBuffer regexp = new StringBuffer(absTestLocation); ++ StringBuilder statement = new StringBuilder(relTestLocation); ++ StringBuilder regexp = new StringBuilder(absTestLocation); + int numSteps = rand.nextInt(NUM_LEVELS) + 1; // at least one step + while (numSteps-- > 0) { + String axis = getRandomAxis(); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/CachingHierarchyManagerConsistencyTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/CachingHierarchyManagerConsistencyTest.java +index be40d58..1f7bc73 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/CachingHierarchyManagerConsistencyTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/CachingHierarchyManagerConsistencyTest.java +@@ -84,7 +84,7 @@ public class CachingHierarchyManagerConsistencyTest extends AbstractJCRTest { + } catch (PathNotFoundException e) { + // ignore + } catch (RepositoryException e) { +- log.error(e.toString() + " Unable to get item with path: " + path); ++ log.error("{} Unable to get item with path: {}", e, path); + exceptions.add(e); + } + } +@@ -103,7 +103,7 @@ public class CachingHierarchyManagerConsistencyTest extends AbstractJCRTest { + superuser.getWorkspace().getObservationManager().removeEventListener(listener); + } + +- log.info("" + exceptions.size() + " exception(s) occurred."); ++ log.info("{} exception(s) occurred.", exceptions.size()); + if (!exceptions.isEmpty()) { + throw exceptions.get(0); + } +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/AddNode.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/AddNode.java +index 41e9c14..714f79d 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/AddNode.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/AddNode.java +@@ -42,7 +42,7 @@ public class AddNode extends Operation { + */ + public NodeIterator execute() throws Exception { + Node n = getNode(); +- log.info(n.getPath() + "/" + name); ++ log.info("{}/{}", n.getPath(), name); + return wrapWithIterator(getNode().addNode(name)); + } + } +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/AddVersionLabel.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/AddVersionLabel.java +index 8faebc6..e5757fc 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/AddVersionLabel.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/AddVersionLabel.java +@@ -42,7 +42,7 @@ public class AddVersionLabel extends VersionOperation { + Node n = getNode(); + String name = n.getBaseVersion().getName(); + String label = getRandomText(3); +- log.info(n.getPath() + ":" + name + " -> " + label); ++ log.info("{}:{} -> {}", new Object[] { n.getPath(), name, label }); + n.getVersionHistory().addVersionLabel(name, label, true); + return wrapWithIterator(n); + } +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Checkin.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Checkin.java +index 0a466c3..ed8ac0a 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Checkin.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Checkin.java +@@ -43,7 +43,7 @@ public class Checkin extends VersionOperation { + Node n = getNode(); + if (n.isCheckedOut()) { + Version v = n.checkin(); +- log.info(n.getPath() + ":" + v.getName()); ++ log.info("{}:{}", n.getPath(), v.getName()); + } + return wrapWithIterator(n); + } +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Checkout.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Checkout.java +index 6a60cc7..cb8a8e1 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Checkout.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Checkout.java +@@ -41,7 +41,7 @@ public class Checkout extends VersionOperation { + public NodeIterator execute() throws Exception { + Node n = getNode(); + if (!n.isCheckedOut()) { +- log.info(n.getPath() + ":" + n.getBaseVersion().getName()); ++ log.info("{}:{}", n.getPath(), n.getBaseVersion().getName()); + n.checkout(); + } + return wrapWithIterator(n); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/CreateNodes.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/CreateNodes.java +index 0e9f088..fe18f35 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/CreateNodes.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/CreateNodes.java +@@ -73,7 +73,7 @@ public class CreateNodes extends Operation { + log.info("Create node {}", child.getPath()); + if (count % saveInterval == 0) { + getSession().save(); +- log.debug("Created " + (count / 1000) + "k nodes"); ++ log.debug("Created {}k nodes", count / 1000); + } + if (levels > 0) { + count = createNodes(child, nodesPerLevel, levels, count); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Operation.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Operation.java +index 7232e1d..1dfca57 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Operation.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Operation.java +@@ -108,7 +108,7 @@ public abstract class Operation { + } + + protected String getRandomText(int numChars) { +- StringBuffer tmp = new StringBuffer(numChars); ++ StringBuilder tmp = new StringBuilder(numChars); + for (int i = 0; i < numChars; i++) { + char c = (char) (rand.nextInt(('z' + 1) - 'a') + 'a'); + tmp.append(c); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/RemoveVersion.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/RemoveVersion.java +index efc971e..a265fcb 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/RemoveVersion.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/RemoveVersion.java +@@ -39,7 +39,7 @@ public class RemoveVersion extends VersionOperation { + Node n = getNode(); + Version v = getRandomVersion(true); + if (v != null) { +- log.info(n.getPath() + ":" + v.getName()); ++ log.info("{}:{}", n.getPath(), v.getName()); + n.getVersionHistory().removeVersion(v.getName()); + } + return wrapWithIterator(n); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/RemoveVersionLabel.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/RemoveVersionLabel.java +index f9a8d88..afc07df 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/RemoveVersionLabel.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/RemoveVersionLabel.java +@@ -42,7 +42,7 @@ public class RemoveVersionLabel extends VersionOperation { + String[] labels = vh.getVersionLabels(); + if (labels.length > 0) { + String label = labels[getRandom().nextInt(labels.length)]; +- log.info(n.getPath() + " -> " + label); ++ log.info("{} -> {}", n.getPath(), label); + vh.removeVersionLabel(label); + } + return wrapWithIterator(n); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Restore.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Restore.java +index 98f3953..6b8c4a6 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Restore.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/Restore.java +@@ -39,7 +39,7 @@ public class Restore extends VersionOperation { + Node n = getNode(); + Version v = getRandomVersion(false); + if (v != null) { +- log.info(n.getPath() + ":" + v.getName()); ++ log.info("{}:{}", n.getPath(), v.getName()); + n.restore(v, true); + } + return wrapWithIterator(n); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/SetProperty.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/SetProperty.java +index eccff37..98ce366 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/SetProperty.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/random/operation/SetProperty.java +@@ -42,7 +42,7 @@ public class SetProperty extends Operation { + Node n = getNode(); + String value = getRandomText(5); + String path = n.setProperty(name, value).getPath(); +- log.info(path + ": " + value); ++ log.info("{}: {}", path, value); + return wrapWithIterator(getNode()); + } + } +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java +index 8b51baa..60aedbe 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java +@@ -100,8 +100,9 @@ public class AbstractQueryTest extends AbstractJCRTest { + int count = 0; + log.println("Properties:"); + String[] propNames = result.getColumnNames(); ++ StringBuilder msg = new StringBuilder(); + for (RowIterator it = result.getRows(); it.hasNext(); count++) { +- StringBuffer msg = new StringBuffer(); ++ msg.setLength(0); + Value[] values = it.nextRow().getValues(); + for (int i = 0; i < propNames.length; i++) { + msg.append(" ").append(propNames[i]).append(": "); +@@ -111,7 +112,7 @@ public class AbstractQueryTest extends AbstractJCRTest { + msg.append(values[i].getString()); + } + } +- log.println(msg); ++ log.println(msg.toString()); + } + if (count == 0) { + log.println(" NONE"); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java +index b4c3c7a..34f21f0 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextQueryTest.java +@@ -16,8 +16,6 @@ + */ + package org.apache.jackrabbit.core.query; + +-import java.util.ArrayList; +-import java.util.List; + import java.util.TreeSet; + + import javax.jcr.Node; +@@ -339,7 +337,7 @@ public class FulltextQueryTest extends AbstractQueryTest { + + private void assertContainsQuery(String statement, boolean match) + throws InvalidQueryException, RepositoryException { +- StringBuffer stmt = new StringBuffer(); ++ StringBuilder stmt = new StringBuilder(); + stmt.append("/jcr:root").append(testRoot).append("/*"); + stmt.append("[jcr:contains(., '").append(statement); + stmt.append("')]"); +@@ -347,7 +345,7 @@ public class FulltextQueryTest extends AbstractQueryTest { + Query q = superuser.getWorkspace().getQueryManager().createQuery(stmt.toString(), Query.XPATH); + checkResult(q.execute(), match ? 1 : 0); + +- stmt = new StringBuffer(); ++ stmt.setLength(0); + stmt.append("SELECT * FROM nt:base "); + stmt.append("WHERE jcr:path LIKE '").append(testRoot).append("/%' "); + stmt.append("AND CONTAINS(., '").append(statement).append("')"); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/UpperLowerCaseQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/UpperLowerCaseQueryTest.java +index 6b66ff7..7a18b50 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/UpperLowerCaseQueryTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/UpperLowerCaseQueryTest.java +@@ -227,7 +227,7 @@ public class UpperLowerCaseQueryTest extends AbstractQueryTest { + throw new IllegalArgumentException("values and matches must have same length"); + } + // create log message +- StringBuffer logMsg = new StringBuffer(); ++ StringBuilder logMsg = new StringBuilder(); + logMsg.append("queryTerm: ").append(queryTerm); + logMsg.append(" values: "); + String separator = ""; +@@ -235,9 +235,9 @@ public class UpperLowerCaseQueryTest extends AbstractQueryTest { + logMsg.append(separator); + separator = ", "; + if (matches[i]) { +- logMsg.append("+"); ++ logMsg.append('+'); + } else { +- logMsg.append("-"); ++ logMsg.append('-'); + } + logMsg.append(values[i]); + } +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TextExtractionQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TextExtractionQueryTest.java +index 692d783..1716fec 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TextExtractionQueryTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TextExtractionQueryTest.java +@@ -79,7 +79,7 @@ public class TextExtractionQueryTest extends AbstractIndexingTest { + + private void assertContainsQuery(String statement, boolean match) + throws InvalidQueryException, RepositoryException { +- StringBuffer stmt = new StringBuffer(); ++ StringBuilder stmt = new StringBuilder(); + stmt.append("/jcr:root").append(testRoot).append("/*"); + stmt.append("[jcr:contains(., '").append(statement); + stmt.append("')]"); +@@ -87,7 +87,7 @@ public class TextExtractionQueryTest extends AbstractIndexingTest { + Query q = qm.createQuery(stmt.toString(), Query.XPATH); + checkResult(q.execute(), match ? 1 : 0); + +- stmt = new StringBuffer(); ++ stmt.setLength(0); + stmt.append("SELECT * FROM nt:base "); + stmt.append("WHERE jcr:path LIKE '").append(testRoot).append("/%' "); + stmt.append("AND CONTAINS(., '").append(statement).append("')"); +diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ReadTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ReadTest.java +index dcd1873..0dde642 100644 +--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ReadTest.java ++++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/ReadTest.java +@@ -355,7 +355,7 @@ public class ReadTest extends AbstractEvaluationTest { + + // first deny access to 'path' (read-access is granted in the test setup) + Privilege[] read = privilegesFromName(Privilege.JCR_READ); +- withdrawPrivileges(path, read, Collections.EMPTY_MAP); ++ withdrawPrivileges(path, read, Collections.emptyMap()); + + Session testSession = getTestSession(); + assertFalse(testSession.nodeExists(path)); +@@ -378,7 +378,7 @@ public class ReadTest extends AbstractEvaluationTest { + assertFalse(canGetNode(testSession, ccPath)); + assertFalse(testSession.propertyExists(childNPath + '/' + JcrConstants.JCR_PRIMARYTYPE)); + +- givePrivileges(ccPath, read, Collections.EMPTY_MAP); ++ givePrivileges(ccPath, read, Collections.emptyMap()); + assertTrue(testSession.nodeExists(ccPath)); + assertTrue(canGetNode(testSession, ccPath)); + assertTrue(testSession.propertyExists(ccPath + '/' + JcrConstants.JCR_PRIMARYTYPE)); +@@ -395,7 +395,7 @@ public class ReadTest extends AbstractEvaluationTest { + + // first deny access to 'path' (read-access is granted in the test setup) + Privilege[] read = privilegesFromName(Privilege.JCR_READ); +- withdrawPrivileges(path, read, Collections.EMPTY_MAP); ++ withdrawPrivileges(path, read, Collections.emptyMap()); + + Session testSession = getTestSession(); + assertFalse(testSession.nodeExists(path)); +@@ -441,17 +441,17 @@ public class ReadTest extends AbstractEvaluationTest { + + Privilege[] read = privilegesFromName(Privilege.JCR_READ); + +- withdrawPrivileges(path, group1.getPrincipal(), read, Collections.EMPTY_MAP); ++ withdrawPrivileges(path, group1.getPrincipal(), read, Collections.emptyMap()); + Map emptyStringRestriction = new HashMap(getRestrictions(superuser, path)); + emptyStringRestriction.put(AccessControlConstants.P_GLOB.toString(), vf.createValue("")); + givePrivileges(path, group1.getPrincipal(), read, emptyStringRestriction); + +- withdrawPrivileges(childNPath, group2.getPrincipal(), read, Collections.EMPTY_MAP); ++ withdrawPrivileges(childNPath, group2.getPrincipal(), read, Collections.emptyMap()); + emptyStringRestriction = new HashMap(getRestrictions(superuser, childNPath)); + emptyStringRestriction.put(AccessControlConstants.P_GLOB.toString(), vf.createValue("")); + givePrivileges(childNPath, group2.getPrincipal(), read, emptyStringRestriction); + +- withdrawPrivileges(childNPath2, group3.getPrincipal(), read, Collections.EMPTY_MAP); ++ withdrawPrivileges(childNPath2, group3.getPrincipal(), read, Collections.emptyMap()); + emptyStringRestriction = new HashMap(getRestrictions(superuser, childNPath2)); + emptyStringRestriction.put(AccessControlConstants.P_GLOB.toString(), vf.createValue("")); + givePrivileges(childNPath2, group3.getPrincipal(), read, emptyStringRestriction); +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/CachingDataStore.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/CachingDataStore.java +index eef2210..a5f0863 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/CachingDataStore.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/CachingDataStore.java +@@ -725,11 +725,11 @@ public abstract class CachingDataStore extends AbstractDataStore implements + getRecord(identifier); + } + } catch (IOException ie) { +- LOG.warn("Cannot remove pending file upload. Dataidentifer [ " +- + identifier + "], file [" + file.getAbsolutePath() + "]", ie); ++ LOG.warn("Cannot remove pending file upload. Dataidentifer [{}], file [{}]", ++ new Object[] { identifier, file.getAbsolutePath(), ie }); + } catch (DataStoreException dse) { +- LOG.warn("Cannot remove pending file upload. Dataidentifer [ " +- + identifier + "], file [" + file.getAbsolutePath() + "]", dse); ++ LOG.warn("Cannot remove pending file upload. Dataidentifer [{}], file [{}]", ++ new Object[] { identifier, file.getAbsolutePath(), dse }); + } + } + +@@ -739,12 +739,10 @@ public abstract class CachingDataStore extends AbstractDataStore implements + File file = result.getFile(); + String fileName = getFileName(identifier); + if (result.getException() != null) { +- LOG.warn("Async Upload failed. Dataidentifer [ " + identifier +- + "], file [" + file.getAbsolutePath() + "]", +- result.getException()); ++ LOG.warn("Async Upload failed. Dataidentifer [{}], file [{}]", ++ new Object[] { identifier, file.getAbsolutePath(), result.getException() }); + } else { +- LOG.warn("Async Upload failed. Dataidentifer [ " + identifier +- + "], file [" + file.getAbsolutePath() + "]"); ++ LOG.warn("Async Upload failed. Dataidentifer [{}], file [{}]", identifier, file.getAbsolutePath()); + } + // Retry failed upload upto uploadRetries times. + try { +@@ -774,8 +772,8 @@ public abstract class CachingDataStore extends AbstractDataStore implements + } + } + } catch (IOException ie) { +- LOG.warn("Cannot retry failed async file upload. Dataidentifer [ " +- + identifier + "], file [" + file.getAbsolutePath() + "]", ie); ++ LOG.warn("Cannot retry failed async file upload. Dataidentifer [{}], file [{}]", ++ new Object[] { identifier, file.getAbsolutePath(), ie }); + } + } + +@@ -792,8 +790,8 @@ public abstract class CachingDataStore extends AbstractDataStore implements + "Async Upload Aborted. Dataidentifer [{}], file [{}] removed from AsyncCache.", + identifier, file.getAbsolutePath()); + } catch (IOException ie) { +- LOG.warn("Cannot remove pending file upload. Dataidentifer [ " +- + identifier + "], file [" + file.getAbsolutePath() + "]", ie); ++ LOG.warn("Cannot remove pending file upload. Dataidentifer [{}], file [{}]", ++ new Object[] { identifier, file.getAbsolutePath(), ie }); + } + } + +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FSBackend.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FSBackend.java +index 1437178..241194d 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FSBackend.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FSBackend.java +@@ -62,7 +62,7 @@ public class FSBackend extends AbstractBackend { + public void init(CachingDataStore store, String homeDir, String config) + throws DataStoreException { + super.init(store, homeDir, config); +- Properties initProps = null; ++ Properties initProps; + // Check is configuration is already provided. That takes precedence + // over config provided via file based config + if (this.properties != null) { +@@ -208,7 +208,7 @@ public class FSBackend extends AbstractBackend { + String name = f.getName(); + identifiers.add(new DataIdentifier(name)); + } +- LOG.debug("Found " + identifiers.size() + " identifiers."); ++ LOG.debug("Found {} identifiers.", identifiers.size()); + return identifiers.iterator(); + } + +@@ -299,7 +299,7 @@ public class FSBackend extends AbstractBackend { + if (file.delete()) { + deleteEmptyParentDirs(file); + } else { +- LOG.warn("Failed to delete file " + file.getAbsolutePath()); ++ LOG.warn("Failed to delete file {}", file.getAbsolutePath()); + } + } + } +@@ -418,7 +418,7 @@ public class FSBackend extends AbstractBackend { + parent = parent.getParentFile(); + } + } catch (IOException e) { +- LOG.warn("Error in parents deletion for " + file.getAbsoluteFile(), ++ LOG.warn("Error in parents deletion for {}", file.getAbsoluteFile(), + e); + } + } +@@ -450,8 +450,7 @@ public class FSBackend extends AbstractBackend { + if (file.delete()) { + deleteIdSet.add(id); + } else { +- LOG.warn("Failed to delete old file " +- + file.getAbsolutePath()); ++ LOG.warn("Failed to delete old file {}", file.getAbsolutePath()); + } + } + } +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FileDataStore.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FileDataStore.java +index 3bd11ee..f314f75 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FileDataStore.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/FileDataStore.java +@@ -278,7 +278,7 @@ public class FileDataStore extends AbstractDataStore + if (file.delete()) { + deleteEmptyParentDirs(file); + } else { +- log.warn("Failed to delete file " + file.getAbsolutePath()); ++ log.warn("Failed to delete file {}", file.getAbsolutePath()); + } + } + } +@@ -304,7 +304,7 @@ public class FileDataStore extends AbstractDataStore + parent = parent.getParentFile(); + } + } catch (IOException e) { +- log.warn("Error in parents deletion for " + file.getAbsoluteFile(), e); ++ log.warn("Error in parents deletion for {}", file.getAbsoluteFile(), e); + } + } + +@@ -339,7 +339,7 @@ public class FileDataStore extends AbstractDataStore + " length: " + file.length()); + } + if (!file.delete()) { +- log.warn("Failed to delete old file " + file.getAbsolutePath()); ++ log.warn("Failed to delete old file {}", file.getAbsolutePath()); + } + count++; + } +@@ -391,7 +391,7 @@ public class FileDataStore extends AbstractDataStore + String name = f.getName(); + identifiers.add(new DataIdentifier(name)); + } +- log.debug("Found " + identifiers.size() + " identifiers."); ++ log.debug("Found {} identifiers.", identifiers.size()); + return identifiers.iterator(); + } + +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java +index ab1abb3..3cac734 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java +@@ -182,7 +182,7 @@ public class LocalCache { + try { + return store(fileName, src, false).getFile(); + } catch (IOException ioe) { +- LOG.warn("Exception in addding file [" + fileName + "] to local cache.", ioe); ++ LOG.warn("Exception in addding file [{}] to local cache.", fileName, ioe); + } + return null; + } +@@ -213,7 +213,7 @@ public class LocalCache { + AsyncUploadCacheResult result = new AsyncUploadCacheResult(); + result.setFile(src); + result.setAsyncUpload(false); +- boolean destExists = false; ++ boolean destExists; + if ((destExists = dest.exists()) + || (src.exists() && !dest.exists() && !src.equals(dest) + && canAdmitFile(src.length()) +@@ -256,8 +256,7 @@ public class LocalCache { + long diff = (System.currentTimeMillis() - cacheMissDuration.get()) / 1000; + // logged at 5 minute interval minimum + if (diff > 5 * 60) { +- LOG.info("local cache misses [{}] in [{}] sec", new Object[] { +- cacheMissCounter.getAndSet(0), diff }); ++ LOG.info("local cache misses [{}] in [{}] sec", cacheMissCounter.getAndSet(0), diff); + cacheMissDuration.set(System.currentTimeMillis()); + } + +@@ -484,7 +483,7 @@ public class LocalCache { + if (flength != null) { + LOG.debug("cache entry [{}], with size [{}] removed.", + fileName, flength); +- currentSizeInBytes -= flength.longValue(); ++ currentSizeInBytes -= flength; + } + } else if (!getFile(fileName).exists()) { + // second attempt. remove from cache if file doesn't exists +@@ -493,7 +492,7 @@ public class LocalCache { + LOG.debug( + "file not exists. cache entry [{}], with size [{}] removed.", + fileName, flength); +- currentSizeInBytes -= flength.longValue(); ++ currentSizeInBytes -= flength; + } + } else { + LOG.info("not able to remove cache entry [{}], size [{}]", key, +@@ -617,7 +616,7 @@ public class LocalCache { + String dataStorePath = directory.getAbsolutePath(); + // convert to java path format + dataStorePath = dataStorePath.replace("\\", "/"); +- LOG.info("directoryPath = " + dataStorePath); ++ LOG.info("directoryPath = {}", dataStorePath); + + String tmpPath = tmp.getAbsolutePath(); + tmpPath = tmpPath.replace("\\", "/"); +@@ -646,7 +645,7 @@ public class LocalCache { + store(name, f); + long now = System.currentTimeMillis(); + if (now > time + 10000) { +- LOG.info("Processed {" + (count) + "}/{" + allFiles.size() + "}"); ++ LOG.info("Processed [{}]/[{}]", count, allFiles.size()); + time = now; + } + } +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java +index aea8016..18d00ed 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/MultiDataStore.java +@@ -337,8 +337,8 @@ public class MultiDataStore implements DataStore { + "Jackrabbit-MulitDataStore-MoveDataTaskThread"); + moveDataTaskThread.setDaemon(true); + moveDataTaskThread.start(); +- log.info("MultiDataStore-MoveDataTask thread started; first run scheduled at " +- + moveDataTaskNextRun.getTime()); ++ log.info("MultiDataStore-MoveDataTask thread started; first run scheduled at {}", ++ moveDataTaskNextRun.getTime()); + if (delayedDelete) { + try { + // Run on startup the DeleteDelayedIdentifiersTask only if the +@@ -497,8 +497,8 @@ public class MultiDataStore implements DataStore { + writer.write(identifier.toString()); + return true; + } catch (Exception e) { +- log.warn("I/O error while saving DataIdentifier (stacktrace on DEBUG log level) to '" +- + identifiersToDeleteFile.getPath() + "': " + e.getMessage()); ++ log.warn("I/O error while saving DataIdentifier (stacktrace on DEBUG log level) to '{}': {}", ++ identifiersToDeleteFile.getPath(), e.getMessage()); + log.debug("Root cause: ", e); + return false; + } finally { +@@ -520,8 +520,8 @@ public class MultiDataStore implements DataStore { + return true; + } catch (Exception e) { + log.warn("I/O error while purging (stacktrace on DEBUG log level) the " +- + IDENTIFIERS_TO_DELETE_FILE_KEY + " file '" +- + identifiersToDeleteFile.getPath() + "': " + e.getMessage()); ++ + IDENTIFIERS_TO_DELETE_FILE_KEY + " file '{}': {}", ++ identifiersToDeleteFile.getPath(), e.getMessage()); + log.debug("Root cause: ", e); + return false; + } finally { +@@ -541,8 +541,7 @@ public class MultiDataStore implements DataStore { + public void run() { + while (!Thread.currentThread().isInterrupted()) { + try { +- log.info("Next move-data task run scheduled at " +- + moveDataTaskNextRun.getTime()); ++ log.info("Next move-data task run scheduled at {}", moveDataTaskNextRun.getTime()); + long sleepTime = moveDataTaskNextRun.getTimeInMillis() + - System.currentTimeMillis(); + if (sleepTime > 0) { +@@ -605,7 +604,7 @@ public class MultiDataStore implements DataStore { + log.debug("Moving DataRecord's... ({})", moved); + } + } catch (DataStoreException e) { +- log.error("Failed to move DataRecord. DataIdentifier: " + identifier, e); ++ log.error("Failed to move DataRecord. DataIdentifier: {}", identifier, e); + } finally { + moveDataTaskLock.unlock(); + } +@@ -615,12 +614,10 @@ public class MultiDataStore implements DataStore { + Thread.sleep(sleepBetweenRecords); + } + if (delayedDelete) { +- log.info("Moved " +- + moved +- + " DataRecords to the archive data store. The DataRecords in the primary data store will be removed in " +- + delayedDeleteSleep + " seconds."); ++ log.info("Moved {} DataRecords to the archive data store. The DataRecords in the primary data store will be removed in {} seconds.", ++ moved, delayedDeleteSleep); + } else { +- log.info("Moved " + moved + " DataRecords to the archive data store."); ++ log.info("Moved {} DataRecords to the archive data store.", moved); + } + } catch (Exception e) { + log.warn("Failed to run move-data task.", e); +@@ -676,7 +673,7 @@ public class MultiDataStore implements DataStore { + ((MultiDataStoreAware) primaryDataStore).deleteRecord(identifier); + deleted++; + } catch (DataStoreException e) { +- log.error("Failed to delete DataRecord. DataIdentifier: " + identifier, ++ log.error("Failed to delete DataRecord. DataIdentifier: {}", identifier, + e); + problemIdentifiers.add(identifier); + } finally { +@@ -687,7 +684,7 @@ public class MultiDataStore implements DataStore { + // DeleteDelayedIdentifiersTask is running.. + Thread.sleep(sleepBetweenRecords); + } +- log.info("Deleted " + deleted + " DataRecords from the primary data store."); ++ log.info("Deleted {} DataRecords from the primary data store.", deleted); + if (problemIdentifiers.isEmpty()) { + try { + identifiersToDeleteFile.delete(); +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java +index c9c727e..2a72579 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java +@@ -539,7 +539,7 @@ public class DbDataStore extends AbstractDataStore + list.add(identifier); + } + } +- log.debug("Found " + list.size() + " identifiers."); ++ log.debug("Found {} identifiers.", list.size()); + return list.iterator(); + } catch (Exception e) { + throw convert("Can not read records", e); +@@ -776,7 +776,7 @@ public class DbDataStore extends AbstractDataStore + } + + public void updateModifiedDateOnAccess(long before) { +- log.debug("Update modifiedDate on access before " + before); ++ log.debug("Update modifiedDate on access before {}", before); + minModifiedDate = before; + } + +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/HandleMonitor.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/HandleMonitor.java +index c6a6577..fab347e 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/HandleMonitor.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/HandleMonitor.java +@@ -93,7 +93,7 @@ public class HandleMonitor { + * Dumps the contents of this monitor + */ + public void dump() { +- log.info("Number of open files: " + openHandles.size()); ++ log.info("Number of open files: {}", openHandles.size()); + for (File file : openHandles.keySet()) { + Handle handle = openHandles.get(file); + handle.dump(); +@@ -168,12 +168,12 @@ public class HandleMonitor { + */ + private void dump(boolean detailed) { + if (detailed) { +- log.info("- " + file.getPath() + ", " + streams.size()); ++ log.info("- {}, {}", file.getPath(), streams.size()); + for (Handle.MonitoredInputStream in : streams) { + in.dump(); + } + } else { +- log.info("- " + file.getPath() + ", " + streams.size()); ++ log.info("- {}, {}", file.getPath(), streams.size()); + } + } + +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java +index d5d32ae..713af1d 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/LocalFileSystem.java +@@ -18,8 +18,6 @@ package org.apache.jackrabbit.core.fs.local; + + import org.apache.jackrabbit.core.fs.FileSystem; + import org.apache.jackrabbit.core.fs.FileSystemException; +-import org.apache.jackrabbit.core.fs.local.FileUtil; +-import org.apache.jackrabbit.core.fs.local.HandleMonitor; + import org.apache.jackrabbit.util.LazyFileInputStream; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; +@@ -78,7 +76,7 @@ public class LocalFileSystem implements FileSystem { + * @param enable + */ + public void setEnableHandleMonitor(String enable) { +- setEnableHandleMonitor(Boolean.valueOf(enable).booleanValue()); ++ setEnableHandleMonitor(Boolean.valueOf(enable)); + } + + /** +@@ -163,7 +161,7 @@ public class LocalFileSystem implements FileSystem { + throw new FileSystemException(msg); + } + } +- log.info("LocalFileSystem initialized at path " + root.getPath()); ++ log.info("LocalFileSystem initialized at path {}", root.getPath()); + if (monitor != null) { + log.info("LocalFileSystem using handle monitor"); + } +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java +index c0830c3..eb66a7d 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java +@@ -185,7 +185,7 @@ public final class ConnectionFactory { + try { + ds.close(); + } catch (SQLException e) { +- log.error("failed to close " + ds, e); ++ log.error("failed to close {}", ds, e); + } + } + keyToDataSource.clear(); +@@ -371,7 +371,7 @@ public final class ConnectionFactory { + } else if (url.contains("db2")) { + return "values(1)"; + } +- log.warn("Failed to guess validation query for URL " + url); ++ log.warn("Failed to guess validation query for URL {}", url); + return null; + } + } +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionHelper.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionHelper.java +index d89bc7d..7356a16 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionHelper.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionHelper.java +@@ -545,7 +545,7 @@ public class ConnectionHelper { + } catch (SQLException e) { + lastException = e; + } +- log.error("Failed to execute SQL (stacktrace on DEBUG log level): " + lastException); ++ log.error("Failed to execute SQL (stacktrace on DEBUG log level): {}", (Object) lastException); + log.debug("Failed to execute SQL", lastException); + if (!resetParamResources()) { + log.warn("Could not reset parameters: not retrying SQL call"); +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/DbUtility.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/DbUtility.java +index 90c9ee2..a1fe083 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/DbUtility.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/DbUtility.java +@@ -91,8 +91,8 @@ public final class DbUtility { + if (message != null) { + LOG.error(message); + } +- LOG.error(" Reason: " + e.getMessage()); +- LOG.error(" State/Code: " + e.getSQLState() + "/" + e.getErrorCode()); ++ LOG.error(" Reason: {}", e.getMessage()); ++ LOG.error(" State/Code: {}/{}", e.getSQLState(), e.getErrorCode()); + LOG.debug(" dump:", e); + } + } +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/Oracle10R1ConnectionHelper.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/Oracle10R1ConnectionHelper.java +index f4efdb7..d4c348f 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/Oracle10R1ConnectionHelper.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/Oracle10R1ConnectionHelper.java +@@ -72,8 +72,8 @@ public final class Oracle10R1ConnectionHelper extends OracleConnectionHelper { + try { + con = dataSource.getConnection(); + blobClass = con.getClass().getClassLoader().loadClass("oracle.sql.BLOB"); +- durationSessionConstant = new Integer(blobClass.getField("DURATION_SESSION").getInt(null)); +- modeReadWriteConstant = new Integer(blobClass.getField("MODE_READWRITE").getInt(null)); ++ durationSessionConstant = blobClass.getField("DURATION_SESSION").getInt(null); ++ modeReadWriteConstant = blobClass.getField("MODE_READWRITE").getInt(null); + } finally { + if (con != null) { + DbUtility.close(con, null, null); +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/OracleConnectionHelper.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/OracleConnectionHelper.java +index e9baeab..c7124dc 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/OracleConnectionHelper.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/OracleConnectionHelper.java +@@ -57,9 +57,8 @@ public class OracleConnectionHelper extends ConnectionHelper { + if (metaData.getDriverMajorVersion() < 10) { + // Oracle drivers prior to version 10 only support + // writing BLOBs up to 32k in size... +- log.warn("Unsupported driver version detected: " +- + metaData.getDriverName() +- + " v" + metaData.getDriverVersion()); ++ log.warn("Unsupported driver version detected: {} v{}", ++ metaData.getDriverName(), metaData.getDriverVersion()); + } + } catch (SQLException e) { + log.warn("Can not retrieve driver version", e); +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java +index ba38415..71b2f39 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/StreamWrapper.java +@@ -22,7 +22,6 @@ import java.io.InputStream; + import java.sql.SQLException; + + import org.apache.commons.io.input.CloseShieldInputStream; +-import org.apache.jackrabbit.core.util.db.ConnectionHelper.RetryManager; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + +diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java +index 054a130..6b17c87 100644 +--- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java ++++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java +@@ -138,14 +138,14 @@ public class TransactionContext { + beforeOperation(); + + TransactionException txe = null; +- for (int i = 0; i < resources.length; i++) { ++ for (InternalXAResource resource : resources) { + try { +- resources[i].prepare(this); +- } catch (TransactionException e) { ++ resource.prepare(this); ++ }catch (TransactionException e) { + txe = e; + break; +- } catch (Exception e) { +- txe = new TransactionException("Error while preparing resource " + resources, e); ++ }catch (Exception e) { ++ txe = new TransactionException("Error while preparing resource " + resource, e); + break; + } + } +@@ -185,13 +185,12 @@ public class TransactionContext { + beforeOperation(); + + TransactionException txe = null; +- for (int i = 0; i < resources.length; i++) { +- InternalXAResource resource = resources[i]; ++ for (InternalXAResource resource : resources) { + if (txe != null) { + try { + resource.rollback(this); + } catch (Exception e) { +- log.warn("Unable to rollback changes on " + resource, e); ++ log.warn("Unable to rollback changes on {}", resource, e); + } + } else { + try { +@@ -210,7 +209,7 @@ public class TransactionContext { + cleanCurrentXid(); + + if (txe != null) { +- XAException e = null; ++ XAException e; + if (heuristicCommit) { + e = new XAException(XAException.XA_HEURMIX); + } else { +@@ -235,12 +234,11 @@ public class TransactionContext { + beforeOperation(); + + int errors = 0; +- for (int i = 0; i < resources.length; i++) { +- InternalXAResource resource = resources[i]; ++ for (InternalXAResource resource : resources) { + try { + resource.rollback(this); + } catch (Exception e) { +- log.warn("Unable to rollback changes on " + resource, e); ++ log.warn("Unable to rollback changes on {}", resource, e); + errors++; + } + } +@@ -259,8 +257,8 @@ public class TransactionContext { + * methods. + */ + private void beforeOperation() { +- for (int i = 0; i < resources.length; i++) { +- resources[i].beforeOperation(this); ++ for (InternalXAResource resource : resources) { ++ resource.beforeOperation(this); + } + } + +@@ -269,8 +267,8 @@ public class TransactionContext { + * methods. + */ + private void afterOperation() { +- for (int i = 0; i < resources.length; i++) { +- resources[i].afterOperation(this); ++ for (InternalXAResource resource : resources) { ++ resource.afterOperation(this); + } + } + +diff --git a/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java b/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java +index dad1e09..540bef2 100644 +--- a/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java ++++ b/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestCaseBase.java +@@ -22,7 +22,6 @@ import java.io.File; + import java.io.IOException; + import java.io.InputStream; + import java.io.SequenceInputStream; +-import java.net.URL; + import java.util.ArrayList; + import java.util.HashMap; + import java.util.Iterator; +@@ -92,8 +91,7 @@ public abstract class TestCaseBase extends TestCase { + delSuccessFul = FileUtils.deleteQuietly(new File(dataStoreDir)); + count++; + } +- LOG.info("setup : directory [" + dataStoreDir + "] deleted [" +- + delSuccessFul + "]"); ++ LOG.info("setup : directory [{}] deleted [{}]", dataStoreDir, delSuccessFul); + } + } + +@@ -106,8 +104,7 @@ public abstract class TestCaseBase extends TestCase { + delSuccessFul = FileUtils.deleteQuietly(new File(dataStoreDir)); + count++; + } +- LOG.info("tearDown : directory [" + dataStoreDir + "] deleted [" +- + delSuccessFul + "]"); ++ LOG.info("tearDown : directory [{}] deleted [{}]", dataStoreDir, delSuccessFul); + } + /** + * Testcase to validate {@link DataStore#addRecord(InputStream)} API. +@@ -115,12 +112,9 @@ public abstract class TestCaseBase extends TestCase { + public void testAddRecord() { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#addRecord, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#addRecord, testDir={}", getClass().getName(), dataStoreDir); + doAddRecordTest(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#addRecord finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#addRecord finished, time taken = [{}]ms", getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + fail(e.getMessage()); +@@ -133,12 +127,9 @@ public abstract class TestCaseBase extends TestCase { + public void testGetRecord() { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testGetRecord, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#testGetRecord, testDir={}", getClass().getName(), dataStoreDir); + doGetRecordTest(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testGetRecord finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#testGetRecord finished, time taken = [{}]ms", getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + } +@@ -150,12 +141,9 @@ public abstract class TestCaseBase extends TestCase { + public void testGetAllIdentifiers() { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testGetAllIdentifiers, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#testGetAllIdentifiers, testDir={}", getClass().getName(), dataStoreDir); + doGetAllIdentifiersTest(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testGetAllIdentifiers finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#testGetAllIdentifiers finished, time taken = [{}]ms", getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + fail(e.getMessage()); +@@ -169,12 +157,9 @@ public abstract class TestCaseBase extends TestCase { + public void testUpdateLastModifiedOnAccess() { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testUpdateLastModifiedOnAccess, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#testUpdateLastModifiedOnAccess, testDir={}", getClass().getName(), dataStoreDir); + doUpdateLastModifiedOnAccessTest(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testUpdateLastModifiedOnAccess finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#testUpdateLastModifiedOnAccess finished, time taken = [{}]ms", getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + } +@@ -187,12 +172,9 @@ public abstract class TestCaseBase extends TestCase { + public void testDeleteRecord() { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testDeleteRecord, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#testDeleteRecord, testDir={}", getClass().getName(), dataStoreDir); + doDeleteRecordTest(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testDeleteRecord finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#testDeleteRecord finished, time taken = [{}]ms", getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + fail(e.getMessage()); +@@ -205,12 +187,9 @@ public abstract class TestCaseBase extends TestCase { + public void testDeleteAllOlderThan() { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testDeleteAllOlderThan, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#testDeleteAllOlderThan, testDir={}", getClass().getName(), dataStoreDir); + doDeleteAllOlderThan(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testDeleteAllOlderThan finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#testDeleteAllOlderThan finished, time taken = [{}]ms", getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + fail(e.getMessage()); +@@ -223,12 +202,9 @@ public abstract class TestCaseBase extends TestCase { + public void testReference() { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testReference, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#testReference, testDir={}", getClass().getName(), dataStoreDir); + doReferenceTest(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testReference finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#testReference finished, time taken = [{}]ms", getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + fail(e.getMessage()); +@@ -241,12 +217,9 @@ public abstract class TestCaseBase extends TestCase { + public void testSingleThread() { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testSingleThread, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#testSingleThread, testDir={}", getClass().getName(), dataStoreDir); + doTestSingleThread(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testSingleThread finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#testSingleThread finished, time taken = [{}]ms", getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + fail(e.getMessage()); +@@ -260,12 +233,9 @@ public abstract class TestCaseBase extends TestCase { + public void testMultiThreaded() { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testMultiThreaded, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#testMultiThreaded, testDir={}", getClass().getName(), dataStoreDir); + doTestMultiThreaded(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#testMultiThreaded finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#testMultiThreaded finished, time taken = [{}]ms", getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + fail(e.getMessage()); +@@ -378,12 +348,12 @@ public abstract class TestCaseBase extends TestCase { + data = new byte[dataLength]; + random.nextBytes(data); + DataRecord rec2 = ds.addRecord(new ByteArrayInputStream(data)); +- LOG.debug("rec2 timestamp=" + rec2.getLastModified()); ++ LOG.debug("rec2 timestamp={}", rec2.getLastModified()); + + // sleep for some time to ensure that async upload completes in backend. + sleep(6000); + long updateTime = System.currentTimeMillis(); +- LOG.debug("updateTime=" + updateTime); ++ LOG.debug("updateTime={}", updateTime); + ds.updateModifiedDateOnAccess(updateTime); + + // sleep to workaround System.currentTimeMillis granularity. +@@ -399,7 +369,7 @@ public abstract class TestCaseBase extends TestCase { + rec1 = ds.getRecord(rec1.getIdentifier()); + + assertEquals("rec1 touched", true, rec1.getLastModified() > updateTime); +- LOG.debug("rec2 timestamp=" + rec2.getLastModified()); ++ LOG.debug("rec2 timestamp={}", rec2.getLastModified()); + assertEquals("rec2 not touched", true, + rec2.getLastModified() < updateTime); + assertEquals("rec3 touched", true, rec3.getLastModified() > updateTime); +@@ -552,7 +522,7 @@ public abstract class TestCaseBase extends TestCase { + RandomInputStream in = new RandomInputStream(size + offset, size); + DataRecord rec = ds.addRecord(in); + list.add(rec); +- map.put(rec, new Integer(size)); ++ map.put(rec, size); + } + Random random = new Random(1); + for (int i = 0; i < list.size(); i++) { +diff --git a/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestLocalCache.java b/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestLocalCache.java +index c376c67..8fb0630 100644 +--- a/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestLocalCache.java ++++ b/jackrabbit-data/src/test/java/org/apache/jackrabbit/core/data/TestLocalCache.java +@@ -374,7 +374,7 @@ public class TestLocalCache extends TestCase { + try { + for (int i = 0; i < 100; i++) { + String key = "a" + random.nextInt(byteMap.size()); +- LOG.debug("key=" + key); ++ LOG.debug("key={}", key); + cache.store(key, new ByteArrayInputStream(byteMap.get(key))); + } + } catch (Exception e) { +diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractNode.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractNode.java +index abacc33..bdd0683 100644 +--- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractNode.java ++++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractNode.java +@@ -117,7 +117,7 @@ public abstract class AbstractNode extends AbstractItem implements Node { + */ + public String getPath() throws RepositoryException { + try { +- StringBuffer buffer = new StringBuffer(getParent().getPath()); ++ StringBuilder buffer = new StringBuilder(getParent().getPath()); + if (buffer.length() > 1) { + buffer.append('/'); + } +diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractProperty.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractProperty.java +index 69f020e..45532df 100644 +--- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractProperty.java ++++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/AbstractProperty.java +@@ -89,7 +89,7 @@ public abstract class AbstractProperty extends AbstractItem + * @throws RepositoryException if an error occurs + */ + public String getPath() throws RepositoryException { +- StringBuffer buffer = new StringBuffer(getParent().getPath()); ++ StringBuilder buffer = new StringBuilder(getParent().getPath()); + if (buffer.length() > 1) { + buffer.append('/'); + } +diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefWriter.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefWriter.java +index c01c647..f14f475 100644 +--- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefWriter.java ++++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefWriter.java +@@ -510,7 +510,7 @@ public class CompactNodeTypeDefWriter { + * @return the escaped string + */ + private String escape(String s) { +- StringBuffer sb = new StringBuffer(s); ++ StringBuilder sb = new StringBuilder(s); + for (int i = 0; i < sb.length(); i++) { + if (sb.charAt(i) == '\\') { + sb.insert(i, '\\'); +diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/ParseException.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/ParseException.java +index ecce9df..0adf7d2 100644 +--- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/ParseException.java ++++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/ParseException.java +@@ -105,7 +105,12 @@ public class ParseException extends Exception { + */ + public String getMessage() { + String message = super.getMessage(); +- StringBuffer b = new StringBuffer(message == null ? "" : message); ++ StringBuilder b; ++ if (message == null) { ++ b = new StringBuilder(); ++ } else { ++ b = new StringBuilder(message); ++ } + String delim = " ("; + if (systemId != null && !systemId.equals("")) { + b.append(delim); +diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java +index 529d486..a500ba5 100644 +--- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java ++++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java +@@ -80,11 +80,11 @@ public class JsonParser { + */ + public void parse(Reader reader) throws IOException { + +- //StringBuffer key = new StringBuffer(); +- StringBuffer value = new StringBuffer(); ++ //StringBuilder key = new StringBuilder(); ++ StringBuilder value = new StringBuilder(); + + int state; +- Stack complexVStack = new Stack(); ++ Stack complexVStack = new Stack(); + + int next = reader.read(); + if (next == '{') { +@@ -202,7 +202,7 @@ public class JsonParser { + */ + private static String nextString(Reader r, char quote) throws IOException { + int c; +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + for (;;) { + c = r.read(); + switch (c) { +@@ -248,7 +248,7 @@ public class JsonParser { + } + + private static String next(Reader r, int n) throws IOException { +- StringBuffer b = new StringBuffer(n); ++ StringBuilder b = new StringBuilder(n); + while (n-- > 0) { + int c = r.read(); + if (c < 0) { +@@ -274,7 +274,7 @@ public class JsonParser { + return next; + } + +- private StringBuffer resetValue(StringBuffer value) throws IOException { ++ private StringBuilder resetValue(StringBuilder value) throws IOException { + if (value != null && value.length() > 0) { + String v = value.toString(); + if (NULL.equals(v)) { +@@ -291,6 +291,6 @@ public class JsonParser { + handler.value(l); + } + } +- return new StringBuffer(); ++ return new StringBuilder(); + } + } +\ No newline at end of file +diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonUtil.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonUtil.java +index e680580..0cbbe8c 100644 +--- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonUtil.java ++++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonUtil.java +@@ -34,7 +34,7 @@ public class JsonUtil { + } + + int len = str.length(); +- StringBuffer sb = new StringBuffer(len + 2); ++ StringBuilder sb = new StringBuilder(len + 2); + // leading quote + sb.append('"'); + // append passed string escaping characters as required +diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/GQL.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/GQL.java +index 9773f76..686b50a 100755 +--- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/GQL.java ++++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/GQL.java +@@ -481,7 +481,7 @@ public final class GQL { + pushExpression(property, value, optional); + } + }); +- StringBuffer stmt = new StringBuffer(); ++ StringBuilder stmt = new StringBuilder(); + // path constraint + stmt.append(pathConstraint); + // predicate +@@ -493,13 +493,13 @@ public final class GQL { + predicate.addOperand(condition); + } + if (predicate.getSize() > 0) { +- stmt.append("["); ++ stmt.append('['); + } + predicate.toString(stmt); + if (predicate.getSize() > 0) { +- stmt.append("]"); ++ stmt.append(']'); + } +- stmt.append(" "); ++ stmt.append(' '); + // order by + orderBy.toString(stmt); + return stmt.toString(); +@@ -720,8 +720,8 @@ public final class GQL { + char[] stmt = new char[statement.length() + 1]; + statement.getChars(0, statement.length(), stmt, 0); + stmt[statement.length()] = ' '; +- StringBuffer property = new StringBuffer(); +- StringBuffer value = new StringBuffer(); ++ StringBuilder property = new StringBuilder(); ++ StringBuilder value = new StringBuilder(); + boolean quoted = false; + boolean escaped = false; + boolean optional = false; +@@ -900,7 +900,7 @@ public final class GQL { + */ + private interface Expression { + +- void toString(StringBuffer buffer) throws RepositoryException; ++ void toString(StringBuilder buffer) throws RepositoryException; + } + + /** +@@ -927,11 +927,11 @@ public final class GQL { + super(property, value); + } + +- public void toString(StringBuffer buffer) ++ public void toString(StringBuilder buffer) + throws RepositoryException { +- buffer.append("@"); ++ buffer.append('@'); + buffer.append(ISO9075.encode(resolvePropertyName(property))); +- buffer.append("='").append(value).append("'"); ++ buffer.append("='").append(value).append('\''); + } + } + +@@ -971,7 +971,7 @@ public final class GQL { + this.value = tmp; + } + +- public void toString(StringBuffer buffer) ++ public void toString(StringBuilder buffer) + throws RepositoryException { + buffer.append("jcr:like(fn:lower-case(fn:name()), '"); + buffer.append(value); +@@ -991,7 +991,7 @@ public final class GQL { + this.prohibited = value.startsWith("-"); + } + +- public void toString(StringBuffer buffer) ++ public void toString(StringBuilder buffer) + throws RepositoryException { + if (property.equals(NATIVE_XPATH)) { + buffer.append(value); +@@ -1000,11 +1000,11 @@ public final class GQL { + if (prohibited) { + buffer.append("not("); + } +- buffer.append(JCR_CONTAINS).append("("); ++ buffer.append(JCR_CONTAINS).append('('); + if (property.length() == 0) { + // node scope + if (commonPathPrefix == null) { +- buffer.append("."); ++ buffer.append('.'); + } else { + buffer.append(ISO9075.encodePath(commonPathPrefix)); + } +@@ -1013,7 +1013,7 @@ public final class GQL { + String[] parts = Text.explode(property, '/'); + if (commonPathPrefix != null) { + buffer.append(ISO9075.encodePath(commonPathPrefix)); +- buffer.append("/"); ++ buffer.append('/'); + } + String slash = ""; + for (int i = 0; i < parts.length; i++) { +@@ -1021,7 +1021,7 @@ public final class GQL { + if (!parts[i].equals(".")) { + // last part + buffer.append(slash); +- buffer.append("@"); ++ buffer.append('@'); + buffer.append(ISO9075.encode( + resolvePropertyName(parts[i]))); + } +@@ -1044,7 +1044,7 @@ public final class GQL { + } + buffer.append("')"); + if (prohibited) { +- buffer.append(")"); ++ buffer.append(')'); + } + } + } +@@ -1056,10 +1056,10 @@ public final class GQL { + + private final List operands = new ArrayList(); + +- public void toString(StringBuffer buffer) ++ public void toString(StringBuilder buffer) + throws RepositoryException { + if (operands.size() > 1) { +- buffer.append("("); ++ buffer.append('('); + } + String op = ""; + for (Expression expr : operands) { +@@ -1068,7 +1068,7 @@ public final class GQL { + op = getOperation(); + } + if (operands.size() > 1) { +- buffer.append(")"); ++ buffer.append(')'); + } + } + +@@ -1118,7 +1118,7 @@ public final class GQL { + this.value = value; + } + +- public void toString(StringBuffer buffer) ++ public void toString(StringBuilder buffer) + throws RepositoryException { + int start = buffer.length(); + buffer.append("order by "); +@@ -1147,7 +1147,7 @@ public final class GQL { + name = createPropertyName(resolvePropertyName(name)); + buffer.append(name); + if (!asc) { +- buffer.append(" ").append(DESCENDING); ++ buffer.append(' ').append(DESCENDING); + } + comma = ", "; + } +@@ -1177,8 +1177,8 @@ public final class GQL { + } + } + +- private void defaultOrderBy(StringBuffer buffer) { +- buffer.append("@").append(JCR_SCORE).append(" ").append(DESCENDING); ++ private void defaultOrderBy(StringBuilder buffer) { ++ buffer.append('@').append(JCR_SCORE).append(' ').append(DESCENDING); + } + } + +diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java +index f836ea1..ed86c0f 100644 +--- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java ++++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO9075.java +@@ -50,12 +50,12 @@ public class ISO9075 { + if (name.length() == 0) { + return name; + } +- if (XMLChar.isValidName(name) && name.indexOf("_x") < 0) { ++ if (XMLChar.isValidName(name) && !name.contains("_x")) { + // already valid + return name; + } else { + // encode +- StringBuffer encoded = new StringBuffer(); ++ StringBuilder encoded = new StringBuilder(); + for (int i = 0; i < name.length(); i++) { + if (i == 0) { + // first character of name +@@ -95,7 +95,7 @@ public class ISO9075 { + */ + public static String encodePath(String path) { + String[] names = Text.explode(path, '/', true); +- StringBuffer encoded = new StringBuffer(path.length()); ++ StringBuilder encoded = new StringBuilder(path.length()); + for (int i = 0; i < names.length; i++) { + // detect index + String index = null; +@@ -122,7 +122,7 @@ public class ISO9075 { + */ + public static String decode(String name) { + // quick check +- if (name.indexOf("_x") < 0) { ++ if (!name.contains("_x")) { + // not encoded + return name; + } +@@ -149,15 +149,15 @@ public class ISO9075 { + *

+ * Example: ' ' (the space character) is encoded to: _x0020_ + * @param c the character to encode +- * @param b the encoded character is appended to StringBuffer ++ * @param b the encoded character is appended to StringBuilder + * b. + */ +- private static void encode(char c, StringBuffer b) { ++ private static void encode(char c, StringBuilder b) { + b.append("_x"); + String hex = Integer.toHexString(c); + b.append(PADDING, 0, 4 - hex.length()); + b.append(hex); +- b.append("_"); ++ b.append('_'); + } + + /** +diff --git a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java +index d11daa5..d4b061f 100644 +--- a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java ++++ b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java +@@ -131,10 +131,10 @@ public class ClientEventPoll extends Thread { + * listener. + */ + public synchronized long addListener(EventListener listener) { +- Long id = new Long(counter++); ++ Long id = counter++; + listenerMap.put(id, listener); + idMap.put(listener, id); +- return id.longValue(); ++ return id; + } + + /** +@@ -150,7 +150,7 @@ public class ClientEventPoll extends Thread { + Long key = (Long) idMap.remove(listener); + if (key != null) { + listenerMap.remove(key); +- return key.longValue(); ++ return key; + } + + return -1; +@@ -208,7 +208,7 @@ public class ClientEventPoll extends Thread { + + // extract the listener id from the remote event and find + // the locally registered event listener +- Long id = new Long(remoteEvent.getListenerId()); ++ Long id = remoteEvent.getListenerId(); + EventListener listener = (EventListener) listenerMap.get(id); + + // if the listener is not registered (anymore), the event is +@@ -224,7 +224,7 @@ public class ClientEventPoll extends Thread { + try { + listener.onEvent(events); + } catch (Exception e) { +- log.error("Unexpected failure of Listener " + listener, e); ++ log.error("Unexpected failure of Listener {}", listener, e); + } + + } catch (RemoteException re) { +diff --git a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ServerEventListenerProxy.java b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ServerEventListenerProxy.java +index ad4a882..cec7fb9 100644 +--- a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ServerEventListenerProxy.java ++++ b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ServerEventListenerProxy.java +@@ -96,7 +96,7 @@ public class ServerEventListenerProxy implements EventListener { + queue.put(remoteEvent); + } catch (RemoteException re) { + Throwable t = (re.getCause() == null) ? re : re.getCause(); +- log.error("Problem creating remote event for " + listenerId, t); ++ log.error("Problem creating remote event for {}", listenerId, t); + } + } + +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultHandler.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultHandler.java +index 6122a55..37cfcc7 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultHandler.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultHandler.java +@@ -554,7 +554,7 @@ public class DefaultHandler implements IOHandler, PropertyHandler, CopyMoveHandl + String name = p.getName(); + PropertyDefinition def = p.getDefinition(); + if (def.isMultiple() || isDefinedByFilteredNodeType(def)) { +- log.debug("Skip property '" + name + "': not added to webdav property set."); ++ log.debug("Skip property '{}': not added to webdav property set.", name); + continue; + } + if (JcrConstants.JCR_DATA.equals(name) +@@ -582,7 +582,7 @@ public class DefaultHandler implements IOHandler, PropertyHandler, CopyMoveHandl + try { + return contextItem != null && contextItem.isNode() && (isCollection || ((Node)contextItem).hasNode(JcrConstants.JCR_CONTENT)); + } catch (RepositoryException e) { +- log.error("Unexpected error: " + e.getMessage()); ++ log.error("Unexpected error: {}", e.getMessage()); + return false; + } + } +@@ -620,7 +620,7 @@ public class DefaultHandler implements IOHandler, PropertyHandler, CopyMoveHandl + setJcrProperty(prop, cn); + } else { + // ignore any other entry in the change list +- log.error("unknown object in change list: " + propEntry.getClass().getName()); ++ log.error("unknown object in change list: {}", propEntry.getClass().getName()); + } + } catch (RepositoryException e) { + failures.put(propEntry, e); +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultIOListener.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultIOListener.java +index 7e88391..311fbd8 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultIOListener.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/DefaultIOListener.java +@@ -40,20 +40,20 @@ public class DefaultIOListener implements IOListener { + * @see IOListener#onBegin(IOHandler, IOContext) + */ + public void onBegin(IOHandler handler, IOContext ioContext) { +- ioLog.debug("Starting IOHandler (" + handler.getName() + ")"); ++ ioLog.debug("Starting IOHandler ({})", handler.getName()); + } + + /** + * @see IOListener#onEnd(IOHandler, IOContext, boolean) + */ + public void onEnd(IOHandler handler, IOContext ioContext, boolean success) { +- ioLog.debug("Result for IOHandler (" + handler.getName() + "): " + (success ? "OK" : "Failed")); ++ ioLog.debug("Result for IOHandler ({}): {}", handler.getName(), success ? "OK" : "Failed"); + } + + /** + * @see IOListener#onError(IOHandler, IOContext, Exception) + */ + public void onError(IOHandler ioHandler, IOContext ioContext, Exception e) { +- ioLog.debug("Error: " + e.getMessage()); ++ ioLog.debug("Error: {}", e.getMessage()); + } + } +\ No newline at end of file +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/ZipHandler.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/ZipHandler.java +index a99585b..edba2dc 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/ZipHandler.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/io/ZipHandler.java +@@ -228,7 +228,7 @@ public class ZipHandler extends DefaultHandler { + */ + private boolean importZipEntry(ZipInputStream zin, ZipEntry entry, ImportContext context, Node node) throws RepositoryException, IOException { + boolean success = false; +- log.debug("entry: " + entry.getName() + " size: " + entry.getSize()); ++ log.debug("entry: {} size: {}", entry.getName(), entry.getSize()); + if (entry.isDirectory()) { + IOUtil.mkDirs(node, makeValidJCRPath(entry.getName(), false), getCollectionNodeType()); + success = true; +@@ -260,7 +260,7 @@ public class ZipHandler extends DefaultHandler { + if (appendLeadingSlash && !label.startsWith("/")) { + label = "/" + label; + } +- StringBuffer ret = new StringBuffer(label.length()); ++ StringBuilder ret = new StringBuilder(label.length()); + for (int i=0; i()); +- log.debug("login: User '" + repSession.getUserID() + "' logged in."); ++ log.debug("login: User '{}' logged in.", repSession.getUserID()); + } else { +- log.debug("login: Retrieved cached session for user '" + getUserID(session) + "'"); ++ log.debug("login: Retrieved cached session for user '{}'", getUserID(session)); + } + addReference(session, request); + return session; +@@ -268,10 +268,10 @@ public class JCRWebdavServer implements DavSessionProvider { + Set referenceSet = sessionMap.get(session); + if (referenceSet != null) { + if (referenceSet.remove(reference)) { +- log.debug("Removed reference " + reference + " to session " + session); ++ log.debug("Removed reference {} to session {}", reference, session); + referenceToSessionMap.remove(reference); + } else { +- log.warn("Failed to remove reference " + reference + " to session " + session); ++ log.warn("Failed to remove reference {} to session {}", reference, session); + } + if (referenceSet.isEmpty()) { + log.debug("No more references present on webdav session -> clean up."); +@@ -280,14 +280,14 @@ public class JCRWebdavServer implements DavSessionProvider { + Session repSession = DavSessionImpl.getRepositorySession(session); + String usr = getUserID(session) ; + sessionProvider.releaseSession(repSession); +- log.debug("Login: User '" + usr + "' logged out"); ++ log.debug("Login: User '{}' logged out", usr); + } catch (DavException e) { + // should not occur, since we originally built a + // DavSessionImpl that wraps a repository session. +- log.error("Unexpected error: " + e.getMessage(), e.getCause()); ++ log.error("Unexpected error: {}", e.getMessage(), e.getCause()); + } + } else { +- log.debug(referenceSet.size() + " references remaining on webdav session " + session); ++ log.debug("{} references remaining on webdav session {}", referenceSet.size(), session); + } + } else { + log.error("Failed to remove reference from session. No entry in cache found."); +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/BatchReadConfig.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/BatchReadConfig.java +index b7c5fba..f546d6d 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/BatchReadConfig.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/BatchReadConfig.java +@@ -73,7 +73,7 @@ class BatchReadConfig { + try { + int depth = Integer.parseInt(depthStr); + if (depth < DEPTH_INFINITE) { +- log.warn("invalid depth " + depthStr + " -> ignoring."); ++ log.warn("invalid depth {} -> ignoring.", depthStr); + continue; + } + if (NAME_DEFAULT.equals(name)) { +@@ -83,7 +83,7 @@ class BatchReadConfig { + } + } catch (NumberFormatException e) { + // invalid entry in the properties file -> ignore +- log.warn("Invalid depth value for name " + name + ". " + depthStr + " cannot be parsed into an integer."); ++ log.warn("Invalid depth value for name {}. {} cannot be parsed into an integer.", name, depthStr); + } + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/DiffParser.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/DiffParser.java +index bfb64c1..d55991f 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/DiffParser.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/DiffParser.java +@@ -67,8 +67,8 @@ class DiffParser { + int action = -1; + String path = null; + +- StringBuffer lineSeparator = null; +- StringBuffer bf = null; ++ StringBuilder lineSeparator = null; ++ StringBuilder bf = null; + + int state = STATE_START_LINE; + int next = reader.read(); +@@ -110,7 +110,7 @@ class DiffParser { + if (Character.isWhitespace((char) next) || next == ':') { + throw new DiffException("Invalid start of target path '" + next + "'"); + } +- bf = new StringBuffer(); ++ bf = new StringBuilder(); + bf.append((char) next); + state = STATE_TARGET; + break; +@@ -131,12 +131,12 @@ class DiffParser { + + case STATE_START_VALUE: + if (isLineSeparator(next)) { +- lineSeparator = new StringBuffer(); ++ lineSeparator = new StringBuilder(); + lineSeparator.append((char) next); +- bf = new StringBuffer(); ++ bf = new StringBuilder(); + state = STATE_START_LINE; + } else { +- bf = new StringBuffer(); ++ bf = new StringBuilder(); + bf.append((char) next); + state = STATE_VALUE; + } +@@ -144,7 +144,7 @@ class DiffParser { + + case STATE_VALUE: + if (isLineSeparator(next)) { +- lineSeparator = new StringBuffer(); ++ lineSeparator = new StringBuilder(); + lineSeparator.append((char) next); + state = STATE_START_LINE; + } else { +@@ -177,7 +177,7 @@ class DiffParser { + informAction(action, path, bf); + } + +- private void informAction(int action, String path, StringBuffer diffVal) throws DiffException { ++ private void informAction(int action, String path, CharSequence diffVal) throws DiffException { + if (path == null) { + throw new DiffException("Missing path for action " + action + "(diffValue = '"+ diffVal +"')"); + } +@@ -208,7 +208,7 @@ class DiffParser { + return c == '\n' || c == '\r'; + + } +- private static boolean endsWithDelim(StringBuffer bf) { ++ private static boolean endsWithDelim(CharSequence bf) { + if (bf.length() < 2) { + return false; + } else { +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JcrRemotingServlet.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JcrRemotingServlet.java +index 7527244..c13d1b6 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JcrRemotingServlet.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JcrRemotingServlet.java +@@ -267,7 +267,7 @@ public abstract class JcrRemotingServlet extends JCRWebdavServerServlet { + brConfig.load(in); + } + } catch (IOException e) { +- log.debug("Unable to build BatchReadConfig from " + brConfigParam + "."); ++ log.debug("Unable to build BatchReadConfig from {}.", brConfigParam); + } + } + +@@ -283,7 +283,7 @@ public abstract class JcrRemotingServlet extends JCRWebdavServerServlet { + protectedRemoveManager = new ProtectedRemoveManager(protectedHandlerConfig); + } + } catch (IOException e) { +- log.debug("Unable to create ProtectedRemoveManager from " + protectedHandlerConfig , e); ++ log.debug("Unable to create ProtectedRemoveManager from {}", protectedHandlerConfig, e); + } finally{ + if (in != null){ + try { +@@ -316,10 +316,9 @@ public abstract class JcrRemotingServlet extends JCRWebdavServerServlet { + try { + tmp = tmp.getCanonicalFile(); + tmp.mkdirs(); +- log.debug(" temp-directory = " + tmp.getPath()); ++ log.debug(" temp-directory = {}", tmp.getPath()); + } catch (IOException e) { +- log.warn("Invalid temporary directory " + tmp.getPath() +- + ", using system default instead", e); ++ log.warn("Invalid temporary directory {}, using system default instead", tmp.getPath(), e); + tmp = null; + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java +index fed6cda..bb90137 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java +@@ -272,17 +272,17 @@ class JsonDiffHandler implements DiffHandler { + * @throws RepositoryException + */ + String getItemPath(String diffPath) throws RepositoryException { +- StringBuffer itemPath; ++ StringBuilder itemPath; + if (!diffPath.startsWith("/")) { + // diff path is relative to the item path retrieved from the + // request URI -> calculate item path. +- itemPath = new StringBuffer(requestItemPath); ++ itemPath = new StringBuilder(requestItemPath); + if (!requestItemPath.endsWith("/")) { + itemPath.append('/'); + } + itemPath.append(diffPath); + } else { +- itemPath = new StringBuffer(diffPath); ++ itemPath = new StringBuilder(diffPath); + } + return normalize(itemPath.toString()); + } +@@ -1000,7 +1000,7 @@ class JsonDiffHandler implements DiffHandler { + try { + // Multi-valued property with values present in the request + // multi-part +- if (values.size() == 0) { ++ if (values.isEmpty()) { + values = Arrays.asList(extractValuesFromRequest(getPath())); + } + +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java +index cf60e83..d0d12c5 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java +@@ -112,7 +112,7 @@ abstract class AbstractItemResource extends AbstractResource implements + prop = new DefaultDavProperty(JCR_DEFINITION, val, true); + } catch (RepositoryException e) { + // should not get here +- log.error("Error while accessing item definition: " + e.getMessage()); ++ log.error("Error while accessing item definition: {}", e.getMessage()); + } + } + } else if (JCR_ISNEW.equals(name)) { +@@ -199,7 +199,7 @@ abstract class AbstractItemResource extends AbstractResource implements + outputContext.setContentLength(length); + } + } catch (NumberFormatException e) { +- log.error("Could not build content length from property value '" + contentLength.getValue() + "'"); ++ log.error("Could not build content length from property value '{}'", contentLength.getValue()); + } + } + DavProperty contentLanguage = getProperty(DavPropertyName.GETCONTENTLANGUAGE); +@@ -227,7 +227,7 @@ abstract class AbstractItemResource extends AbstractResource implements + try { + collection = createResourceFromLocator(parentLoc); + } catch (DavException e) { +- log.error("Unexpected error while retrieving collection: " + e.getMessage()); ++ log.error("Unexpected error while retrieving collection: {}", e.getMessage()); + } + + return collection; +@@ -302,7 +302,7 @@ abstract class AbstractItemResource extends AbstractResource implements + if (getLocator().isSameWorkspace(destination.getLocator())) { + workspace.copy(itemPath, destItemPath); + } else { +- log.error("Copy between workspaces is not yet implemented (src: '" + getHref() + "', dest: '" + destination.getHref() + "')"); ++ log.error("Copy between workspaces is not yet implemented (src: '{}', dest: '{}')", getHref(), destination.getHref()); + throw new DavException(DavServletResponse.SC_NOT_IMPLEMENTED); + } + } catch (PathNotFoundException e) { +@@ -379,7 +379,7 @@ abstract class AbstractItemResource extends AbstractResource implements + names.add(JCR_PARENT); + } + } catch (RepositoryException e) { +- log.warn("Error while accessing node depth: " + e.getMessage()); ++ log.warn("Error while accessing node depth: {}", e.getMessage()); + } + if (item.isNew()) { + names.add(JCR_ISNEW); +@@ -410,7 +410,7 @@ abstract class AbstractItemResource extends AbstractResource implements + } + } catch (RepositoryException e) { + // should not get here +- log.error("Error while accessing jcr properties: " + e.getMessage()); ++ log.error("Error while accessing jcr properties: {}", e.getMessage()); + } + } + } +@@ -449,11 +449,11 @@ abstract class AbstractItemResource extends AbstractResource implements + } + } catch (RepositoryException e) { + // this includes LockException, ConstraintViolationException etc. not detected before +- log.error("Error while completing request: " + e.getMessage() +" -> reverting changes."); ++ log.error("Error while completing request: {} -> reverting changes.", e.getMessage()); + try { + item.refresh(false); + } catch (RepositoryException re) { +- log.error("Error while reverting changes: " + re.getMessage()); ++ log.error("Error while reverting changes: {}", re.getMessage()); + } + throw new JcrDavException(e); + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java +index b6f1a48..8f7a978 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java +@@ -820,10 +820,10 @@ abstract class AbstractResource implements DavResource, TransactionResource, + + } catch (DavException e) { + // should not occur +- log.error("Error while building MultiStatusResponse from Event: " + e.getMessage()); ++ log.error("Error while building MultiStatusResponse from Event: {}", e.getMessage()); + } catch (RepositoryException e) { + // should not occur +- log.error("Error while building MultiStatusResponse from Event: " + e.getMessage()); ++ log.error("Error while building MultiStatusResponse from Event: {}", e.getMessage()); + } + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java +index 391452c..251c92c 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java +@@ -77,7 +77,7 @@ public class DavLocatorFactoryImpl extends AbstractLocatorFactory { + @Override + protected String getResourcePath(String repositoryPath, String wspPath) { + if (wspPath != null) { +- StringBuffer b = new StringBuffer(wspPath); ++ StringBuilder b = new StringBuilder(wspPath); + if (repositoryPath != null) { + b.append(ItemResourceConstants.ROOT_ITEM_RESOURCEPATH); + if (!ItemResourceConstants.ROOT_ITEM_PATH.equals(repositoryPath)) { +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java +index 79b867e..8968cd6 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java +@@ -27,7 +27,6 @@ import javax.jcr.version.VersionHistory; + import javax.servlet.http.HttpServletResponse; + + import org.apache.jackrabbit.JcrConstants; +-import org.apache.jackrabbit.util.Text; + import org.apache.jackrabbit.webdav.DavException; + import org.apache.jackrabbit.webdav.DavMethods; + import org.apache.jackrabbit.webdav.DavResource; +@@ -145,7 +144,7 @@ public class DavResourceFactoryImpl implements DavResourceFactory { + resource = new DefaultItemResource(locator, session, this, null); + } + } catch (RepositoryException e) { +- log.error("Failed to build resource from item '"+ locator.getRepositoryPath() + "'"); ++ log.error("Failed to build resource from item '{}'", locator.getRepositoryPath()); + throw new JcrDavException(e); + } + } +@@ -182,7 +181,7 @@ public class DavResourceFactoryImpl implements DavResourceFactory { + try { + resource = createResourceForItem(locator, sessionImpl); + } catch (RepositoryException e) { +- log.debug("Creating resource for non-existing repository item: " + locator.getRepositoryPath()); ++ log.debug("Creating resource for non-existing repository item: {}", locator.getRepositoryPath()); + // todo: is this correct? + resource = new VersionControlledItemCollection(locator, sessionImpl, this, null); + } +@@ -243,7 +242,7 @@ public class DavResourceFactoryImpl implements DavResourceFactory { + try { + vc = ((VersionControlledResource)resource).getVersionHistory() != null; + } catch (DavException e) { +- log.debug("Resource '" + resource.getHref() + "' is not version-controlled."); ++ log.debug("Resource '{}' is not version-controlled.", resource.getHref()); + } + } + return vc; +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java +index b6e3eff..17f7237 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java +@@ -164,7 +164,7 @@ public class DefaultItemCollection extends AbstractItemResource + public String getSupportedMethods() { + String ms = super.getSupportedMethods(); + if (isOrderable()) { +- StringBuffer sb = new StringBuffer(ms); ++ StringBuilder sb = new StringBuilder(ms); + sb.append(", ").append(OrderingResource.METHODS); + return sb.toString(); + } else { +@@ -202,9 +202,9 @@ public class DefaultItemCollection extends AbstractItemResource + getRepositorySession().exportSystemView(item.getPath(), out, false, true); + } + } catch (PathNotFoundException e) { +- log.error("Error while spooling resource content: " + e.getMessage()); ++ log.error("Error while spooling resource content: {}", e.getMessage()); + } catch (RepositoryException e) { +- log.error("Error while spooling resource content: " + e.getMessage()); ++ log.error("Error while spooling resource content: {}", e.getMessage()); + } + } + +@@ -241,7 +241,7 @@ public class DefaultItemCollection extends AbstractItemResource + prop = new JcrUserPrivilegesProperty(getRepositorySession(), n.getPath()).asDavProperty(); + } + } catch (RepositoryException e) { +- log.error("Failed to retrieve node-specific property: " + e); ++ log.error("Failed to retrieve node-specific property: {}", (Object) e); + } + } + +@@ -485,7 +485,7 @@ public class DefaultItemCollection extends AbstractItemResource + } else { + BufferedReader r = new BufferedReader(new InputStreamReader(inputContext.getInputStream(), charSet)); + String line; +- StringBuffer value = new StringBuffer(); ++ StringBuilder value = new StringBuilder(); + while ((line = r.readLine()) != null) { + value.append(line); + } +@@ -590,7 +590,7 @@ public class DefaultItemCollection extends AbstractItemResource + getRepositorySession().getItem(itemPath).remove(); + complete(); + } catch (RepositoryException e) { +- log.error("Unexpected error: " + e.getMessage()); ++ log.error("Unexpected error: {}", e.getMessage()); + throw new JcrDavException(e); + } + } +@@ -636,7 +636,7 @@ public class DefaultItemCollection extends AbstractItemResource + if (Type.WRITE.equals(type)) { + try { + if (!exists()) { +- log.warn("Unable to retrieve lock: no item found at '" + getResourcePath() + "'"); ++ log.warn("Unable to retrieve lock: no item found at '{}'", getResourcePath()); + } else if (((Node) item).isLocked()) { + Lock jcrLock = ((Node) item).getLock(); + lock = new JcrActiveLock(jcrLock); +@@ -648,11 +648,11 @@ public class DefaultItemCollection extends AbstractItemResource + lock.setLockroot(lockroot); + } + } catch (AccessDeniedException e) { +- log.error("Error while accessing resource lock: "+e.getMessage()); ++ log.error("Error while accessing resource lock: {}", e.getMessage()); + } catch (UnsupportedRepositoryOperationException e) { +- log.error("Error while accessing resource lock: "+e.getMessage()); ++ log.error("Error while accessing resource lock: {}", e.getMessage()); + } catch (RepositoryException e) { +- log.error("Error while accessing resource lock: "+e.getMessage()); ++ log.error("Error while accessing resource lock: {}", e.getMessage()); + } + } else { + lock = super.getLock(type, scope); +@@ -681,7 +681,7 @@ public class DefaultItemCollection extends AbstractItemResource + + if (Type.WRITE.equals(reqLockInfo.getType())) { + if (!exists()) { +- log.warn("Cannot create a write lock for non-existing JCR node (" + getResourcePath() + ")"); ++ log.warn("Cannot create a write lock for non-existing JCR node ({})", getResourcePath()); + throw new DavException(DavServletResponse.SC_NOT_FOUND); + } + try { +@@ -985,7 +985,7 @@ public class DefaultItemCollection extends AbstractItemResource + properties.add(new NodeTypeProperty(JCR_PRIMARYNODETYPE, n.getPrimaryNodeType(), false)); + properties.add(new NodeTypeProperty(JCR_MIXINNODETYPES, n.getMixinNodeTypes(), false)); + } catch (RepositoryException e) { +- log.error("Failed to retrieve node-specific property: " + e); ++ log.error("Failed to retrieve node-specific property: {}", (Object) e); + } + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java +index 763b933..dfb33f9 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java +@@ -152,13 +152,13 @@ public class DefaultItemResource extends AbstractItemResource { + transformer.transform( + new DOMSource(doc), new SAXResult(handler)); + } catch (SAXException e) { +- log.error("Failed to set up XML serializer for " + item, e); ++ log.error("Failed to set up XML serializer for {}", item, e); + } catch (TransformerConfigurationException e) { +- log.error("Failed to set up XML transformer for " + item, e); ++ log.error("Failed to set up XML transformer for {}", item, e); + } catch (ParserConfigurationException e) { +- log.error("Failed to set up XML document for " + item, e); ++ log.error("Failed to set up XML document for {}", item, e); + } catch (TransformerException e) { +- log.error("Failed to serialize the values of " + item, e); ++ log.error("Failed to serialize the values of {}", item, e); + } + } + +@@ -176,7 +176,7 @@ public class DefaultItemResource extends AbstractItemResource { + binary.dispose(); + } + } catch (RepositoryException e) { +- log.error("Cannot obtain stream from " + item, e); ++ log.error("Cannot obtain stream from {}", item, e); + } + } + +@@ -202,7 +202,7 @@ public class DefaultItemResource extends AbstractItemResource { + } + } + } catch (RepositoryException e) { +- log.error("Failed to retrieve resource properties: "+e.getMessage()); ++ log.error("Failed to retrieve resource properties: {}", e.getMessage()); + } + } + +@@ -396,7 +396,7 @@ public class DefaultItemResource extends AbstractItemResource { + properties.add(new ValuesProperty(prop.getValue())); + } + } catch (RepositoryException e) { +- log.error("Failed to retrieve resource properties: "+e.getMessage()); ++ log.error("Failed to retrieve resource properties: {}", e.getMessage()); + } + } + } +@@ -414,7 +414,7 @@ public class DefaultItemResource extends AbstractItemResource { + return true; + } + } catch (RepositoryException e) { +- log.error("Error while retrieving property definition: " + e.getMessage()); ++ log.error("Error while retrieving property definition: {}", e.getMessage()); + } + return false; + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JCRWebdavServerServlet.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JCRWebdavServerServlet.java +index 2a78844..9554688 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JCRWebdavServerServlet.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JCRWebdavServerServlet.java +@@ -98,7 +98,7 @@ public abstract class JCRWebdavServerServlet extends AbstractWebdavServlet { + // set resource path prefix + pathPrefix = getInitParameter(INIT_PARAM_RESOURCE_PATH_PREFIX); + getServletContext().setAttribute(CTX_ATTR_RESOURCE_PATH_PREFIX, pathPrefix); +- log.debug(INIT_PARAM_RESOURCE_PATH_PREFIX + " = " + pathPrefix); ++ log.debug(INIT_PARAM_RESOURCE_PATH_PREFIX + " = {}", pathPrefix); + + txMgr = new TxLockManagerImpl(); + subscriptionMgr = new SubscriptionManagerImpl(); +@@ -139,7 +139,7 @@ public abstract class JCRWebdavServerServlet extends AbstractWebdavServlet { + return false; + } + } catch (DavException e) { +- log.error("Internal error: " + e.toString()); ++ log.error("Internal error: {}", (Object) e); + return false; + } + +@@ -164,7 +164,7 @@ public abstract class JCRWebdavServerServlet extends AbstractWebdavServlet { + try { + server = new JCRWebdavServer(repository, getSessionProvider(), Integer.parseInt(cl)); + } catch (NumberFormatException e) { +- log.debug("Invalid value '" + cl+ "' for init-param 'concurrency-level'. Using default instead."); ++ log.debug("Invalid value '{}' for init-param 'concurrency-level'. Using default instead.", cl); + server = new JCRWebdavServer(repository, getSessionProvider()); + } + } else { +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavSession.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavSession.java +index d4fe9c2..2e83f48 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavSession.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavSession.java +@@ -104,7 +104,7 @@ public abstract class JcrDavSession implements DavSession { + session.getWorkspace().getLockManager().addLockToken(LockTokenMapper.getJcrLockToken(token)); + } + catch (RepositoryException ex) { +- log.debug("trying to add lock token " + token + " to session", ex); ++ log.debug("trying to add lock token {} to session", token, ex); + } + } + lockTokens.add(token); +@@ -132,7 +132,7 @@ public abstract class JcrDavSession implements DavSession { + session.getWorkspace().getLockManager().removeLockToken(LockTokenMapper.getJcrLockToken(token)); + } + catch (RepositoryException ex) { +- log.debug("trying to remove lock token " + token + " to session", ex); ++ log.debug("trying to remove lock token {} to session", token, ex); + } + } + lockTokens.remove(token); +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java +index a86a369..e7169d3 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java +@@ -111,7 +111,7 @@ public class RootCollection extends AbstractResource { + prop = new JcrSupportedPrivilegesProperty(getRepositorySession()).asDavProperty(); + } + } catch (RepositoryException e) { +- log.error("Failed to build SupportedPrivilegeSet property: " + e.getMessage()); ++ log.error("Failed to build SupportedPrivilegeSet property: {}", e.getMessage()); + } + } + return prop; +@@ -229,7 +229,7 @@ public class RootCollection extends AbstractResource { + */ + @Override + public DavResourceIterator getMembers() { +- List memberList = new ArrayList(); ++ List memberList = new ArrayList(); + try { + String[] wsNames = getRepositorySession().getWorkspace().getAccessibleWorkspaceNames(); + for (String wsName : wsNames) { +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java +index 7542b8e..556929d 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java +@@ -98,7 +98,7 @@ public class VersionControlledItemCollection extends DefaultItemCollection + */ + @Override + public String getSupportedMethods() { +- StringBuffer sb = new StringBuffer(super.getSupportedMethods()); ++ StringBuilder sb = new StringBuilder(super.getSupportedMethods()); + // Versioning support + sb.append(", ").append(VersionableResource.METHODS); + if (isVersionControlled()) { +@@ -695,7 +695,7 @@ public class VersionControlledItemCollection extends DefaultItemCollection + return sb.toString(); + } + catch (java.net.URISyntaxException ex) { +- log.warn("parsing " + uri, ex); ++ log.warn("parsing {}", uri, ex); + return uri; + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java +index 8df49b8..0291f96 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java +@@ -135,9 +135,9 @@ public class WorkspaceResourceImpl extends AbstractResource + prop = new JcrUserPrivilegesProperty(getRepositorySession(), null).asDavProperty(); + } + } catch (RepositoryException e) { +- log.error("Failed to access NodeTypeManager: " + e.getMessage()); ++ log.error("Failed to access NodeTypeManager: {}", e.getMessage()); + } catch (IOException e) { +- log.error("Failed to write compact node definition: " + e.getMessage()); ++ log.error("Failed to write compact node definition: {}", e.getMessage()); + } finally { + if (writer != null) { + try { +@@ -281,7 +281,7 @@ public class WorkspaceResourceImpl extends AbstractResource + try { + collection = createResourceFromLocator(parentLoc); + } catch (DavException e) { +- log.error("Unexpected error while retrieving collection: " + e.getMessage()); ++ log.error("Unexpected error while retrieving collection: {}", e.getMessage()); + } + return collection; + } +@@ -620,7 +620,7 @@ public class WorkspaceResourceImpl extends AbstractResource + DavProperty namespacesProp = new NamespacesProperty(nsReg); + properties.add(namespacesProp); + } catch (RepositoryException e) { +- log.error("Failed to access NamespaceRegistry: " + e.getMessage()); ++ log.error("Failed to access NamespaceRegistry: {}", e.getMessage()); + } + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java +index f7ebd9a..e06372f 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java +@@ -71,7 +71,7 @@ public class JcrActiveLock extends AbstractActiveLock implements ActiveLock, Dav + try { + return !lock.isLive(); + } catch (RepositoryException e) { +- log.error("Unexpected error: " + e.getMessage()); ++ log.error("Unexpected error: {}", e.getMessage()); + return false; + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java +index 5d76160..4ba6171 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java +@@ -353,7 +353,7 @@ public class SubscriptionImpl implements Subscription, ObservationConstants, Eve + try { + obsMgr.removeEventListener(this); + } catch (RepositoryException e) { +- log.warn("Exception while unsubscribing: " + e); ++ log.warn("Exception while unsubscribing: {}", (Object) e); + } + } + notifyAll(); +@@ -610,9 +610,9 @@ public class SubscriptionImpl implements Subscription, ObservationConstants, Eve + // suspend the subscription + suspend(); + } catch (RepositoryException e) { +- log.warn("Unable to register TransactionListener: " + e); ++ log.warn("Unable to register TransactionListener: {}", (Object) e); + } catch (DavException e) { +- log.warn("Unable to register TransactionListener: " + e); ++ log.warn("Unable to register TransactionListener: {}", (Object) e); + } + } + +@@ -628,9 +628,9 @@ public class SubscriptionImpl implements Subscription, ObservationConstants, Eve + // remove this transaction event + obsMgr.removeEventListener(this); + } catch (RepositoryException e) { +- log.warn("Unable to remove listener: " + e); ++ log.warn("Unable to remove listener: {}", (Object) e); + } catch (DavException e) { +- log.warn("Unable to resume Subscription: " + e); ++ log.warn("Unable to resume Subscription: {}", (Object) e); + } + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java +index 7cf13b5..8d112d3 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java +@@ -132,7 +132,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager, Transaction + subscription.getNodetypeNameFilters(), + subscription.isNoLocal()); + } catch (RepositoryException e) { +- log.error("Unable to register eventlistener: "+e.getMessage()); ++ log.error("Unable to register eventlistener: {}", e.getMessage()); + throw new JcrDavException(e); + } + } +@@ -174,7 +174,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager, Transaction + resource.getSession().removeReference(sId); + + } catch (RepositoryException e) { +- log.error("Unable to remove eventlistener: "+e.getMessage()); ++ log.error("Unable to remove eventlistener: {}", e.getMessage()); + throw new JcrDavException(e); + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java +index 716048b..ab29f7f 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java +@@ -184,7 +184,7 @@ public class ValuesProperty extends AbstractDavProperty implements Item + elem.appendChild(xmlValue); + } + } catch (RepositoryException e) { +- log.error("Unexpected Error while converting jcr value to String: " + e.getMessage()); ++ log.error("Unexpected Error while converting jcr value to String: {}", e.getMessage()); + } + return elem; + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java +index 304a0ec..606e957 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java +@@ -179,7 +179,7 @@ public class SearchResourceImpl implements SearchResource { + try { + session.setNamespacePrefix(nsReg.getPrefix(uri), uri); + } catch (RepositoryException e) { +- log.warn("Unable to reset mapping of namespace: " + uri); ++ log.warn("Unable to reset mapping of namespace: {}", uri); + } + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/transaction/TxLockManagerImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/transaction/TxLockManagerImpl.java +index c8a88e8..4e161c3 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/transaction/TxLockManagerImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/transaction/TxLockManagerImpl.java +@@ -400,12 +400,12 @@ public class TxLockManagerImpl implements TxLockManager { + */ + private static void removeExpired(Transaction tx, TransactionMap responsibleMap, + TransactionResource resource) { +- log.debug("Removing expired transaction lock " + tx); ++ log.debug("Removing expired transaction lock {}", tx); + try { + tx.rollback(resource); + removeReferences(tx, responsibleMap, resource); + } catch (DavException e) { +- log.error("Error while removing expired transaction lock: " + e.getMessage()); ++ log.error("Error while removing expired transaction lock: {}", e.getMessage()); + } + } + +@@ -419,7 +419,7 @@ public class TxLockManagerImpl implements TxLockManager { + */ + private static void addReferences(Transaction tx, TransactionMap responsibleMap, + TransactionResource resource) { +- log.debug("Adding transactionId '" + tx.getId() + "' as session lock token."); ++ log.debug("Adding transactionId '{}' as session lock token.", tx.getId()); + resource.getSession().addLockToken(tx.getId()); + + responsibleMap.put(tx.getId(), tx); +@@ -435,7 +435,7 @@ public class TxLockManagerImpl implements TxLockManager { + */ + private static void removeReferences(Transaction tx, TransactionMap responsibleMap, + TransactionResource resource) { +- log.debug("Removing transactionId '" + tx.getId() + "' from session lock tokens."); ++ log.debug("Removing transactionId '{}' from session lock tokens.", tx.getId()); + resource.getSession().removeLockToken(tx.getId()); + + responsibleMap.remove(tx.getId()); +@@ -589,7 +589,7 @@ public class TxLockManagerImpl implements TxLockManager { + throw new DavException(DavServletResponse.SC_CONFLICT, "Unable to start local transaction: no repository item present at " + getResourcePath()); + } + } catch (RepositoryException e) { +- log.error("Unexpected error: " + e.getMessage()); ++ log.error("Unexpected error: {}", e.getMessage()); + throw new JcrDavException(e); + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java +index 08ca099..2b320bc 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java +@@ -75,7 +75,7 @@ public class VersionHistoryItemCollection extends DefaultItemCollection + */ + @Override + public String getSupportedMethods() { +- StringBuffer sb = new StringBuffer(ItemResourceConstants.METHODS); ++ StringBuilder sb = new StringBuilder(ItemResourceConstants.METHODS); + sb.append(", ").append(VersionHistoryResource.METHODS); + return sb.toString(); + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java +index 3fa5761..bf9f864 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java +@@ -127,7 +127,7 @@ public class VersionItemCollection extends DefaultItemCollection + */ + @Override + public String getSupportedMethods() { +- StringBuffer sb = new StringBuffer(ItemResourceConstants.METHODS); ++ StringBuilder sb = new StringBuilder(ItemResourceConstants.METHODS); + sb.append(", ").append(VersionResource.METHODS); + return sb.toString(); + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java +index 069bc38..8961bd2 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java +@@ -155,7 +155,7 @@ public class JcrPrivilegeReport extends AbstractJcrReport { + return sb.toString(); + } + catch (java.net.URISyntaxException ex) { +- log.warn("parsing " + uri, ex); ++ log.warn("parsing {}", uri, ex); + return uri; + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java +index 0bf7b71..cf3856f 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java +@@ -493,7 +493,7 @@ public class DavResourceImpl implements DavResource, BindableResource, JcrConsta + DavResource childRes = factory.createResource(resourceLocator, session); + list.add(childRes); + } else { +- log.debug("Filtered resource '" + n.getName() + "'."); ++ log.debug("Filtered resource '{}'.", n.getName()); + } + } + } catch (RepositoryException e) { +@@ -521,7 +521,7 @@ public class DavResourceImpl implements DavResource, BindableResource, JcrConsta + // don't allow creation of nodes if this resource represents a protected + // item or if the new resource would be filtered out + if (isFilteredResource(member) || node.getDefinition().isProtected()) { +- log.debug("Forbidden to add member: " + member.getDisplayName()); ++ log.debug("Forbidden to add member: {}", member.getDisplayName()); + throw new DavException(DavServletResponse.SC_FORBIDDEN); + } + +@@ -534,10 +534,10 @@ public class DavResourceImpl implements DavResource, BindableResource, JcrConsta + // persist changes after successful import + node.save(); + } catch (RepositoryException e) { +- log.error("Error while importing resource: " + e.toString()); ++ log.error("Error while importing resource: {}", (Object) e); + throw new JcrDavException(e); + } catch (IOException e) { +- log.error("Error while importing resource: " + e.toString()); ++ log.error("Error while importing resource: {}", (Object) e); + throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); + } + } +@@ -555,7 +555,7 @@ public class DavResourceImpl implements DavResource, BindableResource, JcrConsta + + // don't allow removal of nodes, that would be filtered out + if (isFilteredResource(member)) { +- log.debug("Avoid removal of filtered resource: " + member.getDisplayName()); ++ log.debug("Avoid removal of filtered resource: {}", member.getDisplayName()); + throw new DavException(DavServletResponse.SC_FORBIDDEN); + } + +@@ -1048,7 +1048,7 @@ public class DavResourceImpl implements DavResource, BindableResource, JcrConsta + + public void setProperty(Object propertyName, Object propertyValue) { + if (propertyValue == null) { +- log.warn("Ignore 'setProperty' for " + propertyName + "with null value."); ++ log.warn("Ignore 'setProperty' for {} with null value.", propertyName); + return; + } + +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java +index 6fc82bb..a2cbb42 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java +@@ -88,7 +88,7 @@ public class DavSessionProviderImpl implements DavSessionProvider { + return false; + } + DavSession ds = new DavSessionImpl(repSession); +- log.debug("Attaching session '"+ ds + "' to request '" + request + "'"); ++ log.debug("Attaching session '{}' to request '{}'", ds, request); + request.setDavSession(ds); + return true; + } catch (NoSuchWorkspaceException e) { +@@ -120,7 +120,7 @@ public class DavSessionProviderImpl implements DavSessionProvider { + repSession.removeLockToken(lockToken); + } + sesProvider.releaseSession(repSession); +- log.debug("Releasing session '"+ ds + "' from request '" + request + "'"); ++ log.debug("Releasing session '{}' from request '{}'", ds, request); + } // else : session is null. nothing to be done. + request.setDavSession(null); + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java +index bc1bb53..9dea3d0 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java +@@ -25,6 +25,7 @@ import javax.jcr.Property; + import javax.jcr.RepositoryException; + import javax.jcr.Session; + import java.util.ArrayList; ++import java.util.Arrays; + import java.util.List; + + /** +@@ -46,9 +47,7 @@ public class DefaultItemFilter implements ItemFilter { + */ + public void setFilteredURIs(String[] uris) { + if (uris != null) { +- for (String uri : uris) { +- uriFilter.add(uri); +- } ++ uriFilter.addAll(Arrays.asList(uris)); + } + } + +@@ -57,9 +56,7 @@ public class DefaultItemFilter implements ItemFilter { + */ + public void setFilteredPrefixes(String[] prefixes) { + if (prefixes != null) { +- for (String prefix : prefixes) { +- prefixFilter.add(prefix); +- } ++ prefixFilter.addAll(Arrays.asList(prefixes)); + } + } + +@@ -68,9 +65,7 @@ public class DefaultItemFilter implements ItemFilter { + */ + public void setFilteredNodetypes(String[] nodetypeNames) { + if (nodetypeNames != null) { +- for (String nodetypeName : nodetypeNames) { +- nodetypeFilter.add(nodetypeName); +- } ++ nodetypeFilter.addAll(Arrays.asList(nodetypeNames)); + } + } + +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java +index 70421e6..16dbc36 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java +@@ -39,14 +39,14 @@ public class LocatorFactoryImpl implements DavLocatorFactory { + + public DavResourceLocator createResourceLocator(String prefix, String href) { + // build prefix string and remove all prefixes from the given href. +- StringBuffer b = new StringBuffer(""); ++ StringBuilder b = new StringBuilder(); + if (prefix != null && prefix.length() > 0) { + b.append(prefix); + if (href.startsWith(prefix)) { + href = href.substring(prefix.length()); + } + } +- if (repositoryPrefix != null && repositoryPrefix.length() > 0 && !prefix.endsWith(repositoryPrefix)) { ++ if (repositoryPrefix != null && repositoryPrefix.length() > 0 && !(prefix != null && prefix.endsWith(repositoryPrefix))) { + b.append(repositoryPrefix); + if (href.startsWith(repositoryPrefix)) { + href = href.substring(repositoryPrefix.length()); +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java +index 1292b12..a33a84a 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java +@@ -131,7 +131,7 @@ public class ResourceConfig { + try { + parse(configURL.openStream()); + } catch (IOException e) { +- log.debug("Invalid resource configuration: " + e.getMessage()); ++ log.debug("Invalid resource configuration: {}", e.getMessage()); + } + } + +@@ -198,7 +198,7 @@ public class ResourceConfig { + setParameters(handler, iohEl); + ioManager.addIOHandler(handler); + } else { +- log.warn("Not a valid IOHandler : " + getClassName(iohEl)); ++ log.warn("Not a valid IOHandler : {}", getClassName(iohEl)); + } + } + } else { +@@ -225,7 +225,7 @@ public class ResourceConfig { + setParameters(handler, iohEl); + propManager.addPropertyHandler(handler); + } else { +- log.warn("Not a valid PropertyHandler : " + getClassName(iohEl)); ++ log.warn("Not a valid PropertyHandler : {}", getClassName(iohEl)); + } + } + } else { +@@ -252,7 +252,7 @@ public class ResourceConfig { + setParameters(handler, iohEl); + cmManager.addCopyMoveHandler(handler); + } else { +- log.warn("Not a valid CopyMoveHandler : " + getClassName(iohEl)); ++ log.warn("Not a valid CopyMoveHandler : {}", getClassName(iohEl)); + } + } + } else { +@@ -293,11 +293,11 @@ public class ResourceConfig { + log.warn("Ignoring deprecated mimetypeproperties settings"); + } + } catch (IOException e) { +- log.debug("Invalid resource configuration: " + e.getMessage()); ++ log.debug("Invalid resource configuration: {}", e.getMessage()); + } catch (ParserConfigurationException e) { +- log.warn("Failed to parse resource configuration: " + e.getMessage()); ++ log.warn("Failed to parse resource configuration: {}", e.getMessage()); + } catch (SAXException e) { +- log.warn("Failed to parse resource configuration: " + e.getMessage()); ++ log.warn("Failed to parse resource configuration: {}", e.getMessage()); + } + } + +@@ -356,7 +356,7 @@ public class ResourceConfig { + log.error("Invalid configuration: missing 'class' element"); + } + } catch (Exception e) { +- log.error("Error while create class instance: " + e.getMessage()); ++ log.error("Error while create class instance: {}", e.getMessage()); + } + } + return instance; +@@ -412,10 +412,11 @@ public class ResourceConfig { + || type.isAssignableFrom(Double.class)) { + setter.invoke(instance, Double.valueOf(value)); + } else { +- log.error("Cannot set configuration property " + name); ++ log.error("Cannot set configuration property {}", name); + } + } catch (Exception e) { +- log.error("Invalid format (" + value + ") for property " + name + " of class " + instance.getClass().getName(), e); ++ log.error("Invalid format ({}) for property {} of class {}", ++ new Object[] { value, name, instance.getClass().getName(), e }); + } + } + } +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java +index 2cff084..2fedd9c 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/SimpleWebdavServlet.java +@@ -141,7 +141,7 @@ public abstract class SimpleWebdavServlet extends AbstractWebdavServlet { + resourcePathPrefix = resourcePathPrefix.substring(0, resourcePathPrefix.length() - 1); + } + getServletContext().setAttribute(CTX_ATTR_RESOURCE_PATH_PREFIX, resourcePathPrefix); +- log.info(INIT_PARAM_RESOURCE_PATH_PREFIX + " = '" + resourcePathPrefix + "'"); ++ log.info(INIT_PARAM_RESOURCE_PATH_PREFIX + " = '{}'", resourcePathPrefix); + + config = new ResourceConfig(getDetector()); + String configParam = getInitParameter(INIT_PARAM_RESOURCE_CONFIG); +diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/VersionControlledResourceImpl.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/VersionControlledResourceImpl.java +index d98a279..e7b4042 100644 +--- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/VersionControlledResourceImpl.java ++++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/VersionControlledResourceImpl.java +@@ -98,7 +98,7 @@ public class VersionControlledResourceImpl extends DeltaVResourceImpl + */ + @Override + public String getSupportedMethods() { +- StringBuffer sb = new StringBuffer(super.getSupportedMethods()); ++ StringBuilder sb = new StringBuilder(super.getSupportedMethods()); + // Versioning support + sb.append(", ").append(VersionableResource.METHODS); + if (isVersionControlled()) { +diff --git a/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/simple/LitmusTest.java b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/simple/LitmusTest.java +index bcb2183..3061864 100644 +--- a/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/simple/LitmusTest.java ++++ b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/simple/LitmusTest.java +@@ -121,7 +121,7 @@ public class LitmusTest extends TestCase { + + return rv == 0; + } catch (Exception e) { +- log.warn("litmus is not available: " + litmus, e); ++ log.warn("litmus is not available: {}", litmus, e); + return false; + } + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java +index 25fd2e4..f7fddc3 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java +@@ -677,7 +677,7 @@ public abstract class AbstractJCRTest extends JUnitTest { + */ + protected String createRandomString(int numChars) { + Random rand = new Random(System.currentTimeMillis()); +- StringBuffer tmp = new StringBuffer(numChars); ++ StringBuilder tmp = new StringBuilder(numChars); + for (int i = 0; i < numChars; i++) { + char c = (char) (rand.nextInt(('z' + 1) - 'a') + 'a'); + tmp.append(c); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/ISO8601.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/ISO8601.java +index e418ec2..193c672 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/ISO8601.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/ISO8601.java +@@ -222,7 +222,7 @@ public final class ISO8601 { + * note that we cannot use java.text.SimpleDateFormat for + * formatting because it can't handle years <= 0 and TZD's + */ +- StringBuffer buf = new StringBuffer(); ++ StringBuilder buf = new StringBuilder(30); + // year ([-]YYYY) + appendZeroPaddedInt(buf, getYear(cal), 4); + buf.append('-'); +@@ -294,11 +294,11 @@ public final class ISO8601 { + * This is an internal helper method which doesn't perform any + * validation on the given arguments. + * +- * @param buf String buffer to append to ++ * @param buf String builder to append to + * @param n number to append + * @param precision number of digits to append + */ +- private static void appendZeroPaddedInt(StringBuffer buf, int n, int precision) { ++ private static void appendZeroPaddedInt(StringBuilder buf, int n, int precision) { + if (n < 0) { + buf.append('-'); + n = -n; +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/LogPrintWriter.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/LogPrintWriter.java +index 435fcca..74c068d 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/LogPrintWriter.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/LogPrintWriter.java +@@ -31,7 +31,7 @@ public class LogPrintWriter extends PrintWriter { + /** + * Internal buffer. + */ +- private StringBuffer buffer = new StringBuffer(); ++ private final StringBuilder buffer = new StringBuilder(); + + /** + * Logger for message output. +@@ -97,42 +97,52 @@ public class LogPrintWriter extends PrintWriter { + } + + public void write(int c) { +- buffer.append(c); ++ synchronized (buffer) { ++ buffer.append(c); ++ } + } + + public void write(char cbuf[], int off, int len) { +- buffer.append(cbuf, off, len); ++ synchronized (buffer) { ++ buffer.append(cbuf, off, len); ++ } + } + + public void write(String str, int off, int len) { +- buffer.append(str.substring(off, off + len)); ++ synchronized (buffer) { ++ buffer.append(str, off, off + len); ++ } + } + + public void println() { +- if (log == null) { +- // only add newline when operating on a writer +- buffer.append('\n'); ++ synchronized (buffer) { ++ if (log == null) { ++ // only add newline when operating on a writer ++ buffer.append('\n'); ++ } ++ flushBuffer(); + } +- flushBuffer(); + } + + //-----------------------< private methods >-------------------------------- + + private void flushBuffer() { +- if (buffer.length() == 0) { +- return; +- } +- if (log != null) { +- log.debug(buffer.toString()); +- } else { +- try { +- out.write(buffer.toString()); +- } catch (IOException e) { +- this.setError(); ++ synchronized (buffer) { ++ if (buffer.length() == 0) { ++ return; ++ } ++ if (log != null) { ++ log.debug(buffer.toString()); ++ } else { ++ try { ++ out.write(buffer.toString()); ++ } catch (IOException e) { ++ this.setError(); ++ } + } ++ // reset buffer ++ buffer.setLength(0); + } +- // reset buffer +- buffer.setLength(0); + } + + //------------------------< inter classes >--------------------------------- +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java +index c421574..fa1229e 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/EscapeJCRUtil.java +@@ -55,10 +55,9 @@ public class EscapeJCRUtil { + } + + private static String escapeValues(String str) { +- char[] chars = str.toCharArray(); +- StringBuffer buf = new StringBuffer(); +- for (int i = 0; i < chars.length; i++) { +- char c = chars[i]; ++ StringBuilder buf = new StringBuilder(); ++ for (int i = 0; i < str.length(); i++) { ++ char c = str.charAt(i); + if (c == '\u0020' + || c == '\u0009' + || c == '\n' +@@ -97,11 +96,11 @@ public class EscapeJCRUtil { + */ + private static String escapeChar(char c) { + String unicodeRepr = Integer.toHexString(c); +- StringBuffer escaped = new StringBuffer(); ++ StringBuilder escaped = new StringBuilder(); + escaped.append("_x"); + escaped.append(Utf16Padding, 0, utf16length - unicodeRepr.length()); + escaped.append(unicodeRepr); +- escaped.append("_"); ++ escaped.append('_'); + return escaped.toString(); + } + +@@ -112,19 +111,17 @@ public class EscapeJCRUtil { + * @return + */ + private static String escape(String str) { +- char[] chars = str.toCharArray(); +- StringBuffer buf = new StringBuffer(); ++ StringBuilder buf = new StringBuilder(); + +- for (int i = 0; i < chars.length; i++) { +- char c = chars[i]; ++ for (int i = 0; i < str.length(); i++) { ++ char c = str.charAt(i); + // handle start character + if (i == 0) { + if (!XMLChar.isNameStart(c)) { + String escaped = escapeChar(c); + buf.append(escaped); + } else { +- String substr = str.substring(i, str.length()); +- if (canMisinterpret(substr)) { ++ if (canMisinterpret(str.substring(i))) { + buf.append(escapeChar(c)); + } else { + buf.append(c); +@@ -134,8 +131,7 @@ public class EscapeJCRUtil { + if (!XMLChar.isName(c)) { + buf.append(escapeChar(c)); + } else { +- String substr = str.substring(i, str.length()); +- if (canMisinterpret(substr)) { ++ if (canMisinterpret(str.substring(i))) { + buf.append(escapeChar(c)); + } else { + buf.append(c); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/ExportDocViewTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/ExportDocViewTest.java +index 90ed34d..3fb4aa6 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/ExportDocViewTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/ExportDocViewTest.java +@@ -968,7 +968,7 @@ public class ExportDocViewTest extends AbstractJCRTest { + Value[] vals = prop.getValues(); + // order of multi values is preserved. + // multival with empty array is exported as empty string +- StringBuffer exportedVal = new StringBuffer(); ++ StringBuilder exportedVal = new StringBuilder(); + + String space = ""; + if (isBinary) { +@@ -1067,7 +1067,7 @@ public class ExportDocViewTest extends AbstractJCRTest { + */ + private List getChildTextNodeValues(Element elem) { + List textValues = new ArrayList(); +- StringBuffer buf = new StringBuffer(); ++ StringBuilder buf = new StringBuilder(); + org.w3c.dom.Node child = elem.getFirstChild(); + // collect the characters of successive text nodes + while (child != null) { +@@ -1078,7 +1078,7 @@ public class ExportDocViewTest extends AbstractJCRTest { + child = child.getNextSibling(); + } + textValues.add(buf.toString()); +- buf = new StringBuffer(); ++ buf.setLength(0); + } else { + child = child.getNextSibling(); + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeDiscoveringNodeTypesTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeDiscoveringNodeTypesTest.java +index 84d6124..eb33b89 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeDiscoveringNodeTypesTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeDiscoveringNodeTypesTest.java +@@ -126,9 +126,9 @@ public class NodeDiscoveringNodeTypesTest extends AbstractJCRTest { + types.length, + names.length); + +- StringBuffer namesString = new StringBuffer(); ++ StringBuilder namesString = new StringBuilder(); + for (int i = 0; i < names.length; i++) { +- namesString.append("|" + names[i].getString() + "|"); ++ namesString.append('|').append(names[i].getString()).append('|'); + } + + for (int i = 0; i < types.length; i++) { +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeMixinUtil.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeMixinUtil.java +index 34e3f3a..f0cbbf7 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeMixinUtil.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeMixinUtil.java +@@ -83,11 +83,18 @@ public class NodeMixinUtil { + + NodeTypeManager manager = session.getWorkspace().getNodeTypeManager(); + NodeTypeIterator mixins = manager.getMixinNodeTypes(); +- StringBuffer s = new StringBuffer("X"); ++ StringBuilder s = new StringBuilder("X"); + while (mixins.hasNext()) { + s.append(mixins.nextNodeType().getName()); + } +- return s.toString().replaceAll(":", ""); ++ for (int i = 0; i < s.length(); ) { ++ if (s.charAt(i) == ':') { ++ s.deleteCharAt(i); ++ } else { ++ ++i; ++ } ++ } ++ return s.toString(); + } + + +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java +index 78e7ed2..ed8287a 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/NodeReadMethodsTest.java +@@ -118,9 +118,10 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + + // build name from path + String path = childNode.getPath(); +- String name = path.substring(path.lastIndexOf("/") + 1); +- if (name.indexOf("[") != -1) { +- name = name.substring(0, name.indexOf("[")); ++ String name = path.substring(path.lastIndexOf('/') + 1); ++ final int leftSquareBracketPos = name.indexOf('['); ++ if (leftSquareBracketPos != -1) { ++ name = name.substring(0, leftSquareBracketPos); + } + assertEquals("getName() must be the same as the last item in the path", + name, +@@ -266,16 +267,23 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + public void testGetNode() + throws NotExecutableException, RepositoryException { + +- StringBuffer notExistingPath = new StringBuffer("X"); ++ StringBuilder notExistingPath = new StringBuilder("X"); + NodeIterator nodes = testRootNode.getNodes(); + while (nodes.hasNext()) { + // build a path that for sure is not existing + // (":" of namespace prefix will be replaced later on) + notExistingPath.append(nodes.nextNode().getName()); + } ++ for (int i = 0; i < notExistingPath.length(); ) { ++ if (notExistingPath.charAt(i) == ':') { ++ notExistingPath.deleteCharAt(i); ++ } else { ++ ++i; ++ } ++ } + + try { +- testRootNode.getNode(notExistingPath.toString().replaceAll(":", "")); ++ testRootNode.getNode(notExistingPath.toString()); + fail("getNode(String relPath) must throw a PathNotFoundException" + + "if no node exists at relPath"); + } catch (PathNotFoundException e) { +@@ -411,13 +419,13 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + Node n = nodes4.nextNode(); + assertTrue(assertString4 + "name comparison failed: *" + + shortenName + "* not found in " + n.getName(), +- n.getName().indexOf(shortenName) != -1); ++ n.getName().contains(shortenName)); + } + // test if the number of found nodes is correct + int numExpected4 = 0; + for (int i = 0; i < allNodes.size(); i++) { + Node n = allNodes.get(i); +- if (n.getName().indexOf(shortenName) != -1) { ++ if (n.getName().contains(shortenName)) { + numExpected4++; + } + } +@@ -533,13 +541,13 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + Node n = nodes5.nextNode(); + assertTrue(assertString5 + "name comparison failed: *" + + shortenName + "* not found in " + n.getName(), +- n.getName().indexOf(shortenName) != -1); ++ n.getName().contains(shortenName)); + } + // test if the number of found nodes is correct + int numExpected5 = 0; + for (int i = 0; i < allNodes.size(); i++) { + Node n = allNodes.get(i); +- if (n.getName().indexOf(shortenName) != -1) { ++ if (n.getName().contains(shortenName)) { + numExpected5++; + } + } +@@ -555,16 +563,23 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + */ + public void testGetProperty() + throws NotExecutableException, RepositoryException { +- StringBuffer notExistingPath = new StringBuffer("X"); ++ StringBuilder notExistingPath = new StringBuilder("X"); + PropertyIterator properties = testRootNode.getProperties(); + while (properties.hasNext()) { + // build a path that for sure is not existing + // (":" of namespace prefix will be replaced later on) + notExistingPath.append(properties.nextProperty().getName()); + } ++ for (int i = 0; i < notExistingPath.length(); ) { ++ if (notExistingPath.charAt(i) == ':') { ++ notExistingPath.deleteCharAt(i); ++ } else { ++ ++i; ++ } ++ } + + try { +- testRootNode.getProperty(notExistingPath.toString().replaceAll(":", "")); ++ testRootNode.getProperty(notExistingPath.toString()); + fail("getProperty(String relPath) must throw a " + + "PathNotFoundException if no node exists at relPath"); + } catch (PathNotFoundException e) { +@@ -607,17 +622,23 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + } + PropertyIterator allPropertiesIt = node.getProperties(); + List allProperties = new ArrayList(); +- StringBuffer notExistingPropertyName = new StringBuffer(); ++ StringBuilder notExistingPropertyName = new StringBuilder(); + while (allPropertiesIt.hasNext()) { + Property p = allPropertiesIt.nextProperty(); + allProperties.add(p); +- notExistingPropertyName.append(p.getName() + "X"); ++ notExistingPropertyName.append(p.getName()).append('X'); ++ } ++ for (int i = 0; i < notExistingPropertyName.length(); ) { ++ if (notExistingPropertyName.charAt(i) == ':') { ++ notExistingPropertyName.deleteCharAt(i); ++ } else { ++ ++i; ++ } + } +- + + // test that an empty NodeIterator is returned + // when the pattern is not matching any child node +- String pattern0 = notExistingPropertyName.toString().replaceAll(":", ""); ++ String pattern0 = notExistingPropertyName.toString(); + NodeIterator properties0 = node.getNodes(pattern0); + try { + properties0.nextNode(); +@@ -700,13 +721,13 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + Property p = properties4.nextProperty(); + assertTrue(assertString4 + "name comparison failed: *" + + shortenName + "* not found in " + p.getName(), +- p.getName().indexOf(shortenName) != -1); ++ p.getName().contains(shortenName)); + } + // test if the number of found properties is correct + int numExpected4 = 0; + for (int i = 0; i < allProperties.size(); i++) { + Property p = allProperties.get(i); +- if (p.getName().indexOf(shortenName) != -1) { ++ if (p.getName().contains(shortenName)) { + numExpected4++; + } + } +@@ -731,11 +752,11 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + } + PropertyIterator allPropertiesIt = node.getProperties(); + List allProperties = new ArrayList(); +- StringBuffer notExistingPropertyName = new StringBuffer(); ++ StringBuilder notExistingPropertyName = new StringBuilder(); + while (allPropertiesIt.hasNext()) { + Property p = allPropertiesIt.nextProperty(); + allProperties.add(p); +- notExistingPropertyName.append(p.getName() + "X"); ++ notExistingPropertyName.append(p.getName()).append('X'); + } + + // all tests are running using root's first property +@@ -808,13 +829,13 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + Property p = properties5.nextProperty(); + assertTrue(assertString5 + "name comparison failed: *" + + shortenName + "* not found in " + p.getName(), +- p.getName().indexOf(shortenName) != -1); ++ p.getName().contains(shortenName)); + } + // test if the number of found properties is correct + int numExpected5 = 0; + for (int i = 0; i < allProperties.size(); i++) { + Property p = allProperties.get(i); +- if (p.getName().indexOf(shortenName) != -1) { ++ if (p.getName().contains(shortenName)) { + numExpected5++; + } + } +@@ -991,22 +1012,29 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + Node node = testRootNode; + + NodeIterator nodes = node.getNodes(); +- StringBuffer notExistingNodeName = new StringBuffer(); ++ StringBuilder notExistingNodeName = new StringBuilder(); + while (nodes.hasNext()) { + Node n = nodes.nextNode(); + assertTrue("hasNode(String relPath) returns false although " + + "node at relPath is existing", + node.hasNode(n.getName())); +- notExistingNodeName.append(n.getName() + "X"); ++ notExistingNodeName.append(n.getName()).append('X'); + } +- if (notExistingNodeName.toString().equals("")) { ++ if (notExistingNodeName.length() == 0) { + throw new NotExecutableException("Workspace does not have sufficient content for this test. " + + "Root node must have at least one child node."); + } ++ for (int i = 0; i < notExistingNodeName.length(); ) { ++ if (notExistingNodeName.charAt(i) == ':') { ++ notExistingNodeName.deleteCharAt(i); ++ } else { ++ ++i; ++ } ++ } + + assertFalse("hasNode(String relPath) returns true although " + + "node at relPath is not existing", +- node.hasNode(notExistingNodeName.toString().replaceAll(":", ""))); ++ node.hasNode(notExistingNodeName.toString())); + } + + /** +@@ -1044,21 +1072,28 @@ public class NodeReadMethodsTest extends AbstractJCRTest { + Node node = testRootNode; + + PropertyIterator properties = node.getProperties(); +- StringBuffer notExistingPropertyName = new StringBuffer(); ++ StringBuilder notExistingPropertyName = new StringBuilder(); + while (properties.hasNext()) { + Property p = properties.nextProperty(); + assertTrue("node.hasProperty(\"relPath\") returns false " + + "although property at relPath is existing", + node.hasProperty(p.getName())); +- notExistingPropertyName.append(p.getName() + "X"); ++ notExistingPropertyName.append(p.getName()).append('X'); + } +- if (notExistingPropertyName.toString().equals("")) { ++ if (notExistingPropertyName.length() == 0) { + fail("Root node must at least have one property: jcr:primaryType"); + } ++ for (int i = 0; i < notExistingPropertyName.length(); ) { ++ if (notExistingPropertyName.charAt(i) == ':') { ++ notExistingPropertyName.deleteCharAt(i); ++ } else { ++ ++i; ++ } ++ } + + assertFalse("node.hasProperty(\"relPath\") returns true " + + "although property at relPath is not existing", +- node.hasProperty(notExistingPropertyName.toString().replaceAll(":", ""))); ++ node.hasProperty(notExistingPropertyName.toString())); + } + + /** +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java +index 2f39cae..69259f6 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java +@@ -37,7 +37,7 @@ public class RepositoryFactoryTest extends AbstractJCRTest { + + public void testEmptyParameters() throws Exception { + // must not throw +- getRepositoryFactory().getRepository(Collections.EMPTY_MAP); ++ getRepositoryFactory().getRepository(Collections.emptyMap()); + } + + protected RepositoryFactory getRepositoryFactory() +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionReadMethodsTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionReadMethodsTest.java +index 3220d86..b8e8d45 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionReadMethodsTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SessionReadMethodsTest.java +@@ -159,7 +159,7 @@ public class SessionReadMethodsTest extends AbstractJCRTest { + */ + public void testGetAttributeFailure() { + String names[] = session.getAttributeNames(); +- StringBuffer notExistingName = new StringBuffer("X"); ++ StringBuilder notExistingName = new StringBuilder("X"); + for (int i = 0; i < names.length; i++) { + notExistingName.append(names[i]); + } +@@ -206,16 +206,16 @@ public class SessionReadMethodsTest extends AbstractJCRTest { + */ + private String getNonExistingPath() throws RepositoryException { + // build path to a node that does not exist +- StringBuffer tmp = new StringBuffer(); ++ StringBuilder tmp = new StringBuilder(); + if (testRootNode.getName().length() > 0) { +- tmp.append("/").append(testRootNode.getName()); ++ tmp.append('/').append(testRootNode.getName()); + } + int count = 0; + String nodeName = "node"; + while (testRootNode.hasNode(nodeName + count)) { + count++; + } +- tmp.append("/").append(nodeName + count); ++ tmp.append('/').append(nodeName + count); + return tmp.toString(); + } + +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java +index 590819a..9d82e70 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java +@@ -565,18 +565,18 @@ class TreeComparator extends Assert { + * Recursive display of source and target tree + */ + public void showTree(Node n, int level) throws RepositoryException { +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + for (int t = 0; t < level; t++) { + sb.append("-"); + } +- sb.append(n.getName() + " "); +- sb.append(n.getPrimaryNodeType().getName() + " [ "); ++ sb.append(n.getName()).append(' '); ++ sb.append(n.getPrimaryNodeType().getName()).append(" [ "); + PropertyIterator pi = n.getProperties(); + while (pi.hasNext()) { + Property p = (Property) pi.next(); +- sb.append(p.getName() + " "); ++ sb.append(p.getName()).append(' '); + } +- sb.append("]"); ++ sb.append(']'); + sc.log(sb.toString()); + + NodeIterator ni = n.getNodes(); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeManagerTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeManagerTest.java +index 52aa0ce..6813dfc 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeManagerTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeManagerTest.java +@@ -77,15 +77,22 @@ public class NodeTypeManagerTest extends AbstractJCRTest { + type.getName()); + + +- StringBuffer notExistingName = new StringBuffer("X"); ++ StringBuilder notExistingName = new StringBuilder("X"); + NodeTypeIterator types = manager.getAllNodeTypes(); + while (types.hasNext()) { + // build a name which is for sure not existing + // (":" of namespace prefix will be replaced later on) + notExistingName.append(types.nextNodeType().getName()); + } ++ for (int i = 0; i < notExistingName.length(); ) { ++ if (notExistingName.charAt(i) == ':') { ++ notExistingName.deleteCharAt(i); ++ } else { ++ ++i; ++ } ++ } + try { +- manager.getNodeType(notExistingName.toString().replaceAll(":", "")); ++ manager.getNodeType(notExistingName.toString()); + fail("getNodeType(String nodeTypeName) must throw a " + + "NoSuchNodeTypeException if no according NodeType " + + "does exist"); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeTest.java +index 955bb67..63dd16c 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeTest.java +@@ -18,7 +18,6 @@ package org.apache.jackrabbit.test.api.nodetype; + + import java.util.Arrays; + import java.util.HashSet; +-import java.util.Iterator; + import java.util.Set; + + import javax.jcr.ItemNotFoundException; +@@ -187,8 +186,8 @@ public class NodeTypeTest extends AbstractJCRTest { + + NodeType supertypes[] = type.getSupertypes(); + boolean hasNTBase = false; +- for (int i = 0; i < supertypes.length; i++) { +- if (supertypes[i].getName().equals(ntBase)) { ++ for (NodeType supertype : supertypes) { ++ if (supertype.getName().equals(ntBase)) { + hasNTBase = true; + break; + } +@@ -242,11 +241,10 @@ public class NodeTypeTest extends AbstractJCRTest { + subtypeNames.containsAll(declaredSubtypeNames)); + + // check the reverse relation +- for (Iterator it = subtypeNames.iterator(); it.hasNext(); ) { +- String subtypename = it.next(); +- boolean isDeclared = declaredSubtypeNames.contains(subtypename); ++ for (String subtypeName : subtypeNames) { ++ boolean isDeclared = declaredSubtypeNames.contains(subtypeName); + +- NodeType subtype = manager.getNodeType(subtypename); ++ NodeType subtype = manager.getNodeType(subtypeName); + Set supertypeNames = asSetOfNames(subtype.getSupertypes()); + + assertTrue(name + " should occur in set of super types: " + supertypeNames, +@@ -302,8 +300,8 @@ public class NodeTypeTest extends AbstractJCRTest { + String typename = type.getName(); + String ns = session.getNamespaceURI(AbstractJCRTest.getPrefix(typename)); + if (ns.length() != 0 && !ns.contains(":")) { +- log.warn("Node type '" + typename + "' has invalid namespace '" + ns +- + "', thus skipping testIsNodeTypeQName() for this type"); ++ log.warn("Node type '{}' has invalid namespace '{}', thus skipping testIsNodeTypeQName() for this type", ++ typename, ns); + } else { + String qn = AbstractJCRTest.getQualifiedName(session, typename); + assertTrue("isNodeType(String nodeTypeName) must return true if " + "NodeType is nodeTypeName", +@@ -334,10 +332,10 @@ public class NodeTypeTest extends AbstractJCRTest { + PropertyDefinition defs[] = type.getPropertyDefinitions(); + + try { +- for (int i = 0; i < declaredDefs.length; i++) { ++ for (PropertyDefinition declaredDef : declaredDefs) { + boolean exists = false; +- for (int j = 0; j < defs.length; j++) { +- if (defs[j].getName().equals(declaredDefs[i].getName())) { ++ for (PropertyDefinition def : defs) { ++ if (def.getName().equals(declaredDef.getName())) { + exists = true; + break; + } +@@ -368,8 +366,8 @@ public class NodeTypeTest extends AbstractJCRTest { + NodeType type = types.nextNodeType(); + PropertyDefinition defs[] = type.getPropertyDefinitions(); + boolean hasJCRPrimaryType = false; +- for (int i = 0; i < defs.length; i++) { +- if (defs[i].getName().equals(jcrPrimaryType)) { ++ for (PropertyDefinition def : defs) { ++ if (def.getName().equals(jcrPrimaryType)) { + hasJCRPrimaryType = true; + break; + } +@@ -395,10 +393,10 @@ public class NodeTypeTest extends AbstractJCRTest { + NodeDefinition defs[] = type.getChildNodeDefinitions(); + + try { +- for (int i = 0; i < declaredDefs.length; i++) { ++ for (NodeDefinition declaredDef : declaredDefs) { + boolean exists = false; +- for (int j = 0; j < defs.length; j++) { +- if (defs[j].getName().equals(declaredDefs[i].getName())) { ++ for (NodeDefinition def : defs) { ++ if (def.getName().equals(declaredDef.getName())) { + exists = true; + break; + } +@@ -488,8 +486,8 @@ public class NodeTypeTest extends AbstractJCRTest { + */ + private Set asSetOfNames(NodeType[] types) { + Set result = new HashSet(); +- for (int i = 0; i < types.length; i++) { +- result.add(types[i].getName()); ++ for (NodeType type : types) { ++ result.add(type.getName()); + } + return result; + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java +index f1d561f..d8f95f4 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java +@@ -479,7 +479,7 @@ public class NodeTypeUtil { + public static String getUndefinedChildNodeName(NodeType nodeType) { + + NodeDefinition nodeDefs[] = nodeType.getChildNodeDefinitions(); +- StringBuffer s = new StringBuffer("X"); ++ StringBuilder s = new StringBuilder("X"); + + for (int i = 0; i < nodeDefs.length; i++) { + s.append(nodeDefs[i].getName()); +@@ -620,7 +620,7 @@ public class NodeTypeUtil { + } + if (satisfied) { + // build a binary value absMin < size > absMax +- StringBuffer content = new StringBuffer(); ++ StringBuilder content = new StringBuilder(); + for (int i = 0; i <= absMin + 1; i++) { + content.append("X"); + } +@@ -635,8 +635,16 @@ public class NodeTypeUtil { + return session.getValueFactory().createValue("0", PropertyType.BINARY); + } else if (!maxBoundless) { + // build a binary value of size > absMax +- StringBuffer content = new StringBuffer(); +- for (int i = 0; i <= absMax; i = i + 10) { ++ final int absMaxAsInt; ++ if (absMax < 0) { ++ absMaxAsInt = -1; ++ } else if (absMax + 10L > Integer.MAX_VALUE) { ++ absMaxAsInt = Integer.MAX_VALUE - 10; ++ } else { ++ absMaxAsInt = (int)absMax; ++ } ++ StringBuilder content = new StringBuilder(absMax < 0 ? 0 : absMaxAsInt + 10); ++ for (int i = 0; i <= absMaxAsInt; i += 10) { + content.append("0123456789"); + } + return session.getValueFactory().createValue(content.toString(), PropertyType.BINARY); +@@ -865,7 +873,7 @@ public class NodeTypeUtil { + return null; + } else { + // build a name that is for sure not part of the constraints +- StringBuffer name = new StringBuffer("X"); ++ StringBuilder name = new StringBuilder("X"); + for (int i = 0; i < constraints.length; i++) { + name.append(constraints[i].replaceAll(":", "")); + } +@@ -880,7 +888,7 @@ public class NodeTypeUtil { + return null; + } else { + // build a path that is for sure not part of the constraints +- StringBuffer path = new StringBuffer("X"); ++ StringBuilder path = new StringBuilder("X"); + for (int i = 0; i < constraints.length; i++) { + path.append(constraints[i]); + } +@@ -908,7 +916,7 @@ public class NodeTypeUtil { + return null; + } else { + // build a string that will probably not satisfy the constraints +- StringBuffer value = new StringBuffer("X"); ++ StringBuilder value = new StringBuilder("X"); + for (int i = 0; i < constraints.length; i++) { + value.append(constraints[i]); + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/PredefinedNodeTypeTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/PredefinedNodeTypeTest.java +index e08cf16..8ce384b 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/PredefinedNodeTypeTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/PredefinedNodeTypeTest.java +@@ -310,7 +310,7 @@ public class PredefinedNodeTypeTest extends AbstractJCRTest { + private void testPredefinedNodeType(String name, boolean propsVariant) + throws NotExecutableException { + try { +- StringBuffer spec = new StringBuffer(); ++ StringBuilder spec = new StringBuilder(); + String resource = + "org/apache/jackrabbit/test/api/nodetype/spec/" + + name.replace(':', '-') + ".txt"; +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/AbstractQueryTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/AbstractQueryTest.java +index 97c788a..cc0371b 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/AbstractQueryTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/AbstractQueryTest.java +@@ -241,7 +241,7 @@ public abstract class AbstractQueryTest extends AbstractJCRTest { + log.println("Properties:"); + String[] propNames = result.getColumnNames(); + for (RowIterator it = result.getRows(); it.hasNext();) { +- StringBuffer msg = new StringBuffer(); ++ StringBuilder msg = new StringBuilder(); + Value[] values = it.nextRow().getValues(); + for (int i = 0; i < propNames.length; i++, count++) { + msg.append(" ").append(propNames[i]).append(": "); +@@ -251,7 +251,7 @@ public abstract class AbstractQueryTest extends AbstractJCRTest { + msg.append(values[i].getString()); + } + } +- log.println(msg); ++ log.println(msg.toString()); + } + if (count == 0) { + log.println(" NONE"); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/DerefQueryLevel1Test.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/DerefQueryLevel1Test.java +index df97e62..c0aac81 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/DerefQueryLevel1Test.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/DerefQueryLevel1Test.java +@@ -155,9 +155,9 @@ public class DerefQueryLevel1Test extends AbstractQueryTest { + */ + private String createStatement(Property refProperty, String nameTest) + throws RepositoryException { +- StringBuffer stmt = new StringBuffer(); +- stmt.append("/").append(jcrRoot).append(refProperty.getParent().getPath()); +- stmt.append("/").append(jcrDeref).append("(@"); ++ StringBuilder stmt = new StringBuilder(); ++ stmt.append('/').append(jcrRoot).append(refProperty.getParent().getPath()); ++ stmt.append('/').append(jcrDeref).append("(@"); + stmt.append(refProperty.getName()).append(", '"); + stmt.append(nameTest).append("')"); + return stmt.toString(); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java +index 97059ed..faba78e 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLJoinTest.java +@@ -54,14 +54,14 @@ public class SQLJoinTest extends AbstractQueryTest { + + assertFalse("Node at " + n2.getPath() + " should not have mixin " + testMixin, n2.isNodeType(testMixin)); + +- StringBuffer query = new StringBuffer("SELECT * FROM "); ++ StringBuilder query = new StringBuilder("SELECT * FROM "); + query.append(testNodeType).append(", ").append(testMixin); + query.append(" WHERE "); +- query.append(testNodeType).append(".").append(jcrPath); ++ query.append(testNodeType).append('.').append(jcrPath); + query.append(" = "); +- query.append(testMixin).append(".").append(jcrPath); ++ query.append(testMixin).append('.').append(jcrPath); + query.append(" AND ").append(jcrPath).append(" LIKE "); +- query.append("'").append(testRoot).append("/%'"); ++ query.append('\'').append(testRoot).append("/%'"); + + executeSqlQuery(superuser, query.toString(), new Node[]{n1}); + } +@@ -87,14 +87,14 @@ public class SQLJoinTest extends AbstractQueryTest { + + assertFalse("Node at " + n2.getPath() + " should not have mixin " + testMixin, n2.isNodeType(testMixin)); + +- StringBuffer query = new StringBuffer("SELECT * FROM "); ++ StringBuilder query = new StringBuilder("SELECT * FROM "); + query.append(testNodeType).append(", ").append(testMixin); + query.append(" WHERE "); +- query.append(testNodeType).append(".").append(jcrPath); ++ query.append(testNodeType).append('.').append(jcrPath); + query.append(" = "); +- query.append(testMixin).append(".").append(jcrPath); ++ query.append(testMixin).append('.').append(jcrPath); + query.append(" AND ").append(jcrPath).append(" LIKE "); +- query.append("'").append(testRoot).append("/%'"); ++ query.append('\'').append(testRoot).append("/%'"); + + executeSqlQuery(superuser, query.toString(), new Node[]{n1}); + } +@@ -111,14 +111,14 @@ public class SQLJoinTest extends AbstractQueryTest { + ensureMixinType(n2, mixReferenceable); + testRootNode.getSession().save(); + +- StringBuffer query = new StringBuffer("SELECT * FROM "); ++ StringBuilder query = new StringBuilder("SELECT * FROM "); + query.append(testNodeType).append(", ").append(ntBase); + query.append(" WHERE "); +- query.append(testNodeType).append(".").append(jcrPath); ++ query.append(testNodeType).append('.').append(jcrPath); + query.append(" = "); +- query.append(ntBase).append(".").append(jcrPath); ++ query.append(ntBase).append('.').append(jcrPath); + query.append(" AND ").append(jcrPath).append(" LIKE "); +- query.append("'").append(testRoot).append("/%'"); ++ query.append('\'').append(testRoot).append("/%'"); + + executeSqlQuery(superuser, query.toString(), new Node[]{n1}); + } +@@ -144,14 +144,14 @@ public class SQLJoinTest extends AbstractQueryTest { + ensureMixinType(n2, mixReferenceable); + testRootNode.getSession().save(); + +- StringBuffer query = new StringBuffer("SELECT * FROM "); ++ StringBuilder query = new StringBuilder("SELECT * FROM "); + query.append(testNodeType).append(", ").append(mixReferenceable); + query.append(" WHERE "); +- query.append(testNodeType).append(".").append(jcrPath); ++ query.append(testNodeType).append('.').append(jcrPath); + query.append(" = "); +- query.append(mixReferenceable).append(".").append(jcrPath); ++ query.append(mixReferenceable).append('.').append(jcrPath); + query.append(" AND ").append(jcrPath).append(" LIKE "); +- query.append("'").append(testRoot).append("/%'"); ++ query.append('\'').append(testRoot).append("/%'"); + + executeSqlQuery(superuser, query.toString(), new Node[]{n1, n2}); + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLOrderByTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLOrderByTest.java +index 2a1e151..2feae34 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLOrderByTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLOrderByTest.java +@@ -40,7 +40,7 @@ public class SQLOrderByTest extends AbstractQueryTest { + isReadOnly = true; + super.setUp(); + // setup common base statement +- StringBuffer tmp = new StringBuffer("SELECT ").append(escapeIdentifierForSQL(propertyName1)); ++ StringBuilder tmp = new StringBuilder("SELECT ").append(escapeIdentifierForSQL(propertyName1)); + tmp.append(" FROM ").append(escapeIdentifierForSQL(testNodeType)); + tmp.append(" WHERE ").append(escapeIdentifierForSQL(propertyName1)).append(" IS NOT NULL"); + tmp.append(" ORDER BY "); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLQueryLevel2Test.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLQueryLevel2Test.java +index 2d68785..6c84687 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLQueryLevel2Test.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/SQLQueryLevel2Test.java +@@ -126,7 +126,7 @@ public class SQLQueryLevel2Test extends AbstractQueryLevel2Test { + * and excluding with a word + */ + private Statement getFullTextStatement() { +- StringBuffer tmp = new StringBuffer("SELECT "); ++ StringBuilder tmp = new StringBuilder("SELECT "); + tmp.append(escapeIdentifierForSQL(propertyName1)); + tmp.append(" FROM ").append(escapeIdentifierForSQL(testNodeType)); + tmp.append(" WHERE CONTAINS(., '\"quick brown\" -cat')"); +@@ -140,7 +140,7 @@ public class SQLQueryLevel2Test extends AbstractQueryLevel2Test { + * property + */ + private Statement getMultiValueStatement() { +- StringBuffer tmp = new StringBuffer("SELECT "); ++ StringBuilder tmp = new StringBuilder("SELECT "); + tmp.append(escapeIdentifierForSQL(propertyName1)); + tmp.append(" FROM ").append(escapeIdentifierForSQL(testNodeType)); + tmp.append(" WHERE 'two' IN "); +@@ -156,7 +156,7 @@ public class SQLQueryLevel2Test extends AbstractQueryLevel2Test { + * @return Statement selecting nodes by its range in {@link #propertyName1} + */ + private Statement getRangeStatement() { +- StringBuffer tmp = new StringBuffer("SELECT "); ++ StringBuilder tmp = new StringBuilder("SELECT "); + tmp.append(escapeIdentifierForSQL(propertyName1)); + tmp.append(" FROM ").append(escapeIdentifierForSQL(testNodeType)); + tmp.append(" WHERE "); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathPosIndexTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathPosIndexTest.java +index 97ab836..f3ac799 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathPosIndexTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/XPathPosIndexTest.java +@@ -50,7 +50,7 @@ public class XPathPosIndexTest extends AbstractQueryTest { + */ + public void testDocOrderIndexedNotation() throws Exception { + String path = testRoot + "/" + nodeName1 + "[2]"; +- StringBuffer tmp = new StringBuffer("/"); ++ StringBuilder tmp = new StringBuilder("/"); + tmp.append(jcrRoot).append(path); + docOrderTest(new Statement(tmp.toString(), qsXPATH), path); + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java +index 7836a6c..95165e2 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/AbstractQOMTest.java +@@ -71,10 +71,10 @@ public abstract class AbstractQOMTest extends AbstractQueryTest { + List expectedPaths = new ArrayList(); + log.println("expected:"); + for (int i = 0; i < nodes.length; i++) { +- StringBuffer aggregatedPaths = new StringBuffer(); ++ StringBuilder aggregatedPaths = new StringBuilder(); + for (int j = 0; j < nodes[i].length; j++) { + aggregatedPaths.append(getPath(nodes[i][j])); +- aggregatedPaths.append("|"); ++ aggregatedPaths.append('|'); + } + expectedPaths.add(aggregatedPaths.toString()); + log.println(aggregatedPaths.toString()); +@@ -84,10 +84,10 @@ public abstract class AbstractQOMTest extends AbstractQueryTest { + log.println("result:"); + for (RowIterator it = result.getRows(); it.hasNext();) { + Row r = it.nextRow(); +- StringBuffer aggregatedPaths = new StringBuffer(); ++ StringBuilder aggregatedPaths = new StringBuilder(); + for (int i = 0; i < selectorNames.length; i++) { + aggregatedPaths.append(getPath(r.getNode(selectorNames[i]))); +- aggregatedPaths.append("|"); ++ aggregatedPaths.append('|'); + } + resultPaths.add(aggregatedPaths.toString()); + log.println(aggregatedPaths.toString()); +@@ -141,10 +141,10 @@ public abstract class AbstractQOMTest extends AbstractQueryTest { + Set expectedPaths = new HashSet(); + log.println("expected:"); + for (int i = 0; i < nodes.length; i++) { +- StringBuffer aggregatedPaths = new StringBuffer(); ++ StringBuilder aggregatedPaths = new StringBuilder(); + for (int j = 0; j < nodes[i].length; j++) { + aggregatedPaths.append(getPath(nodes[i][j])); +- aggregatedPaths.append("|"); ++ aggregatedPaths.append('|'); + } + expectedPaths.add(aggregatedPaths.toString()); + log.println(aggregatedPaths.toString()); +@@ -154,23 +154,21 @@ public abstract class AbstractQOMTest extends AbstractQueryTest { + log.println("result:"); + for (RowIterator it = result.getRows(); it.hasNext();) { + Row r = it.nextRow(); +- StringBuffer aggregatedPaths = new StringBuffer(); ++ StringBuilder aggregatedPaths = new StringBuilder(); + for (int i = 0; i < selectorNames.length; i++) { + aggregatedPaths.append(getPath(r.getNode(selectorNames[i]))); +- aggregatedPaths.append("|"); ++ aggregatedPaths.append('|'); + } + resultPaths.add(aggregatedPaths.toString()); + log.println(aggregatedPaths.toString()); + } + + // check if all expected are in result +- for (Iterator it = expectedPaths.iterator(); it.hasNext();) { +- String path = it.next(); ++ for (String path : expectedPaths) { + assertTrue(path + " is not part of the result set", resultPaths.contains(path)); + } + // check result does not contain more than expected +- for (Iterator it = resultPaths.iterator(); it.hasNext();) { +- String path = it.next(); ++ for (String path : resultPaths) { + assertTrue(path + " is not expected to be part of the result set", expectedPaths.contains(path)); + } + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeLocalNameTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeLocalNameTest.java +index 09f2adb..8113c5a 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeLocalNameTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeLocalNameTest.java +@@ -220,13 +220,13 @@ public class NodeLocalNameTest extends AbstractQOMTest { + } + + private String createLexicographicallyGreater(String name) { +- StringBuffer tmp = new StringBuffer(name); ++ StringBuilder tmp = new StringBuilder(name); + tmp.setCharAt(tmp.length() - 1, (char) (tmp.charAt(tmp.length() - 1) + 1)); + return tmp.toString(); + } + + private String createLexicographicallyLesser(String name) { +- StringBuffer tmp = new StringBuffer(name); ++ StringBuilder tmp = new StringBuilder(name); + tmp.setCharAt(tmp.length() - 1, (char) (tmp.charAt(tmp.length() - 1) - 1)); + return tmp.toString(); + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java +index a26fa1c..518b727 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java +@@ -317,13 +317,13 @@ public class NodeNameTest extends AbstractQOMTest { + } + + private String createLexicographicallyGreater(String name) { +- StringBuffer tmp = new StringBuffer(name); ++ StringBuilder tmp = new StringBuilder(name); + tmp.setCharAt(tmp.length() - 1, (char) (tmp.charAt(tmp.length() - 1) + 1)); + return tmp.toString(); + } + + private String createLexicographicallyLesser(String name) { +- StringBuffer tmp = new StringBuffer(name); ++ StringBuilder tmp = new StringBuilder(name); + tmp.setCharAt(tmp.length() - 1, (char) (tmp.charAt(tmp.length() - 1) - 1)); + return tmp.toString(); + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java +index 096b952..065d55c 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java +@@ -85,8 +85,7 @@ public class AccessControlListTest extends AbstractAccessControlTest { + // restore original entries (remove others). + AccessControlList list = getList(acMgr, path); + AccessControlEntry[] entries = list.getAccessControlEntries(); +- for (int i = 0; i < entries.length; i++) { +- AccessControlEntry ace = entries[i]; ++ for (AccessControlEntry ace : entries) { + if (testPrincipal.equals(ace.getPrincipal())) { + list.removeAccessControlEntry(ace); + } +@@ -113,9 +112,9 @@ public class AccessControlListTest extends AbstractAccessControlTest { + } + } + AccessControlPolicy[] acps = acMgr.getPolicies(path); +- for (int i = 0; i < acps.length; i++) { +- if (acps[i] instanceof AccessControlList) { +- return (AccessControlList) acps[i] ; ++ for (AccessControlPolicy acp : acps) { ++ if (acp instanceof AccessControlList) { ++ return (AccessControlList) acp; + } + } + throw new NotExecutableException("No AccessControlList at " + path); +@@ -124,8 +123,7 @@ public class AccessControlListTest extends AbstractAccessControlTest { + private static List currentPrivileges(AccessControlList acl, Principal principal) throws RepositoryException { + List privileges = new ArrayList(); + AccessControlEntry[] entries = acl.getAccessControlEntries(); +- for (int i = 0; i < entries.length; i++) { +- AccessControlEntry ace = entries[i]; ++ for (AccessControlEntry ace : entries) { + if (principal.equals(ace.getPrincipal())) { + privileges.addAll(Arrays.asList(ace.getPrivileges())); + } +@@ -140,9 +138,9 @@ public class AccessControlListTest extends AbstractAccessControlTest { + // call must succeed. + AccessControlEntry[] entries = acl.getAccessControlEntries(); + assertNotNull("AccessControlList#getAccessControlEntries must not return null.", entries); +- for (int i = 0; i < entries.length; i++) { +- assertNotNull("An ACE must contain a principal", entries[i].getPrincipal()); +- Privilege[] privs = entries[i].getPrivileges(); ++ for (AccessControlEntry ace : entries) { ++ assertNotNull("An ACE must contain a principal", ace.getPrincipal()); ++ Privilege[] privs = ace.getPrivileges(); + assertTrue("An ACE must contain at least a single privilege", privs != null && privs.length > 0); + } + } +@@ -156,10 +154,9 @@ public class AccessControlListTest extends AbstractAccessControlTest { + AccessControlEntry entry = null; + if (acl.addAccessControlEntry(testPrincipal, privileges)) { + AccessControlEntry[] aces = acl.getAccessControlEntries(); +- for (int i = 0; i < aces.length; i++) { +- if (aces[i].getPrincipal().equals(testPrincipal) && +- Arrays.asList(privileges).equals(Arrays.asList(aces[i].getPrivileges()))) { +- entry = aces[i]; ++ for (AccessControlEntry ace : aces) { ++ if (ace.getPrincipal().equals(testPrincipal) && Arrays.asList(privileges).equals(Arrays.asList(ace.getPrivileges()))) { ++ entry = ace; + } + } + if (entry == null) throw new NotExecutableException(); +@@ -175,9 +172,9 @@ public class AccessControlListTest extends AbstractAccessControlTest { + checkCanModifyAc(path); + + Privilege aggregate = null; +- for (int i = 0; i < privs.length; i++) { +- if (privs[i].isAggregate()) { +- aggregate = privs[i]; ++ for (Privilege priv : privs) { ++ if (priv.isAggregate()) { ++ aggregate = priv; + break; + } + } +@@ -199,9 +196,9 @@ public class AccessControlListTest extends AbstractAccessControlTest { + checkCanModifyAc(path); + + Privilege aggregate = null; +- for (int i = 0; i < privs.length; i++) { +- if (privs[i].isAggregate()) { +- aggregate = privs[i]; ++ for (Privilege priv : privs) { ++ if (priv.isAggregate()) { ++ aggregate = priv; + break; + } + } +@@ -213,8 +210,8 @@ public class AccessControlListTest extends AbstractAccessControlTest { + acl.addAccessControlEntry(testPrincipal, new Privilege[] {aggregate}); + + Privilege[] privs = aggregate.getAggregatePrivileges(); +- for (int i = 0; i < privs.length; i++) { +- boolean modified = acl.addAccessControlEntry(testPrincipal, new Privilege[] {privs[i]}); ++ for (Privilege priv : privs) { ++ boolean modified = acl.addAccessControlEntry(testPrincipal, new Privilege[] { priv }); + assertFalse("Adding the aggregated privs individually later on must not modify the policy", modified); + } + } +@@ -224,9 +221,9 @@ public class AccessControlListTest extends AbstractAccessControlTest { + + Privilege abstractPriv = null; + Privilege[] allPrivs = acMgr.privilegeFromName(Privilege.JCR_ALL).getAggregatePrivileges(); +- for (int i = 0; i < allPrivs.length; i++) { +- if (allPrivs[i].isAbstract()) { +- abstractPriv = allPrivs[i]; ++ for (Privilege priv : allPrivs) { ++ if (priv.isAbstract()) { ++ abstractPriv = priv; + break; + } + } +@@ -251,25 +248,25 @@ public class AccessControlListTest extends AbstractAccessControlTest { + + Set assignedPrivs = new HashSet(); + AccessControlEntry[] entries = acl.getAccessControlEntries(); +- for (int i = 0; i < entries.length; i++) { +- if (entries[i].getPrincipal().equals(testPrincipal)) { +- Privilege[] prvs = entries[i].getPrivileges(); +- for (int j = 0; j < prvs.length; j++) { +- if (prvs[j].isAggregate()) { +- assignedPrivs.addAll(Arrays.asList(prvs[j].getAggregatePrivileges())); ++ for (AccessControlEntry ace : entries) { ++ if (ace.getPrincipal().equals(testPrincipal)) { ++ Privilege[] prvs = ace.getPrivileges(); ++ for (Privilege prv : prvs) { ++ if (prv.isAggregate()) { ++ assignedPrivs.addAll(Arrays.asList(prv.getAggregatePrivileges())); + } else { +- assignedPrivs.add(prvs[j]); ++ assignedPrivs.add(prv); + } + } + } + } + + Set expected = new HashSet(); +- for (int i = 0; i < privs.length; i++) { +- if (privs[i].isAggregate()) { +- expected.addAll(Arrays.asList(privs[i].getAggregatePrivileges())); ++ for (Privilege priv : privs) { ++ if (priv.isAggregate()) { ++ expected.addAll(Arrays.asList(priv.getAggregatePrivileges())); + } else { +- expected.add(privs[i]); ++ expected.add(priv); + } + } + assertTrue("getAccessControlEntries must contain an entry or entries that grant at least the added privileges.", assignedPrivs.containsAll(expected)); +@@ -392,8 +389,8 @@ public class AccessControlListTest extends AbstractAccessControlTest { + acl.addAccessControlEntry(testPrincipal, privs); + + AccessControlEntry[] aces = acl.getAccessControlEntries(); +- for (int i = 0; i < aces.length; i++) { +- acl.removeAccessControlEntry(aces[i]); ++ for (AccessControlEntry ace : aces) { ++ acl.removeAccessControlEntry(ace); + } + assertEquals("After removing all ACEs the ACL must be empty", 0, acl.getAccessControlEntries().length); + } +@@ -412,7 +409,7 @@ public class AccessControlListTest extends AbstractAccessControlTest { + // try to re-access the modifiable ACL in order to remove the ACE + // added before. + acl = getList(acMgr, path); +- AccessControlEntry ace = null; ++ AccessControlEntry ace; + AccessControlEntry[] aces = acl.getAccessControlEntries(); + if (aces.length == 0) { + throw new NotExecutableException(); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlPolicyTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlPolicyTest.java +index 7661351..814e39b 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlPolicyTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlPolicyTest.java +@@ -19,7 +19,6 @@ package org.apache.jackrabbit.test.api.security; + import java.util.Arrays; + import java.util.HashMap; + import java.util.HashSet; +-import java.util.Iterator; + import java.util.List; + import java.util.Map; + import java.util.Set; +@@ -62,8 +61,7 @@ public class AccessControlPolicyTest extends AbstractAccessControlTest { + + protected void tearDown() throws Exception { + try { +- for (Iterator it = addedPolicies.keySet().iterator(); it.hasNext();) { +- String path = it.next(); ++ for (String path : addedPolicies.keySet()) { + AccessControlPolicy policy = addedPolicies.get(path); + acMgr.removePolicy(path, policy); + } +@@ -110,11 +108,11 @@ public class AccessControlPolicyTest extends AbstractAccessControlTest { + AccessControlPolicy[] policies = acMgr.getPolicies(path); + + assertNotNull("AccessControlManager.getPolicies must never return null.", policies); +- for (int i = 0; i < policies.length; i++) { +- if (policies[i] instanceof NamedAccessControlPolicy) { +- assertNotNull("The name of an NamedAccessControlPolicy must not be null.", ((NamedAccessControlPolicy) policies[i]).getName()); +- } else if (policies[i] instanceof AccessControlList) { +- assertNotNull("The entries of an AccessControlList must not be null.", ((AccessControlList) policies[i]).getAccessControlEntries()); ++ for (AccessControlPolicy policy : policies) { ++ if (policy instanceof NamedAccessControlPolicy) { ++ assertNotNull("The name of an NamedAccessControlPolicy must not be null.", ((NamedAccessControlPolicy) policy).getName()); ++ } else if (policy instanceof AccessControlList) { ++ assertNotNull("The entries of an AccessControlList must not be null.", ((AccessControlList) policy).getAccessControlEntries()); + } + } + } +@@ -150,8 +148,8 @@ public class AccessControlPolicyTest extends AbstractAccessControlTest { + } + + AccessControlPolicy[] policies = acMgr.getPolicies(path); +- for (int i = 0; i < policies.length; i++) { +- assertFalse("The applicable policies obtained should not be present among the policies obtained through AccessControlManager.getPolicies.", acps.contains(policies[i])); ++ for (AccessControlPolicy policy : policies) { ++ assertFalse("The applicable policies obtained should not be present among the policies obtained through AccessControlManager.getPolicies.", acps.contains(policy)); + } + } + +@@ -201,9 +199,9 @@ public class AccessControlPolicyTest extends AbstractAccessControlTest { + AccessControlPolicy policy = it.nextAccessControlPolicy(); + acMgr.setPolicy(path, policy); + +- AccessControlPolicy[] policies = acMgr.getPolicies(path); +- for (int i = 0; i < policies.length; i++) { +- if (policy.equals(policies[i])) { ++ AccessControlPolicy[] plcs = acMgr.getPolicies(path); ++ for (AccessControlPolicy plc : plcs) { ++ if (policy.equals(plc)) { + // ok + return; + } +@@ -228,8 +226,8 @@ public class AccessControlPolicyTest extends AbstractAccessControlTest { + // access the policies already present at path and test if updating + // (resetting) the policies works as well. + AccessControlPolicy[] policies = acMgr.getPolicies(path); +- for (int i = 0; i < policies.length; i++) { +- acMgr.setPolicy(path, policies[i]); ++ for (AccessControlPolicy policy : policies) { ++ acMgr.setPolicy(path, policy); + } + } + +@@ -342,8 +340,8 @@ public class AccessControlPolicyTest extends AbstractAccessControlTest { + acMgr.removePolicy(path, policy); + + AccessControlPolicy[] plcs = acMgr.getPolicies(path); +- for (int i = 0; i < plcs.length; i++) { +- if (plcs[i].equals(policy)) { ++ for (AccessControlPolicy plc : plcs) { ++ if (plc.equals(policy)) { + fail("RemovePolicy must remove the policy that has been set before."); + } + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java +index b929648..0aeb1fa 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/ISO9075.java +@@ -52,12 +52,12 @@ public class ISO9075 { + if (name.length() == 0) { + return name; + } +- if (XMLChar.isValidName(name) && name.indexOf("_x") < 0) { ++ if (XMLChar.isValidName(name) && !name.contains("_x")) { + // already valid + return name; + } else { + // encode +- StringBuffer encoded = new StringBuffer(); ++ StringBuilder encoded = new StringBuilder(); + for (int i = 0; i < name.length(); i++) { + if (i == 0) { + // first character of name +@@ -97,7 +97,7 @@ public class ISO9075 { + */ + public static String encodePath(String path) { + String[] names = Text.explode(path, '/', true); +- StringBuffer encoded = new StringBuffer(path.length()); ++ StringBuilder encoded = new StringBuilder(path.length()); + for (int i = 0; i < names.length; i++) { + // detect index + String index = null; +@@ -124,7 +124,7 @@ public class ISO9075 { + */ + public static String decode(String name) { + // quick check +- if (name.indexOf("_x") < 0) { ++ if (!name.contains("_x")) { + // not encoded + return name; + } +@@ -151,15 +151,15 @@ public class ISO9075 { + *

+ * Example: ' ' (the space character) is encoded to: _x0020_ + * @param c the character to encode +- * @param b the encoded character is appended to StringBuffer ++ * @param b the encoded character is appended to StringBuilder + * b. + */ +- private static void encode(char c, StringBuffer b) { ++ private static void encode(char c, StringBuilder b) { + b.append("_x"); + String hex = Integer.toHexString(c); + b.append(PADDING, 0, 4 - hex.length()); + b.append(hex); +- b.append("_"); ++ b.append('_'); + } + + /** +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java +index 7e85448..5daf728 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/util/Text.java +@@ -106,7 +106,7 @@ public class Text { + + MessageDigest md = MessageDigest.getInstance(algorithm); + byte[] digest = md.digest(data); +- StringBuffer res = new StringBuffer(digest.length * 2); ++ StringBuilder res = new StringBuilder(digest.length * 2); + for (int i = 0; i < digest.length; i++) { + byte b = digest[i]; + res.append(hexTable[(b >> 4) & 15]); +@@ -171,7 +171,7 @@ public class Text { + * @return the concatenated string + */ + public static String implode(String[] arr, String delim) { +- StringBuffer buf = new StringBuffer(); ++ StringBuilder buf = new StringBuilder(); + for (int i = 0; i < arr.length; i++) { + if (i > 0) { + buf.append(delim); +@@ -182,12 +182,12 @@ public class Text { + } + + /** +- * Replaces all occurences of oldString in text ++ * Replaces all occurrences of oldString in text + * with newString. + * + * @param text + * @param oldString old substring to be replaced with newString +- * @param newString new substring to replace occurences of oldString ++ * @param newString new substring to replace occurrences of oldString + * @return a string + */ + public static String replace(String text, String oldString, String newString) { +@@ -199,15 +199,15 @@ public class Text { + return text; + } + int lastPos = 0; +- StringBuffer sb = new StringBuffer(text.length()); ++ StringBuilder sb = new StringBuilder(text.length()); + while (pos != -1) { +- sb.append(text.substring(lastPos, pos)); ++ sb.append(text, lastPos, pos); + sb.append(newString); + lastPos = pos + oldString.length(); + pos = text.indexOf(oldString, lastPos); + } + if (lastPos < text.length()) { +- sb.append(text.substring(lastPos)); ++ sb.append(text, lastPos, text.length()); + } + return sb.toString(); + } +@@ -223,7 +223,7 @@ public class Text { + if (text == null) { + throw new IllegalArgumentException("null argument"); + } +- StringBuffer buf = null; ++ StringBuilder buf = null; + int length = text.length(); + int pos = 0; + for (int i = 0; i < length; i++) { +@@ -235,10 +235,10 @@ public class Text { + case '"': + case '\'': + if (buf == null) { +- buf = new StringBuffer(); ++ buf = new StringBuilder(); + } + if (i > 0) { +- buf.append(text.substring(pos, i)); ++ buf.append(text, pos, i); + } + pos = i + 1; + break; +@@ -261,7 +261,7 @@ public class Text { + return text; + } else { + if (pos < length) { +- buf.append(text.substring(pos)); ++ buf.append(text, pos, text.length()); + } + return buf.toString(); + } +@@ -342,7 +342,7 @@ public class Text { + try { + BitSet validChars = isPath ? URISaveEx : URISave; + byte[] bytes = string.getBytes("utf-8"); +- StringBuffer out = new StringBuffer(bytes.length); ++ StringBuilder out = new StringBuilder(bytes.length); + for (int i = 0; i < bytes.length; i++) { + int c = bytes[i] & 0xff; + if (validChars.get(c) && c != escape) { +@@ -468,7 +468,7 @@ public class Text { + * @return the escaped name + */ + public static String escapeIllegalJcrChars(String name) { +- StringBuffer buffer = new StringBuffer(name.length() * 2); ++ StringBuilder buffer = new StringBuilder(name.length() * 2); + for (int i = 0; i < name.length(); i++) { + char ch = name.charAt(i); + if (ch == '%' || ch == '/' || ch == ':' || ch == '[' || ch == ']' +@@ -495,8 +495,8 @@ public class Text { + * @return the escaped string + */ + public static String escapeIllegalXpathSearchChars(String s) { +- StringBuffer sb = new StringBuffer(); +- sb.append(s.substring(0, (s.length() - 1))); ++ StringBuilder sb = new StringBuilder(); ++ sb.append(s, 0, s.length() - 1); + char c = s.charAt(s.length() - 1); + // NOTE: keep this in sync with _ESCAPED_CHAR below! + if (c == '!' || c == '(' || c == ':' || c == '^' +@@ -519,10 +519,10 @@ public class Text { + * @return the unescaped name + */ + public static String unescapeIllegalJcrChars(String name) { +- StringBuffer buffer = new StringBuffer(name.length()); ++ StringBuilder buffer = new StringBuilder(name.length()); + int i = name.indexOf('%'); + while (i > -1 && i + 2 < name.length()) { +- buffer.append(name.toCharArray(), 0, i); ++ buffer.append(name, 0, i); + int a = Character.digit(name.charAt(i + 1), 16); + int b = Character.digit(name.charAt(i + 2), 16); + if (a > -1 && b > -1) { +@@ -736,7 +736,7 @@ public class Text { + public static String replaceVariables(Properties variables, String value, + boolean ignoreMissing) + throws IllegalArgumentException { +- StringBuffer result = new StringBuffer(); ++ StringBuilder result = new StringBuilder(); + + // Value: + // +--+-+--------+-+-----------------+ +@@ -744,7 +744,7 @@ public class Text { + // +--+-+--------+-+-----------------+ + int p = 0, q = value.indexOf("${"); // Find first ${ + while (q != -1) { +- result.append(value.substring(p, q)); // Text before ${ ++ result.append(value, p, q); // Text before ${ + p = q; + q = value.indexOf("}", q + 2); // Find } + if (q != -1) { +@@ -763,7 +763,7 @@ public class Text { + q = value.indexOf("${", p); // Find next ${ + } + } +- result.append(value.substring(p, value.length())); // Trailing text ++ result.append(value, p, value.length()); // Trailing text + + return result.toString(); + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeActivityTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeActivityTest.java +index 243a996..6167f07 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeActivityTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeActivityTest.java +@@ -55,7 +55,7 @@ public class MergeActivityTest extends AbstractMergeTest { + VersionManager vm2 = testRootNodeW2.getSession().getWorkspace().getVersionManager(); + NodeIterator iter = vm2.merge(activityNode); + if (iter.hasNext()) { +- StringBuffer failed = new StringBuffer(); ++ StringBuilder failed = new StringBuilder(); + while (iter.hasNext()) { + failed.append(iter.nextNode().getPath()); + failed.append(", "); +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeShallowTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeShallowTest.java +index 6b0ae0e..7cd7d52 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeShallowTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeShallowTest.java +@@ -53,11 +53,11 @@ public class MergeShallowTest extends AbstractMergeTest { + NodeIterator iter = vm2.merge(nodeToMerge.getPath(), + superuser.getWorkspace().getName(), true, false); + if (iter.hasNext()) { +- StringBuffer failed = new StringBuffer(); +- while (iter.hasNext()) { ++ StringBuilder failed = new StringBuilder(); ++ do { + failed.append(iter.nextNode().getPath()); + failed.append(", "); +- } ++ } while (iter.hasNext()); + fail("Merge must not fail. failed nodes: " + failed); + return; + } +@@ -76,11 +76,11 @@ public class MergeShallowTest extends AbstractMergeTest { + NodeIterator iter = vm2.merge(nodeToMerge.getPath(), + superuser.getWorkspace().getName(), true, true); + if (iter.hasNext()) { +- StringBuffer failed = new StringBuffer(); +- while (iter.hasNext()) { ++ StringBuilder failed = new StringBuilder(); ++ do { + failed.append(iter.nextNode().getPath()); + failed.append(", "); +- } ++ } while (iter.hasNext()); + fail("Merge must not fail. failed nodes: " + failed); + return; + } +diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java +index d70ddb8..f904394 100644 +--- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java ++++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/simple/RestoreTest.java +@@ -1394,20 +1394,20 @@ public class RestoreTest extends AbstractVersionTest { + public void testLinearVersions() throws Exception { + // first get all linear versions + VersionIterator iter = versionableNode.getVersionHistory().getAllLinearVersions(); +- StringBuffer expected = new StringBuffer(); ++ StringBuilder expected = new StringBuilder(); + while (iter.hasNext()) { +- expected.append(iter.nextVersion().getName()).append(","); ++ expected.append(iter.nextVersion().getName()).append(','); + } + // restore version + versionableNode.restore(version, true); + // append new base version +- expected.append(versionableNode.getBaseVersion().getName()).append(","); ++ expected.append(versionableNode.getBaseVersion().getName()).append(','); + + // get the version names again + iter = versionableNode.getVersionHistory().getAllLinearVersions(); +- StringBuffer actual = new StringBuffer(); ++ StringBuilder actual = new StringBuilder(); + while (iter.hasNext()) { +- actual.append(iter.nextVersion().getName()).append(","); ++ actual.append(iter.nextVersion().getName()).append(','); + } + assertEquals("Node.restore() on simple versioning must create a new version.", + expected.toString(), actual.toString()); +@@ -1420,20 +1420,20 @@ public class RestoreTest extends AbstractVersionTest { + public void testLinearVersionsJcr2() throws Exception { + // first get all linear versions + VersionIterator iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); +- StringBuffer expected = new StringBuffer(); ++ StringBuilder expected = new StringBuilder(); + while (iter.hasNext()) { +- expected.append(iter.nextVersion().getName()).append(","); ++ expected.append(iter.nextVersion().getName()).append(','); + } + // restore version + versionManager.restore(version, true); + // append new base version +- expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(","); ++ expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(','); + + // get the version names again + iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); +- StringBuffer actual = new StringBuffer(); ++ StringBuilder actual = new StringBuilder(); + while (iter.hasNext()) { +- actual.append(iter.nextVersion().getName()).append(","); ++ actual.append(iter.nextVersion().getName()).append(','); + } + assertEquals("Node.restore() on simple versioning must create a new version.", + expected.toString(), actual.toString()); +@@ -1446,20 +1446,20 @@ public class RestoreTest extends AbstractVersionTest { + public void testLinearVersionsJcr2_2() throws Exception { + // first get all linear versions + VersionIterator iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); +- StringBuffer expected = new StringBuffer(); ++ StringBuilder expected = new StringBuilder(); + while (iter.hasNext()) { +- expected.append(iter.nextVersion().getName()).append(","); ++ expected.append(iter.nextVersion().getName()).append(','); + } + // restore version + versionManager.restore(version, true); + // append new base version +- expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(","); ++ expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(','); + + // get the version names again + iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); +- StringBuffer actual = new StringBuffer(); ++ StringBuilder actual = new StringBuilder(); + while (iter.hasNext()) { +- actual.append(iter.nextVersion().getName()).append(","); ++ actual.append(iter.nextVersion().getName()).append(','); + } + assertEquals("Node.restore() on simple versioning must create a new version.", + expected.toString(), actual.toString()); +@@ -1472,20 +1472,20 @@ public class RestoreTest extends AbstractVersionTest { + public void testLinearVersionsJcr2_3() throws Exception { + // first get all linear versions + VersionIterator iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); +- StringBuffer expected = new StringBuffer(); ++ StringBuilder expected = new StringBuilder(); + while (iter.hasNext()) { +- expected.append(iter.nextVersion().getName()).append(","); ++ expected.append(iter.nextVersion().getName()).append(','); + } + // restore version + versionManager.restore(versionableNode.getPath(), version.getName(), true); + // append new base version +- expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(","); ++ expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(','); + + // get the version names again + iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); +- StringBuffer actual = new StringBuffer(); ++ StringBuilder actual = new StringBuilder(); + while (iter.hasNext()) { +- actual.append(iter.nextVersion().getName()).append(","); ++ actual.append(iter.nextVersion().getName()).append(','); + } + assertEquals("Node.restore() on simple versioning must create a new version.", + expected.toString(), actual.toString()); +@@ -1498,20 +1498,20 @@ public class RestoreTest extends AbstractVersionTest { + public void testLinearVersionsJcr2_4() throws Exception { + // first get all linear versions + VersionIterator iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); +- StringBuffer expected = new StringBuffer(); ++ StringBuilder expected = new StringBuilder(); + while (iter.hasNext()) { +- expected.append(iter.nextVersion().getName()).append(","); ++ expected.append(iter.nextVersion().getName()).append(','); + } + // restore version + versionManager.restore(new Version[] {version}, true); + // append new base version +- expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(","); ++ expected.append(versionManager.getBaseVersion(versionableNode.getPath()).getName()).append(','); + + // get the version names again + iter = versionManager.getVersionHistory(versionableNode.getPath()).getAllLinearVersions(); +- StringBuffer actual = new StringBuffer(); ++ StringBuilder actual = new StringBuilder(); + while (iter.hasNext()) { +- actual.append(iter.nextVersion().getName()).append(","); ++ actual.append(iter.nextVersion().getName()).append(','); + } + assertEquals("Node.restore() on simple versioning must create a new version.", + expected.toString(), actual.toString()); +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCacheImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCacheImpl.java +index 9e0764a..85bd079 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCacheImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemCacheImpl.java +@@ -115,7 +115,7 @@ public class ItemCacheImpl implements ItemCache { + */ + private synchronized void cacheItem(ItemState state, Item item) { + if (cache.containsKey(state)) { +- log.warn("overwriting cached item " + state); ++ log.warn("overwriting cached item {}", state); + } + if (log.isDebugEnabled()) { + log.debug("caching item " + state); +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java +index 4a72582..30638da 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/ItemManagerImpl.java +@@ -341,7 +341,7 @@ public class ItemManagerImpl implements ItemManager, ItemStateCreationListener { + createNodeInstance((NodeState) state); + } catch (RepositoryException e) { + // log warning and ignore +- log.warn("Unable to create Node instance: " + e.getMessage()); ++ log.warn("Unable to create Node instance: {}", e.getMessage()); + } + } else { + createPropertyInstance((PropertyState) state); +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java +index b4e00ee..dc84928 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java +@@ -148,8 +148,7 @@ public class Jcr2spiRepositoryFactory implements RepositoryFactory { + if (configParam instanceof RepositoryConfig) { + config = (RepositoryConfig) configParam; + if (serviceFactory != null) { +- log.warn("Ignoring {} since {} was specified", PARAM_REPOSITORY_SERVICE_FACTORY, +- PARAM_REPOSITORY_CONFIG); ++ log.warn("Ignoring " + PARAM_REPOSITORY_SERVICE_FACTORY + " since " + PARAM_REPOSITORY_CONFIG + " was specified"); + } + } else { + if (serviceFactory == null) { +@@ -173,7 +172,7 @@ public class Jcr2spiRepositoryFactory implements RepositoryFactory { + return null; + } + +- log.debug("Acquiring RepositoryServiceFactory from {}", PARAM_REPOSITORY_SERVICE_FACTORY); ++ log.debug("Acquiring RepositoryServiceFactory from " + PARAM_REPOSITORY_SERVICE_FACTORY); + + if (serviceFactoryParam instanceof RepositoryServiceFactory) { + log.debug("Found RepositoryServiceFactory {}", serviceFactoryParam); +@@ -269,10 +268,10 @@ public class Jcr2spiRepositoryFactory implements RepositoryFactory { + + private static CacheBehaviour getCacheBehaviour(Map parameters) throws RepositoryException { + Object paramCacheBehaviour = parameters.get(PARAM_CACHE_BEHAVIOR); +- log.debug("Setting CacheBehaviour from {}", PARAM_CACHE_BEHAVIOR); ++ log.debug("Setting CacheBehaviour from " + PARAM_CACHE_BEHAVIOR); + + if (paramCacheBehaviour == null) { +- log.debug("{} not set, defaulting to {}", PARAM_CACHE_BEHAVIOR, DEFAULT_CACHE_BEHAVIOR); ++ log.debug(PARAM_CACHE_BEHAVIOR + " not set, defaulting to {}", DEFAULT_CACHE_BEHAVIOR); + return DEFAULT_CACHE_BEHAVIOR; + } else if (paramCacheBehaviour instanceof CacheBehaviour) { + log.debug("Setting CacheBehaviour to {}", paramCacheBehaviour); +@@ -280,13 +279,13 @@ public class Jcr2spiRepositoryFactory implements RepositoryFactory { + } else if (paramCacheBehaviour instanceof String) { + String cacheBehaviour = (String) paramCacheBehaviour; + if ("invalidate".equals(cacheBehaviour)) { +- log.debug("Setting CacheBehaviour to {}", CacheBehaviour.INVALIDATE); ++ log.debug("Setting CacheBehaviour to INVALIDATE"); + return CacheBehaviour.INVALIDATE; + } else if ("observation".equals(cacheBehaviour)) { +- log.debug("Setting CacheBehaviour to {}", CacheBehaviour.OBSERVATION); ++ log.debug("Setting CacheBehaviour to OBSERVATION"); + return CacheBehaviour.OBSERVATION; + } else { +- log.error("Invalid valid for CacheBehaviour: {} {}", PARAM_CACHE_BEHAVIOR, cacheBehaviour); ++ log.error("Invalid valid for CacheBehaviour: " + PARAM_CACHE_BEHAVIOR + " {}", cacheBehaviour); + throw new RepositoryException("Invalid value for CacheBehaviour: " + cacheBehaviour); + } + } else { +@@ -298,10 +297,10 @@ public class Jcr2spiRepositoryFactory implements RepositoryFactory { + + private static int getItemCacheSize(Map parameters) throws RepositoryException { + Object paramItemCacheSize = parameters.get(PARAM_ITEM_CACHE_SIZE); +- log.debug("Setting ItemCacheSize from {}", PARAM_ITEM_CACHE_SIZE); ++ log.debug("Setting ItemCacheSize from " + PARAM_ITEM_CACHE_SIZE); + + if (paramItemCacheSize == null) { +- log.debug("{} not set, defaulting to {}", PARAM_ITEM_CACHE_SIZE, DEFAULT_ITEM_CACHE_SIZE); ++ log.debug(PARAM_ITEM_CACHE_SIZE + " not set, defaulting to " + DEFAULT_ITEM_CACHE_SIZE); + return DEFAULT_ITEM_CACHE_SIZE; + } else if (paramItemCacheSize instanceof Integer) { + log.debug("Setting ItemCacheSize to {}", paramItemCacheSize); +@@ -324,10 +323,10 @@ public class Jcr2spiRepositoryFactory implements RepositoryFactory { + + private static int getPollTimeout(Map parameters) throws RepositoryException { + Object paramPollTimeOut = parameters.get(PARAM_POLL_TIME_OUT); +- log.debug("Setting PollTimeout from {}", PARAM_POLL_TIME_OUT); ++ log.debug("Setting PollTimeout from " + PARAM_POLL_TIME_OUT); + + if (paramPollTimeOut == null) { +- log.debug("{} not set, defaulting to {}", PARAM_POLL_TIME_OUT, DEFAULT_POLL_TIME_OUT); ++ log.debug(PARAM_POLL_TIME_OUT + " not set, defaulting to " + DEFAULT_POLL_TIME_OUT); + return DEFAULT_POLL_TIME_OUT; + } else if (paramPollTimeOut instanceof Integer) { + log.debug("Setting PollTimeout to {}", paramPollTimeOut); +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java +index 6b8e3db..581a8c7 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/JcrVersionManager.java +@@ -281,7 +281,7 @@ public class JcrVersionManager implements javax.jcr.version.VersionManager { + return (Node) itemManager.getItem(session.getHierarchyManager().getNodeEntry(activityId)); + } catch (ItemNotFoundException e) { + // the activity doesn't exist any more. +- log.warn("Activity node with id " + activityId + " doesn't exist any more."); ++ log.warn("Activity node with id {} doesn't exist any more.", activityId); + activityId = null; + return null; + } +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/LazyItemIterator.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/LazyItemIterator.java +index 21878f1..5aeb6e9 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/LazyItemIterator.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/LazyItemIterator.java +@@ -137,7 +137,7 @@ public class LazyItemIterator implements NodeIterator, PropertyIterator, Version + try { + nextItem = itemMgr.getItem(entry); + } catch (RepositoryException e) { +- log.warn("Failed to fetch item " + entry.getName() + ", skipping.", e.getMessage()); ++ log.warn("Failed to fetch item {}, skipping.", entry.getName(), e); + // reduce the size... and try the next one + size--; + } +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java +index e7b5998..2340ba3 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java +@@ -665,7 +665,7 @@ public class NodeImpl extends ItemImpl implements Node { + + Name ntName = getQName(nodeTypeName); + if (ntName.equals(getPrimaryNodeTypeName())) { +- log.debug("Changing the primary type has no effect: '" + nodeTypeName + "' already is the primary node type."); ++ log.debug("Changing the primary type has no effect: '{}' already is the primary node type.", nodeTypeName); + return; + } + +@@ -838,13 +838,13 @@ public class NodeImpl extends ItemImpl implements Node { + // then make sure the new mixin would not conflict. + return canAddMixin(getQName(mixinName)); + } catch (LockException e) { +- log.debug("Cannot add mixin '" + mixinName + "': " + e.getMessage()); ++ log.debug("Cannot add mixin '{}': {}", mixinName, e.getMessage()); + return false; + } catch (VersionException e) { +- log.debug("Cannot add mixin '" + mixinName + "': " + e.getMessage()); ++ log.debug("Cannot add mixin '{}': {}", mixinName, e.getMessage()); + return false; + } catch (ConstraintViolationException e) { +- log.debug("Cannot add mixin '" + mixinName + "': " + e.getMessage()); ++ log.debug("Cannot add mixin '{}': {}", mixinName, e.getMessage()); + return false; + } + } +@@ -870,7 +870,7 @@ public class NodeImpl extends ItemImpl implements Node { + return (Version) getItemManager().getItem(newVersion); + } else { + // nothing to do +- log.debug("Node " + safeGetJCRPath() + " is already checked in."); ++ log.debug("Node {} is already checked in.", safeGetJCRPath()); + return getBaseVersion(); + } + } +@@ -891,7 +891,7 @@ public class NodeImpl extends ItemImpl implements Node { + } + } else { + // nothing to do +- log.debug("Node " + safeGetJCRPath() + " is already checked out."); ++ log.debug("Node {} is already checked out.", safeGetJCRPath()); + } + } + +@@ -1640,7 +1640,7 @@ public class NodeImpl extends ItemImpl implements Node { + // first check characteristics of each mixin + NodeType mixin = ntMgr.getNodeType(mixinName); + if (!mixin.isMixin()) { +- log.error(mixin.getName() + ": not a mixin node type"); ++ log.error("{}: not a mixin node type", mixin.getName()); + return false; + } + +@@ -1651,7 +1651,7 @@ public class NodeImpl extends ItemImpl implements Node { + + // check if the base type supports adding this mixin + if (!entExisting.supportsMixin(mixinName)) { +- log.debug(mixin.getName() + ": not supported on node type " + getPrimaryNodeTypeName()); ++ log.debug("{}: not supported on node type {}", mixin.getName(), getPrimaryNodeTypeName()); + return false; + } + +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java +index 712cb5c..1df4b94 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java +@@ -111,7 +111,7 @@ public class RepositoryImpl extends AbstractRepository implements Referenceable + try { + return (v == null) ? null : v.getString(); + } catch (RepositoryException e) { +- log.error("corrupt descriptor value: " + key, e); ++ log.error("corrupt descriptor value: {}", key, e); + return null; + } + } +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java +index 7f278d9..54cb36c 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/SessionImpl.java +@@ -270,7 +270,7 @@ public class SessionImpl extends AbstractSession + if (item.isNode()) { + return (Node) item; + } else { +- log.error("NodeId '" + id + " does not point to a Node"); ++ log.error("NodeId '{}' does not point to a Node", id); + throw new ItemNotFoundException(LogUtil.saveGetIdString(id, getPathResolver())); + } + } catch (AccessDeniedException e) { +@@ -465,7 +465,7 @@ public class SessionImpl extends AbstractSession + try { + getLockStateManager().addLockToken(lt); + } catch (RepositoryException e) { +- log.warn("Unable to add lock token '" +lt+ "' to this session.", e); ++ log.warn("Unable to add lock token '{}' to this session.", lt, e); + } + } + +@@ -476,7 +476,7 @@ public class SessionImpl extends AbstractSession + try { + return getLockStateManager().getLockTokens(); + } catch (RepositoryException e) { +- log.warn("Unable to retrieve lock tokens for this session. (" + e.getMessage() + ")"); ++ log.warn("Unable to retrieve lock tokens for this session. ({})", e.getMessage()); + return new String[0]; + } + } +@@ -488,7 +488,7 @@ public class SessionImpl extends AbstractSession + try { + getLockStateManager().removeLockToken(lt); + } catch (RepositoryException e) { +- log.warn("Unable to remove lock token '" +lt+ "' from this session. (" + e.getMessage() + ")"); ++ log.warn("Unable to remove lock token '{}' from this session. ({})", lt, e.getMessage()); + } + } + +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java +index 8a56072..b0dfd86 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java +@@ -651,7 +651,7 @@ public class WorkspaceManager + try { + updateSync.acquire(); + } catch (InterruptedException e) { +- log.warn("Exception while disposing WorkspaceManager: " + e); ++ log.warn("Exception while disposing WorkspaceManager: {}", (Object) e); + return; + } + try { +@@ -667,7 +667,7 @@ public class WorkspaceManager + service.dispose(sessionInfo); + cache.dispose(); + } catch (Exception e) { +- log.warn("Exception while disposing WorkspaceManager: " + e); ++ log.warn("Exception while disposing WorkspaceManager: {}", (Object) e); + } finally { + updateSync.release(); + } +@@ -820,7 +820,7 @@ public class WorkspaceManager + try { + lstnr.onEvent(eventBundle); + } catch (Exception e) { +- log.warn("Exception in event polling thread: " + e); ++ log.warn("Exception in event polling thread: {}", (Object) e); + log.debug("Dump:", e); + } + } +@@ -864,7 +864,7 @@ public class WorkspaceManager + ItemState target = changeLog.getTarget(); + batch = service.createBatch(sessionInfo, target.getId()); + for (Operation op : changeLog.getOperations()) { +- log.debug("executing " + op.getName()); ++ log.debug("executing {}", op.getName()); + op.accept(this); + } + } catch (RepositoryException e) { +@@ -904,7 +904,7 @@ public class WorkspaceManager + * @throws javax.jcr.version.VersionException + */ + private void execute(Operation workspaceOperation) throws RepositoryException, ConstraintViolationException, AccessDeniedException, ItemExistsException, NoSuchNodeTypeException, UnsupportedRepositoryOperationException, VersionException { +- log.debug("executing " + workspaceOperation.getName()); ++ log.debug("executing {}", workspaceOperation.getName()); + workspaceOperation.accept(this); + } + +@@ -1249,11 +1249,11 @@ public class WorkspaceManager + onEventReceived(bundles, iel); + } + } catch (UnsupportedRepositoryOperationException e) { +- log.error("SPI implementation does not support observation: " + e); ++ log.error("SPI implementation does not support observation: {}", (Object) e); + // terminate + break; + } catch (RepositoryException e) { +- log.info("Workspace=" + wspName + ": Exception while retrieving event bundles: " + e); ++ log.info("Workspace={}: Exception while retrieving event bundles: {}", wspName, e); + log.debug("Dump:", e); + } catch (InterruptedException e) { + // terminate +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/CacheBehaviour.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/CacheBehaviour.java +index 29ec707..bf8ef3f 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/CacheBehaviour.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/CacheBehaviour.java +@@ -30,7 +30,7 @@ public final class CacheBehaviour { + * maintenance even though the repository implementation might support + * observation. + */ +- public static final CacheBehaviour INVALIDATE = new CacheBehaviour(); ++ public static final CacheBehaviour INVALIDATE = new CacheBehaviour("INVALIDATE"); + + /** + * Cache maintenance is done using events from the repository. After an +@@ -39,8 +39,16 @@ public final class CacheBehaviour { + * events. This strategy requires that the repository implementation + * supports observation. + */ +- public static final CacheBehaviour OBSERVATION = new CacheBehaviour(); ++ public static final CacheBehaviour OBSERVATION = new CacheBehaviour("OBSERVATION"); + +- private CacheBehaviour() { ++ private final String name; ++ ++ private CacheBehaviour(String name) { ++ this.name = name; ++ } ++ ++ @Override ++ public String toString() { ++ return name; + } + } +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java +index 20db0dc..90f0205 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeAttic.java +@@ -112,10 +112,7 @@ class ChildNodeAttic { + } + + boolean remove(NodeEntry movedEntry) { +- if (attic.contains(movedEntry)) { +- return attic.remove(movedEntry); +- } +- return false; ++ return attic.remove(movedEntry); + } + + Iterator iterator() { +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java +index 8fb4637..15dbebd 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/ChildNodeEntriesImpl.java +@@ -444,34 +444,34 @@ final class ChildNodeEntriesImpl implements ChildNodeEntries { + log.debug("Already ordered behind 'afterEntry'."); + // nothing to do + return; +- } else { +- // reorder named map +- Name insertName = insertLN.qName; +- if (entriesByName.containsSiblings(insertName)) { +- int position = -1; // default: reorder to the end. +- if (afterLN == entries.getHeader()) { +- // move to the beginning +- position = 0; +- } else { +- // count all SNS-entries that are before 'afterLN' in order to +- // determine the new position of the reordered node regarding +- // his siblings. +- position = 0; +- for (Iterator it = entries.linkNodeIterator(); it.hasNext(); ) { +- LinkedEntries.LinkNode ln = it.next(); +- if (insertName.equals(ln.qName) && (ln != insertLN)) { +- position++; +- } +- if (ln == afterLN) { +- break; +- } ++ } ++ ++ // reorder named map ++ Name insertName = insertLN.qName; ++ if (entriesByName.containsSiblings(insertName)) { ++ int position = -1; // default: reorder to the end. ++ if (afterLN == entries.getHeader()) { ++ // move to the beginning ++ position = 0; ++ } else { ++ // count all SNS-entries that are before 'afterLN' in order to ++ // determine the new position of the reordered node regarding ++ // his siblings. ++ position = 0; ++ for (Iterator it = entries.linkNodeIterator(); it.hasNext(); ) { ++ LinkedEntries.LinkNode ln = it.next(); ++ if (insertName.equals(ln.qName) && (ln != insertLN)) { ++ position++; ++ } ++ if (ln == afterLN) { ++ break; + } + } +- entriesByName.reorder(insertName, insertLN, position); + } +- // reorder in linked list +- entries.reorderNode(insertLN, currentAfter); ++ entriesByName.reorder(insertName, insertLN, position); + } ++ // reorder in linked list ++ entries.reorderNode(insertLN, currentAfter); + } + + //-------------------------------------------------< AbstractLinkedList >--- +@@ -753,8 +753,7 @@ final class ChildNodeEntriesImpl implements ChildNodeEntries { + List l = snsMap.get(qName); + if (l != null) { + List nodeEntries = new ArrayList(l.size()); +- for (Iterator it = l.iterator(); it.hasNext();) { +- LinkedEntries.LinkNode ln = it.next(); ++ for (LinkedEntries.LinkNode ln : l) { + nodeEntries.add(ln.getNodeEntry()); + } + return nodeEntries; +@@ -833,8 +832,7 @@ final class ChildNodeEntriesImpl implements ChildNodeEntries { + // look in snsMap + List l = snsMap.get(name); + if (l != null) { +- for (Iterator it = l.iterator(); it.hasNext();) { +- LinkedEntries.LinkNode ln = it.next(); ++ for (LinkedEntries.LinkNode ln : l) { + if (uniqueID.equals(ln.getNodeEntry().getUniqueID())) { + return ln; + } +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntryImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntryImpl.java +index 669ad62..037a620 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntryImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/HierarchyEntryImpl.java +@@ -191,7 +191,7 @@ abstract class HierarchyEntryImpl implements HierarchyEntry { + protected void invalidateInternal(boolean recursive) { + ItemState state = internalGetItemState(); + if (state == null) { +- log.debug("Skip invalidation for unresolved HierarchyEntry " + name); ++ log.debug("Skip invalidation for unresolved HierarchyEntry {}", name); + } else { + state.invalidate(); + } +@@ -336,7 +336,7 @@ abstract class HierarchyEntryImpl implements HierarchyEntry { + // Cannot revert EXISTING, REMOVED, INVALIDATED, MODIFIED states. + // State was implicitly reverted or external modifications + // reverted the modification. +- log.debug("State with status " + oldStatus + " cannot be reverted."); ++ log.debug("State with status {} cannot be reverted.", oldStatus); + } + } + +@@ -353,7 +353,7 @@ abstract class HierarchyEntryImpl implements HierarchyEntry { + if (Status.isTransient(status) || Status.isStale(status) || Status.isTerminal(status)) { + // transient || stale: avoid reloading + // new || terminal: cannot be reloaded from persistent layer anyway. +- log.debug("Skip reload for item with status " + Status.getName(status) + "."); ++ log.debug("Skip reload for item with status {}.", Status.getName(status)); + return; + } + /** +@@ -371,11 +371,11 @@ abstract class HierarchyEntryImpl implements HierarchyEntry { + } + } catch (ItemNotFoundException e) { + // remove hierarchyEntry including all children +- log.debug("Item '" + getName() + "' cannot be found on the persistent layer -> remove."); ++ log.debug("Item '{}' cannot be found on the persistent layer -> remove.", getName()); + remove(); + } catch (RepositoryException e) { + // TODO: rather throw? +- log.error("Exception while reloading item: " + e); ++ log.error("Exception while reloading item: {}", (Object) e); + } + } + +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java +index 24e2f2e..befe417 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java +@@ -525,7 +525,7 @@ public class NodeEntryImpl extends HierarchyEntryImpl implements NodeEntry { + // check for root element + if (elem.denotesRoot()) { + if (getParent() != null) { +- log.warn("NodeEntry out of 'hierarchy'" + workspacePath.toString()); ++ log.warn("NodeEntry out of 'hierarchy'{}", workspacePath); + return null; + } + continue; +@@ -567,7 +567,7 @@ public class NodeEntryImpl extends HierarchyEntryImpl implements NodeEntry { + try { + return getNodeEntry(nodeName, index) != null; + } catch (RepositoryException e) { +- log.debug("Unable to determine if a child node with name " + nodeName + " exists."); ++ log.debug("Unable to determine if a child node with name {} exists.", nodeName); + return false; + } + } +@@ -1254,9 +1254,9 @@ public class NodeEntryImpl extends HierarchyEntryImpl implements NodeEntry { + } // nodestate not yet loaded -> ignore change + } + } catch (ItemNotFoundException e) { +- log.debug("Property with name " + child.getName() + " does not exist (anymore)"); ++ log.debug("Property with name {} does not exist (anymore)", child.getName()); + } catch (RepositoryException e) { +- log.debug("Unable to access child property " + child.getName(), e.getMessage()); ++ log.debug("Unable to access child property {}", child.getName(), e); + } + } + +@@ -1484,7 +1484,7 @@ public class NodeEntryImpl extends HierarchyEntryImpl implements NodeEntry { + switch (operation.getStatus()) { + case Operation.STATUS_PERSISTED: + if (Status.isTerminal(rmEntry.getStatus())) { +- log.debug("Removal of State " + rmEntry + " has already been completed."); ++ log.debug("Removal of State {} has already been completed.", rmEntry); + } + rmEntry.remove(); + break; +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java +index a04cc1b..32afc7a 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java +@@ -233,7 +233,7 @@ class BitsetENTCacheImpl implements EffectiveNodeTypeCache { + */ + public String toString() { + StringBuilder builder = new StringBuilder(); +- builder.append("EffectiveNodeTypeCache (" + super.toString() + ")\n"); ++ builder.append("EffectiveNodeTypeCache (").append(super.toString()).append(")\n"); + builder.append("EffectiveNodeTypes in cache:\n"); + for (Key k : sortedKeys) { + builder.append(k); +@@ -490,11 +490,11 @@ class BitsetENTCacheImpl implements EffectiveNodeTypeCache { + */ + @Override + public String toString() { +- StringBuffer buf = new StringBuffer("w="); ++ StringBuilder buf = new StringBuilder("w="); + buf.append(names.length); + int i = nextSetBit(0); + while (i>=0) { +- buf.append(", ").append(i).append("="); ++ buf.append(", ").append(i).append('='); + buf.append(BitsetENTCacheImpl.this.getName(i)); + i = nextSetBit(i+1); + } +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java +index 3d2ee79..0410cfd 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/DefinitionValidator.java +@@ -104,15 +104,15 @@ class DefinitionValidator { + } + } + if (list.size() > 0) { +- StringBuffer msg = new StringBuffer(); ++ StringBuilder msg = new StringBuilder(); + msg.append("the following node types could not be registered because of unresolvable dependencies: "); +- Iterator iterator = list.iterator(); +- while (iterator.hasNext()) { +- msg.append(iterator.next().getName()); +- msg.append(" "); ++ for (QNodeTypeDefinition ntd : list) { ++ msg.append(ntd.getName()); ++ msg.append(' '); + } +- log.error(msg.toString()); +- throw new InvalidNodeTypeDefinitionException(msg.toString()); ++ String msgAsString = msg.toString(); ++ log.error(msgAsString); ++ throw new InvalidNodeTypeDefinitionException(msgAsString); + } + return ntMap; + } +@@ -473,7 +473,7 @@ class DefinitionValidator { + Name stName = supertypes[i]; + int pos = inheritanceChain.lastIndexOf(stName); + if (pos >= 0) { +- StringBuffer buf = new StringBuffer(); ++ StringBuilder buf = new StringBuilder(); + for (int j = 0; j < inheritanceChain.size(); j++) { + if (j == pos) { + buf.append("--> "); +@@ -517,7 +517,7 @@ class DefinitionValidator { + Name nt = childNodeNTs[i]; + int pos = definingParentNTs.lastIndexOf(nt); + if (pos >= 0) { +- StringBuffer buf = new StringBuffer(); ++ StringBuilder buf = new StringBuilder(); + for (int j = 0; j < definingParentNTs.size(); j++) { + if (j == pos) { + buf.append("--> "); +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java +index 6d68ec8..c10ef9e 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeTypeImpl.java +@@ -106,7 +106,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + * @see EffectiveNodeType#getAllQNodeDefinitions() + */ + public QNodeDefinition[] getAllQNodeDefinitions() { +- if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); +@@ -123,7 +123,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); +@@ -133,7 +133,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + * @see EffectiveNodeType#getAllQPropertyDefinitions() + */ + public QPropertyDefinition[] getAllQPropertyDefinitions() { +- if (namedItemDefs.size() == 0 && unnamedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty() && unnamedItemDefs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size() + unnamedItemDefs.size()); +@@ -149,7 +149,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); +@@ -161,7 +161,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + public QNodeDefinition[] getAutoCreateQNodeDefinitions() { + // since auto-create items must have a name, + // we're only searching the named item definitions +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -172,7 +172,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); +@@ -184,7 +184,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + public QPropertyDefinition[] getAutoCreateQPropertyDefinitions() { + // since auto-create items must have a name, + // we're only searching the named item definitions +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -195,7 +195,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); +@@ -207,7 +207,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + public QPropertyDefinition[] getMandatoryQPropertyDefinitions() { + // since mandatory items must have a name, + // we're only searching the named item definitions +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -218,7 +218,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); +@@ -230,7 +230,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + public QNodeDefinition[] getMandatoryQNodeDefinitions() { + // since mandatory items must have a name, + // we're only searching the named item definitions +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); +@@ -241,7 +241,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + } + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); +@@ -252,7 +252,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + */ + public QNodeDefinition[] getNamedQNodeDefinitions(Name name) { + List list = namedItemDefs.get(name); +- if (list == null || list.size() == 0) { ++ if (list == null || list.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(list.size()); +@@ -261,7 +261,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + defs.add(qDef); + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); +@@ -271,7 +271,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + * @see EffectiveNodeType#getUnnamedQNodeDefinitions() + */ + public QNodeDefinition[] getUnnamedQNodeDefinitions() { +- if (unnamedItemDefs.size() == 0) { ++ if (unnamedItemDefs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(unnamedItemDefs.size()); +@@ -280,7 +280,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + defs.add(qDef); + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QNodeDefinition[defs.size()]); +@@ -291,7 +291,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + */ + public QPropertyDefinition[] getNamedQPropertyDefinitions(Name name) { + List list = namedItemDefs.get(name); +- if (list == null || list.size() == 0) { ++ if (list == null || list.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(list.size()); +@@ -300,7 +300,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + defs.add(qDef); + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); +@@ -310,7 +310,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + * @see EffectiveNodeType#getUnnamedQPropertyDefinitions() + */ + public QPropertyDefinition[] getUnnamedQPropertyDefinitions() { +- if (unnamedItemDefs.size() == 0) { ++ if (unnamedItemDefs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(unnamedItemDefs.size()); +@@ -319,7 +319,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + defs.add(qDef); + } + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QPropertyDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QPropertyDefinition[defs.size()]); +@@ -437,14 +437,14 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + } + + private QItemDefinition[] getNamedItemDefs() { +- if (namedItemDefs.size() == 0) { ++ if (namedItemDefs.isEmpty()) { + return QItemDefinition.EMPTY_ARRAY; + } + ArrayList defs = new ArrayList(namedItemDefs.size()); + for (List list : namedItemDefs.values()) { + defs.addAll(list); + } +- if (defs.size() == 0) { ++ if (defs.isEmpty()) { + return QItemDefinition.EMPTY_ARRAY; + } + return defs.toArray(new QItemDefinition[defs.size()]); +@@ -452,14 +452,14 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + + private QItemDefinition[] getNamedItemDefs(Name name) { + List list = namedItemDefs.get(name); +- if (list == null || list.size() == 0) { ++ if (list == null || list.isEmpty()) { + return QNodeDefinition.EMPTY_ARRAY; + } + return list.toArray(new QItemDefinition[list.size()]); + } + + private QItemDefinition[] getUnnamedItemDefs() { +- if (unnamedItemDefs.size() == 0) { ++ if (unnamedItemDefs.isEmpty()) { + return QItemDefinition.EMPTY_ARRAY; + } + return unnamedItemDefs.toArray(new QItemDefinition[unnamedItemDefs.size()]); +@@ -504,7 +504,7 @@ public class EffectiveNodeTypeImpl implements Cloneable, EffectiveNodeType { + for (int i = 0; i < nta.length; i++) { + if (includesNodeType(nta[i])) { + // redundant node type +- log.debug("node type '" + nta[i] + "' is already contained."); ++ log.debug("node type '{}' is already contained.", nta[i]); + includedCount++; + } + } +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java +index 5e4ed10..39209e0 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeImpl.java +@@ -351,7 +351,7 @@ public class NodeTypeImpl extends AbstractNodeType implements NodeTypeDefinition + name = resolver().getQName(nodeName); + } catch (RepositoryException e) { + // should never get here +- log.warn("Unable to determine if there are any remove constraints for a node with name " + nodeName); ++ log.warn("Unable to determine if there are any remove constraints for a node with name {}", nodeName); + return false; + } + return !ent.hasRemoveNodeConstraint(name); +@@ -367,7 +367,7 @@ public class NodeTypeImpl extends AbstractNodeType implements NodeTypeDefinition + name = resolver().getQName(propertyName); + } catch (RepositoryException e) { + // should never get here +- log.warn("Unable to determine if there are any remove constraints for a property with name " + propertyName); ++ log.warn("Unable to determine if there are any remove constraints for a property with name {}", propertyName); + return false; + } + return !ent.hasRemovePropertyConstraint(name); +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java +index 41b438b..86ce1a2 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeManagerImpl.java +@@ -249,7 +249,7 @@ public class NodeTypeManagerImpl extends AbstractNodeTypeManager implements Node + } + } + } catch (NamespaceException e) { +- log.warn(e.getMessage() + " -> clear definition cache." ); ++ log.warn("{} -> clear definition cache.", e.getMessage()); + synchronized (pdCache) { + pdCache.clear(); + } +@@ -286,7 +286,7 @@ public class NodeTypeManagerImpl extends AbstractNodeTypeManager implements Node + } + } + } catch (NamespaceException e) { +- log.warn(e.getMessage() + " -> clear definition cache." ); ++ log.warn("{} -> clear definition cache.", e.getMessage()); + synchronized (pdCache) { + pdCache.clear(); + } +@@ -410,7 +410,7 @@ public class NodeTypeManagerImpl extends AbstractNodeTypeManager implements Node + */ + public String toString() { + StringBuilder builder = new StringBuilder(); +- builder.append("NodeTypeManager (" + super.toString() + ")\n"); ++ builder.append("NodeTypeManager (").append(super.toString()).append(")\n"); + builder.append("All NodeTypes:\n"); + try { + NodeTypeIterator iter = this.getAllNodeTypes(); +@@ -419,68 +419,72 @@ public class NodeTypeManagerImpl extends AbstractNodeTypeManager implements Node + builder.append(nt.getName()); + builder.append("\n\tSupertypes"); + for (NodeType supertype : nt.getSupertypes()) { +- builder.append("\n\t\t" + supertype.getName()); ++ builder.append("\n\t\t").append(supertype.getName()); + } +- builder.append("\n\tMixin\t" + nt.isMixin()); +- builder.append("\n\tOrderableChildNodes\t" + nt.hasOrderableChildNodes()); +- builder.append("\n\tPrimaryItemName\t" + (nt.getPrimaryItemName() == null ? "" : nt.getPrimaryItemName())); ++ builder.append("\n\tMixin\t").append(nt.isMixin()); ++ builder.append("\n\tOrderableChildNodes\t").append(nt.hasOrderableChildNodes()); ++ builder.append("\n\tPrimaryItemName\t").append(nt.getPrimaryItemName() == null ? "" : nt.getPrimaryItemName()); + for (PropertyDefinition aPd : nt.getPropertyDefinitions()) { + builder.append("\n\tPropertyDefinition"); +- builder.append(" (declared in " + aPd.getDeclaringNodeType().getName() + ") "); +- builder.append("\n\t\tName\t\t" + (aPd.getName())); ++ builder.append(" (declared in ").append(aPd.getDeclaringNodeType().getName()).append(") "); ++ builder.append("\n\t\tName\t\t").append(aPd.getName()); + String type = aPd.getRequiredType() == 0 ? "null" : PropertyType.nameFromValue(aPd.getRequiredType()); +- builder.append("\n\t\tRequiredType\t" + type); ++ builder.append("\n\t\tRequiredType\t").append(type); + String[] vca = aPd.getValueConstraints(); +- StringBuffer constraints = new StringBuffer(); ++ final String constraintsAsString; + if (vca == null) { +- constraints.append(""); ++ constraintsAsString = ""; + } else { ++ StringBuilder constraints = new StringBuilder(); + for (String aVca : vca) { + if (constraints.length() > 0) { + constraints.append(", "); + } + constraints.append(aVca); + } ++ constraintsAsString = constraints.toString(); + } +- builder.append("\n\t\tValueConstraints\t" + constraints.toString()); ++ builder.append("\n\t\tValueConstraints\t").append(constraintsAsString); + Value[] defVals = aPd.getDefaultValues(); +- StringBuffer defaultValues = new StringBuffer(); ++ final String defaultValuesAsString; + if (defVals == null) { +- defaultValues.append(""); ++ defaultValuesAsString = ""; + } else { ++ StringBuilder defaultValues = new StringBuilder(); + for (Value defVal : defVals) { + if (defaultValues.length() > 0) { + defaultValues.append(", "); + } + defaultValues.append(defVal.getString()); + } ++ defaultValuesAsString = defaultValues.toString(); + } +- builder.append("\n\t\tDefaultValue\t" + defaultValues.toString()); +- builder.append("\n\t\tAutoCreated\t" + aPd.isAutoCreated()); +- builder.append("\n\t\tMandatory\t" + aPd.isMandatory()); +- builder.append("\n\t\tOnVersion\t" + OnParentVersionAction.nameFromValue(aPd.getOnParentVersion())); +- builder.append("\n\t\tProtected\t" + aPd.isProtected()); +- builder.append("\n\t\tMultiple\t" + aPd.isMultiple()); ++ builder.append("\n\t\tDefaultValue\t").append(defaultValuesAsString); ++ builder.append("\n\t\tAutoCreated\t").append(aPd.isAutoCreated()); ++ builder.append("\n\t\tMandatory\t").append(aPd.isMandatory()); ++ builder.append("\n\t\tOnVersion\t").append(OnParentVersionAction.nameFromValue(aPd.getOnParentVersion())); ++ builder.append("\n\t\tProtected\t").append(aPd.isProtected()); ++ builder.append("\n\t\tMultiple\t").append(aPd.isMultiple()); + } + for (NodeDefinition aNd : nt.getChildNodeDefinitions()) { + builder.append("\n\tNodeDefinition"); +- builder.append(" (declared in " + aNd.getDeclaringNodeType() + ") "); +- builder.append("\n\t\tName\t\t" + aNd.getName()); ++ builder.append(" (declared in ").append(aNd.getDeclaringNodeType()).append(") "); ++ builder.append("\n\t\tName\t\t").append(aNd.getName()); + NodeType[] reqPrimaryTypes = aNd.getRequiredPrimaryTypes(); + if (reqPrimaryTypes != null && reqPrimaryTypes.length > 0) { + for (NodeType reqPrimaryType : reqPrimaryTypes) { +- builder.append("\n\t\tRequiredPrimaryType\t" + reqPrimaryType.getName()); ++ builder.append("\n\t\tRequiredPrimaryType\t").append(reqPrimaryType.getName()); + } + } + NodeType defPrimaryType = aNd.getDefaultPrimaryType(); + if (defPrimaryType != null) { +- builder.append("\n\t\tDefaultPrimaryType\t" + defPrimaryType.getName()); ++ builder.append("\n\t\tDefaultPrimaryType\t").append(defPrimaryType.getName()); + } +- builder.append("\n\t\tAutoCreated\t" + aNd.isAutoCreated()); +- builder.append("\n\t\tMandatory\t" + aNd.isMandatory()); +- builder.append("\n\t\tOnVersion\t" + OnParentVersionAction.nameFromValue(aNd.getOnParentVersion())); +- builder.append("\n\t\tProtected\t" + aNd.isProtected()); +- builder.append("\n\t\tAllowsSameNameSiblings\t" + aNd.allowsSameNameSiblings()); ++ builder.append("\n\t\tAutoCreated\t").append(aNd.isAutoCreated()); ++ builder.append("\n\t\tMandatory\t").append(aNd.isMandatory()); ++ builder.append("\n\t\tOnVersion\t").append(OnParentVersionAction.nameFromValue(aNd.getOnParentVersion())); ++ builder.append("\n\t\tProtected\t").append(aNd.isProtected()); ++ builder.append("\n\t\tAllowsSameNameSiblings\t").append(aNd.allowsSameNameSiblings()); + } + } + } catch (RepositoryException e) { +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java +index e175ab9..e5b3b43 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java +@@ -198,11 +198,11 @@ public class NodeTypeRegistryImpl implements NodeTypeRegistry, EffectiveNodeType + Set dependents = registeredNTDefs.getDependentNodeTypes(ntName); + dependents.removeAll(nodeTypeNames); + if (dependents.size() > 0) { +- StringBuffer msg = new StringBuffer(); ++ StringBuilder msg = new StringBuilder(); + msg.append(ntName).append(" can not be removed because the following node types depend on it: "); + for (Name name : dependents) { + msg.append(name); +- msg.append(" "); ++ msg.append(' '); + } + throw new RepositoryException(msg.toString()); + } +@@ -577,7 +577,7 @@ public class NodeTypeRegistryImpl implements NodeTypeRegistry, EffectiveNodeType + if (ent != null) { + entCache.put(ent); + } else { +- log.debug("Effective node type for " + ntd + " not yet built."); ++ log.debug("Effective node type for {} not yet built.", ntd); + } + // register nt-definition + registeredNTDefs.put(ntd.getName(), ntd); +@@ -755,7 +755,6 @@ public class NodeTypeRegistryImpl implements NodeTypeRegistry, EffectiveNodeType + StringBuilder builder = new StringBuilder(); + for (QNodeTypeDefinition ntd : getValues()) { + builder.append(ntd.getName()); +- Name[] supertypes = ntd.getSupertypes(); + builder.append("\n\tSupertypes"); + for (Name supertype : ntd.getSupertypes()) { + builder.append("\n\t\t").append(supertype); +@@ -785,10 +784,11 @@ public class NodeTypeRegistryImpl implements NodeTypeRegistry, EffectiveNodeType + } + } + QValue[] defVals = pd.getDefaultValues(); +- StringBuffer defaultValues = new StringBuffer(); ++ final String defaultValuesAsString; + if (defVals == null) { +- defaultValues.append(""); ++ defaultValuesAsString = ""; + } else { ++ StringBuilder defaultValues = new StringBuilder(); + for (QValue defVal : defVals) { + if (defaultValues.length() > 0) { + defaultValues.append(", "); +@@ -799,8 +799,9 @@ public class NodeTypeRegistryImpl implements NodeTypeRegistry, EffectiveNodeType + defaultValues.append(defVal.toString()); + } + } ++ defaultValuesAsString = defaultValues.toString(); + } +- builder.append("\n\t\tDefaultValue\t").append(defaultValues.toString()); ++ builder.append("\n\t\tDefaultValue\t").append(defaultValuesAsString); + builder.append("\n\t\tAutoCreated\t").append(pd.isAutoCreated()); + builder.append("\n\t\tMandatory\t").append(pd.isMandatory()); + builder.append("\n\t\tOnVersion\t").append(OnParentVersionAction.nameFromValue(pd.getOnParentVersion())); +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java +index 7846c3b..bd86f2a 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/EventImpl.java +@@ -62,7 +62,7 @@ final class EventImpl implements Event { + /** + * Cached String value of this Event instance. + */ +- private String stringValue; ++ private transient String stringValue; + + /** + * Creates a new {@link javax.jcr.observation.Event} instance based on an +@@ -154,12 +154,12 @@ final class EventImpl implements Event { + @Override + public String toString() { + if (stringValue == null) { +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + sb.append("Event: Path: "); + try { + sb.append(getPath()); + } catch (RepositoryException e) { +- log.error("Exception retrieving path: " + e); ++ log.error("Exception retrieving path: {}", (Object) e); + sb.append("[Error retrieving path]"); + } + sb.append(", ").append(valueOf(getType())).append(": "); +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/ObservationManagerImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/ObservationManagerImpl.java +index d854c3d..2054bff 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/ObservationManagerImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/observation/ObservationManagerImpl.java +@@ -119,7 +119,7 @@ public class ObservationManagerImpl implements ObservationManager, InternalEvent + readOnlySubscriptions = null; + } + } +- if (subscriptions.size() == 0) { ++ if (subscriptions.isEmpty()) { + wspManager.removeEventListener(this); + } else { + wspManager.updateEventFilters(); +@@ -188,7 +188,7 @@ public class ObservationManagerImpl implements ObservationManager, InternalEvent + try { + listener.onEvent(eventIter); + } catch (Throwable t) { +- log.warn("EventConsumer threw exception: " + t.toString()); ++ log.warn("EventConsumer threw exception: {}", (Object) t); + log.debug("Stacktrace: ", t); + // move on to the next listener + } +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java +index c2dfe72..4abcbb2 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/query/NodeIteratorImpl.java +@@ -220,13 +220,13 @@ public class NodeIteratorImpl implements ScoreNodeIterator { + next = (Node) tmp; + nextScore = row.getScore(null); + } else { +- log.warn("Item with Id is not a Node: " + nextId); ++ log.warn("Item with Id is not a Node: {}", nextId); + // try next + invalid++; + pos++; + } + } catch (Exception e) { +- log.warn("Exception retrieving Node with Id: " + nextId); ++ log.warn("Exception retrieving Node with Id: {}", nextId); + // try next + invalid++; + pos++; +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImpl.java +index 33c41b5..8882d16 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImpl.java +@@ -111,10 +111,10 @@ class AccessControlListImpl implements JackrabbitAccessControlList, AccessContro + // the isAllow flag + boolean isAllow = NT_REP_GRANT_ACE.equals(aceNode.getNodeTypeName()); + // build the entry +- AccessControlEntry ace = new AccessControlEntryImpl(principal, privileges, isAllow, restrictions, Collections.EMPTY_MAP, resolver, qValueFactory); ++ AccessControlEntry ace = new AccessControlEntryImpl(principal, privileges, isAllow, restrictions, Collections.emptyMap(), resolver, qValueFactory); + entries.add(ace); + } catch (RepositoryException e) { +- log.debug("Fail to create Entry for "+ aceNode.getName().toString()); ++ log.debug("Fail to create Entry for {}", aceNode.getName()); + } + } + } +@@ -183,7 +183,7 @@ class AccessControlListImpl implements JackrabbitAccessControlList, AccessContro + public boolean addEntry(Principal principal, Privilege[] privileges, + boolean isAllow, Map restrictions) + throws AccessControlException, RepositoryException { +- return addEntry(principal, privileges, isAllow, restrictions, Collections.EMPTY_MAP); ++ return addEntry(principal, privileges, isAllow, restrictions, Collections.emptyMap()); + } + + @Override +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlManagerImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlManagerImpl.java +index 985165b..11b2efd 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlManagerImpl.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlManagerImpl.java +@@ -406,7 +406,7 @@ class AccessControlManagerImpl implements AccessControlManager, AccessControlCon + Operation sm = SetMixin.create(parent, new Name[]{mixinName}); + itemStateMgr.execute(sm); + } else { +- log.debug(mixinName.toString()+" is already present on the given node state "+parent.getName().toString()); ++ log.debug("{} is already present on the given node state {}", mixinName, parent.getName()); + } + } + +@@ -424,7 +424,7 @@ class AccessControlManagerImpl implements AccessControlManager, AccessControlCon + try { + NameParser.checkFormat(name); + } catch (NameException e) { +- log.debug("Invalid path name for Permission: " + name + "."); ++ log.debug("Invalid path name for Permission: {}.", name); + } + + int i = 0; +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/AbstractItemStateFactory.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/AbstractItemStateFactory.java +index 4394c05..eb9f142 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/AbstractItemStateFactory.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/AbstractItemStateFactory.java +@@ -67,11 +67,11 @@ public abstract class AbstractItemStateFactory implements ItemStateFactory { + */ + void notifyCreated(ItemState createdState) { + ItemStateCreationListener[] listeners = getListeners(); +- for (int i = 0; i < listeners.length; i++) { ++ for (ItemStateCreationListener listener : listeners) { + // notify listeners when this item state is saved or invalidated +- createdState.addListener(listeners[i]); ++ createdState.addListener(listener); + // now inform about creation +- listeners[i].created(createdState); ++ listener.created(createdState); + } + } + +@@ -81,9 +81,9 @@ public abstract class AbstractItemStateFactory implements ItemStateFactory { + */ + void notifyUpdated(ItemState state, int previousStatus) { + ItemStateCreationListener[] listeners = getListeners(); +- for (int i = 0; i < listeners.length; i++) { ++ for (ItemStateCreationListener listener : listeners) { + // now inform about creation +- listeners[i].statusChanged(state, previousStatus); ++ listener.statusChanged(state, previousStatus); + } + } + } +\ No newline at end of file +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java +index 0d73563..dac9f95 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ChangeLog.java +@@ -84,12 +84,12 @@ public class ChangeLog { + List changedPrimaryTypes = new ArrayList(); + + Operation[] ops = operations.toArray(new Operation[operations.size()]); +- for (int i = 0; i < ops.length; i++) { +- ops[i].persisted(); +- if (ops[i] instanceof SetMixin) { +- changedMixins.add(((SetMixin) ops[i]).getNodeState()); +- } else if (ops[i] instanceof SetPrimaryType) { +- changedPrimaryTypes.add(((SetPrimaryType) ops[i]).getNodeState()); ++ for (Operation op : ops) { ++ op.persisted(); ++ if (op instanceof SetMixin) { ++ changedMixins.add(((SetMixin) op).getNodeState()); ++ } else if (op instanceof SetPrimaryType) { ++ changedPrimaryTypes.add(((SetPrimaryType) op).getNodeState()); + } + } + // process all remaining states that were not covered by the +@@ -117,7 +117,7 @@ public class ChangeLog { + break; + case Status.NEW: + // illegal. should not get here. +- log.error("ChangeLog still contains NEW state: " + state.getName()); ++ log.error("ChangeLog still contains NEW state: {}", state.getName()); + state.setStatus(Status.EXISTING); + break; + case Status.MODIFIED: +@@ -125,7 +125,7 @@ public class ChangeLog { + case Status.STALE_DESTROYED: + case Status.STALE_MODIFIED: + // illegal. +- log.error("ChangeLog contains state (" + state.getName() + ") with illegal status " + Status.getName(state.getStatus())); ++ log.error("ChangeLog contains state ({}) with illegal status {}", state.getName(), Status.getName(state.getStatus())); + break; + case Status.EXISTING: + if (state.isNode() && changedMixins.contains(state)) { +@@ -164,13 +164,13 @@ public class ChangeLog { + break; + case Status.NEW: + // illegal. should not get here. +- log.error("ChangeLog still contains NEW state: " + state.getName()); ++ log.error("ChangeLog still contains NEW state: {}", state.getName()); + state.getHierarchyEntry().revert(); + break; + case Status.MODIFIED: + case Status._UNDEFINED_: + // illegal. +- log.error("ChangeLog contains state (" + state.getName() + ") with illegal status " + Status.getName(state.getStatus())); ++ log.error("ChangeLog contains state ({}) with illegal status {}", state.getName(), Status.getName(state.getStatus())); + break; + case Status.EXISTING: + case Status.REMOVED: +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java +index 48ef658..0402046 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/TransientItemStateManager.java +@@ -419,10 +419,10 @@ public class TransientItemStateManager implements ItemStateCreationListener { + case Status.MODIFIED: + case Status.INVALIDATED: + // MODIFIED, INVALIDATED: ignore. +- log.debug("Item " + state.getName() + " changed status from " + Status.getName(previousStatus) + " to " + Status.getName(state.getStatus()) + "."); ++ log.debug("Item {} changed status from {} to {}.", new Object[] { state.getName(), Status.getName(previousStatus), Status.getName(state.getStatus()) }); + break; + default: +- log.error("ItemState "+ state.getName() + " has invalid status: " + state.getStatus()); ++ log.error("ItemState {} has invalid status: {}", state.getName(), state.getStatus()); + } + } + +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/LogUtil.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/LogUtil.java +index 85266cc..a0d27e4 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/LogUtil.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/LogUtil.java +@@ -52,7 +52,7 @@ public final class LogUtil { + try { + return pathResolver.getJCRPath(qPath); + } catch (NamespaceException e) { +- log.error("failed to convert " + qPath + " to JCR path."); ++ log.error("failed to convert {} to JCR path.", qPath); + // return string representation of internal path as a fallback + return qPath.toString(); + } +@@ -70,7 +70,7 @@ public final class LogUtil { + try { + return safeGetJCRPath(itemState.getHierarchyEntry().getPath(), pathResolver); + } catch (RepositoryException e) { +- log.error("failed to convert " + itemState.toString() + " to JCR path."); ++ log.error("failed to convert {} to JCR path.", itemState); + return itemState.toString(); + } + } +@@ -88,7 +88,7 @@ public final class LogUtil { + try { + return nameResolver.getJCRName(qName); + } catch (NamespaceException e) { +- log.error("failed to convert " + qName + " to JCR name."); ++ log.error("failed to convert {} to JCR name.", qName); + return qName.toString(); + } + } +@@ -106,7 +106,7 @@ public final class LogUtil { + if (p == null || pathResolver == null) { + return itemId.toString(); + } else { +- StringBuffer bf = new StringBuffer(); ++ StringBuilder bf = new StringBuilder(); + String uniqueID = itemId.getUniqueID(); + if (uniqueID != null) { + bf.append(uniqueID).append(" - "); +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImportHandler.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImportHandler.java +index e82ab04..2973d7e 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImportHandler.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/ImportHandler.java +@@ -99,9 +99,7 @@ public class ImportHandler extends DefaultHandler { + @Override + public void warning(SAXParseException e) throws SAXException { + // log exception and carry on... +- log.warn("warning encountered at line: " + e.getLineNumber() +- + ", column: " + e.getColumnNumber() +- + " while parsing XML stream", e); ++ log.warn("warning encountered at line: {}, column: {} while parsing XML stream", new Object[] { e.getLineNumber(), e.getColumnNumber(), e }); + } + + /** +@@ -110,9 +108,7 @@ public class ImportHandler extends DefaultHandler { + @Override + public void error(SAXParseException e) throws SAXException { + // log exception and carry on... +- log.error("error encountered at line: " + e.getLineNumber() +- + ", column: " + e.getColumnNumber() +- + " while parsing XML stream: " + e.toString()); ++ log.error("error encountered at line: {}, column: {} while parsing XML stream: {}", new Object[] { e.getLineNumber(), e.getColumnNumber(), e }); + } + + /** +@@ -121,9 +117,7 @@ public class ImportHandler extends DefaultHandler { + @Override + public void fatalError(SAXParseException e) throws SAXException { + // log and re-throw exception +- log.error("fatal error encountered at line: " + e.getLineNumber() +- + ", column: " + e.getColumnNumber() +- + " while parsing XML stream: " + e.toString()); ++ log.error("fatal error encountered at line: {}, column: {} while parsing XML stream: {}", new Object[] { e.getLineNumber(), e.getColumnNumber(), e }); + throw e; + } + +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java +index 728dc67..e84c315 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/SessionImporter.java +@@ -160,7 +160,7 @@ public class SessionImporter implements Importer, SessionListener { + if (parent == null) { + // parent node was skipped, skip this child node also + parents.push(null); // push null onto stack for skipped node +- log.debug("Skipping node '" + nodeInfo.getName() + "'."); ++ log.debug("Skipping node '{}'.", nodeInfo.getName()); + return; + } + +@@ -182,7 +182,7 @@ public class SessionImporter implements Importer, SessionListener { + if (def.isProtected() && entExisting.includesNodeType(nodeInfo.getNodeTypeName())) { + // skip protected node + parents.push(null); // push null onto stack for skipped node +- log.debug("skipping protected node " + LogUtil.safeGetJCRPath(existing, session.getPathResolver())); ++ log.debug("skipping protected node {}", LogUtil.safeGetJCRPath(existing, session.getPathResolver())); + return; + } + if (def.isAutoCreated() && entExisting.includesNodeType(nodeInfo.getNodeTypeName())) { +@@ -433,7 +433,7 @@ public class SessionImporter implements Importer, SessionListener { + // do create new nodeState + QNodeDefinition def = session.getItemDefinitionProvider().getQNodeDefinition(parentNtNames, nodeInfo.getName(), nodeInfo.getNodeTypeName()); + if (def.isProtected()) { +- log.debug("Skipping protected nodeState (" + nodeInfo.getName() + ")"); ++ log.debug("Skipping protected nodeState ({})", nodeInfo.getName()); + return null; + } else { + Name ntName = nodeInfo.getNodeTypeName(); +@@ -481,7 +481,7 @@ public class SessionImporter implements Importer, SessionListener { + def = existing.getDefinition(); + if (def.isProtected()) { + // skip protected property +- log.debug("skipping protected property " + LogUtil.safeGetJCRPath(existing, session.getPathResolver())); ++ log.debug("skipping protected property {}", LogUtil.safeGetJCRPath(existing, session.getPathResolver())); + return; + } + if (def.isAutoCreated() +@@ -510,7 +510,7 @@ public class SessionImporter implements Importer, SessionListener { + } + if (def.isProtected()) { + // skip protected property +- log.debug("skipping protected property " + propName); ++ log.debug("skipping protected property {}", propName); + return; + } + } +diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/TargetImportHandler.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/TargetImportHandler.java +index 5e1d64b..8078f82 100644 +--- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/TargetImportHandler.java ++++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/xml/TargetImportHandler.java +@@ -261,7 +261,7 @@ abstract class TargetImportHandler extends DefaultHandler { + if (tmpFile.length() > Integer.MAX_VALUE) { + throw new IOException("size of value is too big, use reader()"); + } +- StringBuffer sb = new StringBuffer((int) tmpFile.length()); ++ StringBuilder sb = new StringBuilder((int) tmpFile.length()); + char[] chunk = new char[0x2000]; + int read; + Reader reader = new FileReader(tmpFile); +diff --git a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java +index c8832cd..af5f589 100644 +--- a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java ++++ b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java +@@ -119,7 +119,7 @@ public abstract class AbstractJCR2SPITest extends TestCase implements Repository + */ + public static final String toJCRPath(Path path) { + Element[] elems = path.getElements(); +- StringBuffer jcrPath = new StringBuffer(); ++ StringBuilder jcrPath = new StringBuilder(); + + for (int k = 0; k < elems.length; k++) { + jcrPath.append(elems[k].getName().getLocalName()); +diff --git a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/PropertyLengthTest.java b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/PropertyLengthTest.java +index 0776b53..5ffc9cf 100644 +--- a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/PropertyLengthTest.java ++++ b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/PropertyLengthTest.java +@@ -91,7 +91,7 @@ public class PropertyLengthTest extends AbstractJCRTest { + } + p = testRootNode.setProperty(propertyName1, val); + } catch (RepositoryException e) { +- log.error("Unable to create Property of type " + propertyType); ++ log.error("Unable to create Property of type {}", propertyType); + throw new NotExecutableException(); + } + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventFilterImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventFilterImpl.java +index d0c4edb..119dddb 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventFilterImpl.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventFilterImpl.java +@@ -190,15 +190,15 @@ public class EventFilterImpl implements EventFilter, Serializable { + */ + @Override + public String toString() { +- return new StringBuffer(getClass().getName()) +- .append("[") ++ return new StringBuilder(getClass().getName()) ++ .append('[') + .append("eventTypes: ").append(eventTypes).append(", ") + .append("absPath: ").append(absPath).append(", ") + .append("isDeep: ").append(isDeep).append(", ") + .append("uuids: ").append(uuids).append(", ") + .append("nodeTypeNames: ").append(nodeTypeNames).append(", ") + .append("noLocal: ").append(noLocal) +- .append("]") ++ .append(']') + .toString(); + } + +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java +index 2baa3c8..de41c0e 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java +@@ -84,7 +84,7 @@ public class EventImpl implements Event, Serializable { + public EventImpl(int type, Path path, ItemId itemId, NodeId parentId, + Name primaryNodeTypeName, Name[] mixinTypeNames, + String userId) { +- this(type, path, itemId, parentId, primaryNodeTypeName, mixinTypeNames, userId, null, Long.MIN_VALUE, Collections.EMPTY_MAP); ++ this(type, path, itemId, parentId, primaryNodeTypeName, mixinTypeNames, userId, null, Long.MIN_VALUE, Collections.emptyMap()); + } + + /** +@@ -187,8 +187,8 @@ public class EventImpl implements Event, Serializable { + //-------------------------------------------------------------< Object >--- + @Override + public String toString() { +- return new StringBuffer(getClass().getName()) +- .append("[") ++ return new StringBuilder(getClass().getName()) ++ .append('[') + .append("eventTypes: ").append(type).append(", ") + .append("absPath: ").append(path).append(", ") + .append("itemId: ").append(itemId).append(", ") +@@ -196,7 +196,7 @@ public class EventImpl implements Event, Serializable { + .append("primaryNodeTypeName: ").append(primaryNodeTypeName).append(", ") + .append("mixinTypeNames: ").append(Arrays.toString(mixinTypeNames)).append(", ") + .append("userId").append(userId) +- .append("]") ++ .append(']') + .toString(); + } + +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/AbstractChangeLog.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/AbstractChangeLog.java +index d7e0857..aacf33a 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/AbstractChangeLog.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/AbstractChangeLog.java +@@ -63,7 +63,7 @@ public abstract class AbstractChangeLog implements ChangeLo + + @Override + public String toString() { +- StringBuffer b = new StringBuffer(); ++ StringBuilder b = new StringBuilder(); + for (Iterator it = operations.iterator(); it.hasNext(); ) { + b.append(it.next()); + if (it.hasNext()) { +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/ParsingPathResolver.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/ParsingPathResolver.java +index 1a6d78e..f673b74 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/ParsingPathResolver.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/conversion/ParsingPathResolver.java +@@ -100,7 +100,7 @@ public class ParsingPathResolver implements PathResolver { + * @see PathResolver#getJCRPath(org.apache.jackrabbit.spi.Path) + */ + public String getJCRPath(Path path) throws NamespaceException { +- StringBuffer buffer = new StringBuffer(); ++ StringBuilder buffer = new StringBuilder(); + + Path.Element[] elements = path.getElements(); + for (int i = 0; i < elements.length; i++) { +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java +index d283161..31ba3d0 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/identifier/AbstractIdFactory.java +@@ -88,7 +88,7 @@ public abstract class AbstractIdFactory implements IdFactory { + } else if (uniqueId == null) { + return DELIMITER + path.toString(); + } else { +- StringBuffer bf = new StringBuffer(); ++ StringBuilder bf = new StringBuilder(); + bf.append(Text.escape(uniqueId, DELIMITER)); + bf.append(DELIMITER); + bf.append(path.toString()); +@@ -212,7 +212,7 @@ public abstract class AbstractIdFactory implements IdFactory { + */ + @Override + public String toString() { +- StringBuffer b = new StringBuffer(); ++ StringBuilder b = new StringBuilder(); + if (uniqueID != null) { + b.append(uniqueID); + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/Slf4jLogWriter.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/Slf4jLogWriter.java +index 77a96ef..75115fb 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/Slf4jLogWriter.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/Slf4jLogWriter.java +@@ -83,13 +83,13 @@ public class Slf4jLogWriter implements LogWriter { + // -----------------------------------------------------< private >--- + + private String formatArgs(Object[] args) { +- StringBuffer b = new StringBuffer(); ++ StringBuilder b = new StringBuilder(); + formatArgs(args, b); + return b.toString(); + } + + private String formatResult(Object result) { +- StringBuffer b = new StringBuffer(); ++ StringBuilder b = new StringBuilder(); + formatArg(result, b); + return b.toString(); + } +@@ -100,7 +100,7 @@ public class Slf4jLogWriter implements LogWriter { + return sw.toString(); + } + +- private void formatArgs(Object[] args, StringBuffer b) { ++ private void formatArgs(Object[] args, StringBuilder b) { + String separator = ""; + for (int k = 0; k < args.length; k++) { + b.append(separator); +@@ -109,7 +109,7 @@ public class Slf4jLogWriter implements LogWriter { + } + } + +- private void formatArg(Object arg, StringBuffer b) { ++ private void formatArg(Object arg, StringBuilder b) { + if (arg instanceof Object[]) { + b.append('['); + formatArgs((Object[]) arg, b); +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/WriterLogWriter.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/WriterLogWriter.java +index 1aa0883..2a3b2a3 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/WriterLogWriter.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/logging/WriterLogWriter.java +@@ -87,13 +87,13 @@ public class WriterLogWriter implements LogWriter { + // -----------------------------------------------------< private >--- + + private String formatArgs(Object[] args) { +- StringBuffer b = new StringBuffer(); ++ StringBuilder b = new StringBuilder(); + formatArgs(args, b); + return b.toString(); + } + + private String formatResult(Object result) { +- StringBuffer b = new StringBuffer(); ++ StringBuilder b = new StringBuilder(); + formatArg(result, b); + return b.toString(); + } +@@ -104,7 +104,7 @@ public class WriterLogWriter implements LogWriter { + return sw.toString(); + } + +- private void formatArgs(Object[] args, StringBuffer b) { ++ private void formatArgs(Object[] args, StringBuilder b) { + String separator = ""; + for (Object arg : args) { + b.append(separator); +@@ -113,7 +113,7 @@ public class WriterLogWriter implements LogWriter { + } + } + +- private void formatArg(Object arg, StringBuffer b) { ++ private void formatArg(Object arg, StringBuilder b) { + if (arg instanceof Object[]) { + b.append('['); + formatArgs((Object[]) arg, b); +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/Pattern.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/Pattern.java +index 4ea720a..22ecc56 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/Pattern.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/name/Pattern.java +@@ -275,12 +275,12 @@ public abstract class Pattern { + } + + public String toString() { +- return new StringBuffer() +- .append("(") ++ return new StringBuilder() ++ .append('(') + .append(pattern1) +- .append("|") ++ .append('|') + .append(pattern2) +- .append(")") ++ .append(')') + .toString(); + } + } +@@ -308,12 +308,12 @@ public abstract class Pattern { + } + + public String toString() { +- return new StringBuffer() +- .append("(") ++ return new StringBuilder() ++ .append('(') + .append(pattern1) + .append(", ") + .append(pattern2) +- .append(")") ++ .append(')') + .toString(); + } + } +@@ -362,8 +362,8 @@ public abstract class Pattern { + } + + public String toString() { +- return new StringBuffer() +- .append("(") ++ return new StringBuilder() ++ .append('(') + .append(pattern) + .append(")*") + .toString(); +@@ -410,10 +410,10 @@ public abstract class Pattern { + } + + public String toString() { +- return new StringBuffer() +- .append("\"") ++ return new StringBuilder() ++ .append('"') + .append(path) +- .append("\"") ++ .append('"') + .toString(); + } + } +@@ -458,10 +458,10 @@ public abstract class Pattern { + } + + public String toString() { +- return new StringBuffer() +- .append("\"") ++ return new StringBuilder() ++ .append('"') + .append(name) +- .append("\"") ++ .append('"') + .toString(); + } + } +@@ -491,12 +491,12 @@ public abstract class Pattern { + } + + public String toString() { +- return new StringBuffer() ++ return new StringBuilder() + .append("\"{") + .append(namespaceUriStr) +- .append("}") ++ .append('}') + .append(localNameStr) +- .append("\"") ++ .append('"') + .toString(); + } + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java +index 54bd1fd..25f5340 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java +@@ -44,7 +44,7 @@ import java.io.FileInputStream; + public class NamespaceExtractor { + private static Logger log = LoggerFactory.getLogger(NamespaceExtractor.class); + private final NamespaceMapping mapping = new NamespaceMapping(); +- private final Map basePrefixes = new HashMap(); ++ private final Map basePrefixes = new HashMap(); + private String defaultBasePrefix; + + /** +@@ -89,13 +89,13 @@ public class NamespaceExtractor { + // if prefix already used + if (mapping.hasPrefix(prefix)){ + int c; +- Integer co = (Integer) basePrefixes.get(prefix); ++ Integer co = basePrefixes.get(prefix); + if (co == null) { +- basePrefixes.put(prefix, new Integer(1)); ++ basePrefixes.put(prefix, 1); + c = 1; + } else { +- c = co.intValue() + 1; +- basePrefixes.put(prefix, new Integer(c)); ++ c = co + 1; ++ basePrefixes.put(prefix, c); + } + prefix = prefix + "_" + c; + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/AbstractNodeType.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/AbstractNodeType.java +index 621ee68..d91e18b 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/AbstractNodeType.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/AbstractNodeType.java +@@ -217,10 +217,10 @@ public abstract class AbstractNodeType implements NodeType { + try { + ntName = resolver.getQName(nodeTypeName); + } catch (NamespaceException e) { +- log.warn("invalid node type name: " + nodeTypeName, e); ++ log.warn("invalid node type name: {}", nodeTypeName, e); + return false; + } catch (NameException e) { +- log.warn("invalid node type name: " + nodeTypeName, e); ++ log.warn("invalid node type name: {}", nodeTypeName, e); + return false; + } + return isNodeType(ntName); +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeDefinitionImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeDefinitionImpl.java +index add4104..ba8f3a4 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeDefinitionImpl.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeDefinitionImpl.java +@@ -94,7 +94,7 @@ public class NodeDefinitionImpl extends ItemDefinitionImpl implements NodeDefini + return resolver.getJCRName(ntName); + } catch (NamespaceException e) { + // should never get here +- log.error("invalid default node type " + ntName, e); ++ log.error("invalid default node type {}", ntName, e); + return null; + } + } +@@ -115,7 +115,7 @@ public class NodeDefinitionImpl extends ItemDefinitionImpl implements NodeDefini + return ntMgr.getNodeType(ntName); + } catch (NoSuchNodeTypeException e) { + // should never get here +- log.error("invalid default node type " + ntName, e); ++ log.error("invalid default node type {}", ntName, e); + return null; + } + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeDefinitionTemplateImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeDefinitionTemplateImpl.java +index b8f3dc4..df79fb1 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeDefinitionTemplateImpl.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeDefinitionTemplateImpl.java +@@ -138,7 +138,7 @@ class NodeDefinitionTemplateImpl + rptNames[i] = resolver.getJCRName(requiredPrimaryTypeNames[i]); + } catch (NamespaceException e) { + // should never get here +- log.error("invalid node type name: " + requiredPrimaryTypeNames[i], e); ++ log.error("invalid node type name: {}", requiredPrimaryTypeNames[i], e); + rptNames[i] = requiredPrimaryTypeNames[i].toString(); + } + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeDefinitionImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeDefinitionImpl.java +index 9da0da7..a8c2dc0 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeDefinitionImpl.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeDefinitionImpl.java +@@ -153,7 +153,7 @@ public class NodeTypeDefinitionImpl implements NodeTypeDefinition { + dstn[i] = resolver.getJCRName(stNames[i]); + } catch (NamespaceException e) { + // should never get here +- log.error("invalid node type name: " + stNames[i], e); ++ log.error("invalid node type name: {}", stNames[i], e); + dstn[i] = stNames[i].toString(); + } + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeTemplateImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeTemplateImpl.java +index bf1b14f..c7043db 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeTemplateImpl.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeTemplateImpl.java +@@ -94,14 +94,14 @@ public class NodeTypeTemplateImpl implements NodeTypeTemplate { + + NodeDefinition[] nodeDefs = def.getDeclaredChildNodeDefinitions(); + if (nodeDefs != null) { +- List list = getNodeDefinitionTemplates(); ++ List list = getNodeDefinitionTemplates(); + for (NodeDefinition nodeDef : nodeDefs) { + list.add(new NodeDefinitionTemplateImpl(nodeDef, resolver)); + } + } + PropertyDefinition[] propDefs = def.getDeclaredPropertyDefinitions(); + if (propDefs != null) { +- List list = getPropertyDefinitionTemplates(); ++ List list = getPropertyDefinitionTemplates(); + for (PropertyDefinition propDef : propDefs) { + list.add(new PropertyDefinitionTemplateImpl(propDef, resolver)); + } +@@ -178,7 +178,7 @@ public class NodeTypeTemplateImpl implements NodeTypeTemplate { + /** + * {@inheritDoc} + */ +- public List getPropertyDefinitionTemplates() { ++ public List getPropertyDefinitionTemplates() { + if (propertyDefinitionTemplates == null) { + propertyDefinitionTemplates = new LinkedList(); + } +@@ -188,7 +188,7 @@ public class NodeTypeTemplateImpl implements NodeTypeTemplate { + /** + * {@inheritDoc} + */ +- public List getNodeDefinitionTemplates() { ++ public List getNodeDefinitionTemplates() { + if (nodeDefinitionTemplates == null) { + nodeDefinitionTemplates = new LinkedList(); + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/PropertyDefinitionImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/PropertyDefinitionImpl.java +index 3feeda9..faab798 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/PropertyDefinitionImpl.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/PropertyDefinitionImpl.java +@@ -100,7 +100,8 @@ public class PropertyDefinitionImpl extends ItemDefinitionImpl implements Proper + } catch (RepositoryException e) { + // should never get here + String propName = (getName() == null) ? "[null]" : getName(); +- log.error("illegal default value specified for property " + propName + " in node type " + getDeclaringNodeType(), e); ++ log.error("illegal default value specified for property {} in node type {}", ++ new Object[] { propName, getDeclaringNodeType(), e }); + return null; + } + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/PathConstraint.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/PathConstraint.java +index b7b16c8..18d38f8 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/PathConstraint.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/PathConstraint.java +@@ -77,7 +77,7 @@ class PathConstraint extends ValueConstraint { + } + path = resolver.getQPath(jcrPath); + } +- StringBuffer definition = new StringBuffer(path.getString()); ++ StringBuilder definition = new StringBuilder(path.getString()); + if (deep) { + definition.append(WILDCARD); + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryTreeBuilderRegistry.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryTreeBuilderRegistry.java +index a5d6269..f269585 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryTreeBuilderRegistry.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryTreeBuilderRegistry.java +@@ -60,7 +60,7 @@ public class QueryTreeBuilderRegistry { + languages.addAll(Arrays.asList(qtb.getSupportedLanguages())); + } + } catch (Error e) { +- log.warn("Unable to load providers for QueryTreeBuilder: " + e); ++ log.warn("Unable to load providers for QueryTreeBuilder: {}", (Object) e); + } + LANGUAGES = Collections.unmodifiableSet(languages); + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLParser.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLParser.java +index 8fc749d..5b3aec1 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLParser.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLParser.java +@@ -1021,11 +1021,12 @@ public class JCRSQLParser/*@bgen(jjtree)*/implements JCRSQLParserTreeConstants, + jjtc000 = false; + if (t.image.startsWith("TIMESTAMP")) { + jjtn000.setValue(t.image.substring(t.image.indexOf('\'') + 1, t.image.length() - 1)); +- if (jjtn000.getValue().indexOf(" ") == 10) { ++ final String jjtn000Value = jjtn000.getValue(); ++ if (jjtn000Value.indexOf(' ') == 10) { + // replace SQL 92 timesamp string with ISO8601 +- StringBuffer tmp = new StringBuffer(); +- tmp.append(jjtn000.getValue().substring(0, 10)); +- tmp.append("T").append(jjtn000.getValue().substring(11)); ++ StringBuilder tmp = new StringBuilder(jjtn000Value.length()); ++ tmp.append(jjtn000Value, 0, 10); ++ tmp.append('T').append(jjtn000Value, 11, jjtn000Value.length()); + jjtn000.setValue(tmp.toString()); + } + jjtn000.setType(QueryConstants.TYPE_TIMESTAMP); +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java +index 0183518..8fc5862 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java +@@ -712,7 +712,7 @@ public class JCRSQLQueryBuilder implements JCRSQLParserVisitor { + try { + index = Integer.parseInt(indexStr); + } catch (NumberFormatException e) { +- log.warn("Unable to parse index for path element: " + names[i]); ++ log.warn("Unable to parse index for path element: {}", names[i]); + } + } + if (name.equals("%")) { +@@ -768,7 +768,7 @@ public class JCRSQLQueryBuilder implements JCRSQLParserVisitor { + if (from == to || (pattern.indexOf(from) < 0 && pattern.indexOf(to) < 0)) { + return pattern; + } +- StringBuffer translated = new StringBuffer(pattern.length()); ++ StringBuilder translated = new StringBuilder(pattern.length()); + boolean escaped = false; + for (int i = 0; i < pattern.length(); i++) { + if (pattern.charAt(i) == from) { +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ParseException.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ParseException.java +index 4a51710..f6aa444 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ParseException.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ParseException.java +@@ -114,7 +114,7 @@ public class ParseException extends Exception { + if (!specialConstructor) { + return super.getMessage(); + } +- StringBuffer expected = new StringBuffer(); ++ StringBuilder expected = new StringBuilder(); + int maxSize = 0; + for (int i = 0; i < expectedTokenSequences.length; i++) { + if (maxSize < expectedTokenSequences[i].length) { +@@ -161,7 +161,7 @@ public class ParseException extends Exception { + * string literal. + */ + protected String add_escapes(String str) { +- StringBuffer retval = new StringBuffer(); ++ StringBuilder retval = new StringBuilder(str.length()); + char ch; + for (int i = 0; i < str.length(); i++) { + switch (str.charAt(i)) +@@ -195,7 +195,7 @@ public class ParseException extends Exception { + default: + if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { + String s = "0000" + Integer.toString(ch, 16); +- retval.append("\\u" + s.substring(s.length() - 4, s.length())); ++ retval.append("\\u").append(s, s.length() - 4, s.length()); + } else { + retval.append(ch); + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java +index bd462b4..26b6a33 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/TokenMgrError.java +@@ -50,11 +50,11 @@ public class TokenMgrError extends Error + int errorCode; + + /** +- * Replaces unprintable characters by their espaced (or unicode escaped) ++ * Replaces unprintable characters by their escaped (or unicode escaped) + * equivalents in the given string + */ + protected static final String addEscapes(String str) { +- StringBuffer retval = new StringBuffer(); ++ StringBuilder retval = new StringBuilder(str.length()); + char ch; + for (int i = 0; i < str.length(); i++) { + switch (str.charAt(i)) +@@ -88,7 +88,7 @@ public class TokenMgrError extends Error + default: + if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { + String s = "0000" + Integer.toString(ch, 16); +- retval.append("\\u" + s.substring(s.length() - 4, s.length())); ++ retval.append("\\u").append(s, s.length() - 4, s.length()); + } else { + retval.append(ch); + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/ParseException.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/ParseException.java +index 80ee485..cc40852 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/ParseException.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/ParseException.java +@@ -98,7 +98,7 @@ public class ParseException extends Exception { + if (!specialConstructor) { + return super.getMessage(); + } +- StringBuffer expected = new StringBuffer(); ++ StringBuilder expected = new StringBuilder(); + int maxSize = 0; + for (int i = 0; i < expectedTokenSequences.length; i++) { + if (maxSize < expectedTokenSequences[i].length) { +@@ -145,7 +145,7 @@ public class ParseException extends Exception { + * string literal. + */ + protected String add_escapes(String str) { +- StringBuffer retval = new StringBuffer(); ++ StringBuilder retval = new StringBuilder(); + char ch; + for (int i = 0; i < str.length(); i++) { + switch (str.charAt(i)) +@@ -179,7 +179,7 @@ public class ParseException extends Exception { + default: + if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { + String s = "0000" + Integer.toString(ch, 16); +- retval.append("\\u" + s.substring(s.length() - 4, s.length())); ++ retval.append("\\u").append(s, s.length() - 4, s.length()); + } else { + retval.append(ch); + } +diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/TokenMgrError.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/TokenMgrError.java +index 8811d2a..02bb2d3 100644 +--- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/TokenMgrError.java ++++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/TokenMgrError.java +@@ -34,11 +34,11 @@ public class TokenMgrError extends Error + int errorCode; + + /** +- * Replaces unprintable characters by their espaced (or unicode escaped) ++ * Replaces unprintable characters by their escaped (or unicode escaped) + * equivalents in the given string + */ + protected static final String addEscapes(String str) { +- StringBuffer retval = new StringBuffer(); ++ StringBuilder retval = new StringBuilder(str.length()); + char ch; + for (int i = 0; i < str.length(); i++) { + switch (str.charAt(i)) +@@ -72,7 +72,7 @@ public class TokenMgrError extends Error + default: + if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { + String s = "0000" + Integer.toString(ch, 16); +- retval.append("\\u" + s.substring(s.length() - 4, s.length())); ++ retval.append("\\u").append(s, s.length() - 4, s.length()); + } else { + retval.append(ch); + } +@@ -86,11 +86,11 @@ public class TokenMgrError extends Error + * Returns a detailed message for the Error when it is thrown by the + * token manager to indicate a lexical error. + * Parameters : +- * EOFSeen : indicates if EOF caused the lexicl error +- * curLexState : lexical state in which this error occured +- * errorLine : line number when the error occured +- * errorColumn : column number when the error occured +- * errorAfter : prefix that was seen before this error occured ++ * EOFSeen : indicates if EOF caused the lexical error ++ * curLexState : lexical state in which this error occurred ++ * errorLine : line number when the error occurred ++ * errorColumn : column number when the error occurred ++ * errorAfter : prefix that was seen before this error occurred + * curchar : the offending character + * Note: You can customize the lexical error message by modifying this method. + */ +diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrName.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrName.java +index bed4ec1..05db27d 100644 +--- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrName.java ++++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrName.java +@@ -112,7 +112,7 @@ public final class JcrName { + } + + public String toString() { +- StringBuffer b = new StringBuffer(jcrName); ++ StringBuilder b = new StringBuilder(jcrName); + if (isValid()) { + b.append(",VAL"); + } +diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java +index 4c05ffb..47143bd 100644 +--- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java ++++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java +@@ -155,7 +155,7 @@ public final class JcrPath { + } + + public String toString() { +- StringBuffer b = new StringBuffer(path); ++ StringBuilder b = new StringBuilder(path); + if (normalizedPath!=null) { + b.append(" -> ").append(normalizedPath); + } +diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/PathTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/PathTest.java +index e27bf39..2e2fd60 100644 +--- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/PathTest.java ++++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/PathTest.java +@@ -82,8 +82,10 @@ public class PathTest extends TestCase { + if (test.isValid() && !test.isAbsolute()) { + Path p = resolver.getQPath(test.path); + +- StringBuffer expJcrAnc = new StringBuffer(test.path); +- expJcrAnc.append((test.path.endsWith("/") ? "" : "/")); ++ StringBuilder expJcrAnc = new StringBuilder(test.path); ++ if (!test.path.endsWith("/")) { ++ expJcrAnc.append('/'); ++ } + expJcrAnc.append("../../../../.."); + + Path ancestor = resolver.getQPath(expJcrAnc.toString()).getNormalizedPath(); +diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/DateConstraintTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/DateConstraintTest.java +index 9e2b1ec..3735616 100644 +--- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/DateConstraintTest.java ++++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/DateConstraintTest.java +@@ -48,11 +48,11 @@ public class DateConstraintTest extends ValueConstraintTest { + Calendar c2 = Calendar.getInstance(); + c2.setTime(new Date()); + +- StringBuffer b = new StringBuffer("("); ++ StringBuilder b = new StringBuilder('('); + b.append(new DateValue(c1).getString()); +- b.append(","); ++ b.append(','); + b.append(new DateValue(c2).getString()); +- b.append(")"); ++ b.append(')'); + + return new String[] {b.toString()}; + } +diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/NameConstraintTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/NameConstraintTest.java +index f6ecffe..933df1e 100644 +--- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/NameConstraintTest.java ++++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/NameConstraintTest.java +@@ -61,12 +61,11 @@ public class NameConstraintTest extends ValueConstraintTest { + + public void testGetDefinition() throws RepositoryException { + String[] qDefs = getQDefinitions(); +- for (int i = 0; i < qDefs.length; i++) { +- ValueConstraint vc = createValueConstraint(qDefs[i]); ++ for (String qDef : qDefs) { ++ ValueConstraint vc = createValueConstraint(qDef); + String jcrConstraint = vc.getDefinition(resolver); +- +- assertFalse(qDefs[i].equals(jcrConstraint)); +- assertEquals(resolver.getJCRName(ValueConstraint.NAME_FACTORY.create(qDefs[i])), jcrConstraint); ++ assertFalse(qDef.equals(jcrConstraint)); ++ assertEquals(resolver.getJCRName(ValueConstraint.NAME_FACTORY.create(qDef)), jcrConstraint); + } + } + } +diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ReferenceConstraintTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ReferenceConstraintTest.java +index 162b74f..25539a3 100644 +--- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ReferenceConstraintTest.java ++++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ReferenceConstraintTest.java +@@ -69,12 +69,11 @@ public class ReferenceConstraintTest extends ValueConstraintTest { + + public void testGetDefinition() throws RepositoryException { + String[] qDefs = getQDefinitions(); +- for (int i = 0; i < qDefs.length; i++) { +- ValueConstraint vc = createValueConstraint(qDefs[i]); ++ for (String qDef : qDefs) { ++ ValueConstraint vc = createValueConstraint(qDef); + String jcrConstraint = vc.getDefinition(resolver); +- +- assertFalse(qDefs[i].equals(jcrConstraint)); +- assertEquals(resolver.getJCRName(ValueConstraint.NAME_FACTORY.create(qDefs[i])), jcrConstraint); ++ assertFalse(qDef.equals(jcrConstraint)); ++ assertEquals(resolver.getJCRName(ValueConstraint.NAME_FACTORY.create(qDef)), jcrConstraint); + } + } + } +diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ValueConstraintTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ValueConstraintTest.java +index 6453cea..6d236b2 100644 +--- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ValueConstraintTest.java ++++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/nodetype/constraint/ValueConstraintTest.java +@@ -88,25 +88,25 @@ public abstract class ValueConstraintTest extends TestCase { + + public void testCreateValueConstraints() throws RepositoryException { + String[] defs = getDefinitions(); +- for (int i = 0; i < defs.length; i++) { +- ValueConstraint vc = createValueConstraint(defs[i], resolver); +- assertEquals(defs[i], vc.getDefinition(resolver)); ++ for (String def : defs) { ++ ValueConstraint vc = createValueConstraint(def, resolver); ++ assertEquals(def, vc.getDefinition(resolver)); + } + } + + public void testCreateValueConstraints2() throws RepositoryException { + String[] qDefs = getQDefinitions(); +- for (int i = 0; i < qDefs.length; i++) { +- ValueConstraint vc = createValueConstraint(qDefs[i]); +- assertEquals(qDefs[i], vc.getString()); ++ for (String qDef : qDefs) { ++ ValueConstraint vc = createValueConstraint(qDef); ++ assertEquals(qDef, vc.getString()); + } + } + + public void testCreateInvalidValueConstraints() throws RepositoryException { + try { + String[] invalidQDefs = getInvalidQDefinitions(); +- for (int i = 0; i < invalidQDefs.length; i++) { +- createValueConstraint(invalidQDefs[i]); ++ for (String invalidQDef : invalidQDefs) { ++ createValueConstraint(invalidQDef); + fail("Creating an invalid definition should throw InvalidConstraintException"); + } + } catch (InvalidConstraintException e) { +@@ -118,26 +118,26 @@ public abstract class ValueConstraintTest extends TestCase { + + public void testGetDefinition() throws RepositoryException { + String[] qDefs = getQDefinitions(); +- for (int i = 0; i < qDefs.length; i++) { +- ValueConstraint vc = createValueConstraint(qDefs[i]); ++ for (String qDef : qDefs) { ++ ValueConstraint vc = createValueConstraint(qDef); + String jcrConstraint = vc.getDefinition(resolver); + assertNotNull(jcrConstraint); +- assertEquals(qDefs[i], jcrConstraint); ++ assertEquals(qDef, jcrConstraint); + } + } + + public void testGetString() throws RepositoryException { + String[] qDefs = getQDefinitions(); +- for (int i = 0; i < qDefs.length; i++) { +- ValueConstraint vc = createValueConstraint(qDefs[i]); +- assertEquals(qDefs[i], vc.getString()); ++ for (String qDef : qDefs) { ++ ValueConstraint vc = createValueConstraint(qDef); ++ assertEquals(qDef, vc.getString()); + } + } + + public void testCheckNullValue() throws RepositoryException { + String[] qDefs = getQDefinitions(); +- for (int i = 0; i < qDefs.length; i++) { +- ValueConstraint vc = createValueConstraint(qDefs[i]); ++ for (String qDef : qDefs) { ++ ValueConstraint vc = createValueConstraint(qDef); + try { + vc.check(null); + fail("ValueConstraint.check(null) should throw ConstraintViolationException."); +@@ -169,8 +169,8 @@ public abstract class ValueConstraintTest extends TestCase { + public void testCheckWrongValueType() throws RepositoryException { + QValue val = createOtherValueType(); + String[] qDefs = getQDefinitions(); +- for (int i = 0; i < qDefs.length; i++) { +- ValueConstraint vc = createValueConstraint(qDefs[i]); ++ for (String qDef : qDefs) { ++ ValueConstraint vc = createValueConstraint(qDef); + try { + vc.check(val); + fail("ValueConstraint.check() with non-matching value should throw ConstraintViolationException."); +@@ -182,11 +182,10 @@ public abstract class ValueConstraintTest extends TestCase { + + public void testEquals() throws RepositoryException { + String[] qDefs = getQDefinitions(); +- for (int i = 0; i < qDefs.length; i++) { +- ValueConstraint vc = createValueConstraint(qDefs[i]); +- ValueConstraint vc2 = createValueConstraint(qDefs[i]); ++ for (String qDef : qDefs) { ++ ValueConstraint vc = createValueConstraint(qDef); ++ ValueConstraint vc2 = createValueConstraint(qDef); + assertEquals(vc, vc2); +- + vc2 = createValueConstraint(vc.getString()); + assertEquals(vc, vc2); + } +diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java +index f74b354..169ea58 100644 +--- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java ++++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java +@@ -242,7 +242,7 @@ public class ParserTest extends TestCase { + + public void fuzz(String query) throws Exception { + for (int i = 0; i < 100; i++) { +- StringBuffer buff = new StringBuffer(query); ++ StringBuilder buff = new StringBuilder(query); + int changes = 1 + (int) Math.abs(random.nextGaussian() * 2); + for (int j = 0; j < changes; j++) { + char newChar; +diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java +index 820e21c..3ed66f7 100644 +--- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java ++++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java +@@ -136,12 +136,12 @@ public class EventImpl + + while (elements.hasNext()) { + String rawname = DomUtil.getText(elements.nextElement()); +- Name name = null; ++ Name name; + + try { + name = resolver.getQName(rawname); + +- if (results.size() == 0) { ++ if (results.isEmpty()) { + results = Collections.singletonList(name); + } else if (results.size() == 1) { + results = new ArrayList(results); +@@ -150,7 +150,7 @@ public class EventImpl + results.add(name); + } + } catch (Exception ex) { +- log.error("Exception converting name " + rawname, ex); ++ log.error("Exception converting name {}", rawname, ex); + } + } + +diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java +index a489fa7..9e4a7b5 100644 +--- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java ++++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java +@@ -76,7 +76,7 @@ class IdURICache { + String cleanUri = getCleanUri(uri); + uriToIdCache.put(cleanUri, itemId); + idToUriCache.put(itemId, cleanUri); +- log.debug("Added: ItemId = " + itemId + " URI = " + cleanUri); ++ log.debug("Added: ItemId = {} URI = {}", itemId, cleanUri); + } + + public void remove(String uri) { +@@ -85,7 +85,7 @@ class IdURICache { + if (itemId != null) { + idToUriCache.remove(itemId); + } +- log.debug("Removed: ItemId = " + itemId + " URI = " + cleanUri); ++ log.debug("Removed: ItemId = {} URI = {}", itemId, cleanUri); + } + + public void remove(ItemId itemId) { +@@ -93,7 +93,7 @@ class IdURICache { + if (uri != null) { + uriToIdCache.remove(uri); + } +- log.debug("Removed: ItemId = " + itemId + " URI = " + uri); ++ log.debug("Removed: ItemId = {} URI = {}", itemId, uri); + } + + public void clear() { +diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryResultRowImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryResultRowImpl.java +index e83112d..b1a1e51 100644 +--- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryResultRowImpl.java ++++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/QueryResultRowImpl.java +@@ -104,7 +104,7 @@ public class QueryResultRowImpl implements QueryResultRow { + qValues.put(names[i], v); + } catch (RepositoryException e) { + // should not occur +- log.error("Malformed value: " + values[i].toString()); ++ log.error("Malformed value: {}", values[i]); + } + } + } +diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java +index 6b950b7..b9ef230 100644 +--- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java ++++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java +@@ -531,7 +531,7 @@ public class RepositoryServiceImpl implements RepositoryService, DavConstants { + if (sessionInfo != null) { + checkSessionInfo(sessionInfo); + clients.put(clientKey, client); +- log.debug("Created Client " + client + " for SessionInfo " + sessionInfo); ++ log.debug("Created Client {} for SessionInfo {}", client, sessionInfo); + } + } + return client; +@@ -557,7 +557,7 @@ public class RepositoryServiceImpl implements RepositoryService, DavConstants { + + private void removeClient(SessionInfo sessionInfo) { + HttpClient cl = clients.remove(getClientKey(sessionInfo)); +- log.debug("Removed Client " + cl + " for SessionInfo " + sessionInfo); ++ log.debug("Removed Client {} for SessionInfo {}", cl, sessionInfo); + } + + protected String getItemUri(ItemId itemId, SessionInfo sessionInfo) throws RepositoryException { +@@ -720,7 +720,7 @@ public class RepositoryServiceImpl implements RepositoryService, DavConstants { + int type = (typeStr == null) ? PropertyType.STRING : PropertyType.valueFromName(typeStr); + vs.add(getQValueFactory().create(descriptor, type)); + } else { +- log.error("Invalid descriptor key / value pair: " + key + " -> " + descriptor); ++ log.error("Invalid descriptor key / value pair: {} -> {}", key, descriptor); + } + + } +@@ -1653,7 +1653,7 @@ public class RepositoryServiceImpl implements RepositoryService, DavConstants { + return retrieveLockInfo(ld, sessionInfo, nodeId, parentId); + } else { + // no lock present +- log.debug("No Lock present on node with id " + saveGetIdString(nodeId, sessionInfo)); ++ log.debug("No Lock present on node with id {}", saveGetIdString(nodeId, sessionInfo)); + return null; + } + } catch (IOException e) { +@@ -1768,7 +1768,7 @@ public class RepositoryServiceImpl implements RepositoryService, DavConstants { + } + } + if (activeLock == null) { +- log.debug("No lock present on node " + saveGetIdString(nodeId, sessionInfo)); ++ log.debug("No lock present on node {}", saveGetIdString(nodeId, sessionInfo)); + return null; + } + +@@ -2283,7 +2283,7 @@ public class RepositoryServiceImpl implements RepositoryService, DavConstants { + checkSessionInfo(sessionInfo); + String rootUri = uriResolver.getRootItemUri(sessionInfo.getWorkspaceName()); + String subscriptionId = subscribe(rootUri, S_INFO, null, sessionInfo, null); +- log.debug("Subscribed on server for session info " + sessionInfo); ++ log.debug("Subscribed on server for session info {}", sessionInfo); + + try { + checkEventFilterSupport(filters); +@@ -2481,7 +2481,7 @@ public class RepositoryServiceImpl implements RepositoryService, DavConstants { + eventPath = uriResolver.getQPath(href, sessionInfo); + } catch (RepositoryException e) { + // should not occur +- log.error("Internal error while building Event: ()", e.getMessage()); ++ log.error("Internal error while building Event: {}", e.getMessage()); + continue; + } + +@@ -2559,7 +2559,7 @@ public class RepositoryServiceImpl implements RepositoryService, DavConstants { + // TODO: not correct since nsRegistry is retrieved from each session + nsCache.add(prefix, uri); + } else { +- log.error("Invalid prefix / uri pair: " + prefix + " -> " + uri); ++ log.error("Invalid prefix / uri pair: {} -> {}", prefix, uri); + } + } + } +@@ -2973,7 +2973,7 @@ public class RepositoryServiceImpl implements RepositoryService, DavConstants { + } + return sb.toString(); + } catch (java.net.URISyntaxException ex) { +- log.warn("parsing " + uri, ex); ++ log.warn("parsing {}", uri, ex); + return uri; + } + } +diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java +index ff2c3f3..53d1ddd 100644 +--- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java ++++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java +@@ -101,7 +101,7 @@ class URIResolverImpl implements URIResolver { + if (cache.containsItemId(itemId)) { + return cache.getUri(itemId); + } else { +- StringBuffer uriBuffer = new StringBuffer(); ++ StringBuilder uriBuffer = new StringBuilder(); + + Path path = itemId.getPath(); + String uniqueID = itemId.getUniqueID(); +@@ -152,7 +152,13 @@ class URIResolverImpl implements URIResolver { + // resolve relative-path part unless it denotes the root-item + if (path != null && !path.denotesRoot()) { + String jcrPath = service.getNamePathResolver(sessionInfo).getJCRPath(path); +- if (!path.isAbsolute() && !uriBuffer.toString().endsWith("/")) { ++ final boolean uriBufferEndsWithSlash; ++ if (uriBuffer.length() == 0) { ++ uriBufferEndsWithSlash = false; ++ } else { ++ uriBufferEndsWithSlash = (uriBuffer.charAt(uriBuffer.length() - 1) == '/'); ++ } ++ if (!path.isAbsolute() && !uriBufferEndsWithSlash) { + uriBuffer.append("/"); + } + uriBuffer.append(Text.escapePath(jcrPath)); +diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java +index e831f18..2e46680 100644 +--- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java ++++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java +@@ -39,7 +39,7 @@ public class ChildInfoImpl implements ChildInfo { + */ + private final int index; + +- private int hashCode; ++ private transient int hashCode; + + /** + * Creates a new serializable ChildInfoImpl. +@@ -86,11 +86,11 @@ public class ChildInfoImpl implements ChildInfo { + public int hashCode() { + // build hashCode (format: ///) + if (hashCode == 0) { +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + sb.append(name.toString()); +- sb.append("/"); ++ sb.append('/'); + sb.append(index); +- sb.append("/"); ++ sb.append('/'); + if (uniqueId != null) { + sb.append(uniqueId); + } +@@ -120,7 +120,7 @@ public class ChildInfoImpl implements ChildInfo { + */ + @Override + public String toString() { +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + sb.append(name.toString()); + sb.append(" : ").append(index); + sb.append(" : ").append((uniqueId == null) ? "-" : uniqueId); +diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ItemInfoJSONHandler.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ItemInfoJSONHandler.java +index 9337ad1..86d4620 100644 +--- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ItemInfoJSONHandler.java ++++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ItemInfoJSONHandler.java +@@ -122,14 +122,14 @@ class ItemInfoJsonHandler implements JsonHandler { + ChildInfo ci = new ChildInfoImpl(nInfo.getName(), nInfo.getUniqueID(), nInfo.getIndex()); + ((NodeInfoImpl) parent).addChildInfo(ci); + } else { +- log.debug("NodeInfo '"+ nInfo.getPath() + "' out of hierarchy. Parent path = " + parent.getPath()); ++ log.debug("NodeInfo '{}' out of hierarchy. Parent path = {}", nInfo.getPath(), parent.getPath()); + } + } + if (nInfo.isCompleted()) { + itemInfos.addAll(props); + itemInfos.add(nInfo); + } else { +- log.debug("Incomplete NodeInfo '"+ nInfo.getPath() + "' -> Only present as ChildInfo with its parent."); ++ log.debug("Incomplete NodeInfo '{}' -> Only present as ChildInfo with its parent.", nInfo.getPath()); + } + } catch (RepositoryException e) { + throw new IOException(e.getMessage()); +@@ -355,7 +355,7 @@ class ItemInfoJsonHandler implements JsonHandler { + + private String getValueURI() throws RepositoryException { + Path propertyPath = pFactory.create(getCurrentNodeInfo().getPath(), name, true); +- StringBuffer sb = new StringBuffer(rootURI); ++ StringBuilder sb = new StringBuilder(rootURI); + sb.append(Text.escapePath(resolver.getJCRPath(propertyPath))); + return sb.toString(); + } +diff --git a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java +index 071667f..437acec 100644 +--- a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java ++++ b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java +@@ -233,7 +233,7 @@ public class RepositoryServiceImpl extends org.apache.jackrabbit.spi2dav.Reposit + if (uri.startsWith(rootUri)) { + jcrPath = uri.substring(rootUri.length()); + } else { +- log.warn("ItemURI " + uri + " doesn't start with rootURI (" + rootUri + ")."); ++ log.warn("ItemURI {} doesn't start with rootURI ({}).", uri, rootUri); + // fallback: + // calculated uri does not start with the rootURI + // -> search /jcr:root and start sub-string behind. +@@ -353,7 +353,7 @@ public class RepositoryServiceImpl extends org.apache.jackrabbit.spi2dav.Reposit + int depth = batchReadConfig.getDepth(path, this.getNamePathResolver(sessionInfo)); + + HttpGet request = new HttpGet(uri + "." + depth + ".json"); +- HttpResponse response = null; ++ HttpResponse response; + try { + response = executeRequest(sessionInfo, request); + int statusCode = response.getStatusLine().getStatusCode(); +diff --git a/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/EventSubscription.java b/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/EventSubscription.java +index ce31e7b..80be53a 100644 +--- a/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/EventSubscription.java ++++ b/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/EventSubscription.java +@@ -208,7 +208,7 @@ class EventSubscription implements Subscription, EventListener { + Event spiEvent = eventFactory.fromJCREvent(events.nextEvent()); + spiEvents.add(spiEvent); + } catch (Exception ex) { +- log.warn("Unable to create SPI Event: " + ex); ++ log.warn("Unable to create SPI Event: {}", (Object) ex); + } + } + EventBundle bundle = new EventBundleImpl(spiEvents, isLocal); +diff --git a/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/QueryInfoImpl.java b/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/QueryInfoImpl.java +index c3f2e08..da4c7fc 100644 +--- a/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/QueryInfoImpl.java ++++ b/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/QueryInfoImpl.java +@@ -107,8 +107,7 @@ class QueryInfoImpl implements QueryInfo { + (Row) super.next(), columnNames, selectorNames, + idFactory, resolver, qValueFactory); + } catch (RepositoryException e) { +- log.warn("Exception when creating QueryResultRowImpl: " + +- e.getMessage(), e); ++ log.warn("Exception when creating QueryResultRowImpl: {}", e.getMessage(), e); + throw new NoSuchElementException(); + } + } +diff --git a/jackrabbit-spi2jcr/src/test/java/org/apache/jackrabbit/spi2jcr/ServiceStubImpl.java b/jackrabbit-spi2jcr/src/test/java/org/apache/jackrabbit/spi2jcr/ServiceStubImpl.java +index b10cd43..f3581b7 100644 +--- a/jackrabbit-spi2jcr/src/test/java/org/apache/jackrabbit/spi2jcr/ServiceStubImpl.java ++++ b/jackrabbit-spi2jcr/src/test/java/org/apache/jackrabbit/spi2jcr/ServiceStubImpl.java +@@ -49,7 +49,7 @@ public class ServiceStubImpl extends RepositoryServiceStub { + if (service == null) { + Repository repository; + try { +- repository = RepositoryStub.getInstance(Collections.EMPTY_MAP).getRepository(); ++ repository = RepositoryStub.getInstance(Collections.emptyMap()).getRepository(); + } catch (RepositoryStubException e) { + throw new RepositoryException(e); + } +diff --git a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java +index f0e8602..7d5d818 100644 +--- a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java ++++ b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/JcrParser.java +@@ -82,11 +82,10 @@ public class JcrParser { + } + + // Extract arguments +- LinkedList args = this.getArguments(input); ++ List args = this.getArguments(input); + + // The first arg is the command name +- String cmdName = (String) args.getFirst(); +- args.removeFirst(); ++ String cmdName = args.remove(0); + + // Get the command line descriptor + cl = CommandLineFactory.getInstance().getCommandLine(cmdName); +@@ -116,15 +115,15 @@ public class JcrParser { + * the user's input + * @return a List containing the arguments + */ +- private LinkedList getArguments(String input) { +- LinkedList args = new LinkedList(); ++ private List getArguments(String input) { ++ List args = new LinkedList(); + int length = input.length(); + + boolean insideSingleQuote = false; + boolean insideDoubleQuote = false; + int escape = -1; + +- StringBuffer arg = new StringBuffer(); ++ StringBuilder arg = new StringBuilder(); + + for (int i = 0; i < length; ++i) { + char c = input.charAt(i); +@@ -132,9 +131,10 @@ public class JcrParser { + // end of argument? + if ((!insideSingleQuote && !insideDoubleQuote && Character + .isWhitespace(c))) { +- if (arg.toString().trim().length() > 0) { +- args.add(arg.toString().trim()); +- arg = new StringBuffer(); ++ final String trimmedArg = arg.toString().trim(); ++ if (trimmedArg.length() > 0) { ++ args.add(trimmedArg); ++ arg.setLength(0); + } + continue; + } +@@ -159,8 +159,9 @@ public class JcrParser { + } + } + +- if (arg.toString().trim().length() > 0) { +- args.add(arg.toString()); ++ final String trimmedArg = arg.toString().trim(); ++ if (trimmedArg.length() > 0) { ++ args.add(trimmedArg); + } + + return args; +@@ -214,10 +215,9 @@ public class JcrParser { + * @throws JcrParserException + * if the user's input is illegal + */ +- private void populate(CommandLine cl, List valList) ++ private void populate(CommandLine cl, List valList) + throws JcrParserException { +- String[] values = (String[]) valList +- .toArray(new String[valList.size()]); ++ String[] values = valList.toArray(new String[valList.size()]); + + // Command Line parameters + Map options = cl.getOptions(); +@@ -225,7 +225,7 @@ public class JcrParser { + Map clArgs = cl.getArguments(); + + // Input arguments +- List args = new ArrayList(); ++ List args = new ArrayList(); + + for (int i = 0; i < values.length; i++) { + String value = values[i]; +@@ -260,9 +260,9 @@ public class JcrParser { + } + + // set arguments +- String[] argValues = (String[]) args.toArray(new String[args.size()]); ++ String[] argValues = args.toArray(new String[args.size()]); + for (int j = 0; j < argValues.length; j++) { +- Argument arg = (Argument) clArgs.get(new Integer(j)); ++ Argument arg = (Argument) clArgs.get(j); + if (arg == null) { + throw new JcrParserException("exception.more.arguments.than.expected"); + } +diff --git a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/Help.java b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/Help.java +index 01bd470..0c6e18c 100644 +--- a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/Help.java ++++ b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/Help.java +@@ -89,7 +89,7 @@ public class Help implements Command { + iter = descriptors.iterator(); + while (iter.hasNext()) { + CommandLine desc = (CommandLine) iter.next(); +- StringBuffer buf = new StringBuffer(desc.getName()); ++ StringBuilder buf = new StringBuilder(desc.getName()); + buf.setLength(tabPos); + for (int i = desc.getName().length(); i < buf.length(); i++) { + buf.setCharAt(i, ' '); +diff --git a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/PrintHelper.java b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/PrintHelper.java +index 36a3c9c..6dcdac9 100644 +--- a/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/PrintHelper.java ++++ b/jackrabbit-standalone/src/main/java/org/apache/jackrabbit/standalone/cli/info/PrintHelper.java +@@ -131,7 +131,7 @@ final class PrintHelper { + } else if (o instanceof String) { + text[column] = (String) o; + } else if (o instanceof Collection) { +- StringBuffer sb = new StringBuffer(); ++ StringBuilder sb = new StringBuilder(); + Iterator i = ((Collection) o).iterator(); + while (i.hasNext()) { + String str = (String) i.next(); +diff --git a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSBackend.java b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSBackend.java +index 3b2a7f9..4bd7052 100644 +--- a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSBackend.java ++++ b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSBackend.java +@@ -189,7 +189,7 @@ public class VFSBackend extends AbstractBackend { + throw new DataStoreException("Object identifiers not resolved.", e); + } + +- LOG.debug("Found " + identifiers.size() + " identifiers."); ++ LOG.debug("Found {} identifiers.", identifiers.size()); + + return identifiers.iterator(); + } +@@ -349,9 +349,8 @@ public class VFSBackend extends AbstractBackend { + FileObject tempFileObject = getBaseFolderObject(); + + try { +- for (int i = 0; i < segments.length; i++) { +- tempFileObject = tempFileObject.getChild(segments[i]); +- ++ for (String segment : segments) { ++ tempFileObject = tempFileObject.getChild(segment); + if (tempFileObject == null) { + return null; + } +@@ -630,7 +629,7 @@ public class VFSBackend extends AbstractBackend { + touchFile.delete(); + } + } catch (FileSystemException e) { +- LOG.warn("Could not delete touch file for " + fileObject.getName().getFriendlyURI(), e); ++ LOG.warn("Could not delete touch file for {}", fileObject.getName().getFriendlyURI(), e); + } + } + +@@ -664,7 +663,7 @@ public class VFSBackend extends AbstractBackend { + parentFolder = parentFolder.getParent(); + } + } catch (IOException e) { +- LOG.warn("Error in parents deletion for " + fileObject.getName().getFriendlyURI(), e); ++ LOG.warn("Error in parents deletion for {}", fileObject.getName().getFriendlyURI(), e); + } + } + +@@ -712,7 +711,7 @@ public class VFSBackend extends AbstractBackend { + if (deleteRecordFileObject(fileObject)) { + deleteIdSet.add(identifier); + } else { +- LOG.warn("Failed to delete old file " + fileObject.getName().getFriendlyURI()); ++ LOG.warn("Failed to delete old file {}", fileObject.getName().getFriendlyURI()); + } + } + } +@@ -760,7 +759,7 @@ public class VFSBackend extends AbstractBackend { + try { + write(identifier, file, true, callback); + } catch (DataStoreException e) { +- LOG.error("Could not upload [" + identifier + "], file[" + file + "]", e); ++ LOG.error("Could not upload [{}], file[{}]", new Object[] { identifier, file, e }); + } + } + } +@@ -805,7 +804,7 @@ public class VFSBackend extends AbstractBackend { + try { + touch(identifier, minModifiedDate, true, callback); + } catch (DataStoreException e) { +- LOG.error("Could not touch [" + identifier + "]", e); ++ LOG.error("Could not touch [{}]", identifier, e); + } + } + } +diff --git a/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java b/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java +index c8c89d2..342b1d3 100644 +--- a/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java ++++ b/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java +@@ -150,12 +150,11 @@ public class TestVFSDataStore extends TestCaseBase { + public void testSetFileSystemOptionsPropertiesInString() throws Exception { + try { + long start = System.currentTimeMillis(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#setFileSystemOptionsPropertiesInString, testDir=" + dataStoreDir); ++ LOG.info("Testcase: {}#setFileSystemOptionsPropertiesInString, testDir={}", ++ getClass().getName(), dataStoreDir); + doSetFileSystemOptionsPropertiesInString(); +- LOG.info("Testcase: " + this.getClass().getName() +- + "#setFileSystemOptionsPropertiesInString finished, time taken = [" +- + (System.currentTimeMillis() - start) + "]ms"); ++ LOG.info("Testcase: {}#setFileSystemOptionsPropertiesInString finished, time taken = [{}]ms", ++ getClass().getName(), System.currentTimeMillis() - start); + } catch (Exception e) { + LOG.error("error:", e); + fail(e.getMessage()); +diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/AbstractConfig.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/AbstractConfig.java +index 4c2c4b2..4873977 100644 +--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/AbstractConfig.java ++++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/AbstractConfig.java +@@ -79,12 +79,12 @@ public abstract class AbstractConfig { + } + + public String toMapName(String name, char delim) { +- StringBuffer ret = new StringBuffer(); ++ StringBuilder ret = new StringBuilder(); + String[] elems = Text.explode(name, delim); + ret.append(elems[0]); + for (int i=1; i 0xFFFF) { + // emit a warning if out of range, use defualt in this case +- log.warn("Invalid port in rmi-port param " + rmiPort + ". using default port."); ++ log.warn("Invalid port in rmi-port param {}. using default port.", rmiPort); + rmiPort = Registry.REGISTRY_PORT; + } + +diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java +index f09575f..76895cb 100644 +--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java ++++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java +@@ -188,7 +188,7 @@ public class RepositoryAccessServlet extends HttpServlet { + try { + jndiContext = new InitialContext(config.getJndiConfig().getJndiEnv()); + } catch (NamingException e) { +- log.error("Create initial context: " + e.toString()); ++ log.error("Create initial context: {}", (Object) e); + } + } + return jndiContext; +diff --git a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java +index 28512ad..76d923c 100644 +--- a/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java ++++ b/jackrabbit-webapp/src/main/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java +@@ -261,7 +261,7 @@ public class RepositoryStartupServlet extends AbstractRepositoryServlet { + } catch (ServletException e) { + // shutdown repository + shutdownRepository(); +- log.error("RepositoryStartupServlet initializing failed: " + e, e); ++ log.error("RepositoryStartupServlet initializing failed: {}", e, e); + } + } + +@@ -484,7 +484,7 @@ public class RepositoryStartupServlet extends AbstractRepositoryServlet { + try { + jndiContext = new InitialContext(jc.getJndiEnv()); + jndiContext.bind(jc.getJndiName(), repository); +- log.info("Repository bound to JNDI with name: " + jc.getJndiName()); ++ log.info("Repository bound to JNDI with name: {}", jc.getJndiName()); + } catch (NamingException e) { + throw new ServletExceptionWithCause( + "Unable to bind repository using JNDI: " + jc.getJndiName(), e); +@@ -545,7 +545,7 @@ public class RepositoryStartupServlet extends AbstractRepositoryServlet { + // rmiHost is not configured + RMIServerSocketFactory sf; + if (rc.getRmiHost().length() > 0) { +- log.debug("Creating RMIServerSocketFactory for host " + rc.getRmiHost()); ++ log.debug("Creating RMIServerSocketFactory for host {}", rc.getRmiHost()); + InetAddress hostAddress = InetAddress.getByName(rc.getRmiHost()); + sf = getRMIServerSocketFactory(hostAddress); + } else { +@@ -575,33 +575,31 @@ public class RepositoryStartupServlet extends AbstractRepositoryServlet { + // potentially active registry. We do not check yet, whether the + // registry is actually accessible. + if (reg == null) { +- log.debug("Trying to access existing registry at " + rc.getRmiHost() +- + ":" + rc.getRmiPort()); ++ log.debug("Trying to access existing registry at {}:{}", rc.getRmiHost(), rc.getRmiPort()); + try { + reg = LocateRegistry.getRegistry(rc.getRmiHost(), rc.rmiPort()); + } catch (RemoteException re) { +- log.warn("Cannot create the reference to the registry at " +- + rc.getRmiHost() + ":" + rc.getRmiPort(), re); ++ log.warn("Cannot create the reference to the registry at {}:{}", ++ new Object[] { rc.getRmiHost(), rc.getRmiPort(), re }); + } + } + + // if we finally have a registry, register the repository with the + // rmiName + if (reg != null) { +- log.debug("Registering repository as " + rc.getRmiName() +- + " to registry " + reg); ++ log.debug("Registering repository as {} to registry {}", rc.getRmiName(), reg); + reg.bind(rc.getRmiName(), remote); + + // when successfull, keep references + this.rmiRepository = remote; +- log.info("Repository bound via RMI with name: " + rc.getRmiUri()); ++ log.info("Repository bound via RMI with name: {}", rc.getRmiUri()); + } else { + log.info("RMI registry missing, cannot bind repository via RMI"); + } + } catch (RemoteException e) { +- log.warn("Unable to bind repository via RMI: " + rc.getRmiUri(), e); ++ log.warn("Unable to bind repository via RMI: {}", rc.getRmiUri(), e); + } catch (AlreadyBoundException e) { +- log.warn("Unable to bind repository via RMI: " + rc.getRmiUri(), e); ++ log.warn("Unable to bind repository via RMI: {}", rc.getRmiUri(), e); + } + } + +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/AbstractLocatorFactory.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/AbstractLocatorFactory.java +index c6c681c..0feb965 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/AbstractLocatorFactory.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/AbstractLocatorFactory.java +@@ -90,7 +90,7 @@ public abstract class AbstractLocatorFactory implements DavLocatorFactory { + } + + // build prefix string and remove all prefixes from the given href. +- StringBuffer b = new StringBuffer(""); ++ StringBuilder b = new StringBuilder(); + if (prefix != null && prefix.length() > 0) { + b.append(prefix); + if (href.startsWith(prefix)) { +@@ -98,6 +98,9 @@ public abstract class AbstractLocatorFactory implements DavLocatorFactory { + } + } + if (pathPrefix != null && pathPrefix.length() > 0) { ++ // FIXME inefficient ++ // Maybe add a dependency on Commons Lang and use: ++ // https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#endsWith-java.lang.CharSequence-java.lang.CharSequence- + if (!b.toString().endsWith(pathPrefix)) { + b.append(pathPrefix); + } +@@ -230,7 +233,7 @@ public abstract class AbstractLocatorFactory implements DavLocatorFactory { + this.resourcePath = resourcePath; + this.factory = factory; + +- StringBuffer buf = new StringBuffer(prefix); ++ StringBuilder buf = new StringBuilder(prefix); + // NOTE: no need to append the workspace path, since it must + // be part of the resource path. + if (resourcePath != null && resourcePath.length() > 0) { +@@ -242,7 +245,7 @@ public abstract class AbstractLocatorFactory implements DavLocatorFactory { + } + int length = buf.length(); + if (length == 0 || (length > 0 && buf.charAt(length - 1) != '/')) { +- buf.append("/"); ++ buf.append('/'); + } + this.href = buf.toString(); + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java +index de09b5b..f52b2de 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavCompliance.java +@@ -60,10 +60,10 @@ public final class DavCompliance { + public static final String OBSERVATION = "observation"; + + public static String concatComplianceClasses(String[] complianceClasses) { +- StringBuffer b = new StringBuffer(); ++ StringBuilder b = new StringBuilder(); + for (int i = 0; i < complianceClasses.length; i++) { + if (i > 0) { +- b.append(","); ++ b.append(','); + } + b.append(complianceClasses[i]); + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavException.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavException.java +index 624f475..f50f3bf 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavException.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavException.java +@@ -40,7 +40,7 @@ public class DavException extends Exception implements XmlSerializable { + try { + statusPhrases.load(DavException.class.getResourceAsStream("statuscode.properties")); + } catch (IOException e) { +- log.error("Failed to load status properties: " + e.getMessage()); ++ log.error("Failed to load status properties: {}", e.getMessage()); + } + } + +@@ -98,7 +98,7 @@ public class DavException extends Exception implements XmlSerializable { + super(message, cause); + this.errorCode = errorCode; + this.errorCondition = errorCondition; +- log.debug("DavException: (" + errorCode + ") " + message); ++ log.debug("DavException: ({}) {}", errorCode, message); + } + + /** +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/Status.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/Status.java +index 92bf1bf..2d5e052 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/Status.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/Status.java +@@ -83,12 +83,12 @@ public class Status implements DavConstants, XmlSerializable{ + ++start; + } + if (!"HTTP".equals(statusLine.substring(at, at += 4))) { +- log.warn("Status-Line '" + statusLine + "' does not start with HTTP"); ++ log.warn("Status-Line '{}' does not start with HTTP", statusLine); + } + //handle the HTTP-Version + at = statusLine.indexOf(' ', at); + if (at <= 0) { +- log.warn("Unable to parse HTTP-Version from the status line: '" + statusLine + "'"); ++ log.warn("Unable to parse HTTP-Version from the status line: '{}'", statusLine); + } + String version = (statusLine.substring(start, at)).toUpperCase(); + //advance through spaces +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java +index 49fd169..4de76c1 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java +@@ -192,7 +192,7 @@ public class WebdavRequestImpl implements WebdavRequest, DavConstants { + if (auth == null) { + //verify that href is an absolute path + if (ref.startsWith("//") || !ref.startsWith("/")) { +- log.warn("expected absolute path but found " + ref); ++ log.warn("expected absolute path but found {}", ref); + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } else if (!auth.equals(httpRequest.getHeader("Host"))) { +@@ -202,7 +202,7 @@ public class WebdavRequestImpl implements WebdavRequest, DavConstants { + throw new DavException(DavServletResponse.SC_FORBIDDEN); + } + } catch (URISyntaxException e) { +- log.warn("malformed uri: " + href, e); ++ log.warn("malformed uri: {}", href, e); + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + // cut off the context path +@@ -498,7 +498,7 @@ public class WebdavRequestImpl implements WebdavRequest, DavConstants { + } + } + } else { +- log.debug("Unknown element in DAV:propertyupdate: " + el.getNodeName()); ++ log.debug("Unknown element in DAV:propertyupdate: {}", el.getNodeName()); + // unknown child elements are ignored + } + } +@@ -680,7 +680,7 @@ public class WebdavRequestImpl implements WebdavRequest, DavConstants { + try { + pos = new Position(typeNSegment[0], typeNSegment[1]); + } catch (IllegalArgumentException e) { +- log.error("Cannot parse Position header: " + e.getMessage()); ++ log.error("Cannot parse Position header: {}", e.getMessage()); + } + } + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindInfo.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindInfo.java +index 627640e..32b8c32 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindInfo.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/BindInfo.java +@@ -79,7 +79,7 @@ public class BindInfo implements XmlSerializable { + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } else { +- log.warn("unexpected element " + elt.getLocalName()); ++ log.warn("unexpected element {}", elt.getLocalName()); + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/ParentElement.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/ParentElement.java +index 3edd2ab..90a2436 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/ParentElement.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/ParentElement.java +@@ -82,7 +82,7 @@ public class ParentElement implements XmlSerializable { + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } else { +- log.warn("unexpected element " + elt.getLocalName()); ++ log.warn("unexpected element {}", elt.getLocalName()); + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/RebindInfo.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/RebindInfo.java +index 233b236..908707d 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/RebindInfo.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/RebindInfo.java +@@ -79,7 +79,7 @@ public class RebindInfo implements XmlSerializable { + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } else { +- log.warn("unexpected element " + elt.getLocalName()); ++ log.warn("unexpected element {}", elt.getLocalName()); + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/UnbindInfo.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/UnbindInfo.java +index e3c7a3e..d0a9aa0 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/UnbindInfo.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/bind/UnbindInfo.java +@@ -67,7 +67,7 @@ public class UnbindInfo implements XmlSerializable { + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } else { +- log.warn("unexpected element " + elt.getLocalName()); ++ log.warn("unexpected element {}", elt.getLocalName()); + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java +index 171776d..bd18d53 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/HttpLock.java +@@ -85,12 +85,12 @@ public class HttpLock extends BaseDavRequest { + if (ltHeader == null || ltHeader.length == 0) { + return null; + } else if (ltHeader.length != 1) { +- LOG.debug("Multiple 'Lock-Token' header fields in response for " + getURI() + ": " + Arrays.asList(ltHeader)); ++ LOG.debug("Multiple 'Lock-Token' header fields in response for {}: {}", getURI(), Arrays.asList(ltHeader)); + return null; + } else { + String v = ltHeader[0].getValue().trim(); + if (!v.startsWith("<") || !v.endsWith(">")) { +- LOG.debug("Invalid 'Lock-Token' header field in response for " + getURI() + ": " + Arrays.asList(ltHeader)); ++ LOG.debug("Invalid 'Lock-Token' header field in response for {}: {}", getURI(), Arrays.asList(ltHeader)); + return null; + } else { + return v.substring(1, v.length() - 1); +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java +index 63d2728..4db07be 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/IfHeader.java +@@ -110,11 +110,11 @@ public class IfHeader implements Header { + */ + public IfHeader(String[] tokens) { + allTokens.addAll(Arrays.asList(tokens)); +- StringBuffer b = new StringBuffer(); ++ StringBuilder b = new StringBuilder(); + for (String token : tokens) { +- b.append("(").append("<"); ++ b.append('(').append('<'); + b.append(token); +- b.append(">").append(")"); ++ b.append('>').append(')'); + } + headerValue = b.toString(); + ifHeader = parse(); +@@ -286,7 +286,7 @@ public class IfHeader implements Header { + } + } + } catch (IOException ioe) { +- log.error("parseTagged: Problem parsing If header: "+ioe.toString()); ++ log.error("parseTagged: Problem parsing If header: {}", (Object) ioe); + } + + return map; +@@ -330,7 +330,7 @@ public class IfHeader implements Header { + } + } + } catch (IOException ioe) { +- log.error("parseUntagged: Problem parsing If header: "+ioe.toString()); ++ log.error("parseUntagged: Problem parsing If header: {}", (Object) ioe); + } + return list; + } +@@ -460,7 +460,7 @@ public class IfHeader implements Header { + * @throws IOException if a problem occurs during reading. + */ + private String readWord(Reader reader, char end) throws IOException { +- StringBuffer buf = new StringBuffer(); ++ StringBuilder buf = new StringBuilder(); + + // read the word value + int c = reader.read(); +@@ -500,12 +500,12 @@ public class IfHeader implements Header { + String effString = (effChar < 0) ? "" : String.valueOf((char) effChar); + + // log the error +- log.error("logIllegalState: Unexpected character '"+effString+"' in state "+state+", expected any of "+expChar); ++ log.error("logIllegalState: Unexpected character '{}' in state {}, expected any of {}", new Object[] { effString, state, expChar }); + + // catch up if a reader is given + if (reader != null && effChar >= 0) { + try { +- log.debug("logIllegalState: Catch up to any of "+expChar); ++ log.debug("logIllegalState: Catch up to any of {}", expChar); + do { + reader.mark(1); + effChar = reader.read(); +@@ -514,7 +514,7 @@ public class IfHeader implements Header { + reader.reset(); + } + } catch (IOException ioe) { +- log.error("logIllegalState: IO Problem catching up to any of "+expChar); ++ log.error("logIllegalState: IO Problem catching up to any of {}", expChar); + } + } + } +@@ -770,11 +770,11 @@ public class IfHeader implements Header { + * given tag and token. + */ + public boolean match(String token, String etag) { +- log.debug("match: Trying to match token="+token+", etag="+etag); ++ log.debug("match: Trying to match token={}, etag={}", token, etag); + for (int i=0; i < size(); i++) { + IfListEntry ile = get(i); + if (!ile.match(token, etag)) { +- log.debug("match: Entry "+i+"-"+ile+" does not match"); ++ log.debug("match: Entry {}-{} does not match", i, ile); + return false; + } + } +@@ -836,11 +836,11 @@ public class IfHeader implements Header { + * and etag, else false is returned. + */ + public boolean matches(String resource, String token, String etag) { +- log.debug("matches: Trying to match token="+token+", etag="+etag); ++ log.debug("matches: Trying to match token={}, etag={}", token, etag); + + for (IfList il : this) { + if (il.match(token, etag)) { +- log.debug("matches: Found match with " + il); ++ log.debug("matches: Found match with {}", il); + return true; + } + } +@@ -874,11 +874,11 @@ public class IfHeader implements Header { + * or if the entry for the resource matches the token and etag. + */ + public boolean matches(String resource, String token, String etag) { +- log.debug("matches: Trying to match resource="+resource+", token="+token+","+etag); ++ log.debug("matches: Trying to match resource={}, token={},{}", new Object[] { resource, token, etag }); + + IfHeaderList list = get(resource); + if (list == null) { +- log.debug("matches: No entry for tag "+resource+", assuming match"); ++ log.debug("matches: No entry for tag {}, assuming match", resource); + return true; + } else { + return list.matches(resource, token, etag); +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java +index c1e72ae..ab13f90 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java +@@ -93,7 +93,7 @@ public class TimeoutHeader implements Header, DavConstants { + timeout = 1000L * Long.parseLong(timeoutStr.substring(secondsInd, i)); + } catch (NumberFormatException ignore) { + // ignore and return 'undefined' timeout +- log.error("Invalid timeout format: " + timeoutStr); ++ log.error("Invalid timeout format: {}", timeoutStr); + } + } else if (timeoutStr.equalsIgnoreCase(TIMEOUT_INFINITE)) { + timeout = INFINITE_TIMEOUT; +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java +index e5b9fb1..3dd47c0 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java +@@ -82,7 +82,7 @@ public class InputContextImpl implements InputContext { + try { + return Long.parseLong(length); + } catch (NumberFormatException ex) { +- log.error("broken Content-Length header: " + length); ++ log.error("broken Content-Length header: {}", length); + return -1; + } + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/OrderPatch.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/OrderPatch.java +index e574e0e..f7d6367 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/OrderPatch.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/ordering/OrderPatch.java +@@ -148,7 +148,7 @@ public class OrderPatch implements OrderingConstants, XmlSerializable { + Member om = new Member(segment, pos); + tmpList.add(om); + } catch (IllegalArgumentException e) { +- log.warn("Invalid element in 'orderpatch' request body: " + e.getMessage()); ++ log.warn("Invalid element in 'orderpatch' request body: {}", e.getMessage()); + throw new DavException(DavServletResponse.SC_BAD_REQUEST); + } + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java +index 45d3f9d..2fabcb4 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java +@@ -118,8 +118,9 @@ public abstract class AbstractDavProperty implements DavProperty { + Node n = document.importNode((Node)value, true); + elem.appendChild(n); + } else if (value instanceof Node[]) { +- for (int i = 0; i < ((Node[])value).length; i++) { +- Node n = document.importNode(((Node[])value)[i], true); ++ Node[] nodes = (Node[]) value; ++ for (Node node : nodes) { ++ Node n = document.importNode(node, true); + elem.appendChild(n); + } + } else if (value instanceof Collection) { +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyNameSet.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyNameSet.java +index 2541418..5b5bceb 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyNameSet.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertyNameSet.java +@@ -147,7 +147,7 @@ public class DavPropertyNameSet extends PropContainer + if (contentEntry instanceof DavPropertyName) { + return add((DavPropertyName) contentEntry); + } +- log.debug("DavPropertyName object expected. Found: " + contentEntry.getClass().toString()); ++ log.debug("DavPropertyName object expected. Found: {}", contentEntry.getClass()); + return false; + } + +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertySet.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertySet.java +index 3f239b1..6ae3623 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertySet.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/DavPropertySet.java +@@ -189,7 +189,7 @@ public class DavPropertySet extends PropContainer + add((DavProperty) contentEntry); + return true; + } +- log.debug("DavProperty object expected. Found: " + contentEntry.getClass().toString()); ++ log.debug("DavProperty object expected. Found: {}", contentEntry.getClass()); + return false; + } + +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/HrefProperty.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/HrefProperty.java +index 8e1864d..9e7c051 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/HrefProperty.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/HrefProperty.java +@@ -92,10 +92,10 @@ public class HrefProperty extends AbstractDavProperty { + if (href != null) { + hrefList.add(href); + } else { +- log.warn("Valid DAV:href element expected instead of " + entry.toString()); ++ log.warn("Valid DAV:href element expected instead of {}", entry); + } + } else { +- log.warn("DAV: href element expected in the content of " + getName().toString()); ++ log.warn("DAV: href element expected in the content of {}", getName()); + } + } + } else if (val instanceof Element && XML_HREF.equals(((Element)val).getLocalName())) { +@@ -103,7 +103,7 @@ public class HrefProperty extends AbstractDavProperty { + if (href != null) { + hrefList.add(href); + } else { +- log.warn("Valid DAV:href element expected instead of " + val.toString()); ++ log.warn("Valid DAV:href element expected instead of {}", val); + } + } + value = hrefList.toArray(new String[hrefList.size()]); +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchInfo.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchInfo.java +index cae113c..0595084 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchInfo.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/search/SearchInfo.java +@@ -102,7 +102,7 @@ public class SearchInfo implements SearchConstants, XmlSerializable { + this.language = language; + this.languageNamespace = languageNamespace; + this.query = query; +- this.namespaces = Collections.unmodifiableMap(new HashMap(namespaces)); ++ this.namespaces = Collections.unmodifiableMap(new HashMap(namespaces)); + } + + /** +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java +index d230822..c93ba67 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java +@@ -169,19 +169,19 @@ abstract public class AbstractWebdavServlet extends HttpServlet implements DavCo + if (authenticate_header == null) { + authenticate_header = DEFAULT_AUTHENTICATE_HEADER; + } +- log.info(INIT_PARAM_AUTHENTICATE_HEADER + " = " + authenticate_header); ++ log.info(INIT_PARAM_AUTHENTICATE_HEADER + " = {}", authenticate_header); + + // read csrf protection params + String csrfParam = getInitParameter(INIT_PARAM_CSRF_PROTECTION); + csrfUtil = new CSRFUtil(csrfParam); +- log.info(INIT_PARAM_CSRF_PROTECTION + " = " + csrfParam); ++ log.info(INIT_PARAM_CSRF_PROTECTION + " = {}", csrfParam); + + //create absolute URI hrefs.. + String param = getInitParameter(INIT_PARAM_CREATE_ABSOLUTE_URI); + if (param != null) { + createAbsoluteURI = Boolean.parseBoolean(param); + } +- log.info(INIT_PARAM_CREATE_ABSOLUTE_URI + " = " + createAbsoluteURI); ++ log.info(INIT_PARAM_CREATE_ABSOLUTE_URI + " = {}", createAbsoluteURI); + } + + /** +@@ -1240,7 +1240,7 @@ abstract public class AbstractWebdavServlet extends HttpServlet implements DavCo + protected void doMkWorkspace(WebdavRequest request, WebdavResponse response, + DavResource resource) throws DavException, IOException { + if (resource.exists()) { +- AbstractWebdavServlet.log.warn("Cannot create a new workspace. Resource already exists."); ++ log.warn("Cannot create a new workspace. Resource already exists."); + response.sendError(DavServletResponse.SC_FORBIDDEN); + return; + } +@@ -1271,7 +1271,7 @@ abstract public class AbstractWebdavServlet extends HttpServlet implements DavCo + protected void doMkActivity(WebdavRequest request, WebdavResponse response, + DavResource resource) throws DavException, IOException { + if (resource.exists()) { +- AbstractWebdavServlet.log.warn("Unable to create activity: A resource already exists at the request-URL " + request.getRequestURL()); ++ log.warn("Unable to create activity: A resource already exists at the request-URL {}", request.getRequestURL()); + response.sendError(DavServletResponse.SC_FORBIDDEN); + return; + } +@@ -1289,7 +1289,7 @@ abstract public class AbstractWebdavServlet extends HttpServlet implements DavCo + } + + if (!(resource instanceof ActivityResource)) { +- AbstractWebdavServlet.log.error("Unable to create activity: ActivityResource expected"); ++ log.error("Unable to create activity: ActivityResource expected"); + response.sendError(DavServletResponse.SC_INTERNAL_SERVER_ERROR); + return; + } +@@ -1315,13 +1315,13 @@ abstract public class AbstractWebdavServlet extends HttpServlet implements DavCo + throws DavException, IOException { + + if (!resource.exists()) { +- AbstractWebdavServlet.log.warn("Unable to add baseline control. Resource does not exist " + resource.getHref()); ++ log.warn("Unable to add baseline control. Resource does not exist {}", resource.getHref()); + response.sendError(DavServletResponse.SC_NOT_FOUND); + return; + } + // TODO: improve. see http://issues.apache.org/jira/browse/JCR-394 + if (!(resource instanceof VersionControlledResource) || !resource.isCollection()) { +- AbstractWebdavServlet.log.warn("BaselineControl is not supported by resource " + resource.getHref()); ++ log.warn("BaselineControl is not supported by resource {}", resource.getHref()); + response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); + return; + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/CSRFUtil.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/CSRFUtil.java +index 25b2ae5..1322ae6 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/CSRFUtil.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/CSRFUtil.java +@@ -107,7 +107,7 @@ public class CSRFUtil { + allowedReferrerHosts.add(entry.trim()); + } + } +- log.debug("CSRF protection enabled, allowed referrers: " + allowedReferrerHosts); ++ log.debug("CSRF protection enabled, allowed referrers: {}", allowedReferrerHosts); + } + } + +@@ -144,7 +144,7 @@ public class CSRFUtil { + // empty referrer headers are not allowed for POST + relevant + // content types (see JCR-3909) + if (refHeader == null) { +- log.debug("POST with content type " + ct + " blocked due to missing referer header field"); ++ log.debug("POST with content type {} blocked due to missing referer header field", ct); + return false; + } + +@@ -155,12 +155,12 @@ public class CSRFUtil { + // names + boolean ok = host == null || host.equals(request.getServerName()) || allowedReferrerHosts.contains(host); + if (!ok) { +- log.debug("POST with content type " + ct + " blocked due to referer header field being: " + refHeader); ++ log.debug("POST with content type {} blocked due to referer header field being: {}", ct, refHeader); + } + return ok; + } catch (URISyntaxException ex) { + // referrer malformed -> block access +- log.debug("POST with content type " + ct + " blocked due to malformed referer header field: " + refHeader); ++ log.debug("POST with content type {} blocked due to malformed referer header field: {}", ct, refHeader); + return false; + } + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/EncodeUtil.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/EncodeUtil.java +index bf0b5cf..9e73027 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/EncodeUtil.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/EncodeUtil.java +@@ -129,7 +129,7 @@ public final class EncodeUtil { + try { + BitSet validChars = isPath ? URISaveEx : URISave; + byte[] bytes = string.getBytes("utf-8"); +- StringBuffer out = new StringBuffer(bytes.length); ++ StringBuilder out = new StringBuilder(bytes.length); + for (byte aByte : bytes) { + int c = aByte & 0xff; + if (validChars.get(c) && c != escape) { +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParser.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParser.java +index bc18395..23d8760 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParser.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/util/LinkHeaderFieldParser.java +@@ -104,7 +104,7 @@ public class LinkHeaderFieldParser { + insideDoubleQuotes = c != '"'; + if (c == '\\' && i < fieldValue.length() - 1) { + // skip over next character +- c = fieldValue.charAt(++i); ++ ++i; + } + } else { + insideAngleBrackets = c == '<'; +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java +index fb7e786..f40f998 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java +@@ -37,7 +37,7 @@ import java.util.HashSet; + import java.util.Set; + + /** +- * LocateByHistoryReport encapsulates the DAV:locate-by-hisotry ++ * LocateByHistoryReport encapsulates the DAV:locate-by-history + * report, that may be used to locate a version-controlled resource for that + * version history. The DAV:locate-by-history report can be applied to a collection + * to locate the collection member that is a version-controlled resource for a +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DavDocumentBuilderFactory.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DavDocumentBuilderFactory.java +index 589f616..87f196f 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DavDocumentBuilderFactory.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DavDocumentBuilderFactory.java +@@ -57,7 +57,7 @@ public class DavDocumentBuilderFactory { + } + + public void setFactory(DocumentBuilderFactory documentBuilderFactory) { +- LOG.debug("DocumentBuilderFactory changed to: " + documentBuilderFactory); ++ LOG.debug("DocumentBuilderFactory changed to: {}", documentBuilderFactory); + BUILDER_FACTORY = documentBuilderFactory != null ? documentBuilderFactory : DEFAULT_FACTORY; + } + +@@ -68,8 +68,7 @@ public class DavDocumentBuilderFactory { + private static final EntityResolver DEFAULT_ENTITY_RESOLVER = new EntityResolver() { + @Override + public InputSource resolveEntity(String publicId, String systemId) throws IOException { +- LOG.debug("Resolution of external entities in XML payload not supported - publicId: " + publicId + ", systemId: " +- + systemId); ++ LOG.debug("Resolution of external entities in XML payload not supported - publicId: {}, systemId: {}", publicId, systemId); + throw new IOException("This parser does not support resolution of external entities (publicId: " + publicId + + ", systemId: " + systemId + ")"); + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java +index 3a0f8ff..94cbb5c 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java +@@ -157,7 +157,7 @@ public class DomUtil { + * @see #isText(Node) + */ + public static String getText(Element element) { +- StringBuffer content = new StringBuffer(); ++ StringBuilder content = new StringBuilder(); + if (element != null) { + NodeList nodes = element.getChildNodes(); + for (int i = 0; i < nodes.getLength(); i++) { +@@ -744,8 +744,8 @@ public class DomUtil { + if (namespace == null || namespace.equals(Namespace.EMPTY_NAMESPACE)) { + return localName; + } +- StringBuffer b = new StringBuffer("{"); +- b.append(namespace.getURI()).append("}"); ++ StringBuilder b = new StringBuilder("{"); ++ b.append(namespace.getURI()).append('}'); + b.append(localName); + return b.toString(); + } +@@ -769,8 +769,8 @@ public class DomUtil { + || Namespace.EMPTY_NAMESPACE.getPrefix().equals(namespace.getPrefix())) { + return localName; + } +- StringBuffer buf = new StringBuffer(namespace.getPrefix()); +- buf.append(":"); ++ StringBuilder buf = new StringBuilder(namespace.getPrefix()); ++ buf.append(':'); + buf.append(localName); + return buf.toString(); + } +diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java +index b201750..4852c98 100644 +--- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java ++++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java +@@ -96,7 +96,7 @@ public final class ResultHelper { + probe.endElement("uri", "e", "p:e"); + probe.endPrefixMapping("p"); + probe.endDocument(); +- return writer.toString().indexOf("xmlns") == -1; ++ return !writer.toString().contains("xmlns"); + } catch (Exception e) { + throw new UnsupportedOperationException("XML serialization fails"); + } +diff --git a/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java b/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java +index 8c18045..73d5d7e 100644 +--- a/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java ++++ b/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/util/CSRFUtilTest.java +@@ -23,13 +23,13 @@ import java.security.Principal; + import java.util.ArrayList; + import java.util.Arrays; + import java.util.Collection; ++import java.util.Collections; + import java.util.Enumeration; + import java.util.HashSet; + import java.util.List; + import java.util.Locale; + import java.util.Map; + import java.util.Set; +-import java.util.Vector; + + import javax.servlet.RequestDispatcher; + import javax.servlet.ServletInputStream; +@@ -198,7 +198,7 @@ public class CSRFUtilTest extends TestCase { + @SuppressWarnings({ "rawtypes", "unchecked" }) + public Enumeration getHeaders(String name) { + if (name != null && contentTypes.length > 0 && name.toLowerCase(Locale.ENGLISH).equals("content-type")) { +- return new Vector(Arrays.asList(contentTypes)).elements(); ++ return Collections.enumeration(Arrays.asList(contentTypes)); + } else { + return null; + } diff --git a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java index 30d7778aa47..83c553df209 100644 --- a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java +++ b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java @@ -82,10 +82,10 @@ public class ClientEventPoll extends Thread { private final Session session; /** The map of locally registered listeners indexed by the unique identifier */ - private Map listenerMap = new HashMap(); + private Map listenerMap = new HashMap(); - /** The map of unique identifieres indexed by the registered listeners */ - private Map idMap = new HashMap(); + /** The map of unique identifiers indexed by the registered listeners */ + private Map idMap = new HashMap(); /** * Flag indicating whether the {@link #run()} method should terminate. @@ -147,7 +147,7 @@ public synchronized long addListener(EventListener listener) { * or -1 if the listener was not registered. */ public synchronized long removeListener(EventListener listener) { - Long key = (Long) idMap.remove(listener); + Long key = idMap.remove(listener); if (key != null) { listenerMap.remove(key); return key; @@ -162,8 +162,8 @@ public synchronized long removeListener(EventListener listener) { * @return registered event listeners */ public synchronized EventListener[] getListeners() { - return (EventListener[]) listenerMap.values().toArray( - new EventListener[(listenerMap.size())]); + return listenerMap.values().toArray( + new EventListener[listenerMap.size()]); } /** @@ -209,7 +209,7 @@ public void run() { // extract the listener id from the remote event and find // the locally registered event listener Long id = remoteEvent.getListenerId(); - EventListener listener = (EventListener) listenerMap.get(id); + EventListener listener = listenerMap.get(id); // if the listener is not registered (anymore), the event is // silently ignored, running is checked and the server asked again From 8aa798c6f38593651ef8fd072a60623079c71816 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 21:27:01 -0500 Subject: [PATCH 24/27] Synchronize access to listenerMap As addListener(), removeListener(), and getListeners() synchronize access to listenerMap and idMap, this appears to be necessary. --- .../apache/jackrabbit/rmi/observation/ClientEventPoll.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java index 83c553df209..293a3a22200 100644 --- a/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java +++ b/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/observation/ClientEventPoll.java @@ -209,7 +209,10 @@ public void run() { // extract the listener id from the remote event and find // the locally registered event listener Long id = remoteEvent.getListenerId(); - EventListener listener = listenerMap.get(id); + EventListener listener; + synchronized (this) { + listener = listenerMap.get(id); + } // if the listener is not registered (anymore), the event is // silently ignored, running is checked and the server asked again From bb4e864d43bb0108b69baf1cf45c53b028d23b34 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 21:33:51 -0500 Subject: [PATCH 25/27] Fix a NPE if callback is null Previously, if callback was null, an IllegalArgumentException would be thrown within the try block. This would be caught by the catch (Exception) block which would dereference callback. --- .../java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java index 852220622ec..e9c6092b766 100644 --- a/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java +++ b/jackrabbit-aws-ext/src/main/java/org/apache/jackrabbit/aws/ext/ds/S3Backend.java @@ -313,12 +313,11 @@ public boolean exists(DataIdentifier identifier, boolean touch) public void touchAsync(final DataIdentifier identifier, final long minModifiedDate, final AsyncTouchCallback callback) throws DataStoreException { + if (callback == null) { + throw new IllegalArgumentException("callback parameter cannot be null in touchAsync"); + } ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try { - if (callback == null) { - throw new IllegalArgumentException( - "callback parameter cannot be null in touchAsync"); - } Thread.currentThread().setContextClassLoader( getClass().getClassLoader()); From 778a8f5669b39c2df44993a6d691289c247201ea Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 21:37:12 -0500 Subject: [PATCH 26/27] Supply type information --- .../query/QueryTreeBuilderRegistry.java | 10 +++---- .../jackrabbit/spi/commons/name/JcrPath.java | 2 +- .../jackrabbit/webdav/xml/ResultHelper.java | 26 +++++++++---------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryTreeBuilderRegistry.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryTreeBuilderRegistry.java index a5d62695cf5..b7bacfa2f06 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryTreeBuilderRegistry.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/QueryTreeBuilderRegistry.java @@ -42,15 +42,15 @@ public class QueryTreeBuilderRegistry { /** * List of QueryTreeBuilder instances known to the classloader. */ - private static final List BUILDERS = new ArrayList(); + private static final List BUILDERS = new ArrayList(); /** * Set of languages known to the registered builders. */ - private static final Set LANGUAGES; + private static final Set LANGUAGES; static { - Set languages = new HashSet(); + Set languages = new HashSet(); try { Iterator it = ServiceLoader.load(QueryTreeBuilder.class, QueryTreeBuilderRegistry.class.getClassLoader()).iterator(); @@ -76,7 +76,7 @@ public class QueryTreeBuilderRegistry { public static QueryTreeBuilder getQueryTreeBuilder(String language) throws InvalidQueryException { for (int i = 0; i < BUILDERS.size(); i++) { - QueryTreeBuilder builder = (QueryTreeBuilder) BUILDERS.get(i); + QueryTreeBuilder builder = BUILDERS.get(i); if (builder.canHandle(language)) { return builder; } @@ -91,6 +91,6 @@ public static QueryTreeBuilder getQueryTreeBuilder(String language) * @return String array containing the names of the supported languages. */ public static String[] getSupportedLanguages() { - return (String[]) LANGUAGES.toArray(new String[LANGUAGES.size()]); + return LANGUAGES.toArray(new String[LANGUAGES.size()]); } } diff --git a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java index 47143bd0295..2de6a8f95a0 100644 --- a/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java +++ b/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/name/JcrPath.java @@ -32,7 +32,7 @@ public final class JcrPath { public final int flags; // create tests - private static ArrayList list = new ArrayList(); + private static final ArrayList list = new ArrayList(); static { // absolute paths list.add(new JcrPath("/", NOR|VAL)); diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java index 4852c98d256..4669c324f99 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/ResultHelper.java @@ -144,25 +144,25 @@ private ResultHelper() { } /** - * Special content handler fixing issues with xmlns attraibutes handling. + * Special content handler fixing issues with xmlns attributes handling. */ private static final class SerializingContentHandler extends DefaultHandler { /** * The prefixes of startPrefixMapping() declarations for the coming element. */ - private List prefixList = new ArrayList(); + private List prefixList = new ArrayList(); /** * The URIs of startPrefixMapping() declarations for the coming element. */ - private List uriList = new ArrayList(); + private List uriList = new ArrayList(); /** * Maps of URI<->prefix mappings. Used to work around a bug in the Xalan * serializer. */ - private Map uriToPrefixMap = new HashMap(); - private Map prefixToUriMap = new HashMap(); + private Map uriToPrefixMap = new HashMap(); + private Map prefixToUriMap = new HashMap(); /** * True if there has been some startPrefixMapping() for the coming element. @@ -183,7 +183,7 @@ private static final class SerializingContentHandler extends DefaultHandler { * @see #checkPrefixMapping(String, String) * @see JCR-1767 */ - private final List addedPrefixMappings = new ArrayList(); + private final List> addedPrefixMappings = new ArrayList>(); /** * The adapted content handler instance. @@ -270,9 +270,9 @@ private void checkPrefixMapping(String uri, String qname) } int last = addedPrefixMappings.size() - 1; - List prefixes = (List) addedPrefixMappings.get(last); + List prefixes = addedPrefixMappings.get(last); if (prefixes == null) { - prefixes = new ArrayList(); + prefixes = new ArrayList(); addedPrefixMappings.set(last, prefixes); } prefixes.add(prefix); @@ -315,8 +315,8 @@ public void startElement( for (int mapping = 0; mapping < mappingCount; mapping++) { // Build infos for this namespace - String uri = (String) this.uriList.get(mapping); - String prefix = (String) this.prefixList.get(mapping); + String uri = this.uriList.get(mapping); + String prefix = this.prefixList.get(mapping); String qName = prefix.equals("") ? "xmlns" : ("xmlns:" + prefix); // Search for the corresponding xmlns* attribute @@ -379,11 +379,11 @@ public void endElement(String eltUri, String eltLocalName, String eltQName) thro // JCR-1767: Generate extra prefix un-mapping calls where needed int last = addedPrefixMappings.size() - 1; - List prefixes = (List) addedPrefixMappings.remove(last); + List prefixes = addedPrefixMappings.remove(last); if (prefixes != null) { - Iterator iterator = prefixes.iterator(); + Iterator iterator = prefixes.iterator(); while (iterator.hasNext()) { - endPrefixMapping((String) iterator.next()); + endPrefixMapping(iterator.next()); } } } From 6090c5fc85cccef2d1dec184fcecc9b576519781 Mon Sep 17 00:00:00 2001 From: Daniel Trebbien Date: Sat, 14 Oct 2017 21:46:42 -0500 Subject: [PATCH 27/27] Remove unnecessary boxing/unboxing --- .../jackrabbit/core/fs/db/DatabaseFileSystem.java | 10 +++++----- .../apache/jackrabbit/core/data/CachingDataStore.java | 2 +- .../org/apache/jackrabbit/core/data/LocalCache.java | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/fs/db/DatabaseFileSystem.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/fs/db/DatabaseFileSystem.java index d62f52fb100..e7c5f53901f 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/fs/db/DatabaseFileSystem.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/fs/db/DatabaseFileSystem.java @@ -728,8 +728,8 @@ public void close() throws IOException { conHelper.exec(updateDataSQL, new Object[]{ new StreamWrapper(in, length), - new Long(System.currentTimeMillis()), - new Long(length), + System.currentTimeMillis(), + length, parentDir, name }); @@ -743,8 +743,8 @@ public void close() throws IOException { parentDir, name, new StreamWrapper(in, length), - new Long(System.currentTimeMillis()), - new Long(length) + System.currentTimeMillis(), + length }); } } @@ -921,7 +921,7 @@ protected void createDeepFolder(String folderPath) new Object[]{ parentDir, name, - new Long(System.currentTimeMillis())}); + System.currentTimeMillis()}); } catch (SQLException e) { String msg = "failed to create folder entry: " + folderPath; log.error(msg, e); diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/CachingDataStore.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/CachingDataStore.java index eef22103abb..d73120e3d63 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/CachingDataStore.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/CachingDataStore.java @@ -752,7 +752,7 @@ public void onFailure(AsyncUploadResult result) { synchronized (uploadRetryMap) { Integer retry = uploadRetryMap.get(identifier); if (retry == null) { - retry = new Integer(1); + retry = 1; } else { retry++; } diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java index 33a1b357f21..8c5a1f85672 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/LocalCache.java @@ -412,7 +412,7 @@ static int maxSizeElements(final long bytes) { /** * This method tries purging of local cache. It checks if local cache * has exceeded the defined limit then it triggers purge cache job in a - * seperate thread. + * separate thread. */ synchronized void tryPurge() { if (!isInPurgeMode() @@ -511,7 +511,7 @@ public Long put(final String fileName, final Long value) { synchronized (this) { Long oldValue = cache.get(fileName); if (oldValue == null) { - long flength = value.longValue(); + long flength = value; currentSizeInBytes += flength; return super.put(fileName.replace("\\", "/"), value); }