From f48f2ead7195b7a2ed8b61f81559b324671caef5 Mon Sep 17 00:00:00 2001 From: Vova Perebykivskiy Date: Thu, 17 Dec 2015 16:02:48 +0200 Subject: [PATCH] Add limits for users (Mapping, Entity, DAO, Model, DB). Refactoring. Add method for create button of Users to check if users not violating with limits. --- .../business/common/daos/ILimitsDAO.java | 20 +++++++++ .../business/common/daos/LimitsDAO.java | 40 +++++++++++++++++ .../business/common/entities/Limits.java | 34 ++++++++++++++ .../business/email/daos/EmailTemplateDAO.java | 2 +- .../email/daos/IEmailTemplateDAO.java | 2 +- .../email/entities/EmailTemplate.java | 2 +- .../business/users/daos/IUserDAO.java | 2 + .../business/users/daos/UserDAO.java | 5 +++ .../libreplan-business-spring-config.xml | 3 ++ .../business/common/entities/Limits.hbm.xml | 18 ++++++++ .../libreplan/web/common/ILimitsModel.java | 19 ++++++++ .../org/libreplan/web/common/LimitsModel.java | 45 +++++++++++++++++++ .../web/email/IEmailTemplateModel.java | 2 +- .../org/libreplan/web/users/IUserModel.java | 2 + .../web/users/UserCRUDController.java | 15 +++++++ .../org/libreplan/web/users/UserModel.java | 8 ++++ .../src/main/webapp/users/_listUsers.zul | 3 +- 17 files changed, 217 insertions(+), 5 deletions(-) create mode 100644 libreplan-business/src/main/java/org/libreplan/business/common/daos/ILimitsDAO.java create mode 100644 libreplan-business/src/main/java/org/libreplan/business/common/daos/LimitsDAO.java create mode 100644 libreplan-business/src/main/java/org/libreplan/business/common/entities/Limits.java create mode 100644 libreplan-business/src/main/resources/org/libreplan/business/common/entities/Limits.hbm.xml create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/common/ILimitsModel.java create mode 100644 libreplan-webapp/src/main/java/org/libreplan/web/common/LimitsModel.java diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/daos/ILimitsDAO.java b/libreplan-business/src/main/java/org/libreplan/business/common/daos/ILimitsDAO.java new file mode 100644 index 000000000..5eda592a6 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/common/daos/ILimitsDAO.java @@ -0,0 +1,20 @@ +package org.libreplan.business.common.daos; + +import org.libreplan.business.common.entities.Limits; + +import java.util.List; + +/** + * DAO interface for the Limits entity. + * Contract for {@link LimitsDAO} + * + * Created by + * @author Vova Perebykivskiy + * on 17.12.2015. + */ +public interface ILimitsDAO extends IGenericDAO { + List getAll(); + + Limits getUsersType(); + Limits getWorkersType(); +} diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/daos/LimitsDAO.java b/libreplan-business/src/main/java/org/libreplan/business/common/daos/LimitsDAO.java new file mode 100644 index 000000000..d29492a96 --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/common/daos/LimitsDAO.java @@ -0,0 +1,40 @@ +package org.libreplan.business.common.daos; + +import org.libreplan.business.common.entities.Limits; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * DAO for {@link Limits} + * + * Created by + * @author Vova Perebykivskiy + * on 24.09.15. + */ + +@Repository +public class LimitsDAO extends GenericDAOHibernate implements ILimitsDAO { + + @Override + public List getAll() { + return list(Limits.class); + } + + @Override + public Limits getUsersType() { + List list = list(Limits.class); + for (Limits item : list) + if (item.getType().equals("users")) return item; + return null; + } + + @Override + public Limits getWorkersType() { + List list = list(Limits.class); + for (Limits item : list) + if (item.getType().equals("workers")) return item; + return null; + } + +} diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/entities/Limits.java b/libreplan-business/src/main/java/org/libreplan/business/common/entities/Limits.java new file mode 100644 index 000000000..bd746735e --- /dev/null +++ b/libreplan-business/src/main/java/org/libreplan/business/common/entities/Limits.java @@ -0,0 +1,34 @@ +package org.libreplan.business.common.entities; + +import org.libreplan.business.common.BaseEntity; + +/** + * Limits entity, represents a limits for any functionality. + * This class is intended to work as a Hibernate component. + * It represents the limit that can be modified only in database. + * + * Created by + * @author Vova Perebykivskiy + * on 17.12.2015. + */ +public class Limits extends BaseEntity{ + + private String type; + + private Long value; + + + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + + public Long getValue() { + return value; + } + public void setValue(Long value) { + this.value = value; + } +} diff --git a/libreplan-business/src/main/java/org/libreplan/business/email/daos/EmailTemplateDAO.java b/libreplan-business/src/main/java/org/libreplan/business/email/daos/EmailTemplateDAO.java index efebb758a..d7ab0a0d6 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/email/daos/EmailTemplateDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/email/daos/EmailTemplateDAO.java @@ -30,7 +30,7 @@ import java.util.List; * * Created by * @author Vova Perebykivskiy - * on 24.09.15. + * on 24.09.2015. */ @Repository public class EmailTemplateDAO extends GenericDAOHibernate implements IEmailTemplateDAO{ diff --git a/libreplan-business/src/main/java/org/libreplan/business/email/daos/IEmailTemplateDAO.java b/libreplan-business/src/main/java/org/libreplan/business/email/daos/IEmailTemplateDAO.java index ab2fe1635..db40ffae4 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/email/daos/IEmailTemplateDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/email/daos/IEmailTemplateDAO.java @@ -30,7 +30,7 @@ import java.util.List; * * Created by * @author Vova Perebykivskiy - * on 29.09.15. + * on 29.09.2015. */ public interface IEmailTemplateDAO extends IGenericDAO{ diff --git a/libreplan-business/src/main/java/org/libreplan/business/email/entities/EmailTemplate.java b/libreplan-business/src/main/java/org/libreplan/business/email/entities/EmailTemplate.java index a4f6d2c10..6ba95b0dd 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/email/entities/EmailTemplate.java +++ b/libreplan-business/src/main/java/org/libreplan/business/email/entities/EmailTemplate.java @@ -29,7 +29,7 @@ import org.libreplan.business.settings.entities.Language; * * Created by * @author Vova Perebykivskiy - * on 29.09.15. + * on 29.09.2015. */ public class EmailTemplate extends BaseEntity { diff --git a/libreplan-business/src/main/java/org/libreplan/business/users/daos/IUserDAO.java b/libreplan-business/src/main/java/org/libreplan/business/users/daos/IUserDAO.java index a6ed0d376..1d868eb1b 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/users/daos/IUserDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/users/daos/IUserDAO.java @@ -35,6 +35,7 @@ import org.libreplan.business.users.entities.User; * * @author Fernando Bellas Permuy * @author Manuel Rego Casasnovas + * @author Vova Perebykivskiy */ public interface IUserDAO extends IGenericDAO{ @@ -102,4 +103,5 @@ public interface IUserDAO extends IGenericDAO{ List findAll(); + Number getRowCount(); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/users/daos/UserDAO.java b/libreplan-business/src/main/java/org/libreplan/business/users/daos/UserDAO.java index b7cb401db..928d788ca 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/users/daos/UserDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/users/daos/UserDAO.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.List; import org.hibernate.Criteria; +import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.libreplan.business.common.daos.GenericDAOHibernate; import org.libreplan.business.common.exceptions.InstanceNotFoundException; @@ -179,4 +180,8 @@ public class UserDAO extends GenericDAOHibernate return list(User.class); } + @Override + public Number getRowCount() { + return (Number) getSession().createCriteria(User.class).setProjection(Projections.rowCount()).uniqueResult(); + } } diff --git a/libreplan-business/src/main/resources/libreplan-business-spring-config.xml b/libreplan-business/src/main/resources/libreplan-business-spring-config.xml index 4f00767e4..e8f7d79b7 100644 --- a/libreplan-business/src/main/resources/libreplan-business-spring-config.xml +++ b/libreplan-business/src/main/resources/libreplan-business-spring-config.xml @@ -100,6 +100,9 @@ org/libreplan/business/logs/entities/Logs.hbm.xml + + org/libreplan/business/common/entities/Limits.hbm.xml + diff --git a/libreplan-business/src/main/resources/org/libreplan/business/common/entities/Limits.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/common/entities/Limits.hbm.xml new file mode 100644 index 000000000..1d9b3807d --- /dev/null +++ b/libreplan-business/src/main/resources/org/libreplan/business/common/entities/Limits.hbm.xml @@ -0,0 +1,18 @@ + + + + + + + + + 100 + + + + + + + + + \ No newline at end of file diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/ILimitsModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/ILimitsModel.java new file mode 100644 index 000000000..c9a4ef4da --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/ILimitsModel.java @@ -0,0 +1,19 @@ +package org.libreplan.web.common; + +import org.libreplan.business.common.entities.Limits; + +import java.util.List; + +/** + * Contract for {@link Limits} + * + * Created by + * @author Vova Perebykivskiy + * on 17.12.2015. + */ +public interface ILimitsModel { + List getAll(); + + Limits getUsersType(); + Limits getWorkersType(); +} diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/LimitsModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/LimitsModel.java new file mode 100644 index 000000000..b4f3041a2 --- /dev/null +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/LimitsModel.java @@ -0,0 +1,45 @@ +package org.libreplan.web.common; + +import org.libreplan.business.common.daos.ILimitsDAO; +import org.libreplan.business.common.entities.Limits; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * Model for operations related to {@link Limits}. + * + * Created by + * @author Vova Perebykivskiy + * on 17.12.15. + */ + +@Service +@Scope(BeanDefinition.SCOPE_PROTOTYPE) +public class LimitsModel implements ILimitsModel { + + @Autowired + private ILimitsDAO limitsDAO; + + @Override + @Transactional(readOnly = true) + public List getAll() { + return limitsDAO.getAll(); + } + + @Override + @Transactional(readOnly = true) + public Limits getUsersType() { + return limitsDAO.getUsersType(); + } + + @Override + @Transactional(readOnly = true) + public Limits getWorkersType() { + return limitsDAO.getWorkersType(); + } +} diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/email/IEmailTemplateModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/email/IEmailTemplateModel.java index 74740e622..0393363d5 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/email/IEmailTemplateModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/email/IEmailTemplateModel.java @@ -32,7 +32,7 @@ import java.util.List; * * Created by * @author Vova Perebykivskiy - * on 28.09.15. + * on 28.09.2015. */ public interface IEmailTemplateModel { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/IUserModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/IUserModel.java index 86023176e..8d389db45 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/IUserModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/IUserModel.java @@ -34,6 +34,7 @@ import org.libreplan.business.users.entities.UserRole; * * @author Jacobo Aragunde Perez * @author Manuel Rego Casasnovas + * @author Vova Perebykivskiy */ public interface IUserModel { @@ -134,4 +135,5 @@ public interface IUserModel { List getAllProfiles(); + Number getRowCount(); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/UserCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/UserCRUDController.java index da39fc474..1f4851106 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/UserCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/UserCRUDController.java @@ -32,6 +32,7 @@ import java.util.List; import javax.annotation.Resource; import org.apache.commons.logging.LogFactory; +import org.libreplan.business.common.entities.Limits; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.resources.entities.Worker; @@ -40,12 +41,14 @@ import org.libreplan.business.users.entities.User; import org.libreplan.business.users.entities.User.UserAuthenticationType; import org.libreplan.business.users.entities.UserRole; import org.libreplan.web.common.BaseCRUDController; +import org.libreplan.web.common.ILimitsModel; import org.libreplan.web.common.Util; import org.libreplan.web.common.entrypoints.EntryPointsHandler; import org.libreplan.web.common.entrypoints.IURLHandlerRegistry; import org.libreplan.web.resources.worker.IWorkerCRUDControllerEntryPoints; import org.libreplan.web.security.SecurityUtils; import org.libreplan.web.users.bootstrap.PredefinedUsers; +import org.springframework.beans.factory.annotation.Autowired; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.event.Event; @@ -67,6 +70,7 @@ import org.zkoss.zul.api.Groupbox; * @author Jacobo Aragunde Perez * @author Manuel Rego Casasnovas * @author Javier Moran Rua + * @author Vova Perebykivskiy */ @SuppressWarnings("serial") public class UserCRUDController extends BaseCRUDController implements @@ -77,6 +81,10 @@ public class UserCRUDController extends BaseCRUDController implements @Resource private IWorkerCRUDControllerEntryPoints workerCRUD; + @Autowired + private ILimitsModel limitsModel; + + @Autowired private IUserModel userModel; private Textbox passwordBox; @@ -491,4 +499,11 @@ public class UserCRUDController extends BaseCRUDController implements } } + public boolean isCreateButtonDisabled(){ + Limits usersTypeLimit = limitsModel.getUsersType(); + Long usersCount = (Long) userModel.getRowCount(); + if (usersTypeLimit != null) + if ( usersCount >= usersTypeLimit.getValue() ) return true; + return false; + } } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/UserModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/UserModel.java index c9e9bbf4f..a78e8c38c 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/UserModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/UserModel.java @@ -50,6 +50,7 @@ import org.springframework.transaction.annotation.Transactional; * @author Jacobo Aragunde Perez * @author Susana Montes Pedreira * @author Manuel Rego Casasnovas + * @author Vova Perebykivskiy */ @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -275,4 +276,11 @@ public class UserModel implements IUserModel { return profileDAO.listSorted(); } + + @Override + @Transactional(readOnly = true) + public Number getRowCount() { + return userDAO.getRowCount(); + } + } diff --git a/libreplan-webapp/src/main/webapp/users/_listUsers.zul b/libreplan-webapp/src/main/webapp/users/_listUsers.zul index dfc42e57c..c6b887ec0 100644 --- a/libreplan-webapp/src/main/webapp/users/_listUsers.zul +++ b/libreplan-webapp/src/main/webapp/users/_listUsers.zul @@ -35,6 +35,7 @@