You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2013/12/16 14:31:59 UTC
svn commit: r1551208 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/
Author: mduerig
Date: Mon Dec 16 13:31:58 2013
New Revision: 1551208
URL: http://svn.apache.org/r1551208
Log:
OAK-938 incomplete: session refresh must also be reflected on derived interfaces
Wrap Authorizable, User, Group and Impersonation into respective delegator instances
Added:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserDelegator.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizableImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizableImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizableImpl.java?rev=1551208&r1=1551207&r2=1551208&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizableImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizableImpl.java Mon Dec 16 13:31:58 2013
@@ -16,8 +16,11 @@
*/
package org.apache.jackrabbit.oak.security.user;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+
import java.util.Collections;
import java.util.Iterator;
+
import javax.annotation.Nonnull;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
@@ -36,8 +39,6 @@ import org.apache.jackrabbit.oak.spi.sec
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-
/**
* Base class for {@code User} and {@code Group} implementations.
*/
@@ -161,6 +162,8 @@ abstract class AuthorizableImpl implemen
if (obj instanceof AuthorizableImpl) {
AuthorizableImpl otherAuth = (AuthorizableImpl) obj;
return isGroup() == otherAuth.isGroup() && id.equals(otherAuth.id) && userManager.equals(otherAuth.userManager);
+ } else if (obj instanceof Authorizable) {
+ return obj.equals(this);
}
return false;
}
Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java?rev=1551208&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java Mon Dec 16 13:31:58 2013
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.jcr.delegate;
+
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.api.security.user.User;
+
+/**
+ * Utility class for creating the correct delegator instance (either
+ * {@link GroupDelegator} or {@link UserDelegator} for a given
+ * {@link Authorizable}.
+ */
+public final class AuthorizableDelegator {
+ private AuthorizableDelegator() {}
+
+ public static Authorizable wrap(SessionDelegate sessionDelegate, Authorizable authorizable) {
+ if (authorizable.isGroup()) {
+ return new GroupDelegator(sessionDelegate, (Group) authorizable);
+ } else {
+ return new UserDelegator(sessionDelegate, (User) authorizable);
+ }
+ }
+
+}
Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java?rev=1551208&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java Mon Dec 16 13:31:58 2013
@@ -0,0 +1,289 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.jcr.delegate;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import java.security.Principal;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.Value;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterators;
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
+
+/**
+ * This implementation of {@code Group} delegates back to a
+ * delegatee wrapping each call into a {@link SessionOperation} closure.
+ *
+ * @see SessionDelegate#perform(SessionOperation)
+ */
+public final class GroupDelegator implements Group {
+ private final SessionDelegate sessionDelegate;
+ private final Group groupDelegate;
+
+ public GroupDelegator(SessionDelegate sessionDelegate, Group groupDelegate) {
+ checkState(!(groupDelegate instanceof GroupDelegator));
+ this.sessionDelegate = sessionDelegate;
+ this.groupDelegate = groupDelegate;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ return other.equals(this.groupDelegate);
+ }
+
+ @Override
+ public Iterator<Authorizable> getDeclaredMembers() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<Authorizable>>() {
+ @Override
+ public Iterator<Authorizable> perform() throws RepositoryException {
+ Iterator<Authorizable> authorizables = groupDelegate.getDeclaredMembers();
+ return Iterators.transform(authorizables, new Function<Authorizable, Authorizable>() {
+ @Nullable
+ @Override
+ public Authorizable apply(@Nullable Authorizable authorizable) {
+ return AuthorizableDelegator.wrap(sessionDelegate, authorizable);
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public Iterator<Authorizable> getMembers() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<Authorizable>>() {
+ @Override
+ public Iterator<Authorizable> perform() throws RepositoryException {
+ Iterator<Authorizable> authorizables = groupDelegate.getMembers();
+ return Iterators.transform(authorizables, new Function<Authorizable, Authorizable>() {
+ @Nullable
+ @Override
+ public Authorizable apply(@Nullable Authorizable authorizable) {
+ return AuthorizableDelegator.wrap(sessionDelegate, authorizable);
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public boolean isDeclaredMember(final Authorizable authorizable) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return groupDelegate.isDeclaredMember(authorizable);
+ }
+ });
+ }
+
+ @Override
+ public boolean isMember(final Authorizable authorizable) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return groupDelegate.isMember(authorizable);
+ }
+ });
+ }
+
+ @Override
+ public boolean addMember(final Authorizable authorizable) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return groupDelegate.addMember(authorizable);
+ }
+ });
+ }
+
+ @Override
+ public boolean removeMember(final Authorizable authorizable) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return groupDelegate.removeMember(authorizable);
+ }
+ });
+ }
+
+ @Override
+ public String getID() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<String>() {
+ @Override
+ public String perform() throws RepositoryException {
+ return groupDelegate.getID();
+ }
+ });
+ }
+
+ @Override
+ public boolean isGroup() {
+ return sessionDelegate.safePerform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() {
+ return groupDelegate.isGroup();
+ }
+ });
+ }
+
+ @Override
+ public Principal getPrincipal() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Principal>() {
+ @Override
+ public Principal perform() throws RepositoryException {
+ return groupDelegate.getPrincipal();
+ }
+ });
+ }
+
+ @Override
+ public Iterator<Group> declaredMemberOf() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<Group>>() {
+ @Override
+ public Iterator<Group> perform() throws RepositoryException {
+ Iterator<Group> groups = groupDelegate.declaredMemberOf();
+ return Iterators.transform(groups, new Function<Group, Group>() {
+ @Nullable
+ @Override
+ public Group apply(@Nullable Group group) {
+ return new GroupDelegator(sessionDelegate, group);
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public Iterator<Group> memberOf() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<Group>>() {
+ @Override
+ public Iterator<Group> perform() throws RepositoryException {
+ Iterator<Group> groups = groupDelegate.memberOf();
+ return Iterators.transform(groups, new Function<Group, Group>() {
+ @Nullable
+ @Override
+ public Group apply(@Nullable Group group) {
+ return new GroupDelegator(sessionDelegate, group);
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public void remove() throws RepositoryException {
+ sessionDelegate.perform(new SessionOperation<Void>() {
+ @Override
+ public Void perform() throws RepositoryException {
+ groupDelegate.remove();
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public Iterator<String> getPropertyNames() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<String>>() {
+ @Override
+ public Iterator<String> perform() throws RepositoryException {
+ return groupDelegate.getPropertyNames();
+ }
+ });
+ }
+
+ @Override
+ public Iterator<String> getPropertyNames(final String relPath) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<String>>() {
+ @Override
+ public Iterator<String> perform() throws RepositoryException {
+ return groupDelegate.getPropertyNames(relPath);
+ }
+ });
+ }
+
+ @Override
+ public boolean hasProperty(final String relPath) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return groupDelegate.hasProperty(relPath);
+ }
+ });
+ }
+
+ @Override
+ public void setProperty(final String relPath, final Value value) throws RepositoryException {
+ sessionDelegate.perform(new SessionOperation<Void>() {
+ @Override
+ public Void perform() throws RepositoryException {
+ groupDelegate.setProperty(relPath, value);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public void setProperty(final String relPath, final Value[] value) throws RepositoryException {
+ sessionDelegate.perform(new SessionOperation<Void>() {
+ @Override
+ public Void perform() throws RepositoryException {
+ groupDelegate.setProperty(relPath, value);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public Value[] getProperty(final String relPath) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Value[]>() {
+ @Override
+ public Value[] perform() throws RepositoryException {
+ return groupDelegate.getProperty(relPath);
+ }
+ });
+ }
+
+ @Override
+ public boolean removeProperty(final String relPath) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return groupDelegate.removeProperty(relPath);
+ }
+ });
+ }
+
+ @Override
+ public String getPath() throws UnsupportedRepositoryOperationException, RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<String>() {
+ @Override
+ public String perform() throws RepositoryException {
+ return groupDelegate.getPath();
+ }
+ });
+ }
+}
Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java?rev=1551208&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java Mon Dec 16 13:31:58 2013
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.jcr.delegate;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import java.security.Principal;
+
+import javax.jcr.RepositoryException;
+import javax.security.auth.Subject;
+
+import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
+import org.apache.jackrabbit.api.security.user.Impersonation;
+import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
+
+/**
+ * This implementation of {@code Impersonation} delegates back to a
+ * delegatee wrapping each call into a {@link SessionOperation} closure.
+ *
+ * @see SessionDelegate#perform(SessionOperation)
+ */
+public class ImpersonationDelegator implements Impersonation {
+ private final SessionDelegate sessionDelegate;
+ private final Impersonation impersonationDelegate;
+
+ public ImpersonationDelegator(SessionDelegate sessionDelegate, Impersonation impersonationDelegate) {
+ checkState(!(impersonationDelegate instanceof ImpersonationDelegator));
+ this.sessionDelegate = sessionDelegate;
+ this.impersonationDelegate = impersonationDelegate;
+ }
+
+ @Override
+ public PrincipalIterator getImpersonators() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<PrincipalIterator>() {
+ @Override
+ public PrincipalIterator perform() throws RepositoryException {
+ return impersonationDelegate.getImpersonators();
+ }
+ });
+ }
+
+ @Override
+ public boolean grantImpersonation(final Principal principal) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return impersonationDelegate.grantImpersonation(principal);
+ }
+ });
+ }
+
+ @Override
+ public boolean revokeImpersonation(final Principal principal) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return impersonationDelegate.revokeImpersonation(principal);
+ }
+ });
+ }
+
+ @Override
+ public boolean allows(final Subject subject) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return impersonationDelegate.allows(subject);
+ }
+ });
+ }
+}
Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserDelegator.java?rev=1551208&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserDelegator.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserDelegator.java Mon Dec 16 13:31:58 2013
@@ -0,0 +1,301 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.jcr.delegate;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import java.security.Principal;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+import javax.jcr.Credentials;
+import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.Value;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterators;
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.api.security.user.Impersonation;
+import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
+
+/**
+ * This implementation of {@code User} delegates back to a
+ * delegatee wrapping each call into a {@link SessionOperation} closure.
+ *
+ * @see SessionDelegate#perform(SessionOperation)
+ */
+public final class UserDelegator implements User {
+ private final SessionDelegate sessionDelegate;
+ private final User userDelegate;
+
+ public UserDelegator(SessionDelegate sessionDelegate, User userDelegate) {
+ checkState(!(userDelegate instanceof UserDelegator));
+ this.sessionDelegate = sessionDelegate;
+ this.userDelegate = userDelegate;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ return other.equals(this.userDelegate);
+ }
+
+ @Override
+ public boolean isAdmin() {
+ return sessionDelegate.safePerform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() {
+ return userDelegate.isAdmin();
+ }
+ });
+ }
+
+ @Override
+ public Credentials getCredentials() throws RepositoryException {
+ return sessionDelegate.safePerform(new SessionOperation<Credentials>() {
+ @Override
+ public Credentials perform() throws RepositoryException {
+ return userDelegate.getCredentials();
+ }
+ });
+ }
+
+ @Override
+ public Impersonation getImpersonation() throws RepositoryException {
+ return sessionDelegate.safePerform(new SessionOperation<Impersonation>() {
+ @Override
+ public Impersonation perform() throws RepositoryException {
+ Impersonation impersonation = userDelegate.getImpersonation();
+ return new ImpersonationDelegator(sessionDelegate, impersonation);
+ }
+ });
+ }
+
+ @Override
+ public void changePassword(final String password) throws RepositoryException {
+ sessionDelegate.perform(new SessionOperation<Void>() {
+ @Override
+ public Void perform() throws RepositoryException {
+ userDelegate.changePassword(password);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public void changePassword(final String password, final String oldPassword) throws RepositoryException {
+ sessionDelegate.perform(new SessionOperation<Void>() {
+ @Override
+ public Void perform() throws RepositoryException {
+ userDelegate.changePassword(password, oldPassword);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public void disable(final String reason) throws RepositoryException {
+ sessionDelegate.perform(new SessionOperation<Void>() {
+ @Override
+ public Void perform() throws RepositoryException {
+ userDelegate.disable(reason);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public boolean isDisabled() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return userDelegate.isDisabled();
+ }
+ });
+ }
+
+ @Override
+ public String getDisabledReason() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<String>() {
+ @Override
+ public String perform() throws RepositoryException {
+ return userDelegate.getDisabledReason();
+ }
+ });
+ }
+
+ @Override
+ public String getID() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<String>() {
+ @Override
+ public String perform() throws RepositoryException {
+ return userDelegate.getID();
+ }
+ });
+ }
+
+ @Override
+ public boolean isGroup() {
+ return sessionDelegate.safePerform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() {
+ return userDelegate.isGroup();
+ }
+ });
+ }
+
+ @Override
+ public Principal getPrincipal() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Principal>() {
+ @Override
+ public Principal perform() throws RepositoryException {
+ return userDelegate.getPrincipal();
+ }
+ });
+ }
+
+ @Override
+ public Iterator<Group> declaredMemberOf() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<Group>>() {
+ @Override
+ public Iterator<Group> perform() throws RepositoryException {
+ Iterator<Group> groups = userDelegate.declaredMemberOf();
+ return Iterators.transform(groups, new Function<Group, Group>() {
+ @Nullable
+ @Override
+ public Group apply(@Nullable Group group) {
+ return new GroupDelegator(sessionDelegate, group);
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public Iterator<Group> memberOf() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<Group>>() {
+ @Override
+ public Iterator<Group> perform() throws RepositoryException {
+ Iterator<Group> groups = userDelegate.memberOf();
+ return Iterators.transform(groups, new Function<Group, Group>() {
+ @Nullable
+ @Override
+ public Group apply(@Nullable Group group) {
+ return new GroupDelegator(sessionDelegate, group);
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public void remove() throws RepositoryException {
+ sessionDelegate.perform(new SessionOperation<Void>() {
+ @Override
+ public Void perform() throws RepositoryException {
+ userDelegate.remove();
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public Iterator<String> getPropertyNames() throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<String>>() {
+ @Override
+ public Iterator<String> perform() throws RepositoryException {
+ return userDelegate.getPropertyNames();
+ }
+ });
+ }
+
+ @Override
+ public Iterator<String> getPropertyNames(final String relPath) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Iterator<String>>() {
+ @Override
+ public Iterator<String> perform() throws RepositoryException {
+ return userDelegate.getPropertyNames(relPath);
+ }
+ });
+ }
+
+ @Override
+ public boolean hasProperty(final String relPath) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return userDelegate.hasProperty(relPath);
+ }
+ });
+ }
+
+ @Override
+ public void setProperty(final String relPath, final Value value) throws RepositoryException {
+ sessionDelegate.perform(new SessionOperation<Void>() {
+ @Override
+ public Void perform() throws RepositoryException {
+ userDelegate.setProperty(relPath, value);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public void setProperty(final String relPath, final Value[] value) throws RepositoryException {
+ sessionDelegate.perform(new SessionOperation<Void>() {
+ @Override
+ public Void perform() throws RepositoryException {
+ userDelegate.setProperty(relPath, value);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public Value[] getProperty(final String relPath) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Value[]>() {
+ @Override
+ public Value[] perform() throws RepositoryException {
+ return userDelegate.getProperty(relPath);
+ }
+ });
+ }
+
+ @Override
+ public boolean removeProperty(final String relPath) throws RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<Boolean>() {
+ @Override
+ public Boolean perform() throws RepositoryException {
+ return userDelegate.removeProperty(relPath);
+ }
+ });
+ }
+
+ @Override
+ public String getPath() throws UnsupportedRepositoryOperationException, RepositoryException {
+ return sessionDelegate.perform(new SessionOperation<String>() {
+ @Override
+ public String perform() throws RepositoryException {
+ return userDelegate.getPath();
+ }
+ });
+ }
+}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java?rev=1551208&r1=1551207&r2=1551208&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java Mon Dec 16 13:31:58 2013
@@ -19,12 +19,17 @@
package org.apache.jackrabbit.oak.jcr.delegate;
+import static com.google.common.base.Preconditions.checkState;
+
import java.security.Principal;
import java.util.Iterator;
+import javax.annotation.Nullable;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
+import com.google.common.base.Function;
+import com.google.common.collect.Iterators;
import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.jackrabbit.api.security.user.AuthorizableExistsException;
import org.apache.jackrabbit.api.security.user.Group;
@@ -40,12 +45,13 @@ import org.apache.jackrabbit.oak.jcr.ses
* @see SessionDelegate#perform(org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation)
*/
public class UserManagerDelegator implements UserManager {
- private final UserManager userManagerDelegate;
private final SessionDelegate sessionDelegate;
+ private final UserManager userManagerDelegate;
public UserManagerDelegator(final SessionDelegate sessionDelegate, UserManager userManagerDelegate) {
- this.userManagerDelegate = userManagerDelegate;
+ checkState(!(userManagerDelegate instanceof UserManagerDelegator));
this.sessionDelegate = sessionDelegate;
+ this.userManagerDelegate = userManagerDelegate;
}
@Override
@@ -53,7 +59,8 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Authorizable>(sessionDelegate) {
@Override
public Authorizable perform() throws RepositoryException {
- return userManagerDelegate.getAuthorizable(id);
+ Authorizable authorizable = userManagerDelegate.getAuthorizable(id);
+ return AuthorizableDelegator.wrap(sessionDelegate, authorizable);
}
});
}
@@ -63,7 +70,8 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Authorizable>(sessionDelegate) {
@Override
public Authorizable perform() throws RepositoryException {
- return userManagerDelegate.getAuthorizable(principal);
+ Authorizable authorizable = userManagerDelegate.getAuthorizable(principal);
+ return AuthorizableDelegator.wrap(sessionDelegate, authorizable);
}
});
}
@@ -73,7 +81,8 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Authorizable>(sessionDelegate) {
@Override
public Authorizable perform() throws RepositoryException {
- return userManagerDelegate.getAuthorizableByPath(path);
+ Authorizable authorizable = userManagerDelegate.getAuthorizableByPath(path);
+ return AuthorizableDelegator.wrap(sessionDelegate, authorizable);
}
});
}
@@ -83,7 +92,14 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Iterator<Authorizable>>(sessionDelegate) {
@Override
public Iterator<Authorizable> perform() throws RepositoryException {
- return userManagerDelegate.findAuthorizables(relPath, value);
+ Iterator<Authorizable> authorizables = userManagerDelegate.findAuthorizables(relPath, value);
+ return Iterators.transform(authorizables, new Function<Authorizable, Authorizable>() {
+ @Nullable
+ @Override
+ public Authorizable apply(Authorizable authorizable) {
+ return AuthorizableDelegator.wrap(sessionDelegate, authorizable);
+ }
+ });
}
});
}
@@ -93,7 +109,14 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Iterator<Authorizable>>(sessionDelegate) {
@Override
public Iterator<Authorizable> perform() throws RepositoryException {
- return userManagerDelegate.findAuthorizables(relPath, value, searchType);
+ Iterator<Authorizable> authorizables = userManagerDelegate.findAuthorizables(relPath, value, searchType);
+ return Iterators.transform(authorizables, new Function<Authorizable, Authorizable>() {
+ @Nullable
+ @Override
+ public Authorizable apply(Authorizable authorizable) {
+ return AuthorizableDelegator.wrap(sessionDelegate, authorizable);
+ }
+ });
}
});
}
@@ -103,7 +126,14 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Iterator<Authorizable>>(sessionDelegate) {
@Override
public Iterator<Authorizable> perform() throws RepositoryException {
- return userManagerDelegate.findAuthorizables(query);
+ Iterator<Authorizable> authorizables = userManagerDelegate.findAuthorizables(query);
+ return Iterators.transform(authorizables, new Function<Authorizable, Authorizable>() {
+ @Nullable
+ @Override
+ public Authorizable apply(Authorizable authorizable) {
+ return AuthorizableDelegator.wrap(sessionDelegate, authorizable);
+ }
+ });
}
});
}
@@ -113,7 +143,8 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<User>(sessionDelegate) {
@Override
public User perform() throws RepositoryException {
- return userManagerDelegate.createUser(userID, password);
+ User user = userManagerDelegate.createUser(userID, password);
+ return new UserDelegator(sessionDelegate, user);
}
});
}
@@ -123,7 +154,8 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<User>(sessionDelegate) {
@Override
public User perform() throws RepositoryException {
- return userManagerDelegate.createUser(userID, password, principal, intermediatePath);
+ User user = userManagerDelegate.createUser(userID, password, principal, intermediatePath);
+ return new UserDelegator(sessionDelegate, user);
}
});
}
@@ -133,7 +165,8 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Group>(sessionDelegate) {
@Override
public Group perform() throws RepositoryException {
- return userManagerDelegate.createGroup(groupID);
+ Group group = userManagerDelegate.createGroup(groupID);
+ return new GroupDelegator(sessionDelegate, group);
}
});
}
@@ -143,7 +176,8 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Group>(sessionDelegate) {
@Override
public Group perform() throws RepositoryException {
- return userManagerDelegate.createGroup(principal);
+ Group group = userManagerDelegate.createGroup(principal);
+ return new GroupDelegator(sessionDelegate, group);
}
});
}
@@ -153,7 +187,8 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Group>(sessionDelegate) {
@Override
public Group perform() throws RepositoryException {
- return userManagerDelegate.createGroup(principal, intermediatePath);
+ Group group = userManagerDelegate.createGroup(principal, intermediatePath);
+ return new GroupDelegator(sessionDelegate, group);
}
});
}
@@ -163,7 +198,8 @@ public class UserManagerDelegator implem
return sessionDelegate.perform(new UserManagerOperation<Group>(sessionDelegate) {
@Override
public Group perform() throws RepositoryException {
- return userManagerDelegate.createGroup(groupID, principal, intermediatePath);
+ Group group = userManagerDelegate.createGroup(groupID, principal, intermediatePath);
+ return new GroupDelegator(sessionDelegate, group);
}
});
}