blob: fbf2b63c80daa278443490b937b33396f3e4a480 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 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
*
*******************************************************************************/
package org.eclipse.dltk.utils;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Enumeration;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.Bundle;
public class DeployHelper {
public static void copy(InputStream input, OutputStream output)
throws IOException {
int ch = -1;
while ((ch = input.read()) != -1) {
output.write(ch);
}
}
public static void copy(InputStream input, File file) throws IOException {
OutputStream output = null;
try {
output = new BufferedOutputStream(new FileOutputStream(file));
copy(input, output);
} finally {
if (output != null) {
output.close();
}
}
}
public static void copy(URL url, File file) throws IOException {
InputStream input = null;
try {
input = url.openStream();
copy(input, file);
} finally {
if (input != null) {
input.close();
}
}
}
public static IPath deploy(Bundle bundle, String bundlePath, IPath diskPath)
throws IOException {
// Check if directory
final Enumeration paths = bundle.getEntryPaths(bundlePath);
final IPath result = diskPath.append(bundlePath);
if (paths != null) {
// result is a directory
result.toFile().mkdirs();
while (paths.hasMoreElements()) {
final String path = (String) paths.nextElement();
if (path.endsWith("/")) {
deploy(bundle, path, diskPath);
} else {
copy(bundle.getEntry(path), diskPath.append(path).toFile());
}
}
return result;
} else {
final URL url = bundle.getEntry(bundlePath);
if (url != null) {
final File file = result.toFile();
if (!file.exists()) {
file.getParentFile().mkdirs();
}
copy(url, file);
return result;
}
}
return null;
}
public static IPath deploy(Plugin plugin, String bundlePath)
throws IOException {
return deploy(plugin.getBundle(), bundlePath, plugin.getStateLocation());
}
}