package com.constellio.app.ui.framework.buttons;
import static com.constellio.app.ui.i18n.i18n.$;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.constellio.app.modules.rm.wrappers.ContainerRecord;
import com.constellio.app.ui.framework.buttons.LabelsButton.RecordSelector;
import com.constellio.app.ui.framework.components.BaseForm;
import com.constellio.app.ui.framework.components.fields.lookup.LookupRecordField;
import com.vaadin.data.fieldgroup.PropertyId;
import com.vaadin.server.Page;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Notification.Type;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;
public class ContainersButton extends WindowButton {
private static final Logger LOGGER = LoggerFactory.getLogger(ContainersButton.class);
private final ContainersAssigner selector;
private LookupRecordField containerLookup;
public ContainersButton(ContainersAssigner selector) {
this($("ContainersButton.container"), $("ContainersButton.containerAssigner"), selector);
}
public ContainersButton(String caption, String windowCaption, ContainersAssigner selector) {
super(caption, windowCaption, WindowConfiguration.modalDialog("45%", "25%"));
this.selector = selector;
}
@Override
protected Component buildWindowContent() {
VerticalLayout formLayout = new VerticalLayout();
formLayout.setSpacing(true);
containerLookup = new LookupRecordField(ContainerRecord.SCHEMA_TYPE);
containerLookup.setCaption($("ContainersButton.containerTitle"));
containerLookup.setRequired(true);
HorizontalLayout containerLayout = new HorizontalLayout();
containerLayout.addComponent(containerLookup);
containerLayout.setComponentAlignment(containerLookup, Alignment.MIDDLE_CENTER);
formLayout.addComponent(containerLayout);
HorizontalLayout buttonsLayout = new HorizontalLayout();
buttonsLayout.addStyleName(BaseForm.BUTTONS_LAYOUT);
buttonsLayout.setSpacing(true);
Button saveButton = new Button($("ContainersButton.putInContent"));
saveButton.addStyleName(BaseForm.SAVE_BUTTON);
saveButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
saveButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
try{
if(StringUtils.isNotBlank(containerLookup.getValue())){
selector.putRecordsInContainer(containerLookup.getValue());
getWindow().close();
}
}catch(Throwable e){
showErrorMessage(e);
}
}
});
Button cancelButton = new Button($("cancel"));
cancelButton.addStyleName(BaseForm.CANCEL_BUTTON);
cancelButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
getWindow().close();
}
});
formLayout.addComponent(buttonsLayout);
buttonsLayout.addComponents(saveButton, cancelButton);
return formLayout;
}
private void showErrorMessage(Throwable e) {
Notification notification = new Notification(e.getMessage() + "<br/><br/>" + $("clickToClose"), Type.WARNING_MESSAGE);
notification.setHtmlContentAllowed(true);
notification.show(Page.getCurrent());
LOGGER.warn(e.getMessage(), e);
}
public static interface ContainersAssigner extends Serializable, RecordSelector {
void putRecordsInContainer(String containerId);
}
}