package com.constellio.app.ui.pages.management.schemas.type;
import com.constellio.app.ui.entities.MetadataSchemaVO;
import com.constellio.app.ui.framework.buttons.*;
import com.constellio.app.ui.framework.containers.ButtonsContainer;
import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton;
import com.constellio.app.ui.framework.containers.SchemaVOLazyContainer;
import com.constellio.app.ui.framework.data.SchemaVODataProvider;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.app.ui.params.ParamUtils;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.*;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import org.vaadin.dialogs.ConfirmDialog;
import java.util.Map;
import static com.constellio.app.ui.i18n.i18n.$;
public class ListSchemaViewImpl extends BaseViewImpl implements ListSchemaView, ClickListener {
ListSchemaPresenter presenter;
public ListSchemaViewImpl() {
this.presenter = new ListSchemaPresenter(this);
}
@Override
protected boolean isFullWidthIfActionMenuAbsent() {
return true;
}
@Override
protected String getTitle() {
return $("ListSchemaView.viewTitle");
}
@Override
protected ClickListener getBackButtonClickListener() {
return this;
}
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClicked();
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
String parameters = event.getParameters();
Map<String, String> paramsMap = ParamUtils.getParamsMap(parameters);
presenter.setSchemaTypeCode(paramsMap.get("schemaTypeCode"));
presenter.setParameters(paramsMap);
VerticalLayout viewLayout = new VerticalLayout();
viewLayout.setSizeFull();
Button addButton = new AddButton() {
@Override
public void buttonClick(ClickEvent event) {
presenter.addButtonClicked();
}
};
viewLayout.addComponents(addButton, buildTables());
viewLayout.setComponentAlignment(addButton, Alignment.TOP_RIGHT);
return viewLayout;
}
private Component buildTables() {
final SchemaVODataProvider dataProvider = presenter.getDataProvider();
SchemaVOLazyContainer schemaContainer = new SchemaVOLazyContainer(dataProvider);
ButtonsContainer<SchemaVOLazyContainer> buttonsContainer = new ButtonsContainer<>(schemaContainer, "buttons");
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;
MetadataSchemaVO entity = dataProvider.getSchemaVO(index);
presenter.editButtonClicked(entity);
}
};
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new MetadataButton() {
@Override
protected void buttonClick(ClickEvent event) {
Integer index = (Integer) itemId;
MetadataSchemaVO entity = dataProvider.getSchemaVO(index);
presenter.editMetadataButtonClicked(entity);
}
};
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new FormOrderButton() {
@Override
protected void buttonClick(ClickEvent event) {
Integer index = (Integer) itemId;
MetadataSchemaVO entity = dataProvider.getSchemaVO(index);
presenter.orderButtonClicked(entity);
}
};
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new FormDisplay() {
@Override
protected void buttonClick(ClickEvent event) {
Integer index = (Integer) itemId;
MetadataSchemaVO entity = dataProvider.getSchemaVO(index);
presenter.formButtonClicked(entity);
}
};
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
TableDisplayButton tableDisplayButton = new TableDisplayButton() {
@Override
protected void buttonClick(ClickEvent event) {
presenter.tableButtonClicked();
}
@Override
public boolean isVisible() {
Integer index = (Integer) itemId;
MetadataSchemaVO entity = dataProvider.getSchemaVO(index);
if(entity == null || entity.getCode() == null || !entity.getCode().endsWith("default")) {
return false;
}
return true;
}
};
return tableDisplayButton;
}
});
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new SearchDisplayButton() {
@Override
protected void buttonClick(ClickEvent event) {
Integer index = (Integer) itemId;
MetadataSchemaVO entity = dataProvider.getSchemaVO(index);
presenter.searchButtonClicked(entity);
}
};
}
});
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;
MetadataSchemaVO entity = dataProvider.getSchemaVO(index);
presenter.deleteButtonClicked(entity.getCode());
}
@Override
public boolean isVisible() {
Integer index = (Integer) itemId;
MetadataSchemaVO entity = dataProvider.getSchemaVO(index);
return super.isVisible() && presenter.isDeleteButtonVisible(entity.getCode());
}
};
}
});
Table table = new Table($("ListSchemaView.tableTitle", schemaContainer.size()), buttonsContainer);
table.setSizeFull();
table.setPageLength(Math.min(15, schemaContainer.size()));
table.setColumnHeader("buttons", "");
table.setColumnHeader("caption", $("ListSchemaView.caption", schemaContainer.size()));
table.setColumnExpandRatio("caption", 1);
table.addItemClickListener(new ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
Integer index = (Integer) event.getItemId();
MetadataSchemaVO entity = dataProvider.getSchemaVO(index);
presenter.editButtonClicked(entity);
}
});
return table;
}
}