[jboss-cvs] JBossAS SVN: r97219 - in projects/kernel/trunk/dependency/src: main/java/org/jboss/dependency/spi/tracker and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Dec 1 06:38:59 EST 2009


Author: alesj
Date: 2009-12-01 06:38:59 -0500 (Tue, 01 Dec 2009)
New Revision: 97219

Modified:
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/TrackerConstants.java
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/tracker/ContextTracker.java
   projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ContextTrackerTestCase.java
Log:
Fix ContextTracker - tracking per user.

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java	2009-12-01 11:34:45 UTC (rev 97218)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java	2009-12-01 11:38:59 UTC (rev 97219)
@@ -37,27 +37,24 @@
  */
 public class AbstractContextTracker extends AbstractLockHolder implements ContextTracker
 {
-   /** The mapping */
-   private Map<ControllerContext, Map<Object, Integer>> map = new HashMap<ControllerContext, Map<Object, Integer>>();
+   /** The context2user mapping */
+   private Map<ControllerContext, Map<Object, Integer>> c2u = new HashMap<ControllerContext, Map<Object, Integer>>();
 
-   public int getUsedByCount(ControllerContext context, Object user)
+   /** The user2context mapping */
+   private Map<Object, Set<ControllerContext>> u2c = new HashMap<Object, Set<ControllerContext>>();
+
+   /**
+    * Check context and user.
+    *
+    * @param context the context
+    * @param user the user
+    */
+   private void check(ControllerContext context, Object user)
    {
-      lockRead();
-      try
-      {
-         Map<Object, Integer> counter = map.get(context);
-         if (counter != null)
-         {
-            Integer count = counter.get(user);
-            if (count != null)
-               return count;
-         }
-         return 0;
-      }
-      finally
-      {
-         unlockRead();
-      }
+      if (context == null)
+         throw new IllegalArgumentException("Null context");
+      if (user == null)
+         throw new IllegalArgumentException("Null user");
    }
 
    /**
@@ -69,14 +66,16 @@
     */
    private void add(ControllerContext context, Object user, boolean increment)
    {
+      check(context, user);
+
       lockWrite();
       try
       {
-         Map<Object, Integer> counter = map.get(context);
+         Map<Object, Integer> counter = c2u.get(context);
          if (counter == null)
          {
             counter = new HashMap<Object, Integer>();
-            map.put(context, counter);
+            c2u.put(context, counter);
          }
          Integer count = counter.get(user);
          if (count == null)
@@ -86,6 +85,14 @@
             count++;
 
          counter.put(user, count);
+
+         Set<ControllerContext> contexts = u2c.get(user);
+         if (contexts == null)
+         {
+            contexts = new HashSet<ControllerContext>();
+            u2c.put(user, contexts);
+         }
+         contexts.add(context);
       }
       finally
       {
@@ -102,10 +109,12 @@
     */
    private void remove(ControllerContext context, Object user, boolean decrement)
    {
+      check(context, user);
+
       lockWrite();
       try
       {
-         Map<Object, Integer> counter = map.get(context);
+         Map<Object, Integer> counter = c2u.get(context);
          if (counter != null)
          {
             Integer count = counter.get(user);
@@ -114,13 +123,22 @@
                counter.remove(user);
 
                if (counter.isEmpty())
-                  map.remove(context);
+                  c2u.remove(context);
             }
             else if (decrement)
             {
                counter.put(user, --count);
             }
          }
+
+         Set<ControllerContext> contexts = u2c.get(user);
+         if (contexts != null)
+         {
+            contexts.remove(context);
+
+            if (contexts.isEmpty())
+               u2c.remove(user);
+         }
       }
       finally
       {
@@ -128,6 +146,28 @@
       }
    }
 
+   public int getUsedByCount(ControllerContext context, Object user)
+   {
+      check(context, user);
+
+      lockRead();
+      try
+      {
+         Map<Object, Integer> counter = c2u.get(context);
+         if (counter != null)
+         {
+            Integer count = counter.get(user);
+            if (count != null)
+               return count;
+         }
+         return 0;
+      }
+      finally
+      {
+         unlockRead();
+      }
+   }
+
    public void addUsedBy(ControllerContext context, Object user)
    {
       add(context, user, false);
@@ -150,10 +190,13 @@
 
    public boolean isContextInUse(ControllerContext context)
    {
+      if (context == null)
+         throw new IllegalArgumentException("Null context");
+
       lockRead();
       try
       {
-         return map.get(context) != null;
+         return c2u.get(context) != null;
       }
       finally
       {
@@ -163,10 +206,13 @@
 
    public Set<Object> getUsers(ControllerContext context)
    {
+      if (context == null)
+         throw new IllegalArgumentException("Null context");
+
       lockRead();
       try
       {
-         Map<Object, Integer> counter = map.get(context);
+         Map<Object, Integer> counter = c2u.get(context);
          return (counter != null) ? new HashSet<Object>(counter.keySet()) : Collections.emptySet();
       }
       finally
@@ -175,23 +221,16 @@
       }
    }
 
-   @SuppressWarnings({"unchecked"})
-   public <T extends ControllerContext> Set<T> getUsedContexts(Class<T> type)
+   public Set<ControllerContext> getUsedContexts(Object user)
    {
+      if (user == null)
+         throw new IllegalArgumentException("Null user");
+
       lockRead();
       try
       {
-         Set<ControllerContext> contexts = map.keySet();
-         if (contexts.isEmpty())
-            return Collections.emptySet();
-
-         Set<T> result = new HashSet<T>();
-         for (ControllerContext context : contexts)
-         {
-            if (type == null || type.isInstance(context))
-               result.add((T)context);
-         }
-         return result;
+         Set<ControllerContext> contexts = u2c.get(user);
+         return (contexts == null || contexts.isEmpty()) ? Collections.<ControllerContext>emptySet() : new HashSet<ControllerContext>(contexts);
       }
       finally
       {

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/TrackerConstants.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/TrackerConstants.java	2009-12-01 11:34:45 UTC (rev 97218)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/TrackerConstants.java	2009-12-01 11:38:59 UTC (rev 97219)
@@ -73,7 +73,7 @@
          return Collections.emptySet();
       }
 
-      public <T extends ControllerContext> Set<T> getUsedContexts(Class<T> type)
+      public Set<ControllerContext> getUsedContexts(Object user)
       {
          return Collections.emptySet();
       }

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/tracker/ContextTracker.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/tracker/ContextTracker.java	2009-12-01 11:34:45 UTC (rev 97218)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/tracker/ContextTracker.java	2009-12-01 11:38:59 UTC (rev 97219)
@@ -97,8 +97,8 @@
     * If null type param is passed,
     * not type check is performed.
     *
-    * @param type exact context type
+    * @param user the user
     * @return all used contexts
     */
-   <T extends ControllerContext> Set<T> getUsedContexts(Class<T> type);
+   Set<ControllerContext> getUsedContexts(Object user);
 }
\ No newline at end of file

Modified: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ContextTrackerTestCase.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ContextTrackerTestCase.java	2009-12-01 11:34:45 UTC (rev 97218)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ContextTrackerTestCase.java	2009-12-01 11:38:59 UTC (rev 97219)
@@ -99,16 +99,16 @@
       ContextTracker trackerA = ctA.getContextTracker();
       assertNotNull(trackerA);
       assertEquals(Collections.<Object>singleton(b), trackerA.getUsers(a));
-      assertEquals(Collections.singleton(a), trackerA.getUsedContexts(null));
+      assertEquals(Collections.singleton(a), trackerA.getUsedContexts(b));
       assertEquals(Collections.<Object>singleton(b), b.getUsers(a));
-      assertEquals(Collections.singleton(a), b.getUsedContexts(null));
+      assertEquals(Collections.singleton(a), b.getUsedContexts(b));
       assertEquals(1, trackerA.getUsedByCount(a, b));
       assertEquals(1, b.getUsedByCount(a, b));
       ctA.ungetTarget(b);
       assertEmpty(trackerA.getUsers(a));
-      assertEmpty(trackerA.getUsedContexts(null));
+      assertEmpty(trackerA.getUsedContexts(b));
       assertEmpty(b.getUsers(a));
-      assertEmpty(b.getUsedContexts(null));
+      assertEmpty(b.getUsedContexts(b));
 
       assertUninstallContext(a);
    }
@@ -171,22 +171,22 @@
 
          // A
          assertEquals(Collections.<Object>singleton(b), trackerA.getUsers(a));
-         assertEquals(Collections.singleton(a), trackerA.getUsedContexts(null));
+         assertEquals(Collections.singleton(a), trackerA.getUsedContexts(b));
          assertEquals(count, trackerA.getUsedByCount(a, b));
          // B
          assertEquals(Collections.<Object>singleton(b), trackerB.getUsers(a));
-         assertEquals(Collections.singleton(a), trackerB.getUsedContexts(null));
+         assertEquals(Collections.singleton(a), trackerB.getUsedContexts(b));
          assertEquals(count, trackerB.getUsedByCount(a, b));
 
          ctA.ungetTarget(b);
 
          // A
          assertEmpty(trackerA.getUsers(a));
-         assertEmpty(trackerA.getUsedContexts(null));
+         assertEmpty(trackerA.getUsedContexts(b));
          assertEquals(0, trackerA.getUsedByCount(a, b));
          // B
          assertEmpty(trackerB.getUsers(a));
-         assertEmpty(trackerB.getUsedContexts(null));
+         assertEmpty(trackerB.getUsedContexts(b));
          assertEquals(0, trackerB.getUsedByCount(a, b));
       }
       finally
@@ -206,11 +206,11 @@
       assertNotNull(trackerA);
       action.get(trackerA, a, b);
       assertEquals(Collections.<Object>singleton(b), trackerA.getUsers(a));
-      assertEquals(Collections.singleton(a), trackerA.getUsedContexts(null));
+      assertEquals(Collections.singleton(a), trackerA.getUsedContexts(b));
       assertEquals(count, trackerA.getUsedByCount(a, b));
       action.unget(trackerA, a, b);
       assertEmpty(trackerA.getUsers(a));
-      assertEmpty(trackerA.getUsedContexts(null));
+      assertEmpty(trackerA.getUsedContexts(b));
 
       assertUninstallContext(a);
    }




More information about the jboss-cvs-commits mailing list