All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.reprezen.genflow.common.jsonschema.builder.DefinitionsNode Maven / Gradle / Ivy

package com.reprezen.genflow.common.jsonschema.builder;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
import com.reprezen.genflow.common.jsonschema.builder.JsonSchemaNode;
import com.reprezen.genflow.common.jsonschema.builder.JsonSchemaNodeFactory;
import com.reprezen.genflow.common.jsonschema.builder.NamedSchemaNode;
import com.reprezen.rapidml.ResourceAPI;
import com.reprezen.rapidml.ResourceDefinition;
import com.reprezen.rapidml.ServiceDataResource;
import com.reprezen.rapidml.Structure;
import com.reprezen.rapidml.TypedMessage;
import com.reprezen.rapidml.ZenModel;
import java.util.List;
import java.util.Set;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IteratorExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;

@SuppressWarnings("all")
public class DefinitionsNode extends JsonSchemaNode {
  private final ObjectNode definitionsNode;
  
  private final Set generatedDefinitionNames = CollectionLiterals.newHashSet();
  
  public DefinitionsNode(final JsonSchemaNodeFactory jsonSchemaNodeFactory, final ZenModel element) {
    this(jsonSchemaNodeFactory, element, new ObjectMapper().createObjectNode());
  }
  
  public DefinitionsNode(final JsonSchemaNodeFactory jsonSchemaNodeFactory, final ZenModel element, final ObjectNode definitionsNode) {
    super(jsonSchemaNodeFactory, element);
    this.definitionsNode = definitionsNode;
  }
  
  @Override
  public ObjectNode write(final ObjectNode parentNode) {
    final Function1> _function = (ResourceAPI it) -> {
      return it.getOwnedResourceDefinitions();
    };
    final Iterable resources = Iterables.filter(Iterables.concat(ListExtensions.>map(this.element.getResourceAPIs(), _function)), ServiceDataResource.class);
    for (final ServiceDataResource resource : resources) {
      this.writeTopLevelNode(this.factory.createResourceNode(resource));
    }
    final Function1 _function_1 = (TypedMessage it) -> {
      Structure _actualType = it.getActualType();
      return Boolean.valueOf((_actualType != null));
    };
    final List messages = IteratorExtensions.toList(IteratorExtensions.filter(Iterators.filter(this.element.eAllContents(), TypedMessage.class), _function_1));
    for (final TypedMessage message : messages) {
      this.writeTopLevelNode(this.factory.createTypedMessageNode(message));
    }
    return this.definitionsNode;
  }
  
  public void addReferenceToDefinition(final ObjectNode node, final NamedSchemaNode builder) {
    String _name = builder.getName();
    String _plus = ("#/definitions/" + _name);
    node.put("$ref", _plus);
    this.writeTopLevelNode(builder);
  }
  
  private void writeTopLevelNode(final NamedSchemaNode builder) {
    final boolean isRecursive = this.generatedDefinitionNames.contains(builder.getName());
    if ((!isRecursive)) {
      this.generatedDefinitionNames.add(builder.getName());
      builder.write(this.definitionsNode);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy