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

io.vertx.tp.plugin.booting.KConnect Maven / Gradle / Ivy

There is a newer version: 0.9.0
Show newest version
package io.vertx.tp.plugin.booting;

import com.fasterxml.jackson.databind.JsonArrayDeserializer;
import com.fasterxml.jackson.databind.JsonArraySerializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.vertx.core.json.JsonArray;
import io.vertx.up.atom.pojo.Mirror;
import io.vertx.up.atom.pojo.Mojo;
import io.vertx.up.unity.Ux;
import io.vertx.up.util.Ut;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

/**
 * Connect configuration data to
 * Dao / Pojo class
 */
public class KConnect implements Serializable {

    private transient Class dao;
    private transient String pojoFile;

    @JsonSerialize(using = JsonArraySerializer.class)
    @JsonDeserialize(using = JsonArrayDeserializer.class)
    private transient JsonArray unique;
    private transient String key;

    public String getTable() {
        Objects.requireNonNull(this.dao);
        return Ux.Jooq.table(this.dao);
    }

    public Class getPojo() {
        Objects.requireNonNull(this.dao);
        return Ux.Jooq.pojo(this.dao);
    }

    public Class getDao() {
        return this.dao;
    }

    public void setDao(final Class dao) {
        this.dao = dao;
    }

    public String getPojoFile() {
        return this.pojoFile;
    }

    public void setPojoFile(final String pojoFile) {
        this.pojoFile = pojoFile;
    }

    public JsonArray getUnique() {
        return this.unique;
    }

    public void setUnique(final JsonArray unique) {
        this.unique = unique;
    }

    public String getKey() {
        return this.key;
    }

    public void setKey(final String key) {
        this.key = key;
    }

    public Set ukIn() {
        if (Objects.isNull(this.pojoFile)) {
            return Ut.toSet(this.unique);
        } else {
            if (Ut.isNil(this.unique)) {
                return new HashSet<>();
            }
            final Set result = new HashSet<>();
            final Mojo mojo = Mirror.create(this.getClass())
                .mount(this.pojoFile)
                .type(this.getDao()).mojo();
            Ut.itJArray(this.unique, String.class, (field, index) -> {
                final String converted = mojo.getIn(field);
                if (Objects.isNull(converted)) {
                    result.add(field);
                } else {
                    result.add(converted);
                }
            });
            return result;
        }
    }

    public String pkIn() {
        /*
         * Calculated for Pojo Part
         * 1. When pojo file is null, return key directly.
         * 2. Second situation, when this table is RELATION table, this.key is null.
         */
        if (Objects.isNull(this.pojoFile)) {
            return this.key;
        } else {
            if (Objects.isNull(this.key)) {
                return null;
            }
            final Mojo mojo = Mirror.create(this.getClass())
                .mount(this.pojoFile)
                .type(this.getDao()).mojo();
            return mojo.getIn(this.key);
        }
    }

    @Override
    public String toString() {
        return "ExConnect{" +
            ", dao=" + this.dao +
            ", pojoFile='" + this.pojoFile + '\'' +
            ", unique=" + this.unique +
            ", key='" + this.key + '\'' +
            '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy