Index: src/org/jboss/tools/openshift/express/internal/ui/job/RetrieveApplicationJob.java =================================================================== --- src/org/jboss/tools/openshift/express/internal/ui/job/RetrieveApplicationJob.java (revision 0) +++ src/org/jboss/tools/openshift/express/internal/ui/job/RetrieveApplicationJob.java (revision 0) @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2012 Red Hat, Inc. + * Distributed under license by Red Hat, Inc. All rights reserved. + * This program is made available under the terms of the + * Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + ******************************************************************************/ +package org.jboss.tools.openshift.express.internal.ui.job; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.wst.server.core.IServer; +import org.jboss.tools.openshift.express.internal.core.behaviour.ExpressServerUtils; + +import com.openshift.client.IApplication; + +/** + * @author Xavier Coulon + * + */ +public class RetrieveApplicationJob extends Job { + + private IApplication application = null; + + private final IServer server; + + public RetrieveApplicationJob(final IServer server) { + super("Identifying OpenShift Application from selected Server..."); + this.server = server; + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + this.application = ExpressServerUtils.getApplication(server); + return Status.OK_STATUS; + } + + /** + * @return the application + */ + public final IApplication getApplication() { + return application; + } + +} Index: src/org/jboss/tools/openshift/express/internal/core/portforward/ApplicationPortForwardingWizardPage.java =================================================================== --- src/org/jboss/tools/openshift/express/internal/core/portforward/ApplicationPortForwardingWizardPage.java (revision 41507) +++ src/org/jboss/tools/openshift/express/internal/core/portforward/ApplicationPortForwardingWizardPage.java (working copy) @@ -331,7 +331,7 @@ @Override protected void onPageActivated(DataBindingContext dbc) { - final Job j = new Job("Retrieving application's forwardable ports...") { + final Job j = new Job("Loading application's forwardable ports...") { @Override protected IStatus run(IProgressMonitor monitor) { try { @@ -350,18 +350,11 @@ } }; - getContainer().getShell().getDisplay().asyncExec(new Runnable() { - public void run() { - try { - IStatus status = WizardUtils.runInWizard(j, getContainer(), getDataBindingContext()); - if(!status.isOK()) { - getWizard().getContainer().getShell().close(); - } - } catch(Exception e) { - // ignore - } - } - }); + try { + WizardUtils.runInWizard(j, getContainer(), getDataBindingContext()); + } catch (Exception e) { + Logger.error("Failed to load application's forwardable ports", e); + } } private void refreshViewerInput() { Index: src/org/jboss/tools/openshift/express/internal/ui/action/ApplicationPortForwardingAction.java =================================================================== --- src/org/jboss/tools/openshift/express/internal/ui/action/ApplicationPortForwardingAction.java (revision 41507) +++ src/org/jboss/tools/openshift/express/internal/ui/action/ApplicationPortForwardingAction.java (working copy) @@ -1,23 +1,18 @@ package org.jboss.tools.openshift.express.internal.ui.action; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.runtime.jobs.IJobChangeEvent; +import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.viewers.ITreeSelection; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.wst.server.core.IServer; -import org.jboss.tools.openshift.express.internal.core.behaviour.ExpressServerUtils; import org.jboss.tools.openshift.express.internal.core.portforward.ApplicationPortForwardingWizard; import org.jboss.tools.openshift.express.internal.core.portforward.ApplicationPortForwardingWizardDialog; -import org.jboss.tools.openshift.express.internal.ui.OpenShiftUIActivator; -import org.jboss.tools.openshift.express.internal.ui.utils.Logger; +import org.jboss.tools.openshift.express.internal.ui.job.RetrieveApplicationJob; import com.openshift.client.IApplication; -import com.openshift.client.OpenShiftSSHOperationException; public class ApplicationPortForwardingAction extends AbstractSSHAction { @@ -50,61 +45,30 @@ * @param server */ private void openPortForwardingDialog(final IServer server) { - Job job = new Job("Identifying OpenShift Application from selected Server...") { + final RetrieveApplicationJob job = new RetrieveApplicationJob(server); + job.addJobChangeListener(new JobChangeAdapter() { @Override - protected IStatus run(IProgressMonitor monitor) { - final IApplication application = ExpressServerUtils.getApplication(server); - Display.getDefault().asyncExec(new Runnable() { - public void run() { - openPortForwardingDialog(application); - } - }); - return Status.OK_STATUS; - } - }; - job.setUser(true); - job.schedule(); - } - - private void openPortForwardingDialog(final IApplication application) { - Job job = new Job("Retrieving application's forwardable ports...") { - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - verifyApplicationSSHSession(application); - Display.getDefault().asyncExec(new Runnable() { - public void run() { - runAsync(application); - } - }); - return Status.OK_STATUS; - } catch (OpenShiftSSHOperationException e) { - return OpenShiftUIActivator.createErrorStatus(e.getMessage(), e.getCause()); + public void done(IJobChangeEvent event) { + if (event.getResult().isOK()) { + final IApplication application = job.getApplication(); + openPortForwardingDialog(application); } } - }; + }); job.setUser(true); job.schedule(); } - /** - * @param application - */ - private void runAsync(final IApplication application) { - try { - ApplicationPortForwardingWizard wizard = new ApplicationPortForwardingWizard( - application); - WizardDialog dialog = new ApplicationPortForwardingWizardDialog(Display.getCurrent() - .getActiveShell(), - wizard); - dialog.setMinimumPageSize(700, 300); - dialog.create(); - dialog.open(); - } catch (Exception e) { - Logger.error( - "Failed to perform 'port-forwarding' for application '" + application.getName() - + "'", e); - } + private void openPortForwardingDialog(final IApplication application) { + ApplicationPortForwardingWizard wizard = new ApplicationPortForwardingWizard( + application); + WizardDialog dialog = new ApplicationPortForwardingWizardDialog(Display.getDefault() + .getActiveShell(), + wizard); + dialog.setMinimumPageSize(700, 300); + dialog.setBlockOnOpen(true); + dialog.create(); + dialog.open(); } }