1 /******************************************************************************* 2 * Copyright (c) 2014-2016 Red Hat Inc., and others 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * Mickael Istria (Red Hat Inc.) - initial API and implementation 13 ******************************************************************************/ 14 package org.eclipse.ui.internal.wizards.datatransfer; 15 16 import java.io.File; 17 import java.util.HashSet; 18 import java.util.LinkedHashSet; 19 import java.util.List; 20 import java.util.Map; 21 import java.util.Set; 22 23 import org.eclipse.core.resources.IContainer; 24 import org.eclipse.core.resources.IFolder; 25 import org.eclipse.core.resources.IProject; 26 import org.eclipse.core.resources.IProjectDescription; 27 import org.eclipse.core.resources.IResource; 28 import org.eclipse.core.runtime.CoreException; 29 import org.eclipse.core.runtime.IPath; 30 import org.eclipse.core.runtime.IProgressMonitor; 31 import org.eclipse.core.runtime.Path; 32 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; 33 import org.eclipse.ui.wizards.datatransfer.ProjectConfigurator; 34 35 /** 36 * A {@link ProjectConfigurator} that detects Eclipse projects (folder with 37 * .project) 38 * 39 * @since 3.12 40 * 41 */ 42 public class EclipseProjectConfigurator implements ProjectConfigurator { 43 44 @Override findConfigurableLocations(File root, IProgressMonitor monitor)45 public Set<File> findConfigurableLocations(File root, IProgressMonitor monitor) { 46 Set<File> projectFiles = new LinkedHashSet<>(); 47 Set<String> visitedDirectories = new HashSet<>(); 48 WizardProjectsImportPage.collectProjectFilesFromDirectory(projectFiles, root, visitedDirectories, true, 49 monitor); 50 Set<File> res = new LinkedHashSet<>(); 51 for (File projectFile : projectFiles) { 52 res.add(projectFile.getParentFile()); 53 } 54 return res; 55 } 56 57 @Override shouldBeAnEclipseProject(IContainer container, IProgressMonitor monitor)58 public boolean shouldBeAnEclipseProject(IContainer container, IProgressMonitor monitor) { 59 return container.getFile(new Path(IProjectDescription.DESCRIPTION_FILE_NAME)).exists(); 60 } 61 62 @Override getFoldersToIgnore(IProject project, IProgressMonitor monitor)63 public Set<IFolder> getFoldersToIgnore(IProject project, IProgressMonitor monitor) { 64 return null; 65 } 66 67 @Override canConfigure(IProject project, Set<IPath> ignoredPaths, IProgressMonitor monitor)68 public boolean canConfigure(IProject project, Set<IPath> ignoredPaths, IProgressMonitor monitor) { 69 return true; 70 } 71 72 @Override removeDirtyDirectories(Map<File, List<ProjectConfigurator>> proposals)73 public void removeDirtyDirectories(Map<File, List<ProjectConfigurator>> proposals) { 74 // nothing to do: we cannot infer that a directory is dirty from 75 // .project 76 } 77 78 @Override configure(IProject project, Set<IPath> excludedDirectories, IProgressMonitor monitor)79 public void configure(IProject project, Set<IPath> excludedDirectories, IProgressMonitor monitor) { 80 try { 81 project.refreshLocal(IResource.DEPTH_INFINITE, monitor); 82 } catch (CoreException ex) { 83 IDEWorkbenchPlugin.log(ex.getMessage(), ex); 84 } 85 } 86 87 } 88