View Javadoc

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  }