You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2016/08/28 15:19:13 UTC

incubator-juneau git commit: Eliminate Tranform class.

Repository: incubator-juneau
Updated Branches:
  refs/heads/master d87240712 -> e7ab5a47b


Eliminate Tranform class.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/e7ab5a47
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/e7ab5a47
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/e7ab5a47

Branch: refs/heads/master
Commit: e7ab5a47b914a98221411f53654a43a5a310edbe
Parents: d872407
Author: jamesbognar <ja...@gmail.com>
Authored: Sun Aug 28 11:19:09 2016 -0400
Committer: jamesbognar <ja...@gmail.com>
Committed: Sun Aug 28 11:19:09 2016 -0400

----------------------------------------------------------------------
 .../java/org/apache/juneau/BeanContext.java     | 18 ++---
 .../main/java/org/apache/juneau/ClassMeta.java  | 49 ++++++------
 .../org/apache/juneau/transform/BeanFilter.java | 24 +++---
 .../org/apache/juneau/transform/PojoSwap.java   |  7 +-
 .../org/apache/juneau/transform/Transform.java  | 82 --------------------
 .../java/org/apache/juneau/JacocoDummyTest.java |  2 -
 6 files changed, 51 insertions(+), 131 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/e7ab5a47/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanContext.java b/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
index b21270e..2184d6c 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
@@ -37,7 +37,7 @@ import org.apache.juneau.transform.*;
  * 	This class servers multiple purposes:
  * 	<ul class='spaced-list'>
  * 		<li>Provides the ability to wrap beans inside {@link Map} interfaces.
- * 		<li>Serves as a repository for metadata on POJOs, such as associated {@link Transform transforms}, {@link PropertyNamer property namers}, etc...
+ * 		<li>Serves as a repository for metadata on POJOs, such as associated {@link BeanFilter beanFilters}, {@link PropertyNamer property namers}, etc...
  * 			which are used to tailor how POJOs are serialized and parsed.
  * 		<li>Serves as a common utility class for all {@link Serializer Serializers} and {@link Parser Parsers}
  * 				for serializing and parsing Java beans.
@@ -158,15 +158,15 @@ import org.apache.juneau.transform.*;
  * 	See {@link BeanConstructor @BeanConstructor} for more information.
  *
  *
- * <h5 class='topic'>Transforms</h5>
+ * <h5 class='topic'>BeanFilters and PojoSwaps</h5>
  * <p>
