/* Copyright (c) 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.gdata.data;
import java.util.LinkedHashMap;
/**
* Helps generate tag attributes, preserving the order of the attributes.
* Attributes whose the value is {@code null} are ignored when generating XML.
*
*
*/
public class AttributeGenerator extends LinkedHashMap<String, String> {
/** element's text content or {@code null} for no text content */
private String content = null;
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
/**
* Associates the specified long value with the specified key in this map. If
* the map previously contained a mapping for this key, the old value is
* replaced.
*
* @param key key with which the specified value is to be associated
* @param value long value to be associated with the specified key
*/
public void put(String key, long value) {
put(key, Long.toString(value));
}
/**
* Associates the specified boolean value with the specified key in this map.
* If the map previously contained a mapping for this key, the old value is
* replaced.
*
* @param key key with which the specified value is to be associated
* @param value boolean value to be associated with the specified key
*/
public void put(String key, boolean value) {
put(key, Boolean.toString(value));
}
/**
* Associates the specified float value with the specified key in this map. If
* the map previously contained a mapping for this key, the old value is
* replaced.
*
* @param key key with which the specified value is to be associated
* @param value float value to be associated with the specified key
*/
public void put(String key, float value) {
if (value == Float.POSITIVE_INFINITY) {
put(key, "INF");
} else if (value == Float.NEGATIVE_INFINITY) {
put(key, "-INF");
} else {
put(key, Float.toString(value));
}
}
/**
* Associates the specified double value with the specified key in this map.
* If the map previously contained a mapping for this key, the old value is
* replaced.
*
* @param key key with which the specified value is to be associated
* @param value double value to be associated with the specified key
*/
public void put(String key, double value) {
if (value == Double.POSITIVE_INFINITY) {
put(key, "INF");
} else if (value == Double.NEGATIVE_INFINITY) {
put(key, "-INF");
} else {
put(key, Double.toString(value));
}
}
/**
* Associates the specified Object's {@link #toString()} value with the
* specified key in this map. If the map previously contained a mapping for
* this key, the old value is replaced.
*
* @param key key with which the specified value is to be associated
* @param value Object whose {@link #toString()} value is to be associated
* with the specified key or <code>null</code>
*/
public void put(String key, Object value) {
if (value == null) {
super.put(key, null);
} else if (value instanceof Float) {
Float boxedFloat = (Float) value;
put(key, boxedFloat.floatValue());
} else if (value instanceof Double) {
Double boxedDouble = (Double) value;
put(key, boxedDouble.doubleValue());
} else {
put(key, value.toString());
}
}
/**
* Associates the specified enum value with the specified key in this map. If
* the map previously contained a mapping for this key, the old value is
* replaced.
*
* @param key key with which the specified value is to be
* associated
* @param value enum value to be associated with the specified
* key or <code>null</code>
* @param enumToAttributeValue custom mapping of enum to attribute value
*/
public <T extends Enum<T>> void put(String key, T value,
AttributeHelper.EnumToAttributeValue<T> enumToAttributeValue) {
put(key, value == null
? null : enumToAttributeValue.getAttributeValue(value));
}
}