use of io.syndesis.common.model.connection.ConnectorTemplate in project syndesis by syndesisio.
the class BaseSwaggerConnectorGenerator method info.
@Override
public final ConnectorSummary info(final ConnectorTemplate connectorTemplate, final ConnectorSettings connectorSettings) {
final SwaggerModelInfo swaggerInfo = parseSpecification(connectorSettings, true);
try {
// No matter if the validation fails, try to process the swagger
final Connector connector = basicConnector(connectorTemplate, connectorSettings);
final Map<String, Path> paths = swaggerInfo.getModel().getPaths();
final AtomicInteger total = new AtomicInteger(0);
final Map<String, Integer> tagCounts = //
paths.entrySet().stream().flatMap(//
p -> p.getValue().getOperations().stream()).peek(//
o -> total.incrementAndGet()).flatMap(//
o -> o.getTags().stream().distinct()).collect(//
Collectors.groupingBy(//
Function.identity(), //
Collectors.reducing(0, (e) -> 1, Integer::sum)));
final ActionsSummary actionsSummary = //
new ActionsSummary.Builder().totalActions(//
total.intValue()).actionCountByTags(//
tagCounts).build();
return new ConnectorSummary.Builder().createFrom(connector).actionsSummary(actionsSummary).errors(swaggerInfo.getErrors()).warnings(swaggerInfo.getWarnings()).build();
} catch (@SuppressWarnings("PMD.AvoidCatchingGenericException") final Exception ex) {
if (!swaggerInfo.getErrors().isEmpty()) {
// Just log and return the validation errors if any
LOG.error("An error occurred while trying to create a swagger connector", ex);
return new ConnectorSummary.Builder().errors(swaggerInfo.getErrors()).warnings(swaggerInfo.getWarnings()).build();
}
throw SyndesisServerException.launderThrowable("An error occurred while trying to create a swagger connector", ex);
}
}
use of io.syndesis.common.model.connection.ConnectorTemplate in project syndesis by syndesisio.
the class BaseConnectorGeneratorHandler method withGeneratorAndTemplate.
final <T> T withGeneratorAndTemplate(final String templateId, final BiFunction<ConnectorGenerator, ConnectorTemplate, T> callback) {
final ConnectorTemplate connectorTemplate = getDataManager().fetch(ConnectorTemplate.class, templateId);
if (connectorTemplate == null) {
throw new EntityNotFoundException("Connector template: " + templateId);
}
final ConnectorGenerator connectorGenerator = context.getBean(templateId, ConnectorGenerator.class);
if (connectorGenerator == null) {
throw new EntityNotFoundException("Unable to find connector generator for connector template with id: " + templateId);
}
return callback.apply(connectorGenerator, connectorTemplate);
}
use of io.syndesis.common.model.connection.ConnectorTemplate in project syndesis by syndesisio.
the class CustomConnectorHandlerTest method shouldCreateNewConnectorsBasedOnConnectorTemplates.
@Test
public void shouldCreateNewConnectorsBasedOnConnectorTemplates() {
final Map<String, ConfigurationProperty> properties = new HashMap<>();
properties.put("prop1", new ConfigurationProperty.Builder().build());
final Map<String, ConfigurationProperty> connectorProperties = new HashMap<>();
connectorProperties.put("prop2", new ConfigurationProperty.Builder().build());
connectorProperties.put("prop3", new ConfigurationProperty.Builder().build());
final ConnectorGroup group = new ConnectorGroup.Builder().name("connector template group").build();
final ConnectorTemplate connectorTemplate = //
new ConnectorTemplate.Builder().id(//
"connector-template-id").name(//
"connector template").properties(properties).connectorProperties(//
connectorProperties).connectorGroup(//
group).build();
final ConnectorAction action = new ConnectorAction.Builder().name("action").build();
when(dataManager.fetch(ConnectorTemplate.class, "connector-template-id")).thenReturn(connectorTemplate);
when(dataManager.create(any(Connector.class))).thenAnswer(invocation -> invocation.getArgumentAt(0, Connector.class));
when(applicationContext.getBean("connector-template-id", ConnectorGenerator.class)).thenReturn(new ConnectorGenerator() {
@Override
public Connector generate(final ConnectorTemplate connectorTemplate, final ConnectorSettings connectorSettings) {
return new Connector.Builder().createFrom(baseConnectorFrom(connectorTemplate, connectorSettings)).putAllProperties(connectorProperties).putConfiguredProperty("prop1", "value1").addAction(action).build();
}
@Override
public ConnectorSummary info(final ConnectorTemplate connectorTemplate, final ConnectorSettings connectorSettings) {
return null;
}
});
final Connector created = //
new CustomConnectorHandler(dataManager, applicationContext, iconDao).create(//
new ConnectorSettings.Builder().connectorTemplateId(//
"connector-template-id").name(//
"new connector").description(//
"new connector description").icon(//
"new connector icon").putConfiguredProperty("prop1", //
"value1").putConfiguredProperty("unknown-prop", //
"unknown-value").build());
final Connector expected = //
new Connector.Builder().id(//
created.getId()).name(//
"new connector").description(//
"new connector description").icon(//
"new connector icon").connectorGroup(//
group).properties(//
connectorProperties).putConfiguredProperty("prop1", //
"value1").addAction(//
action).build();
assertThat(created).isEqualTo(expected);
}
use of io.syndesis.common.model.connection.ConnectorTemplate 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);
}
use of io.syndesis.common.model.connection.ConnectorTemplate in project syndesis by syndesisio.
the class CustomConnectorHandlerTest method shouldProvideInfoAboutAppliedConnectorSettings.
@Test
public void shouldProvideInfoAboutAppliedConnectorSettings() {
final CustomConnectorHandler handler = new CustomConnectorHandler(dataManager, applicationContext, iconDao);
final ConnectorGenerator connectorGenerator = mock(ConnectorGenerator.class);
final ConnectorTemplate template = new ConnectorTemplate.Builder().build();
final ConnectorSettings connectorSettings = new ConnectorSettings.Builder().connectorTemplateId("connector-template").build();
final ConnectorSummary preparedSummary = new ConnectorSummary.Builder().build();
when(dataManager.fetch(ConnectorTemplate.class, "connector-template")).thenReturn(template);
when(applicationContext.getBean("connector-template", ConnectorGenerator.class)).thenReturn(connectorGenerator);
when(connectorGenerator.info(same(template), same(connectorSettings))).thenReturn(preparedSummary);
final ConnectorSummary info = handler.info(connectorSettings);
assertThat(info).isSameAs(preparedSummary);
}
Aggregations