package org.jtwig.property.strategy.method.convert;
import com.google.common.base.Optional;
import org.jtwig.property.strategy.method.argument.AssignableTypes;
import org.jtwig.property.strategy.method.argument.IsNativeType;
import org.jtwig.reflection.model.Value;
public class NativeTypeConverter implements Converter {
private final IsNativeType isNativeType;
private final AssignableTypes assignableTypes;
public NativeTypeConverter(IsNativeType isNativeType, AssignableTypes assignableTypes) {
this.isNativeType = isNativeType;
this.assignableTypes = assignableTypes;
}
@Override
public Optional<Value> convert(Object value, Class type) {
if ((value != null)) {
if (assignableTypes.isAssignable(type, value.getClass())) {
return Optional.of(new Value(value));
} else {
return Optional.absent();
}
} else {
if (isNativeType.isNative(type)) {
return Optional.absent();
} else {
return Optional.of(new Value(null));
}
}
}
}