package io.oasp.gastronomy.restaurant.general.common.api.builders; import java.util.LinkedList; import java.util.List; import io.oasp.gastronomy.restaurant.tablemanagement.common.api.datatype.TableState; import io.oasp.gastronomy.restaurant.tablemanagement.logic.api.to.TableEto; public class TableEtoBuilder { private List<P<TableEto>> parameterToBeApplied; public TableEtoBuilder() { this.parameterToBeApplied = new LinkedList<>(); fillMandatoryFields(); fillMandatoryFields_custom(); } /** * Might be enrichted to users needs (will not be overwritten) */ private void fillMandatoryFields_custom() { } /** * Fills all mandatory fields by default. (will be overwritten on re-generation) */ private void fillMandatoryFields() { } public TableEtoBuilder number(final Long number) { this.parameterToBeApplied.add(new P<TableEto>() { @Override public void apply(TableEto target) { target.setNumber(number); } }); return this; } public TableEtoBuilder waiterId(final Long waiterId) { this.parameterToBeApplied.add(new P<TableEto>() { @Override public void apply(TableEto target) { target.setWaiterId(waiterId); } }); return this; } public TableEtoBuilder state(final TableState state) { this.parameterToBeApplied.add(new P<TableEto>() { @Override public void apply(TableEto target) { target.setState(state); } }); return this; } public TableEtoBuilder revision(final Number revision) { this.parameterToBeApplied.add(new P<TableEto>() { @Override public void apply(TableEto target) { target.setRevision(revision); } }); return this; } public TableEto createNew() { TableEto tableeto = new TableEto(); tableeto.setState(TableState.FREE); for (P<TableEto> parameter : this.parameterToBeApplied) { parameter.apply(tableeto); } return tableeto; } }