package com.constellio.app.ui.pages.management.schemas.display.group;
import com.constellio.app.ui.framework.buttons.AddButton;
import com.constellio.app.ui.framework.buttons.BaseButton;
import com.constellio.app.ui.framework.buttons.DeleteButton;
import com.constellio.app.ui.framework.buttons.WindowButton;
import com.constellio.app.ui.framework.components.fields.MultilingualTextField;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.app.ui.params.ParamUtils;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.*;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.themes.ValoTheme;
import org.vaadin.dialogs.ConfirmDialog;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static com.constellio.app.ui.i18n.i18n.$;
public class ListMetadataGroupSchemaTypeViewImpl extends BaseViewImpl implements ListMetadataGroupSchemaTypeView, ClickListener {
ListMetadataGroupSchemaTypePresenter presenter;
private VerticalLayout viewLayout;
private Table groups;
public static final String GROUP_TABLE = "groups";
public static final String GROUP_NAME = "label";
public static final String GROUP_BUTTON = "button";
public static final String GROUP_DELETE_BUTTON = "delete_button";
public ListMetadataGroupSchemaTypeViewImpl() {
this.presenter = new ListMetadataGroupSchemaTypePresenter(this);
}
@Override
protected String getTitle() {
return $("ListMetadataGroupSchemaTypeView.viewTitle");
}
@Override
protected ClickListener getBackButtonClickListener() {
return this;
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
Map<String, String> params = ParamUtils.getParamsMap(event.getParameters());
presenter.setSchemaTypeCode(params.get("schemaTypeCode"));
viewLayout = new VerticalLayout();
viewLayout.setSizeFull();
groups = buildTable();
viewLayout.addComponents(groups);
return viewLayout;
}
private Table buildTable() {
Table table = new Table();
table.setWidth("100%");
table.setColumnHeader("button", "");
table.setColumnWidth("button", 60);
table.setColumnHeader("code", $("ListMetadataGroupSchemaTypeView.code"));
table.addContainerProperty("code", String.class, "");
for (String language : presenter.getCollectionLanguages()) {
table.setColumnHeader(language, language);
table.addContainerProperty(language, String.class, "");
}
table.addContainerProperty("button", Button.class, null);
table.addStyleName(GROUP_TABLE);
for (final String group : presenter.getMetadataGroupList()) {
if (group != null) {
table.addItem(group);
table.getContainerProperty(group, "code").setValue(group);
for (String language : presenter.getCollectionLanguages()) {
String groupLabel = presenter.getGroupLabel(group, language);
table.getContainerProperty(group, language).setValue(groupLabel);
}
Button deleteButton = new DeleteButton() {
@Override
protected void confirmButtonClick(ConfirmDialog dialog) {
presenter.deleteGroupMetadata(group);
}
};
deleteButton.addStyleName(GROUP_DELETE_BUTTON);
table.getContainerProperty(group, "button").setValue(deleteButton);
}
}
return table;
}
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClicked();
}
@Override
public void refreshTable() {
Table table = buildTable();
viewLayout.replaceComponent(groups, table);
groups = table;
}
@Override
public void displayAddError() {
this.showErrorMessage($("ListMetadataGroupSchemaTypeView.addError"));
}
@Override
public void displayDeleteError() {
this.showErrorMessage($("ListMetadataGroupSchemaTypeView.deleteError"));
}
@Override
public void invalidCodeOrLabels() {
this.showErrorMessage($("ListMetadataGroupSchemaTypeView.invalidCodeOrLabels"));
}
@Override
protected List<Button> buildActionMenuButtons(ViewChangeEvent event) {
List<Button> buttons = new ArrayList<>();
Button addGroupsButton = newAddGroupButton();
buttons.add(addGroupsButton);
return buttons;
}
private Button newAddGroupButton() {
return new WindowButton($("add"),
$("ListMetadataGroupSchemaTypeView.addGroups")) {
@Override
protected Component buildWindowContent() {
final TextField groupCode = new TextField();
groupCode.setRequired(true);
groupCode.setCaption($("ListMetadataGroupSchemaTypeView.code"));
groupCode.setNullRepresentation("");
groupCode.addStyleName(GROUP_NAME);
final MultilingualTextField multilingualTextField = new MultilingualTextField(true);
multilingualTextField.setRequired(true);
multilingualTextField.addStyleName(GROUP_NAME);
Button addButton = new AddButton() {
@Override
public void buttonClick(ClickEvent event) {
if (presenter.isValidCodeAndLabels(groupCode.getValue(), multilingualTextField.getValue())) {
presenter.addGroupMetadata(groupCode.getValue(), multilingualTextField.getValue());
multilingualTextField.clear();
getWindow().close();
} else {
showErrorMessage($("ListMetadataGroupSchemaTypeView.invalidCodeOrLabels"));
}
}
};
addButton.addStyleName(GROUP_BUTTON);
BaseButton cancel = new BaseButton($("cancel")) {
@Override
protected void buttonClick(ClickEvent event) {
getWindow().close();
}
};
cancel.addStyleName(ValoTheme.BUTTON_PRIMARY);
HorizontalLayout horizontalLayout = new HorizontalLayout();
horizontalLayout.addComponent(groupCode);
horizontalLayout.addComponent(multilingualTextField);
horizontalLayout.setWidth("95%");
horizontalLayout.setSpacing(true);
HorizontalLayout buttonsLayout = new HorizontalLayout();
buttonsLayout.addComponents(addButton, cancel);
buttonsLayout.setSpacing(true);
VerticalLayout wrapper = new VerticalLayout(horizontalLayout, buttonsLayout);
wrapper.setSizeFull();
return wrapper;
}
};
}
}