JSON: exclution of bean properties refatored
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Fri, 25 Jun 2010 12:58:18 +0000 (12:58 +0000)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Fri, 25 Jun 2010 12:58:18 +0000 (12:58 +0000)
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/json/processor/bean/AbstractCdmBeanProcessor.java
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/json/processor/bean/TermBaseBeanProcessor.java
cdmlib-remote/src/main/webapp/WEB-INF/jsonConfigurations.xml

index 2f3a56fcfa9b5b15b3e90f29ed73cd46c689b404..0c4624e7973deb0f1ef2b3b15f1a5d4546d9110a 100644 (file)
@@ -40,6 +40,50 @@ public abstract class AbstractCdmBeanProcessor<T extends CdmBase> implements Jso
        \r
        public static final Logger logger = Logger.getLogger(AbstractCdmBeanProcessor.class);\r
        \r
+       private Set<String> excludes = new HashSet<String>();\r
+       \r
+       public Set<String> getExcludes() {\r
+               return excludes;\r
+       }\r
+\r
+       /**\r
+        * This method allows supplying a List of property names to be ignored\r
+        * during the serialization to JSON. The <code>excludes</code> will be\r
+        * merged with the property names configured by subclasses which override\r
+        * {@link {@link #getIgnorePropNames()}.\r
+        * \r
+        * @param excludes\r
+        */\r
+       public void setExcludes(Set<String> excludes) {\r
+               this.excludes = excludes;\r
+       }\r
+       \r
+       /**\r
+        * Implementations of this abstract class may override this method in order\r
+        * to supply a List of property names to be ignored in\r
+        * {@link #processBean(Object, JsonConfig)}. This feature generally is used\r
+        * when {@link #processBeanSecondStep(CdmBase, JSONObject, JsonConfig)} is\r
+        * implemented. such that this method is responsible of serializing this\r
+        * property.\r
+        * \r
+        * @return a List of property names.\r
+        */\r
+       public abstract List<String> getIgnorePropNames();\r
+       \r
+       /**\r
+        * merges and returns {@link {@link #getIgnorePropNames()} with\r
+        * {@link #excludes}\r
+        * \r
+        * @return\r
+        */\r
+       protected Set<String> getMergedExcludes(){\r
+               Set<String> mergedExcludes = new HashSet<String>(excludes);\r
+               if(getIgnorePropNames() != null){\r
+                       mergedExcludes.addAll(getIgnorePropNames());                    \r
+               }\r
+               return mergedExcludes;\r
+       }\r
+\r
        /* (non-Javadoc)\r
         * @see net.sf.json.processors.JsonBeanProcessor#processBean(java.lang.Object, net.sf.json.JsonConfig)\r
         */\r
