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 core library for Active Objects. It is generic and can be embedded in any environment. As such it is generic and won't contain all connection pooling, etc.

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