package com.constellio.app.modules.rm.ui.components.decommissioning;
import com.constellio.app.modules.rm.ui.pages.decommissioning.DecommissioningListPresenter;
import com.constellio.app.modules.rm.wrappers.structures.DecomListContainerDetail;
import com.constellio.app.ui.framework.components.BooleanLabel;
import com.constellio.app.ui.framework.components.display.ReferenceDisplay;
import com.constellio.app.ui.framework.components.table.BaseTable;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
import com.vaadin.ui.Table.Align;
import com.vaadin.ui.Table.ColumnGenerator;
import static com.constellio.app.ui.i18n.i18n.$;
public class ContainerDetailTableGenerator implements ColumnGenerator {
public static final String IDENTIFIER = "identifier";
public static final String FULL = "full";
public static final String AVAILABLE_SIZE = "availableSize";
private final DecommissioningListPresenter presenter;
public ContainerDetailTableGenerator(DecommissioningListPresenter presenter) {
this.presenter = presenter;
}
public BaseTable attachTo(BaseTable table) {
table.addGeneratedColumn(IDENTIFIER, this);
table.setColumnHeader(IDENTIFIER, $("DecommissioningListView.containerDetails.id"));
table.setColumnExpandRatio(IDENTIFIER, 1);
table.addGeneratedColumn(FULL, this);
table.setColumnHeader(FULL, $("DecommissioningListView.containerDetails.full"));
table.setColumnAlignment(FULL, Align.CENTER);
table.addGeneratedColumn(AVAILABLE_SIZE, this);
table.setColumnHeader(AVAILABLE_SIZE, $("DecommissioningListView.containerDetails.availableSize"));
table.setColumnAlignment(AVAILABLE_SIZE, Align.CENTER);
table.setVisibleColumns(IDENTIFIER, AVAILABLE_SIZE, FULL);
return table;
}
@Override
public Object generateCell(Table source, Object itemId, Object columnId) {
DecomListContainerDetail detail = (DecomListContainerDetail) itemId;
switch ((String) columnId) {
case IDENTIFIER:
return new ReferenceDisplay(detail.getContainerRecordId());
case FULL:
return presenter.isEditable() ? buildFullCheckBox(detail) : buildFullDisplay(detail);
case AVAILABLE_SIZE:
return buildAvailableSizeComponent(detail);
}
return null;
}
private Component buildFullDisplay(DecomListContainerDetail detail) {
return new BooleanLabel(detail.isFull());
}
private Component buildFullCheckBox(final DecomListContainerDetail detail) {
final CheckBox checkBox = new CheckBox();
checkBox.setValue(detail.isFull());
checkBox.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
presenter.containerStatusChanged(detail, checkBox.getValue());
}
});
return checkBox;
}
private Component buildAvailableSizeComponent(final DecomListContainerDetail detail) {
Double availableSize = detail.getAvailableSize();
String caption = availableSize == null? "":availableSize.toString() + " cm";
return new Label(caption);
}
}