Search in sources :

Example 1 with YType

use of org.springframework.ide.vscode.commons.yaml.schema.YType in project sts4 by spring-projects.

the class SchemaBasedSnippetGeneratorTest method toplevelSnippet.

@Test
public void toplevelSnippet() throws Exception {
    YType v2Schema = typeUtil.inferMoreSpecificType(schema.getTopLevelType(), DynamicSchemaContext.NULL);
    assertEquals("name: $1\n" + "releases:\n" + "- name: $2\n" + "  version: $3\n" + "stemcells:\n" + "- alias: $4\n" + "  version: $5\n" + "update:\n" + "  canaries: $6\n" + "  max_in_flight: $7\n" + "  canary_watch_time: $8\n" + "  update_watch_time: $9\n" + "instance_groups:\n" + "- name: $10\n" + "  azs:\n" + "  - $11\n" + "  instances: $12\n" + "  jobs:\n" + "  - name: $13\n" + "    release: $14\n" + "  vm_type: $15\n" + "  stemcell: $16\n" + "  networks:\n" + "  - name: $17", generator.getSnippets(v2Schema).iterator().next().getSnippet());
}
Also used : YType(org.springframework.ide.vscode.commons.yaml.schema.YType) Test(org.junit.Test)

Example 2 with YType

use of org.springframework.ide.vscode.commons.yaml.schema.YType in project sts4 by spring-projects.

the class BoshCloudConfigSchema method createNetworkBlockSchema.

private YType createNetworkBlockSchema(BoshModels models) {
    AbstractType t_manual_nw = f.ybean("ManualNetwork");
    {
        YBeanType t_subnet = f.ybean("Subnet[Manual]");
        addProp(t_subnet, "range", t_ip_range).isRequired(true);
        addProp(t_subnet, "gateway", t_ip_address).isRequired(true);
        addProp(t_subnet, "dns", f.yseq(t_ip_address));
        addProp(t_subnet, "reserved", f.yseq(t_ip_address_or_range));
        addProp(t_subnet, "static", f.yseq(t_ip_address_or_range));
        addProp(t_subnet, "az", t_az_ref);
        addProp(t_subnet, "azs", f.yseq(t_az_ref));
        addProp(t_subnet, "cloud_properties", t_params);
        addProp(t_manual_nw, "subnets", f.yseq(t_subnet)).isRequired(true);
    }
    AbstractType t_vip_nw = f.ybean("VipNetwork");
    addProp(t_vip_nw, "cloud_properties", t_params);
    AbstractType t_dynamic_nw = f.ybean("DynamicNetwork");
    addProp(t_dynamic_nw, "dns", f.yseq(t_ip_address));
    addProp(t_dynamic_nw, "cloud_properties", t_params);
    {
        YBeanType t_subnet = f.ybean("Subnet[Dynamic]");
        addProp(t_subnet, "dns", f.yseq(t_ip_address));
        addProp(t_subnet, "az", t_az_ref);
        addProp(t_subnet, "azs", f.yseq(t_az_ref));
        addProp(t_subnet, "cloud_properties", t_params);
        addProp(t_dynamic_nw, "subnets", f.yseq(t_subnet));
    }
    t_dynamic_nw.require(Constraints.mutuallyExclusive("dns", "subnets"));
    t_dynamic_nw.require(Constraints.mutuallyExclusive("cloud_properties", "subnets"));
    AbstractType t_network = f.contextAware("Network", dc -> {
        String type = models.getTypeTag(dc);
        if (StringUtil.hasText(type)) {
            switch(type) {
                case "manual":
                    return t_manual_nw;
                case "dynamic":
                    return t_dynamic_nw;
                case "vip":
                    return t_vip_nw;
                default:
            }
        }
        return null;
    }).treatAsBean();
    // Add shared properties to the 'super' type.
    addProp(t_network, "name", t_network_def).isPrimary(true);
    addProp(t_network, "type", f.yenum("NetworkType", "manual", "dynamic", "vip")).isRequired(true);
    // Add shared properties to all 'sub' types.
    for (AbstractType subtype : ImmutableList.of(t_dynamic_nw, t_manual_nw, t_vip_nw)) {
        for (YTypedProperty sharedProp : t_network.getProperties()) {
            subtype.addProperty(sharedProp);
        }
    }
    return t_network;
}
Also used : AbstractType(org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.AbstractType) YTypedProperty(org.springframework.ide.vscode.commons.yaml.schema.YTypedProperty) CollectorUtil(org.springframework.ide.vscode.commons.util.CollectorUtil) YamlSchemaProblems(org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems) Collection(java.util.Collection) YamlSchema(org.springframework.ide.vscode.commons.yaml.schema.YamlSchema) YTypeUtil(org.springframework.ide.vscode.commons.yaml.schema.YTypeUtil) PartialCollection(org.springframework.ide.vscode.commons.util.PartialCollection) YType(org.springframework.ide.vscode.commons.yaml.schema.YType) ASTTypeCache(org.springframework.ide.vscode.commons.yaml.reconcile.ASTTypeCache) YBeanType(org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.YBeanType) YAtomicType(org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.YAtomicType) Constraints(org.springframework.ide.vscode.commons.yaml.schema.constraints.Constraints) StringUtil(org.springframework.ide.vscode.commons.util.StringUtil) Pair(org.apache.commons.lang3.tuple.Pair) YTypeFactory(org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory) ImmutableList(com.google.common.collect.ImmutableList) ValueParsers(org.springframework.ide.vscode.commons.util.ValueParsers) BoshModels(org.springframework.ide.vscode.bosh.models.BoshModels) Lazy(org.springframework.ide.vscode.commons.util.Lazy) AbstractType(org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.AbstractType) YBeanType(org.springframework.ide.vscode.commons.yaml.schema.YTypeFactory.YBeanType) YTypedProperty(org.springframework.ide.vscode.commons.yaml.schema.YTypedProperty)

