/* * Copyright (C) 2015-2017 PÂRIS Quentin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.phoenicis.javafx.controller.containers; import javafx.application.Platform; import org.phoenicis.containers.ContainersManager; import org.phoenicis.containers.dto.ContainerDTO; import org.phoenicis.containers.dto.WinePrefixContainerDTO; import org.phoenicis.containers.wine.WinePrefixContainerController; import org.phoenicis.engines.EnginesSource; import org.phoenicis.javafx.views.common.ConfirmMessage; import org.phoenicis.javafx.views.common.ErrorMessage; import org.phoenicis.javafx.views.mainwindow.containers.ContainerPanelFactory; import org.phoenicis.javafx.views.mainwindow.containers.ViewContainers; import org.phoenicis.javafx.views.mainwindow.containers.WinePrefixContainerPanel; import java.util.stream.Collectors; public class ContainersController { private final ViewContainers viewContainers; private final ContainersManager containersManager; private final ContainerPanelFactory<WinePrefixContainerPanel, WinePrefixContainerDTO> winePrefixContainerPanelFactory; private final WinePrefixContainerController winePrefixContainerController; private final EnginesSource enginesSource; public ContainersController(ViewContainers viewContainers, ContainersManager containersManager, ContainerPanelFactory<WinePrefixContainerPanel, WinePrefixContainerDTO> winePrefixContainerPanelFactory, WinePrefixContainerController winePrefixContainerController, EnginesSource enginesSource) { this.viewContainers = viewContainers; this.containersManager = containersManager; this.winePrefixContainerPanelFactory = winePrefixContainerPanelFactory; this.winePrefixContainerController = winePrefixContainerController; this.enginesSource = enginesSource; viewContainers.setOnSelectionChanged(event -> { if (viewContainers.isSelected()) { loadContainers(); } }); viewContainers.setOnSelectContainer((ContainerDTO containerDTO) -> { enginesSource.fetchAvailableEngines(engineCategoryDTOS -> { final WinePrefixContainerPanel panel = winePrefixContainerPanelFactory.createContainerPanel( (WinePrefixContainerDTO) containerDTO, viewContainers.getThemeManager(), engineCategoryDTOS.stream().flatMap(category -> category.getSubCategories().stream()) .flatMap(subCategory -> subCategory.getPackages().stream()) .collect(Collectors.toList())); panel.setOnWineCfg(winePrefixDTO -> winePrefixContainerController.runInPrefix(winePrefixDTO, "winecfg", panel::unlockAll, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show()))); panel.setOnRegedit(winePrefixDTO -> winePrefixContainerController.runInPrefix(winePrefixDTO, "regedit", panel::unlockAll, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show()))); panel.setOnWineboot( winePrefixDTO -> winePrefixContainerController.runInPrefix(winePrefixDTO, "wineboot", panel::unlockAll, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show()))); panel.setOnWinebootRepair(winePrefixDTO -> winePrefixContainerController.repairPrefix(winePrefixDTO, panel::unlockAll, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show()))); panel.setOnWineConsole( winePrefixDTO -> winePrefixContainerController.runInPrefix(winePrefixDTO, "wineconsole", panel::unlockAll, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show()))); panel.setOnTaskMgr(winePrefixDTO -> winePrefixContainerController.runInPrefix(winePrefixDTO, "taskmgr", panel::unlockAll, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show()))); panel.setOnUninstaller( winePrefixDTO -> winePrefixContainerController.runInPrefix(winePrefixDTO, "uninstaller", panel::unlockAll, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show()))); panel.setOnKillProcess(winePrefixDTO -> winePrefixContainerController.killProcesses(winePrefixDTO, panel::unlockAll, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show()))); panel.setOnOpenTerminalInWinePrefix(winePrefix -> { winePrefixContainerController.openTerminalInPrefix(winePrefix); panel.unlockAll(); }); panel.setOnChangeSetting((winePrefixDTO, setting) -> { winePrefixContainerController.changeSetting(winePrefixDTO, setting, panel::unlockAll, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show())); panel.unlockAll(); }); panel.setOnDeletePrefix(winePrefixDTO -> { new ConfirmMessage("Delete " + winePrefixDTO.getName() + " container", "Are you sure you want to delete the " + winePrefixDTO.getName() + " container?") .ask(() -> { winePrefixContainerController.deletePrefix(winePrefixDTO, e -> Platform.runLater(() -> new ErrorMessage("Error", e).show())); loadContainers(); }); }); Platform.runLater(() -> viewContainers.showDetailsView(panel)); }); }); } public ViewContainers getView() { return viewContainers; } public void loadContainers() { this.viewContainers.showWait(); containersManager.fetchContainers(viewContainers::populate, e -> this.viewContainers.showFailure()); } }