Package org.playframework.playclipse.wizards

Source Code of org.playframework.playclipse.wizards.PlayWizard

package org.playframework.playclipse.wizards;

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.core.runtime.*;
import org.eclipse.jface.operation.*;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import java.io.*;
import org.eclipse.ui.*;
import org.eclipse.ui.ide.IDE;

/**
* This is a sample new wizard. Its role is to create a new file
* resource in the provided container. If the container resource
* (a folder or a project) is selected in the workspace
* when the wizard is opened, it will accept it as the target
* container. The wizard creates one file with the extension
* "java". If a sample multi-page editor (also available
* as a template) is registered for the same extension, it will
* be able to open it.
*/

public abstract class PlayWizard extends Wizard implements INewWizard {
  protected PlayWizardPage page;
  protected ISelection selection;

  /**
   * Constructor for ControllerWizard.
   */
  public PlayWizard() {
    super();
    setNeedsProgressMonitor(true);
  }
 
  /**
   * Adding the page to the wizard.
   */

  @Override
  public abstract void addPages();

  /**
   * This method is called when 'Finish' button is pressed in
   * the wizard. We will create an operation and run it
   * using wizard as execution context.
   */
  @Override
  public boolean performFinish() {
    final Map<String, String> parameters = page.getParameters();
    IRunnableWithProgress op = new IRunnableWithProgress() {
      @Override
      public void run(IProgressMonitor monitor) throws InvocationTargetException {
        try {
          doFinish(parameters, monitor);
        } catch (CoreException e) {
          throw new InvocationTargetException(e);
        } finally {
          monitor.done();
        }
      }
    };
    try {
      getContainer().run(true, false, op);
    } catch (InterruptedException e) {
      return false;
    } catch (InvocationTargetException e) {
      Throwable realException = e.getTargetException();
      realException.printStackTrace();
      MessageDialog.openError(getShell(), "Error", realException.getMessage());
      return false;
    }
    return true;
  }
 
  /**
   * The worker method. It will find the container, create the
   * file if missing or just replace its contents, and open
   * the editor on the newly created file.
   */

  private void doFinish(Map<String, String> parameters, IProgressMonitor monitor)
    throws CoreException {
    String name = parameters.get("name");
    String containerName = parameters.get("container");
    // create a sample file
    monitor.beginTask("Creating " + name, 2);
    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
    IResource resource = root.findMember(new Path(containerName));
    if (!resource.exists() || !(resource instanceof IContainer)) {
      throwCoreException("Container \"" + containerName + "\" does not exist.");
    }
    IContainer container = (IContainer) resource;
    final IFile file = getTargetFile(container, name);
    try {
      InputStream stream = new ByteArrayInputStream(getContent(parameters).getBytes());
      if (file.exists()) {
        file.setContents(stream, true, true, monitor);
      } else {
        file.create(stream, true, monitor);
      }
      stream.close();
    } catch (IOException e) {
    }
    monitor.worked(1);
    monitor.setTaskName("Opening file for editing...");
    getShell().getDisplay().asyncExec(new Runnable() {
      @Override
      public void run() {
        IWorkbenchPage page =
          PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        try {
          IDE.openEditor(page, file, true);
        } catch (PartInitException e) {
        }
      }
    });
    monitor.worked(1);
  }
 
  /**
   * We will initialize file contents with a sample text.
   * @param controllerName
   */

  protected abstract String getContent(Map<String, String> parameters);

  protected abstract IFile getTargetFile(IContainer container, String name);

  private void throwCoreException(String message) throws CoreException {
    IStatus status =
      new Status(IStatus.ERROR, "org.playframework.playclipse", IStatus.OK, message, null);
    throw new CoreException(status);
  }

  /**
   * We will accept the selection in the workbench to see if
   * we can initialize from it.
   * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection)
   */
  @Override
  public void init(IWorkbench workbench, IStructuredSelection selection) {
    this.selection = selection;
  }

}
TOP

Related Classes of org.playframework.playclipse.wizards.PlayWizard

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.