package org.jtwig.property.strategy.method;
import com.google.common.base.Optional;
import org.jtwig.property.strategy.method.argument.group.ArgumentGroup;
import org.jtwig.property.strategy.method.argument.group.GroupingArgumentsService;
import org.jtwig.property.strategy.method.convert.Converter;
import org.jtwig.reflection.model.Value;
import org.jtwig.reflection.model.java.JavaMethod;
import java.util.ArrayList;
import java.util.List;
public class ArgumentsConverter {
private final Converter converter;
private final GroupingArgumentsService groupingArgumentsService;
public ArgumentsConverter(Converter converter, GroupingArgumentsService groupingArgumentsService) {
this.converter = converter;
this.groupingArgumentsService = groupingArgumentsService;
}
public Optional<Object[]> convert(JavaMethod method, Object[] objects) {
Optional<List<ArgumentGroup>> groupArguments = groupingArgumentsService.groupArguments(method, objects);
if (groupArguments.isPresent()) {
List<ArgumentGroup> argumentGroups = groupArguments.get();
List<Object> argumentValues = new ArrayList<>();
for (ArgumentGroup argumentGroup : argumentGroups) {
Optional<Value> argumentValue = argumentGroup.toArgument(converter);
if (argumentValue.isPresent()) argumentValues.add(argumentValue.get().getValue());
else return Optional.absent();
}
return Optional.of(argumentValues.toArray());
}
return Optional.absent();
}
}