@GET @Produces(MediaType.APPLICATION_JSON) @Path(value = "/filters/options") public FilterOptions getGlobalFilterOptions() { return new FilterOptions.Builder().addOp(Op.DEFAULT_OPTS).build(); }
private Filter createFilter(FilterStep s) { Filter ret = new Filter(); ret.setExpression(s.getFilterExpression()); return ret; }
@Test public void createExpression() { Map<String, String> props = new ConcurrentHashMap<>(); props.put("predicate", FilterPredicate.AND.toString()); props.put("rules","[ { \"path\": \"person.name\", \"op\": \"==\", \"value\": \"Ioannis\"}, " + " { \"path\": \"person.favoriteDrinks\", \"op\": \"contains\", \"value\": \"Gin\" } ]"); RuleFilterStep step = new RuleFilterStep.Builder() .id("1") .configuredProperties(props) .build(); // Reading notes: Unit tests are like personal diaries. Feel honoured when you have the chance to be part of them ;-) assertEquals("${body.person.name} == 'Ioannis' && ${body.person.favoriteDrinks} contains 'Gin'", step.getFilterExpression()); } }
target = new ExpressionFilterStep.Builder() .createFrom(source) .putMetadata(Step.METADATA_STEP_INDEX, Integer.toString(i)) .build(); } else if (RuleFilterStep.STEP_KIND.equals(source.getStepKind())) { target = new RuleFilterStep.Builder() .createFrom(source) .putMetadata(Step.METADATA_STEP_INDEX, Integer.toString(i)) .build(); } else { SimpleStep.Builder stepBuilder = new SimpleStep.Builder();
.putConfiguredProperty("atlasmapping", "{}") .build(), new RuleFilterStep.Builder() .putConfiguredProperty("predicate", FilterPredicate.AND.toString()) .putConfiguredProperty("rules", "[{ \"path\": \"in.header.counter\", \"op\": \">\", \"value\": \"10\" }]") .build(), new SimpleStep.Builder() .stepKind("extension")
@Test public void shouldDeserializeRuleFilterStep() throws IOException { RuleFilterStep step = readTestFilter("/rule-filter-step.json", RuleFilterStep.class); assertEquals("1", step.getId().get()); assertFalse(step.getConfiguredProperties().isEmpty()); Map<String, String> props = step.getConfiguredProperties(); assertEquals(FilterPredicate.AND, FilterPredicate.valueOf(props.get("predicate").toUpperCase(Locale.US))); assertNotNull(props.get("rules")); assertEquals("rule-filter", step.getStepKind()); assertEquals("${body.text} == 'antman' && ${body.kind} =~ 'DC Comics'", step.getFilterExpression()); }
@POST @Produces(MediaType.APPLICATION_JSON) @Path(value = "/filters/options") public FilterOptions getFilterOptions(DataShape dataShape) { FilterOptions.Builder builder = new FilterOptions.Builder().addOp(Op.DEFAULT_OPTS); final List<String> paths = inspectors.getPaths(dataShape.getKind().toString(), dataShape.getType(), dataShape.getSpecification(), dataShape.getExemplar()); builder.paths(paths); return builder.build(); }
@Test public void shouldDeserializeExpressionFilterStep() throws IOException { ExpressionFilterStep step = readTestFilter("/filter-step.json", ExpressionFilterStep.class); ExpressionFilterStep exprFilterStep = step; String expr = "${body.text} contains '#RHSummit'"; assertEquals("2", exprFilterStep.getId().get()); assertEquals("filter", exprFilterStep.getStepKind()); assertEquals(expr, exprFilterStep.getFilterExpression()); assertEquals(1, exprFilterStep.getConfiguredProperties().size()); assertEquals(expr, exprFilterStep.getConfiguredProperties().get("filter")); }
@GET @Produces(MediaType.APPLICATION_JSON) @Path(value = "/{connectorId}/actions/{actionId}/filters/options") public FilterOptions getFilterOptions(@PathParam("connectorId") @ApiParam(required = true) final String connectorId, @PathParam("actionId") @ApiParam(required = true) final String actionId) { final FilterOptions.Builder builder = new FilterOptions.Builder().addOp(Op.DEFAULT_OPTS); final Connector connector = getDataManager().fetch(Connector.class, connectorId); if (connector == null) { return builder.build(); } connector.actionById(actionId).filter(ConnectorAction.class::isInstance).map(ConnectorAction.class::cast).ifPresent(action -> { action.getOutputDataShape().ifPresent(dataShape -> { final List<String> paths = inspectors.getPaths(dataShape.getKind().toString(), dataShape.getType(), dataShape.getSpecification(), dataShape.getExemplar()); builder.addAllPaths(paths); }); }); return builder.build(); }
@Test public void filterOptionsNoOutputShape() { DataShape dataShape = dataShape(DataShapeKinds.NONE); FilterOptions options = handler.getFilterOptions(dataShape); assertThat(options.getPaths()).isEmpty(); }
protected IntegrationDeployment newIntegration(Step... steps) { for (int i = 0; i < steps.length; i++) { steps[i].getConnection().filter(r -> r.getId().isPresent()).ifPresent( resource -> resourceManager.put(resource.getId().get(), resource) ); steps[i].getAction().filter(ConnectorAction.class::isInstance).map(ConnectorAction.class::cast).filter(r -> r.getId().isPresent()).ifPresent( resource -> resourceManager.put(resource.getId().get(), resource) ); steps[i].getExtension().filter(r -> r.getId().isPresent()).ifPresent( resource -> resourceManager.put(resource.getId().get(), resource) ); if (steps[i] instanceof SimpleStep) { steps[i] = new SimpleStep.Builder().createFrom(steps[i]).putMetadata(Step.METADATA_STEP_INDEX, Integer.toString(i + 1)).build(); } else if (steps[i] instanceof ExpressionFilterStep) { steps[i] = new ExpressionFilterStep.Builder().createFrom(steps[i]).putMetadata(Step.METADATA_STEP_INDEX, Integer.toString(i + 1)).build(); } else if (steps[i] instanceof RuleFilterStep) { steps[i] = new RuleFilterStep.Builder().createFrom(steps[i]).putMetadata(Step.METADATA_STEP_INDEX, Integer.toString(i + 1)).build(); } } return new IntegrationDeployment.Builder() .integrationId("test-integration") .name("Test Integration") .spec(new IntegrationDeploymentSpec.Builder() .description("This is a test integration!") .steps(Arrays.asList(steps)) .build()) .lastUpdated(new Date(0)) .lastUpdated(new Date(0)) .build(); }
@Test public void filterOptionsNoOutputShape() { DataShape dataShape = dataShape(DataShapeKinds.NONE); FilterOptions options = handler.getFilterOptions(dataShape); assertThat(options.getPaths()).isEmpty(); }
@Override public Optional<ProcessorDefinition> handle(Step step, ProcessorDefinition route, IntegrationRouteBuilder builder) { ObjectHelper.notNull(route, "route"); final FilterStep filterStep = (FilterStep)step; final String expression = ObjectHelper.notNull(filterStep.getFilterExpression(), "expression"); final CamelContext context = builder.getContext(); final Predicate predicate = new JsonSimplePredicate(expression, context); final FilterDefinition filter = route.filter(predicate); return Optional.of(filter); } }
@Test public void filterOptionsSimple() { when(inspectors.getPaths(DataShapeKinds.JAVA, "twitter4j.Status", null, Optional.empty())).thenReturn(Arrays.asList("paramA", "paramB")); DataShape dataShape = dataShape(DataShapeKinds.JAVA, "twitter4j.Status"); FilterOptions options = handler.getFilterOptions(dataShape); assertThat(options.getPaths()).hasSize(2).contains("paramA","paramB"); }
@Test public void filterOptionsSimple() { when(inspectors.getPaths(DataShapeKinds.JAVA.toString(), "twitter4j.Status", null, Optional.empty())).thenReturn(Arrays.asList("paramA", "paramB")); DataShape dataShape = dataShape(DataShapeKinds.JAVA, "twitter4j.Status"); FilterOptions options = handler.getFilterOptions(dataShape); assertThat(options.getPaths()).hasSize(2).contains("paramA","paramB"); }