package com.constellio.app.modules.rm.ui.pages.folder;
import com.constellio.app.modules.rm.model.labelTemplate.LabelTemplate;
import com.constellio.app.modules.rm.services.borrowingServices.BorrowingType;
import com.constellio.app.modules.rm.ui.components.RMMetadataDisplayFactory;
import com.constellio.app.modules.rm.ui.components.breadcrumb.FolderDocumentBreadcrumbTrail;
import com.constellio.app.modules.rm.ui.components.content.DocumentContentVersionWindowImpl;
import com.constellio.app.modules.rm.ui.components.folder.fields.LookupFolderField;
import com.constellio.app.modules.rm.ui.entities.DocumentVO;
import com.constellio.app.modules.rm.ui.entities.FolderVO;
import com.constellio.app.modules.rm.wrappers.Document;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.ui.entities.ContentVersionVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.buttons.*;
import com.constellio.app.ui.framework.buttons.WindowButton.WindowConfiguration;
import com.constellio.app.ui.framework.components.BaseWindow;
import com.constellio.app.ui.framework.components.ComponentState;
import com.constellio.app.ui.framework.components.RecordDisplay;
import com.constellio.app.ui.framework.components.breadcrumb.BaseBreadcrumbTrail;
import com.constellio.app.ui.framework.components.content.ContentVersionVOResource;
import com.constellio.app.ui.framework.components.fields.BaseTextField;
import com.constellio.app.ui.framework.components.fields.date.JodaDateField;
import com.constellio.app.ui.framework.components.fields.lookup.LookupRecordField;
import com.constellio.app.ui.framework.components.fields.upload.ContentVersionUploadField;
import com.constellio.app.ui.framework.components.table.RecordVOSelectionTableAdapter;
import com.constellio.app.ui.framework.components.table.RecordVOTable;
import com.constellio.app.ui.framework.components.table.columns.EventVOTableColumnsManager;
import com.constellio.app.ui.framework.components.table.columns.TableColumnsManager;
import com.constellio.app.ui.framework.containers.ButtonsContainer;
import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton;
import com.constellio.app.ui.framework.containers.RecordVOLazyContainer;
import com.constellio.app.ui.framework.data.RecordVODataProvider;
import com.constellio.app.ui.framework.items.RecordVOItem;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.data.utils.Factory;
import com.constellio.data.utils.TimeProvider;
import com.constellio.model.entities.records.wrappers.User;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.acceptcriteria.AcceptAll;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.server.Page;
import com.vaadin.server.Resource;
import com.vaadin.server.ThemeResource;
import com.vaadin.shared.MouseEventDetails.MouseButton;
import com.vaadin.ui.*;
import com.vaadin.ui.TabSheet.Tab;
import com.vaadin.ui.themes.ValoTheme;
import org.joda.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import static com.constellio.app.ui.framework.buttons.WindowButton.WindowConfiguration.modalDialog;
import static com.constellio.app.ui.i18n.i18n.$;
public class DisplayFolderViewImpl extends BaseViewImpl implements DisplayFolderView, DropHandler {
private final static Logger LOGGER = LoggerFactory.getLogger(DisplayFolderViewImpl.class);
public static final String STYLE_NAME = "display-folder";
public static final String USER_LOOKUP = "user-lookup";
private RecordVO recordVO;
private String taxonomyCode;
private VerticalLayout mainLayout;
private ContentVersionUploadField uploadField;
private TabSheet tabSheet;
private RecordDisplay recordDisplay;
private Component folderContentComponent;
private Component tasksComponent;
private Component eventsComponent;
private DisplayFolderPresenter presenter;
private boolean dragNDropAllowed;
private Button deleteFolderButton, duplicateFolderButton, editFolderButton, addSubFolderButton, addDocumentButton,
addAuthorizationButton, shareFolderButton, printLabelButton, linkToFolderButton, borrowButton, returnFolderButton,
reminderReturnFolderButton, alertWhenAvailableButton, addToCartButton, addToOrRemoveFromSelectionButton, startWorkflowButton;
WindowButton moveInFolderButton;
private Label borrowedLabel;
private Window documentVersionWindow;
public DisplayFolderViewImpl() {
presenter = new DisplayFolderPresenter(this);
}
@Override
protected void initBeforeCreateComponents(ViewChangeEvent event) {
presenter.forParams(event.getParameters());
}
@Override
protected void afterViewAssembled(ViewChangeEvent event) {
presenter.viewAssembled();
}
@Override
public RecordVO getRecord() {
return recordVO;
}
@Override
public void setRecord(RecordVO recordVO) {
this.recordVO = recordVO;
}
@Override
protected String getTitle() {
return null;
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
mainLayout = new VerticalLayout();
mainLayout.setSizeFull();
mainLayout.setSpacing(true);
uploadField = new ContentVersionUploadField();
uploadField.setVisible(false);
uploadField.setImmediate(true);
uploadField.setMultiValue(false);
uploadField.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
ContentVersionVO uploadedContentVO = (ContentVersionVO) uploadField.getValue();
presenter.contentVersionUploaded(uploadedContentVO);
}
});
recordDisplay = new RecordDisplay(recordVO, new RMMetadataDisplayFactory());
folderContentComponent = new CustomComponent();
tasksComponent = new CustomComponent();
tabSheet = new TabSheet();
tabSheet.addStyleName(STYLE_NAME);
tabSheet.addTab(recordDisplay, $("DisplayFolderView.tabs.metadata"));
tabSheet.addTab(folderContentComponent, $("DisplayFolderView.tabs.folderContent", presenter.getFolderContentCount()));
tabSheet.addTab(tasksComponent, $("DisplayFolderView.tabs.tasks", presenter.getTaskCount()));
eventsComponent = new CustomComponent();
tabSheet.addTab(eventsComponent, $("DisplayFolderView.tabs.logs"));
if(presenter.hasCurrentUserPermissionToViewEvents()) {
tabSheet.getTab(eventsComponent).setEnabled(true);
}
else {
tabSheet.getTab(eventsComponent).setEnabled(false);
}
tabSheet.addSelectedTabChangeListener(new TabSheet.SelectedTabChangeListener() {
@Override
public void selectedTabChange(TabSheet.SelectedTabChangeEvent event) {
if (event.getTabSheet().getSelectedTab() == eventsComponent) {
presenter.refreshEvents();
}
}
});
borrowedLabel = new Label();
borrowedLabel.setVisible(false);
borrowedLabel.addStyleName(ValoTheme.LABEL_COLORED);
borrowedLabel.addStyleName(ValoTheme.LABEL_BOLD);
documentVersionWindow = new BaseWindow($("DocumentContentVersionWindow.windowTitle"));
documentVersionWindow.setWidth("400px");
documentVersionWindow.center();
documentVersionWindow.setModal(true);
mainLayout.addComponents(borrowedLabel, uploadField, tabSheet);
presenter.selectInitialTabForUser();
return mainLayout;
}
@Override
protected BaseBreadcrumbTrail buildBreadcrumbTrail() {
return new FolderDocumentBreadcrumbTrail(recordVO.getId(), taxonomyCode, this);
}
// @Override
// protected ClickListener getBackButtonClickListener() {
// return new ClickListener() {
// @Override
// public void buttonClick(ClickEvent event) {
// presenter.backButtonClicked();
// }
// };
// }
@Override
protected List<Button> buildActionMenuButtons(ViewChangeEvent event) {
List<Button> actionMenuButtons = new ArrayList<Button>();
addDocumentButton = new AddButton($("DisplayFolderView.addDocument")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.addDocumentButtonClicked();
}
};
moveInFolderButton = new WindowButton($("DisplayFolderView.parentFolder"), $("DisplayFolderView.parentFolder")
, WindowButton.WindowConfiguration.modalDialog("50%", "20%")) {
@Override
protected Component buildWindowContent() {
VerticalLayout verticalLayout = new VerticalLayout();
verticalLayout.setSpacing(true);
final LookupFolderField field = new LookupFolderField();
verticalLayout.addComponent(field);
BaseButton saveButton = new BaseButton($("save")) {
@Override
protected void buttonClick(ClickEvent event) {
String parentId = field.getValue();
try {
presenter.parentFolderButtonClicked(parentId);
} catch (Throwable e) {
LOGGER.warn("error when trying to modify folder parent to " + parentId, e);
showErrorMessage("DisplayFolderView.parentFolderException");
}
moveInFolderButton.getWindow().close();
}
};
saveButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
HorizontalLayout hLayout = new HorizontalLayout();
hLayout.setSizeFull();
hLayout.addComponent(saveButton);
hLayout.setComponentAlignment(saveButton, Alignment.BOTTOM_RIGHT);
verticalLayout.addComponent(hLayout);
return verticalLayout;
}
};
addSubFolderButton = new AddButton($("DisplayFolderView.addSubFolder")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.addSubFolderButtonClicked();
}
};
editFolderButton = new EditButton($("DisplayFolderView.editFolder")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.editFolderButtonClicked();
}
};
deleteFolderButton = new DeleteWithJustificationButton($("DisplayFolderView.deleteFolder"), false) {
@Override
protected void deletionConfirmed(String reason) {
presenter.deleteFolderButtonClicked(reason);
}
};
duplicateFolderButton = new WindowButton($("DisplayFolderView.duplicateFolder"),
$("DisplayFolderView.duplicateFolderOnlyOrHierarchy")) {
@Override
protected Component buildWindowContent() {
BaseButton folder = new BaseButton($("DisplayFolderView.folderOnly")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.duplicateFolderButtonClicked();
getWindow().close();
}
};
BaseButton structure = new BaseButton($("DisplayFolderView.hierarchy")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.duplicateStructureButtonClicked();
getWindow().close();
}
};
BaseButton cancel = new BaseButton($("cancel")) {
@Override
protected void buttonClick(ClickEvent event) {
getWindow().close();
}
};
cancel.addStyleName(ValoTheme.BUTTON_LINK);
HorizontalLayout layout = new HorizontalLayout(folder, structure, cancel);
layout.setComponentAlignment(folder, Alignment.TOP_LEFT);
layout.setComponentAlignment(structure, Alignment.TOP_LEFT);
layout.setComponentAlignment(cancel, Alignment.TOP_RIGHT);
layout.setExpandRatio(cancel, 1);
layout.setWidth("95%");
layout.setSpacing(true);
VerticalLayout wrapper = new VerticalLayout(layout);
wrapper.setSizeFull();
return wrapper;
}
};
linkToFolderButton = new LinkButton($("DisplayFolderView.linkToFolder")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.linkToFolderButtonClicked();
}
};
linkToFolderButton.setVisible(false);
addAuthorizationButton = new LinkButton($("DisplayFolderView.addAuthorization")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.addAuthorizationButtonClicked();
}
};
shareFolderButton = new LinkButton($("DisplayFolderView.shareFolder")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.shareFolderButtonClicked();
}
};
addToCartButton = buildAddToCartButton();
addToOrRemoveFromSelectionButton = new AddToOrRemoveFromSelectionButton(recordVO);
Factory<List<LabelTemplate>> customLabelTemplatesFactory = new Factory<List<LabelTemplate>>() {
@Override
public List<LabelTemplate> get() {
return presenter.getCustomTemplates();
}
};
Factory<List<LabelTemplate>> defaultLabelTemplatesFactory = new Factory<List<LabelTemplate>>() {
@Override
public List<LabelTemplate> get() {
return presenter.getDefaultTemplates();
}
};
try {
printLabelButton = new LabelsButton($("DisplayFolderView.printLabel"),
$("DisplayFolderView.printLabel"), customLabelTemplatesFactory, defaultLabelTemplatesFactory, getConstellioFactories().getAppLayerFactory(), getSessionContext().getCurrentCollection(), Folder.SCHEMA_TYPE, recordVO.getId(), getSessionContext().getCurrentUser().getUsername());
} catch (Exception e) {
showErrorMessage(e.getMessage());
}
borrowButton = buildBorrowButton();
returnFolderButton = buildReturnFolderButton();
reminderReturnFolderButton = new BaseButton($("DisplayFolderView.reminderReturnFolder")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.reminderReturnFolder();
}
};
alertWhenAvailableButton = new BaseButton($("RMObject.alertWhenAvailable")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.alertWhenAvailable();
}
};
startWorkflowButton = new StartWorkflowButton();
startWorkflowButton.setVisible(presenter.hasPermissionToStartWorkflow());
// actionMenuButtons.add(addDocumentButton);
// actionMenuButtons.add(addSubFolderButton);
boolean isAFolderAndDestroyed = (recordVO instanceof FolderVO
&& ((FolderVO) recordVO).getArchivisticStatus().isDestroyed());
actionMenuButtons.add(editFolderButton);
if(!isAFolderAndDestroyed)
{
actionMenuButtons.add(moveInFolderButton);
actionMenuButtons.add(deleteFolderButton);
actionMenuButtons.add(duplicateFolderButton);
actionMenuButtons.add(linkToFolderButton);
actionMenuButtons.add(addAuthorizationButton);
actionMenuButtons.add(shareFolderButton);
if (presenter.hasCurrentUserPermissionToUseCart()) {
actionMenuButtons.add(addToCartButton);
}
actionMenuButtons.add(addToOrRemoveFromSelectionButton);
}
if(!isAFolderAndDestroyed) {
actionMenuButtons.add(printLabelButton);
actionMenuButtons.add(borrowButton);
}
actionMenuButtons.add(returnFolderButton);
actionMenuButtons.add(reminderReturnFolderButton);
if(!isAFolderAndDestroyed) {
actionMenuButtons.add(alertWhenAvailableButton);
}
if (presenter.hasPermissionToStartWorkflow() && !isAFolderAndDestroyed) {
actionMenuButtons.add(startWorkflowButton);
}
return actionMenuButtons;
}
private WindowButton buildAddToCartButton() {
return new WindowButton($("DisplayFolderView.addToCart"),$("DisplayFolderView.selectCart")) {
@Override
protected Component buildWindowContent() {
VerticalLayout layout = new VerticalLayout();
HorizontalLayout newCartLayout = new HorizontalLayout();
newCartLayout.setSpacing(true);
newCartLayout.addComponent(new Label($("CartView.newCart")));
final BaseTextField newCartTitleField;
newCartLayout.addComponent(newCartTitleField = new BaseTextField());
BaseButton saveButton;
newCartLayout.addComponent(saveButton = new BaseButton($("save")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.createNewCartAndAddToItRequested(newCartTitleField.getValue());
getWindow().close();
}
});
saveButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
TabSheet tabSheet = new TabSheet();
final RecordVOLazyContainer ownedCartsContainer = new RecordVOLazyContainer(presenter.getOwnedCartsDataProvider());
RecordVOTable ownedCartsTable = new RecordVOTable($("CartView.ownedCarts"), ownedCartsContainer);
ownedCartsTable.addItemClickListener(new ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
presenter.addToCartRequested(ownedCartsContainer.getRecordVO((int)event.getItemId()));
getWindow().close();
}
});
ownedCartsTable.setPageLength(Math.min(15, ownedCartsContainer.size()));
ownedCartsTable.setWidth("100%");
final RecordVOLazyContainer sharedCartsContainer = new RecordVOLazyContainer(presenter.getSharedCartsDataProvider());
RecordVOTable sharedCartsTable = new RecordVOTable($("CartView.sharedCarts"), sharedCartsContainer);
sharedCartsTable.addItemClickListener(new ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
presenter.addToCartRequested(sharedCartsContainer.getRecordVO((int)event.getItemId()));
getWindow().close();
}
});
sharedCartsTable.setPageLength(Math.min(15, ownedCartsContainer.size()));
sharedCartsTable.setWidth("100%");
tabSheet.addTab(ownedCartsTable);
tabSheet.addTab(sharedCartsTable);
layout.addComponents(newCartLayout,tabSheet);
return layout;
}
};
}
@Override
public void setEvents(final RecordVODataProvider dataProvider) {
RecordVOTable table = new RecordVOTable($("DisplayFolderView.tabs.logs"), new RecordVOLazyContainer(dataProvider)) {
@Override
protected TableColumnsManager newColumnsManager() {
return new EventVOTableColumnsManager();
}
};
table.setSizeFull();
tabSheet.replaceComponent(eventsComponent, table);
eventsComponent = table;
}
@Override
public void setFolderContent(List<RecordVODataProvider> dataProviders) {
final RecordVOLazyContainer nestedContainer = new RecordVOLazyContainer(dataProviders);
ButtonsContainer<RecordVOLazyContainer> container = new ButtonsContainer<RecordVOLazyContainer>(nestedContainer);
container.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(Object itemId, ButtonsContainer<?> container) {
int index = (int) itemId;
final RecordVO record = nestedContainer.getRecordVO(index);
Button button = new EditButton() {
@Override
protected void buttonClick(ClickEvent event) {
presenter.editDocumentButtonClicked(record);
}
};
if (presenter.isDocument(record)) {
button.setEnabled(presenter.canModifyDocument(record));
} else {
button.setVisible(false);
}
return button;
}
});
container.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(Object itemId, ButtonsContainer<?> container) {
int index = (int) itemId;
final RecordVO record = nestedContainer.getRecordVO(index);
Button button = new IconButton(new ThemeResource("images/icons/actions/download.png"),
$("DisplayFolderView.download")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.downloadDocumentButtonClicked(record);
}
};
if (presenter.isDocument(record)) {
button.setEnabled(record.get(Document.CONTENT) != null);
} else {
button.setVisible(false);
}
return button;
}
});
container.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(Object itemId, ButtonsContainer<?> container) {
int index = (int) itemId;
final RecordVO record = nestedContainer.getRecordVO(index);
Button button = new DisplayButton() {
@Override
protected void buttonClick(ClickEvent event) {
if (presenter.isDocument(record)) {
presenter.displayDocumentButtonClicked(record);
} else {
presenter.subFolderClicked(record);
}
}
};
return button;
}
});
final Table table = new RecordVOTable();
table.setSizeFull();
table.setColumnHeader(ButtonsContainer.DEFAULT_BUTTONS_PROPERTY_ID, "");
table.addItemClickListener(new ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
if (event.getButton() == MouseButton.LEFT) {
RecordVOItem item = (RecordVOItem) event.getItem();
RecordVO recordVO = item.getRecord();
if (presenter.isDocument(recordVO)) {
presenter.documentClicked(recordVO);
} else {
presenter.subFolderClicked(recordVO);
}
}
}
});
table.setContainerDataSource(nestedContainer);
// table.setPageLength(Math.min(15, dataProvider.size()));
RecordVOSelectionTableAdapter tableAdapter = new RecordVOSelectionTableAdapter(table) {
@Override
public void selectAll() {
presenter.selectAllClicked();
}
@Override
public void deselectAll() {
presenter.deselectAllClicked();
}
@Override
public boolean isAllItemsSelected() {
return presenter.isAllItemsSelected();
}
@Override
public boolean isAllItemsDeselected() {
return presenter.isAllItemsDeselected();
}
@Override
public boolean isSelected(Object itemId) {
RecordVOItem item = (RecordVOItem) table.getItem(itemId);
RecordVO recordVO = item.getRecord();
return presenter.isSelected(recordVO);
}
@Override
public void setSelected(Object itemId, boolean selected) {
RecordVOItem item = (RecordVOItem) table.getItem(itemId);
RecordVO recordVO = item.getRecord();
presenter.recordSelectionChanged(recordVO, selected);
adjustSelectAllButton(selected);
}
};
tabSheet.replaceComponent(folderContentComponent, tableAdapter);
folderContentComponent = tableAdapter;
}
@Override
public void refreshFolderContentTab() {
Tab folderContentTab = tabSheet.getTab(folderContentComponent);
folderContentTab.setCaption($("DisplayFolderView.tabs.folderContent", presenter.getFolderContentCount()));
}
@Override
public void setTasks(RecordVODataProvider dataProvider) {
Table table = new RecordVOTable(dataProvider);
table.setSizeFull();
table.addItemClickListener(new ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
RecordVOItem item = (RecordVOItem) event.getItem();
RecordVO recordVO = item.getRecord();
presenter.taskClicked(recordVO);
}
});
table.setPageLength(Math.min(15, dataProvider.size()));
tabSheet.replaceComponent(tasksComponent, table);
tasksComponent = table;
}
@Override
public void selectMetadataTab() {
tabSheet.setSelectedTab(recordDisplay);
}
@Override
public void selectFolderContentTab() {
tabSheet.setSelectedTab(folderContentComponent);
}
@Override
public void selectTasksTab() {
tabSheet.setSelectedTab(tasksComponent);
}
@Override
public void setLogicallyDeletable(ComponentState state) {
deleteFolderButton.setVisible(state.isVisible());
deleteFolderButton.setEnabled(state.isEnabled());
}
@Override
public void setMoveInFolderState(ComponentState state) {
moveInFolderButton.setVisible(state.isVisible());
moveInFolderButton.setEnabled(state.isEnabled());
}
@Override
public void setEditButtonState(ComponentState state) {
editFolderButton.setVisible(state.isVisible());
editFolderButton.setEnabled(state.isEnabled());
}
@Override
public void setAddDocumentButtonState(ComponentState state) {
addDocumentButton.setVisible(state.isVisible());
addDocumentButton.setEnabled(state.isEnabled());
dragNDropAllowed = state.isEnabled();
}
@Override
public void setAddSubFolderButtonState(ComponentState state) {
addSubFolderButton.setVisible(state.isVisible());
addSubFolderButton.setEnabled(state.isEnabled());
}
@Override
public void setDuplicateFolderButtonState(ComponentState state) {
duplicateFolderButton.setVisible(state.isVisible());
duplicateFolderButton.setEnabled(state.isEnabled());
}
@Override
public void setPrintButtonState(ComponentState state) {
printLabelButton.setVisible(state.isVisible());
printLabelButton.setEnabled(state.isEnabled());
}
@Override
public void setShareFolderButtonState(ComponentState state) {
shareFolderButton.setVisible(state.isVisible());
shareFolderButton.setEnabled(state.isEnabled());
}
@Override
public void setAuthorizationButtonState(ComponentState state) {
addAuthorizationButton.setVisible(state.isVisible());
addAuthorizationButton.setEnabled(state.isEnabled());
}
@Override
public void setBorrowButtonState(ComponentState state) {
borrowButton.setVisible(state.isVisible());
borrowButton.setEnabled(state.isEnabled());
}
@Override
public void setReturnFolderButtonState(ComponentState state) {
returnFolderButton.setVisible(state.isVisible());
returnFolderButton.setEnabled(state.isEnabled());
}
@Override
public void setReminderReturnFolderButtonState(ComponentState state) {
reminderReturnFolderButton.setVisible(state.isVisible());
reminderReturnFolderButton.setEnabled(state.isEnabled());
}
@Override
public void setAlertWhenAvailableButtonState(ComponentState state) {
alertWhenAvailableButton.setVisible(state.isVisible());
alertWhenAvailableButton.setEnabled(state.isEnabled());
}
@Override
public void setStartWorkflowButtonState(ComponentState state) {
startWorkflowButton.setVisible(state.isVisible());
startWorkflowButton.setEnabled(state.isEnabled());
}
@Override
public void drop(DragAndDropEvent event) {
if (dragNDropAllowed) {
uploadField.drop(event);
}
}
@Override
public AcceptCriterion getAcceptCriterion() {
return uploadField != null ? uploadField.getAcceptCriterion() : AcceptAll.get();
}
private Button buildBorrowButton() {
return new WindowButton($("DisplayFolderView.borrow"),
$("DisplayFolderView.borrow"), new WindowConfiguration(true, true, "50%", "460px")) {
@Override
protected Component buildWindowContent() {
final JodaDateField borrowDatefield = new JodaDateField();
borrowDatefield.setCaption($("DisplayFolderView.borrowDate"));
borrowDatefield.setRequired(true);
borrowDatefield.setId("borrowDate");
borrowDatefield.addStyleName("borrowDate");
borrowDatefield.setValue(TimeProvider.getLocalDate().toDate());
final Field<?> lookupUser = new LookupRecordField(User.SCHEMA_TYPE);
lookupUser.setCaption($("DisplayFolderView.borrower"));
lookupUser.setId("borrower");
lookupUser.addStyleName(USER_LOOKUP);
lookupUser.setRequired(true);
final ComboBox borrowingTypeField = new ComboBox();
borrowingTypeField.setCaption($("DisplayFolderView.borrowingType"));
for (BorrowingType borrowingType : BorrowingType.values()) {
borrowingTypeField.addItem(borrowingType);
borrowingTypeField
.setItemCaption(borrowingType, $("DisplayFolderView.borrowingType." + borrowingType.getCode()));
}
borrowingTypeField.setRequired(true);
borrowingTypeField.setNullSelectionAllowed(false);
final JodaDateField previewReturnDatefield = new JodaDateField();
previewReturnDatefield.setCaption($("DisplayFolderView.previewReturnDate"));
previewReturnDatefield.setRequired(true);
previewReturnDatefield.setId("previewReturnDate");
previewReturnDatefield.addStyleName("previewReturnDate");
final JodaDateField returnDatefield = new JodaDateField();
returnDatefield.setCaption($("DisplayFolderView.returnDate"));
returnDatefield.setRequired(false);
returnDatefield.setId("returnDate");
returnDatefield.addStyleName("returnDate");
borrowDatefield.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
previewReturnDatefield.setValue(
presenter.getPreviewReturnDate(borrowDatefield.getValue(), borrowingTypeField.getValue()));
}
});
borrowingTypeField.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
previewReturnDatefield.setValue(
presenter.getPreviewReturnDate(borrowDatefield.getValue(), borrowingTypeField.getValue()));
}
});
BaseButton borrowButton = new BaseButton($("DisplayFolderView.borrow")) {
@Override
protected void buttonClick(ClickEvent event) {
String userId = null;
BorrowingType borrowingType = null;
if (lookupUser.getValue() != null) {
userId = (String) lookupUser.getValue();
}
if (borrowingTypeField.getValue() != null) {
borrowingType = BorrowingType.valueOf(borrowingTypeField.getValue().toString());
}
LocalDate borrowLocalDate = null;
LocalDate previewReturnLocalDate = null;
LocalDate returnLocalDate = null;
if (borrowDatefield.getValue() != null) {
borrowLocalDate = LocalDate.fromDateFields(borrowDatefield.getValue());
}
if (previewReturnDatefield.getValue() != null) {
previewReturnLocalDate = LocalDate.fromDateFields(previewReturnDatefield.getValue());
}
if (returnDatefield.getValue() != null) {
returnLocalDate = LocalDate.fromDateFields(returnDatefield.getValue());
}
if (presenter.borrowFolder(borrowLocalDate, previewReturnLocalDate, userId,
borrowingType, returnLocalDate)) {
getWindow().close();
}
}
};
borrowButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
BaseButton cancelButton = new BaseButton($("cancel")) {
@Override
protected void buttonClick(ClickEvent event) {
getWindow().close();
}
};
cancelButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
HorizontalLayout horizontalLayout = new HorizontalLayout();
horizontalLayout.setSpacing(true);
horizontalLayout.addComponents(borrowButton, cancelButton);
VerticalLayout verticalLayout = new VerticalLayout();
verticalLayout
.addComponents(borrowDatefield, borrowingTypeField, lookupUser, previewReturnDatefield, returnDatefield,
horizontalLayout);
verticalLayout.setSpacing(true);
verticalLayout.addStyleName("no-scroll");
return verticalLayout;
}
};
}
private Button buildReturnFolderButton() {
return new WindowButton($("DisplayFolderView.returnFolder"),
$("DisplayFolderView.returnFolder")) {
@Override
protected Component buildWindowContent() {
final JodaDateField returnDatefield = new JodaDateField();
returnDatefield.setCaption($("DisplayFolderView.returnDate"));
returnDatefield.setRequired(false);
returnDatefield.setId("returnDate");
returnDatefield.addStyleName("returnDate");
returnDatefield.setValue(TimeProvider.getLocalDate().toDate());
BaseButton returnFolderButton = new BaseButton($("DisplayFolderView.returnFolder")) {
@Override
protected void buttonClick(ClickEvent event) {
LocalDate returnLocalDate = null;
if (returnDatefield.getValue() != null) {
returnLocalDate = LocalDate.fromDateFields(returnDatefield.getValue());
}
if (presenter.returnFolder(returnLocalDate)) {
getWindow().close();
}
}
};
returnFolderButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
BaseButton cancelButton = new BaseButton($("cancel")) {
@Override
protected void buttonClick(ClickEvent event) {
getWindow().close();
}
};
cancelButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
HorizontalLayout horizontalLayout = new HorizontalLayout();
horizontalLayout.setSpacing(true);
horizontalLayout.addComponents(returnFolderButton, cancelButton);
VerticalLayout verticalLayout = new VerticalLayout();
verticalLayout
.addComponents(returnDatefield, horizontalLayout);
verticalLayout.setSpacing(true);
return verticalLayout;
}
};
}
@Override
public void setBorrowedMessage(String borrowedMessage) {
if (borrowedMessage != null) {
borrowedLabel.setVisible(true);
borrowedLabel.setValue($(borrowedMessage));
} else {
borrowedLabel.setVisible(false);
borrowedLabel.setValue(null);
}
}
@Override
public void openDocumentContentVersiontWindow(DocumentVO documentVO, ContentVersionVO contentVersionVO) {
documentVersionWindow.setContent(new DocumentContentVersionWindowImpl(documentVO, contentVersionVO));
UI.getCurrent().addWindow(documentVersionWindow);
}
@Override
public void closeDocumentContentVersionWindow() {
documentVersionWindow.close();
}
// @Override
// public void openAgentURL(String agentURL) {
// Page.getCurrent().open(agentURL, null);
// }
@SuppressWarnings("deprecation")
@Override
public void downloadContentVersion(RecordVO recordVO, ContentVersionVO contentVersionVO) {
ContentVersionVOResource contentVersionResource = new ContentVersionVOResource(contentVersionVO);
Resource downloadedResource = DownloadLink.wrapForDownload(contentVersionResource);
Page.getCurrent().open(downloadedResource, null, false);
}
@Override
public void setTaxonomyCode(String taxonomyCode) {
this.taxonomyCode = taxonomyCode;
}
private class StartWorkflowButton extends WindowButton {
public StartWorkflowButton() {
super($("TasksManagementView.startWorkflow"), $("TasksManagementView.startWorkflow"), modalDialog("75%", "75%"));
}
@Override
protected Component buildWindowContent() {
RecordVOTable table = new RecordVOTable(presenter.getWorkflows());
table.setWidth("98%");
table.addItemClickListener(new ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
RecordVOItem item = (RecordVOItem) event.getItem();
presenter.workflowStartRequested(item.getRecord());
getWindow().close();
}
});
return table;
}
}
@Override
public void clearUploadField() {
uploadField.setInternalValue(null);
}
}