blob: e30f41bb4c226a58372c0f4eb26d742069978067 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008-2018 Sonatype, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Sonatype, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.m2e.scm.internal.wizards;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.core.runtime.IAdapterManager;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IImportWizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.apache.maven.model.Scm;
import org.eclipse.m2e.core.internal.IMavenConstants;
import org.eclipse.m2e.core.ui.internal.actions.SelectionUtil;
import org.eclipse.m2e.core.ui.internal.wizards.AbstractMavenProjectWizard;
import org.eclipse.m2e.core.ui.internal.wizards.MavenProjectWizardLocationPage;
import org.eclipse.m2e.scm.MavenProjectScmInfo;
import org.eclipse.m2e.scm.ScmUrl;
import org.eclipse.m2e.scm.internal.Messages;
/**
* Maven checkout wizard
*
* @author Eugene Kuleshov
*/
public class MavenCheckoutWizard extends AbstractMavenProjectWizard implements IImportWizard, INewWizard {
private ScmUrl[] urls;
private String parentUrl;
private MavenCheckoutLocationPage scheckoutPage;
private MavenProjectWizardLocationPage locationPage;
public MavenCheckoutWizard() {
this(null);
setNeedsProgressMonitor(true);
}
public MavenCheckoutWizard(ScmUrl[] urls) {
setUrls(urls);
setNeedsProgressMonitor(true);
setWindowTitle(Messages.MavenCheckoutWizard_title);
}
public void init(IWorkbench workbench, IStructuredSelection selection) {
super.init(workbench, selection);
this.selection = selection;
ArrayList<ScmUrl> urls = new ArrayList<ScmUrl>();
IAdapterManager adapterManager = Platform.getAdapterManager();
for(Iterator<?> it = selection.iterator(); it.hasNext();) {
ScmUrl url = adapterManager.getAdapter(it.next(), ScmUrl.class);
if(url != null) {
urls.add(url);
}
}
setUrls(urls.toArray(new ScmUrl[urls.size()]));
}
private void setUrls(ScmUrl[] urls) {
if(urls != null && urls.length > 0) {
this.urls = urls;
this.parentUrl = getParentUrl(urls);
}
}
private String getParentUrl(ScmUrl[] urls) {
if(urls.length == 1) {
return urls[0].getUrl();
}
String parent = urls[0].getParentUrl();
for(int i = 1; parent != null && i < urls.length; i++ ) {
String url = urls[i].getParentUrl();
if(!parent.equals(url)) {
parent = null;
}
}
return parent;
}
public void addPages() {
scheckoutPage = new MavenCheckoutLocationPage(importConfiguration);
scheckoutPage.setUrls(urls);
scheckoutPage.setParent(parentUrl);
locationPage = new MavenProjectWizardLocationPage(importConfiguration, //
Messages.MavenCheckoutWizard_location1, Messages.MavenCheckoutWizard_location2, workingSets);
locationPage.setLocationPath(SelectionUtil.getSelectedLocation(selection));
addPage(scheckoutPage);
addPage(locationPage);
}
// /** Adds the listeners after the page controls are created. */
// public void createPageControls(Composite pageContainer) {
// super.createPageControls(pageContainer);
//
// locationPage.addListener(new SelectionAdapter() {
// public void widgetSelected(SelectionEvent e) {
// projectsPage.setScms(locationPage.getScms(new NullProgressMonitor()));
// }
// });
//
// projectsPage.setScms(locationPage.getScms(new NullProgressMonitor()));
// }
public boolean canFinish() {
if(scheckoutPage.isCheckoutAllProjects() && scheckoutPage.isPageComplete()) {
return true;
}
return super.canFinish();
}
public boolean performFinish() {
if(!canFinish()) {
return false;
}
final boolean checkoutAllProjects = scheckoutPage.isCheckoutAllProjects();
Scm[] scms = scheckoutPage.getScms();
final Collection<MavenProjectScmInfo> mavenProjects = new ArrayList<MavenProjectScmInfo>();
for(int i = 0; i < scms.length; i++ ) {
String url = scms[i].getConnection();
String revision = scms[i].getTag();
if(url.endsWith("/")) { //$NON-NLS-1$
url = url.substring(0, url.length() - 1);
}
int n = url.lastIndexOf("/"); //$NON-NLS-1$
String label = (n == -1 ? url : url.substring(n)) + "/" + IMavenConstants.POM_FILE_NAME; //$NON-NLS-1$
MavenProjectScmInfo projectInfo = new MavenProjectScmInfo(label, null, //
null, revision, url, url);
mavenProjects.add(projectInfo);
}
MavenProjectCheckoutJob job = new MavenProjectCheckoutJob(importConfiguration, checkoutAllProjects, workingSets) {
protected Collection<MavenProjectScmInfo> getProjects(IProgressMonitor monitor) {
return mavenProjects;
}
};
if(!locationPage.isInWorkspace()) {
job.setLocation(locationPage.getLocationPath().toFile());
}
job.schedule();
return true;
}
}