package com.constellio.app.ui.pages.management.taxonomy;
import static com.constellio.app.ui.i18n.i18n.$;
import com.constellio.app.ui.entities.TaxonomyVO;
import com.constellio.app.ui.framework.buttons.AddButton;
import com.constellio.app.ui.framework.buttons.DisplayButton;
import com.constellio.app.ui.framework.buttons.EditButton;
import com.constellio.app.ui.framework.components.table.BaseTable;
import com.constellio.app.ui.framework.containers.ButtonsContainer;
import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.vaadin.data.Container;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Alignment;
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.Table;
import com.vaadin.ui.VerticalLayout;
public class ListTaxonomyViewImpl extends BaseViewImpl implements ListTaxonomyView {
private final ListTaxonomyPresenter presenter;
private VerticalLayout layout;
private Table taxonomies;
private Button addButton;
public ListTaxonomyViewImpl() {
presenter = new ListTaxonomyPresenter(this);
}
@Override
protected String getTitle() {
return $("ListTaxonomyView.viewTitle");
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
taxonomies = buildTable();
addButton = new AddButton() {
@Override
public void buttonClick(ClickEvent event) {
presenter.addButtonClicked();
}
};
layout = new VerticalLayout(addButton, taxonomies);
layout.setComponentAlignment(addButton, Alignment.TOP_RIGHT);
layout.setSpacing(true);
layout.setWidth("100%");
return layout;
}
@Override
public void refreshTable() {
Table table = buildTable();
layout.replaceComponent(taxonomies, table);
taxonomies = table;
}
private Table buildTable() {
Container elements = new BeanItemContainer<>(TaxonomyVO.class, presenter.getTaxonomies());
ButtonsContainer buttonsContainer = new ButtonsContainer(elements, "buttons");
addButtons(buttonsContainer);
elements = buttonsContainer;
BaseTable table = new BaseTable("ListTaxonomyView.tableTitle", $("ListTaxonomyView.tableTitle", elements.size()), elements);
table.setPageLength(elements.size());
table.setVisibleColumns("title", "buttons");
table.setColumnHeader("title", $("ListTaxonomyView.titleColumn"));
table.setColumnHeader("buttons", "");
table.setColumnWidth("buttons", 88);
table.setWidth("100%");
return table;
}
private void addButtons(ButtonsContainer buttonsContainer) {
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new DisplayButton() {
@Override
protected void buttonClick(ClickEvent event) {
presenter.displayButtonClicked((TaxonomyVO) itemId);
}
};
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new EditButton() {
@Override
protected void buttonClick(ClickEvent event) {
TaxonomyVO taxonomyVO = (TaxonomyVO) itemId;
String taxonomyCode = taxonomyVO.getCode();
presenter.editButtonClicked(taxonomyCode);
}
};
}
});
}
@Override
protected ClickListener getBackButtonClickListener() {
return new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
navigateTo().adminModule();
}
};
}
}