Search in sources :

Example 1 with Client

use of org.talend.sdk.component.form.api.Client in project component-runtime by Talend.

the class UiSchemaConverter method convert.

@Override
public CompletionStage<PropertyContext> convert(final CompletionStage<PropertyContext> cs) {
    return cs.thenCompose(context -> {
        final String type = context.getProperty().getType().toLowerCase(Locale.ROOT);
        switch(type) {
            case "object":
                final Map<String, String> gridLayouts = context.getProperty().getMetadata().entrySet().stream().filter(e -> e.getKey().startsWith("ui::gridlayout::") && e.getKey().endsWith("::value")).collect(toMap(e -> e.getKey().substring("ui::gridlayout::".length(), e.getKey().length() - "::value".length()), Map.Entry::getValue, (a, b) -> {
                    throw new IllegalArgumentException("Can't merge " + a + " and " + b);
                }, () -> new TreeMap<>(String.CASE_INSENSITIVE_ORDER)));
                if (!gridLayouts.isEmpty()) {
                    return new GridLayoutWidgetConverter(schemas, properties, actions, client, family, gridLayoutFilter != null && gridLayouts.containsKey(gridLayoutFilter) ? singletonMap(gridLayoutFilter, gridLayouts.get(gridLayoutFilter)) : gridLayouts).convert(CompletableFuture.completedFuture(context));
                }
                return new FieldSetWidgetConverter(schemas, properties, actions, client, family).convert(CompletableFuture.completedFuture(context));
            case "boolean":
                includedProperties.add(context.getProperty());
                return new ToggleWidgetConverter(schemas, properties, actions).convert(CompletableFuture.completedFuture(context));
            case "enum":
                includedProperties.add(context.getProperty());
                return new DataListWidgetConverter(schemas, properties, actions).convert(CompletableFuture.completedFuture(context));
            case "number":
                includedProperties.add(context.getProperty());
                return new NumberWidgetConverter(schemas, properties, actions).convert(CompletableFuture.completedFuture(context));
            case "array":
                includedProperties.add(context.getProperty());
                final String nestedPrefix = context.getProperty().getPath() + "[].";
                final int from = nestedPrefix.length();
                final Collection<SimplePropertyDefinition> nested = properties.stream().filter(prop -> prop.getPath().startsWith(nestedPrefix) && prop.getPath().indexOf('.', from) < 0).collect(toList());
                if (!nested.isEmpty()) {
                    return new ObjectArrayWidgetConverter(schemas, properties, actions, nested, family, client, gridLayoutFilter).convert(CompletableFuture.completedFuture(context));
                }
                return new MultiSelectTagWidgetConverter(schemas, properties, actions, client, family).convert(CompletableFuture.completedFuture(context));
            case "string":
            default:
                if (context.getProperty().getPath().endsWith("[]")) {
                    return CompletableFuture.completedFuture(context);
                }
                includedProperties.add(context.getProperty());
                if ("true".equalsIgnoreCase(context.getProperty().getMetadata().get("ui::credential"))) {
                    return new CredentialWidgetConverter(schemas, properties, actions).convert(CompletableFuture.completedFuture(context));
                } else if (context.getProperty().getMetadata().containsKey("ui::code::value")) {
                    return new CodeWidgetConverter(schemas, properties, actions).convert(CompletableFuture.completedFuture(context));
                } else if (context.getProperty().getMetadata() != null && context.getProperty().getMetadata().containsKey("action::dynamic_values")) {
                    return new MultiSelectTagWidgetConverter(schemas, properties, actions, client, family).convert(CompletableFuture.completedFuture(context));
                } else if (context.getProperty().getMetadata().containsKey("ui::textarea") && Boolean.valueOf(context.getProperty().getMetadata().get("ui::textarea"))) {
                    return new TextAreaWidgetConverter(schemas, properties, actions).convert(CompletableFuture.completedFuture(context));
                }
                return new TextWidgetConverter(schemas, properties, actions).convert(CompletableFuture.completedFuture(context));
        }
    });
}
Also used : ObjectArrayWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.ObjectArrayWidgetConverter) CredentialWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.CredentialWidgetConverter) CompletableFuture(java.util.concurrent.CompletableFuture) PropertyContext(org.talend.sdk.component.form.internal.converter.PropertyContext) PropertyConverter(org.talend.sdk.component.form.internal.converter.PropertyConverter) TextWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.TextWidgetConverter) FieldSetWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.FieldSetWidgetConverter) MultiSelectTagWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.MultiSelectTagWidgetConverter) DataListWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.DataListWidgetConverter) ActionReference(org.talend.sdk.component.server.front.model.ActionReference) Collectors.toMap(java.util.stream.Collectors.toMap) Locale(java.util.Locale) Map(java.util.Map) Collections.singletonMap(java.util.Collections.singletonMap) NumberWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.NumberWidgetConverter) Collection(java.util.Collection) TextAreaWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.TextAreaWidgetConverter) GridLayoutWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.GridLayoutWidgetConverter) Client(org.talend.sdk.component.form.api.Client) ToggleWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.ToggleWidgetConverter) UiSchema(org.talend.sdk.component.form.model.uischema.UiSchema) Collectors.toList(java.util.stream.Collectors.toList) CompletionStage(java.util.concurrent.CompletionStage) TreeMap(java.util.TreeMap) SimplePropertyDefinition(org.talend.sdk.component.server.front.model.SimplePropertyDefinition) AllArgsConstructor(lombok.AllArgsConstructor) CodeWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.CodeWidgetConverter) CredentialWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.CredentialWidgetConverter) TextAreaWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.TextAreaWidgetConverter) SimplePropertyDefinition(org.talend.sdk.component.server.front.model.SimplePropertyDefinition) CodeWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.CodeWidgetConverter) NumberWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.NumberWidgetConverter) TreeMap(java.util.TreeMap) DataListWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.DataListWidgetConverter) MultiSelectTagWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.MultiSelectTagWidgetConverter) TextWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.TextWidgetConverter) ToggleWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.ToggleWidgetConverter) ObjectArrayWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.ObjectArrayWidgetConverter) FieldSetWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.FieldSetWidgetConverter) GridLayoutWidgetConverter(org.talend.sdk.component.form.internal.converter.impl.widget.GridLayoutWidgetConverter) Collectors.toMap(java.util.stream.Collectors.toMap) Map(java.util.Map) Collections.singletonMap(java.util.Collections.singletonMap) TreeMap(java.util.TreeMap)

Example 2 with Client

use of org.talend.sdk.component.form.api.Client in project component-runtime by Talend.

the class GridLayoutWidgetConverter method createLayout.

private CompletionStage<UiSchema> createLayout(final PropertyContext root, final String layout, final String layoutFilter) {
    final UiSchema uiSchema = newOrphanSchema(root);
    uiSchema.setItems(new ArrayList<>());
    final Collection<SimplePropertyDefinition> visitedProperties = new ArrayList<>();
    final Map<String, SimplePropertyDefinition> childProperties = properties.stream().filter(root::isDirectChild).collect(toMap(SimplePropertyDefinition::getName, identity()));
    return CompletableFuture.allOf(Stream.of(layout.split("\\|")).map(line -> line.split(",")).map(line -> {
        if (line.length == 1 && childProperties.containsKey(line[0])) {
            return new UiSchemaConverter(layoutFilter, family, uiSchema.getItems(), visitedProperties, client, properties, actions).convert(completedFuture(new PropertyContext(childProperties.get(line[0])))).thenApply(r -> uiSchema);
        } else if (line.length > 1) {
            final UiSchema schema = new UiSchema();
            schema.setWidget("columns");
            schema.setItems(new ArrayList<>());
            final UiSchemaConverter columnConverter = new UiSchemaConverter(layoutFilter, family, schema.getItems(), visitedProperties, client, properties, actions);
            return CompletableFuture.allOf(Stream.of(line).map(String::trim).map(childProperties::get).filter(Objects::nonNull).map(PropertyContext::new).map(CompletableFuture::completedFuture).map(columnConverter::convert).toArray(CompletableFuture[]::new)).thenApply(r -> {
                final Collection<UiSchema> items = uiSchema.getItems();
                synchronized (items) {
                    items.add(schema);
                }
                return uiSchema;
            });
        }
        return completedFuture(null);
    }).toArray(CompletableFuture[]::new)).thenApply(done -> {
        addActions(root, uiSchema, visitedProperties);
        return uiSchema;
    });
}
Also used : Optional.ofNullable(java.util.Optional.ofNullable) CompletableFuture.completedFuture(java.util.concurrent.CompletableFuture.completedFuture) Collection(java.util.Collection) CompletableFuture(java.util.concurrent.CompletableFuture) PropertyContext(org.talend.sdk.component.form.internal.converter.PropertyContext) Client(org.talend.sdk.component.form.api.Client) ArrayList(java.util.ArrayList) Objects(java.util.Objects) UiSchema(org.talend.sdk.component.form.model.uischema.UiSchema) Collectors.toList(java.util.stream.Collectors.toList) CompletionStage(java.util.concurrent.CompletionStage) Stream(java.util.stream.Stream) ActionReference(org.talend.sdk.component.server.front.model.ActionReference) Collectors.toMap(java.util.stream.Collectors.toMap) SimplePropertyDefinition(org.talend.sdk.component.server.front.model.SimplePropertyDefinition) Map(java.util.Map) UiSchemaConverter(org.talend.sdk.component.form.internal.converter.impl.UiSchemaConverter) Function.identity(java.util.function.Function.identity) SimplePropertyDefinition(org.talend.sdk.component.server.front.model.SimplePropertyDefinition) ArrayList(java.util.ArrayList) UiSchemaConverter(org.talend.sdk.component.form.internal.converter.impl.UiSchemaConverter) UiSchema(org.talend.sdk.component.form.model.uischema.UiSchema) CompletableFuture(java.util.concurrent.CompletableFuture) PropertyContext(org.talend.sdk.component.form.internal.converter.PropertyContext) Objects(java.util.Objects)

