diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/authentication/service/AuthenticationService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/authentication/service/AuthenticationService.java index e287e65..85a588e 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/authentication/service/AuthenticationService.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/authentication/service/AuthenticationService.java @@ -22,7 +22,9 @@ import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import javax.transaction.Transactional; import lombok.extern.slf4j.Slf4j; +import org.eclipse.collections.api.factory.Lists; import org.eclipse.collections.api.factory.Maps; +import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.map.ImmutableMap; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.stereotype.Service; @@ -48,12 +50,12 @@ public class AuthenticationService extends LogicDeleteService im } @Override - protected Predicate listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { - if (ignoreWhenAdministrator()) { - return null; - } + protected ImmutableList listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { User loginUser = userService.currentLoginUser(); - return builder.or( + if (User.isAdministrator(loginUser)) { + return Lists.immutable.empty(); + } + return Lists.immutable.of(builder.or( builder.equal(root.get(Authentication_.createdUser), loginUser), builder.and( builder.equal(root.get(Authentication_.order).get(CheckOrder_.target), CheckOrder.Target.ROLE), @@ -63,7 +65,7 @@ public class AuthenticationService extends LogicDeleteService im builder.equal(root.get(Authentication_.order).get(CheckOrder_.target), CheckOrder.Target.USER), builder.equal(root.get(Authentication_.order).get(CheckOrder_.targetUser), loginUser) ) - ); + )); } @Override diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/LogicDeleteService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/LogicDeleteService.java index e32be2b..6cfce9b 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/LogicDeleteService.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/LogicDeleteService.java @@ -13,6 +13,7 @@ import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import javax.transaction.Transactional; import lombok.extern.slf4j.Slf4j; +import org.eclipse.collections.api.list.ImmutableList; /** * @author lanyuanxiaoyao @@ -28,8 +29,8 @@ public abstract class LogicDeleteService exten } @Override - protected Predicate listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { - return builder.equal(root.get("deleted"), false); + protected ImmutableList listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { + return super.listPredicate(root, query, builder).newWith(builder.equal(root.get("deleted"), false)); } @Transactional(rollbackOn = Throwable.class) diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleServiceSupport.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleServiceSupport.java index 97ffa0d..7c8f5f3 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleServiceSupport.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleServiceSupport.java @@ -6,7 +6,9 @@ import cn.hutool.core.util.EnumUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.eshore.gringotts.web.domain.base.controller.query.Query; +import com.eshore.gringotts.web.domain.base.entity.IdOnlyEntity_; import com.eshore.gringotts.web.domain.base.entity.SimpleEntity; +import com.eshore.gringotts.web.domain.base.entity.SimpleEntity_; import com.eshore.gringotts.web.domain.base.repository.SimpleRepository; import com.eshore.gringotts.web.domain.user.entity.User; import com.eshore.gringotts.web.domain.user.service.UserService; @@ -48,7 +50,13 @@ public abstract class SimpleServiceSupport implemen entity, targetEntity, CopyOptions.create() - .setIgnoreProperties("id", "createdUser", "createdTime", "modifiedUser", "modifiedTime") + .setIgnoreProperties( + IdOnlyEntity_.ID, + SimpleEntity_.CREATED_USER, + SimpleEntity_.CREATED_TIME, + SimpleEntity_.MODIFIED_USER, + SimpleEntity_.MODIFIED_TIME + ) ); entity = targetEntity; } @@ -58,16 +66,24 @@ public abstract class SimpleServiceSupport implemen @Override public ImmutableList list() throws Exception { - return Lists.immutable.ofAll(repository.findAll(this::listPredicate)); + return Lists.immutable.ofAll(repository.findAll( + (root, query, builder) -> + builder.and( + listPredicate(root, query, builder) + .reject(ObjectUtil::isNull) + .toArray(new Predicate[]{}) + ) + )); } @Override public ImmutableList list(ImmutableSet ids) throws Exception { return Lists.immutable.ofAll(repository.findAll( - (root, query, builder) -> builder.and( - listPredicate(root, query, builder), - builder.in(root.get("id")).value(ids) - ) + (root, query, builder) -> { + MutableList predicates = Lists.mutable.ofAll(listPredicate(root, query, builder)); + predicates.add(builder.in(root.get("id")).value(ids)); + return builder.and(predicates.reject(ObjectUtil::isNull).toArray(new Predicate[predicates.size()])); + } )); } @@ -152,27 +168,23 @@ public abstract class SimpleServiceSupport implemen return predicates.toImmutable(); } - protected Boolean ignoreWhenAdministrator() { - return User.isAdministrator(userService.currentLoginUser()); - } - - protected Predicate listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { + protected ImmutableList listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { User user = userService.currentLoginUser(); if (User.isNotAdministrator(user)) { - return builder.equal(root.get("createdUser"), user); + return Lists.immutable.of(builder.equal(root.get(SimpleEntity_.createdUser), user)); } - return null; + return Lists.immutable.empty(); } @Override public ImmutableList list(Query listQuery) throws Exception { return Lists.immutable.ofAll(repository.findAll( (root, query, builder) -> { - MutableList predicates = Lists.mutable.of(listPredicate(root, query, builder)); + MutableList predicates = Lists.mutable.ofAll(listPredicate(root, query, builder)); predicates.addAllIterable(queryPredicates(listQuery.getQuery(), root, query, builder)); - return builder.and(predicates.toArray(new Predicate[predicates.size()])); + return builder.and(predicates.reject(ObjectUtil::isNull).toArray(new Predicate[predicates.size()])); }, - Sort.by("createdTime").descending() + Sort.by(SimpleEntity_.CREATED_TIME).descending() )); } @@ -182,10 +194,11 @@ public abstract class SimpleServiceSupport implemen return Optional.empty(); } return repository.findOne( - (root, query, builder) -> builder.and( - listPredicate(root, query, builder), - builder.equal(root.get("id"), id) - ) + (root, query, builder) -> { + MutableList predicates = Lists.mutable.ofAll(listPredicate(root, query, builder)); + predicates.add(builder.equal(root.get(IdOnlyEntity_.id), id)); + return builder.and(predicates.reject(ObjectUtil::isNull).toArray(new Predicate[predicates.size()])); + } ); } diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/check/service/CheckOrderService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/check/service/CheckOrderService.java index caef231..ebc09bf 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/check/service/CheckOrderService.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/check/service/CheckOrderService.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil; import com.eshore.gringotts.web.domain.base.service.CheckingService; import com.eshore.gringotts.web.domain.base.service.SimpleServiceSupport; import com.eshore.gringotts.web.domain.check.entity.CheckOrder; +import com.eshore.gringotts.web.domain.check.entity.CheckOrder_; import com.eshore.gringotts.web.domain.check.repository.CheckOrderRepository; import com.eshore.gringotts.web.domain.user.entity.User; import com.eshore.gringotts.web.domain.user.service.UserService; @@ -16,6 +17,8 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import lombok.extern.slf4j.Slf4j; +import org.eclipse.collections.api.factory.Lists; +import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.map.ImmutableMap; import org.springframework.context.ApplicationContext; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; @@ -42,22 +45,22 @@ public class CheckOrderService extends SimpleServiceSupport { } @Override - protected Predicate listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { + protected ImmutableList listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { User user = userService.currentLoginUser(); - if (ObjectUtil.equals(user.getRole(), User.Role.ADMINISTRATOR)) { - return null; + if (User.isAdministrator(user)) { + return Lists.immutable.empty(); } - return builder.or( - builder.equal(root.get("createdUser"), user), + return Lists.immutable.of(builder.or( + builder.equal(root.get(CheckOrder_.createdUser), user), builder.and( - builder.equal(root.get("target"), CheckOrder.Target.USER), - builder.equal(root.get("targetUser"), user) + builder.equal(root.get(CheckOrder_.target), CheckOrder.Target.USER), + builder.equal(root.get(CheckOrder_.targetUser), user) ), builder.and( - builder.equal(root.get("target"), CheckOrder.Target.ROLE), - builder.equal(root.get("targetRole"), user.getRole()) + builder.equal(root.get(CheckOrder_.target), CheckOrder.Target.ROLE), + builder.equal(root.get(CheckOrder_.targetRole), user.getRole()) ) - ); + )); } public void operation(Long id, CheckOrder.Operation operation) throws JsonProcessingException { diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/service/ConfirmationService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/service/ConfirmationService.java index bbced20..79493ca 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/service/ConfirmationService.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/service/ConfirmationService.java @@ -21,7 +21,9 @@ import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import javax.transaction.Transactional; import lombok.extern.slf4j.Slf4j; +import org.eclipse.collections.api.factory.Lists; import org.eclipse.collections.api.factory.Maps; +import org.eclipse.collections.api.list.ImmutableList; import org.eclipse.collections.api.map.ImmutableMap; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.stereotype.Service; @@ -45,12 +47,12 @@ public class ConfirmationService extends SimpleServiceSupport impl } @Override - protected Predicate listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { - if (ignoreWhenAdministrator()) { - return null; - } + protected ImmutableList listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { User loginUser = userService.currentLoginUser(); - return builder.or( + if (User.isAdministrator(loginUser)) { + return Lists.immutable.empty(); + } + return Lists.immutable.of(builder.or( builder.equal(root.get(Confirmation_.createdUser), loginUser), builder.and( builder.equal(root.get(Confirmation_.order).get(CheckOrder_.target), CheckOrder.Target.ROLE), @@ -60,7 +62,7 @@ public class ConfirmationService extends SimpleServiceSupport impl builder.equal(root.get(Confirmation_.order).get(CheckOrder_.target), CheckOrder.Target.USER), builder.equal(root.get(Confirmation_.order).get(CheckOrder_.targetUser), loginUser) ) - ); + )); } @Override diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java index de34abd..c1c2fa7 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/service/DataResourceService.java @@ -49,11 +49,11 @@ public class DataResourceService extends SimpleServiceSupport { } @Override - protected Predicate listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { - if (ignoreWhenAdministrator()) { - return null; - } + protected ImmutableList listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { User loginUser = userService.currentLoginUser(); + if (User.isAdministrator(loginUser)) { + return Lists.immutable.empty(); + } Subquery confirmationSubquery = query.subquery(Confirmation.class); Root confirmationRoot = confirmationSubquery.from(Confirmation.class); @@ -71,11 +71,11 @@ public class DataResourceService extends SimpleServiceSupport { EntityHelper.checkNeededEntityPrediction(authenticationRoot, builder, loginUser) ); - return builder.or( + return Lists.immutable.of(builder.or( builder.equal(root.get(DataResource_.createdUser), loginUser), builder.exists(confirmationSubquery), builder.exists(authenticationSubquery) - ); + )); } public ImmutableList listNoConfirmation() { diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/upload/service/DataFileService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/upload/service/DataFileService.java index 874df31..3ea4b4c 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/upload/service/DataFileService.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/upload/service/DataFileService.java @@ -17,6 +17,8 @@ import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import javax.persistence.criteria.Subquery; import lombok.extern.slf4j.Slf4j; +import org.eclipse.collections.api.factory.Lists; +import org.eclipse.collections.api.list.ImmutableList; import org.springframework.stereotype.Service; /** @@ -38,11 +40,11 @@ public class DataFileService extends SimpleServiceSupport { } @Override - protected Predicate listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { - if (ignoreWhenAdministrator()) { - return null; - } + protected ImmutableList listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { User loginUser = userService.currentLoginUser(); + if (User.isAdministrator(loginUser)) { + return Lists.immutable.empty(); + } Subquery confirmationSubquery = query.subquery(Confirmation.class); Root confirmationRoot = confirmationSubquery.from(Confirmation.class); @@ -60,11 +62,11 @@ public class DataFileService extends SimpleServiceSupport { EntityHelper.checkNeededEntityPrediction(authenticationRoot, builder, loginUser) ); - return builder.or( + return Lists.immutable.of(builder.or( builder.equal(root.get(DataFile_.createdUser), loginUser), builder.exists(confirmationSubquery), builder.exists(authenticationSubquery) - ); + )); } public Long initialDataFile(String filename) {