package org.jboss.tools.jsf.test;
import java.io.File;
import java.io.FileFilter;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import org.eclipse.core.internal.resources.Workspace;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.internal.Workbench;
import org.jboss.tools.common.model.XModelFactory;
import org.jboss.tools.common.util.FileUtil;
import org.jboss.tools.jsf.ui.operation.JSFProjectAdoptOperation;
import org.jboss.tools.jsf.web.helpers.context.ImportProjectWizardContext;
import org.jboss.tools.jst.web.context.*;
import org.jboss.tools.test.util.JUnitUtils;
import org.jboss.tools.test.util.ResourcesUtils;
import org.osgi.framework.Bundle;
import junit.framework.TestCase;
public class JSFImportTest extends TestCase {
File temp = null;
File projectLocation = null;
public void setUp() throws Exception {
init("org.jboss.tools.jsf.test", "/projects", "JSFKickStartOldFormat");
}
/**
* FIXME test is disabled because it hangs build for an eternity
* http://jira.jboss.org/jira/browse/JBIDE-2441
*/
public void testImportWithoutLinks() {
if(projectLocation == null) return;
ImportWebDirProjectContext context = new ImportProjectWizardContext(XModelFactory.getDefaultInstance().getRoot());
File webxml = new File(projectLocation, "WebContent/WEB-INF/web.xml");
context.setWebXmlLocation(webxml.getAbsolutePath());
context.setProjectName(projectLocation.getName());
context.setApplicationName(projectLocation.getName());
context.setLinkingToProjectOutsideWorkspace(false);
final JSFProjectAdoptOperation operation = new JSFProjectAdoptOperation(context);
try {
WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
@Override
protected void execute(IProgressMonitor monitor)
throws CoreException, InvocationTargetException,
InterruptedException {
operation.run(monitor);
}
};
op.run(null);
} catch (Exception ex) {
JUnitUtils.fail("Error in import operation", ex);
}
IProject p = ResourcesPlugin.getWorkspace().getRoot().getProject("JSFKickStartOldFormat");
assertTrue("Project was not loaded", p != null);
File f = new File(p.getLocation().toFile(), ".project");
assertTrue("File .project is not found at project location", f.exists());
assertTrue("Eclipse project is not located at imported project location",
p.getLocation().toFile().equals(projectLocation));
try {
boolean save = ResourcesUtils.setBuildAutomatically(false);
p.delete(false, true, new NullProgressMonitor());
ResourcesUtils.setBuildAutomatically(save);
} catch (CoreException e) {
JUnitUtils.fail("Error in removing project", e);
}
}
private void init(String bundleName, String projectPath, String name) throws Exception {
Bundle bundle = Platform.getBundle(bundleName);
URL url = null;
try {
url = FileLocator.resolve(bundle.getEntry(projectPath));
} catch (Exception e) {
throw new Exception("Cannot find project " + name + " in " + bundleName);
}
String location = url.getFile();
File original = new File(location, name);
temp = new File(original.getParent(), "ws");
temp.mkdirs();
projectLocation = new File(temp, original.getName());
projectLocation.mkdirs();
FileFilter filter = new FileFilter() {
public boolean accept(File pathname) {
String n = pathname.getName();
if(n.startsWith(".")) return false;
return true;
}
};
FileUtil.copyDir(original, projectLocation, true, true, true, filter);
}
protected void tearDown() throws Exception {
clean();
}
private void clean() {
if(temp !=null && temp.isDirectory()) {
FileUtil.clear(temp);
temp.delete();
temp = null;
}
}
}