Search in sources :

Example 31 with Step

use of io.syndesis.common.model.integration.Step in project syndesis by syndesisio.

the class ProjectGeneratorHelper method sanitize.

public static Integration sanitize(Integration integration, IntegrationResourceManager resourceManager) {
    final List<Step> steps = new ArrayList<>(integration.getSteps());
    if (steps.isEmpty()) {
        return integration;
    }
    for (int i = 0; i < steps.size(); i++) {
        final Step source = steps.get(i);
        if (source.getConnection().isPresent()) {
            final Connection connection = source.getConnection().get();
            // If connector is not set, fetch it from data source and update connection
            if (!connection.getConnector().isPresent()) {
                Connector connector = resourceManager.loadConnector(connection.getConnectorId()).orElseThrow(() -> new IllegalArgumentException("Unable to fetch connector: " + connection.getConnectorId()));
                // Add missing connector to connection.
                Connection newConnection = new Connection.Builder().createFrom(connection).connector(connector).build();
                // Replace with the new 'sanitized' step
                steps.set(i, new Step.Builder().createFrom(source).connection(newConnection).build());
            }
        }
    }
    final Integration.Builder builder = new Integration.Builder().createFrom(integration);
    // is fully implemented and schedule options are set on integration.
    if (!integration.getScheduler().isPresent()) {
        Map<String, String> properties = new HashMap<>(steps.get(0).getConfiguredProperties());
        String type = properties.remove("schedulerType");
        String expr = properties.remove("schedulerExpression");
        if (StringUtils.isNotEmpty(expr)) {
            if (StringUtils.isEmpty(type)) {
                type = "timer";
            }
            builder.scheduler(new Scheduler.Builder().type(Scheduler.Type.valueOf(type)).expression(expr).build());
        }
        // Replace first step so underlying connector won't fail uri param
        // validation if schedule options were set.
        steps.set(0, new Step.Builder().createFrom(steps.get(0)).configuredProperties(properties).build());
    }
    return builder.steps(steps).build();
}
Also used : Connector(io.syndesis.common.model.connection.Connector) Integration(io.syndesis.common.model.integration.Integration) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Connection(io.syndesis.common.model.connection.Connection) Step(io.syndesis.common.model.integration.Step)

Example 32 with Step

use of io.syndesis.common.model.integration.Step in project syndesis by syndesisio.

the class ProjectGeneratorTest method testGenerateApplicationProperties.

