package com.constellio.app.modules.rm.ui.pages.agent;
import static com.constellio.app.ui.i18n.i18n.$;
import java.io.InputStream;
import java.util.List;
import com.constellio.app.modules.rm.ui.entities.AgentLogVO;
import com.constellio.app.ui.framework.buttons.DownloadLink;
import com.constellio.app.ui.framework.components.fields.lookup.LookupRecordField;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.model.entities.records.wrappers.User;
import com.vaadin.data.Item;
import com.vaadin.data.util.MethodProperty;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.server.Resource;
import com.vaadin.server.StreamResource;
import com.vaadin.server.StreamResource.StreamSource;
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.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;
public class ListAgentLogsViewImpl extends BaseViewImpl implements ListAgentLogsView {
private static final String FILENAME_PROPERTY = "filename";
private String selectedUserId;
private VerticalLayout mainLayout;
private HorizontalLayout userFieldAndButtonLayout;
private Label userLabel;
private LookupRecordField userField;
private Button showLogsButton;
private Table agentLogsTable;
private ListAgentLogsPresenter presenter;
public ListAgentLogsViewImpl() {
presenter = new ListAgentLogsPresenter(this);
}
@Override
protected String getTitle() {
return $("ListAgentLogsView.viewTitle");
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
mainLayout = new VerticalLayout();
mainLayout.setSizeFull();
mainLayout.setSpacing(true);
userFieldAndButtonLayout = new HorizontalLayout();
userFieldAndButtonLayout.setSpacing(true);
userLabel = new Label($("ListAgentLogsView.user"));
userField = new LookupRecordField(User.SCHEMA_TYPE);
userField.setPropertyDataSource(new MethodProperty<String>(this, "selectedUserId"));
showLogsButton = new Button($("ListAgentLogsView.showLogs"));
showLogsButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.showLogsButtonClicked();
}
});
showLogsButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
agentLogsTable = new Table($("ListAgentLogsView.tableTitle"));
agentLogsTable.setWidth("100%");
agentLogsTable.addContainerProperty(FILENAME_PROPERTY, DownloadLink.class, null);
agentLogsTable.setColumnHeader(FILENAME_PROPERTY, $("ListAgentLogsView.filename"));
mainLayout.addComponents(userFieldAndButtonLayout, agentLogsTable);
userFieldAndButtonLayout.addComponents(userLabel, userField, showLogsButton);
mainLayout.setExpandRatio(agentLogsTable, 1);
userFieldAndButtonLayout.setExpandRatio(userField, 1);
return mainLayout;
}
@Override
public String getSelectedUserId() {
return selectedUserId;
}
public void setSelectedUserId(String selectedUserId) {
this.selectedUserId = selectedUserId;
}
@SuppressWarnings("unchecked")
@Override
public void setAgentLogs(List<AgentLogVO> agentLogVOs) {
agentLogsTable.removeAllItems();
for (final AgentLogVO agentLogVO : agentLogVOs) {
Item item = agentLogsTable.addItem(agentLogVO);
String filename = agentLogVO.getFilename();
StreamSource zipStreamSource = new StreamResource.StreamSource() {
@Override
public InputStream getStream() {
return presenter.getInputStream(agentLogVO);
}
};
Resource logResource = new StreamResource(zipStreamSource, filename);
DownloadLink downloadAgentLogLink = new DownloadLink(logResource, filename);
item.getItemProperty(FILENAME_PROPERTY).setValue(downloadAgentLogLink);
}
}
@Override
protected ClickListener getBackButtonClickListener() {
return new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClicked();
}
};
}
}