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 }