@@ -57,7 +101,7 @@ public abstract class AbstractCdmBeanProcessor<T extends CdmBase> implements Jso
                PropertyFilter jsonPropertyFilter = jsonConfig.getJsonPropertyFilter();\r
                for(PropertyDescriptor prop: props){\r
                        String key = prop.getName();\r
-                       if(getIgnorePropNames() != null && getIgnorePropNames().contains(key) || exclusions.contains(key)){\r
+                       if(getMergedExcludes().contains(key) || exclusions.contains(key)){\r
                                if(logger.isDebugEnabled()){\r
                                        logger.debug("skipping excluded property " + key);\r
                                }\r
@@ -120,17 +164,5 @@ public abstract class AbstractCdmBeanProcessor<T extends CdmBase> implements Jso
         */\r
        public abstract JSONObject processBeanSecondStep(T bean, JSONObject json, JsonConfig jsonConfig) ;\r
        \r
-       /**\r
-        * Implementations of this abstract class may override this method in order\r
-        * to supply a List of property names to be ignored in\r
-        * {@link #processBean(Object, JsonConfig)}. This feature generally is used\r
-        * when {@link #processBeanSecondStep(CdmBase, JSONObject, JsonConfig)} is\r
-        * implemented. such that this method is responsible of serializing this\r
-        * property.\r
-        * \r
-        * @return a List of property names.\r
-        */\r
-       public abstract List<String> getIgnorePropNames();\r
-       \r
 \r
 }
\ No newline at end of file
index 5772660bf298fabcf905f1228c87414edc7cf3fe..cdfcb3b5aee53c10561491beeae7559225089e0b 100644 (file)
@@ -38,9 +38,7 @@ public class TermBaseBeanProcessor extends AbstractCdmBeanProcessor<TermBase> {
        private static final List<String> IGNORE_LIST = Arrays.asList(new String[] { \r
                        "representations",\r
                        "inversRepresentations",\r
-                       "terms",\r
-                       "infraGenericMarker", //FIXME leads to IllegalStateException if not excluded\r
-                       "partOf" // exclude partOf to avoid  lazy loading exceptions,\r
+                       "terms"\r
                        });\r
 \r
        private boolean replaceRepresentations = false;\r
index 75b24ab4e0f49b5eeb82a44a9dcc24c7b0b2dd8e..3bbed9c481d162fcf370f973260304ebc79569ba 100644 (file)
                                        <bean class="eu.etaxonomy.cdm.remote.json.processor.bean.HibernateProxyBeanProcessor" />\r
                                </entry>\r
                                <entry key="eu.etaxonomy.cdm.model.common.TermBase">\r
-                                       <bean class="eu.etaxonomy.cdm.remote.json.processor.bean.TermBaseBeanProcessor" />\r
+                                       <bean class="eu.etaxonomy.cdm.remote.json.processor.bean.TermBaseBeanProcessor">\r
+                                          <property name="excludes">\r
+                            <set value-type="java.lang.String">\r
+                                <value>partOf</value><!-- FIXME exclude partOf to avoid  lazy loading exceptions  -->\r
+                                <value>infraGenericMarker</value><!-- FIXME leads to IllegalStateException if not excluded  -->\r
+                            </set>\r
+                        </property>\r
+                                       </bean>\r
                                </entry>\r
                                <entry key="eu.etaxonomy.cdm.model.description.TextData">\r
                                        <bean class="eu.etaxonomy.cdm.remote.json.processor.bean.TextDataBeanProcessor" />\r
                                        <bean\r
                                                class="eu.etaxonomy.cdm.remote.json.processor.bean.TermBaseBeanProcessor">\r
                                                <property name="replaceRepresentations" value="true" />\r
+                                               <property name="excludes">\r
+                            <set value-type="java.lang.String">\r
+                                <value>infraGenericMarker</value><!-- FIXME leads to IllegalStateException if not excluded  -->\r
+                                <value>partOf</value><!-- DefinedTermBase -->\r
+                                               <value>kindOf</value><!-- DefinedTermBase -->\r
+                                               <value>includes</value><!-- DefinedTermBase -->\r
+                                               <value>generalizationOf</value><!-- DefinedTermBase -->\r
+                                               <value>vocabulary</value><!-- DefinedTermBase -->\r
+                                               <!--\r
+                                                   FIXME must exclude partOf, kindOf, includes, generalizationOf .. to\r
+                                                   avoid class cast or lazy loading exceptions in TDWG Areas\r
+                                               -->\r
+                            </set>\r
+                        </property>\r
                                        </bean>\r
                                </entry>\r
                                <entry key="eu.etaxonomy.cdm.model.description.TextData">\r
                                <value>annotations</value>\r
                                <value>cacheStrategy</value>\r
                                <value>markers</value>\r
-                               <!--\r
-                                       FIXME must exclude partOf, kindOf, includes, generalizationOf .. to\r
-                                       avoid class cast or lazy loading exceptions in TDWG Areas\r
-                               -->\r
-                               <value>partOf</value><!-- DefinedTermBase? -->\r
-                               <value>kindOf</value><!-- DefinedTermBase? -->\r
-                               <value>includes</value>\r
-                               <value>generalizationOf</value><!-- DefinedTermBase -->\r
+                               \r
                                <value>inDescription</value>\r
-                               <value>vocabulary</value><!-- DefinedTermBase -->\r
                        </list>\r
                </property>\r
        </bean> \r