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

io.vulpine.lib.json.schema.v4.impl.MultiSchemaImpl Maven / Gradle / Ivy

The newest version!
package io.vulpine.lib.json.schema.v4.impl;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.vulpine.lib.json.schema.SchemaBuilder;
import io.vulpine.lib.json.schema.v4.*;

class MultiSchemaImpl extends SchemaNodeImpl implements MultiSchema
{
  private final String key;

  private ArrayNode ctx;

  MultiSchemaImpl(ObjectMapper jax, ObjectNode raw, String type)
  {
    super(jax, raw);
    key = type;
  }

  // ┌─────────────────────────────────────────────────────┐
  // │                                                     │
  // │ Interface implementations                           │
  // │                                                     │
  // └─────────────────────────────────────────────────────┘

  @Override
  public MultiSchema add(SchemaBuilder... vals)
  {
    // Prevent empty array in output
    if (vals.length < 1)
      return this;

    var c = ctx();
    for (var j : vals)
      c.add(strip(j.build()));

    return this;
  }

  @Override
  public ArrayChildSchema addArray()
  {
    return new ArrayChildSchemaImpl<>(this, jax(), newObj(), this::add);
  }

  @Override
  public BooleanChildSchema addBoolean()
  {
    return new BooleanChildSchemaImpl<>(this, jax(), newObj(), this::add);
  }

  @Override
  public IntegerChildSchema addInteger()
  {
    return new IntegerChildSchemaImpl<>(this, jax(), newObj(), this::add);
  }

  @Override
  public NullChildSchema addNull()
  {
    return new NullChildSchemaImpl<>(this, jax(), newObj(), this::add);
  }

  @Override
  public NumberChildSchema addNumber()
  {
    return new NumberChildSchemaImpl<>(this, jax(), newObj(), this::add);
  }

  @Override
  public ObjectChildSchema addObject()
  {
    return new ObjectChildSchemaImpl<>(this, jax(), newObj(), this::add);
  }

  @Override
  public StringChildSchema addString()
  {
    return new StringChildSchemaImpl<>(this, jax(), newObj(), this::add);
  }

  @Override
  public UntypedChildSchema add()
  {
    return new UntypedChildSchemaImpl<>(this, jax(), newObj(), this::add);
  }

  // ┌─────────────────────────────────────────────────────┐
  // │                                                     │
  // │ Return type overrides                               │
  // │                                                     │
  // └─────────────────────────────────────────────────────┘

  @Override
  public MultiSchema id(String id)
  {
    return (MultiSchema) super.id(id);
  }

  @Override
  public MultiSchema removeId()
  {
    return (MultiSchema) super.removeId();
  }

  @Override
  public MultiSchema $schema(String path)
  {
    return (MultiSchema) super.$schema(path);
  }

  @Override
  public MultiSchema remove$Schema()
  {
    return (MultiSchema) super.remove$Schema();
  }

  @Override
  public MultiSchema $ref(String path)
  {
    return (MultiSchema) super.$ref(path);
  }

  @Override
  public MultiSchema remove$Ref()
  {
    return (MultiSchema) super.remove$Ref();
  }

  @Override
  public MultiSchema description(String desc)
  {
    return (MultiSchema) super.description(desc);
  }

  @Override
  public MultiSchema removeDescription()
  {
    return (MultiSchema) super.removeDescription();
  }

  @Override
  public MultiSchema title(String title)
  {
    return (MultiSchema) super.title(title);
  }

  @Override
  public MultiSchema removeTitle()
  {
    return (MultiSchema) super.removeTitle();
  }

  @Override
  @SuppressWarnings("unchecked")
  public UntypedChildSchema definition(String name)
  {
    return (UntypedChildSchema) super.definition(name);
  }

  @Override
  public MultiSchema definition(String name, SchemaBuilder schema)
  {
    return (MultiSchema) super.definition(name, schema);
  }

  @Override
  public MultiSchema removeDefinition(String name)
  {
    return (MultiSchema) super.removeDefinition(name);
  }

  @Override
  public MultiSchema removeDefinitions()
  {
    return (MultiSchema) super.removeDefinitions();
  }

  @Override
  public MultiSchema defaultValue(JsonNode val)
  {
    return (MultiSchema) super.defaultValue(val);
  }

  @Override
  public MultiSchema removeDefault()
  {
    return (MultiSchema) super.removeDefault();
  }

  @Override
  @SuppressWarnings("unchecked")
  public UntypedChildSchema not()
  {
    return (UntypedChildSchema) super.not();
  }

  // ┌─────────────────────────────────────────────────────┐
  // │                                                     │
  // │ Internal helpers                                    │
  // │                                                     │
  // └─────────────────────────────────────────────────────┘

  private ArrayNode ctx()
  {
    if (ctx == null)
      ctx = raw().putArray(key);

    return ctx;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy