Author: gk
Date: Wed Jun 10 09:28:02 2015
New Revision: 1684614

URL: http://svn.apache.org/r1684614
Log:
- adding log support for SimpleNameIntrospector.java
- javadoc update
- added test  

Modified:
    
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
    
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java
    
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
    
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java

Modified: 
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java?rev=1684614&r1=1684613&r2=1684614&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
 (original)
+++ 
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
 Wed Jun 10 09:28:02 2015
@@ -157,7 +157,7 @@ public interface JsonService {
      * @param src
      *            The Java object to serialize
      * @param filterClass
-     *            By default filterClass is the key in the filter object 
cached. 
+     *            By default filterClass is a) the class to be filtered 
(required for filtering list elements) b) the key in the filter object cached. 
      *            
      * @param cleanFilter
      *             The Boolean value, not null. If it is <code>true</code>, 
cleans cache and the custom filter after serialization.

Modified: 
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java?rev=1684614&r1=1684613&r2=1684614&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java
 (original)
+++ 
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java
 Wed Jun 10 09:28:02 2015
@@ -31,6 +31,7 @@ import org.apache.avalon.framework.confi
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.logger.LogEnabled;
 import org.apache.fulcrum.json.JsonService;
 import org.apache.fulcrum.json.jackson.filters.CustomModuleWrapper;
 
@@ -361,7 +362,9 @@ public class Jackson2MapperService exten
     /**
      * 
      * @param src The source Object to be filtered.
-     * @param filterClass Explicit class as a class filter, which is only used 
as a filter in {@link #serializeAllExceptFilter(Object, Class, String...)}. In 
all other cases this is set to src objects´s source class to become the key in 
the filter object cache.
+     * @param filterClass This Class array contains at least one element. If 
no class is provided it is the class type of the source object. 
+     * Setting a class filter explicitely should only used as a filter in 
{@link #serializeAllExceptFilter(Object, Class, String...)}. 
+     * In any case the filterClass is to become the key in the filter object 
cache.
      * This is because, no use case was found to include just one class in a 
filter, e.g. in @link {@link #serializeOnlyFilter(Object, Class, Boolean, 
String...)}, i.e. just serializing only a provided filter class. 
      * @param pf Expecting a property filter from e.g @link {@link 
SimpleBeanPropertyFilter}.
      * @param clean if <code>true</code> does not reuse the filter object (no 
cashing).
@@ -379,7 +382,7 @@ public class Jackson2MapperService exten
         String serialized = ser(src, filter, clean);
         if (!cacheFilters || clean) {
             if (src != null) {
-                cacheService.removeFilter(src.getClass(), excludeType);
+                cacheService.removeFilter(src.getClass(), excludeType);// 
reset required, just use filteredClasses[0]?
             } else if (filterClasses.length >0) {
                 cacheService.removeFilter(filterClasses[0], excludeType);
             }
@@ -391,9 +394,10 @@ public class Jackson2MapperService exten
     private <T> FilterProvider checkFilter(PropertyFilter pf,
             Class rootFilterClass, Class<T>[] filterClasses,  Boolean 
excludeType) {
         SimpleFilterProvider filter = null;
-        if (filterClasses == null ) {
+        if (filterClasses == null ) { // never happens actually
             filter = retrieveFilter(pf, new Class[]{ rootFilterClass }, 
excludeType);
         } else {
+            // this is the case if we have no explicit class filter
             if (filterClasses.length > 0 && 
!rootFilterClass.equals(filterClasses[0])) {
                 filter = retrieveFilter(pf,  rootFilterClass, filterClasses, 
excludeType );
             } else {
@@ -403,7 +407,8 @@ public class Jackson2MapperService exten
         return filter;
     }
     
-    private <T> SimpleFilterProvider retrieveFilter(PropertyFilter pf, 
Class<T> cachefilterClass, Class<T>[] filterClasses, Boolean excludeType ) {
+    private <T> SimpleFilterProvider retrieveFilter(PropertyFilter pf, 
Class<T> cachefilterClass, 
+            Class<T>[] filterClasses, Boolean excludeType ) {
         SimpleFilterProvider filter = null;
         if (pf != null) {
             filter = new SimpleFilterProvider();
@@ -588,6 +593,21 @@ public class Jackson2MapperService exten
         } else {
             mapper.setAnnotationIntrospector(primary);
         }
+        
+        if (primary instanceof LogEnabled)
+        {
+            
((LogEnabled)primary).enableLogging(getLogger().getChildLogger(primary.getClass().getSimpleName()));
+            getLogger().info(
+                    "setting primary introspector logger: "
+                            + primary.getClass().getSimpleName());
+        }
+        if (secondary instanceof LogEnabled)
+        {
+            
((LogEnabled)secondary).enableLogging(getLogger().getChildLogger(secondary.getClass().getSimpleName()));
+            getLogger().info(
+                    "setting secondary introspector logger: "
+                            + primary.getClass().getSimpleName());
+        }
 
         if (features != null) {
             Enumeration<String> enumFeatureKey = features.keys();

Modified: 
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java?rev=1684614&r1=1684613&r2=1684614&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
 (original)
+++ 
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
 Wed Jun 10 09:28:02 2015
@@ -23,6 +23,9 @@ import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+
 import com.fasterxml.jackson.databind.introspect.Annotated;
 import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
 import com.fasterxml.jackson.databind.introspect.NopAnnotationIntrospector;
@@ -39,7 +42,7 @@ import com.fasterxml.jackson.databind.se
  * @version $Id$
  * 
  */
-public class SimpleNameIntrospector extends NopAnnotationIntrospector {
+public class SimpleNameIntrospector extends NopAnnotationIntrospector 
implements LogEnabled {
     /**
      * 
      */
@@ -49,12 +52,13 @@ public class SimpleNameIntrospector exte
     private List<String> externalFilterExcludeClasses = new 
CopyOnWriteArrayList<String>();
     private List<String> externalFilterIncludeClasses = new 
CopyOnWriteArrayList<String>();
     private AtomicBoolean isExludeType = new AtomicBoolean(false);
+    
+    private Logger logger;
 
     /**
      * Filtering on method types.
      * 
      */
-    @Override
     public Boolean isIgnorableType(AnnotatedClass ac) {
         Boolean isIgnorable = super.isIgnorableType(ac);
         if (isIgnorable == null || !isIgnorable) {
@@ -83,7 +87,6 @@ public class SimpleNameIntrospector exte
      *         {@link #filteredClasses} contains the class provided. The
      *         filter itself currently is {@link SimpleFilterProvider}.
      */
-    @Override
     public Object findFilterId(Annotated ac) {
         Object id = super.findFilterId(ac);
         // Let's default to current behavior if annotation is found:
@@ -95,17 +98,20 @@ public class SimpleNameIntrospector exte
             if (!filteredClasses.isEmpty()
                     && filteredClasses.contains(targetClazz)
                     ) {
+                logger.debug("filter applying to " +name);
                 id = name;
             } else {
                 // check if target class is a child from filter class -> apply 
filter 
                 for (Class<?> filterClazz : filteredClasses) {
                     // the currently checked class /targetClazz could be child 
to the filter class /filterClazz ->  filter child 
                     if (filterClazz.isAssignableFrom(targetClazz)) {
+                        logger.debug("filter applying to parent " +filterClazz 
+" matching child class "+name );
                         id = name;
                         break;
                     }
                  // the currently checked class /targetClazz could be parent 
to the filter class /filterClazz -> filter parent
                     if (targetClazz.isAssignableFrom(filterClazz)) {
+                        logger.debug("filter applying to child " 
+filterClazz+" matching parent class "+name);
                         id = name;
                         break;
                     }
@@ -185,5 +191,9 @@ public class SimpleNameIntrospector exte
     public void setIsExludeType(boolean isExludeType) {
         this.isExludeType.getAndSet(isExludeType);
     }
+    @Override
+    public void enableLogging(Logger logger) {
+        this.logger = logger;        
+    }
 
 }
\ No newline at end of file

Modified: 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java
URL: 
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java?rev=1684614&r1=1684613&r2=1684614&view=diff
==============================================================================
--- 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java
 (original)
+++ 
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java
 Wed Jun 10 09:28:02 2015
@@ -27,6 +27,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.avalon.framework.logger.ConsoleLogger;
 import org.apache.fulcrum.json.JsonService;
 import org.apache.fulcrum.json.Rectangle;
 import org.apache.fulcrum.json.TestClass;
@@ -56,6 +57,7 @@ public class DefaultServiceTest extends
     }
 
     public void setUp() throws Exception {
+        setLogLevel(ConsoleLogger.LEVEL_DEBUG);
         super.setUp();
         sc = (JsonService) this.lookup(JsonService.ROLE);
     }
@@ -251,7 +253,7 @@ public class DefaultServiceTest extends
                 rectangle);
     }
     
-    public void testSerializeAllExceptaANDWithOnlyFilter2() throws Exception {
+    public void testSerializeAllExceptANDWithOnlyFilter2() throws Exception {
         
         String serJson = sc.serializeAllExceptFilter(new 
TestClass("mytest"),"configurationName");
         assertEquals("Serialization failed ",
@@ -272,6 +274,20 @@ public class DefaultServiceTest extends
                 rectangle);
     }
     
+    public void testSerializeBeanWithOnlyFilter() throws Exception {
+        Bean bean = new BeanChild();
+        bean.setAge(1);bean.setName("bean1");
+        assertEquals("{\"name\":\"bean1\"}",sc.serializeOnlyFilter(bean, 
true,"name"));
+        assertEquals("{\"name\":\"bean1\"}",sc.serializeOnlyFilter(bean, 
Bean.class, true,"name")); // parent filter
+        assertEquals("{\"name\":\"bean1\"}",sc.serializeOnlyFilter(bean, 
BeanChild.class, true,"name"));
+        bean = new Bean();
+        bean.setAge(0);bean.setName("bean0");
+        assertEquals("{\"name\":\"bean0\"}",sc.serializeOnlyFilter(bean, 
true,"name"));
+        assertEquals("{\"name\":\"bean0\"}",sc.serializeOnlyFilter(bean, 
Bean.class, true,"name"));
+        assertEquals("{\"name\":\"bean0\"}",sc.serializeOnlyFilter(bean, 
BeanChild.class, true,"name"));// child filter
+        
+    }
+    
     public void testSerializeCollectionWithOnlyFilterAndParentClass() throws 
Exception {
         
         List<BeanChild> beanList = new ArrayList<BeanChild>();


Reply via email to