package com.constellio.app.modules.robots.ui.pages; import static com.constellio.app.ui.i18n.i18n.$; import java.util.List; import org.vaadin.dialogs.ConfirmDialog; import com.constellio.app.modules.robots.ui.components.breadcrumb.RobotBreadcrumbTrail; import com.constellio.app.modules.robots.ui.data.RobotTreeNodesDataProvider; import com.constellio.app.ui.entities.MetadataVO; 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.EditButton; import com.constellio.app.ui.framework.buttons.LinkButton; import com.constellio.app.ui.framework.components.MetadataDisplayFactory; import com.constellio.app.ui.framework.components.RecordDisplay; import com.constellio.app.ui.framework.components.ReportViewer.DownloadStreamResource; import com.constellio.app.ui.framework.components.breadcrumb.BaseBreadcrumbTrail; import com.constellio.app.ui.framework.components.tree.RecordLazyTree; import com.constellio.app.ui.framework.data.RecordLazyTreeDataProvider; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.server.Page; import com.vaadin.server.Resource; import com.vaadin.shared.MouseEventDetails.MouseButton; 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.TabSheet; public class RobotConfigurationViewImpl extends BaseViewImpl implements RobotConfigurationView { private final RobotConfigurationPresenter presenter; private RecordVO robot; private Resource resource; public RobotConfigurationViewImpl() { this.presenter = new RobotConfigurationPresenter(this); } @Override protected void initBeforeCreateComponents(ViewChangeEvent event) { robot = presenter.forParams(event.getParameters()).getRootRobot(); } @Override protected String getTitle() { return null; } @Override protected BaseBreadcrumbTrail buildBreadcrumbTrail() { return new RobotBreadcrumbTrail(presenter.getRootRobotId(), this); } @Override protected Component buildMainComponent(ViewChangeEvent event) { TabSheet sheet = new TabSheet(); sheet.setWidth("100%"); RecordDisplay display = new RecordDisplay(robot, new LocalMetadataDisplayFactory()); sheet.addTab(display, $("RobotConfigurationView.metadata")); // LegacyRobotLazyTreeDataProvider provider = new LegacyRobotLazyTreeDataProvider( // getConstellioFactories().getAppLayerFactory(), getCollection(), presenter.getRootRobotId()); RecordLazyTreeDataProvider provider = new RecordLazyTreeDataProvider(new RobotTreeNodesDataProvider( getConstellioFactories().getAppLayerFactory(), getCollection(), presenter.getRootRobotId())); RecordLazyTree tree = new RecordLazyTree(provider); tree.addItemClickListener(new ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { if (event.getButton() == MouseButton.LEFT) { String robotId = (String) event.getItemId(); presenter.robotNavigationRequested(robotId); } } }); sheet.addTab(tree, $("RobotConfigurationView.tree")); return sheet; } private class LocalMetadataDisplayFactory extends MetadataDisplayFactory { private static final String ROBOT_DEFAULT_ACTION = "robot_default_action"; private static final String ROBOT_DEFAULT_SCHEMA_FILTER = "robot_default_schemaFilter"; @Override public Component buildSingleValue(RecordVO recordVO, MetadataVO metadata, Object displayValue) { if (ROBOT_DEFAULT_SCHEMA_FILTER.equals(metadata.getCode()) || ROBOT_DEFAULT_ACTION.equals(metadata.getCode())) { displayValue = $(displayValue.toString()); } return super.buildSingleValue(recordVO, metadata, displayValue); } } @Override protected List<Button> buildActionMenuButtons(ViewChangeEvent event) { List<Button> buttons = super.buildActionMenuButtons(event); buttons.add(buildExecuteButton()); buttons.add(buildAddButton()); buttons.add(buildEditButton()); buttons.add(buildDeleteButton()); buttons.add(buildLogsButton()); buttons.add(buildDownloadButton()); buttons.add(buildDeleteRecordsButton()); return buttons; } private Button buildExecuteButton() { LinkButton button = new LinkButton($("RobotConfigurationView.executeRobot")) { @Override protected void buttonClick(ClickEvent event) { presenter.executeButtonClicked(robot); } }; button.setVisible(presenter.canExecute(robot)); return button; } private Button buildAddButton() { return new AddButton($("RobotConfigurationView.addSubRobot")) { @Override protected void buttonClick(ClickEvent event) { presenter.addButtonClicked(robot); } }; } private Button buildEditButton() { return new EditButton($("RobotConfigurationView.editRobot")) { @Override protected void buttonClick(ClickEvent event) { presenter.editButtonClicked(robot); } }; } private DeleteButton buildDeleteButton() { return new DeleteButton($("RobotConfigurationView.deleteRobot")) { @Override protected void confirmButtonClick(ConfirmDialog dialog) { presenter.deleteButtonClicked(robot); } }; } private Button buildLogsButton() { return new LinkButton($("RobotConfigurationView.viewLogs")) { @Override protected void buttonClick(ClickEvent event) { presenter.viewLogsButtonClicked(); } }; } private Button buildDownloadButton() { return new LinkButton($("RobotConfigurationView.download")) { @Override protected void buttonClick(ClickEvent event) { if (resource == null) { resource = new DownloadStreamResource(presenter.getResource(), presenter.getReportTitle()); } Page.getCurrent().open(resource, null, false); } }; } private DeleteButton buildDeleteRecordsButton() { return new DeleteButton($("RobotConfigurationView.deleteRecords")) { @Override protected void confirmButtonClick(ConfirmDialog dialog) { presenter.deleteRecordsButtonClicked(robot); } }; } @Override protected ClickListener getBackButtonClickListener() { return new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.backButtonClicked(); } }; } }