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-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..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 @@ -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 { @@ -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()); 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-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/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/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/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-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/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/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); + } } } } 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 52aff368ab5..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(); } @@ -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 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/IndexInfos.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexInfos.java index 9b752a11d66..c0f72125966 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 @@ -214,6 +214,10 @@ int size() { return indexes.size(); } + boolean isEmpty() { + return indexes.isEmpty(); + } + /** * @return the time when this index infos where last modified. */ 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 846a3216764..2651c31f895 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 @@ -144,7 +144,7 @@ void indexAdded(String name, int numDocs) { // therefore we have to synchronize this block synchronized (lock) { // initially create buckets - if (indexBuckets.size() == 0) { + if (indexBuckets.isEmpty()) { long lower = 0; long upper = minMergeDocs; while (upper < maxMergeDocs) { 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 be3505701f2..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 @@ -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'); } @@ -391,7 +391,7 @@ public Object visit(NodeTypeQueryNode node, Object data) { } 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 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(); } @@ -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); @@ -1153,7 +1150,7 @@ private String[] getStringValues(Name propertyName, String literal) { break; } } - if (values.size() == 0) { + if (values.isEmpty()) { // use literal as is then try to guess other types values.add(literal); @@ -1202,7 +1199,7 @@ private String[] getStringValues(Name propertyName, String literal) { } } // 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."); } 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 0eacf22d86b..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 @@ -341,7 +341,7 @@ public class MultiIndex { * @throws IOException if an error occurs while reading from the index. */ int numDocs() throws IOException { - if (indexNames.size() == 0) { + if (indexNames.isEmpty()) { return volatileIndex.getNumDocuments(); } else { CachingMultiIndexReader reader = getIndexReader(); @@ -376,7 +376,7 @@ void createInitialIndex(ItemStateManager stateMgr, Path rootPath) throws IOException { // only do an initial index if there are no indexes at all - if (indexNames.size() == 0) { + if (indexNames.isEmpty()) { reindexing = true; try { long count = 0; @@ -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/QueryImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryImpl.java index 407e0095ee8..5044aab98bb 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryImpl.java @@ -157,7 +157,7 @@ protected ColumnImpl[] getColumns() throws RepositoryException { sessionContext.getJCRName(DEFAULT_SELECTOR_NAME), pn, pn); columns.put(name, col); } - if (columns.size() == 0) { + if (columns.isEmpty()) { // use node type constraint LocationStepQueryNode[] steps = root.getLocationNode().getPathSteps(); final Name[] ntName = new Name[1]; diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java index 6fe9220a467..a7cbaeb9de0 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java @@ -562,7 +562,7 @@ private void fetchNext() { // fetch more results try { int num; - if (resultNodes.size() == 0) { + if (resultNodes.isEmpty()) { num = index.getResultFetchSize(); } else { num = resultNodes.size() * 2; 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/SearchIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java index d4ae5d3e04e..cf2348624c3 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 @@ protected void doInit() throws IOException { check.repair(true); } else { List 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/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/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-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/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/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/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/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/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/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..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 @@ -153,14 +153,14 @@ 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'); + dumps.append("\tat ").append(elements[i]).append('\n'); } dumps.append('\n'); } 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/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/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-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..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; @@ -339,7 +337,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 +345,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-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-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/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..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 @@ -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()) @@ -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() @@ -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, @@ -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); } 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..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; @@ -78,7 +76,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/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/main/java/org/apache/jackrabbit/data/core/TransactionContext.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/data/core/TransactionContext.java index 054a1301a4d..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); @@ -210,7 +209,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 { @@ -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-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..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; @@ -552,7 +551,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-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 529d48690b6..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,11 +80,11 @@ 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(); + Stack complexVStack = new Stack(); int next = reader.read(); if (next == '{') { @@ -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/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-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..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 @@ -50,12 +50,12 @@ 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 { // 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; @@ -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; } @@ -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-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..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 @@ -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. @@ -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; } /** @@ -147,10 +147,10 @@ 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.longValue(); + return key; } return -1; @@ -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()]); } /** @@ -208,8 +208,11 @@ public void run() { // extract the listener id from the remote event and find // the locally registered event listener - Long id = new Long(remoteEvent.getListenerId()); - EventListener listener = (EventListener) listenerMap.get(id); + Long id = remoteEvent.getListenerId(); + 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 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/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()); } @@ -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-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/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; 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/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-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/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)); } } 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..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; @@ -39,14 +40,14 @@ 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)) { 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()); 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/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/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/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 >--------------------------------- 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..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,19 +111,17 @@ 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)) { 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 @@ 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/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/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 78e7ed2c6f8..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 @@ -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; @@ -118,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, @@ -266,7 +268,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 +277,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) { @@ -411,13 +413,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 +535,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++; } } @@ -555,7 +557,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 +566,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 +609,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(); @@ -700,13 +701,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++; } } @@ -731,11 +732,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 @@ -808,13 +809,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++; } } @@ -991,22 +992,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 +1045,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/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-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 590819a6861..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 @@ -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 + " "); } /** @@ -565,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/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-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/nodetype/NodeTypeUtil.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/nodetype/NodeTypeUtil.java index f1d561f669e..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 @@ -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"); } @@ -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); @@ -865,7 +873,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 +888,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 +916,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 7836a6c11a5..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,23 +154,21 @@ 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()); } // 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 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/security/AccessControlListTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/security/AccessControlListTest.java index 096b952cfc7..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); } @@ -412,7 +409,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-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-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..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 @@ -52,12 +52,12 @@ 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 { // 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; @@ -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; } @@ -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 7e85448488a..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); @@ -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) { @@ -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/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() { 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..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 >--- @@ -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/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/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/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 6a579858e79..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()); } @@ -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); @@ -770,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(", "); @@ -784,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..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 @@ -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/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-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-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-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-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-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..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()); } /** @@ -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/namespace/NamespaceExtractor.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceExtractor.java index 54bd1fd7d71..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 @@ -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,13 +89,13 @@ 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)); + 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/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-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/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/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/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..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 @@ -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); @@ -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 bd462b4fe13..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 @@ -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 @@ 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/main/javacc/xpath/javacc.xsl b/jackrabbit-spi-commons/src/main/javacc/xpath/javacc.xsl index 28df9fdf3ab..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); } /** @@ -279,12 +279,12 @@ TOKEN_MGR_DECLS : { */ private void popState() { - if (stateStack.size() == 0) + if (stateStack.isEmpty()) { 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-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..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)); @@ -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/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-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/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-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/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/EventImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/EventImpl.java index 820e21c6000..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 @@ -136,12 +136,12 @@ 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); - 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) { 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-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/ChildInfoImpl.java index e831f185b69..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. @@ -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-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-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); } 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..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 @@ -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,15 +115,15 @@ 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; 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 @@ private LinkedList 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; } @@ -159,8 +159,9 @@ private LinkedList 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; @@ -214,10 +215,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 +225,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,9 +260,9 @@ 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)); + 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 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-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-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; icommons-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 c6c681c928d..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)) { @@ -230,7 +231,7 @@ private DavResourceLocatorImpl(String prefix, String workspacePath, String resou 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 +243,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/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) { 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)); } /** 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/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 == '<'; 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 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(); } 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..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 @@ -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"); } @@ -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()); } } } 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; }