hs.hsadmin/hsarback/src/de/hsadmin/mods/email/EMailAliasModuleImpl.java

67 lines
2.7 KiB
Java
Raw Normal View History

2010-10-05 21:42:07 +02:00
package de.hsadmin.mods.email;
import java.util.List;
2011-05-20 17:25:11 +02:00
import javax.persistence.EntityManager;
import javax.persistence.Query;
2010-10-05 21:42:07 +02:00
import de.hsadmin.core.model.AbstractEntity;
2011-05-20 16:25:45 +02:00
import de.hsadmin.core.model.AbstractModuleImpl;
import de.hsadmin.core.model.AuthorisationException;
2010-10-05 21:42:07 +02:00
import de.hsadmin.core.model.HSAdminException;
import de.hsadmin.core.model.Transaction;
2011-05-20 17:25:11 +02:00
import de.hsadmin.mods.pac.Pac;
import de.hsadmin.mods.user.UnixUser;
2010-10-05 21:42:07 +02:00
public class EMailAliasModuleImpl extends AbstractModuleImpl {
2013-04-29 20:01:09 +02:00
private static final int UNIXUSERS_PER_MULTI_OPTION = 250;
2010-10-05 21:42:07 +02:00
@Override
public List<AbstractEntity> search(Class<? extends AbstractEntity> entityClass,
String condition, String orderBy) throws HSAdminException {
if (orderBy == null || orderBy.length() == 0) {
2010-12-16 18:24:21 +01:00
orderBy = "ORDER BY obj.name ASC";
2010-10-05 21:42:07 +02:00
}
return super.search(entityClass, condition, orderBy);
}
2011-05-20 16:12:39 +02:00
@Override
public AbstractEntity add(AbstractEntity newEntity) throws HSAdminException {
Transaction transaction = getTransaction();
UnixUser loginUser = transaction.getLoginUser();
2011-05-20 16:12:39 +02:00
EMailAlias alias = (EMailAlias) newEntity;
String name = alias.getName();
2011-05-20 17:25:11 +02:00
if (name.length() > 5 && (name.charAt(5) != '-') || name.length() == 6) {
throw new AuthorisationException(loginUser, "add", newEntity);
2011-05-20 16:12:39 +02:00
}
2011-05-20 17:25:11 +02:00
EntityManager em = getTransaction().getEntityManager();
Query qPac = em.createQuery("SELECT obj FROM Pacs obj WHERE obj.name = :pacName");
qPac.setParameter("pacName", name.substring(0, 5));
Object singleResult = qPac.getSingleResult();
Pac pac = (Pac) singleResult;
if (pac == null || !pac.isReadAllowedFor(loginUser)) {
throw new AuthorisationException(loginUser, "add", newEntity);
2011-05-20 16:12:39 +02:00
}
2011-10-28 15:28:19 +02:00
if (!name.startsWith(pac.getName())) {
throw new AuthorisationException(loginUser, "add", newEntity);
}
2013-04-29 20:01:09 +02:00
//TODO: Needs better implementation
String pacType = pac.getBasepac().getName();
if (!pacType.equals(Pac.PAC_WEB) && !pacType.equals(Pac.PAC_DW) && !pacType.equals(Pac.PAC_SW)) {
throw new HSAdminException("not allowed for this packet type");
}
//TODO: Needs better implementation
Query qEmailAliases = em.createQuery("SELECT obj FROM EMailAliases obj WHERE obj.pac.id = :pacId");
qEmailAliases.setParameter("pacId", pac.getId());
Query qEmailAddresses = em.createQuery("SELECT obj FROM EMailAddresses obj WHERE obj.domain.user.pac.id = :pacId");
qEmailAddresses.setParameter("pacId", pac.getId());
if (qEmailAliases.getResultList().size() + qEmailAddresses.getResultList().size() >= UNIXUSERS_PER_MULTI_OPTION * pac.getQuantityByComponentName("MULTI")) {
throw new HSAdminException("included email addresses/aliases exceeded");
}
alias.setPac(pac);
2011-05-20 16:12:39 +02:00
return super.add(newEntity);
}
2010-10-05 21:42:07 +02:00
}