org.opentripplanner.ext.transmodelapi.support.DataFetcherDecorator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
package org.opentripplanner.ext.transmodelapi.support;
import graphql.schema.DataFetchingEnvironment;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Consumer;
public class DataFetcherDecorator {
private final DataFetchingEnvironment environment;
public DataFetcherDecorator(DataFetchingEnvironment e) {
this.environment = e;
}
public void argument(String name, Consumer consumer) {
call(environment, name, consumer);
}
public void argument(String name, Consumer consumer, Runnable alternativeAction) {
if(GqlUtil.hasArgument(environment, name)) {
argument(name, consumer);
}
else {
alternativeAction.run();
}
}
private static void call(Map m, String name, Consumer consumer) {
if (!name.contains(".")) {
if (hasArgument(m, name)) {
T v = m.get(name);
consumer.accept(v);
}
} else {
String[] parts = name.split("\\.");
if (hasArgument(m, parts[0])) {
Map nm = (Map) m.get(parts[0]);
call(nm, String.join(".", Arrays.copyOfRange(parts, 1, parts.length)), consumer);
}
}
}
private static void call(DataFetchingEnvironment environment, String name, Consumer consumer) {
if (!name.contains(".")) {
if (GqlUtil.hasArgument(environment, name)) {
consumer.accept(environment.getArgument(name));
}
} else {
String[] parts = name.split("\\.");
if (GqlUtil.hasArgument(environment, parts[0])) {
Map nm = (Map) environment.getArgument(parts[0]);
call(nm, String.join(".", Arrays.copyOfRange(parts, 1, parts.length)), consumer);
}
}
}
public static boolean hasArgument(Map m, String name) {
return m.containsKey(name) && m.get(name) != null;
}
}