- * 	{@link Transform Transforms} are used to tailor how beans and non-beans are handled.<br>
- * 	There are two subclasses of transforms:
+ * 	{@link BeanFilter BeanFilters} and {@link PojoSwap PojoSwaps} are used to tailor how beans and POJOs are handled.<br>
  * 	<ol class='spaced-list'>
  * 		<li>{@link BeanFilter} - Allows you to tailor handling of bean classes.
  * 			This class can be considered a programmatic equivalent to the {@link Bean} annotation when
  * 			annotating classes are not possible (e.g. you don't have access to the source).
- * 		<li>{@link PojoSwap} - Allows you to convert objects to serializable forms.
+ * 			This includes specifying which properties are visible and the ability to programmatically override the execution of properties.
+ * 		<li>{@link PojoSwap} - Allows you to swap out non-serializable objects with serializable replacements.
  * 	</ol>
  * <p>
  * 	See {@link org.apache.juneau.transform} for more information.
@@ -1412,7 +1412,7 @@ public class BeanContext extends Context {
 
 	/**
 	 * Returns the {@link PojoSwap} associated with the specified class, or <jk>null</jk> if there is no
-	 * pojo transform associated with the class.
+	 * pojo swap associated with the class.
 	 *
 	 * @param <T> The class associated with the transform.
 	 * @param c The class associated with the transform.
@@ -1422,7 +1422,7 @@ public class BeanContext extends Context {
 		// Note:  On first
 		if (c != null)
 			for (PojoSwap f : pojoSwaps)
-				if (isParentClass(f.forClass(), c))
+				if (isParentClass(f.getNormalClass(), c))
 					return f;
 		return null;
 	}
@@ -1435,7 +1435,7 @@ public class BeanContext extends Context {
 	protected boolean hasChildPojoSwaps(Class<?> c) {
 		if (c != null)
 			for (PojoSwap f : pojoSwaps)
-				if (isParentClass(c, f.forClass()))
+				if (isParentClass(c, f.getNormalClass()))
 					return true;
 		return false;
 	}
@@ -1451,7 +1451,7 @@ public class BeanContext extends Context {
 	protected <T> BeanFilter findBeanFilter(Class<T> c) {
 		if (c != null)
 			for (BeanFilter f : beanFilters)
-				if (isParentClass(f.forClass(), c))
+				if (isParentClass(f.getBeanClass(), c))
 					return f;
 		return null;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/e7ab5a47/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
index b97ffad..3e57069 100644
--- a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
@@ -126,14 +126,9 @@ public final class ClassMeta<T> implements Type {
 	ClassMeta init() {
 
 		try {
-			Transform transform = findTransform(beanContext);
-			if (transform != null) {
-				if (transform.getType() == Transform.TransformType.BEAN)
-					beanFilter = (BeanFilter)transform;
-				else
-					pojoSwap = (PojoSwap)transform;
-				transformedClassMeta = (pojoSwap == null ? this : beanContext.getClassMeta(pojoSwap.getSwapClass()));
-			}
+			beanFilter = findBeanFilter(beanContext);
+			pojoSwap = findPojoSwap(beanContext);
+			transformedClassMeta = (pojoSwap == null ? this : beanContext.getClassMeta(pojoSwap.getSwapClass()));
 			if (transformedClassMeta == null)
 				transformedClassMeta = this;
 
@@ -428,23 +423,12 @@ public final class ClassMeta<T> implements Type {
 		return hasChildPojoSwaps;
 	}
 
-	private Transform findTransform(BeanContext context) {
+	@SuppressWarnings("unchecked")
+	private BeanFilter<? extends T> findBeanFilter(BeanContext context) {
 		try {
-			org.apache.juneau.annotation.Pojo b = innerClass.getAnnotation(org.apache.juneau.annotation.Pojo.class);
-			if (b != null) {
-				Class<?> c = b.swap();
-				if (c != Null.class) {
-					if (ClassUtils.isParentClass(PojoSwap.class, c)) 
-						return (Transform)c.newInstance();
-					throw new RuntimeException("TODO - Surrogate classes not yet supported.");
-				}
-			}
 			if (context == null)
 				return null;
-			Transform f = context.findBeanFilter(innerClass);
-			if (f != null)
-				return f;
-			f = context.findPojoSwap(innerClass);
+			BeanFilter<? extends T> f = context.findBeanFilter(innerClass);
 			if (f != null)
 				return f;
 			List<Bean> ba = ReflectionUtils.findAnnotations(Bean.class, innerClass);
@@ -456,6 +440,27 @@ public final class ClassMeta<T> implements Type {
 		}
 	}
 
+	@SuppressWarnings("unchecked")
+	private PojoSwap<T,?> findPojoSwap(BeanContext context) {
+		try {
+			Pojo p = innerClass.getAnnotation(Pojo.class);
+			if (p != null) {
+				Class<?> c = p.swap();
+				if (c != Null.class) {
+					if (ClassUtils.isParentClass(PojoSwap.class, c))
+						return (PojoSwap<T,?>)c.newInstance();
+					throw new RuntimeException("TODO - Surrogate classes not yet supported.");
+				}
+			}
+			if (context == null)
+				return null;
+			PojoSwap<T,?> f = context.findPojoSwap(innerClass);
+			return f;
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
 	/**
 	 * Locates the no-arg constructor for the specified class.
 	 * Constructor must match the visibility requirements specified by parameter 'v'.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/e7ab5a47/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilter.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilter.java b/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilter.java
index 0464fef..27dc211 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilter.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilter.java
@@ -28,9 +28,6 @@ import org.apache.juneau.internal.*;
  * 	This class can be considered a programmatic equivalent to using the {@link Bean @Bean} annotation on bean classes.
  * 	Thus, it can be used to perform the same function as the <code>@Bean</code> annotation when you don't have
  * 		the ability to annotate those classes (e.g. you don't have access to the source code).
- * <p>
- * 	Note that value returned by the {@link Transform#forClass()} method is automatically determined through reflection
- * 		when the no-arg constructor is used.
  *
  * <p>
  * 	When defining bean filters, you can either call the setters in the contructor, or override getters.
@@ -67,8 +64,9 @@ import org.apache.juneau.internal.*;
  * @author James Bognar (james.bognar@salesforce.com)
  * @param <T> The class type that this filter applies to.
  */
-public abstract class BeanFilter<T> extends Transform {
+public abstract class BeanFilter<T> {
 
+	private Class<T> beanClass;
 	private String[] properties, excludeProperties;
 	private LinkedHashMap<Class<?>, String> subTypes;
 	private String subTypeAttr;
@@ -82,7 +80,6 @@ public abstract class BeanFilter<T> extends Transform {
 	@SuppressWarnings("unchecked")
 	public BeanFilter() {
 		super();
-		this.type = TransformType.BEAN;
 
 		Class<?> c = this.getClass().getSuperclass();
 		Type t = this.getClass().getGenericSuperclass();
@@ -98,7 +95,7 @@ public abstract class BeanFilter<T> extends Transform {
 			if (pta.length > 0) {
 				Type nType = pta[0];
 				if (nType instanceof Class)
-					this.forClass = (Class<T>)nType;
+					this.beanClass = (Class<T>)nType;
 
 				else
 					throw new RuntimeException("Unsupported parameter type: " + nType);
@@ -125,11 +122,18 @@ public abstract class BeanFilter<T> extends Transform {
 	 * 	</dd>
 	 * </dl>
 	 *
-	 * @param forClass The class that this bean filter applies to.
+	 * @param beanClass The class that this bean filter applies to.
+	 */
+	public BeanFilter(Class<T> beanClass) {
+		this.beanClass = beanClass;
+	}
+
+	/**
+	 * Returns the bean class that this filter applies to.
+	 * @return The bean class that this filter applies to.
 	 */
-	public BeanFilter(Class<T> forClass) {
-		super(forClass);
-		this.type = TransformType.BEAN;
+	public Class<T> getBeanClass() {
+		return beanClass;
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/e7ab5a47/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
index deb9092..518fd2a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
@@ -89,7 +89,7 @@ import org.apache.juneau.serializer.*;
  * @param <T> The normal form of the class.
  * @param <S> The swapped form of the class.
  */
-public abstract class PojoSwap<T,S> extends Transform {
+public abstract class PojoSwap<T,S> {
 
 	Class<T> normalClass;
 	Class<S> swapClass;
@@ -294,11 +294,6 @@ public abstract class PojoSwap<T,S> extends Transform {
 	// Overridden methods
 	//--------------------------------------------------------------------------------
 
-	@Override /* Transform */
-	public Class<?> forClass() {
-		return normalClass;
-	}
-
 	@Override /* Object */
 	public String toString() {
 		return getClass().getSimpleName() + '<' + getNormalClass().getSimpleName() + "," + getSwapClass().getSimpleName() + '>';

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/e7ab5a47/juneau-core/src/main/java/org/apache/juneau/transform/Transform.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/Transform.java b/juneau-core/src/main/java/org/apache/juneau/transform/Transform.java
deleted file mode 100644
index 0fa213e..0000000
--- a/juneau-core/src/main/java/org/apache/juneau/transform/Transform.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
- * "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.transform;
-
-/**
- * Parent class for all bean and POJO swaps.
- *
- *
- * <h6 class='topic'>Description</h6>
- * <p>
- * 	Transforms are used to alter how POJOs are handled by bean contexts (and subsequently serializers and parsers).
- * 	The are a very powerful feature of the Juneau framework that allows virtually any POJO to be serialized and parsed.
- * 	For example, they can be used to...
- * <ul class='spaced-list'>
- * 	<li>Convert a non-serializable POJO into a serializable POJO during serialization (and optionally vis-versa during parsing).
- * 	<li>Control various aspects of beans, such as what properties are visible, bean subclasses, etc...
- * </ul>
- * <p>
- * 	There are 2 subclasses of transforms:
- * <ul class='spaced-list'>
- * 	<li>{@link PojoSwap} - Non-bean filters for converting POJOs into serializable equivalents.
- * 	<li>{@link BeanFilter} - Bean filters for configuring how beans are handled.
- * </ul>
- *
- *
- * <h6 class='topic'>Additional information</h6>
- * 	See {@link org.apache.juneau.transform} for more information.
- *
- *
- * @author James Bognar (james.bognar@salesforce.com)
- */
-public class Transform {
-
-	/** The transform subtype */
-	public static enum TransformType {
-		/** PojoSwap */
-		POJO,
-		/** BeanFilter */
-		BEAN
-	}
-
-	/** The class that this transform applies to. */
-	protected Class<?> forClass;
-
-	/** Whether this is a BeanFilter or PojoSwap. */
-	protected TransformType type = TransformType.POJO;
-
-	Transform() {}
-
-	Transform(Class<?> forClass) {
-		this.forClass = forClass;
-	}
-
-
-	/**
-	 * Returns the class that this transform applies to.
-	 *
-	 * @return The class that this transform applies to.
-	 */
-	public Class<?> forClass() {
-		return forClass;
-	}
-
-	/**
-	 * Returns whether this is an instance of {@link PojoSwap} or {@link BeanFilter}.
-	 *
-	 * @return The transform type.
-	 */
-	public TransformType getType() {
-		return type;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/e7ab5a47/juneau-core/src/test/java/org/apache/juneau/JacocoDummyTest.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/test/java/org/apache/juneau/JacocoDummyTest.java b/juneau-core/src/test/java/org/apache/juneau/JacocoDummyTest.java
index 3e6ca8d..85ede56 100755
--- a/juneau-core/src/test/java/org/apache/juneau/JacocoDummyTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/JacocoDummyTest.java
@@ -17,7 +17,6 @@ import java.lang.reflect.*;
 import org.apache.juneau.ini.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.jena.*;
-import org.apache.juneau.transform.*;
 import org.apache.juneau.xml.annotation.*;
 import org.junit.*;
 
@@ -41,7 +40,6 @@ public class JacocoDummyTest {
 		}
 
 		ConfigFileFormat.valueOf(ConfigFileFormat.INI.toString());
-		Transform.TransformType.valueOf(Transform.TransformType.POJO.toString());
 		RdfCollectionFormat.valueOf(RdfCollectionFormat.DEFAULT.toString());
 		XmlFormat.valueOf(XmlFormat.NORMAL.toString());
 		Visibility.valueOf(Visibility.DEFAULT.toString());