package org.zend.php.zendserver.deployment.ui.actions;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
import org.zend.sdklib.internal.target.ZendTargetDetectMain;
import swt.elevate.ElevatedProgram;
import swt.elevate.ElevatedProgramFactory;
/**
* Run ZendSDK zetect target command line
*/
public class ZendDetectTargetCmdLine {
private String getJavaPath() {
String javaExecName = Platform.OS_WIN32.equals(Platform.getOS()) ? "javaw.exe" : "java"; //$NON-NLS-1$ //$NON-NLS-2$
File java = new File(System.getProperty("java.home") + "/bin/" + javaExecName); //$NON-NLS-1$ //$NON-NLS-2$
return java.getAbsolutePath();
}
private String getZendCommandArgs(String targetId, String key) throws IOException {
StringBuilder command = new StringBuilder();
Bundle zendSdk = FrameworkUtil.getBundle(ZendTargetDetectMain.class);
String zendSdkPath = getZendSdkClassPath(zendSdk);
if (Platform.OS_WIN32.equals(Platform.getOS())) {
String arch = Platform.getOSArch();
command.append(" -Djava.library.path="); //$NON-NLS-1$
command.append('"').append(new File(zendSdkPath, "/lib/" + arch)).append('"'); //$NON-NLS-1$
}
command.append(" -cp "); //$NON-NLS-1$
StringBuilder cp = new StringBuilder();
cp.append('"');
String rootPath = "/"; //$NON-NLS-1$
if (Platform.inDevelopmentMode()) {
rootPath = "/bin"; //$NON-NLS-1$
}
String pathSeparator = System.getProperty("path.separator"); //$NON-NLS-1$
cp.append(new File(zendSdkPath, rootPath)).append(pathSeparator);
Enumeration<?> libs = zendSdk.findEntries("/lib", "*.jar", false); //$NON-NLS-1$ //$NON-NLS-2$
if (libs != null) {
while (libs.hasMoreElements()) {
URL lib = (URL) libs.nextElement();
cp.append(new File(zendSdkPath, lib.getPath())).append(pathSeparator);
}
}
cp.append('"');
command.append(cp);
command.append(" ").append(ZendTargetDetectMain.class.getName()).append(" "); //$NON-NLS-1$ //$NON-NLS-2$
if (targetId != null) {
command.append(" ").append(targetId).append(" "); //$NON-NLS-1$ //$NON-NLS-2$
if (key != null) {
command.append(" ").append(key).append(" "); //$NON-NLS-1$ //$NON-NLS-2$
}
}
return command.toString();
}
private String getZendSdkClassPath(Bundle bundle) throws IOException {
URL url = FileLocator.find(bundle, new Path("/"), null); //$NON-NLS-1$
url = FileLocator.resolve(url);
File location = new File(url.getFile());
return location.getAbsolutePath();
}
public String getFullCommandLine(String targetId, String key) throws IOException {
String java = getJavaPath();
String args = getZendCommandArgs(targetId, key);
return java + args;
}
public boolean runElevated(String targetId, String key) throws IOException {
ElevatedProgram prog = ElevatedProgramFactory.getElevatedProgram();
String java = getJavaPath();
String args = getZendCommandArgs(targetId, key);
boolean result = prog.launch("Zend SDK", java, args); //$NON-NLS-1$
return result;
}
}