From a86a0c26624431797fbe649902eae87a01bf8e77 Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Fri, 26 Mar 2021 11:11:45 +1100 Subject: [PATCH] Add static utility methods on container to add and remove beans. Signed-off-by: Lachlan Roberts --- .../jetty/util/component/Container.java | 40 +++++++++++++++++++ .../util/component/ContainerLifeCycle.java | 14 +++---- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/component/Container.java b/jetty-util/src/main/java/org/eclipse/jetty/util/component/Container.java index bfeb11a1f08f..6149ef4797d3 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/component/Container.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/component/Container.java @@ -152,6 +152,46 @@ default List getEventListeners() return Collections.unmodifiableList(new ArrayList<>(getBeans(EventListener.class))); } + /** + * A utility method to add a bean to a container. + * @param parent the parent container. + * @param child the child bean. + * @return true if the child was added as a bean, false if parent was not instance of {@link Container} or bean was already present. + */ + static boolean addBean(Object parent, Object child) + { + if (parent instanceof Container) + return ((Container)parent).addBean(child); + return false; + } + + /** + * A utility method to add a bean to a container. + * @param parent the parent container. + * @param child the child bean. + * @param managed whether to managed the lifecycle of the bean. + * @return true if the child was added as a bean, false if parent was not instance of {@link Container} or bean was already present. + */ + static boolean addBean(Object parent, Object child, boolean managed) + { + if (parent instanceof Container) + return ((Container)parent).addBean(child, managed); + return false; + } + + /** + * A utility method to remove a bean from a container. + * @param parent the parent container. + * @param child the child bean. + * @return true if parent was an instance of {@link Container} and the bean was removed. + */ + static boolean removeBean(Object parent, Object child) + { + if (parent instanceof Container) + return ((Container)parent).removeBean(child); + return false; + } + /** * A listener for Container events. * If an added bean implements this interface it will receive the events diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/component/ContainerLifeCycle.java b/jetty-util/src/main/java/org/eclipse/jetty/util/component/ContainerLifeCycle.java index 115dd4f2bc8e..2054efaa5261 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/component/ContainerLifeCycle.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/component/ContainerLifeCycle.java @@ -474,9 +474,9 @@ public boolean addEventListener(EventListener listener) if (listener instanceof InheritedListener && b.isManaged() && b._bean instanceof Container) { if (b._bean instanceof ContainerLifeCycle) - ((ContainerLifeCycle)b._bean).addBean(listener, false); + Container.addBean(b._bean, listener, false); else - ((Container)b._bean).addBean(listener); + Container.addBean(b._bean, listener); } } } @@ -499,8 +499,8 @@ public boolean removeEventListener(EventListener listener) { cl.beanRemoved(this, b._bean); - if (listener instanceof InheritedListener && b.isManaged() && b._bean instanceof Container) - ((Container)b._bean).removeBean(listener); + if (listener instanceof InheritedListener && b.isManaged()) + Container.removeBean(b._bean, listener); } } return true; @@ -541,9 +541,9 @@ private void manage(Bean bean) if (l instanceof InheritedListener) { if (bean._bean instanceof ContainerLifeCycle) - ((ContainerLifeCycle)bean._bean).addBean(l, false); + Container.addBean(bean._bean, l, false); else - ((Container)bean._bean).addBean(l); + Container.addBean(bean._bean, l); } } } @@ -579,7 +579,7 @@ private void unmanage(Bean bean) for (Container.Listener l : _listeners) { if (l instanceof InheritedListener) - ((Container)bean._bean).removeBean(l); + Container.removeBean(bean._bean, l); } } bean._managed = Managed.UNMANAGED;