package com.constellio.app.ui.pages.management.labels;
import static com.constellio.app.ui.i18n.i18n.$;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.vaadin.dialogs.ConfirmDialog;
import com.constellio.app.modules.reports.wrapper.Printable;
import com.constellio.app.modules.rm.services.reports.ReportUtils;
import com.constellio.app.modules.rm.wrappers.ContainerRecord;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.ui.entities.LabelVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.buttons.AddButton;
import com.constellio.app.ui.framework.buttons.DeleteButton;
import com.constellio.app.ui.framework.buttons.DisplayButton;
import com.constellio.app.ui.framework.buttons.EditButton;
import com.constellio.app.ui.framework.buttons.GetXMLButton;
import com.constellio.app.ui.framework.components.table.RecordVOTable;
import com.constellio.app.ui.framework.containers.ButtonsContainer;
import com.constellio.app.ui.framework.containers.RecordVOLazyContainer;
import com.constellio.app.ui.framework.data.SchemaTypeVODataProvider;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.model.conf.FoldersLocator;
import com.vaadin.data.Container;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.server.FileDownloader;
import com.vaadin.server.StreamResource;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;
public class ListLabelViewImpl extends BaseViewImpl implements AddEditLabelView {
private List<LabelVO> listLabel;
private TabSheet tabSheet;
private AddEditLabelPresenter presenter;
private Component folderDisplay, containerDisplay;
private VerticalLayout mainLayout;
private ReportUtils ru;
private Button addLabelButton, downloadTemplateButton;
private String currentSchema;
final private GetXMLButton getXMLButton = new GetXMLButton($("DisplayLabelViewImpl.menu.getXMLButton"), $("DisplayLabelViewImpl.menu.getXMLButton"), getConstellioFactories().getAppLayerFactory(), getSessionContext().getCurrentCollection(), this);
public static final String TYPE_TABLE = "types";
@Override
protected Component buildMainComponent(ViewChangeListener.ViewChangeEvent event) {
mainLayout = new VerticalLayout();
presenter = new AddEditLabelPresenter(this);
folderDisplay = new CustomComponent();
containerDisplay = new CustomComponent();
this.currentSchema = Folder.SCHEMA_TYPE;
// final RecordVOLazyContainer FolderLabel = new RecordVOLazyContainer(presenter.getLabelFolderDataProvider());
// final RecordVOTable FolderLabelTable = new RecordVOTable($("DisplayLabelViewImpl.tabs.table.header"), FolderLabel);
// FolderLabelTable.setWidth("100%");
//
// final RecordVOLazyContainer ContainerLabel = new RecordVOLazyContainer(presenter.getLabelContainerDataProvider());
// RecordVOTable ContainerLabelTable = new RecordVOTable($("DisplayLabelViewImpl.tabs.table.header"), ContainerLabel);
// ContainerLabelTable.setWidth("100%");
// folderDisplay.setWidth("100%");
// containerDisplay.setWidth("100%");
final SchemaTypeVODataProvider dataProvider = presenter.getDataProvider();
ru = new ReportUtils(getSessionContext().getCurrentCollection(), getConstellioFactories().getAppLayerFactory(), getSessionContext().getCurrentUser().getUsername());
Container folderContainer = new RecordVOLazyContainer(presenter.getLabelFolderDataProvider());
Container conteneurContainer = new RecordVOLazyContainer(presenter.getLabelContainerDataProvider());
ButtonsContainer buttonsContainerForFolder = new ButtonsContainer(folderContainer, "buttons");
buttonsContainerForFolder.addButton(new ButtonsContainer.ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new EditButton() {
@Override
protected void buttonClick(ClickEvent event) {
presenter.editButtonClicked(presenter.getRecordsWithIndex(ListLabelViewImpl.this.currentSchema, itemId + ""), Folder.SCHEMA_TYPE);
}
@Override
public boolean isVisible() {
RecordVO ret = presenter.getRecordsWithIndex(ListLabelViewImpl.this.currentSchema, itemId + "");
return !(super.isVisible() && ret != null) || ret.get(Printable.ISDELETABLE).equals(true);
}
};
}
});
ButtonsContainer buttonsContainerForContainer = new ButtonsContainer(conteneurContainer, "buttons");
buttonsContainerForContainer.addButton(new ButtonsContainer.ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new EditButton() {
@Override
protected void buttonClick(ClickEvent event) {
presenter.editButtonClicked(presenter.getRecordsWithIndex(ListLabelViewImpl.this.currentSchema, itemId + ""), ContainerRecord.SCHEMA_TYPE);
}
@Override
public boolean isVisible() {
RecordVO ret = presenter.getRecordsWithIndex(ListLabelViewImpl.this.currentSchema, itemId + "");
return !(super.isVisible() && ret != null) || ret.get(Printable.ISDELETABLE).equals(true);
}
};
}
});
buttonsContainerForContainer.addButton(new ButtonsContainer.ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new DisplayButton() {
@Override
protected void buttonClick(ClickEvent event) {
presenter.displayButtonClicked(presenter.getRecordsWithIndex(ListLabelViewImpl.this.currentSchema, itemId + ""), ContainerRecord.SCHEMA_TYPE);
}
};
}
});
buttonsContainerForFolder.addButton(new ButtonsContainer.ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new DisplayButton() {
@Override
protected void buttonClick(ClickEvent event) {
presenter.displayButtonClicked(presenter.getRecordsWithIndex(ListLabelViewImpl.this.currentSchema, itemId + ""), Folder.SCHEMA_TYPE);
}
};
}
});
buttonsContainerForContainer.addButton(new ButtonsContainer.ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new DeleteButton() {
@Override
protected void confirmButtonClick(ConfirmDialog dialog) {
presenter.removeRecord(itemId + "", ListLabelViewImpl.this.currentSchema);
}
@Override
public boolean isVisible() {
RecordVO ret = presenter.getRecordsWithIndex(ListLabelViewImpl.this.currentSchema, itemId + "");
return !(super.isVisible() && ret != null) || ret.get(Printable.ISDELETABLE).equals(true);
}
};
}
});
buttonsContainerForFolder.addButton(new ButtonsContainer.ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new DeleteButton() {
@Override
protected void confirmButtonClick(ConfirmDialog dialog) {
presenter.removeRecord(itemId + "", ListLabelViewImpl.this.currentSchema);
}
@Override
public boolean isVisible() {
RecordVO ret = presenter.getRecordsWithIndex(ListLabelViewImpl.this.currentSchema, itemId + "");
return !(super.isVisible() && ret != null) || ret.get(Printable.ISDELETABLE).equals(true);
}
};
}
});
folderContainer = buttonsContainerForFolder;
conteneurContainer = buttonsContainerForContainer;
final Table tableFolder = new RecordVOTable($("ListSchemaTypeView.tableTitle"), folderContainer);
tableFolder.setSizeFull();
tableFolder.setPageLength(Math.min(15, folderContainer.size()));
tableFolder.setColumnHeader("buttons", "");
tableFolder.setColumnHeader("caption", $("ListSchemaTypeView.caption"));
tableFolder.setColumnExpandRatio("caption", 1);
tableFolder.addStyleName(TYPE_TABLE);
Table tableContainer = new RecordVOTable($("ListSchemaTypeView.tableTitle"), conteneurContainer);
tableContainer.setSizeFull();
tableContainer.setPageLength(Math.min(15, conteneurContainer.size()));
tableContainer.setColumnHeader("buttons", "");
tableContainer.setColumnHeader("caption", $("ListSchemaTypeView.caption"));
tableContainer.setColumnExpandRatio("caption", 1);
tableContainer.addStyleName(TYPE_TABLE);
tabSheet = new TabSheet();
tabSheet.addTab(tableFolder, $("DisplayLabelViewImpl.tabs.folder"));
tabSheet.addTab(tableContainer, $("DisplayLabelViewImpl.tabs.container"));
System.out.println(tabSheet.getTabIndex());
tabSheet.addSelectedTabChangeListener(new TabSheet.SelectedTabChangeListener() {
@Override
public void selectedTabChange(TabSheet.SelectedTabChangeEvent event) {
getXMLButton.setCurrentSchema(tabSheet.getSelectedTab().equals(tableFolder) ? Folder.SCHEMA_TYPE : ContainerRecord.SCHEMA_TYPE);
ListLabelViewImpl.this.currentSchema = getXMLButton.getCurrentSchema();
System.out.println(ListLabelViewImpl.this.currentSchema);
}
});
mainLayout.addComponent(tabSheet);
return mainLayout;
}
@Override
protected List<Button> buildActionMenuButtons(ViewChangeListener.ViewChangeEvent event) {
List<Button> actionMenuButtons = new ArrayList<Button>();
addLabelButton = new AddButton($("DisplayLabelViewImpl.menu.addLabelButton")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.addLabelButtonClicked();
}
};
downloadTemplateButton = new Button($("DisplayLabelViewImpl.menu.getTemplate"));
StreamResource zip = createResource();
FileDownloader fileDownloader = new FileDownloader(zip);
fileDownloader.extend(downloadTemplateButton);
actionMenuButtons.add(addLabelButton);
actionMenuButtons.add(getXMLButton);
actionMenuButtons.add(downloadTemplateButton);
return actionMenuButtons;
}
@Override
protected void initBeforeCreateComponents(ViewChangeListener.ViewChangeEvent event) {
}
@Override
public void setLabels(List<LabelVO> list) {
this.listLabel = list;
}
@Override
public void addLabels(LabelVO... items) {
this.listLabel.addAll(Arrays.asList(items));
}
@Override
protected String getTitle() {
return $("LabelViewImpl.title");
}
private StreamResource createResource() {
return new StreamResource(new StreamResource.StreamSource() {
@Override
public InputStream getStream() {
InputStream stream = null;
try {
File file = new File(new FoldersLocator().getModuleResourcesFolder("rm"), "Template_Etiquette.zip");
stream = new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
} catch (IOException e) {
e.printStackTrace();
}
return stream;
}
}, "templates.zip");
}
}