package com.constellio.app.ui.pages.search.batchProcessing.components; import com.constellio.app.ui.framework.components.fields.BaseTextField; import com.constellio.app.ui.framework.components.fields.enumWithSmallCode.EnumWithSmallCodeComboBox; import com.constellio.app.ui.framework.components.fields.lookup.LookupRecordField; import com.vaadin.data.Property; import com.vaadin.data.util.BeanItemContainer; import com.vaadin.data.util.MethodProperty; import com.vaadin.ui.Component; import com.vaadin.ui.CustomField; import com.vaadin.ui.Table; import com.vaadin.ui.Table.ColumnGenerator; import com.vaadin.ui.TextField; import java.util.List; import static com.constellio.app.ui.i18n.i18n.$; public class BatchProcessingEntryTable extends CustomField<List<String>> { private final BatchProcessingEntryPresenter presenter; private TableComponent table; public BatchProcessingEntryTable(BatchProcessingEntryPresenter presenter) { this.presenter = presenter; } @Override protected Component initContent() { BeanItemContainer<BatchProcessingEntry> entries = new BeanItemContainer<>( BatchProcessingEntry.class, presenter.getEntries()); table = new TableComponent(entries); table.setWidth("100%"); return table; } @Override @SuppressWarnings("unchecked") public Class<? extends List<String>> getType() { return (Class) List.class; } public void refreshEntries() { table.removeAllItems(); table.addItems(presenter.getEntries()); table.sort(new Object[] { table.getSortContainerPropertyId() }, new boolean[] { true }); } public interface BatchProcessingEntryPresenter { List<BatchProcessingEntry> getEntries(); } private static class TableComponent extends Table implements ColumnGenerator { public static final String LABEL = "label"; public static final String TYPE = "type"; public static final String INDEX = "index"; public static final String VALUE = "value"; public static final String MAPPING = "mapping"; public static final String DEFAULT = "default"; public TableComponent(BeanItemContainer<BatchProcessingEntry> entries) { super($("BatchProcessingEntryTable.caption", entries.size()), entries); setColumnHeader(LABEL, $("BatchProcessingEntryTable.label")); addGeneratedColumn(TYPE, this); setColumnHeader(TYPE, $("BatchProcessingEntryTable.type")); addGeneratedColumn(INDEX, this); setColumnHeader(INDEX, $("BatchProcessingEntryTable.index")); addGeneratedColumn(VALUE, this); setColumnHeader(VALUE, $("BatchProcessingEntryTable.value")); addGeneratedColumn(MAPPING, this); setColumnHeader(MAPPING, $("BatchProcessingEntryTable.mapping")); addGeneratedColumn(DEFAULT, this); setColumnHeader(DEFAULT, $("BatchProcessingEntryTable.default")); setVisibleColumns(LABEL, TYPE, INDEX, VALUE, MAPPING, DEFAULT); setColumnExpandRatio(LABEL, 1); setSortContainerPropertyId(LABEL); setSortAscending(true); } @Override public Object generateCell(Table source, Object itemId, Object columnId) { if (TYPE.equals(columnId)) { return buildTypeComponent((BatchProcessingEntry) itemId); } if (VALUE.equals(columnId)) { return buildValueComponent((BatchProcessingEntry) itemId); } if (INDEX.equals(columnId)) { return buildIndexComponent((BatchProcessingEntry) itemId); } if (MAPPING.equals(columnId)) { return buildMappingComponent((BatchProcessingEntry) itemId); } if (DEFAULT.equals(columnId)) { return buildDefaultComponent((BatchProcessingEntry) itemId); } return null; } private Object buildTypeComponent(BatchProcessingEntry entry) { EnumWithSmallCodeComboBox<BatchProcessingAction> box = new EnumWithSmallCodeComboBox<>(BatchProcessingAction.class); box.setPropertyDataSource(new MethodProperty(entry, "mappingType")); box.setNullSelectionAllowed(false); box.addValueChangeListener(new ValueChangeListener() { @Override public void valueChange(Property.ValueChangeEvent event) { refreshRowCache(); } }); return box; } private Object buildIndexComponent(BatchProcessingEntry entry) { TextField field = new BaseTextField(new MethodProperty<String>(entry, "index")); if (entry.getBatchProcessingAction().isDirectOrIndirect()) { field.setEnabled(true); field.setRequired(true); } else { field.setEnabled(false); field.setRequired(false); field.setValue(null); } return field; } private Object buildValueComponent(BatchProcessingEntry entry) { TextField field = new BaseTextField(new MethodProperty<String>(entry, "fixedValue")); if (entry.getBatchProcessingAction().isFixed()) { field.setEnabled(true); field.setRequired(true); } else { field.setEnabled(false); field.setRequired(false); field.setValue(null); } return field; } private Object buildMappingComponent(BatchProcessingEntry entry) { LookupRecordField field = new LookupRecordField("mappingTable"); if (entry.getBatchProcessingAction().isIndirect()) { field.setEnabled(true); } else { field.setEnabled(false); field.setValue(null); } return field; } private Object buildDefaultComponent(BatchProcessingEntry entry) { TextField field = new BaseTextField(new MethodProperty<String>(entry, "defaultValue")); if (entry.getBatchProcessingAction().isDirectOrIndirect()) { field.setEnabled(true); } else { field.setEnabled(false); field.setValue(null); } return field; } } }