You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2018/03/22 18:15:15 UTC

qpid-broker-j git commit: QPID-7197: [Broker-J] Fix referrer/referee confusion in parameter names.

Repository: qpid-broker-j
Updated Branches:
  refs/heads/master 4fbab0e59 -> c5e5cd2ab


QPID-7197: [Broker-J] Fix referrer/referee confusion in  parameter names.


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/c5e5cd2a
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/c5e5cd2a
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/c5e5cd2a

Branch: refs/heads/master
Commit: c5e5cd2ab225482627009b486a1494a747e7539c
Parents: 4fbab0e
Author: Keith Wall <kw...@apache.org>
Authored: Thu Mar 22 18:12:38 2018 +0000
Committer: Keith Wall <kw...@apache.org>
Committed: Thu Mar 22 18:14:35 2018 +0000

----------------------------------------------------------------------
 .../server/model/AbstractConfiguredObject.java  | 83 +++++++++++---------
 1 file changed, 48 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/c5e5cd2a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
index 447fc59..3bc6c84 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
@@ -2246,15 +2246,15 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
         return deleteNoChecks();
     }
 
-    private void checkReferencesOnDelete(final ConfiguredObject<?> referee, final ConfiguredObject<?> referrer)
+    private void checkReferencesOnDelete(final ConfiguredObject<?> referrer, final ConfiguredObject<?> referee)
     {
-        if (!managesChildren(referrer))
+        if (!managesChildren(referee))
         {
-            getModel().getChildTypes(referrer.getCategoryClass())
-                      .forEach(childClass -> referrer.getChildren(childClass)
-                                                     .forEach(child -> checkReferencesOnDelete(referee, child)));
+            getModel().getChildTypes(referee.getCategoryClass())
+                      .forEach(childClass -> referee.getChildren(childClass)
+                                                    .forEach(child -> checkReferencesOnDelete(referrer, child)));
         }
-        checkReferences(referee, referrer);
+        checkReferences(referrer, referee);
     }
 
     private ConfiguredObject<?> getHierarchyRoot(final AbstractConfiguredObject<X> o)
@@ -2278,89 +2278,102 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
         return managesChildren(object.getCategoryClass()) || managesChildren(object.getTypeClass());
     }
 
-    private void checkReferences(final ConfiguredObject<?> referee, final ConfiguredObject<?> referrer)
+    private void checkReferences(final ConfiguredObject<?> referrer, final ConfiguredObject<?> referee)
     {
-        if (hasReference(referee, referrer))
+        if (hasReference(referrer, referee))
         {
-            throw new IntegrityViolationException(String.format("%s '%s' is in use by %s '%s'",
-                                                                referrer.getCategoryClass().getSimpleName(),
-                                                                referrer.getName(),
-                                                                referee.getCategoryClass().getSimpleName(),
-                                                                referee.getName()));
+            if (referee == this)
+            {
+                throw new IntegrityViolationException(String.format("%s '%s' is in use by %s '%s'.",
+                                                                    referee.getCategoryClass().getSimpleName(),
+                                                                    referee.getName(),
+                                                                    referrer.getCategoryClass().getSimpleName(),
+                                                                    referrer.getName()));
+            }
+            else
+            {
+                throw new IntegrityViolationException(String.format("Cannot delete %s '%s' as descendant %s '%s' is in use by %s '%s'.",
+                                                                    this.getCategoryClass().getSimpleName(),
+                                                                    this.getName(),
+                                                                    referee.getCategoryClass().getSimpleName(),
+                                                                    referee.getName(),
+                                                                    referrer.getCategoryClass().getSimpleName(),
+                                                                    referrer.getName()));
+            }
         }
 
-        if (!managesChildren(referee))
+        if (!managesChildren(referrer))
         {
-            getModel().getChildTypes(referee.getCategoryClass())
-                      .forEach(childClass -> referee.getChildren(childClass)
-                                                    .stream()
-                                                    .filter(child -> child != this)
-                                                    .forEach(child -> checkReferences(child, referrer)));
+            getModel().getChildTypes(referrer.getCategoryClass())
+                      .forEach(childClass -> referrer.getChildren(childClass)
+                                                     .stream()
+                                                     .filter(child -> child != this)
+                                                     .forEach(child -> checkReferences(child, referee)));
         }
     }
 
-    private boolean hasReference(final ConfiguredObject<?> referee,
-                                 final ConfiguredObject<?> referrer)
+    private boolean hasReference(final ConfiguredObject<?> referrer,
+                                 final ConfiguredObject<?> referee)
     {
-        if (referee instanceof AbstractConfiguredObject)
+        if (referrer instanceof AbstractConfiguredObject)
         {
             return getModel().getTypeRegistry()
-                             .getAttributes(referee.getClass())
+                             .getAttributes(referrer.getClass())
                              .stream()
                              .anyMatch(attribute -> {
                                  Class<?> type = attribute.getType();
                                  Type genericType = attribute.getGenericType();
-                                 return isReferred(referrer, type,
+                                 return isReferred(referee, type,
                                                    genericType,
                                                    () -> {
                                                        @SuppressWarnings("unchecked")
                                                        Object value =
-                                                               ((ConfiguredObjectAttribute) attribute).getValue(referee);
+                                                               ((ConfiguredObjectAttribute) attribute).getValue(referrer);
                                                        return value;
                                                    });
                              });
         }
         else
         {
-            return referee.getAttributeNames().stream().anyMatch(name -> {
-                Object value = referee.getAttribute(name);
+            return referrer.getAttributeNames().stream().anyMatch(name -> {
+                Object value = referrer.getAttribute(name);
                 if (value != null)
                 {
                     Class<?> type = value.getClass();
-                    return isReferred(referrer, type, type, () -> value);
+                    return isReferred(referee, type, type, () -> value);
                 }
                 return false;
             });
         }
     }
 
-    private boolean isReferred(final ConfiguredObject<?> referrer,
+    private boolean isReferred(final ConfiguredObject<?> referee,
                                final Class<?> attributeValueType,
                                final Type attributeGenericType,
                                final Supplier<?> attributeValue)
     {
-        final Class<? extends ConfiguredObject> referrerCategory = referrer.getCategoryClass();
+        final Class<? extends ConfiguredObject> referrerCategory = referee.getCategoryClass();
         if (referrerCategory.isAssignableFrom(attributeValueType))
         {
-            return attributeValue.get() == referrer;
+            return attributeValue.get() == referee;
         }
         else if (hasParameterOfType(attributeGenericType, referrerCategory))
         {
             Object value = attributeValue.get();
             if (value instanceof Collection)
             {
-                return ((Collection<?>) value).stream().anyMatch(m -> m == referrer);
+                return ((Collection<?>) value).stream().anyMatch(m -> m == referee);
             }
             else if (value instanceof Object[])
             {
-                return Arrays.stream((Object[]) value).anyMatch(m -> m == referrer);
+                return Arrays.stream((Object[]) value).anyMatch(m -> m == referee);
             }
             else if (value instanceof Map)
             {
                 return ((Map<?, ?>) value).entrySet()
                                           .stream()
-                                          .anyMatch(e -> e.getKey() == referrer
-                                                         || e.getValue() == referrer);
+                                          .anyMatch(e -> e.getKey() == referee
+                                                         || e.getValue() == referee);
             }
         }
         return false;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org