package org.mapfish.print.attribute;
import org.json.JSONException;
import org.json.JSONWriter;
import org.mapfish.print.config.Configuration;
import org.mapfish.print.config.Template;
import java.util.List;
/**
* A type of attribute whose value is a primitive type.
* <ul>
* <li>{@link java.lang.String}</li>
* <li>{@link java.lang.String[]}</li>
* <li>{@link java.lang.Integer}</li>
* <li>{@link java.lang.Double}</li>
* <li>{@link java.lang.Boolean}</li>
* </ul>
*
* @param <Value> The value type of the attribute
*/
public abstract class PrimitiveAttribute<Value> implements Attribute {
private Class<Value> valueClass;
/** The default value. */
protected Value defaultValue;
private String configName;
/**
* Constructor.
*
* @param valueClass the type of the value of this attribute
*/
public PrimitiveAttribute(final Class<Value> valueClass) {
this.valueClass = valueClass;
}
public final Class<Value> getValueClass() {
return this.valueClass;
}
/**
* <p>A default value for this attribute.</p>
* @param value The default value.
*/
public abstract void setDefault(final Value value);
public final Value getDefault() {
return this.defaultValue;
}
@Override
public final void setConfigName(final String configName) {
this.configName = configName;
}
@Override
public void validate(final List<Throwable> validationErrors, final Configuration configuration) {
// no checks required
}
/**
* Validation of the value from a request.
* @param value The value from a request.
*/
public void validateValue(final Object value) {
}
@Override
public final void printClientConfig(final JSONWriter json, final Template template) throws JSONException {
json.key(ReflectiveAttribute.JSON_NAME).value(this.configName);
json.key(ReflectiveAttribute.JSON_ATTRIBUTE_TYPE).value(clientConfigTypeDescription());
if (getDefault() != null) {
json.key(ReflectiveAttribute.JSON_ATTRIBUTE_DEFAULT).value(getDefault());
}
}
/**
* Returns a string that is a technical description of the type. In other words, a string that the client software
* (user of the capabilities response) can use to create a request or UI.
*/
protected String clientConfigTypeDescription() {
return this.valueClass.getSimpleName();
}
}