[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