This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new c130ce0  REST refactoring.
c130ce0 is described below

commit c130ce0e0d855b911c3600df7ab3930643fbb584
Author: JamesBognar <[email protected]>
AuthorDate: Sun Feb 7 10:39:19 2021 -0500

    REST refactoring.
---
 .../java/org/apache/juneau/cp/BeanFactory.java     | 38 ++++-------
 .../org/apache/juneau/cp/BeanFactoryBuilder.java   | 79 +++++++++++++++++++++-
 .../org/apache/juneau/svl/VarResolverSession.java  |  2 +-
 .../juneau/rest/springboot/SpringBeanFactory.java  |  2 +-
 .../java/org/apache/juneau/rest/MethodList.java    | 36 +++++++++-
 .../org/apache/juneau/cp/BeanFactory_Test.java     |  2 +-
 .../apache/juneau/mstat/MethodExecStore_Test.java  |  6 +-
 .../org/apache/juneau/mstat/ThrownStore_Test.java  |  4 +-
 8 files changed, 133 insertions(+), 36 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactory.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactory.java
index dfd3dfe..5499d7b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactory.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactory.java
@@ -43,59 +43,49 @@ public class BeanFactory {
        /**
         * Static creator.
         *
-        * @return A new {@link BeanFactory} object.
+        * @return A new {@link BeanFactoryBuilder} object.
         */
-       public static BeanFactory create() {
-               return new BeanFactory();
+       public static BeanFactoryBuilder create() {
+               return new BeanFactoryBuilder();
        }
 
        /**
         * Static creator.
         *
         * @param parent Parent bean factory.  Can be <jk>null</jk> if this is 
the root resource.
-        * @param outer Outer bean context to use when instantiating local 
classes.  Can be <jk>null</jk>.
         * @return A new {@link BeanFactory} object.
         */
-       public static BeanFactory of(BeanFactory parent, Object outer) {
-               return new BeanFactory(parent, outer);
+       public static BeanFactory of(BeanFactory parent) {
+               return create().parent(parent).build();
        }
 
        /**
         * Static creator.
         *
         * @param parent Parent bean factory.  Can be <jk>null</jk> if this is 
the root resource.
+        * @param outer The outer bean used when instantiating inner classes.  
Can be <jk>null</jk>.
         * @return A new {@link BeanFactory} object.
         */
-       public static BeanFactory of(BeanFactory parent) {
-               return new BeanFactory(parent, null);
+       public static BeanFactory of(BeanFactory parent, Object outer) {
+               return create().parent(parent).outer(outer).build();
        }
 
        /**
         * Default constructor.
         */
        public BeanFactory() {
-               this(Optional.empty(), Optional.empty());
-       }
-
-       /**
-        * Constructor.
-        *
-        * @param parent Parent bean factory.  Can be <jk>null</jk> if this is 
the root resource.
-        * @param outer Outer bean context to use when instantiating local 
classes.  Can be <jk>null</jk>.
-        */
-       public BeanFactory(BeanFactory parent, Object outer) {
-               this(Optional.ofNullable(parent), Optional.ofNullable(outer));
+               this.parent = Optional.empty();
+               this.outer = Optional.empty();
        }
 
        /**
         * Constructor.
         *
-        * @param parent - Optional parent bean factory.
-        * @param outer Outer bean context to use when instantiating local 
classes.
+        * @param builder The builder containing the settings for this bean.
         */
-       public BeanFactory(Optional<BeanFactory> parent, Optional<Object> 
outer) {
-               this.parent = parent;
-               this.outer = outer;
+       public BeanFactory(BeanFactoryBuilder builder) {
+               this.parent = Optional.ofNullable(builder.parent);
+               this.outer = Optional.ofNullable(builder.outer);
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactoryBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactoryBuilder.java
index 170d926..e5525a6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactoryBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactoryBuilder.java
@@ -12,7 +12,84 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.cp;
 
+import static org.apache.juneau.internal.ClassUtils.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
+
+/**
+ * Builder for {@link BeanFactory} objects.
+ */
 public class BeanFactoryBuilder {
 
-       // TODO
+       private Class<? extends BeanFactory> implClass;
+       Object outer;
+       BeanFactory parent;
+
+       /**
+        * Create a new {@link BeanFactory} using this builder.
+        *
+        * @return A new {@link BeanFactory}
+        */
+       public BeanFactory build() {
+               try {
+                       Class<? extends BeanFactory> ic = isConcrete(implClass) 
? implClass : getDefaultImplClass();
+                       return new 
BeanFactory().addBeans(BeanFactoryBuilder.class, this).createBean(ic);
+               } catch (ExecutableException e) {
+                       throw new RuntimeException(e.getCause().getMessage(), 
e.getCause());
+               }
+       }
+
+       /**
+        * Specifies the default implementation class if not specified via 
{@link #implClass(Class)}.
+        *
+        * @return The default implementation class if not specified via {@link 
#implClass(Class)}.
+        */
+       protected Class<? extends BeanFactory> getDefaultImplClass() {
+               return BeanFactory.class;
+       }
+
+       /**
+        * Specifies a subclass of {@link BeanFactory} to create when the 
{@link #build()} method is called.
+        *
+        * @param value The new value for this setting.
+        * @return  This object (for method chaining).
+        */
+       @FluentSetter
+       public BeanFactoryBuilder implClass(Class<? extends BeanFactory> value) 
{
+               this.implClass = value;
+               return this;
+       }
+
+       /**
+        * Specifies the parent bean factory.
+        *
+        * <p>
+        * Bean searches are performed recursively up this parent chain.
+        *
+        * @param value The new value for this setting.
+        * @return  This object (for method chaining).
+        */
+       @FluentSetter
+       public BeanFactoryBuilder parent(BeanFactory value) {
+               this.parent = value;
+               return this;
+       }
+
+       /**
+        * Specifies the outer bean context.
+        *
+        * <p>
+        * Used when calling {@link BeanFactory#createBean(Class)} on a 
non-static inner class.
+        * This should be the instance of the outer object such as the servlet 
object when constructing inner classes
+        * of the servlet class.
+        *
+        * @param value The new value for this setting.
+        * @return  This object (for method chaining).
+        */
+       @FluentSetter
+       public BeanFactoryBuilder outer(Object value) {
+               this.outer = value;
+               return this;
+       }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
index e3e6e77..eb42f80 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
@@ -57,7 +57,7 @@ public class VarResolverSession {
         */
        public VarResolverSession(VarResolverContext context, BeanFactory 
beanFactory) {
                this.context = context;
-               this.beanFactory = BeanFactory.of(beanFactory, null);
+               this.beanFactory = BeanFactory.of(beanFactory);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server-springboot/src/main/java/org/apache/juneau/rest/springboot/SpringBeanFactory.java
 
b/juneau-rest/juneau-rest-server-springboot/src/main/java/org/apache/juneau/rest/springboot/SpringBeanFactory.java
index 46765ae..c8c3eea 100644
--- 
a/juneau-rest/juneau-rest-server-springboot/src/main/java/org/apache/juneau/rest/springboot/SpringBeanFactory.java
+++ 
b/juneau-rest/juneau-rest-server-springboot/src/main/java/org/apache/juneau/rest/springboot/SpringBeanFactory.java
@@ -32,7 +32,7 @@ public class SpringBeanFactory extends BeanFactory {
         * @param resource The REST object.  Can be <jk>null</jk>.
         */
        public SpringBeanFactory(Optional<ApplicationContext> appContext, 
Optional<BeanFactory> parent, Object resource) {
-               super(parent, Optional.of(resource));
+               super(create().parent(parent.orElse(null)).outer(resource));
                this.appContext = appContext;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactoryBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/MethodList.java
similarity index 70%
copy from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactoryBuilder.java
copy to 
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/MethodList.java
index 170d926..29f35a9 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanFactoryBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/MethodList.java
@@ -10,9 +10,39 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the 
License.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.cp;
+package org.apache.juneau.rest;
 
-public class BeanFactoryBuilder {
+import java.lang.reflect.*;
+import java.util.*;
+
+/**
+ * A simple list of {@link Method} objects.
+ */
+public class MethodList extends ArrayList<Method> {
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Creator.
+        *
+        * @param methods The methods to add to this list.
+        * @return A new list of methods.
+        */
+       public static MethodList of(Collection<Method> methods) {
+               return new MethodList(methods);
+       }
+
+       /**
+        * Constructor.
+        */
+       public MethodList() {}
+
+       /**
+        * Constructor.
+        *
+        * @param methods The methods to add to this list.
+        */
+       public MethodList(Collection<Method> methods) {
+               super(methods);
+       }
 
-       // TODO
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/cp/BeanFactory_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/cp/BeanFactory_Test.java
index 6a2a061..663c08a 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/cp/BeanFactory_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/cp/BeanFactory_Test.java
@@ -352,7 +352,7 @@ public class BeanFactory_Test {
 
        @Test
        public void e01_beanCreateMethodFinder() throws Exception {
-               BeanFactory bf = BeanFactory.create();
+               BeanFactory bf = BeanFactory.create().build();
                E1 x = new E1();
 
                assertObject(bf.beanCreateMethodFinder(E.class, 
x).find("createA0").run()).doesNotExist();
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/mstat/MethodExecStore_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/mstat/MethodExecStore_Test.java
index 69cf63d..1e41ab8 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/mstat/MethodExecStore_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/mstat/MethodExecStore_Test.java
@@ -80,7 +80,7 @@ public class MethodExecStore_Test {
 
        @Test
        public void a05_builder_beanFactory() throws Exception {
-               BeanFactory bf = BeanFactory.create();
+               BeanFactory bf = BeanFactory.create().build();
 
                
assertThrown(()->MethodExecStore.create().beanFactory(bf).implClass(A5b.class).build()).contains("Public
 constructor found but could not find prerequisites: A5a");
                
assertObject(MethodExecStore.create().beanFactory(bf).implClass(A5c.class).build()).isType(A5c.class);
@@ -111,7 +111,7 @@ public class MethodExecStore_Test {
 
        @Test
        public void a06_builder_statsImplClass() throws Exception {
-               BeanFactory bf = BeanFactory.create();
+               BeanFactory bf = BeanFactory.create().build();
                Method m = 
MethodExecStore_Test.class.getMethod("a06_builder_statsImplClass");
 
                
assertThrown(()->MethodExecStore.create().beanFactory(bf).statsImplClass(A6b.class).build().getStats(m)).contains("Public
 constructor found but could not find prerequisites: A6a");
@@ -133,7 +133,7 @@ public class MethodExecStore_Test {
                assertObject(store.getThrownStore()).isSameObjectAs(s);
 
                ThrownStore s2 = ThrownStore.create().build();
-               BeanFactory bf = 
BeanFactory.create().addBean(ThrownStore.class, s2);
+               BeanFactory bf = 
BeanFactory.create().build().addBean(ThrownStore.class, s2);
                store = MethodExecStore.create().beanFactory(bf).build();
                assertObject(store.getThrownStore()).isSameObjectAs(s2);
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/mstat/ThrownStore_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/mstat/ThrownStore_Test.java
index 4392477..495eabd 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/mstat/ThrownStore_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/mstat/ThrownStore_Test.java
@@ -237,7 +237,7 @@ public class ThrownStore_Test {
 
        @Test
        public void b05_builder_beanFactory() throws Exception {
-               BeanFactory bf = BeanFactory.create();
+               BeanFactory bf = BeanFactory.create().build();
 
                
assertThrown(()->ThrownStore.create().beanFactory(bf).implClass(B5b.class).build()).contains("Public
 constructor found but could not find prerequisites: B5a");
                
assertObject(ThrownStore.create().beanFactory(bf).implClass(B5c.class).build()).isType(B5c.class);
@@ -267,7 +267,7 @@ public class ThrownStore_Test {
 
        @Test
        public void b06_statsImplClass() throws Exception {
-               BeanFactory bf = BeanFactory.create();
+               BeanFactory bf = BeanFactory.create().build();
 
                Throwable t1 = new Throwable();
                t1.fillInStackTrace();

Reply via email to