package org.smoothbuild.lang.function.base;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
public class Parameters {
public static ImmutableList<Parameter> filterRequiredParameters(Iterable<Parameter> parameters) {
return filterParameters(parameters, true);
}
public static ImmutableList<Parameter> filterOptionalParameters(Iterable<Parameter> parameters) {
return filterParameters(parameters, false);
}
private static ImmutableList<Parameter> filterParameters(Iterable<Parameter> parameters,
boolean isRequired) {
ImmutableList.Builder<Parameter> builder = ImmutableList.builder();
for (Parameter parameter : parameters) {
if (parameter.isRequired() == isRequired) {
builder.add(parameter);
}
}
return builder.build();
}
public static ImmutableList<String> parametersToNames(Iterable<Parameter> params) {
ImmutableList.Builder<String> builder = ImmutableList.builder();
for (Parameter parameter : params) {
builder.add(parameter.name());
}
return builder.build();
}
public static ImmutableMap<String, Parameter> parametersToMap(Parameter... parameters) {
return parametersToMap(Arrays.asList(parameters));
}
public static ImmutableMap<String, Parameter> parametersToMap(Iterable<Parameter> params) {
ImmutableMap.Builder<String, Parameter> builder = ImmutableMap.builder();
for (Parameter parameter : params) {
builder.put(parameter.name(), parameter);
}
return builder.build();
}
/**
* @return Parameters ordered lexicographically by their names.
*/
public static ImmutableList<Parameter> sortedParameters(Iterable<Parameter> params) {
Set<String> names = new HashSet<>();
ImmutableList.Builder<Parameter> builder = ImmutableList.builder();
for (Parameter parameter : ParameterOrdering.PARAMETER_ORDERING.sortedCopy(params)) {
String name = parameter.name();
if (names.contains(name)) {
throw new IllegalArgumentException("Duplicate param name = '" + name + "'");
}
builder.add(parameter);
names.add(name);
}
return builder.build();
}
}