You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2012/04/04 13:34:15 UTC

svn commit: r1309335 - in /incubator/syncope/trunk/core/src: main/java/org/syncope/core/notification/ main/java/org/syncope/core/persistence/dao/ main/java/org/syncope/core/persistence/dao/impl/ main/java/org/syncope/core/scheduling/ test/java/org/sync...

Author: fmartelli
Date: Wed Apr  4 11:34:15 2012
New Revision: 1309335

URL: http://svn.apache.org/viewvc?rev=1309335&view=rev
Log:
SYNCOPE-52 #comment NotificationManager used to execute user search without admin role entitlements

Modified:
    incubator/syncope/trunk/core/src/main/java/org/syncope/core/notification/NotificationManager.java
    incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/UserSearchDAO.java
    incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/impl/UserSearchDAOImpl.java
    incubator/syncope/trunk/core/src/main/java/org/syncope/core/scheduling/NotificationJob.java
    incubator/syncope/trunk/core/src/test/java/org/syncope/core/persistence/dao/UserSearchTest.java

Modified: incubator/syncope/trunk/core/src/main/java/org/syncope/core/notification/NotificationManager.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/syncope/core/notification/NotificationManager.java?rev=1309335&r1=1309334&r2=1309335&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/syncope/core/notification/NotificationManager.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/syncope/core/notification/NotificationManager.java Wed Apr  4 11:34:15 2012
@@ -41,12 +41,15 @@ import org.syncope.core.persistence.bean
 import org.syncope.core.persistence.beans.user.UDerAttr;
 import org.syncope.core.persistence.beans.user.UVirAttr;
 import org.syncope.core.persistence.dao.ConfDAO;
+import org.syncope.core.persistence.dao.EntitlementDAO;
 import org.syncope.core.persistence.dao.NotificationDAO;
 import org.syncope.core.persistence.dao.TaskDAO;
+import org.syncope.core.persistence.dao.TaskExecDAO;
 import org.syncope.core.persistence.dao.UserDAO;
 import org.syncope.core.persistence.dao.UserSearchDAO;
 import org.syncope.core.scheduling.NotificationJob;
 import org.syncope.core.util.ConnObjectUtil;
+import org.syncope.core.util.EntitlementUtil;
 import org.syncope.core.workflow.WorkflowResult;
 import org.syncope.types.IntMappingType;
 
