Package org.springframework.ide.eclipse.wizard.template

Source Code of org.springframework.ide.eclipse.wizard.template.TemplateDataUIJob

/*******************************************************************************
*  Copyright (c) 2013 VMware, Inc.
*  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:
*      VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.wizard.template;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Shell;
import org.springframework.ide.eclipse.wizard.WizardPlugin;
import org.springframework.ide.eclipse.wizard.template.infrastructure.ITemplateProjectData;
import org.springframework.ide.eclipse.wizard.template.infrastructure.RuntimeTemplateProjectData;
import org.springframework.ide.eclipse.wizard.template.infrastructure.Template;
import org.springsource.ide.eclipse.commons.content.core.ContentItem;

/**
* Fetches the contents of a template, and set the data in the given template.
* If the data is already local, it will just set it in the template. Otherwise
* it will download the template data. Even if the data is already local, if
* there is a newer version of the template, then a download will be performed.
* Special exceptions like Simple Projects that do not require download as they
* are bundled in the wizard plugin are also handled. Regardless of whether
* template data needs to be downloaded or unzipped, any time a new template is
* created, this method should be invoked at least once as to add the latest
* template data to the template.
* @throws CoreException if failure occurred while either downloading or
* unzipping the template data
*/
public class TemplateDataUIJob implements IRunnableWithProgress {

  private final Template template;

  private final Shell shell;

  public TemplateDataUIJob(Template template, Shell shell) {
    this.template = template;
    this.shell = shell;
  }

  public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
    ContentItem selectedItem = template.getItem();
    if (!selectedItem.isLocal() && selectedItem.getRemoteDescriptor().getUrl() == null) {
      String message = NLS.bind("In the descriptor file for ''{0}'', the URL to the project ZIP is missing.",
          selectedItem.getName());
      throw new InvocationTargetException(new CoreException(new Status(IStatus.ERROR, WizardPlugin.PLUGIN_ID,
          message)));
    }

    try {
      monitor.beginTask("Download template " + template.getName(), 100);
      ITemplateProjectData data;
      if (template.getItem().isRuntimeDefined()) {
        data = new RuntimeTemplateProjectData(template.getItem().getRuntimeProject());
      }
      else {
        data = TemplateUtils.importTemplate(template, shell, new SubProgressMonitor(monitor, 1));
      }
      template.setTemplateData(data);
      if (data == null) {
        throw new InvocationTargetException(new CoreException(new Status(IStatus.ERROR, WizardPlugin.PLUGIN_ID,
            NLS.bind("Template data missing. Please check the template " + template.getName()
                + " to verify it has content.", null))));
      }
    }
    catch (CoreException e) {
      throw new InvocationTargetException(e);
    }
    catch (OperationCanceledException e) {
      throw new InterruptedException();
    }
    finally {
      monitor.done();
    }

  }
}
TOP

Related Classes of org.springframework.ide.eclipse.wizard.template.TemplateDataUIJob

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.