Example 3 with YType

use of org.springframework.ide.vscode.commons.yaml.schema.YType in project sts4 by spring-projects.

the class AppendTextBuilder method singleMostImportantProperty.

private void singleMostImportantProperty(YType type, int indent, StringBuilder text) {
    if (type != null) {
        YTypedProperty singleProp = Streams.getSingle(typeUtil.getProperties(type).stream().filter(p -> p.isPrimary()));
        if (singleProp == null) {
            singleProp = Streams.getSingle(typeUtil.getProperties(type).stream().filter(p -> p.isRequired()));
        }
        if (singleProp != null) {
            text.append(singleProp.getName());
            text.append(':');
            build(singleProp.getType(), indent + YamlIndentUtil.INDENT_BY, text);
        }
    }
}
Also used : YTypedProperty(org.springframework.ide.vscode.commons.yaml.schema.YTypedProperty) Streams(org.springframework.ide.vscode.commons.yaml.util.Streams) YTypeUtil(org.springframework.ide.vscode.commons.yaml.schema.YTypeUtil) YamlIndentUtil(org.springframework.ide.vscode.commons.yaml.util.YamlIndentUtil) YType(org.springframework.ide.vscode.commons.yaml.schema.YType) YTypedProperty(org.springframework.ide.vscode.commons.yaml.schema.YTypedProperty)

Example 4 with YType

use of org.springframework.ide.vscode.commons.yaml.schema.YType in project sts4 by spring-projects.

the class SchemaBasedYamlASTReconciler method checkRequiredProperties.

private void checkRequiredProperties(Node parent, MappingNode map, YType type, Map<String, YTypedProperty> beanProperties, DynamicSchemaContext dc) {
    Set<String> foundProps = NodeUtil.getScalarKeys(map);
    boolean allPropertiesKnown = beanProperties.keySet().containsAll(foundProps);
    // Don't check for missing properties if some properties look like they might be spelled incorrectly.
    if (allPropertiesKnown) {
        // Check for missing required properties:
        List<YTypedProperty> missingProps = beanProperties.values().stream().filter(YTypedProperty::isRequired).filter(prop -> !foundProps.contains(prop.getName())).collect(CollectorUtil.toImmutableList());
        Set<String> missingPropNames = missingProps.stream().map(YTypedProperty::getName).collect(Collectors.toCollection(TreeSet::new));
        if (!missingPropNames.isEmpty()) {
            String message;
            if (missingPropNames.size() == 1) {
                // slightly more specific message when only one missing property
                String missing = missingPropNames.stream().findFirst().get();
                message = "Property '" + missing + "' is required for '" + type + "'";
            } else {
                message = "Properties " + missingPropNames + " are required for '" + type + "'";
            }
            SchemaBasedSnippetGenerator snippetProvider = new SchemaBasedSnippetGenerator(typeUtil, SnippetBuilder::gimped);
            Snippet snippet = snippetProvider.getSnippet(missingProps);
            problems.accept(YamlSchemaProblems.missingProperties(message, dc, missingPropNames, snippet.getSnippet(), snippet.getPlaceHolder(1).getOffset(), parent, map, quickfixes.MISSING_PROP_FIX));
        }
    }
}
Also used : ReconcileException(org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileException) SequenceNode(org.yaml.snakeyaml.nodes.SequenceNode) IDocument(org.springframework.ide.vscode.commons.util.text.IDocument) QuickfixData(org.springframework.ide.vscode.commons.languageserver.quickfix.Quickfix.QuickfixData) SchemaContextAware(org.springframework.ide.vscode.commons.yaml.schema.SchemaContextAware) NodeUtil(org.springframework.ide.vscode.commons.yaml.ast.NodeUtil) YTypeUtil(org.springframework.ide.vscode.commons.yaml.schema.YTypeUtil) ProblemType(org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemType) TreeSet(java.util.TreeSet) MappingNode(org.yaml.snakeyaml.nodes.MappingNode) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Node(org.yaml.snakeyaml.nodes.Node) StringUtil(org.springframework.ide.vscode.commons.util.StringUtil) YamlQuickfixes(org.springframework.ide.vscode.commons.yaml.quickfix.YamlQuickfixes) YamlFileAST(org.springframework.ide.vscode.commons.yaml.ast.YamlFileAST) NodeId(org.yaml.snakeyaml.nodes.NodeId) Map(java.util.Map) ValueParseException(org.springframework.ide.vscode.commons.util.ValueParseException) IProblemCollector(org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemCollector) YamlPath(org.springframework.ide.vscode.commons.yaml.path.YamlPath) ValueParser(org.springframework.ide.vscode.commons.util.ValueParser) DynamicSchemaContext(org.springframework.ide.vscode.commons.yaml.schema.DynamicSchemaContext) SnippetBuilder(org.springframework.ide.vscode.commons.languageserver.util.SnippetBuilder) ASTDynamicSchemaContext(org.springframework.ide.vscode.commons.yaml.schema.ASTDynamicSchemaContext) NodeUtil.asScalar(org.springframework.ide.vscode.commons.yaml.ast.NodeUtil.asScalar) YamlPathSegment(org.springframework.ide.vscode.commons.yaml.path.YamlPathSegment) ExceptionUtil(org.springframework.ide.vscode.commons.util.ExceptionUtil) YTypedProperty(org.springframework.ide.vscode.commons.yaml.schema.YTypedProperty) CollectorUtil(org.springframework.ide.vscode.commons.util.CollectorUtil) Log(org.springframework.ide.vscode.commons.util.Log) DocumentRegion(org.springframework.ide.vscode.commons.util.text.DocumentRegion) ReconcileProblemImpl(org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblemImpl) YamlSchema(org.springframework.ide.vscode.commons.yaml.schema.YamlSchema) Set(java.util.Set) ReplacementQuickfix(org.springframework.ide.vscode.commons.languageserver.reconcile.ReplacementQuickfix) Constraint(org.springframework.ide.vscode.commons.yaml.schema.constraints.Constraint) IntegerRange(org.springframework.ide.vscode.commons.util.IntegerRange) Collectors(java.util.stream.Collectors) YType(org.springframework.ide.vscode.commons.yaml.schema.YType) SchemaBasedSnippetGenerator(org.springframework.ide.vscode.commons.yaml.snippet.SchemaBasedSnippetGenerator) NodeTuple(org.yaml.snakeyaml.nodes.NodeTuple) List(java.util.List) ProblemTypeProvider(org.springframework.ide.vscode.commons.languageserver.reconcile.ProblemTypeProvider) ScalarNode(org.yaml.snakeyaml.nodes.ScalarNode) ExceptionUtil.getSimpleError(org.springframework.ide.vscode.commons.util.ExceptionUtil.getSimpleError) Snippet(org.springframework.ide.vscode.commons.yaml.snippet.Snippet) Pattern(java.util.regex.Pattern) SnippetBuilder(org.springframework.ide.vscode.commons.languageserver.util.SnippetBuilder) SchemaBasedSnippetGenerator(org.springframework.ide.vscode.commons.yaml.snippet.SchemaBasedSnippetGenerator) Snippet(org.springframework.ide.vscode.commons.yaml.snippet.Snippet) YTypedProperty(org.springframework.ide.vscode.commons.yaml.schema.YTypedProperty)

Example 5 with YType

use of org.springframework.ide.vscode.commons.yaml.schema.YType in project sts4 by spring-projects.

the class TypeBasedYamlSymbolHandler method handle.

@Override
public List<? extends SymbolInformation> handle(DocumentSymbolParams params) {
    Builder<SymbolInformation> builder = ImmutableList.builder();
    TextDocument doc = documents.getDocument(params.getTextDocument().getUri());
    for (Entry<Node, YType> entry : astTypeCache.getNodeTypes(params.getTextDocument().getUri()).getTypes().entrySet()) {
        if (definitionTypes.contains(entry.getValue())) {
            try {
                builder.add(createSymbol(doc, entry.getKey(), entry.getValue()));
            } catch (Exception e) {
                Log.log(e);
            }
        }
    }
    return builder.build();
}
Also used : TextDocument(org.springframework.ide.vscode.commons.util.text.TextDocument) Node(org.yaml.snakeyaml.nodes.Node) SymbolInformation(org.eclipse.lsp4j.SymbolInformation) YType(org.springframework.ide.vscode.commons.yaml.schema.YType) BadLocationException(org.springframework.ide.vscode.commons.util.BadLocationException)

Aggregations

YType (org.springframework.ide.vscode.commons.yaml.schema.YType)10 YTypedProperty (org.springframework.ide.vscode.commons.yaml.schema.YTypedProperty)7 YTypeUtil (org.springframework.ide.vscode.commons.yaml.schema.YTypeUtil)6 ImmutableList (com.google.common.collect.ImmutableList)4 Collection (java.util.Collection)4 List (java.util.List)4 Map (java.util.Map)4 CollectorUtil (org.springframework.ide.vscode.commons.util.CollectorUtil)4 Collectors (java.util.stream.Collectors)3 PartialCollection (org.springframework.ide.vscode.commons.util.PartialCollection)3 Renderable (org.springframework.ide.vscode.commons.util.Renderable)3 DynamicSchemaContext (org.springframework.ide.vscode.commons.yaml.schema.DynamicSchemaContext)3 ArrayList (java.util.ArrayList)2 Set (java.util.Set)2 Pair (org.apache.commons.lang3.tuple.Pair)2 BoshModels (org.springframework.ide.vscode.bosh.models.BoshModels)2 StringUtil (org.springframework.ide.vscode.commons.util.StringUtil)2 YamlPath (org.springframework.ide.vscode.commons.yaml.path.YamlPath)2 YamlSchema (org.springframework.ide.vscode.commons.yaml.schema.YamlSchema)2 YamlIndentUtil (org.springframework.ide.vscode.commons.yaml.util.YamlIndentUtil)2