@@ -94,6 +97,12 @@ public class NotificationManager {
     private TaskDAO taskDAO;
 
     /**
+     * TaskExec DAO.
+     */
+    @Autowired
+    private TaskExecDAO taskExecDAO;
+
+    /**
      * Velocity template engine.
      */
     @Autowired
@@ -103,7 +112,11 @@ public class NotificationManager {
     private NotificationJob notificationJob;
 
     @Autowired
+    private EntitlementDAO entitlementDAO;
+
+    @Autowired
     private ConnObjectUtil connObjectUtil;
+
     /**
      * Create a notification task.
      *
@@ -115,12 +128,10 @@ public class NotificationManager {
     private NotificationTask getNotificationTask(final Notification notification, final SyncopeUser user) {
 
         connObjectUtil.retrieveVirAttrValues(user);
-        
-        final IntMappingType recipientAttrType = notification.getRecipientAttrType();
-        final String recipientAttrName = notification.getRecipientAttrName();
 
         final List<SyncopeUser> recipients = new ArrayList<SyncopeUser>();
-        recipients.addAll(searchDAO.search(notification.getRecipients()));
+        recipients.addAll(
+                searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()), notification.getRecipients()));
 
         if (notification.isSelfAsRecipient()) {
             recipients.add(user);
@@ -129,13 +140,14 @@ public class NotificationManager {
         Set<String> recipientEmails = new HashSet<String>();
 
         for (SyncopeUser recipient : recipients) {
-            
+
             connObjectUtil.retrieveVirAttrValues(recipient);
 
-            String email = getRecipientEmail(recipientAttrType, recipientAttrName, user);
+            String email = getRecipientEmail(
+                    notification.getRecipientAttrType(), notification.getRecipientAttrName(), recipient);
 
             if (email == null) {
-                LOG.error("{} cannot be notified. No {} attribute present", recipient, recipientAttrName);
+                LOG.warn("{} cannot be notified: {} not found", recipient, notification.getRecipientAttrName());
             } else {
                 recipientEmails.add(email);
             }
@@ -236,4 +248,16 @@ public class NotificationManager {
 
         return email;
     }
+
+    /**
+     * Execute TaskExec persist within a transaction.
+     *
+     * @param execution task execution.
+     * @return merged task execution.
+     */
+    public TaskExec storeExecution(TaskExec execution) {
+        NotificationTask task = taskDAO.find(execution.getTask().getId());
+        task.addExec(execution);
+        return taskExecDAO.save(execution);
+    }
 }

Modified: incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/UserSearchDAO.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/UserSearchDAO.java?rev=1309335&r1=1309334&r2=1309335&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/UserSearchDAO.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/UserSearchDAO.java Wed Apr  4 11:34:15 2012
@@ -33,12 +33,6 @@ public interface UserSearchDAO extends D
     int count(Set<Long> adminRoles, NodeCond searchCondition);
 
     /**
-     * @param searchCondition the search condition
-     * @return the list of users matchin the given search condition
-     */
-    List<SyncopeUser> search(NodeCond searchCondition);
-
-    /**
      * @param adminRoles the set of admin roles owned by the caller
      * @param searchCondition the search condition
      * @return the list of users matching the given search condition
@@ -56,6 +50,7 @@ public interface UserSearchDAO extends D
 
     /**
      * Verify if user matched the given search condition.
+     *
      * @param user to be checked
      * @param searchCondition to be verified
      * @return true if user matched searchCondition

Modified: incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/impl/UserSearchDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/impl/UserSearchDAOImpl.java?rev=1309335&r1=1309334&r2=1309335&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/impl/UserSearchDAOImpl.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/dao/impl/UserSearchDAOImpl.java Wed Apr  4 11:34:15 2012
@@ -20,12 +20,10 @@ package org.syncope.core.persistence.dao
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Random;
 import java.util.Set;
 import javax.persistence.Query;
 import javax.persistence.TemporalType;
@@ -62,28 +60,29 @@ public class UserSearchDAOImpl extends A
 
     private String getAdminRolesFilter(final Set<Long> adminRoles) {
         final StringBuilder adminRolesFilter = new StringBuilder();
-        if (adminRoles == null || adminRoles.isEmpty()) {
-            adminRolesFilter.append("SELECT syncopeUser_id AS user_id ").append("FROM Membership");
-        } else {
-            adminRolesFilter.append("SELECT syncopeUser_id AS user_id ").append("FROM Membership M1 ").append(
-                    "WHERE syncopeRole_id IN (");
-            adminRolesFilter.append("SELECT syncopeRole_id ").append("FROM Membership M2 ").append(
-                    "WHERE M2.syncopeUser_id=M1.syncopeUser_id ").append("AND syncopeRole_id NOT IN (");
-            adminRolesFilter.append("SELECT id AS syncopeRole_id FROM SyncopeRole");
-            boolean firstRole = true;
-            for (Long adminRoleId : adminRoles) {
-                if (firstRole) {
-                    adminRolesFilter.append(" WHERE");
-                    firstRole = false;
-                } else {
-                    adminRolesFilter.append(" OR");
-                }
 
-                adminRolesFilter.append(" id=").append(adminRoleId);
+        adminRolesFilter.append("SELECT syncopeUser_id AS user_id ").append("FROM Membership M1 ").
+                append("WHERE syncopeRole_id IN (");
+
+        adminRolesFilter.append("SELECT syncopeRole_id ").append("FROM Membership M2 ").
+                append("WHERE M2.syncopeUser_id=M1.syncopeUser_id ").append("AND syncopeRole_id NOT IN (");
+
+        adminRolesFilter.append("SELECT id AS syncopeRole_id FROM SyncopeRole");
+
+        boolean firstRole = true;
+
+        for (Long adminRoleId : adminRoles) {
+            if (firstRole) {
+                adminRolesFilter.append(" WHERE");
+                firstRole = false;
+            } else {
+                adminRolesFilter.append(" OR");
             }
-            adminRolesFilter.append("))");
+            adminRolesFilter.append(" id=").append(adminRoleId);
         }
 
+        adminRolesFilter.append("))");
+
         return adminRolesFilter.toString();
     }
 
@@ -116,30 +115,27 @@ public class UserSearchDAOImpl extends A
     }
 
     @Override
-    public List<SyncopeUser> search(final NodeCond searchCondition) {
-        return search(null, searchCondition, -1, -1);
-    }
-
-    @Override
     public List<SyncopeUser> search(final Set<Long> adminRoles, final NodeCond searchCondition) {
-
         return search(adminRoles, searchCondition, -1, -1);
     }
 
     @Override
-    public List<SyncopeUser> search(final Set<Long> adminRoles, final NodeCond searchCondition, final int page,
-            final int itemsPerPage) {
+    public List<SyncopeUser> search(
+            final Set<Long> adminRoles, final NodeCond searchCondition, final int page, final int itemsPerPage) {
 
         List<SyncopeUser> result = Collections.EMPTY_LIST;
 
-        LOG.debug("Search condition:\n{}", searchCondition);
-        if (!searchCondition.checkValidity()) {
-            LOG.error("Invalid search condition:\n{}", searchCondition);
-        } else {
-            try {
-                result = doSearch(adminRoles, searchCondition, page, itemsPerPage);
-            } catch (Throwable t) {
-                LOG.error("While searching users", t);
+        if (adminRoles != null && !adminRoles.isEmpty()) {
+            LOG.debug("Search condition:\n{}", searchCondition);
+
+            if (!searchCondition.checkValidity()) {
+                LOG.error("Invalid search condition:\n{}", searchCondition);
+            } else {
+                try {
+                    result = doSearch(adminRoles, searchCondition, page, itemsPerPage);
+                } catch (Throwable t) {
+                    LOG.error("While searching users", t);
+                }
             }
         }
 
@@ -196,8 +192,8 @@ public class UserSearchDAOImpl extends A
         }
     }
 
-    private List<SyncopeUser> doSearch(final Set<Long> adminRoles, final NodeCond nodeCond, final int page,
-            final int itemsPerPage) {
+    private List<SyncopeUser> doSearch(
+            final Set<Long> adminRoles, final NodeCond nodeCond, final int page, final int itemsPerPage) {
 
         List<Object> parameters = Collections.synchronizedList(new ArrayList<Object>());
 

Modified: incubator/syncope/trunk/core/src/main/java/org/syncope/core/scheduling/NotificationJob.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/syncope/core/scheduling/NotificationJob.java?rev=1309335&r1=1309334&r2=1309335&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/syncope/core/scheduling/NotificationJob.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/syncope/core/scheduling/NotificationJob.java Wed Apr  4 11:34:15 2012
@@ -32,11 +32,11 @@ import org.springframework.beans.factory
 import org.springframework.mail.javamail.JavaMailSenderImpl;
 import org.springframework.mail.javamail.MimeMessageHelper;
 import org.syncope.core.audit.AuditManager;
+import org.syncope.core.notification.NotificationManager;
 import org.syncope.core.persistence.beans.NotificationTask;
 import org.syncope.core.persistence.beans.TaskExec;
 import org.syncope.core.persistence.dao.ConfDAO;
 import org.syncope.core.persistence.dao.TaskDAO;
-import org.syncope.core.persistence.dao.TaskExecDAO;
 import org.syncope.types.AuditElements.Category;
 import org.syncope.types.AuditElements.NotificationSubCategory;
 import org.syncope.types.AuditElements.Result;
@@ -53,7 +53,6 @@ public class NotificationJob implements 
 
         SENT,
         NOT_SENT
-
     }
 
     /**
@@ -64,17 +63,14 @@ public class NotificationJob implements 
     @Autowired
     private AuditManager auditManager;
 
-    /**
-     * Task DAO.
-     */
     @Autowired
-    private TaskDAO taskDAO;
+    private NotificationManager notificationManager;
 
     /**
-     * Task execution DAO.
+     * Task DAO.
      */
     @Autowired
-    private TaskExecDAO taskExecDAO;
+    private TaskDAO taskDAO;
 
     /**
      * Configuration DAO.
@@ -204,19 +200,19 @@ public class NotificationJob implements 
         }
 
         if (hasToBeRegistered(execution)) {
-            execution = taskExecDAO.save(execution);
+            execution = notificationManager.storeExecution(execution);
         }
 
         return execution;
     }
 
     @Override
-    public void execute(final JobExecutionContext context) throws JobExecutionException {
+    public void execute(final JobExecutionContext context)
+            throws JobExecutionException {
 
         LOG.debug("Waking up...");
 
         for (NotificationTask task : taskDAO.findWithoutExecs(NotificationTask.class)) {
-
             executeSingle(task);
         }
 

Modified: incubator/syncope/trunk/core/src/test/java/org/syncope/core/persistence/dao/UserSearchTest.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/test/java/org/syncope/core/persistence/dao/UserSearchTest.java?rev=1309335&r1=1309334&r2=1309335&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/test/java/org/syncope/core/persistence/dao/UserSearchTest.java (original)
+++ incubator/syncope/trunk/core/src/test/java/org/syncope/core/persistence/dao/UserSearchTest.java Wed Apr  4 11:34:15 2012
@@ -80,7 +80,8 @@ public class UserSearchTest {
         loginDateCond.setSchema("loginDate");
         loginDateCond.setExpression("2009-05-26");
 
-        NodeCond subCond = NodeCond.getAndCond(NodeCond.getLeafCond(fullnameLeafCond), NodeCond.getLeafCond(membershipCond));
+        NodeCond subCond = NodeCond.getAndCond(NodeCond.getLeafCond(fullnameLeafCond), NodeCond.getLeafCond(
+                membershipCond));
 
         assertTrue(subCond.checkValidity());
 
@@ -142,7 +143,8 @@ public class UserSearchTest {
         loginDateCond.setSchema("loginDate");
         loginDateCond.setExpression("2009-05-26");
 
-        NodeCond subCond = NodeCond.getAndCond(NodeCond.getLeafCond(fullnameLeafCond), NodeCond.getLeafCond(membershipCond));
+        NodeCond subCond = NodeCond.getAndCond(NodeCond.getLeafCond(fullnameLeafCond), NodeCond.getLeafCond(
+                membershipCond));
 
         assertTrue(subCond.checkValidity());
 
@@ -164,14 +166,16 @@ public class UserSearchTest {
         MembershipCond membershipCond = new MembershipCond();
         membershipCond.setRoleId(1L);
 
-        List<SyncopeUser> users = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()), NodeCond.getLeafCond(membershipCond));
+        List<SyncopeUser> users = searchDAO.search(
+                EntitlementUtil.getRoleIds(entitlementDAO.findAll()), NodeCond.getLeafCond(membershipCond));
         assertNotNull(users);
         assertEquals(2, users.size());
 
         membershipCond = new MembershipCond();
         membershipCond.setRoleId(5L);
 
-        users = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()), NodeCond.getNotLeafCond(membershipCond));
+        users = searchDAO.search(
+                EntitlementUtil.getRoleIds(entitlementDAO.findAll()), NodeCond.getNotLeafCond(membershipCond));
         assertNotNull(users);
         assertEquals(4, users.size());
     }
@@ -181,14 +185,16 @@ public class UserSearchTest {
         AttributeCond coolLeafCond = new AttributeCond(AttributeCond.Type.ISNULL);
         coolLeafCond.setSchema("cool");
 
-        List<SyncopeUser> users = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()), NodeCond.getLeafCond(coolLeafCond));
+        List<SyncopeUser> users = searchDAO.search(
+                EntitlementUtil.getRoleIds(entitlementDAO.findAll()), NodeCond.getLeafCond(coolLeafCond));
         assertNotNull(users);
         assertEquals(3, users.size());
 
         coolLeafCond = new AttributeCond(AttributeCond.Type.ISNOTNULL);
         coolLeafCond.setSchema("cool");
 
-        users = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()), NodeCond.getLeafCond(coolLeafCond));
+        users = searchDAO.search(
+                EntitlementUtil.getRoleIds(entitlementDAO.findAll()), NodeCond.getLeafCond(coolLeafCond));
         assertNotNull(users);
         assertEquals(1, users.size());
     }
@@ -205,8 +211,8 @@ public class UserSearchTest {
 
         assertTrue(searchCondition.checkValidity());
 
-        List<SyncopeUser> users = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()),
-                searchCondition);
+        List<SyncopeUser> users = searchDAO.search(
+                EntitlementUtil.getRoleIds(entitlementDAO.findAll()), searchCondition);
 
         assertNotNull(users);
         assertEquals(1, users.size());
@@ -222,7 +228,8 @@ public class UserSearchTest {
         idRightCond.setSchema("id");
         idRightCond.setExpression("2");
 
-        final NodeCond searchCondition = NodeCond.getOrCond(NodeCond.getLeafCond(usernameLeafCond), NodeCond.getLeafCond(idRightCond));
+        final NodeCond searchCondition = NodeCond.getOrCond(NodeCond.getLeafCond(usernameLeafCond),
+                NodeCond.getLeafCond(idRightCond));
 
         final List<SyncopeUser> matchingUsers = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()),
                 searchCondition);
@@ -243,10 +250,11 @@ public class UserSearchTest {
         idRightCond.setSchema("fullname");
         idRightCond.setExpression("fabio.mart%");
 
-        final NodeCond searchCondition = NodeCond.getOrCond(NodeCond.getLeafCond(usernameLeafCond), NodeCond.getLeafCond(idRightCond));
+        final NodeCond searchCondition = NodeCond.getOrCond(NodeCond.getLeafCond(usernameLeafCond),
+                NodeCond.getLeafCond(idRightCond));
 
-        final List<SyncopeUser> matchingUsers = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()),
-                searchCondition);
+        final List<SyncopeUser> matchingUsers =
+                searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()), searchCondition);
 
         assertNotNull(matchingUsers);
         assertEquals(2, matchingUsers.size());
@@ -261,8 +269,8 @@ public class UserSearchTest {
         NodeCond searchCondition = NodeCond.getLeafCond(idLeafCond);
         assertTrue(searchCondition.checkValidity());
 
-        List<SyncopeUser> matchingUsers = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()),
-                searchCondition);
+        List<SyncopeUser> matchingUsers =
+                searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()), searchCondition);
 
         assertNotNull(matchingUsers);
         assertEquals(1, matchingUsers.size());
@@ -290,7 +298,8 @@ public class UserSearchTest {
         final ResourceCond ws1 = new ResourceCond();
         ws1.setResourceName("ws-target-resource-list-mappings-1");
 
-        final NodeCond searchCondition = NodeCond.getAndCond(NodeCond.getNotLeafCond(ws2), NodeCond.getNotLeafCond(ws1));
+        final NodeCond searchCondition = 
+                NodeCond.getAndCond(NodeCond.getNotLeafCond(ws2), NodeCond.getNotLeafCond(ws1));
         assertTrue(searchCondition.checkValidity());
 
         final List<SyncopeUser> users = searchDAO.search(EntitlementUtil.getRoleIds(entitlementDAO.findAll()),