package com.constellio.app.ui.pages.trash;
import static com.constellio.app.ui.i18n.i18n.$;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.buttons.DisplayButton;
import com.constellio.app.ui.framework.buttons.WindowButton;
import com.constellio.app.ui.framework.buttons.WindowButton.WindowConfiguration;
import com.constellio.app.ui.framework.components.table.RecordVOTable;
import com.constellio.app.ui.framework.components.table.SelectionTableAdapter;
import com.constellio.app.ui.framework.components.table.columns.RecordVOTableColumnsManager;
import com.constellio.app.ui.framework.components.table.columns.TableColumnsManager;
import com.constellio.app.ui.framework.containers.ButtonsContainer;
import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton;
import com.constellio.app.ui.framework.containers.RecordVOLazyContainer;
import com.constellio.app.ui.framework.data.RecordVODataProvider;
import com.constellio.app.ui.framework.items.RecordVOItem;
import com.constellio.model.entities.schemas.Schemas;
import com.vaadin.server.Resource;
import com.vaadin.server.ThemeResource;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;
public class TrashRecordsTable extends SelectionTableAdapter {
private static final Resource RELATED_RESOURCE = new ThemeResource("images/commun/warning.png");
private final TrashPresenter presenter;
private final RecordVODataProvider dataProvider;
@SuppressWarnings({ "rawtypes", "unchecked" })
public TrashRecordsTable(RecordVODataProvider dataProvider, final TrashPresenter presenter) {
super();
this.presenter = presenter;
this.dataProvider = dataProvider;
RecordVOTable table = new RecordVOTable() {
@Override
protected TableColumnsManager newColumnsManager() {
return new RecordVOTableColumnsManager() {
@Override
public void manage(Table table, String tableId) {
super.manage(table, tableId);
setColumnCollapsed(Schemas.MODIFIED_ON.getLocalCode(), true);
setColumnCollapsed(Schemas.LOGICALLY_DELETED_ON.getLocalCode(), false);
}
};
}
@Override
public boolean isContextMenuPossible() {
return false;
}
};
ButtonsContainer<?> dataSource = new ButtonsContainer(new RecordVOLazyContainer(dataProvider), "buttons");
table.setColumnCollapsingAllowed(true);
table.setContainerDataSource(dataSource);
dataSource.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new DisplayButton() {
@Override
protected void buttonClick(ClickEvent event) {
Integer index = (Integer) itemId;
RecordVO entity = TrashRecordsTable.this.dataProvider.getRecordVO(index);
TrashRecordsTable.this.presenter.displayButtonClicked(entity);
}
};
}
});
dataSource.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(Object itemId, ButtonsContainer<?> container) {
final Integer index = (Integer) itemId;
WindowButton relatedRecordsWindow = new WindowButton(RELATED_RESOURCE, $("TrashRecordsTable.relatedRecords"), true,
WindowConfiguration.modalDialog("50%", "50%")) {
@Override
protected Component buildWindowContent() {
VerticalLayout verticalLayout = new VerticalLayout();
Label label = new Label(TrashRecordsTable.this.presenter
.getRelatedRecordsMessage(TrashRecordsTable.this.dataProvider.getRecordVO(index)));
verticalLayout.addComponent(label);
return verticalLayout;
}
};
relatedRecordsWindow.setEnabled(TrashRecordsTable.this.presenter
.physicalDeleteFailed(TrashRecordsTable.this.dataProvider.getRecordVO(index)));
return relatedRecordsWindow;
}
});
table.setPageLength(Math.min(15, dataProvider.size()));
table.setSizeFull();
table.setColumnHeader("buttons", "");
table.setCellStyleGenerator(new TrashStyleGenerator());
setTable(table);
}
public class TrashStyleGenerator implements Table.CellStyleGenerator {
private static final String ERROR_STYLE = "textRed";
@Override
public String getStyle(Table source, Object itemId, Object propertyId) {
String style;
RecordVOItem item = (RecordVOItem) source.getItem(itemId);
RecordVO recordVO = item.getRecord();
if (presenter.physicalDeleteFailed(recordVO)) {
style = ERROR_STYLE;
} else {
style = null;
}
return style;
}
}
@Override
public boolean isAllItemsSelected() {
return presenter.isAllItemsSelected();
}
@Override
public boolean isAllItemsDeselected() {
return presenter.isAllItemsDeselected();
}
@Override
public void selectAll() {
presenter.selectAllClicked();
}
@Override
public void deselectAll() {
presenter.deselectAllClicked();
}
@Override
public boolean isSelected(Object itemId) {
return presenter.isRecordSelected(dataProvider.getRecordVO((Integer) itemId));
}
@Override
public void setSelected(Object itemId, boolean selected) {
Integer index = (Integer) itemId;
RecordVO entity = dataProvider.getRecordVO(index);
presenter.recordSelectionChanged(entity, selected);
}
}