/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.modelgenerator.salesforce.ui.wizards; import java.lang.reflect.InvocationTargetException; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IImportWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.teiid.core.designer.util.I18nUtil; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.modelgenerator.salesforce.SalesforceImportWizardManager; import org.teiid.designer.modelgenerator.salesforce.ui.Activator; import org.teiid.designer.modelgenerator.salesforce.ui.ModelGeneratorSalesforceUiConstants; import org.teiid.designer.modelgenerator.salesforce.util.ModelBuildingException; import org.teiid.designer.ui.common.wizard.AbstractWizard; import org.teiid.designer.ui.common.wizard.NoOpenProjectsWizardPage; import org.teiid.designer.ui.viewsupport.ModelerUiViewUtils; /** * @since 8.0 */ public class SalesforceToRelationalImportWizard extends AbstractWizard implements IImportWizard, ModelGeneratorSalesforceUiConstants { private static final String I18N_PREFIX = I18nUtil.getPropertyPrefix(SalesforceToRelationalImportWizard.class); private static final String TITLE = getString("Salesforce.Import.Wizard"); //$NON-NLS-1$ SalesforceImportWizardManager importManager; private WizardPage selectSalesforceObjectsPage; private IStructuredSelection selection; private CredentialsPage credentialsPage; private ModelSelectionPage modelSelectionPage; private ShowDifferencesPage differencesPage; public SalesforceToRelationalImportWizard() { super(Activator.getDefault(), TITLE, AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/salesforce_wiz.gif")); //$NON-NLS-1$); } /** * Get the localized string text for the provided id */ private static String getString( final String id ) { return UTIL.getString(I18N_PREFIX + id); } /** * @see org.eclipse.jface.wizard.IWizard#createPageControls(org.eclipse.swt.widgets.Composite) */ @Override public void createPageControls( Composite pageContainer ) { super.createPageControls(pageContainer); } /** * Method declared on IWorkbenchWizard. */ @Override public void init( IWorkbench workbench, IStructuredSelection currentSelection ) { this.importManager = new SalesforceImportWizardManager(); this.selection = currentSelection; List selectedResources = IDE.computeSelectedResources(currentSelection); if (!selectedResources.isEmpty()) { this.selection = new StructuredSelection(selectedResources); } if( !ModelerUiViewUtils.workspaceHasOpenModelProjects() ) { IProject newProject = ModelerUiViewUtils.queryUserToCreateModelProject(); if( newProject != null ) { this.selection = new StructuredSelection(newProject); } else { addPage(NoOpenProjectsWizardPage.getStandardPage()); return; } } createWizardPages(this.selection); setNeedsProgressMonitor(true); } /** * Create Wizard pages for the wizard * * @param theSelection the initial workspace selection */ public void createWizardPages( ISelection theSelection ) { this.importManager = new SalesforceImportWizardManager(); // construct pages this.credentialsPage = new CredentialsPage(this.importManager); this.selectSalesforceObjectsPage = new SelectSalesforceObjectsPage(this.importManager); this.modelSelectionPage = new ModelSelectionPage(this.importManager); this.differencesPage = new ShowDifferencesPage(this.importManager); this.credentialsPage.setPageComplete(false); this.selectSalesforceObjectsPage.setPageComplete(false); this.modelSelectionPage.setPageComplete(false); this.differencesPage.setPageComplete(false); addPage(this.credentialsPage); addPage(this.selectSalesforceObjectsPage); addPage(this.modelSelectionPage); addPage(this.differencesPage); this.modelSelectionPage.setInitialSelection(theSelection); } /** * @see org.eclipse.jface.wizard.IWizard#performFinish() * @since 4.0 */ @Override public boolean finish() { boolean result = false; final IRunnableWithProgress op = new IRunnableWithProgress() { @Override public void run( final IProgressMonitor monitor ) throws InvocationTargetException { boolean started = ModelerCore.startTxn(false, false, "Creating Salesforce model", //$NON-NLS-1$ new Object()); boolean succeeded = false; try { importManager.runFinish(monitor); succeeded = !monitor.isCanceled(); } catch (ModelBuildingException mbe) { mbe.printStackTrace(System.err); throw new InvocationTargetException(mbe); } catch (Throwable t) { throw new InvocationTargetException(t); } finally { if (started) { if (succeeded) { ModelerCore.commitTxn(); } else { ModelerCore.rollbackTxn(); } } } } }; try { ProgressMonitorDialog dlg = new ProgressMonitorDialog(getShell()); dlg.run(true, true, op); result = true; } catch (Throwable err) { if (err instanceof InvocationTargetException) { Throwable t = ((InvocationTargetException)err).getCause(); final IStatus iteStatus = new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, getString("importError.msg"), t); //$NON-NLS-1$ ErrorDialog.openError(this.getShell(), getString("importError.title"), getString("importError.msg"), iteStatus); //$NON-NLS-1$ //$NON-NLS-2$ Activator.getDefault().getLog().log(iteStatus); } else { final IStatus status = new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, getString("importError.msg"), err); //$NON-NLS-1$); ErrorDialog.openError(this.getShell(), getString("importError.title"), getString("importError.msg"), status); //$NON-NLS-1$ //$NON-NLS-2$ err.printStackTrace(System.err); Activator.getDefault().getLog().log(status); } } finally { dispose(); } return result; } @Override public boolean canFinish() { boolean result = super.canFinish(); result = importManager.canFinish(); return result; } }