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 @@