Author: angela
Date: Fri Nov 13 10:03:30 2015
New Revision: 1714174
URL: http://svn.apache.org/viewvc?rev=1714174&view=rev
Log:
OAK-3522 : DefaultSyncContext exposes internal path-utility method
Modified:
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/package-info.java
jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java
Modified:
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java?rev=1714174&r1=1714173&r2=1714174&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java
(original)
+++
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContext.java
Fri Nov 13 10:03:30 2015
@@ -43,6 +43,7 @@ import org.apache.jackrabbit.api.securit
import org.apache.jackrabbit.api.security.user.User;
import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.jackrabbit.oak.commons.DebugTimer;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalGroup;
import
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentity;
import
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityException;
@@ -149,28 +150,10 @@ public class DefaultSyncContext implemen
* Robust relative path concatenation.
* @param paths relative paths
* @return the concatenated path
+ * @deprecated Since Oak 1.3.10. Please use {@link
PathUtils#concatRelativePaths(String...)} instead.
*/
public static String joinPaths(String... paths) {
- StringBuilder result = new StringBuilder();
- for (String path: paths) {
- if (path != null && !path.isEmpty()) {
- int i0 = 0;
- int i1 = path.length();
- while (i0 < i1 && path.charAt(i0) == '/') {
- i0++;
- }
- while (i1 > i0 && path.charAt(i1-1) == '/') {
- i1--;
- }
- if (i1 > i0) {
- if (result.length() > 0) {
- result.append('/');
- }
- result.append(path.substring(i0, i1));
- }
- }
- }
- return result.length() == 0 ? null : result.toString();
+ return PathUtils.concatRelativePaths(paths);
}
/**
@@ -390,7 +373,7 @@ public class DefaultSyncContext implemen
externalUser.getId(),
null,
principal,
- joinPaths(config.user().getPathPrefix(),
externalUser.getIntermediatePath())
+ PathUtils.concatRelativePaths(config.user().getPathPrefix(),
externalUser.getIntermediatePath())
);
user.setProperty(REP_EXTERNAL_ID,
valueFactory.createValue(externalUser.getExternalId().getString()));
return user;
@@ -410,7 +393,7 @@ public class DefaultSyncContext implemen
Group group = userManager.createGroup(
externalGroup.getId(),
principal,
- joinPaths(config.group().getPathPrefix(),
externalGroup.getIntermediatePath())
+ PathUtils.concatRelativePaths(config.group().getPathPrefix(),
externalGroup.getIntermediatePath())
);
group.setProperty(REP_EXTERNAL_ID,
valueFactory.createValue(externalGroup.getExternalId().getString()));
return group;
Modified:
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java?rev=1714174&r1=1714173&r2=1714174&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
(original)
+++
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/PathUtils.java
Fri Nov 13 10:03:30 2015
@@ -24,6 +24,7 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/**
@@ -323,6 +324,36 @@ public final class PathUtils {
}
/**
+ * Relative path concatenation.
+ *
+ * @param relativePaths relative paths
+ * @return the concatenated path or {@code null} if the resulting path is
empty.
+ */
+ @CheckForNull
+ public static String concatRelativePaths(String... relativePaths) {
+ StringBuilder result = new StringBuilder();
+ for (String path : relativePaths) {
+ if (path != null && !path.isEmpty()) {
+ int i0 = 0;
+ int i1 = path.length();
+ while (i0 < i1 && path.charAt(i0) == '/') {
+ i0++;
+ }
+ while (i1 > i0 && path.charAt(i1-1) == '/') {
+ i1--;
+ }
+ if (i1 > i0) {
+ if (result.length() > 0) {
+ result.append('/');
+ }
+ result.append(path.substring(i0, i1));
+ }
+ }
+ }
+ return result.length() == 0 ? null : result.toString();
+ }
+
+ /**
* Check if a path is a (direct or indirect) ancestor of another path.
*
* @param ancestor the ancestor path
Modified:
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/package-info.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/package-info.java?rev=1714174&r1=1714173&r2=1714174&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/package-info.java
(original)
+++
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/package-info.java
Fri Nov 13 10:03:30 2015
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@Version("2.3.0")
+@Version("2.4.0")
@Export(optional = "provide:=true")
package org.apache.jackrabbit.oak.commons;
Modified:
jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java?rev=1714174&r1=1714173&r2=1714174&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java
(original)
+++
jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/PathUtilsTest.java
Fri Nov 13 10:03:30 2015
@@ -74,6 +74,18 @@ public class PathUtilsTest extends TestC
assertEquals(2, PathUtils.getDepth("a/b"));
}
+ @Test
+ public void testConcatRelativePaths() {
+ assertNull(PathUtils.concatRelativePaths("", "", ""));
+ assertNull(PathUtils.concatRelativePaths());
+
+ assertEquals("a/b/c", PathUtils.concatRelativePaths("a", "b", "c"));
+ assertEquals("a/b/c", PathUtils.concatRelativePaths("a", "b/c"));
+ assertEquals("a/b/c", PathUtils.concatRelativePaths("a/b/c", ""));
+ assertEquals("a/b/c", PathUtils.concatRelativePaths("a/b", "c"));
+ assertEquals("a/b/c", PathUtils.concatRelativePaths("/", "a", "",
"b/c/"));
+ }
+
private static int getElementCount(String path) {
int count = 0;