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

com.heliorm.impl.FieldPart Maven / Gradle / Ivy

The newest version!
package com.heliorm.impl;

import com.heliorm.Field;
import com.heliorm.OrmException;
import com.heliorm.Table;
import com.heliorm.def.FieldOrder;

import java.util.Optional;

import static java.lang.String.format;

/**
 * @param  Type of POJO
 * @param  Type of the field
 * @author gideon
 */
public abstract class FieldPart implements Field, Cloneable {

    private final Table table;
    private final FieldType fieldType;
    private final Class javaType;
    private final String javaName;
    private String sqlName;
    private boolean primaryKey = false;
    private boolean autoNumber = false;
    private boolean foreignKey = false;
    private boolean nullable = false;
    private Optional> foreignTable = Optional.empty();
    private Optional length = Optional.empty();


    public FieldPart(Table table, FieldType fieldType, Class javaType, String javaName) {
        this.table = table;
        this.fieldType = fieldType;
        this.javaType = javaType;
        this.javaName = javaName;
        this.sqlName = javaName;
    }

    @Override
    public final Table getTable() {
        return table;
    }

    @Override
    public final Class getJavaType() {
        return javaType;
    }

    @Override
    public final String getJavaName() {
        return javaName;
    }

    @Override
    public final String getSqlName() {
        return sqlName;
    }

    void setSqlName(String sqlName) {
        this.sqlName = sqlName;
    }

    @Override
    public final boolean isPrimaryKey() {
        return primaryKey;
    }

    void setPrimaryKey(boolean primaryKey) {
        this.primaryKey = primaryKey;
    }

    @Override
    public boolean isAutoNumber() {
        return autoNumber;
    }

    void setAutoNumber(boolean autoNumber) {
        this.autoNumber = autoNumber;
    }

    public final FieldPart getThis() throws OrmException {
        try {
            return (FieldPart) clone();
        } catch (CloneNotSupportedException ex) {
            throw new OrmException(format("Could not make a copy of class %s.BUG!", getClass().getSimpleName()));
        }
    }

    @Override
    public final FieldType getFieldType() {
        return fieldType;
    }

    @Override
    public final boolean isForeignKey() {
        return foreignKey;
    }

    void setForeignKey(boolean foreignKey) {
        this.foreignKey = foreignKey;
    }

    @Override
    public final Optional> getForeignTable() {
        return foreignTable;
    }

    void setForeignTable(Optional> foreignTable) {
        this.foreignTable = foreignTable;
    }

    @Override
    public final Optional getLength() {
        return length;
    }

    public void setLength(Optional length) {
        this.length = length;
    }

    @Override
    public final boolean isNullable() {
        return nullable;
    }

    void setNullable(boolean nullable) {
        this.nullable = nullable;
    }

    public FieldOrder asc() {
        return () -> FieldPart.this;
    }

    public FieldOrder desc() {
        return new FieldOrder() {

            @Override
            public Direction getDirection() {
                return Direction.DESC;
            }

            @Override
            public Field getField() {
                return FieldPart.this;
            }
        };
    }

    @Override
    public Field getField() {
        return this;
    }

    @Override
    public String toString() {
        return format("%s : %s", getJavaName(), getFieldType());
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy