Package com.dubture.composer.ui.wizard.project.template

Source Code of com.dubture.composer.ui.wizard.project.template.PackageProjectWizardSecondPage

package com.dubture.composer.ui.wizard.project.template;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.Observable;
import java.util.concurrent.CountDownLatch;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.window.IShellProvider;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.PlatformUI;

import com.dubture.composer.core.log.Logger;
import com.dubture.composer.ui.ComposerUIPlugin;
import com.dubture.composer.ui.job.CreateProjectJob;
import com.dubture.composer.ui.job.CreateProjectJob.JobListener;
import com.dubture.composer.ui.wizard.AbstractWizardFirstPage;
import com.dubture.composer.ui.wizard.AbstractWizardSecondPage;
import com.dubture.getcomposer.core.ComposerPackage;

/**
*
* @author Robert Gruendler <r.gruendler@gmail.com>
*
*/
@SuppressWarnings("restriction")
public class PackageProjectWizardSecondPage extends AbstractWizardSecondPage implements IShellProvider, PackageFilterChangedListener {

  private PackageFilterViewer filter;

  public PackageProjectWizardSecondPage(AbstractWizardFirstPage mainPage, String title) {
    super(mainPage, title);
    setPageComplete(false);
  }
 
 
  @Override
  public void setVisible(boolean visible) {
    super.setVisible(visible);
   
    if (filter.getSelectedPackage() == null || filter.getSelectedPackage().getSelectedVersion() == null) {
      setPageComplete(false);
    }
  }
 
  @Override
  public void createControl(Composite parent) {
    filter = new PackageFilterViewer();
    filter.createControl(parent);
    filter.addChangeListener(this);
    filter.setMinimumHeight(400);
    setControl(filter.getControl());
    setPageComplete(false);
    setHelpContext(filter.getControl());
  }

  @Override
  public void update(Observable o, Object arg) {

  }

  @Override
  protected String getPageTitle() {
    return "Select package";
  }

  @Override
  protected String getPageDescription() {
    return "Search for a package to be used as the startingpoint for your new Composer project.";
  }
 
  @Override
  protected void beforeFinish(IProgressMonitor monitor) throws Exception {

    PackageFilterItem filterItem = filter.getSelectedPackage();
    final CountDownLatch latch = new CountDownLatch(1);
   
    monitor.beginTask("Initializing composer project", 2);
    monitor.worked(1);
   
    File file = new File(firstPage.getLocationURI());
    IPath location = new Path(file.toString());
   
    // let the create-project command handle folder creation
    if (firstPage.isInLocalServer()) {
      location = location.removeLastSegments(1);
    }
   
    CreateProjectJob projectJob = new CreateProjectJob(location, firstPage.nameGroup.getName(), filterItem.getPackage().getName(), filterItem.getSelectedVersion());
    projectJob.setJobListener(new JobListener() {
      @Override
      public void jobStarted() {
        latch.countDown();
      }

      @Override
      public void jobFinished(String projectName) {
        latch.countDown();
        refreshProject(projectName);
      }

      @Override
      public void jobFailed() {
        latch.countDown();
      }
    });
   
    projectJob.schedule();
   
    // we need to wait until the first page has started the
    // create-project composer command and the command actually
    // wrote something to disk, otherwise the command will fail
    //
    // Note: The composer guys do not accept pull requests
    // to allow the create-project command be run on target paths
    // with files in it, so we have to use this workaround.
    try {
      latch.await();
    } catch (InterruptedException e) {
     
    }
   
    monitor.worked(1);
  }

  @Override
  protected void finishPage(IProgressMonitor monitor) throws Exception {
    try {
      PackageProjectWizardFirstPage page = (PackageProjectWizardFirstPage) firstPage;
      if (page.doesOverrideComposer()) {
        monitor.beginTask("Updating composer.json with new values", 1);
        ComposerPackage package1 = firstPage.getPackage();
        IFile file = getProject().getFile(new Path("composer.json"));
        if (file != null && file.exists()) {
          ByteArrayInputStream is = new ByteArrayInputStream(package1.toJson().getBytes());
          file.setContents(is, IResource.FORCE, monitor);
        }
      }
    } catch (Exception e) {
      Logger.logException(e);
    } finally {
      monitor.worked(1);
    }
  }
 
 
  @Override
  public void filterChanged(PackageFilterItem item) {
   
    if (item != null && item.getSelectedVersion() != null) {
      setPageComplete(true);
      return;
    }
   
    setPageComplete(false);
  }


  @Override
  protected void setHelpContext(Control control) {
    PlatformUI.getWorkbench().getHelpSystem().setHelp(control, ComposerUIPlugin.PLUGIN_ID + "." + "help_context_wizard_template_secondpage");
 
}
TOP

Related Classes of com.dubture.composer.ui.wizard.project.template.PackageProjectWizardSecondPage

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.