package org.test4j.datafilling.filler.primitive;
import java.lang.annotation.Annotation;
import org.test4j.datafilling.annotations.FillChar;
import org.test4j.datafilling.common.AttributeInfo;
import org.test4j.datafilling.filler.PrimitiveFiller;
import org.test4j.datafilling.strategy.DataFactory;
public class CharacterFiller extends PrimitiveFiller {
public CharacterFiller(DataFactory strategy) {
super(strategy);
}
private FillChar getFilling(AttributeInfo attribute) {
for (Annotation annotation : attribute.getAttrAnnotations()) {
if (FillChar.class.isAssignableFrom(annotation.getClass())) {
final FillChar filling = (FillChar) annotation;
return filling;
}
}
return null;
}
@Override
public Character fillWith(AttributeInfo attribute) {
FillChar filling = this.getFilling(attribute);
if (filling == null) {
return strategy.getCharacter(null);
}
Character value = getCharacterValueWithinRange(filling, null);
if (value == null) {
value = strategy.getCharacter(null);
}
return value;
}
/**
* It creates and returns a random {@link Character} value
*
* @param annotations The list of annotations which might customise the
* return value
* @param attributeMetadata
* @return A random {@link Character} value
*/
private Character getCharacterValueWithinRange(FillChar filling, AttributeInfo attribute) {
Character retValue = null;
char charValue = filling.value();
if (charValue != ' ') {
retValue = charValue;
} else {
char minValue = filling.min();
char maxValue = filling.max();
// Sanity check
if (minValue > maxValue) {
maxValue = minValue;
}
retValue = strategy.getCharacterInRange(minValue, maxValue, attribute);
}
return retValue;
}
}