Example 3 with Client

use of org.talend.sdk.component.form.api.Client in project component-runtime by Talend.

the class MultiSelectTagWidgetConverter method convert.

@Override
public CompletionStage<PropertyContext> convert(final CompletionStage<PropertyContext> cs) {
    return cs.thenCompose(context -> {
        final UiSchema schema = newUiSchema(context);
        schema.setWidget("multiSelectTag");
        schema.setRestricted(false);
        final String actionName = context.getProperty().getMetadata().get("action::dynamic_values");
        if (client != null && actionName != null) {
            return client.action(family, "dynamic_values", actionName, emptyMap()).exceptionally(e -> {
                log.warn(e.getMessage(), e);
                return emptyMap();
            }).thenApply(values -> {
                final List<UiSchema.NameValue> namedValues = ofNullable(values).map(v -> v.get("items")).filter(Collection.class::isInstance).map(c -> {
                    final Collection<?> dynamicValues = Collection.class.cast(c);
                    return dynamicValues.stream().filter(Map.class::isInstance).filter(m -> Map.class.cast(m).get("id") != null && Map.class.cast(m).get("id") instanceof String).map(Map.class::cast).map(entry -> {
                        final UiSchema.NameValue val = new UiSchema.NameValue();
                        val.setName((String) entry.get("id"));
                        val.setValue(entry.get("label") == null ? (String) entry.get("id") : (String) entry.get("label"));
                        return val;
                    }).collect(toList());
                }).orElse(emptyList());
                schema.setTitleMap(namedValues);
                return context;
            });
        } else {
            schema.setTitleMap(emptyList());
        }
        return CompletableFuture.completedFuture(context);
    });
}
Also used : Collections.emptyMap(java.util.Collections.emptyMap) Collections.emptyList(java.util.Collections.emptyList) Optional.ofNullable(java.util.Optional.ofNullable) Collection(java.util.Collection) CompletableFuture(java.util.concurrent.CompletableFuture) PropertyContext(org.talend.sdk.component.form.internal.converter.PropertyContext) Client(org.talend.sdk.component.form.api.Client) UiSchema(org.talend.sdk.component.form.model.uischema.UiSchema) Collectors.toList(java.util.stream.Collectors.toList) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) CompletionStage(java.util.concurrent.CompletionStage) ActionReference(org.talend.sdk.component.server.front.model.ActionReference) SimplePropertyDefinition(org.talend.sdk.component.server.front.model.SimplePropertyDefinition) Map(java.util.Map) Collection(java.util.Collection) UiSchema(org.talend.sdk.component.form.model.uischema.UiSchema)

