List<Connector> augmentedWithUsage(final List<Connector> connectors) { ListResult<Integration> integrationListResult = getDataManager().fetchAll(Integration.class); List<Integration> items = integrationListResult.getItems(); final Map<String, Long> connectorUsage = items.stream()// .filter(i -> !i.isDeleted())// .flatMap(i -> i.getUsedConnectorIds().stream())// .collect(Collectors.groupingBy(String::toString, Collectors.counting())); return connectors.stream().map(c -> { final int uses = connectorUsage.getOrDefault(c.getId().get(), 0L).intValue(); return c.builder().uses(uses).build(); }).collect(Collectors.toList()); }
@PUT @Path(value = "/{id}") @Consumes("application/json") public void update(@NotNull @PathParam("id") String id, @NotNull @Valid OAuthApp app) { final Connector connector = dataMgr.fetch(Connector.class, id); if (connector == null) { throw new WebApplicationException(Response.Status.NOT_FOUND); } final Connector updated = new Connector.Builder().createFrom(connector) .putOrRemoveConfiguredPropertyTaggedWith(Credentials.CLIENT_ID_TAG, app.clientId) .putOrRemoveConfiguredPropertyTaggedWith(Credentials.CLIENT_SECRET_TAG, app.clientSecret) .build(); dataMgr.update(updated); }
private Connector migrateOldConnectorData(Connector existingConnector, Connector newConnector) { Map<String, String> propValues = new TreeMap<>(existingConnector.getConfiguredProperties()); propValues.keySet().retainAll(newConnector.getProperties().keySet()); if (!propValues.isEmpty()) { return new Connector.Builder() .createFrom(newConnector) .putAllConfiguredProperties(propValues) .build(); } return newConnector; }
protected final Connector basicConnector(final ConnectorTemplate connectorTemplate, final ConnectorSettings connectorSettings) { final Swagger swagger = parseSpecification(connectorSettings, false).getModel(); // could be either JSON of the Swagger specification or a URL to one final String specification = requiredSpecification(connectorSettings); if (specification.startsWith("http")) { swagger.vendorExtension(URL_EXTENSION, URI.create(specification)); } final Connector baseConnector = baseConnectorFrom(connectorTemplate, connectorSettings); final Connector.Builder builder = new Connector.Builder().createFrom(baseConnector); final Map<String, String> alreadyConfiguredProperties = builder.build().getConfiguredProperties(); connectorTemplate.getConnectorProperties().forEach((propertyName, template) -> { final Optional<ConfigurationProperty> maybeProperty = PropertyGenerators.createProperty(propertyName, swagger, template); maybeProperty.ifPresent(property -> { builder.putProperty(propertyName, property); if (!alreadyConfiguredProperties.containsKey(propertyName)) { final String defaultValue = property.getDefaultValue(); if (defaultValue != null) { builder.putConfiguredProperty(propertyName, defaultValue); } } }); }); return builder.build(); }
protected final Connector basicConnector(final ConnectorTemplate connectorTemplate, final ConnectorSettings connectorSettings) { final Swagger swagger = parseSpecification(connectorSettings, false).getModel(); // could be either JSON of the Swagger specification or a URL to one final String specification = requiredSpecification(connectorSettings); if (specification.startsWith("http")) { swagger.vendorExtension(URL_EXTENSION, URI.create(specification)); } final Connector baseConnector = baseConnectorFrom(connectorTemplate, connectorSettings); final Connector.Builder builder = new Connector.Builder().createFrom(baseConnector); final Map<String, String> alreadyConfiguredProperties = builder.build().getConfiguredProperties(); connectorTemplate.getConnectorProperties().forEach((propertyName, template) -> { final Optional<ConfigurationProperty> maybeProperty = PropertyGenerators.createProperty(propertyName, swagger, template); maybeProperty.ifPresent(property -> { builder.putProperty(propertyName, property); if (!alreadyConfiguredProperties.containsKey(propertyName)) { final String defaultValue = property.getDefaultValue(); if (defaultValue != null) { builder.putConfiguredProperty(propertyName, defaultValue); } } }); }); return builder.build(); }
@Test public void testConnectorSummary() { ConnectorSummary summary = new ConnectorSummary.Builder().createFrom( new Connector.Builder().addAction( new ConnectorAction.Builder().addTag("1", "2", "3").build(), new ConnectorAction.Builder().addTag("2", "3", "4").build(), new ConnectorAction.Builder().addTag("2").build(), new ConnectorAction.Builder().build() ).build() ).build(); Assertions.assertThat(summary.getActionsSummary().getTotalActions()).isEqualTo(4); Map<String, Integer> actionCountByTags = summary.getActionsSummary().getActionCountByTags(); Assertions.assertThat(actionCountByTags).containsEntry("1", 1); Assertions.assertThat(actionCountByTags).containsEntry("2", 3); Assertions.assertThat(actionCountByTags).containsEntry("3", 2); Assertions.assertThat(actionCountByTags).containsEntry("4", 1); }
@Test public void shouldCreateBaseConnectors() { final ConnectorSettings settings = new ConnectorSettings.Builder().putConfiguredProperty("property2", "value2").build(); final Connector connector = generator.baseConnectorFrom(template, settings); assertThat(connector).isEqualToIgnoringGivenFields(// new Connector.Builder()// .name("test-name")// .description("test-description")// .connectorGroup(template.getConnectorGroup())// .connectorGroupId("template-group")// .properties(template.getConnectorProperties())// .putConfiguredProperty("property2", "value2")// .build(), "id", "icon"); assertThat(connector.getIcon()).isEqualTo("data:image/svg+xml,dummy"); }
private Connector toConnector(Extension extension) { List<ConnectorAction> connectorActions = extension.getActions(ConnectorAction.class); return new Connector.Builder() .createFrom((WithName) extension) .createFrom((WithConfigurationProperties) extension) .createFrom((WithConfiguredProperties) extension) .kind(Kind.Connector) .actions(connectorActions) .description(extension.getDescription()) .icon(extension.getIcon()) .addDependency(new Dependency.Builder() .id(extension.getExtensionId()) .type(Dependency.Type.EXTENSION) .build()) .id(getConnectorIdForExtension(extension)) .build(); }
@Test public void shouldCreateBaseConnectorsWithGivenNameAndDescription() { final ConnectorSettings settings = new ConnectorSettings.Builder().name("given-name").description("given-description") .putConfiguredProperty("property2", "value2").build(); final Connector connector = generator.baseConnectorFrom(template, settings); assertThat(connector).isEqualToIgnoringGivenFields(// new Connector.Builder()// .name("given-name")// .description("given-description")// .connectorGroup(template.getConnectorGroup())// .connectorGroupId("template-group")// .properties(template.getConnectorProperties())// .putConfiguredProperty("property2", "value2").build(), "id", "icon"); assertThat(connector.getIcon()).isEqualTo("data:image/svg+xml,dummy"); } }
private static Connector newConnector(final String id) { return new Connector.Builder().id(id).build(); }
private static Connector newConnector(final String id) { return new Connector.Builder().id(id).build(); }
private static Connector usedConnector(final Connector connector, final int usage) { return new Connector.Builder().createFrom(connector).uses(usage).build(); }
private static Connector usedConnector(final Connector connector, final int usage) { return new Connector.Builder().createFrom(connector).uses(usage).build(); }
@Override public Connector get(final String id) { final Connector connector = augmentedWithUsage(Getter.super.get(id)); final Optional<String> connectorGroupId = connector.getConnectorGroupId(); if (!connectorGroupId.map(applicationContext::containsBean).orElse(false)) { return connector; } final ConnectorSummary summary = new ConnectorSummary.Builder().createFrom(connector).build(); return connector.builder().actionsSummary(summary.getActionsSummary()).build(); }
@Test public void createShouldCreateWithSpecifiedId() { final Connector connector = new Connector.Builder().id("custom-id").build(); final Connector got = dataManager.create(connector); assertThat(got).isSameAs(connector); assertThat(cacheManager.getCache(Kind.Connector.modelName).get("custom-id")).isSameAs(connector); }
@Test public void byDefaultDerivedShouldBeFalse() { Connection connection = new Connection.Builder() .connector(new Connector.Builder() .id(KeyGenerator.createKey()) .build()) .build(); assertThat(connection.isDerived()).isFalse(); }
@Test public void createShouldCreateWithUnspecifiedIds() { final Connector given = new Connector.Builder().icon("my-icon").build(); final Connector got = dataManager.create(given); assertThat(got).isEqualToIgnoringGivenFields(given, "id"); assertThat(got.getId()).isPresent(); assertThat(cacheManager.getCache(Kind.Connector.modelName).get(got.getId().get())).isSameAs(got); }
@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 ListResult<Connector> list(final UriInfo uriInfo) { final List<Connector> connectors = Lister.super.list(uriInfo).getItems().stream() .map(c -> { final ConnectorSummary summary = new ConnectorSummary.Builder().createFrom(c).build(); return c.builder().actionsSummary(summary.getActionsSummary()).build(); }) .collect(Collectors.toList()); return ListResult.of(augmentedWithUsage(connectors)); }
@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(); }