You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2014/01/03 08:36:11 UTC
svn commit: r1555024 - in
/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource:
JcrPropertyMap.java internal/JcrModifiableValueMap.java
Author: cziegeler
Date: Fri Jan 3 07:36:11 2014
New Revision: 1555024
URL: http://svn.apache.org/r1555024
Log:
SLING-3304 : Optimize JcrPropertyMap.escapeKeyName(). Apply patch from Przemo Pakulski and add the same code to JcrModifiableValueMap
Modified:
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java?rev=1555024&r1=1555023&r2=1555024&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/JcrPropertyMap.java Fri Jan 3 07:36:11 2014
@@ -68,9 +68,12 @@ public class JcrPropertyMap
/** A cache for the values. */
final Map<String, Object> valueCache;
- /** Has the node been read completly? */
+ /** Has the node been read completely? */
boolean fullyRead;
+ /** keep all prefixes for escaping */
+ private String[] namespacePrefixes;
+
private final ClassLoader dynamicClassLoader;
/**
@@ -380,8 +383,7 @@ public class JcrPropertyMap
// check if colon is neither the first nor the last character
if (indexOfPrefix > 0 && key.length() > indexOfPrefix + 1) {
final String prefix = key.substring(0, indexOfPrefix);
- for (final String existingPrefix : getNode().getSession()
- .getNamespacePrefixes()) {
+ for (final String existingPrefix : getNamespacePrefixes()) {
if (existingPrefix.equals(prefix)) {
return prefix
+ ":"
@@ -394,6 +396,16 @@ public class JcrPropertyMap
}
/**
+ * Read namespace prefixes and store as member variable to minimize number of JCR API calls
+ */
+ private String[] getNamespacePrefixes() throws RepositoryException {
+ if (this.namespacePrefixes == null) {
+ this.namespacePrefixes = getNode().getSession().getNamespacePrefixes();
+ }
+ return this.namespacePrefixes;
+ }
+
+ /**
* Read all properties.
* @throws IllegalArgumentException if a repository exception occurs
*/
Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java?rev=1555024&r1=1555023&r2=1555024&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrModifiableValueMap.java Fri Jan 3 07:36:11 2014
@@ -73,6 +73,9 @@ public final class JcrModifiableValueMap
/** Has the node been read completely? */
private boolean fullyRead;
+ /** keep all prefixes for escaping */
+ private String[] namespacePrefixes;
+
private final ClassLoader dynamicClassLoader;
/**
@@ -371,8 +374,7 @@ public final class JcrModifiableValueMap
// check if colon is neither the first nor the last character
if (indexOfPrefix > 0 && key.length() > indexOfPrefix + 1) {
final String prefix = key.substring(0, indexOfPrefix);
- for (final String existingPrefix : getNode().getSession()
- .getNamespacePrefixes()) {
+ for (final String existingPrefix : getNamespacePrefixes()) {
if (existingPrefix.equals(prefix)) {
return prefix
+ ":"
@@ -385,6 +387,16 @@ public final class JcrModifiableValueMap
}
/**
+ * Read namespace prefixes and store as member variable to minimize number of JCR API calls
+ */
+ private String[] getNamespacePrefixes() throws RepositoryException {
+ if (this.namespacePrefixes == null) {
+ this.namespacePrefixes = getNode().getSession().getNamespacePrefixes();
+ }
+ return this.namespacePrefixes;
+ }
+
+ /**
* Read all properties.
* @throws IllegalArgumentException if a repository exception occurs
*/