EquivContext context = identifier(parentContext, another.getName(), another.getClass()); context.setFail(ONE_NULL, NULL, NOT_NULL); return false; EquivContext context = identifier(parentContext, one.getName(), one.getClass()); if (another == null) { context.setFail(ANOTHER_NULL, NOT_NULL, NULL); List<ConnectorAction> myActions = one.getActions(); if (myActions == null) { if (another.getActions() != null) { context.setFail("actions", NULL, NOT_NULL); return false; ConnectorAction anotherAction = another.findActionById(myAction.getId().get()).orElse(null); if (! equivalent(context, myAction, anotherAction)) { return false; pair(one.getConnectorGroup(), another.getConnectorGroup(), "connector-group"), pair(one.getConnectorGroupId(), another.getConnectorGroupId(), "connector-group-id"), pair(one.getDescription(), another.getDescription(), "description"), pair(one.getIcon(), another.getIcon(), "icon"), pair(one.getKind(), another.getKind(), "kind"), pair(one.getComponentScheme(), another.getComponentScheme(), "component-schema"), pair(one.getConnectorFactory(), another.getConnectorFactory(), "connector-factory"), pair(one.getConnectorCustomizers(), another.getConnectorCustomizers(), "connector-customizers"), pair(one.getId(), another.getId(), "id"), pair(one.getTags(), another.getTags(), "tags"), pair(one.getName(), another.getName(), "name"),
default Optional<String> propertyTaggedWith(final String tag) { return propertyTaggedWith(getConfiguredProperties(), tag); } }
public Builder createFrom(final Connector connector) { final ActionsSummary actionsSummary = new ActionsSummary.Builder()// .totalActions(connector.getActions().size())// .actionCountByTags( connector.getActions().stream() .flatMap(s -> s.getTags().stream().distinct()) .collect( Collectors.groupingBy( Function.identity(), Collectors.reducing(0, (e) -> 1, Integer::sum) ) ) ) .build(); return new Builder().createFrom((WithConfigurationProperties) connector)// .name(connector.getName())// .description(connector.getDescription())// .icon(Optional.ofNullable(connector.getIcon())) .configuredProperties(Collections.emptyMap())// .actionsSummary(actionsSummary); }
final Map<String, String> generatedConfiguredProperties = generated.getConfiguredProperties(); final String generatedSpecification = generatedConfiguredProperties.get("specification"); final Map<String, String> expectedConfiguredProperties = expected.getConfiguredProperties(); final String expectedSpecification = expectedConfiguredProperties.get("specification"); assertThat(reformatJson(generatedSpecification)).isEqualTo(reformatJson(expectedSpecification)); .containsAllEntriesOf(without(expectedConfiguredProperties, "specification")); assertThat(generated.getProperties().keySet()).as("Expecting the same properties to be generated") .containsOnlyElementsOf(expected.getProperties().keySet()); assertThat(generated.getProperties()).containsAllEntriesOf(expected.getProperties()); assertThat(generated).isEqualToIgnoringGivenFields(expected, "id", "icon", "properties", "configuredProperties", "actions"); assertThat(generated.getIcon()).startsWith("data:image"); assertThat(generated.getActions()).hasSameSizeAs(expected.getActions()); for (final ConnectorAction expectedAction : expected.getActions()) { final String actionId = expectedAction.getId().get().replace("_id_", generated.getId().get()); final Optional<ConnectorAction> maybeGeneratedAction = generated.findActionById(actionId); assertThat(maybeGeneratedAction).as("No action with id: " + actionId + " was generated").isPresent();
messages.addAll(computePropertiesDiffMessages(LeveledMessage.Builder::new, oldConnector.getProperties(), newConnector.getProperties())); if (!connection.isDerived()) { messages.addAll(computeMissingMandatoryPropertiesMessages( LeveledMessage.Builder::new, newConnector.getProperties(), merge(newConnector.getConfiguredProperties(), connection.getConfiguredProperties())) ); messages.addAll(computeSecretsUpdateMessages(LeveledMessage.Builder::new, newConnector.getProperties(), connection.getConfiguredProperties())); builder.putMetadata("connector-id", newConnector.getId().get()); builder.putMetadata("connector-version-latest", Integer.toString(newConnector.getVersion())); builder.putMetadata("connector-version-connection", Integer.toString(oldConnector.getVersion())); builder.messages(messages);
/** * Fetch the Connectors */ protected static Map<String, Connector> fetchConnectorsMap(DataManager dataManager) { return dataManager.fetchAll(Connector.class).getItems() .stream() .collect(Collectors.toMap(o -> o.getId().get(), Function.identity())); } }
Optional<ConnectorGroup> connectorGroupOptional = instance.getConnectorGroup(); if (connectorGroupOptional.isPresent()) { connectorGroup(connectorGroupOptional); Optional<String> connectorFactoryOptional = instance.getConnectorFactory(); if (connectorFactoryOptional.isPresent()) { connectorFactory(connectorFactoryOptional); kind(instance.getKind()); bits |= 0x1L; Optional<String> connectorGroupIdOptional = instance.getConnectorGroupId(); if (connectorGroupIdOptional.isPresent()) { connectorGroupId(connectorGroupIdOptional); String iconValue = instance.getIcon(); if (iconValue != null) { icon(iconValue); String descriptionValue = instance.getDescription(); if (descriptionValue != null) { description(descriptionValue); Optional<String> componentSchemeOptional = instance.getComponentScheme(); if (componentSchemeOptional.isPresent()) { componentScheme(componentSchemeOptional); OptionalInt usesOptional = instance.getUses(); if (usesOptional.isPresent()) {
private Map<String, String> getConfiguredPropertiesInitialize() { return Connector.super.getConfiguredProperties(); }
final String scheme = Optionals.first(descriptor.getComponentScheme(), connector.getComponentScheme()).get(); final CamelContext context = builder.getContext(); final String componentId = scheme + "-" + flowIndex + "-" + stepIndex; final ComponentProxyComponent component = resolveComponent(componentId, scheme, context, connector, descriptor); final Map<String, String> properties = CollectionsUtils.aggregate(connection.getConfiguredProperties(), step.getConfiguredProperties()); final Map<String, ConfigurationProperty> configurationProperties = CollectionsUtils.aggregate(connector.getProperties(), action.getProperties()); connector.getConfiguredProperties().forEach(properties::put); descriptor.getConfiguredProperties().forEach(properties::put);
public final ConnectorAction mandatoryLookupAction(Connector connector, String actionId) { for (ConnectorAction action : connector.getActions()) { if (action.getId().isPresent() && action.getId().get().equals(actionId)) { return action; } } throw new IllegalArgumentException("Unable to find action: " + actionId); }
@Test public void shouldCreateSecurityConfigurationFromConcurSwagger() throws IOException { final String specification = resource("/swagger/concur.swagger.json"); final ConnectorSettings connectorSettings = new ConnectorSettings.Builder()// .name("Concur List API")// .description("Invokes Concur List API")// .icon("fa-globe")// .putConfiguredProperty("specification", specification)// .build(); final Connector generated = generator.generate(SWAGGER_TEMPLATE, connectorSettings); assertThat(generated.getProperties().keySet()).contains("accessToken", "authorizationEndpoint", "tokenEndpoint", "clientId", "clientSecret", "tokenStrategy", "authorizeUsingParameters"); assertThat(generated.getProperties().get("tokenStrategy").getDefaultValue()).isEqualTo("AUTHORIZATION_HEADER"); assertThat(generated.getProperties().get("authorizeUsingParameters").getDefaultValue()).isEqualTo("true"); }
@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"); }
); } else { Action newAction = newConnector.findActionById(action.getId().get()).orElse(null); if (newAction == null) { messages.add(
@Override public boolean canHandle(Step step) { if (StepKind.endpoint != step.getStepKind() && StepKind.connector != step.getStepKind()) { return false; } if (!step.getConnection().isPresent()) { return false; } if (!step.getConnection().get().getConnector().isPresent()) { return false; } if (!step.getActionAs(ConnectorAction.class).isPresent()) { return false; } return !Optionals.first( step.getActionAs(ConnectorAction.class).get().getDescriptor().getComponentScheme(), step.getConnection().get().getConnector().get().getComponentScheme() ).isPresent(); }
final Map<String, String> generatedConfiguredProperties = generated.getConfiguredProperties(); final String generatedSpecification = generatedConfiguredProperties.get("specification"); final Map<String, String> expectedConfiguredProperties = expected.getConfiguredProperties(); final String expectedSpecification = expectedConfiguredProperties.get("specification"); assertThat(reformatJson(generatedSpecification)).isEqualTo(reformatJson(expectedSpecification)); .containsAllEntriesOf(without(expectedConfiguredProperties, "specification")); assertThat(generated.getProperties().keySet()).as("Expecting the same properties to be generated") .containsOnlyElementsOf(expected.getProperties().keySet()); assertThat(generated.getProperties()).containsAllEntriesOf(expected.getProperties()); assertThat(generated).isEqualToIgnoringGivenFields(expected, "id", "icon", "properties", "configuredProperties", "actions"); assertThat(generated.getIcon()).startsWith("data:image"); assertThat(generated.getActions()).hasSameSizeAs(expected.getActions()); for (final ConnectorAction expectedAction : expected.getActions()) { final String actionId = expectedAction.getId().get().replace("_id_", generated.getId().get()); final Optional<ConnectorAction> maybeGeneratedAction = generated.findActionById(actionId); assertThat(maybeGeneratedAction).as("No action with id: " + actionId + " was generated").isPresent();
@Override protected List<ConnectionBulletinBoard> compute(ChangeEvent event) { final List<ConnectionBulletinBoard> boards = new ArrayList<>(); final DataManager dataManager = getDataManager(); final List<Connector> connectors = dataManager.fetchAll(Connector.class).getItems(); for (int i = 0; i < connectors.size(); i++) { final Connector connector = connectors.get(i); final String id = connector.getId().get(); dataManager.fetchAllByPropertyValue(Connection.class, "connectorId", id) .filter(connection -> connection.getConnector().isPresent()) .map(connection -> computeBoard(connection, connection.getConnector().get(), connector)) .filter(Objects::nonNull) .forEach(boards::add); } return boards; }
protected final Connector basicConnector(final ConnectorTemplate connectorTemplate, final ConnectorSettings connectorSettings) { final Swagger swagger = parseSpecification(connectorSettings, APIValidationContext.NONE).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(); }
Optional<? extends Action> getAction(final String id) { return Optionals.asStream(this.connection.getConnector()) .flatMap(c -> c.getActions().stream()) .filter(a -> a.getId().equals(Optional.of(id))) .findFirst(); } }
@Test public void shouldCreateSecurityConfigurationFromConcurSwagger() throws IOException { final String specification = resource("/swagger/concur.swagger.json"); final ConnectorSettings connectorSettings = new ConnectorSettings.Builder()// .name("Concur List API")// .description("Invokes Concur List API")// .icon("fa-globe")// .putConfiguredProperty("specification", specification)// .build(); final Connector generated = generator.generate(SWAGGER_TEMPLATE, connectorSettings); assertThat(generated.getProperties().keySet()).contains("accessToken", "authorizationEndpoint", "tokenEndpoint", "clientId", "clientSecret", "tokenStrategy", "authorizeUsingParameters"); assertThat(generated.getProperties().get("tokenStrategy").getDefaultValue()).isEqualTo("AUTHORIZATION_HEADER"); assertThat(generated.getProperties().get("authorizeUsingParameters").getDefaultValue()).isEqualTo("true"); }
@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"); }