1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
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://commons.apache.org'>Apache 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 }