/*
* � Copyright IBM Corp. 2015, 2016
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.ibm.xsp.extlib.designer.bluemix.wizard;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.PageChangingEvent;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardDialog;
import com.ibm.xsp.extlib.designer.bluemix.action.ToolbarAction;
import com.ibm.xsp.extlib.designer.bluemix.config.BluemixConfig;
import com.ibm.xsp.extlib.designer.bluemix.config.ConfigManager;
import com.ibm.xsp.extlib.designer.bluemix.manifest.ManifestUtil;
import com.ibm.xsp.extlib.designer.bluemix.manifest.editor.ManifestMultiPageEditor;
import com.ibm.xsp.extlib.designer.bluemix.util.BluemixUtil;
/**
* @author Gary Marjoram
*
*/
public class ConfigBluemixWizard extends AbstractBluemixWizard {
private static final String _WIZARD_TITLE = BluemixUtil.productizeString("Configure Application For Deployment"); // $NLX-ConfigBluemixWizard.ConfigureApplicationForDeployment-1$
private final CloudSpaceBluemixWizardPage _cloudSpacePage;
private final DirectoryBluemixWizardPage _dirPage;
private final NameBluemixWizardPage _namePage;
private final ConfigBluemixWizardPage _configPage;
private final ManifestBluemixWizardPage _manifestPage;
private final CopyMethodBluemixWizardPage _copyMethodPage;
private ConfigBluemixWizard() {
super();
// Get the project and existing config if any
project = ToolbarAction.project;
// Create the pages
_dirPage = new DirectoryBluemixWizardPage("dirPage", false); // $NON-NLS-1$
_cloudSpacePage = new CloudSpaceBluemixWizardPage("cloudSpacePage"); // $NON-NLS-1$
_configPage = new ConfigBluemixWizardPage("configPage"); // $NON-NLS-1$
_namePage = new NameBluemixWizardPage("namePage"); // $NON-NLS-1$
_manifestPage = new ManifestBluemixWizardPage("manifestPage"); // $NON-NLS-1$
_copyMethodPage = new CopyMethodBluemixWizardPage("deployCopyPage"); // $NON-NLS-1$
}
@Override
protected String getTitle() {
return _WIZARD_TITLE;
}
@Override
public boolean performFinish() {
BluemixConfig newConfig;
if (getContainer().getCurrentPage() == _configPage) {
newConfig = ConfigManager.getInstance().getConfigFromDirectory(_dirPage.getDirectory());
// User is linking nsf to an existing config
ConfigManager.getInstance().setConfig(project, newConfig, false, null);
}
else if (getContainer().getCurrentPage() == _manifestPage) {
newConfig = ConfigManager.getInstance().getConfigFromDirectory(_dirPage.getDirectory());
newConfig.org = _cloudSpacePage.getOrg();
newConfig.space = _cloudSpacePage.getSpace();
newConfig.copyMethod = _copyMethodPage.getCopyMethod();
// Write the bluemix.properties file, manifest.yml is not changing
ConfigManager.getInstance().setConfig(project, newConfig, false, null);
// Save the wizard state
_cloudSpacePage.savePageState();
_copyMethodPage.savePageState();
}
else if (getContainer().getCurrentPage() == _namePage) {
newConfig = new BluemixConfig();
newConfig.directory = _dirPage.getDirectory();
newConfig.org = _cloudSpacePage.getOrg();
newConfig.space = _cloudSpacePage.getSpace();
newConfig.copyMethod = _copyMethodPage.getCopyMethod();
newConfig.appName = _namePage.getAppName();
newConfig.host = _namePage.getHost();
// Write the bluemix.properties and manifest.yml files
ConfigManager.getInstance().setConfig(project, newConfig, true, null);
// Save the wizard state
_cloudSpacePage.savePageState();
_copyMethodPage.savePageState();
}
return true;
}
@Override
public void handlePageChanging(PageChangingEvent event) {
event.doit = true;
advancing = false;
if (event.getCurrentPage() == _dirPage) {
if (_dirPage.hasChanged()) {
_configPage.setFirstDisplay(true);
_manifestPage.setFirstDisplay(true);
_dirPage.setHasChanged(false);
}
if (event.getTargetPage() == _configPage) {
advancing = true;
} else if (event.getTargetPage() == _copyMethodPage) {
advancing = true;
}
}
else if (event.getCurrentPage() == _configPage) {
if (event.getTargetPage() == _copyMethodPage) {
advancing = true;
}
}
else if (event.getCurrentPage() == _copyMethodPage) {
if (event.getTargetPage() == _cloudSpacePage) {
advancing = true;
if(_cloudSpacePage.isFirstDisplay()) {
if (!runJob(_cloudSpacePage.getOrgsAndSpaces)) {
event.doit = false;
}
}
}
}
else if (event.getCurrentPage() == _cloudSpacePage) {
if (_cloudSpacePage.hasChanged()) {
_namePage.setFirstDisplay(true);
_cloudSpacePage.setHasChanged(false);
}
if (event.getTargetPage() == _namePage) {
advancing = true;
if (_namePage.isFirstDisplay()) {
_namePage.setCloudSpace(_cloudSpacePage.getOrg(), _cloudSpacePage.getSpace());
if (!runJob(_namePage.getApplications)) {
event.doit = false;
}
}
} else if (event.getTargetPage() == _manifestPage) {
advancing = true;
}
}
else if (event.getCurrentPage() == _manifestPage) {
if (event.getTargetPage() == _namePage) {
advancing = true;
if (_namePage.isFirstDisplay()) {
_namePage.setCloudSpace(_cloudSpacePage.getOrg(), _cloudSpacePage.getSpace());
if (!runJob(_namePage.getApplications)) {
event.doit = false;
}
}
}
}
}
@Override
public IWizardPage getNextPage(IWizardPage page) {
if (page == _dirPage) {
if (ConfigManager.getInstance().getConfigFromDirectory(_dirPage.getDirectory()).isValid(false)) {
// There's a config in the chosen directory
return _configPage;
} else {
return _copyMethodPage;
}
} else if (page == _copyMethodPage) {
return _cloudSpacePage;
} else if (page == _cloudSpacePage) {
if (ManifestUtil.getManifestFile(_dirPage.getDirectory()).exists()) {
// There's a manifest in the chosen directory
return _manifestPage;
} else {
return _namePage;
}
} else if (page == _configPage) {
if (!_configPage.getUseExistingConfig()) {
// User has chosen to overwrite the existing config
return _copyMethodPage;
}
} else if (page == _manifestPage) {
if (!_manifestPage.getUseExistingManifest()) {
// User has chosen to overwrite the existing manifest
return _namePage;
}
}
return null;
}
@Override
public void addPages() {
super.addPages();
addPage(_dirPage);
addPage(_configPage);
addPage(_copyMethodPage);
addPage(_cloudSpacePage);
addPage(_manifestPage);
addPage(_namePage);
}
@Override
public boolean canFinish() {
// Enables the finish button on the wizard
if ((getContainer().getCurrentPage() == _configPage) && _configPage.getUseExistingConfig()) {
return true;
} else if ((getContainer().getCurrentPage() == _manifestPage) && _manifestPage.getUseExistingManifest()) {
return true;
} else if ((getContainer().getCurrentPage() == _namePage) && _namePage.isPageComplete()) {
return true;
}
return false;
}
public DirectoryBluemixWizardPage getDirectoryPage() {
return _dirPage;
}
public CloudSpaceBluemixWizardPage getCloudSpacePage() {
return _cloudSpacePage;
}
static public void launch() {
// Check there's an open project
if (ToolbarAction.project != null) {
// Check that the Server details are configured
if (BluemixUtil.isServerConfigured()) {
// Check is the manifest open
ManifestMultiPageEditor editor = BluemixUtil.getManifestEditor(ToolbarAction.project);
if (editor != null) {
MessageDialog.openWarning(null, _WIZARD_TITLE,
"The Manifest for this application is open. You must close the Manifest before running the Configuration Wizard."); // $NLX-ConfigBluemixWizard.TheManifestforthisapplicat-1$
} else {
// Launch the Bluemix Config Wizard
ConfigBluemixWizard wiz = new ConfigBluemixWizard();
WizardDialog dialog = new WizardDialog(null, wiz);
dialog.addPageChangingListener(wiz);
dialog.open();
}
}
else {
BluemixUtil.displayConfigureServerDialog();
}
} else {
MessageDialog.openError(null, _WIZARD_TITLE, "No application has been selected or the selected application is not open."); // $NLX-ConfigBluemixWizard.Noapplicationhasbeenselectedorthe-1$
}
}
}