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();