\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
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
*/\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
<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