@Test
public void testGenerateApplicationProperties() throws IOException {
    // ******************
    // OLD STYLE
    // ******************
    final ConnectorAction oldAction = new ConnectorAction.Builder().id(KeyGenerator.createKey()).descriptor(new ConnectorDescriptor.Builder().connectorId("old").camelConnectorPrefix("old").build()).build();
    final Connector oldConnector = new Connector.Builder().id("old").addAction(oldAction).putProperty("username", new ConfigurationProperty.Builder().componentProperty(false).secret(true).build()).putProperty("password", new ConfigurationProperty.Builder().componentProperty(false).secret(true).build()).putProperty("token", new ConfigurationProperty.Builder().componentProperty(true).secret(true).build()).build();
    // ******************
    // NEW STYLE
    // ******************
    final ConnectorAction newAction = new ConnectorAction.Builder().id(KeyGenerator.createKey()).descriptor(new ConnectorDescriptor.Builder().connectorId("new").componentScheme("http4").build()).build();
    final Connector newConnector = new Connector.Builder().id("new").addAction(oldAction).putProperty("username", new ConfigurationProperty.Builder().componentProperty(false).secret(true).build()).putProperty("password", new ConfigurationProperty.Builder().componentProperty(false).secret(true).build()).putProperty("token", new ConfigurationProperty.Builder().componentProperty(true).secret(true).build()).build();
    // ******************
    // Integration
    // ******************
    Step s1 = new Step.Builder().stepKind(StepKind.endpoint).connection(new Connection.Builder().id(KeyGenerator.createKey()).connector(oldConnector).build()).putConfiguredProperty("username", "my-username-1").putConfiguredProperty("password", "my-password-1").putConfiguredProperty("token", "my-token-1").action(oldAction).build();
    Step s2 = new Step.Builder().stepKind(StepKind.endpoint).connection(new Connection.Builder().id(KeyGenerator.createKey()).connector(newConnector).build()).putConfiguredProperty("username", "my-username-2").putConfiguredProperty("password", "my-password-2").putConfiguredProperty("token", "my-token-2").action(newAction).build();
    TestResourceManager resourceManager = new TestResourceManager();
    ProjectGeneratorConfiguration configuration = new ProjectGeneratorConfiguration();
    ProjectGenerator generator = new ProjectGenerator(configuration, resourceManager, getMavenProperties());
    Integration integration = resourceManager.newIntegration(s1, s2);
    Properties properties = generator.generateApplicationProperties(integration);
    assertThat(properties.size()).isEqualTo(6);
    assertThat(properties.getProperty("old.configurations.old-1.token")).isEqualTo("my-token-1");
    assertThat(properties.getProperty("old-1.username")).isEqualTo("my-username-1");
    assertThat(properties.getProperty("old-1.password")).isEqualTo("my-password-1");
    assertThat(properties.getProperty("http4-2.token")).isEqualTo("my-token-2");
    assertThat(properties.getProperty("http4-2.username")).isEqualTo("my-username-2");
    assertThat(properties.getProperty("http4-2.password")).isEqualTo("my-password-2");
}
Also used : ConfigurationProperty(io.syndesis.common.model.connection.ConfigurationProperty) Connector(io.syndesis.common.model.connection.Connector) Integration(io.syndesis.common.model.integration.Integration) Connection(io.syndesis.common.model.connection.Connection) Step(io.syndesis.common.model.integration.Step) IntegrationProjectGenerator(io.syndesis.integration.api.IntegrationProjectGenerator) MavenProperties(io.syndesis.common.util.MavenProperties) Properties(java.util.Properties) ConnectorDescriptor(io.syndesis.common.model.action.ConnectorDescriptor) ConnectorAction(io.syndesis.common.model.action.ConnectorAction) Test(org.junit.Test)

Example 33 with Step

use of io.syndesis.common.model.integration.Step in project syndesis by syndesisio.

the class IntegrationRouteBuilder method handleConnectorSplit.

private Optional<ProcessorDefinition> handleConnectorSplit(Step step, ProcessorDefinition route, String index) {
    if (step.getAction().filter(ConnectorAction.class::isInstance).isPresent()) {
        final ConnectorAction action = step.getAction().filter(ConnectorAction.class::isInstance).map(ConnectorAction.class::cast).get();
        final ConnectorDescriptor descriptor = action.getDescriptor();
        if (descriptor.getSplit().isPresent()) {
            final Split split = descriptor.getSplit().get();
            final Step.Builder splitBuilder = new Step.Builder().stepKind(StepKind.split);
            split.getLanguage().ifPresent(s -> splitBuilder.putConfiguredProperty("language", s));
            split.getExpression().ifPresent(s -> splitBuilder.putConfiguredProperty("expression", s));
            return new SplitStepHandler().handle(splitBuilder.build(), route, this, index);
        }
    }
    return Optional.empty();
}
Also used : ConnectorDescriptor(io.syndesis.common.model.action.ConnectorDescriptor) ConnectorAction(io.syndesis.common.model.action.ConnectorAction) Step(io.syndesis.common.model.integration.Step) Split(io.syndesis.common.model.Split) SplitStepHandler(io.syndesis.integration.runtime.handlers.SplitStepHandler)

Example 34 with Step

use of io.syndesis.common.model.integration.Step in project syndesis by syndesisio.

the class Application method generateIntegrationProject.

