package org.springframework.roo.classpath.details;
import org.apache.commons.lang3.Validate;
import org.springframework.roo.metadata.MetadataIdentificationUtils;
import org.springframework.roo.model.AbstractCustomDataAccessorBuilder;
import org.springframework.roo.model.Builder;
/**
* Assists in the creation of a {@link Builder} for types that eventually
* implement {@link IdentifiableJavaStructure}.
*
* @author Ben Alex
* @since 1.1
*/
public abstract class AbstractIdentifiableJavaStructureBuilder<T extends IdentifiableJavaStructure>
extends AbstractCustomDataAccessorBuilder<T> {
private final String declaredByMetadataId;
private int modifier;
/**
* Constructor
*
* @param existing
*/
protected AbstractIdentifiableJavaStructureBuilder(final IdentifiableJavaStructure existing) {
super(existing);
this.declaredByMetadataId = existing.getDeclaredByMetadataId();
this.modifier = existing.getModifier();
}
/**
* Constructor
*
* @param declaredByMetadataId
*/
protected AbstractIdentifiableJavaStructureBuilder(final String declaredByMetadataId) {
Validate.isTrue(MetadataIdentificationUtils.isIdentifyingInstance(declaredByMetadataId),
"Declared by metadata ID must identify a specific instance (not '%s')",
declaredByMetadataId);
this.declaredByMetadataId = declaredByMetadataId;
}
/**
* Constructor
*
* @param declaredbyMetadataId
* @param existing
*/
protected AbstractIdentifiableJavaStructureBuilder(final String declaredbyMetadataId,
final IdentifiableJavaStructure existing) {
super(existing);
this.declaredByMetadataId = declaredbyMetadataId;
this.modifier = existing.getModifier();
}
public String getDeclaredByMetadataId() {
return declaredByMetadataId;
}
public final int getModifier() {
return modifier;
}
/**
* Sets the modifier of the built Java structure
*
* @param modifier the modifier to set
* @see Modifier#PUBLIC, etc.
*/
public final void setModifier(final int modifier) {
this.modifier = modifier;
}
}