You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by md...@apache.org on 2013/07/18 11:19:20 UTC

svn commit: r1504397 - in /syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core: propagation/impl/DefaultPropagationHandler.java rest/controller/RoleController.java rest/controller/UserController.java

Author: mdisabatino
Date: Thu Jul 18 09:19:19 2013
New Revision: 1504397

URL: http://svn.apache.org/r1504397
Log:
SYNCOPE-402 Fix RoleController, add propagation status to assigned resource when primary resource failed.

Modified:
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/propagation/impl/DefaultPropagationHandler.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java
    syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/propagation/impl/DefaultPropagationHandler.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/propagation/impl/DefaultPropagationHandler.java?rev=1504397&r1=1504396&r2=1504397&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/propagation/impl/DefaultPropagationHandler.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/propagation/impl/DefaultPropagationHandler.java Thu Jul 18 09:19:19 2013
@@ -22,11 +22,16 @@ import java.util.List;
 import org.apache.syncope.common.to.PropagationStatusTO;
 import org.apache.syncope.common.types.PropagationTaskExecStatus;
 import org.apache.syncope.core.connid.ConnObjectUtil;
+import org.apache.syncope.core.persistence.beans.PropagationTask;
 import org.apache.syncope.core.propagation.PropagationHandler;
 import org.identityconnectors.framework.common.objects.ConnectorObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DefaultPropagationHandler implements PropagationHandler {
 
+    protected static final Logger LOG = LoggerFactory.getLogger(DefaultPropagationHandler.class);
+
     private final ConnObjectUtil connObjectUtil;
 
     private final List<PropagationStatusTO> propagations;
@@ -57,4 +62,32 @@ public class DefaultPropagationHandler i
 
         propagations.add(propagation);
     }
+
+    public void completeWhenPrimaryResourceErrored(
+            final List<PropagationStatusTO> propagations, final List<PropagationTask> tasks) {
+
+        final String failedResource = propagations.get(propagations.size() - 1).getResource();
+
+        LOG.debug("Propagation error: {} primary resource failed to propagate", failedResource);
+
+        for (PropagationTask propagationTask : tasks) {
+            if (!containsPropagationStatusTO(propagationTask.getResource().getName(), propagations)) {
+                final PropagationStatusTO propagationStatusTO = new PropagationStatusTO();
+                propagationStatusTO.setResource(propagationTask.getResource().getName());
+                propagationStatusTO.setStatus(PropagationTaskExecStatus.FAILURE);
+                propagationStatusTO.setExecutionMessage(
+                        "Propagation error: " + failedResource + " primary resource failed to propagate.");
+                propagations.add(propagationStatusTO);
+            }
+        }
+    }
+
+    private boolean containsPropagationStatusTO(final String resource, final List<PropagationStatusTO> propagations) {
+        for (PropagationStatusTO status : propagations) {
+            if (resource.equals(status.getResource())) {
+                return true;
+            }
+        }
+        return false;
+    }
 }

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java?rev=1504397&r1=1504396&r2=1504397&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/RoleController.java Thu Jul 18 09:19:19 2013
@@ -42,6 +42,7 @@ import org.apache.syncope.core.persisten
 import org.apache.syncope.core.persistence.dao.NotFoundException;
 import org.apache.syncope.core.persistence.dao.RoleDAO;
 import org.apache.syncope.core.persistence.dao.UserDAO;
+import org.apache.syncope.core.propagation.PropagationException;
 import org.apache.syncope.core.propagation.PropagationTaskExecutor;
 import org.apache.syncope.core.propagation.impl.DefaultPropagationHandler;
 import org.apache.syncope.core.propagation.impl.PropagationManager;
@@ -281,7 +282,13 @@ public class RoleController {
         List<PropagationTask> tasks = propagationManager.getRoleCreateTaskIds(created, roleTO.getVirtualAttributes());
 
         final List<PropagationStatusTO> propagations = new ArrayList<PropagationStatusTO>();
-        taskExecutor.execute(tasks, new DefaultPropagationHandler(connObjectUtil, propagations));
+        final DefaultPropagationHandler propHanlder = new DefaultPropagationHandler(connObjectUtil, propagations);
+        try {
+            taskExecutor.execute(tasks, new DefaultPropagationHandler(connObjectUtil, propagations));
+        } catch (PropagationException e) {
+            LOG.error("Error propagation primary resource", e);
+            propHanlder.completeWhenPrimaryResourceErrored(propagations, tasks);
+        }
 
         final RoleTO savedTO = binder.getRoleTO(created.getResult());
         savedTO.setPropagationStatusTOs(propagations);
@@ -308,8 +315,13 @@ public class RoleController {
                 roleMod.getVirtualAttributesToBeRemoved(), roleMod.getVirtualAttributesToBeUpdated());
 
         final List<PropagationStatusTO> propagations = new ArrayList<PropagationStatusTO>();
-        taskExecutor.execute(tasks, new DefaultPropagationHandler(connObjectUtil, propagations));
-
+        final DefaultPropagationHandler propHanlder = new DefaultPropagationHandler(connObjectUtil, propagations);
+        try {
+            taskExecutor.execute(tasks, new DefaultPropagationHandler(connObjectUtil, propagations));
+        } catch (PropagationException e) {
+            LOG.error("Error propagation primary resource", e);
+            propHanlder.completeWhenPrimaryResourceErrored(propagations, tasks);
+        }
         final RoleTO updatedTO = binder.getRoleTO(updated.getResult());
         updatedTO.setPropagationStatusTOs(propagations);
 
@@ -340,7 +352,13 @@ public class RoleController {
         roleTO.setId(roleId);
 
         final List<PropagationStatusTO> propagations = new ArrayList<PropagationStatusTO>();
-        taskExecutor.execute(tasks, new DefaultPropagationHandler(connObjectUtil, propagations));
+        final DefaultPropagationHandler propHanlder = new DefaultPropagationHandler(connObjectUtil, propagations);
+        try {
+            taskExecutor.execute(tasks, new DefaultPropagationHandler(connObjectUtil, propagations));
+        } catch (PropagationException e) {
+            LOG.error("Error propagation primary resource", e);
+            propHanlder.completeWhenPrimaryResourceErrored(propagations, tasks);
+        }
         roleTO.setPropagationStatusTOs(propagations);
 
         rwfAdapter.delete(roleId);

Modified: syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java?rev=1504397&r1=1504396&r2=1504397&view=diff
==============================================================================
--- syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java (original)
+++ syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/rest/controller/UserController.java Thu Jul 18 09:19:19 2013
@@ -41,7 +41,6 @@ import org.apache.syncope.common.types.A
 import org.apache.syncope.common.types.AuditElements.Category;
 import org.apache.syncope.common.types.AuditElements.Result;
 import org.apache.syncope.common.types.AuditElements.UserSubCategory;
-import org.apache.syncope.common.types.PropagationTaskExecStatus;
 import org.apache.syncope.common.types.ResourceOperation;
 import org.apache.syncope.core.audit.AuditManager;
 import org.apache.syncope.core.connid.ConnObjectUtil;
@@ -302,11 +301,12 @@ public class UserController {
                 created, userTO.getPassword(), userTO.getVirtualAttributes());
 
         final List<PropagationStatusTO> propagations = new ArrayList<PropagationStatusTO>();
+        final DefaultPropagationHandler propHanlder = new DefaultPropagationHandler(connObjectUtil, propagations);
         try {
-            taskExecutor.execute(tasks, new DefaultPropagationHandler(connObjectUtil, propagations));
+            taskExecutor.execute(tasks, propHanlder);
         } catch (PropagationException e) {
             LOG.error("Error propagation primary resource", e);
-            completeWhenErroredPrimaryPropagation(propagations, tasks);
+            propHanlder.completeWhenPrimaryResourceErrored(propagations, tasks);
         }
 
         notificationManager.createTasks(created.getResult().getKey(), created.getPerformedTasks());
@@ -385,11 +385,12 @@ public class UserController {
         }
 
         final List<PropagationStatusTO> propagations = new ArrayList<PropagationStatusTO>();
+        final DefaultPropagationHandler propHanlder = new DefaultPropagationHandler(connObjectUtil, propagations);
         try {
-            taskExecutor.execute(tasks, new DefaultPropagationHandler(connObjectUtil, propagations));
+            taskExecutor.execute(tasks, propHanlder);
         } catch (PropagationException e) {
             LOG.error("Error propagation primary resource", e);
-            completeWhenErroredPrimaryPropagation(propagations, tasks);
+            propHanlder.completeWhenPrimaryResourceErrored(propagations, tasks);
         }
 
         // 3. create notification tasks
@@ -711,12 +712,12 @@ public class UserController {
         userTO.setId(userId);
 
         final List<PropagationStatusTO> propagations = new ArrayList<PropagationStatusTO>();
-
+        final DefaultPropagationHandler propHanlder = new DefaultPropagationHandler(connObjectUtil, propagations);
         try {
             taskExecutor.execute(tasks, new DefaultPropagationHandler(connObjectUtil, propagations));
         } catch (PropagationException e) {
             LOG.error("Error propagation primary resource", e);
-            completeWhenErroredPrimaryPropagation(propagations, tasks);
+            propHanlder.completeWhenPrimaryResourceErrored(propagations, tasks);
         }
 
         userTO.setPropagationStatusTOs(propagations);
@@ -777,32 +778,4 @@ public class UserController {
 
         return res;
     }
-
-    private void completeWhenErroredPrimaryPropagation(
-            final List<PropagationStatusTO> propagations, final List<PropagationTask> tasks) {
-        
-        final String failedResource = propagations.get(propagations.size() - 1).getResource();
-        
-        LOG.debug("Propagation error: {} primary resource failed to propagate", failedResource);
-
-        for (PropagationTask propagationTask : tasks) {
-            if (!containsPropagationStatusTO(propagationTask.getResource().getName(), propagations)) {
-                final PropagationStatusTO propagationStatusTO = new PropagationStatusTO();
-                propagationStatusTO.setResource(propagationTask.getResource().getName());
-                propagationStatusTO.setStatus(PropagationTaskExecStatus.FAILURE);
-                propagationStatusTO.setExecutionMessage(
-                        "Propagation error: " + failedResource + " primary resource failed to propagate.");
-                propagations.add(propagationStatusTO);
-            }
-        }
-    }
-
-    private boolean containsPropagationStatusTO(final String resource, final List<PropagationStatusTO> propagations) {
-        for (PropagationStatusTO status : propagations) {
-            if (resource.equals(status.getResource())) {
-                return true;
-            }
-        }
-        return false;
-    }
 }