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 4b6259b Context API refactoring.
4b6259b is described below
commit 4b6259bb7df52a44347b042eb68b0683660aa2fa
Author: JamesBognar <[email protected]>
AuthorDate: Sun Sep 26 11:51:02 2021 -0400
Context API refactoring.
---
.../main/java/org/apache/juneau/BeanContext.java | 67 ++++++++--------------
.../java/org/apache/juneau/BeanContextBuilder.java | 23 ++++----
.../org/apache/juneau/BeanContextableBuilder.java | 4 +-
.../java/org/apache/juneau/BeanFilterBuilder.java | 2 +-
.../main/java/org/apache/juneau/BeanSession.java | 2 +-
.../java/org/apache/juneau/annotation/Bean.java | 2 +-
.../juneau/annotation/BeanConfigAnnotation.java | 2 +-
7 files changed, 43 insertions(+), 59 deletions(-)
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
index 3d1336c..e7866bf 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
@@ -155,33 +155,9 @@ import org.apache.juneau.transform.*;
@ConfigurableContext
public class BeanContext extends Context {
- static final String PREFIX = "BeanContext";
-
- /**
- * Configuration property: Bean property namer.
- *
- * <p>
- * The class to use for calculating bean property names..
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.BeanContext#BEAN_propertyNamer BEAN_propertyNamer}
- * <li><b>Name:</b> <js>"BeanContext.propertyNamer.c"</js>
- * <li><b>Data type:</b> <code>Class<{@link
org.apache.juneau.PropertyNamer}></code>
- * <li><b>Default:</b> {@link
org.apache.juneau.BasicPropertyNamer}
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.annotation.Bean#propertyNamer()}
- * <li class='ja'>{@link
org.apache.juneau.annotation.BeanConfig#propertyNamer()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.BeanContextBuilder#propertyNamer(Class)}
- * </ul>
- * </ul>
- */
- public static final String BEAN_propertyNamer = PREFIX +
".propertyNamer.c";
+
//-----------------------------------------------------------------------------------------------------------------
+ // Static
+
//-----------------------------------------------------------------------------------------------------------------
/*
* The default package pattern exclusion list.
@@ -222,6 +198,10 @@ public class BeanContext extends Context {
/** Default reusable unmodifiable session. Can be used to avoid
overhead of creating a session (for creating BeanMaps for example).*/
public static final BeanSession DEFAULT_SESSION = new
BeanSession(DEFAULT, DEFAULT.createDefaultBeanSessionArgs().unmodifiable());
+
//-----------------------------------------------------------------------------------------------------------------
+ // Instance
+
//-----------------------------------------------------------------------------------------------------------------
+
final boolean
beansRequireDefaultConstructor,
beansRequireSerializable,
@@ -239,28 +219,26 @@ public class BeanContext extends Context {
useEnumNames,
sortProperties,
findFluentSetters;
-
final Visibility
beanConstructorVisibility,
beanClassVisibility,
beanMethodVisibility,
beanFieldVisibility;
-
- final List<Class<?>> beanDictionary, swaps, notBeanClasses;
- final List<String> notBeanPackages;
- private final String[] notBeanPackageNames, notBeanPackagePrefixes;
- private final BeanRegistry beanRegistry;
- private final PropertyNamer propertyNamer;
final String typePropertyName;
-
- private final PojoSwap[] swapArray;
- private final Class<?>[] notBeanClassesArray;
-
final Locale locale;
final TimeZone timeZone;
final MediaType mediaType;
+ final Class<? extends PropertyNamer> propertyNamer;
+ final List<Class<?>> beanDictionary, swaps, notBeanClasses;
+ final List<String> notBeanPackages;
final Map<Class,ClassMeta> cmCache;
+
+ private final String[] notBeanPackageNames, notBeanPackagePrefixes;
+ private final BeanRegistry beanRegistry;
+ private final PropertyNamer propertyNamerBean;
+ private final PojoSwap[] swapArray;
+ private final Class<?>[] notBeanClassesArray;
private final ClassMeta<Object> cmObject; // Reusable ClassMeta that
represents general Objects.
private final ClassMeta<String> cmString; // Reusable ClassMeta that
represents general Strings.
private final ClassMeta<Class> cmClass; // Reusable ClassMeta that
represents general Classes.
@@ -309,8 +287,7 @@ public class BeanContext extends Context {
swaps =
ofNullable(builder.swaps).map(Collections::unmodifiableList).orElse(emptyList());
notBeanClasses =
ofNullable(builder.notBeanClasses).map(ArrayList::new).map(Collections::unmodifiableList).orElse(emptyList());
notBeanPackages =
ofNullable(builder.notBeanPackages).map(ArrayList::new).map(Collections::unmodifiableList).orElse(emptyList());
-
- propertyNamer = cp.getInstance(BEAN_propertyNamer,
PropertyNamer.class).orElseGet(BasicPropertyNamer::new);
+ propertyNamer = builder.propertyNamer != null ?
builder.propertyNamer : BasicPropertyNamer.class;
notBeanClassesArray = notBeanClasses.isEmpty() ?
DEFAULT_NOTBEAN_CLASSES : Stream.of(notBeanClasses,
asList(DEFAULT_NOTBEAN_CLASSES)).flatMap(Collection::stream).toArray(Class[]::new);
@@ -318,6 +295,12 @@ public class BeanContext extends Context {
notBeanPackageNames = Stream.of(_notBeanPackages).filter(x -> !
x.endsWith(".*")).toArray(String[]::new);
notBeanPackagePrefixes = Stream.of(_notBeanPackages).filter(x
-> x.endsWith(".*")).map(x -> x.substring(0,
x.length()-2)).toArray(String[]::new);
+ try {
+ propertyNamerBean = propertyNamer.newInstance();
+ } catch (Exception e) {
+ throw runtimeException(e);
+ }
+
LinkedList<PojoSwap<?,?>> _swaps = new LinkedList<>();
for (Object o : ofNullable(swaps).orElse(emptyList())) {
ClassInfo ci = ClassInfo.of((Class<?>)o);
@@ -1191,12 +1174,12 @@ public class BeanContext extends Context {
/**
* Bean property namer.
*
- * @see #BEAN_propertyNamer
+ * @see BeanContextBuilder#propertyNamer(Class)
* @return
* The interface used to calculate bean property names.
*/
public final PropertyNamer getPropertyNamer() {
- return propertyNamer;
+ return propertyNamerBean;
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index ff63ea9..db0d4cc 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -12,7 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau;
-import static org.apache.juneau.BeanContext.*;
import static org.apache.juneau.internal.StringUtils.*;
import static org.apache.juneau.Visibility.*;
import static java.util.Arrays.*;
@@ -67,9 +66,6 @@ public class BeanContextBuilder extends ContextBuilder {
//-----------------------------------------------------------------------------------------------------------------
Visibility beanClassVisibility, beanConstructorVisibility,
beanMethodVisibility, beanFieldVisibility;
- List<Class<?>> beanDictionary, swaps;
- Set<Class<?>> notBeanClasses;
- Set<String> notBeanPackages;
boolean disableBeansRequireSomeProperties, beanMapPutReturnsOldValue,
beansRequireDefaultConstructor, beansRequireSerializable,
beansRequireSettersForGetters, disableIgnoreTransientFields,
disableIgnoreUnknownNullBeanProperties, disableIgnoreMissingSetters,
disableInterfaceProxies, findFluentSetters,
ignoreInvocationExceptionsOnGetters, ignoreInvocationExceptionsOnSetters,
@@ -78,6 +74,10 @@ public class BeanContextBuilder extends ContextBuilder {
MediaType mediaType;
Locale locale;
TimeZone timeZone;
+ Class<? extends PropertyNamer> propertyNamer;
+ List<Class<?>> beanDictionary, swaps;
+ Set<Class<?>> notBeanClasses;
+ Set<String> notBeanPackages;
/**
* Constructor.
@@ -114,6 +114,7 @@ public class BeanContextBuilder extends ContextBuilder {
mediaType = env("BeanContext.mediaType", (MediaType)null);
timeZone = env("BeanContext.timeZone", (TimeZone)null);
locale = env("BeanContext.locale", Locale.getDefault());
+ propertyNamer = null;
}
/**
@@ -151,6 +152,7 @@ public class BeanContextBuilder extends ContextBuilder {
mediaType = copyFrom.mediaType;
timeZone = copyFrom.timeZone;
locale = copyFrom.locale;
+ propertyNamer = copyFrom.propertyNamer;
}
/**
@@ -188,6 +190,7 @@ public class BeanContextBuilder extends ContextBuilder {
mediaType = copyFrom.mediaType;
timeZone = copyFrom.timeZone;
locale = copyFrom.locale;
+ propertyNamer = copyFrom.propertyNamer;
}
@Override /* ContextBuilder */
@@ -230,7 +233,8 @@ public class BeanContextBuilder extends ContextBuilder {
typePropertyName,
mediaType,
timeZone,
- locale
+ locale,
+ propertyNamer
);
BeanContext bc = CACHE.get(key);
if (bc == null) {
@@ -2584,10 +2588,6 @@ public class BeanContextBuilder extends ContextBuilder {
* String <jv>json</jv> =
<jv>serializer</jv>.serialize(<jk>new</jk> MyBean());
* </p>
*
- * <ul class='seealso'>
- * <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
- * </ul>
- *
* @param value
* The new value for this setting.
* <br>The default is {@link BasicPropertyNamer}.
@@ -2595,7 +2595,8 @@ public class BeanContextBuilder extends ContextBuilder {
*/
@FluentSetter
public BeanContextBuilder propertyNamer(Class<? extends PropertyNamer>
value) {
- return set(BEAN_propertyNamer, value);
+ propertyNamer = value;
+ return this;
}
/**
@@ -2624,7 +2625,7 @@ public class BeanContextBuilder extends ContextBuilder {
*
* <ul class='seealso'>
* <li class='ja'>{@link Bean#propertyNamer() Bean(propertyNamer)}
- * <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+ * <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
* </ul>
*
* @param on The class that the namer applies to.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
index 928f069..7ce6dac 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextableBuilder.java
@@ -2300,7 +2300,7 @@ public abstract class BeanContextableBuilder extends
ContextBuilder {
* </p>
*
* <ul class='seealso'>
- * <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+ * <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
* </ul>
*
* @param value
@@ -2340,7 +2340,7 @@ public abstract class BeanContextableBuilder extends
ContextBuilder {
*
* <ul class='seealso'>
* <li class='ja'>{@link Bean#propertyNamer() Bean(propertyNamer)}
- * <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+ * <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
* </ul>
*
* @param on The class that the namer applies to.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
index ff9c198..de169f0 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
@@ -391,7 +391,7 @@ public class BeanFilterBuilder {
*
* <ul class='seealso'>
* <li class='ja'>{@link Bean#propertyNamer()}
- * <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+ * <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
* <li class='jc'>{@link PropertyNamer}
* </ul>
*
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index c2a1235..a62f027 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -1477,7 +1477,7 @@ public class BeanSession extends Session {
/**
* Configuration property: Bean property namer.
*
- * @see BeanContext#BEAN_propertyNamer
+ * @see BeanContextBuilder#propertyNamer(Class)
* @return
* The interface used to calculate bean property names.
*/
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
index 7a0309a..f2de4a2 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
@@ -320,7 +320,7 @@ public @interface Bean {
* </p>
*
* <ul class='seealso'>
- * <li class='jf'>{@link BeanContext#BEAN_propertyNamer}
+ * <li class='jm'>{@link BeanContextBuilder#propertyNamer(Class)}
* </ul>
*/
Class<? extends PropertyNamer> propertyNamer() default
BasicPropertyNamer.class;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
index 1738db9..f6a6492 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigAnnotation.java
@@ -76,7 +76,7 @@ public class BeanConfigAnnotation {
classes(a.swaps_replace()).ifPresent(x -> {
b.swaps().clear(); b.swaps(x);});
classes(a.notBeanClasses()).ifPresent(x ->
b.notBeanClasses(x));
classes(a.notBeanClasses_replace()).ifPresent(x -> {
b.notBeanClasses().clear(); b.notBeanClasses(x);});
- type(a.propertyNamer()).ifPresent(x ->
b.set(BEAN_propertyNamer, x));
+ type(a.propertyNamer()).ifPresent(x ->
b.propertyNamer(x));
asList(a.interfaces()).stream().map(x ->
BeanAnnotation.create(x).interfaceClass(x).build()).forEach(x ->
b.annotations(x));
strings(a.notBeanPackages()).ifPresent(x ->
b.notBeanPackages(x));
strings(a.notBeanPackages_replace()).ifPresent(x ->
{b.notBeanPackages().clear(); b.notBeanPackages(x);});