diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/DefaultAccessController.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/DefaultAccessController.java index 58030ca866ac7e2fa2af673ee2166950bcaf127f..7cd02d3234d73c73d0c9270faaeeda4f99e75e73 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/DefaultAccessController.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/DefaultAccessController.java @@ -75,10 +75,13 @@ public final class DefaultAccessController implements IAccessController private final CapabilityMap capabilities = new CapabilityMap(new File("etc/capabilities")); + private PredicateExecutor predicateExecutor; + public DefaultAccessController(final IAuthorizationDAOFactory daoFactory) { - PredicateExecutor.setPredicateFactory(new PredicateFactory()); - PredicateExecutor.setDAOFactory(daoFactory); + predicateExecutor = new PredicateExecutor(); + predicateExecutor.setPredicateFactory(new PredicateFactory()); + predicateExecutor.setDAOFactory(daoFactory); } public final static List<RoleWithIdentifier> getUserRoles(final PersonPE person) @@ -179,7 +182,7 @@ public final class DefaultAccessController implements IAccessController { for (final Argument<?> argument : arguments) { - final Status status = PredicateExecutor.evaluate(person, userRoles, argument); + final Status status = predicateExecutor.evaluate(person, userRoles, argument); if (status.getFlag().equals(StatusFlag.OK) == false) { return status; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutor.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutor.java index ef4b26416d022875b88ac5c29c9f8e6832c89d42..925b1a6706cd9b9a63e9d9d4c976273c352bc587 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutor.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutor.java @@ -36,52 +36,36 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; */ public final class PredicateExecutor { - private static IPredicateFactory predicateFactory; + private IPredicateFactory predicateFactory; - private static IAuthorizationDataProvider authorizationDataProvider; - - private PredicateExecutor() - { - // Can not be instantiated. - } + private IAuthorizationDataProvider authorizationDataProvider; /** - * Statically sets the <code>IPredicateProvider</code> implementation. + * Sets the <code>IPredicateProvider</code> implementation. */ - static final void setPredicateFactory(final IPredicateFactory predicateProvider) + final void setPredicateFactory(final IPredicateFactory predicateProvider) { - PredicateExecutor.predicateFactory = predicateProvider; - } - - static final IPredicateFactory getPredicateFactory() - { - return predicateFactory; + predicateFactory = predicateProvider; } /** - * Statically sets the {@link IAuthorizationDAOFactory} implementation. + * Sets the {@link IAuthorizationDAOFactory} implementation. */ - static final void setDAOFactory(final IAuthorizationDAOFactory daoFactory) - { - PredicateExecutor.authorizationDataProvider = new AuthorizationDataProvider(daoFactory); - } - - static final IAuthorizationDataProvider getAuthorizationDataProvider() + final void setDAOFactory(final IAuthorizationDAOFactory daoFactory) { - return authorizationDataProvider; + authorizationDataProvider = new AuthorizationDataProvider(daoFactory); } - static final void setAuthorizationDataProvider( - IAuthorizationDataProvider authorizationDataProvider) + final void setAuthorizationDataProvider(IAuthorizationDataProvider authorizationDataProvider) { - PredicateExecutor.authorizationDataProvider = authorizationDataProvider; + this.authorizationDataProvider = authorizationDataProvider; } /** * Creates, casts and ensures that the returned {@link IPredicate} is not <code>null</code>. */ @SuppressWarnings("unchecked") - private final static <T> IPredicate<T> createPredicate( + private final <T> IPredicate<T> createPredicate( final Class<? extends IPredicate<?>> predicateClass) { assert predicateFactory != null : "Unspecified predicate factory"; @@ -105,7 +89,7 @@ public final class PredicateExecutor /** * Finds out and executes the appropriate {@link IPredicate} for given <var>argument</var>. */ - public final static <T> Status evaluate(final PersonPE person, + public final <T> Status evaluate(final PersonPE person, final List<RoleWithIdentifier> allowedRoles, final Argument<T> argument) { assert person != null : "Person unspecified"; @@ -124,10 +108,9 @@ public final class PredicateExecutor } @Private - final static <T> Status evaluate(final PersonPE person, - final List<RoleWithIdentifier> allowedRoles, final T argumentValue, - final Class<? extends IPredicate<?>> predicateClass, final Class<T> argumentType, - final boolean shouldFlattenCollections) + final <T> Status evaluate(final PersonPE person, final List<RoleWithIdentifier> allowedRoles, + final T argumentValue, final Class<? extends IPredicate<?>> predicateClass, + final Class<T> argumentType, final boolean shouldFlattenCollections) { assert authorizationDataProvider != null : "Authorization data provider not set"; final IPredicate<T> predicate = createPredicate(predicateClass); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutorTest.java index a2e9a424cf2feda6fbf5edfebef474ef4b6e2e23..857ae5be7376c6f4f489d4730268d058e79bf279 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/PredicateExecutorTest.java @@ -21,7 +21,6 @@ import java.util.Collections; import java.util.List; import org.jmock.Expectations; -import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -57,9 +56,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase private IDatabaseInstanceDAO dbInstanceDAO; - private IPredicateFactory previousFactory; - - private IAuthorizationDataProvider previousProvider; + private PredicateExecutor predicateExecutor; private List<RoleWithIdentifier> createAllowedRoles() { @@ -75,8 +72,8 @@ public final class PredicateExecutorTest extends AuthorizationTestCase predicateFactory = context.mock(IPredicateFactory.class); daoFactory = context.mock(IAuthorizationDAOFactory.class); dbInstanceDAO = context.mock(IDatabaseInstanceDAO.class); - previousFactory = PredicateExecutor.getPredicateFactory(); - PredicateExecutor.setPredicateFactory(predicateFactory); + predicateExecutor = new PredicateExecutor(); + predicateExecutor.setPredicateFactory(predicateFactory); context.checking(new Expectations() { { @@ -88,8 +85,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase will(returnValue(Collections.EMPTY_LIST)); } }); - previousProvider = PredicateExecutor.getAuthorizationDataProvider(); - PredicateExecutor.setDAOFactory(daoFactory); + predicateExecutor.setDAOFactory(daoFactory); } /** @@ -110,15 +106,6 @@ public final class PredicateExecutorTest extends AuthorizationTestCase stringCollectionPredicate = context.mock(IPredicate.class); } - @Override - @AfterMethod - public void tearDown() - { - PredicateExecutor.setAuthorizationDataProvider(previousProvider); - PredicateExecutor.setPredicateFactory(previousFactory); - super.tearDown(); - } - @SuppressWarnings("unchecked") private final Class<? extends IPredicate<String>> castToStringPredicateClass() { @@ -150,7 +137,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase will(returnValue(Status.OK)); } }); - assertEquals(Status.OK, PredicateExecutor.evaluate(person, allowedRoles, value, + assertEquals(Status.OK, predicateExecutor.evaluate(person, allowedRoles, value, castToStringPredicateClass(), String.class, true)); context.assertIsSatisfied(); } @@ -177,7 +164,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase will(returnValue(Status.OK)); } }); - assertEquals(Status.OK, PredicateExecutor.evaluate(person, allowedRoles, array, + assertEquals(Status.OK, predicateExecutor.evaluate(person, allowedRoles, array, castToStringPredicateClass(), String[].class, true)); context.assertIsSatisfied(); } @@ -204,7 +191,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase will(returnValue(Status.OK)); } }); - assertEquals(Status.OK, PredicateExecutor.evaluate(person, allowedRoles, list, + assertEquals(Status.OK, predicateExecutor.evaluate(person, allowedRoles, list, castToStringPredicateClass(), List.class, true)); context.assertIsSatisfied(); } @@ -230,7 +217,7 @@ public final class PredicateExecutorTest extends AuthorizationTestCase will(returnValue(Status.OK)); } }); - assertEquals(Status.OK, PredicateExecutor.evaluate(person, allowedRoles, list, + assertEquals(Status.OK, predicateExecutor.evaluate(person, allowedRoles, list, castToStringCollectionPredicateClass(), List.class, false)); context.assertIsSatisfied(); }