package com.constellio.app.ui.pages.management.facet;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.List;
import org.vaadin.dialogs.ConfirmDialog;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.buttons.DeleteButton;
import com.constellio.app.ui.framework.buttons.DisableButton;
import com.constellio.app.ui.framework.buttons.DisplayButton;
import com.constellio.app.ui.framework.buttons.EditButton;
import com.constellio.app.ui.framework.buttons.EnableButton;
import com.constellio.app.ui.framework.components.table.RecordVOTable;
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.pages.base.BaseViewImpl;
import com.constellio.model.entities.records.wrappers.Facet;
import com.vaadin.data.Container;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.VerticalLayout;
public class ListFacetConfigurationViewImpl extends BaseViewImpl implements ListFacetConfigurationView {
private ListFacetConfigurationPresenter presenter;
private RecordVOTable listFacet;
private VerticalLayout mainLayout;
public ListFacetConfigurationViewImpl() {
presenter = new ListFacetConfigurationPresenter(this);
}
@Override
protected String getTitle() {
return $("ListFacetConfigurationView.viewTitle");
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
mainLayout = new VerticalLayout();
mainLayout.setSizeFull();
mainLayout.setSpacing(true);
listFacet = valuesTable();
mainLayout.addComponents(listFacet);
return mainLayout;
}
@Override
public List<Button> buildActionMenuButtons(ViewChangeEvent event) {
List<Button> result = super.buildActionMenuButtons(event);
Button add = new Button($("ListFacetConfigurationView.add"));
add.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.addButtonClicked();
}
});
Button order = new Button($("ListFacetConfigurationView.order"));
order.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.orderButtonClicked();
}
});
result.add(add);
result.add(order);
return result;
}
private RecordVOTable valuesTable() {
final RecordVODataProvider dataProvider = presenter.getDataProvider();
Container recordsContainer = new RecordVOLazyContainer(dataProvider);
ButtonsContainer buttonsContainer = new ButtonsContainer(recordsContainer, "buttons");
buttonsContainer.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 = dataProvider.getRecordVO(index);
presenter.displayButtonClicked(entity);
}
};
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new EditButton() {
@Override
protected void buttonClick(ClickEvent event) {
Integer index = (Integer) itemId;
RecordVO entity = dataProvider.getRecordVO(index);
presenter.editButtonClicked(entity);
}
};
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
Integer index = (Integer) itemId;
final RecordVO entity = dataProvider.getRecordVO(index);
Button activateButton = new EnableButton() {
@Override
protected void confirmButtonClick(ConfirmDialog dialog) {
presenter.activate(entity);
}
};
activateButton.setVisible(!presenter.isActive(entity));
return activateButton;
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
Integer index = (Integer) itemId;
final RecordVO entity = dataProvider.getRecordVO(index);
Button deactivateButton = new DisableButton() {
@Override
protected void confirmButtonClick(ConfirmDialog dialog) {
presenter.deactivate(entity);
}
};
deactivateButton.setVisible(presenter.isActive(entity));
return deactivateButton;
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new DeleteButton() {
@Override
protected void confirmButtonClick(ConfirmDialog dialog) {
Integer index = (Integer) itemId;
RecordVO entity = dataProvider.getRecordVO(index);
presenter.deleteButtonClicked(entity);
}
};
}
});
recordsContainer = buttonsContainer;
RecordVOTable table = new RecordVOTable(
$("ListFacetConfiguration.tableTitle", dataProvider.size()), recordsContainer, false);
table.setWidth("100%");
table.setColumnHeader("buttons", "");
table.setColumnHeader(Facet.TITLE, $("title"));
table.setColumnHeader(Facet.FACET_TYPE, $("facetType"));
table.setColumnHeader(Facet.ORDER_RESULT, $("elementPerPage"));
table.setColumnHeader(Facet.ORDER, $("facerOrder"));
table.setColumnWidth(dataProvider.getSchema().getCode() + "_id", 120);
table.setColumnWidth("buttons", 160);
table.setPageLength(Math.min(15, dataProvider.size()));
return table;
}
@Override
protected void initBeforeCreateComponents(ViewChangeEvent event) {
}
@Override
public void refreshTable() {
RecordVOTable newListFacet = valuesTable();
mainLayout.replaceComponent(listFacet, newListFacet);
listFacet = newListFacet;
}
@Override
protected ClickListener getBackButtonClickListener() {
return new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClicked();
}
};
}
}