net.java.ao.schema.info.ImmutableEntityInfo Maven / Gradle / Ivy
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 - 2025 Weber Informatics LLC | Privacy Policy