From dc3a1fef9328e0c40d86ddf0598534ed9c0abc3a Mon Sep 17 00:00:00 2001
From: pkupczyk <pkupczyk>
Date: Tue, 25 Sep 2012 13:28:10 +0000
Subject: [PATCH] Add progress reporting to Collection and Array predicates and
 data set graph construction

SVN: 26797
---
 .../openbis/generic/server/NewExternalDataDAG.java |  9 +++++++++
 .../authorization/predicate/ArrayPredicate.java    | 14 +++++++++++---
 .../predicate/CollectionPredicate.java             | 13 ++++++++++---
 3 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/NewExternalDataDAG.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/NewExternalDataDAG.java
index 577423a95c4..82082591dde 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/NewExternalDataDAG.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/NewExternalDataDAG.java
@@ -21,6 +21,8 @@ import java.util.HashMap;
 import java.util.List;
 
 import ch.systemsx.cisd.common.collections.DAG;
+import ch.systemsx.cisd.common.conversation.context.ServiceConversationsThreadContext;
+import ch.systemsx.cisd.common.conversation.progress.IServiceConversationProgressListener;
 import ch.systemsx.cisd.openbis.generic.shared.dto.NewContainerDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData;
 
@@ -78,6 +80,11 @@ public class NewExternalDataDAG
      */
     private void constructGraph()
     {
+        IServiceConversationProgressListener listener =
+                ServiceConversationsThreadContext.getProgressListener();
+
+        int index = 0;
+
         for (NewExternalData dataSet : dataSetRegistrations)
         {
             String dataSetCode = dataSet.getCode();
@@ -99,6 +106,8 @@ public class NewExternalDataDAG
             }
 
             dependencyGraph.put(dataSet.getCode(), dependents);
+
+            listener.update("constructGraph", dataSetRegistrations.size(), ++index);
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/ArrayPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/ArrayPredicate.java
index cb264d749d4..70350e9c31f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/ArrayPredicate.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/ArrayPredicate.java
@@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.generic.server.authorization.predicate;
 
 import java.util.List;
 
+import ch.systemsx.cisd.common.conversation.context.ServiceConversationsThreadContext;
+import ch.systemsx.cisd.common.conversation.progress.IServiceConversationProgressListener;
 import ch.systemsx.cisd.common.exceptions.Status;
 import ch.systemsx.cisd.common.exceptions.StatusFlag;
 import ch.systemsx.cisd.openbis.generic.server.authorization.IAuthorizationDataProvider;
@@ -31,6 +33,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
  */
 public final class ArrayPredicate<T> extends AbstractPredicate<T[]>
 {
+
     private final IPredicate<T> predicate;
 
     public ArrayPredicate(final IPredicate<T> predicate)
@@ -65,10 +68,14 @@ public final class ArrayPredicate<T> extends AbstractPredicate<T[]>
     }
 
     @Override
-    protected
-    final Status doEvaluation(final PersonPE person, final List<RoleWithIdentifier> allowedRoles,
-            final T[] value)
+    protected final Status doEvaluation(final PersonPE person,
+            final List<RoleWithIdentifier> allowedRoles, final T[] value)
     {
+        IServiceConversationProgressListener listener =
+                ServiceConversationsThreadContext.getProgressListener();
+
+        int index = 0;
+
         for (final T item : value)
         {
             final Status status = itemEvaluate(person, allowedRoles, item);
@@ -76,6 +83,7 @@ public final class ArrayPredicate<T> extends AbstractPredicate<T[]>
             {
                 return status;
             }
+            listener.update("authorize", value.length, ++index);
         }
         return Status.OK;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/CollectionPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/CollectionPredicate.java
index 17535d26475..ebef9212f1d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/CollectionPredicate.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/CollectionPredicate.java
@@ -19,6 +19,8 @@ package ch.systemsx.cisd.openbis.generic.server.authorization.predicate;
 import java.util.Collection;
 import java.util.List;
 
+import ch.systemsx.cisd.common.conversation.context.ServiceConversationsThreadContext;
+import ch.systemsx.cisd.common.conversation.progress.IServiceConversationProgressListener;
 import ch.systemsx.cisd.common.exceptions.Status;
 import ch.systemsx.cisd.common.exceptions.StatusFlag;
 import ch.systemsx.cisd.openbis.generic.server.authorization.IAuthorizationDataProvider;
@@ -56,10 +58,14 @@ public final class CollectionPredicate<T> extends AbstractPredicate<Collection<T
     }
 
     @Override
-    protected
-    final Status doEvaluation(final PersonPE person, final List<RoleWithIdentifier> allowedRoles,
-            final Collection<T> value)
+    protected final Status doEvaluation(final PersonPE person,
+            final List<RoleWithIdentifier> allowedRoles, final Collection<T> value)
     {
+        IServiceConversationProgressListener listener =
+                ServiceConversationsThreadContext.getProgressListener();
+
+        int index = 0;
+
         for (final T item : value)
         {
             final Status status = itemEvaluate(person, allowedRoles, item);
@@ -67,6 +73,7 @@ public final class CollectionPredicate<T> extends AbstractPredicate<Collection<T
             {
                 return status;
             }
+            listener.update("authorize", value.size(), ++index);
         }
         return Status.OK;
     }
-- 
GitLab