package org.test4j.datafilling.filler;
import org.test4j.datafilling.Filler;
import org.test4j.datafilling.common.AttributeInfo;
import org.test4j.datafilling.exceptions.PoJoFillException;
import org.test4j.datafilling.filler.primitive.BooleanFiller;
import org.test4j.datafilling.filler.primitive.ByteFiller;
import org.test4j.datafilling.filler.primitive.CharacterFiller;
import org.test4j.datafilling.filler.primitive.DoubleFiller;
import org.test4j.datafilling.filler.primitive.FloatFiller;
import org.test4j.datafilling.filler.primitive.IntegerFiller;
import org.test4j.datafilling.filler.primitive.LongFiller;
import org.test4j.datafilling.filler.primitive.ShortFiller;
import org.test4j.datafilling.strategy.DataFactory;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class PrimitiveFiller extends Filler {
public PrimitiveFiller(DataFactory strategy) {
super(strategy, null);
}
/**
* It resolves and returns the primitive value depending on the type
*
* @param primitiveClass The primitive type class
* @param attributeMetadata
* @return the primitive value depending on the type
*/
public <T> T fillingPrimitive(AttributeInfo attribute) {
PrimitiveFiller filler = this.getPrimitiveFiller(attribute);
Object retValue = filler.fillWith(attribute);
return (T) retValue;
}
protected Object fillWith(AttributeInfo attribute) {
throw new RuntimeException("implemented by sub class.");
}
private PrimitiveFiller getPrimitiveFiller(AttributeInfo primitiveAttribute) {
Class primitiveClass = primitiveAttribute.getAttrClaz();
if (primitiveClass.equals(int.class) || primitiveClass.equals(Integer.class)) {
return new IntegerFiller(strategy);
} else if (primitiveClass.equals(long.class) || primitiveClass.equals(Long.class)) {
return new LongFiller(strategy);
} else if (primitiveClass.equals(float.class) || primitiveClass.equals(Float.class)) {
return new FloatFiller(strategy);
} else if (primitiveClass.equals(double.class) || primitiveClass.equals(Double.class)) {
return new DoubleFiller(strategy);
} else if (primitiveClass.equals(boolean.class) || primitiveClass.equals(Boolean.class)) {
return new BooleanFiller(strategy);
} else if (primitiveClass.equals(byte.class) || primitiveClass.equals(Byte.class)) {
return new ByteFiller(strategy);
} else if (primitiveClass.equals(short.class) || primitiveClass.equals(Short.class)) {
return new ShortFiller(strategy);
} else if (primitiveClass.equals(char.class) || primitiveClass.equals(Character.class)) {
return new CharacterFiller(strategy);
} else {
throw new PoJoFillException(
"the class must be a primitive, but actual is " + primitiveClass == null ? "<null>"
: primitiveClass.getName());
}
}
}