/*******************************************************************************
* Copyright (c) 2009 Red Hat, Inc.
* 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:
* Red Hat - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.callgraph.core;
import java.util.ArrayList;
/**
* Contains methods for generating a stap command
* @author chwang
*
*/
public class SystemTapCommandGenerator {
private static boolean needsToSendCommand;
private static boolean needsArguments;
private static String arguments;
private static String scriptPath;
private static String flags;
private static String binaryPath = null;
private static String binaryArguments;
private static String command;
public static String generateCommand(String scrPath, String binPath, String opts, boolean needBinary, boolean needsArgs, String arg, String binArguments,
String cmdTarget) {
needsToSendCommand = needBinary;
needsArguments = needsArgs;
binaryPath = binPath;
scriptPath = scrPath;
arguments = "--runtime=dyninst " + arg; //$NON-NLS-1$
flags = opts;
binaryArguments = binArguments;
command = cmdTarget;
String[] script = buildScript();
String cmd = ""; //$NON-NLS-1$
for (int i = 0; i < script.length-1; i++) {
cmd = cmd + script[i] + " "; //$NON-NLS-1$
}
cmd = cmd + script[script.length-1];
return cmd;
}
/**
* Parses the data created from generateCommand
* @return An array of strings to be joined and executed by the shell
*/
private static String[] buildScript() {
//TODO: Take care of this in the next release. For now only the guru mode is sent
ArrayList<String> cmdList = new ArrayList<>();
String[] script;
if (flags.length() > 0){
cmdList.add(flags);
}
//Execute a binary
if (needsToSendCommand){
if (binaryArguments.length() < 1){
cmdList.add("-c '" + binaryPath + "'"); //$NON-NLS-1$ //$NON-NLS-2$
} else {
cmdList.add("-c \"" + binaryPath + " " + binaryArguments +"\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
if (needsArguments) {
script = new String[cmdList.size() + 3];
script[script.length-2] = scriptPath;
script[script.length-1] = arguments;
} else {
script = new String[cmdList.size() + 2];
script[script.length-1] = scriptPath;
}
script[0] = command;
for(int i=0; i< cmdList.size(); i++) {
if (cmdList.get(i) != null) {
script[i +1] = cmdList.get(i);
} else {
script[i + 1] = ""; //$NON-NLS-1$
}
}
return script;
}
}