blob: 5e9d40c32840bf1f358d8ec68a06fc435a14499c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2015 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.runtime;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleContext;
public class RuntimeTestsPlugin extends Plugin {
public static final String PI_RUNTIME_TESTS = "org.eclipse.core.tests.runtime"; //$NON-NLS-1$
public static final String TEST_FILES_ROOT = "Plugin_Testing/";
private static RuntimeTestsPlugin plugin;
private BundleContext bundleContext;
public RuntimeTestsPlugin() {
plugin = this;
}
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
this.bundleContext = context;
}
@Override
public void stop(BundleContext context) throws Exception {
context = null;
}
public static BundleContext getContext() {
return plugin != null ? plugin.bundleContext : null;
}
public static Plugin getPlugin() {
return plugin;
}
public static boolean delete(File file) {
if (!file.exists())
return true;
if (file.isDirectory()) {
File[] children = file.listFiles();
if(children == null) {
children = new File[0];
}
for (File element : children)
delete(element);
}
return file.delete();
}
public static String getUniqueString() {
return System.currentTimeMillis() + "-" + Math.random();
}
/*
* Copied (kinda) from AbstractProvisioningTest.
*/
public static File getTempFolder() {
String name = getUniqueString();
String tempDir = System.getProperty("java.io.tmpdir");
File testFolder = new File(tempDir, name);
if (testFolder.exists())
delete(testFolder);
testFolder.mkdirs();
return testFolder;
}
/*
* Look up and return a file handle to the given entry in the bundle.
*
* Code copied from AbstractProvisioningTest in the p2 tests.
*/
public static File getTestData(String entry) {
if (entry == null)
return null;
URL base = RuntimeTestsPlugin.getContext().getBundle().getEntry(entry);
if (base == null)
return null;
try {
String osPath = new Path(FileLocator.toFileURL(base).getPath()).toOSString();
File result = new File(osPath);
return result.getCanonicalPath().equals(result.getPath()) ? result : null;
} catch (IOException e) {
return null;
}
}
/*
* Copied from AbstractProvisioningTest.
*/
public static void copy(File source, File target) throws IOException {
copy(source, target, null);
}
/*
* Copy
* - if we have a file, then copy the file
* - if we have a directory then merge
*
* Copied from AbstractProvisioningTest.
*/
public static void copy(File source, File target, FileFilter filter) throws IOException {
if (!source.exists())
return;
if (source.isDirectory()) {
if (target.exists() && target.isFile())
target.delete();
if (!target.exists())
target.mkdirs();
File[] children = source.listFiles(filter);
if(children == null) {
throw new IOException("Content from directory '" + source.getAbsolutePath() + "' can not be listed."); //$NON-NLS-1$ //$NON-NLS-2$
}
for (File element : children)
copy(element, new File(target, element.getName()));
return;
}
InputStream input = null;
OutputStream output = null;
try {
input = new BufferedInputStream(new FileInputStream(source));
output = new BufferedOutputStream(new FileOutputStream(target));
byte[] buffer = new byte[8192];
int bytesRead = 0;
while ((bytesRead = input.read(buffer)) != -1)
output.write(buffer, 0, bytesRead);
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
System.err.println("Exception while trying to close input stream on: " + source.getAbsolutePath());
e.printStackTrace();
}
}
if (output != null) {
try {
output.close();
} catch (IOException e) {
System.err.println("Exception while trying to close output stream on: " + target.getAbsolutePath());
e.printStackTrace();
}
}
}
}
}