01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * 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://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(
36: AttributeDescriptor attributeDescriptor, String value) {
37: return false;
38: }
39: };
40:
41: /**
42: * Suppresses all null values.
43: */
44: public static final ValueSuppressionStrategy SUPPRESS_EMPTY = new ValueSuppressionStrategy() {
45: public boolean suppressAttribute(
46: AttributeDescriptor attributeDescriptor, String value) {
47: return "".equals(value);
48: }
49: };
50:
51: /**
52: * Default strategy is {@link #SUPPRESS_EMPTY}.
53: */
54: public static final ValueSuppressionStrategy DEFAULT = SUPPRESS_EMPTY;
55:
56: /**
57: * Should the given attribute value be suppressed?
58: * @param attributeDescriptor <code>AttributeDescriptor</code> describing the attribute, not null
59: * @param value <code>Object</code> value, possibly null
60: * @return true if the attribute should not be written for the given value
61: */
62: public abstract boolean suppressAttribute(
63: AttributeDescriptor attributeDescriptor, String value);
64:
65: /**
66: * <p>
67: * Should be given element value be suppressed?
68: * </p><p>
69: * <strong>Note:</strong> to preserve binary compatibility,
70: * this method contains an implementation that returns false.
71: * Subclasses should not rely upon this behaviour as (in future)
72: * this may be made abstract.
73: * </p>
74: * @param element <code>ElementDescriptor</code> describing the element, not null
75: * @param namespaceUri the namespace of the element to be written
76: * @param localName the local name of the element to be written
77: * @param qualifiedName the qualified name of the element to be written
78: * @param value <code>Object</code> value, possibly null
79: * @return true if the element should be suppressed (in other words, not written)
80: * for the given value
81: * @since 0.8
82: */
83: public boolean suppressElement(ElementDescriptor element,
84: String namespaceUri, String localName,
85: String qualifiedName, Object value) {
86: return false;
87: }
88: }
|