/**
* Copyright (c) 2015 Codetrails GmbH. 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: Simon Laffoy - initial API and implementation.
*/
package org.eclipse.recommenders.testing.rcp.completion.rules;
import java.util.List;
import org.apache.commons.lang3.RandomStringUtils;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.junit.rules.ExternalResource;
import com.google.common.collect.Lists;
/**
* <p>Example of usage:</p>
* <pre>
*
* public static class UsingTemporaryWorkspace {
*
* @ClassRule
* public static TemporaryWorkspace WORKSPACE = new TemporaryWorkspace();
*
* @Test
* public void test() throws Exception {
* IRecommendersCompletionContext context = WORKSPACE.createProject().createFile(code).triggerContentAssist();
* // ...
* }
* }
* </pre>
*/
public class TemporaryWorkspace extends ExternalResource {
private List<TemporaryProject> tempProjects;
private IWorkspace workspace;
public TemporaryWorkspace() {
}
public TemporaryProject createProject() {
TemporaryProject project = new TemporaryProject(this, getNewRandomName());
tempProjects.add(project);
return project;
}
IWorkspace getWorkspace() {
return workspace;
}
private String getNewRandomName() {
String name = RandomStringUtils.randomAlphanumeric(16);
while (isNameAlreadyUsed(name)) {
name = RandomStringUtils.randomAlphanumeric(16);
}
return name;
}
private boolean isNameAlreadyUsed(String name) {
for (TemporaryProject tempProject : tempProjects) {
if (tempProject.getName().equals(name)) {
return true;
}
}
return false;
}
@Override
protected void before() throws Throwable {
this.workspace = ResourcesPlugin.getWorkspace();
this.tempProjects = Lists.newArrayList();
}
@Override
protected void after() {
IProject[] projects = workspace.getRoot().getProjects();
for (IProject project : projects) {
try {
project.delete(true, null);
} catch (CoreException e) {
e.printStackTrace();
}
}
this.workspace = null;
}
}