package pluginbase.config.field;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import pluginbase.config.properties.PropertyHandler;
public class FieldInstance {
private Object containingObject;
private String[] name;
private int nameIndex = 0;
private FieldMap fieldMap;
private Field field;
FieldInstance(Object parentObject, @NotNull String... name) {
this.containingObject = parentObject;
this.name = name;
}
@Nullable
FieldInstance locateField() {
fieldMap = FieldMapper.getFieldMap(containingObject.getClass());
field = fieldMap.getField(name[nameIndex]);
if (field == null) {
return null;
}
if (nameIndex + 1 < name.length) {
if (field.hasChildFields()) {
nameIndex++;
containingObject = field.getValue(containingObject);
if (containingObject == null) {
return null;
}
return locateField();
} else {
return null;
}
}
return this;
}
@NotNull
public Class getType() {
return field.getType();
}
@Nullable
public Class getCollectionType() {
return field.getCollectionType();
}
@Nullable
public Object getValue() {
return field.getValue(containingObject);
}
public void setValue(@Nullable Object value) throws PropertyVetoException {
field.setValue(containingObject, value);
}
public Validator getValidator() {
return field.getValidator();
}
public boolean isImmutable() {
return field.isImmutable();
}
@NotNull
public PropertyHandler getPropertyHandler() {
return field.getPropertyHandler();
}
}