use of org.talend.sdk.component.server.front.model.ActionReference in project component-runtime by Talend.
the class UiSpecService method convert.
private CompletionStage<Ui> convert(final Supplier<String> displayName, final Supplier<String> family, final Supplier<Collection<SimplePropertyDefinition>> properties, final Supplier<Collection<ActionReference>> actions, final Predicate<SimplePropertyDefinition> isRootProperty) {
final Collection<SimplePropertyDefinition> props = properties.get();
final Ui ui = new Ui();
ui.setUiSchema(new ArrayList<>());
ui.setProperties(new HashMap<>());
ui.setJsonSchema(new JsonSchema());
ui.getJsonSchema().setTitle(displayName.get());
ui.getJsonSchema().setType("object");
ui.getJsonSchema().setRequired(props.stream().filter(isRootProperty).filter(p -> new PropertyContext(p).isRequired()).map(SimplePropertyDefinition::getName).collect(toSet()));
final JsonSchemaConverter jsonSchemaConverter = new JsonSchemaConverter(jsonb, ui.getJsonSchema(), props);
final UiSchemaConverter uiSchemaConverter = new UiSchemaConverter(null, family.get(), ui.getUiSchema(), new ArrayList<>(), client, props, actions.get());
final PropertiesConverter propertiesConverter = new PropertiesConverter(jsonb, Map.class.cast(ui.getProperties()), props);
return CompletableFuture.allOf(props.stream().filter(Objects::nonNull).filter(isRootProperty).map(PropertyContext::new).map(CompletableFuture::completedFuture).map(jsonSchemaConverter::convert).map(uiSchemaConverter::convert).map(propertiesConverter::convert).toArray(CompletableFuture[]::new)).thenApply(r -> ui);
}
use of org.talend.sdk.component.server.front.model.ActionReference in project component-runtime by Talend.
the class ComponentResourceTest method getDetails.
@Test
void getDetails() {
final ComponentDetailList details = base.path("component/details").queryParam("identifiers", client.fetchIndex().getComponents().stream().filter(c -> c.getId().getFamily().equals("chain") && c.getId().getName().equals("list")).findFirst().orElseThrow(() -> new IllegalArgumentException("no chain#list component")).getId().getId()).request(APPLICATION_JSON_TYPE).get(ComponentDetailList.class);
assertEquals(1, details.getDetails().size());
final ComponentDetail detail = details.getDetails().iterator().next();
assertEquals("the-test-component", detail.getId().getPlugin());
assertEquals("chain", detail.getId().getFamily());
assertEquals("list", detail.getId().getName());
assertEquals("The List Component", detail.getDisplayName());
final Collection<ActionReference> remoteActions = detail.getActions();
assertEquals(1, remoteActions.size());
final ActionReference action = remoteActions.iterator().next();
assertEquals("default", action.getName());
assertEquals("healthcheck", action.getType());
assertEquals(6, action.getProperties().size());
assertValidation("remote.urls", detail, validation -> validation.getMinItems() == 1);
assertValidation("remote.urls", detail, validation -> validation.getUniqueItems() != null && validation.getUniqueItems());
assertValidation("remote.user.user", detail, validation -> validation.getMinLength() != null && validation.getMinLength() == 2);
assertValidation("remote.user.password", detail, validation -> validation.getMaxLength() != null && validation.getMaxLength() == 8);
assertValidation("remote.user.password", detail, validation -> validation.getRequired() != null && validation.getRequired());
// for now
assertEquals(0, detail.getLinks().size());
/*
* final Link link = detail.getLinks().iterator().next(); assertEquals("Detail", link.getName());
* assertEquals("/component/...", link.getPath());
*/
}
use of org.talend.sdk.component.server.front.model.ActionReference in project component-runtime by Talend.
the class ObjectWidgetConverter method addActions.
protected void addActions(final PropertyContext root, final UiSchema uiSchema, final Collection<SimplePropertyDefinition> includedProperties) {
final Optional<SimplePropertyDefinition> schemaBinding = includedProperties.stream().filter(p -> "OUT".equals(p.getMetadata().get("ui::structure::type"))).findFirst();
final Collection<UiSchema> items = uiSchema.getItems();
if (schemaBinding.isPresent()) {
SimplePropertyDefinition bindingProp = schemaBinding.get();
final String schemaActionName = ofNullable(bindingProp.getMetadata().get("action::schema")).filter(n -> !n.isEmpty()).orElse("default");
actions.stream().filter(a -> a.getName().equals(schemaActionName) && "schema".equals(a.getType())).findFirst().ifPresent(ref -> {
final UiSchema.Trigger trigger = toTrigger(properties, root.getProperty(), ref);
trigger.setOptions(singletonList(new UiSchema.Option.Builder().withPath(bindingProp.getPath().replace("[]", "")).withType("array".equalsIgnoreCase(bindingProp.getType()) ? "array" : "object").build()));
if (trigger.getParameters() == null || trigger.getParameters().isEmpty()) {
// find the matching dataset
Optional<SimplePropertyDefinition> findParameters = properties.stream().filter(nested -> ref.getName().equals(nested.getMetadata().get("configurationtype::name")) && "dataset".equals(nested.getMetadata().get("configurationtype::type"))).findFirst();
if (!findParameters.isPresent()) {
// if not ambiguous grab the unique dataset
final Collection<SimplePropertyDefinition> datasets = properties.stream().filter(nested -> "dataset".equals(nested.getMetadata().get("configurationtype::type"))).collect(toSet());
if (datasets.size() == 1) {
findParameters = of(datasets.iterator().next());
}
}
findParameters.ifPresent(dataset -> {
final UiSchema.Parameter parameter = new UiSchema.Parameter();
parameter.setKey(ofNullable(ref.getProperties()).orElse(Collections.emptyList()).stream().filter(p -> !p.getPath().contains(".")).findFirst().map(SimplePropertyDefinition::getName).orElse("dataset"));
parameter.setPath(dataset.getPath());
trigger.setParameters(toParams(properties, dataset, ref, dataset.getPath()));
});
}
final UiSchema button = new UiSchema();
button.setKey("button_schema_" + root.getProperty().getPath());
button.setTitle("Guess Schema");
button.setWidget("button");
button.setTriggers(singletonList(trigger));
synchronized (items) {
items.add(button);
}
});
}
ofNullable(root.getProperty().getMetadata().get("action::healthcheck")).flatMap(v -> (actions == null ? Stream.<ActionReference>empty() : actions.stream()).filter(a -> a.getName().equals(v) && "healthcheck".equals(a.getType())).findFirst()).ifPresent(ref -> {
final UiSchema.Trigger trigger = toTrigger(properties, root.getProperty(), ref);
if (trigger.getParameters() == null || trigger.getParameters().isEmpty()) {
// find the matching dataset
properties.stream().filter(nested -> "datastore".equals(nested.getMetadata().get("configurationtype::type")) && ref.getName().equals(nested.getMetadata().get("configurationtype::name"))).findFirst().ifPresent(datastore -> trigger.setParameters(toParams(properties, datastore, ref, datastore.getPath())));
}
final UiSchema button = new UiSchema();
button.setKey("button_healthcheck_" + root.getProperty().getPath());
button.setTitle("Validate Datastore");
button.setWidget("button");
button.setTriggers(singletonList(trigger));
synchronized (items) {
items.add(button);
}
});
}
Aggregations