package com.constellio.app.ui.pages.management.schemas;
import static com.constellio.app.ui.i18n.i18n.$;
import com.constellio.app.ui.entities.MetadataSchemaTypeVO;
import com.constellio.app.ui.framework.buttons.DisplayButton;
import com.constellio.app.ui.framework.buttons.ListMetadataGroupButton;
import com.constellio.app.ui.framework.buttons.ReportDisplayButton;
import com.constellio.app.ui.framework.containers.ButtonsContainer;
import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton;
import com.constellio.app.ui.framework.containers.SchemaTypeVOLazyContainer;
import com.constellio.app.ui.framework.data.SchemaTypeVODataProvider;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.vaadin.data.Container;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
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.Table;
import com.vaadin.ui.VerticalLayout;
public class ListSchemaTypeViewImpl extends BaseViewImpl implements ListSchemaTypeView, ClickListener {
ListSchemaTypePresenter presenter;
public static final String TYPE_TABLE = "types";
public ListSchemaTypeViewImpl() {
this.presenter = new ListSchemaTypePresenter(this);
}
@Override
protected boolean isFullWidthIfActionMenuAbsent() {
return true;
}
@Override
protected String getTitle() {
return $("ListSchemaTypeView.viewTitle");
}
@Override
protected ClickListener getBackButtonClickListener() {
return this;
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
VerticalLayout viewLayout = new VerticalLayout();
viewLayout.setSizeFull();
viewLayout.addComponents(buildTables());
return viewLayout;
}
private Component buildTables() {
final SchemaTypeVODataProvider dataProvider = presenter.getDataProvider();
Container typeContainer = new SchemaTypeVOLazyContainer(dataProvider);
ButtonsContainer buttonsContainer = new ButtonsContainer(typeContainer, "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;
MetadataSchemaTypeVO entity = dataProvider.getSchemaTypeVO(index);
presenter.editButtonClicked(entity);
}
};
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new ListMetadataGroupButton() {
@Override
protected void buttonClick(ClickEvent event) {
Integer index = (Integer) itemId;
MetadataSchemaTypeVO entity = dataProvider.getSchemaTypeVO(index);
presenter.listGroupButtonClicked(entity);
}
};
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new ReportDisplayButton() {
@Override
protected void buttonClick(ClickEvent event) {
Integer index = (Integer) itemId;
MetadataSchemaTypeVO entity = dataProvider.getSchemaTypeVO(index);
presenter.reportButtonClicked(entity);
}
@Override
public boolean isVisible() {
Integer index = (Integer) itemId;
MetadataSchemaTypeVO entity = dataProvider.getSchemaTypeVO(index);
return super.isVisible() && presenter.isSearchableSchema(entity.getCode());
}
};
}
});
typeContainer = buttonsContainer;
Table table = new Table($("ListSchemaTypeView.tableTitle", typeContainer.size()), typeContainer);
table.setSizeFull();
table.setPageLength(Math.min(15, typeContainer.size()));
table.setColumnHeader("buttons", "");
table.setColumnHeader("caption", $("ListSchemaTypeView.caption"));
table.setColumnExpandRatio("caption", 1);
table.addStyleName(TYPE_TABLE);
table.addItemClickListener(new ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
Integer index = (Integer) event.getItemId();
MetadataSchemaTypeVO entity = dataProvider.getSchemaTypeVO(index);
presenter.editButtonClicked(entity);
}
});
table.setSortContainerPropertyId(SchemaTypeVOLazyContainer.LABEL);
return table;
}
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClicked();
}
}