1 /* 2 * LauncherJobsPresenter.java 3 * 4 * Copyright (C) 2021 by RStudio, PBC 5 * 6 * Unless you have received this program directly from RStudio pursuant 7 * to the terms of a commercial license agreement with RStudio, then 8 * this program is licensed to you under the terms of version 3 of the 9 * GNU Affero General Public License. This program is distributed WITHOUT 10 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, 11 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the 12 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. 13 * 14 */ 15 16 package org.rstudio.studio.client.workbench.views.jobs; 17 18 import org.rstudio.core.client.command.CommandBinder; 19 import org.rstudio.core.client.command.Handler; 20 import org.rstudio.studio.client.workbench.commands.Commands; 21 import org.rstudio.studio.client.workbench.views.BasePresenter; 22 import org.rstudio.studio.client.workbench.views.jobs.events.JobUpdatedEvent; 23 import org.rstudio.studio.client.workbench.views.jobs.events.JobsActivateEvent; 24 import org.rstudio.studio.client.workbench.views.jobs.events.JobElapsedTickEvent; 25 import org.rstudio.studio.client.workbench.views.jobs.events.JobOutputEvent; 26 import org.rstudio.studio.client.workbench.views.jobs.events.JobSelectionEvent; 27 import org.rstudio.studio.client.workbench.views.jobs.events.JobsPresenterEventHandlers; 28 import org.rstudio.studio.client.workbench.views.jobs.events.JobsPresenterEventHandlersImpl; 29 import org.rstudio.studio.client.workbench.views.jobs.model.JobConstants; 30 import org.rstudio.studio.client.workbench.views.jobs.model.JobState; 31 import org.rstudio.studio.client.workbench.views.jobs.model.LauncherJobManager; 32 import org.rstudio.studio.client.workbench.views.jobs.view.JobsDisplay; 33 34 import com.google.gwt.user.client.Command; 35 import com.google.inject.Inject; 36 37 public class LauncherJobsPresenter extends BasePresenter 38 implements JobsPresenterEventHandlers 39 { 40 public interface Display extends JobsDisplay {} 41 42 public interface Binder extends CommandBinder<Commands, LauncherJobsPresenter> {} 43 44 @Inject LauncherJobsPresenter(Display display, Binder binder, Commands commands, LauncherJobManager launcherJobManager)45 public LauncherJobsPresenter(Display display, 46 Binder binder, 47 Commands commands, 48 LauncherJobManager launcherJobManager) 49 { 50 super(display); 51 52 jobEventHandler_ = new JobsPresenterEventHandlersImpl(JobConstants.JOB_TYPE_LAUNCHER, display); 53 54 display_ = display; 55 commands_ = commands; 56 launcherJobManager_ = launcherJobManager; 57 binder.bind(commands, this); 58 } 59 60 @Override onJobUpdated(JobUpdatedEvent event)61 public void onJobUpdated(JobUpdatedEvent event) 62 { 63 jobEventHandler_.onJobUpdated(event); 64 } 65 66 @Override setInitialJobs(JobState state)67 public void setInitialJobs(JobState state) 68 { 69 jobEventHandler_.setInitialJobs(state); 70 } 71 72 @Override onJobOutput(JobOutputEvent event)73 public void onJobOutput(JobOutputEvent event) 74 { 75 jobEventHandler_.onJobOutput(event); 76 } 77 78 @Override onJobSelection(final JobSelectionEvent event)79 public void onJobSelection(final JobSelectionEvent event) 80 { 81 jobEventHandler_.onJobSelection(event); 82 } 83 84 @Override onJobElapsedTick(JobElapsedTickEvent event)85 public void onJobElapsedTick(JobElapsedTickEvent event) 86 { 87 jobEventHandler_.onJobElapsedTick(event); 88 } 89 90 @Override onJobsActivate(JobsActivateEvent event)91 public void onJobsActivate(JobsActivateEvent event) 92 { 93 jobEventHandler_.onJobsActivate(event); 94 } 95 96 @Override onBeforeUnselected()97 public void onBeforeUnselected() 98 { 99 super.onBeforeUnselected(); 100 launcherJobManager_.stopTrackingAllJobStatuses(); 101 } 102 103 @Override onBeforeSelected()104 public void onBeforeSelected() 105 { 106 super.onBeforeSelected(); 107 launcherJobManager_.startTrackingAllJobStatuses(); 108 } 109 confirmClose(Command onConfirmed)110 public void confirmClose(Command onConfirmed) 111 { 112 // launcher jobs are not tied to the session so always ok to close 113 display_.setShowTabPref(false); 114 onConfirmed.execute(); 115 } 116 117 @Handler onActivateLauncherJobs()118 public void onActivateLauncherJobs() 119 { 120 // Ensure that console pane is not minimized 121 commands_.activateConsolePane().execute(); 122 display_.bringToFront(); 123 } 124 125 // Private methods --------------------------------------------------------- 126 127 private JobsPresenterEventHandlersImpl jobEventHandler_; 128 129 // injected 130 private final Display display_; 131 private final Commands commands_; 132 private final LauncherJobManager launcherJobManager_; 133 134 } 135