package com.constellio.app.modules.robots.ui.pages;
import static com.constellio.app.ui.i18n.i18n.$;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.modules.robots.model.DryRunRobotAction;
import com.constellio.app.modules.robots.model.wrappers.Robot;
import com.constellio.app.modules.robots.reports.DryRunReportWriterFactory;
import com.constellio.app.modules.robots.ui.navigation.RobotViews;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.entities.RecordVO.VIEW_MODE;
import com.vaadin.server.StreamResource.StreamSource;
public class RobotConfigurationPresenter extends BaseRobotPresenter<RobotConfigurationView> {
private String rootRobotId;
public RobotConfigurationPresenter(RobotConfigurationView view) {
super(view, Robot.DEFAULT_SCHEMA);
}
public RobotConfigurationPresenter forParams(String parameters) {
rootRobotId = parameters;
return this;
}
public RecordVO getRootRobot() {
return presenterService().getRecordVO(rootRobotId, VIEW_MODE.DISPLAY, view.getSessionContext());
}
public String getRootRobotId() {
return rootRobotId;
}
public boolean canExecute(RecordVO robot) {
return manager().canExecute(robot.getId());
}
public void executeButtonClicked(RecordVO robot) {
view.showMessage($("RobotConfigurationView.executionStarting"));
manager().startRobotExecution(robot.getId());
}
public void addButtonClicked(RecordVO robot) {
view.navigate().to(RobotViews.class).addRobot(robot.getId());
}
public void editButtonClicked(RecordVO robot) {
view.navigate().to(RobotViews.class).editRobot(robot.getId());
}
public void deleteButtonClicked(RecordVO robot) {
robotsService().deleteRobotHierarchy(robot.getId());
}
public void robotNavigationRequested(String robotId) {
view.navigate().to(RobotViews.class).robotConfiguration(robotId);
}
public void viewLogsButtonClicked() {
view.navigate().to(RobotViews.class).displayLogs(rootRobotId);
}
public String getReportTitle() {
return new DryRunReportWriterFactory(new ArrayList<DryRunRobotAction>(), view.getSessionContext()).getFilename();
}
public StreamSource getResource() {
return new StreamSource() {
private static final String MUTEX = "mutex";
private DryRunReportWriterFactory factory;
@Override
public InputStream getStream() {
ByteArrayOutputStream output = new ByteArrayOutputStream();
synchronized (MUTEX) {
if (factory == null) {
List<DryRunRobotAction> dryRun = manager().dryRun(robotSchemas().getRobot(rootRobotId));
factory = new DryRunReportWriterFactory(dryRun, view.getSessionContext());
}
try {
factory.getReportBuilder(modelLayerFactory).write(output);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return new ByteArrayInputStream(output.toByteArray());
}
};
}
public void backButtonClicked() {
view.navigate().to(RobotViews.class).listRootRobots();
}
public void deleteRecordsButtonClicked() {
view.navigate().to(RobotViews.class).deleteRobotRecords(rootRobotId);
}
public void deleteRecordsButtonClicked(RecordVO robot) {
view.navigate().to(RobotViews.class).deleteRobotRecords(rootRobotId);
}
}