private void generateIntegrationProject(File project) throws IOException {
    final ReadApiClientData reader = new ReadApiClientData();
    final ArrayList<Step> steps = new ArrayList<>();
    String deploymentText;
    try (InputStream is = resourceLoader.getResource("io/syndesis/server/dao/deployment.json").getInputStream()) {
        deploymentText = reader.from(is);
    }
    final List<ModelData<?>> modelList = reader.readDataFromString(deploymentText);
    for (final ModelData<?> model : modelList) {
        if (model.getKind() == Kind.Connector) {
            final Connector connector = (Connector) model.getData();
            for (final Action action : connector.getActions()) {
                steps.add(new Step.Builder().stepKind(StepKind.endpoint).connection(new Connection.Builder().connector(connector).connectorId(connector.getId().get()).build()).action(action).build());
            }
        }
        if (model.getKind() == Kind.ConnectorTemplate) {
            final ConnectorTemplate template = (ConnectorTemplate) model.getData();
            steps.add(new Step.Builder().stepKind(StepKind.endpoint).connection(new Connection.Builder().connectorId("connector-" + template.getId()).build()).action(new ConnectorAction.Builder().descriptor(new ConnectorDescriptor.Builder().camelConnectorGAV(template.getCamelConnectorGAV()).camelConnectorPrefix(template.getCamelConnectorPrefix()).build()).build()).build());
        }
    }
    try {
        final ResourcePatternResolver resolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader);
        final Resource[] resources = resolver.getResources("classpath:/META-INF/syndesis/connector/*.json");
        if (resources != null) {
            for (Resource resource : resources) {
                Connector connector = Json.reader().forType(Connector.class).readValue(resource.getInputStream());
                if (connector != null) {
                    for (final Action action : connector.getActions()) {
                        steps.add(new Step.Builder().stepKind(StepKind.endpoint).connection(new Connection.Builder().connector(connector).connectorId(connector.getId().get()).build()).action(action).build());
                    }
                }
            }
        }
    } catch (FileNotFoundException ignored) {
    // ignore
    }
    Integration integration = new Integration.Builder().id("Integration").name("Integration").description("This integration is used to prime the .m2 repo").steps(steps).build();
    generate(integration, project);
}
Also used : ModelData(io.syndesis.common.model.ModelData) Connector(io.syndesis.common.model.connection.Connector) ConnectorAction(io.syndesis.common.model.action.ConnectorAction) Action(io.syndesis.common.model.action.Action) Integration(io.syndesis.common.model.integration.Integration) ResourcePatternResolver(org.springframework.core.io.support.ResourcePatternResolver) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) Connection(io.syndesis.common.model.connection.Connection) ClassPathResource(org.springframework.core.io.ClassPathResource) Resource(org.springframework.core.io.Resource) FileNotFoundException(java.io.FileNotFoundException) Step(io.syndesis.common.model.integration.Step) ConnectorTemplate(io.syndesis.common.model.connection.ConnectorTemplate) ConnectorAction(io.syndesis.common.model.action.ConnectorAction) ReadApiClientData(io.syndesis.server.dao.init.ReadApiClientData)

Example 35 with Step

use of io.syndesis.common.model.integration.Step in project syndesis by syndesisio.

the class IntegrationSchedulerTest method integrationSchedulerTest.

