package net.rrm.ehour.backup.service.restore.structure;
import com.google.common.collect.Maps;
import javax.persistence.Embeddable;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Map;
public class FieldMap {
private Map<String, FieldDefinition> fields;
private FieldDefinition generatedId;
private FieldDefinition id;
private boolean compositeId;
public FieldMap() {
fields = Maps.newHashMap();
}
void afterFieldsSet() {
for (FieldDefinition fieldDefinition : fieldDefinitions()) {
Field field = fieldDefinition.getField();
if (field.isAnnotationPresent(Id.class)) {
id = fieldDefinition;
if (field.isAnnotationPresent(GeneratedValue.class)) {
generatedId = fieldDefinition;
} else {
compositeId = field.getType().isAnnotationPresent(Embeddable.class);
}
break;
}
}
}
void put(String field, FieldDefinition fieldDefinition) {
fields.put(field, fieldDefinition);
}
void merge(FieldMap other) {
fields.putAll(other.fields);
}
public Collection<FieldDefinition> fieldDefinitions() {
return fields.values();
}
public FieldDefinition get(String field) {
return fields.get(field);
}
public FieldDefinition getGeneratedId() {
return generatedId;
}
public FieldDefinition getId() {
return id;
}
public boolean isCompositeId() {
return compositeId;
}
}