package org.jetbrains.plugins.ruby.motion.run; import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.encoding.EncodingManager; import com.jetbrains.cidr.execution.Installer; import com.jetbrains.cidr.execution.debugger.backend.DebuggerDriver; import com.jetbrains.cidr.execution.deviceSupport.AMDevice; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; /** * @author Dennis.Ushakov */ class MotionInstaller implements Installer { private final DeviceProcessHandler myHandler; public MotionInstaller(DeviceProcessHandler handler) { myHandler = handler; } @NotNull @Override public GeneralCommandLine install() throws ExecutionException { final GeneralCommandLine result = new GeneralCommandLine(); result.setExePath(myHandler.getRemotePath()); result.setWorkDirectory(myHandler.getWorkingDirectory()); result.getEnvironment().putAll(myHandler.getEnvironment()); final AMDevice device = myHandler.getDevice(); try { device.lock(); device.connect(); Pair<Integer, String> pair = device.startDebugserver(); result.putUserData(DebuggerDriver.DEBUGSERVER_ID, pair.first); result.putUserData(DebuggerDriver.DEBUGSERVER_SOCKET, pair.second); } finally { device.disconnect(); } result.setCharset(EncodingManager.getInstance().getDefaultCharset()); return result; } @NotNull @Override public File getExecutableFile() { try { return new File(myHandler.getLocalPath()); } catch (ExecutionException e) { throw new RuntimeException(e); } } @Nullable @Override public File getAppWorkingDir() { String result = myHandler.getWorkingDirectory(); return StringUtil.isEmptyOrSpaces(result) ? null : new File(result); } }