| /** |
| * <copyright> |
| * |
| * Copyright (c) 2009-2010 Thales Corporate Services S.A.S. |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-v2.0 |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Thales Corporate Services S.A.S - initial API and implementation |
| * |
| * </copyright> |
| */ |
| |
| package org.eclipse.egf.core.test; |
| |
| import java.io.File; |
| import java.net.URL; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import junit.framework.Test; |
| import junit.framework.TestCase; |
| import junit.framework.TestSuite; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IProjectDescription; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IWorkspace; |
| import org.eclipse.core.resources.IWorkspaceDescription; |
| import org.eclipse.core.resources.IWorkspaceRoot; |
| import org.eclipse.core.resources.IncrementalProjectBuilder; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.resources.WorkspaceJob; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.FileLocator; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.core.runtime.jobs.Job; |
| import org.eclipse.egf.common.helper.ProjectHelper; |
| import org.eclipse.emf.common.util.UniqueEList; |
| import org.eclipse.ui.dialogs.IOverwriteQuery; |
| import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider; |
| import org.eclipse.ui.wizards.datatransfer.ImportOperation; |
| import org.osgi.framework.Bundle; |
| |
| /** |
| * @author Matthieu Helleboid |
| * |
| */ |
| public class WorkspaceInitializationTest extends TestCase { |
| |
| public static final Object INIT_JOB_FAMILY = new Object(); |
| |
| public List<String> _projectNames = new UniqueEList<String>(); |
| |
| public static Test suite() { |
| return new TestSuite(WorkspaceInitializationTest.class); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| |
| // Error |
| final Throwable[] error = new Throwable[] { null }; |
| |
| class Import extends ImportOperation { |
| |
| public Import(IPath containerPath, Object source, IImportStructureProvider provider, IOverwriteQuery overwriteImplementor, List<?> filesToImport) { |
| super(containerPath, source, provider, overwriteImplementor, filesToImport); |
| } |
| |
| public void process(IProgressMonitor monitor) { |
| execute(monitor); |
| } |
| |
| } |
| |
| // Prepare our init job |
| class InitJob extends WorkspaceJob implements IOverwriteQuery { |
| |
| public InitJob() { |
| super("WorkspaceInitializationTest"); //$NON-NLS-1$ |
| } |
| |
| public String queryOverwrite(String pathString) { |
| return IOverwriteQuery.YES; |
| } |
| |
| @Override |
| public boolean belongsTo(Object family) { |
| return family == INIT_JOB_FAMILY; |
| } |
| |
| @Override |
| public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { |
| |
| IWorkspace workspace = ResourcesPlugin.getWorkspace(); |
| IWorkspaceRoot workspaceRoot = workspace.getRoot(); |
| |
| // Clean previous workspace |
| for (IProject project : workspaceRoot.getProjects()) { |
| project.delete(true, true, monitor); |
| } |
| |
| try { |
| |
| // Initialize workspace |
| Bundle bundle = EGFCoreTestPlugin.getDefault().getBundle(); |
| URL resourcesURL = FileLocator.find(bundle, new Path("resources"), Collections.EMPTY_MAP); //$NON-NLS-1$ |
| URL resourcesFileURL = FileLocator.toFileURL(resourcesURL); |
| File resourcesFile = new File(resourcesFileURL.getPath()); |
| for (File file : resourcesFile.listFiles()) { |
| if (file.isDirectory() == false) { |
| continue; |
| } |
| if (new File(file, ".project").exists() == false) { //$NON-NLS-1$ |
| continue; |
| } |
| String projectName = file.getName(); |
| IProject project = workspaceRoot.getProject(projectName); |
| IProjectDescription description = workspace.newProjectDescription(projectName); |
| description.setLocationURI(null); |
| project.create(description, monitor); |
| project.open(monitor); |
| // import project from location copying files |
| // use default project location for this workspace |
| Import operation = new Import(project.getFullPath(), file, new FilteredFileSystemStructureProvider(new String[] { ".svn" }), this, Collections.singletonList(file)); |
| operation.setContext(null); |
| operation.setOverwriteResources(true); |
| operation.setCreateContainerStructure(false); |
| operation.process(monitor); |
| // Refresh |
| project.refreshLocal(IResource.DEPTH_INFINITE, monitor); |
| // Store |
| _projectNames.add(projectName); |
| } |
| |
| } catch (Throwable t) { |
| |
| error[0] = t; |
| |
| } |
| |
| return Status.OK_STATUS; |
| |
| } |
| |
| } |
| |
| // Turn off auto-build |
| IWorkspace workspace = ResourcesPlugin.getWorkspace(); |
| IWorkspaceDescription description = workspace.getDescription(); |
| if (description.isAutoBuilding()) { |
| description.setAutoBuilding(false); |
| workspace.setDescription(description); |
| } |
| |
| // Lock all the workspace and import resources |
| WorkspaceJob initJob = new InitJob(); |
| initJob.setRule(workspace.getRuleFactory().buildRule()); |
| initJob.setPriority(Job.LONG); |
| initJob.setUser(true); |
| initJob.setSystem(false); |
| initJob.schedule(); |
| |
| // Wait for init job completion |
| Job.getJobManager().join(INIT_JOB_FAMILY, new NullProgressMonitor()); |
| |
| // Error checking |
| assertNull(error[0]); |
| |
| // Build |
| workspace.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor()); |
| |
| // Wait for build completion |
| Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, new NullProgressMonitor()); |
| |
| } |
| |
| public void testProjectsExists() { |
| |
| for (String projectName : _projectNames) { |
| IProject project = ProjectHelper.getProject(projectName); |
| assertNotNull(project); |
| assertTrue(project.exists()); |
| assertTrue(project.isOpen()); |
| } |
| |
| } |
| |
| } |