/** applies f1 to the input, then f2 to that result, then f3 to that result, then f4 to that result */ public static <A,B,C,D,E> Function<A,E> chain(final Function<A,? extends B> f1, final Function<B,? extends C> f2, final Function<C,? extends D> f3, final Function<D,E> f4) { return chain(f1, chain(f2, chain(f3, f4))); }
/** * @deprecated since 0.9.0; use {@link Functionals#chain(Function, Function, Function)} */ @Deprecated public static <A,B,C,D> Function<A,D> chain(final Function<A,? extends B> f1, final Function<B,? extends C> f2, final Function<C,D> f3) { return Functionals.chain(f1, f2, f3); } }
/** * @deprecated since 0.9.0; use {@link Functionals#chain(Function, Function)} */ @Deprecated public static <A,B,C> Function<A,C> chain(final Function<A,? extends B> f1, final Function<B,C> f2) { return Functionals.chain(f1, f2); }
/** @deprecated since 0.7.0 use {@link Functionals#chain(Function, Function)} */ @Deprecated public static <A,B,C> Function<A,C> chain(final Function<A,? extends B> f1, final Function<B,C> f2) { return Functionals.chain(f1, f2); }
/** @deprecated since 0.7.0 use {@link Functionals#chain(Function, Function, Function)} */ @Deprecated public static <A,B,C,D> Function<A,D> chain(final Function<A,? extends B> f1, final Function<B,? extends C> f2, final Function<C,D> f3) { return Functionals.chain(f1, f2, f3); }
/** @deprecated since 0.7.0 use {@link Functionals#chain(Function, Function, Function, Function)} */ @Deprecated public static <A,B,C,D,E> Function<A,E> chain(final Function<A,? extends B> f1, final Function<B,? extends C> f2, final Function<C,? extends D> f3, final Function<D,E> f4) { return Functionals.chain(f1, f2, f3, f4); }
/** * @deprecated since 0.9.0; use {@link Functionals#chain(Function, Function)} and {@link MathFunctions#divide(double)} */ @Deprecated public static <T> Function<T, Double> divide(final Function<T, ? extends Number> preprocessor, final double divisor) { return Functionals.chain(preprocessor, divide(divisor)); }
public static Function<HttpToolResponse, Boolean> responseCodeEquals(final int... expected) { List<Integer> expectedList = Lists.newArrayList(); for (int e : expected) { expectedList.add(e); } return Functionals.chain(HttpValueFunctions.responseCode(), Functions.forPredicate(Predicates.in(expectedList))); }
public static Function<HttpToolResponse, Boolean> responseCodeEquals(final int expected) { return Functionals.chain(HttpValueFunctions.responseCode(), Functions.forPredicate(Predicates.equalTo(expected))); }
public static <T> Function<HttpToolResponse, T> jsonContentsFromPath(String path){ return Functionals.chain(jsonContents(), JsonFunctions.<T>getPath(path)); }
public static <T> Function<Maybe<JsonElement>, T> castM(final Class<T> expected) { return Functionals.chain(MaybeFunctions.<JsonElement>get(), cast(expected)); }
public static Function<HttpToolResponse, JsonElement> jsonContents() { return Functionals.chain(stringContentsFunction(), JsonFunctions.asJson()); }
public static <T> Function<HttpToolResponse, T> jsonContents(String[] elements, Class<T> expected) { return Functionals.chain(jsonContents(), JsonFunctions.walk(elements), JsonFunctions.cast(expected)); }
@Override public ManagementNodeState call(ConfigBag parameters) { HighAvailabilityMode mode = parameters.get(MODE); Preconditions.checkNotNull(mode, MODE.getName() + " parameter is required"); EntityHttpClient httpClient = ((BrooklynNode)entity()).http(); HttpToolResponse resp = httpClient.post("/v1/server/ha/state", ImmutableMap.of("Brooklyn-Allow-Non-Master-Access", "true"), ImmutableMap.of("mode", mode.toString())); if (resp.getResponseCode() == HttpStatus.SC_OK) { Function<HttpToolResponse, ManagementNodeState> parseRespone = Functionals.chain( Functionals.chain(HttpValueFunctions.jsonContents(), JsonFunctions.cast(String.class)), Enums.fromStringFunction(ManagementNodeState.class)); return parseRespone.apply(resp); } else { throw new IllegalStateException("Unexpected response code: " + resp.getResponseCode() + "\n" + resp.getContentAsString()); } } }
@Test public void testWalk2() { String weather = Functionals.chain( JsonFunctions.walk("europe.uk.edinburgh.weather"), JsonFunctions.cast(String.class) ).apply(europeMap()); Assert.assertEquals(weather, "wet"); }
@Test(expectedExceptions=NoSuchElementException.class) public void testWalkWrong() { Functionals.chain( JsonFunctions.walk("europe", "spain", "barcelona"), JsonFunctions.cast(String.class) ).apply(europeMap()); }
private <T> T parseJson(String json, List<String> elements, Class<T> clazz) { Function<String, T> func = Functionals.chain( JsonFunctions.asJson(), JsonFunctions.walk(elements), JsonFunctions.cast(clazz)); return func.apply(json); }