com.softicar.platform.common.container.data.table.in.memory.InMemoryDataTableColumnBuilder Maven / Gradle / Ivy
Show all versions of platform-common Show documentation
package com.softicar.platform.common.container.data.table.in.memory;
import com.softicar.platform.common.container.data.table.IDataTableColumn;
import com.softicar.platform.common.core.i18n.IDisplayString;
import java.util.Comparator;
import java.util.Optional;
import java.util.function.Function;
/**
* A builder for instances of {@link IDataTableColumn}.
*
* Actually, this builder does not only create new columns but it adds them
* directly to the given {@link InMemoryDataTableStructure}.
*
* @author Oliver Richers
*/
public class InMemoryDataTableColumnBuilder {
private final InMemoryDataTableStructure structure;
private final Class valueClass;
private Function valueGetter;
private IDisplayString title;
private Optional> valueComparator;
/**
* Constructs a new instance of this builder.
*
* @param structure
* the structure that the created column shall be added to
* @param valueClass
* the class of the column values
*/
public InMemoryDataTableColumnBuilder(InMemoryDataTableStructure structure, Class valueClass) {
this.structure = structure;
this.valueClass = valueClass;
this.valueComparator = new InMemoryDataTableColumnInternalValueComparatorFactory().create(valueClass);
}
public class GetterSetter {
/**
* Defines the {@link Comparator} for the column values.
*
* @param comparator
* the value comparator (never null)
*/
public GetterSetter setComparator(Optional> comparator) {
valueComparator = comparator;
return this;
}
/**
* Defines the {@link Comparator} for the column values.
*
* @param comparator
* the value comparator (never null)
*/
public GetterSetter setComparator(Comparator comparator) {
valueComparator = Optional.of(comparator);
return this;
}
/**
* Defines the getter function to extract a column value from a row.
*
* @param getter
* the value getter (never null)
*/
public TitleSetter setGetter(Function getter) {
valueGetter = getter;
return new TitleSetter();
}
}
public class TitleSetter {
/**
* Defines the title of the column.
*
* @param displayString
* title display string (never null)
*/
public ColumnAdder setTitle(IDisplayString displayString) {
title = displayString;
return new ColumnAdder();
}
}
public class ColumnAdder {
/**
* Creates column instance and adds it to the table structure.
*
* @return the created and added column
*/
public IDataTableColumn addColumn() {
return structure.addColumn(InMemoryDataTableColumnBuilder.this);
}
}
protected Function getValueGetter() {
return valueGetter;
}
protected Class getValueClass() {
return valueClass;
}
protected Optional> getValueComparator() {
return valueComparator;
}
protected IDisplayString getTitle() {
return title;
}
}