1 package org.kuali.common.devops.table; 2 3 import static com.google.common.base.Preconditions.checkNotNull; 4 5 import java.lang.reflect.Field; 6 7 import com.google.common.base.Optional; 8 9 public final class TableCellDescriptor<T> { 10 11 private final Field field; 12 private final Optional<T> fieldValue; 13 14 private TableCellDescriptor(Builder<T> builder) { 15 this.field = builder.field; 16 this.fieldValue = builder.fieldValue; 17 } 18 19 public static <T> TableCellDescriptor<T> create(Field field, Optional<T> fieldValue) { 20 Builder<T> builder = builder(); 21 return builder.field(field).fieldValue(fieldValue).build(); 22 } 23 24 public static <T> Builder<T> builder() { 25 return new Builder<T>(); 26 } 27 28 public static class Builder<T> implements org.apache.commons.lang3.builder.Builder<TableCellDescriptor<T>> { 29 30 private Field field; 31 private Optional<T> fieldValue; 32 33 public Builder<T> field(Field field) { 34 this.field = field; 35 return this; 36 } 37 38 public Builder<T> fieldValue(Optional<T> fieldValue) { 39 this.fieldValue = fieldValue; 40 return this; 41 } 42 43 public Builder<T> fieldValue(Object object) { 44 return fieldValue(Optional.of(object)); 45 } 46 47 @Override 48 public TableCellDescriptor<T> build() { 49 TableCellDescriptor<T> instance = new TableCellDescriptor<T>(this); 50 validate(instance); 51 return instance; 52 } 53 54 private static <T> void validate(TableCellDescriptor<T> instance) { 55 checkNotNull(instance.field, "'field' cannot be null"); 56 checkNotNull(instance.fieldValue, "'fieldValue' cannot be null"); 57 } 58 59 public Field getField() { 60 return field; 61 } 62 63 public void setField(Field field) { 64 this.field = field; 65 } 66 67 public Optional<T> getFieldValue() { 68 return fieldValue; 69 } 70 71 public void setFieldValue(Optional<T> fieldValue) { 72 this.fieldValue = fieldValue; 73 } 74 } 75 76 public Field getField() { 77 return field; 78 } 79 80 public Optional<T> getFieldValue() { 81 return fieldValue; 82 } 83 84 }