Package org.springframework.ide.eclipse.webflow.ui.wizards

Source Code of org.springframework.ide.eclipse.webflow.ui.wizards.NewWebflowConfigWizard

/*******************************************************************************
* Copyright (c) 2007, 2010 Spring IDE Developers
* 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:
*     Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.webflow.ui.wizards;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
import org.springframework.ide.eclipse.beans.ui.BeansUIImages;
import org.springframework.ide.eclipse.beans.ui.BeansUIPlugin;
import org.springframework.ide.eclipse.core.SpringCore;
import org.springframework.ide.eclipse.core.SpringCoreUtils;
import org.springframework.ide.eclipse.ui.SpringUIUtils;
import org.springframework.ide.eclipse.webflow.core.internal.model.WebflowConfig;
import org.springframework.ide.eclipse.webflow.core.internal.model.WebflowProject;
import org.springframework.ide.eclipse.webflow.core.model.IWebflowConfig;
import org.springframework.ide.eclipse.webflow.core.model.IWebflowProject;
import org.springframework.ide.eclipse.webflow.ui.Activator;
import org.springframework.util.StringUtils;

/**
* @author Christian Dupuis
* @since 2.0
*/
public class NewWebflowConfigWizard extends Wizard implements INewWizard {

  private NewWebflowConfigFilePage mainPage;

  private LinkToBeansConfigWizardPage linkPage;

  private IStructuredSelection selection;

  private IWebflowConfig newConfig;

  public NewWebflowConfigWizard() {
    setDialogSettings(Activator.getDefault().getDialogSettings());
  }

  /**
   * Returns the newly created beans config.
   * @return the created beans config, or <code>null</code> if config not created
   */
  public IWebflowConfig getNewConfig() {
    return newConfig;
  }

  public void init(IWorkbench workbench, IStructuredSelection selection) {
    this.selection = selection;
    setNeedsProgressMonitor(true);
    setWindowTitle("Create a new Spring Web Flow Definition file");
    setDefaultPageImageDescriptor(BeansUIImages.DESC_WIZ_CONFIG);
  }

  @Override
  public void addPages() {
    super.addPages();
    mainPage = new NewWebflowConfigFilePage("webflowNewConfigPage", selection);
    linkPage = new LinkToBeansConfigWizardPage("webflowLinkConfigPage");
    // mainPage.setTitle(BeansWizardsMessages.NewConfig_title);
    // mainPage.setDescription(BeansWizardsMessages.NewConfig_description);
    addPage(mainPage);
    addPage(linkPage);
  }

  @Override
  public boolean performFinish() {
    createNewConfig();
    if (newConfig == null) {
      return false;
    }

    BasicNewResourceWizard.selectAndReveal(newConfig.getResource(), BeansUIPlugin.getActiveWorkbenchWindow());
    SpringUIUtils.openInEditor(newConfig.getResource(), -1);
    return true;
  }

  private void createNewConfig() {

    // append file extension
    if (!StringUtils.hasText(mainPage.getFileExtension())) {
      mainPage.setFileExtension("xml");
    }
   
    // create the new Spring project operation
    final IFile file = mainPage.createNewFile();
    newConfig = new WebflowConfig(getProject(file));
    newConfig.setResource(file);
    String name = linkPage.getName();
    if (name != null && !"".equals(name)) {
      newConfig.setName(name);
    }
    newConfig.setBeansConfigs(linkPage.getBeansConfigs());

    IWebflowProject wfp = getProject(file);
    List<IWebflowConfig> configs = wfp.getConfigs();
    configs.add(newConfig);

    wfp.setConfigs(configs);
  }

  private IWebflowProject getProject(final IFile file) {
    if (!SpringCoreUtils.isSpringProject(file)) {
      WorkspaceModifyOperation oper = new WorkspaceModifyOperation() {
        @Override
        protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException,
            InterruptedException {
          SpringCoreUtils.addProjectNature(file.getProject(), SpringCore.NATURE_ID, monitor);
        }
      };
      try {
        getContainer().run(true, true, oper);
      }
      catch (InvocationTargetException e) {
        SpringCore.log(e);
      }
      catch (InterruptedException e) {
        SpringCore.log(e);
      }
    }

    IWebflowProject webflowProject = org.springframework.ide.eclipse.webflow.core.Activator.getModel().getProject(
        file.getProject());

    if (webflowProject != null) {
      return webflowProject;
    }
    return new WebflowProject(file.getProject(), org.springframework.ide.eclipse.webflow.core.Activator.getModel());
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.webflow.ui.wizards.NewWebflowConfigWizard

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.