1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.betwixt.strategy;
18
19 import org.apache.commons.betwixt.AttributeDescriptor;
20 import org.apache.commons.betwixt.ElementDescriptor;
21
22 /***
23 * Determines whether the expression of an attribute with a values
24 * should be suppressed.
25 *
26 * @since 0.7
27 * @author <a href='http://jakarta.apache.org/commons'>Jakarta Commons Team</a>, <a href='http://www.apache.org'>Apache Software Foundation</a>
28 */
29 public abstract class ValueSuppressionStrategy {
30
31 /***
32 * Strategy allows all values to be expressed for all attributes
33 */
34 public static final ValueSuppressionStrategy ALLOW_ALL_VALUES = new ValueSuppressionStrategy() {
35 public boolean suppressAttribute(AttributeDescriptor attributeDescriptor, String value) {
36 return false;
37 }
38 };
39
40 /***
41 * Suppresses all null values.
42 */
43 public static final ValueSuppressionStrategy SUPPRESS_EMPTY = new ValueSuppressionStrategy() {
44 public boolean suppressAttribute(AttributeDescriptor attributeDescriptor, String value) {
45 return "".equals(value);
46 }
47 };
48
49 /***
50 * Default strategy is {@link #SUPPRESS_EMPTY}.
51 */
52 public static final ValueSuppressionStrategy DEFAULT = SUPPRESS_EMPTY;
53
54
55 /***
56 * Should the given attribute value be suppressed?
57 * @param attributeDescriptor <code>AttributeDescriptor</code> describing the attribute, not null
58 * @param value <code>Object</code> value, possibly null
59 * @return true if the attribute should not be written for the given value
60 */
61 public abstract boolean suppressAttribute(AttributeDescriptor attributeDescriptor, String value);
62
63 /***
64 * <p>
65 * Should be given element value be suppressed?
66 * </p><p>
67 * <strong>Note:</strong> to preserve binary compatibility,
68 * this method contains an implementation that returns false.
69 * Subclasses should not rely upon this behaviour as (in future)
70 * this may be made abstract.
71 * </p>
72 * @param element <code>ElementDescriptor</code> describing the element, not null
73 * @param namespaceUri the namespace of the element to be written
74 * @param localName the local name of the element to be written
75 * @param qualifiedName the qualified name of the element to be written
76 * @param value <code>Object</code> value, possibly null
77 * @return true if the element should be suppressed (in other words, not written)
78 * for the given value
79 * @since 0.8
80 */
81 public boolean suppressElement(ElementDescriptor element, String namespaceUri, String localName, String qualifiedName, Object value) {
82 return false;
83 }
84 }