package org.springframework.roo.model;
import org.apache.commons.lang3.Validate;
/**
* Assists in the creation of a {@link Builder} for types that eventually
* implement {@link CustomDataAccessor}.
*
* @author Ben Alex
* @since 1.1
*/
public abstract class AbstractCustomDataAccessorBuilder<T extends CustomDataAccessor> implements
Builder<T> {
private CustomDataBuilder customDataBuilder;
/**
* Constructor for an empty builder
*/
protected AbstractCustomDataAccessorBuilder() {
this.customDataBuilder = new CustomDataBuilder();
}
/**
* Constructor for a builder initialised with the given custom data
*
* @param existing can't be <code>null</code>
*/
protected AbstractCustomDataAccessorBuilder(final CustomDataAccessor existing) {
Validate.notNull(existing, "Custom data accessor required");
this.customDataBuilder = new CustomDataBuilder(existing.getCustomData());
}
/**
* Appends the given custom data to this builder
*
* @param customDataBuilder the custom data to append; can be
* <code>null</code> to make no changes
*/
public void append(final CustomData customData) {
if (customData != null) {
// Set the custom data builder to a new instance containing both
// builders' values
final CustomDataBuilder customDataBuilder = new CustomDataBuilder(customData);
customDataBuilder.append(this.customDataBuilder.build());
this.customDataBuilder = customDataBuilder;
}
}
public CustomDataBuilder getCustomData() {
return this.customDataBuilder;
}
public Object putCustomData(final Object key, final Object value) {
return customDataBuilder.put(key, value);
}
/**
* Sets this builder's {@link CustomDataBuilder} to the given one (does not
* take a copy)
*
* @param customDataBuilder the builder to set (required)
*/
public void setCustomData(final CustomDataBuilder customDataBuilder) {
Validate.notNull(customDataBuilder, "Custom data builder required");
this.customDataBuilder = customDataBuilder;
}
}