Example 4 with Client

use of org.talend.sdk.component.form.api.Client in project component-runtime by Talend.

the class ObjectArrayWidgetConverter method convert.

@Override
public CompletionStage<PropertyContext> convert(final CompletionStage<PropertyContext> cs) {
    return cs.thenCompose(context -> {
        final UiSchema arraySchema = newUiSchema(context);
        arraySchema.setTitle(context.getProperty().getDisplayName());
        arraySchema.setItems(new ArrayList<>());
        arraySchema.setItemWidget("collapsibleFieldset");
        final UiSchemaConverter converter = new UiSchemaConverter(gridLayoutFilter, family, arraySchema.getItems(), new ArrayList<>(), client, properties, actions);
        return CompletableFuture.allOf(nestedProperties.stream().map(p -> converter.convert(CompletableFuture.completedFuture(new PropertyContext(p)))).toArray(CompletableFuture[]::new)).thenApply(r -> context);
    });
}
Also used : UiSchema(org.talend.sdk.component.form.model.uischema.UiSchema) CompletionStage(java.util.concurrent.CompletionStage) ActionReference(org.talend.sdk.component.server.front.model.ActionReference) SimplePropertyDefinition(org.talend.sdk.component.server.front.model.SimplePropertyDefinition) Collection(java.util.Collection) UiSchemaConverter(org.talend.sdk.component.form.internal.converter.impl.UiSchemaConverter) CompletableFuture(java.util.concurrent.CompletableFuture) PropertyContext(org.talend.sdk.component.form.internal.converter.PropertyContext) Client(org.talend.sdk.component.form.api.Client) ArrayList(java.util.ArrayList) PropertyContext(org.talend.sdk.component.form.internal.converter.PropertyContext) UiSchemaConverter(org.talend.sdk.component.form.internal.converter.impl.UiSchemaConverter) UiSchema(org.talend.sdk.component.form.model.uischema.UiSchema)

Aggregations

Collection (java.util.Collection)4 CompletableFuture (java.util.concurrent.CompletableFuture)4 CompletionStage (java.util.concurrent.CompletionStage)4 Client (org.talend.sdk.component.form.api.Client)4 PropertyContext (org.talend.sdk.component.form.internal.converter.PropertyContext)4 UiSchema (org.talend.sdk.component.form.model.uischema.UiSchema)4 ActionReference (org.talend.sdk.component.server.front.model.ActionReference)4 SimplePropertyDefinition (org.talend.sdk.component.server.front.model.SimplePropertyDefinition)4 Map (java.util.Map)3 Collectors.toList (java.util.stream.Collectors.toList)3 ArrayList (java.util.ArrayList)2 Optional.ofNullable (java.util.Optional.ofNullable)2 Collectors.toMap (java.util.stream.Collectors.toMap)2 UiSchemaConverter (org.talend.sdk.component.form.internal.converter.impl.UiSchemaConverter)2 Collections.emptyList (java.util.Collections.emptyList)1 Collections.emptyMap (java.util.Collections.emptyMap)1 Collections.singletonMap (java.util.Collections.singletonMap)1 List (java.util.List)1 Locale (java.util.Locale)1 Objects (java.util.Objects)1