/** * Aptana Studio * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.deploy.capistrano.ui.wizard; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; 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.jface.dialogs.Dialog; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.PlatformUI; import com.aptana.core.util.ExecutableUtil; //import com.aptana.terminal.widget.TerminalComposite; public class InstallCapistranoGemPage extends WizardPage { private static final String NAME = "InstallCapistrano"; //$NON-NLS-1$ // private TerminalComposite terminalComposite; private IWizardPage fNextPage; protected Job checkGemInstalledJob; protected InstallCapistranoGemPage() { super(NAME, Messages.InstallCapistranoGemPage_Title, null); } public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); setControl(composite); initializeDialogUnits(parent); // Actual contents Label label = new Label(composite, SWT.WRAP); label.setText(Messages.InstallCapistranoGemPage_Description); label.setLayoutData(new GridData(500, SWT.DEFAULT)); Button generateButton = new Button(composite, SWT.PUSH); generateButton.setText(Messages.InstallCapistranoGemPage_InstallGemLabel); generateButton.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false)); generateButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { // if (!terminalComposite.isEmpty()) // { // terminalComposite.clear(); // } // Need to check to see if we should run under sudo to install gem... // if (!ExecutableUtil.isGemInstallable()) // { // // Does not have permission // terminalComposite.sendInput("sudo "); //$NON-NLS-1$ // } // // // install gem // terminalComposite.sendInput("gem install capistrano\n"); //$NON-NLS-1$ // Poll to check if capistrano is installed if (checkGemInstalledJob == null) { checkGemInstalledJob = new Job("Checking if capistrano gem is installed") //$NON-NLS-1$ { protected IStatus run(IProgressMonitor monitor) { if (monitor != null && monitor.isCanceled()) { return Status.CANCEL_STATUS; } if (isCapistranoGemInstalled()) { PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { getContainer().updateButtons(); // ok update the wizard } }); } else { schedule(1000); // check again in a second } return Status.OK_STATUS; } }; checkGemInstalledJob.setSystem(true); } checkGemInstalledJob.cancel(); checkGemInstalledJob.schedule(1000); } }); // Terminal // terminalComposite = new TerminalComposite(composite, SWT.NONE); // terminalComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); // // terminalComposite.setWorkingDirectory(getProject().getLocation()); // terminalComposite.connect(); Dialog.applyDialogFont(composite); } @Override public void dispose() { try { if (checkGemInstalledJob != null) { checkGemInstalledJob.cancel(); checkGemInstalledJob = null; } } finally { super.dispose(); } } @Override public IWizardPage getNextPage() { if (fNextPage == null) { fNextPage = new CapifyProjectPage(); fNextPage.setWizard(getWizard()); } return fNextPage; } @Override public boolean isPageComplete() { return isCapistranoGemInstalled(); } static boolean isCapistranoGemInstalled() { // Determine if capistrano is installed IPath path = ExecutableUtil.find("capify", false, null); //$NON-NLS-1$ if (path != null && path.toFile().exists()) { return true; } return false; } protected IProject getProject() { return ((CapistranoDeployWizard) getWizard()).getProject(); } }