package com.robotoworks.mechanoid.ui; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; import java.net.URL; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jdt.core.IJavaProject; import org.osgi.framework.Bundle; import com.google.common.io.Files; import com.google.common.io.InputSupplier; public class MechanoidLibsInstaller { private static final String MECHANOID_LIB_PATH = "runtime/"; //$NON-NLS-1$ private static final String MECHANOID_LIB_FILE = "mechanoid.jar"; //$NON-NLS-1$ private static final String MECHANOID_LIB_SRC_FILE = "mechanoid-sources.jar"; //$NON-NLS-1$ private static final String MECHANOID_LIB_PROPS_FILE = "mechanoid.jar.properties"; //$NON-NLS-1$ private static final String ANDROID_LIBS_DIR_NAME = "libs"; //$NON-NLS-1$ private static final String ANDROID_LIBS_PLUGIN_RESOURCE_BUNDLE = "com.robotoworks.mechanoid"; //$NON-NLS-1$ private String[] LIB_FILE_BUNDLE_PATHS = { MECHANOID_LIB_FILE, MECHANOID_LIB_SRC_FILE, MECHANOID_LIB_PROPS_FILE }; public void install(IJavaProject javaProject, IProgressMonitor progressMonitor) throws IOException, URISyntaxException { try { SubMonitor progress = SubMonitor.convert(progressMonitor, 2); installLibs(javaProject, progress.newChild(1)); } catch (Exception e) { MechanoidUiPlugin.getPlugin().getLog().log(new Status(Status.ERROR, MechanoidUiPlugin.PLUGIN_ID, Status.OK, Messages.MechanoidLibsInstaller_Message_Failed_To_Add_Libs, e)); } } protected void installLibs(IJavaProject javaProject, IProgressMonitor monitor) throws URISyntaxException, IOException, CoreException { Bundle bundle = Platform.getBundle(ANDROID_LIBS_PLUGIN_RESOURCE_BUNDLE); IPath location = javaProject.getProject().getLocation(); File libsFolder = new File(location.toOSString(), ANDROID_LIBS_DIR_NAME); if(!libsFolder.exists()) { libsFolder.mkdirs(); } for(String libFileName : LIB_FILE_BUNDLE_PATHS) { final URL url = FileLocator.resolve(bundle.getEntry(MECHANOID_LIB_PATH + libFileName)); File targetFile = new File(libsFolder, libFileName); if(targetFile.exists()) { targetFile.delete(); } Files.copy(new InputSupplier<InputStream>() { @Override public InputStream getInput() throws IOException { return url.openStream(); } }, targetFile); } javaProject.getProject().refreshLocal(IResource.DEPTH_INFINITE, monitor); } }