package com.celements.model.util;
import java.util.Collection;
import java.util.Objects;
import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import com.celements.model.classes.fields.ClassField;
import com.google.common.base.Preconditions;
public class ClassFieldValue<T> {
private final ClassField<T> field;
private final T value;
public ClassFieldValue(@NotNull ClassField<T> field, @Nullable T value) {
this.field = Preconditions.checkNotNull(field);
this.value = value;
}
public ClassField<T> getField() {
return field;
}
public boolean isField(ClassField<?> otherField) {
return field.equals(otherField);
}
public T getValue() {
return value;
}
@Override
public int hashCode() {
return Objects.hash(field, value);
}
@Override
public boolean equals(Object obj) {
if (obj instanceof ClassFieldValue) {
ClassFieldValue<?> other = (ClassFieldValue<?>) obj;
return Objects.equals(this.field, other.field) && Objects.equals(this.value, other.value);
}
return false;
}
@Override
public String toString() {
return toString(true);
}
public String toString(boolean local) {
return field.toString(local) + ": " + value;
}
@SuppressWarnings("unchecked")
public static <T> T select(ClassField<T> toSelect, Collection<ClassFieldValue<?>> in) {
T ret = null;
for (ClassFieldValue<?> fieldVal : in) {
if (toSelect.equals(fieldVal.field)) {
ret = ((ClassFieldValue<T>) fieldVal).getValue();
break;
}
}
return ret;
}
}