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

net.java.ao.schema.info.ImmutableEntityInfo Maven / Gradle / Ivy

Go to download

This is the full Active Objects library, if you don't know which one to use, you probably want this one.

There is a newer version: 6.1.1
Show newest version
package net.java.ao.schema.info;

import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import net.java.ao.RawEntity;

import java.lang.reflect.Method;
import java.util.Map;
import java.util.Objects;
import java.util.Set;


class ImmutableEntityInfo, K> implements EntityInfo {

    private final Class entityType;
    private final String tableName;
    private final FieldInfo primaryKey;
    private final Map fieldByName;
    private final Map fieldByMethod;

    ImmutableEntityInfo(
            Class entityType,
            String tableName,
            Set fields) {
        this.entityType = Objects.requireNonNull(entityType, "entityType");
        this.tableName = Objects.requireNonNull(tableName, "tableName");

        ImmutableMap.Builder fieldByNameBuilder = ImmutableMap.builder();
        ImmutableMap.Builder fieldByMethodBuilder = ImmutableMap.builder();
        FieldInfo primaryKey = null;
        for (FieldInfo field : fields) {
            fieldByNameBuilder.put(field.getName(), field);
            if (field.getPolymorphicName() != null) {
                fieldByNameBuilder.put(field.getPolymorphicName(), field);
            }
            if (field.isPrimary()) {
                primaryKey = field;
            }
            if (field.hasAccessor()) {
                fieldByMethodBuilder.put(field.getAccessor(), field);
            }
            if (field.hasMutator()) {
                fieldByMethodBuilder.put(field.getMutator(), field);
            }
        }
        fieldByName = fieldByNameBuilder.build();
        fieldByMethod = fieldByMethodBuilder.build();
        //noinspection unchecked
        this.primaryKey = Objects.requireNonNull(primaryKey, "primaryKey");
    }

    @Override
    public Class getEntityType() {
        return entityType;
    }

    @Override
    public String getName() {
        return tableName;
    }

    @Override
    public FieldInfo getPrimaryKey() {
        return primaryKey;
    }

    @Override
    public Set getFields() {
        return ImmutableSet.copyOf(fieldByName.values());
    }

    @Override
    public Set getFieldNames() {
        return ImmutableSet.copyOf(Collections2.transform(getFields(), FieldInfo.PLUCK_NAME));
    }

    @Override
    public FieldInfo getField(Method method) {
        return fieldByMethod.get(method);
    }

    @Override
    public FieldInfo getField(String fieldName) {
        return fieldByName.get(fieldName);
    }

    @Override
    public boolean hasAccessor(Method method) {
        FieldInfo field = fieldByMethod.get(method);
        return field != null && method.equals(field.getAccessor());
    }

    @Override
    public boolean hasMutator(Method method) {
        FieldInfo field = fieldByMethod.get(method);
        return field != null && method.equals(field.getMutator());
    }

    @Override
    public boolean hasField(String fieldName) {
        return fieldByName.containsKey(fieldName);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        ImmutableEntityInfo that = (ImmutableEntityInfo) o;

        return !(entityType != null ? !entityType.equals(that.entityType) : that.entityType != null);

    }

    @Override
    public int hashCode() {
        return entityType != null ? entityType.hashCode() : 0;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy