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