
com.moon.poi.excel.table.Attribute Maven / Gradle / Ivy
package com.moon.poi.excel.table;
import com.moon.core.lang.ArrayUtil;
import com.moon.core.util.ListUtil;
import com.moon.poi.excel.PropertyControl;
import com.moon.poi.excel.annotation.TableColumn;
import com.moon.poi.excel.annotation.TableColumnGroup;
import com.moon.poi.excel.annotation.style.DefinitionStyle;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.function.Predicate;
/**
* @author moonsky
*/
final class Attribute implements Descriptor, Comparable {
private final Marked onField;
private final Marked onMethod;
Attribute(Marked onMethod, Marked onField) {
this.onMethod = onMethod;
this.onField = onField;
Assert.notDuplicated(onMethod, onField);
}
private T obtainOrNull(Marked marked, Function getter) {
return marked == null ? null : getter.apply(marked);
}
// private T obtain(Predicate super T> tester, Function getter) {
// T value = obtainOrNull(onMethod, getter);
// return tester.test(value) ? obtainOrNull(onField, getter) : value;
// }
private T obtainOrNull(Function getter) {
T value = obtainOrNull(onMethod, getter);
return value == null ? obtainOrNull(onField, getter) : value;
}
public PropertyControl getValueGetter() {
Method method = this.onMethod == null ? null : (Method) this.onMethod.getMember();
Field field = this.onField == null ? null : (Field) this.onField.getMember();
return ValueGetter.of(method, field);
}
public TransferForGet getTransformOrDefault() {
return TransferForGet.findOrDefault(getPropertyType());
}
@Override
public String[] getTitles() {
String[] titles = obtainOrNull(m -> m.getTitles());
return titles == null ? ArrayUtil.toArray(getName()) : titles;
}
@Override
public short[] getHeadHeightArr() {
return obtainOrNull(m -> m.getHeadHeightArr());
}
@Override
public Integer getColumnWidth() {
TableColumn column = getTableColumn();
return column == null ? null : column.width() < 0 ? null : column.width();
}
@Override
public String getName() {
return obtainOrNull(m -> m.getName());
}
@Override
public Class getPropertyType() {
return obtainOrNull(m -> m.getPropertyType());
}
@Override
public T getAnnotation(Class annotationType) {
return (T) obtainOrNull(m -> m.getAnnotation(annotationType));
}
Method getMemberMethod() {
return (Method) onMethod.getMember();
}
Field getMemberField() {
return (Field) onField.getMember();
}
@Override
public List getDefinitionStylesOnMethod() {
return onMethod == null ? Collections.EMPTY_LIST : onMethod.getDefinitionStylesOnMethod();
}
@Override
public List getDefinitionStylesOnField() {
return onField == null ? Collections.EMPTY_LIST : onField.getDefinitionStylesOnField();
}
@Override
public TableColumn getTableColumn() {
return obtainOrNull(m -> m.getTableColumn());
}
@Override
public TableColumnGroup getTableColumnGroup() {
return obtainOrNull(m -> m.getTableColumnGroup());
}
public int getOrder() {
return getOrDefault(TableColumn::order, 0);
}
@Override
public int compareTo(Attribute o) { return this.getOrder() - o.getOrder(); }
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Attribute{");
sb.append("name=").append(getName());
sb.append(", onField=").append(onField);
sb.append(", onMethod=").append(onMethod);
sb.append('}');
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy