/*******************************************************************************
* Copyright (c) 2005-2012 eBay Inc.
* 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
*
*******************************************************************************/
package org.eclipse.vjet.testframework.artifactmanager.project;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.eclipse.vjet.testframework.artifact.IArtifactDef;
import org.eclipse.vjet.testframework.artifact.IArtifactManager;
import org.eclipse.vjet.testframework.sandbox.ISandbox;
import org.eclipse.vjet.testframework.util.TestUtils;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
/**
* @author ddodd
*
* This artifact manager is used to import a project based a project that has been
* zipped up and is embedded in the test project.
*/
public class ZipProjectArtifactManager implements IArtifactManager {
String m_projectName;
ISandbox m_sandbox;
IArtifactDef m_artifactDef;
public static final String PROJECT_NAME_ATTRIBUTE = "projectName";
public static final String ARTIFACT_MANAGER_ID = "org.eclipse.vjet.testframework.artifact.project.zip";
public void init(IArtifactDef artifactDef, ISandbox sandBox) {
// Get the name of the project
Map<String, String> artifactAttributes = artifactDef.getArtifactAttributes();
String projectName = artifactAttributes.get(PROJECT_NAME_ATTRIBUTE);
if (projectName == null) {
throw new RuntimeException("projectName attribute not found in project artifact element");
}
m_artifactDef = artifactDef;
m_projectName = projectName;
m_sandbox = sandBox;
}
public String getArtifactType() {
return ARTIFACT_MANAGER_ID;
}
public boolean setUp() {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IProject project = workspace.getRoot().getProject(m_projectName);
if (project.exists()) {
return false;
}
File projectArtifactFile = new File(m_sandbox.getSandBoxDir(),
m_projectName + ".zip");
File projectDir = new File(m_sandbox.getSandBoxDir(), m_projectName);
if (projectArtifactFile.exists() == false) {
throw new RuntimeException(
"Project artifact compressed file not found:"
+ projectArtifactFile.getAbsoluteFile().toString());
}
try {
TestUtils.unzip(projectArtifactFile, projectDir);
ProjectUtil.importProject(m_projectName, projectDir, ResourcesPlugin
.getWorkspace(), null);
return true;
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e);
}
}
public void tearDown() {
File projectDir = new File(m_sandbox.getSandBoxDir(), m_projectName);
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(m_projectName);
try {
project.close(null);
project.delete(true, null);
} catch (CoreException e) {
e.printStackTrace();
// Who cares...
}
try {
FileUtils.deleteDirectory(projectDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}