@Test
public void integrationSchedulerTest() throws Exception {
    final CamelContext context = new SpringCamelContext(applicationContext);
    try {
        final RouteBuilder routes = new IntegrationRouteBuilder("", Collections.emptyList()) {

            @Override
            protected Integration loadIntegration() throws IOException {
                Integration integration = newIntegration(new Step.Builder().id("step-1").stepKind(StepKind.endpoint).action(new ConnectorAction.Builder().descriptor(new ConnectorDescriptor.Builder().componentScheme("log").putConfiguredProperty("loggerName", "timer").build()).build()).build(), new Step.Builder().id("step-2").stepKind(StepKind.endpoint).action(new ConnectorAction.Builder().descriptor(new ConnectorDescriptor.Builder().componentScheme("mock").putConfiguredProperty("name", "timer").build()).build()).build());
                return new Integration.Builder().createFrom(integration).scheduler(new Scheduler.Builder().type(Scheduler.Type.timer).expression("1s").build()).build();
            }
        };
        // Set up the camel context
        context.addRoutes(routes);
        context.start();
        dumpRoutes(context);
        RouteDefinition routeDefinition = context.getRouteDefinition("test-integration");
        assertThat(routeDefinition).isNotNull();
        assertThat(routeDefinition).hasFieldOrPropertyWithValue("id", "test-integration");
        assertThat(routeDefinition.getInputs()).hasSize(1);
        assertThat(routeDefinition.getInputs().get(0).getEndpointUri()).isEqualTo("timer:integration?period=1s");
        assertThat(routeDefinition.getOutputs()).hasSize(4);
        assertThat(routeDefinition.getOutputs().get(0)).hasFieldOrPropertyWithValue("endpointUri", "log:timer");
        assertThat(routeDefinition.getOutputs().get(1)).isInstanceOf(ProcessDefinition.class);
        assertThat(routeDefinition.getOutputs().get(2)).hasFieldOrPropertyWithValue("endpointUri", "mock:timer");
        assertThat(routeDefinition.getOutputs().get(3)).isInstanceOf(ProcessDefinition.class);
        assertThat(routeDefinition.getInputs().get(0)).hasFieldOrPropertyWithValue("id", "integration-scheduler");
        assertThat(routeDefinition.getOutputs().get(0)).hasFieldOrPropertyWithValue("id", "step-1");
        assertThat(routeDefinition.getOutputs().get(1)).hasFieldOrPropertyWithValue("id", "step-1-capture");
        assertThat(routeDefinition.getOutputs().get(2)).hasFieldOrPropertyWithValue("id", "step-2");
        assertThat(routeDefinition.getOutputs().get(3)).hasFieldOrPropertyWithValue("id", "step-2-capture");
    } finally {
        context.stop();
    }
}
Also used : SpringCamelContext(org.apache.camel.spring.SpringCamelContext) CamelContext(org.apache.camel.CamelContext) Integration(io.syndesis.common.model.integration.Integration) RouteBuilder(org.apache.camel.builder.RouteBuilder) Scheduler(io.syndesis.common.model.integration.Scheduler) RouteBuilder(org.apache.camel.builder.RouteBuilder) SpringCamelContext(org.apache.camel.spring.SpringCamelContext) Step(io.syndesis.common.model.integration.Step) RouteDefinition(org.apache.camel.model.RouteDefinition) ConnectorAction(io.syndesis.common.model.action.ConnectorAction) Test(org.junit.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Aggregations

Step (io.syndesis.common.model.integration.Step)40 Connector (io.syndesis.common.model.connection.Connector)26 Connection (io.syndesis.common.model.connection.Connection)22 StepDefinition (io.syndesis.qe.bdd.entities.StepDefinition)17 ConnectorDescriptor (io.syndesis.common.model.action.ConnectorDescriptor)16 Integration (io.syndesis.common.model.integration.Integration)14 Action (io.syndesis.common.model.action.Action)13 ConnectorAction (io.syndesis.common.model.action.ConnectorAction)12 Given (cucumber.api.java.en.Given)10 AbstractStep (io.syndesis.qe.bdd.AbstractStep)9 List (java.util.List)6 StepKind (io.syndesis.common.model.integration.StepKind)5 DataMapperStepDefinition (io.syndesis.qe.bdd.entities.DataMapperStepDefinition)5 ArrayList (java.util.ArrayList)5 Collectors (java.util.stream.Collectors)5 And (cucumber.api.java.en.And)4 Extension (io.syndesis.common.model.extension.Extension)4 InputStream (java.io.InputStream)4 Then (cucumber.api.java.en.Then)3 IOException (java.io.IOException)3