/*******************************************************************************
* Copyright (c) 2012, 2016, 2017 PDT Extension Group and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* PDT Extension Group - initial API and implementation
* Kaloyan Raev - [501269] externalize strings
* Kaloyan Raev - [511744] Wizard freezes if no PHP executable is configured
*******************************************************************************/
package org.eclipse.php.composer.ui.wizard;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.ui.wizards.NewElementWizard;
import org.eclipse.php.composer.core.facet.FacetManager;
import org.eclipse.php.composer.core.log.Logger;
import org.eclipse.php.composer.ui.editor.composer.ComposerFormEditor;
import org.eclipse.php.core.PHPVersion;
import org.eclipse.php.core.project.ProjectOptions;
import org.eclipse.ui.*;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
/**
* @author Robert Gruendler <r.gruendler@gmail.com>
*/
public abstract class AbstractComposerWizard extends NewElementWizard implements INewWizard, IExecutableExtension {
protected AbstractWizardFirstPage firstPage;
protected AbstractWizardSecondPage secondPage;
protected AbstractWizardSecondPage lastPage;
protected IConfigurationElement config;
@Override
public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
throws CoreException {
this.config = config;
}
public void addPages() {
super.addPages();
firstPage = getFirstPage();
addPage(firstPage);
secondPage = getSecondPage();
addPage(secondPage);
lastPage = secondPage;
}
@Override
protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
if (firstPage != null) {
firstPage.performFinish(monitor);
}
if (secondPage != null) {
secondPage.performFinish(monitor);
}
}
@Override
public IModelElement getCreatedElement() {
return DLTKCore.create(firstPage.getProjectHandle());
}
@Override
public boolean performFinish() {
boolean res = super.performFinish();
if (res) {
BasicNewProjectResourceWizard.updatePerspective(config);
IScriptProject scriptProject = lastPage.getScriptProject();
if (scriptProject != null) {
IProject project = scriptProject.getProject();
selectAndReveal(project);
PHPVersion version = firstPage.getPHPVersionValue();
if (version == null) {
version = ProjectOptions.getDefaultPHPVersion();
}
FacetManager.installFacets(project, version, null);
IFile json = project.getFile("composer.json"); //$NON-NLS-1$
if (json != null) {
try {
IEditorInput editorInput = new FileEditorInput(json);
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage page = window.getActivePage();
page.openEditor(editorInput, ComposerFormEditor.ID);
} catch (Exception e) {
Logger.logException(e);
}
}
}
}
return res;
}
@Override
public boolean performCancel() {
secondPage.cancel();
return super.performCancel();
}
protected abstract AbstractWizardFirstPage getFirstPage();
protected abstract AbstractWizardSecondPage getSecondPage();
}