public void run(String[] params, TaskMonitor monitor) throws Exception, CancelledException {

		clearParams();

		checkRequiredParam(params, 0, "command");
		String command = params[0];
		if (!COMMAND_SET.contains(command)) {
			throw new IllegalArgumentException("Missing or invalid command specified");
		}

		checkRequiredParam(params, 1, "URL");
		String urlstring = params[1];

		monitor.setCancelEnabled(true);

		List<String> subParams = readOptions(command, params, 2);

		initializeApplication(command);

		if (COMMAND_CREATE_DATABASE.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doCreateDatabase(subParams);
		}
		else if (COMMAND_SET_METADATA.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doInstallMetadata(subParams);
		}
		else if (COMMAND_ADD_EXE_CATEGORY.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doInstallCategory(subParams);
		}
		else if (COMMAND_ADD_FUNCTION_TAG.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doInstallTags(subParams);
		}
		else if (COMMAND_DROP_INDEX.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doDropIndex(subParams);
		}
		else if (COMMAND_REBUILD_INDEX.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doRebuildIndex(subParams);
		}
		else if (COMMAND_PREWARM.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doPrewarm(subParams);
		}
		else if (COMMAND_GENERATE_SIGS.equals(command)) {
			processSigAndUpdateOptions(urlstring);
			doGenerateSigs(subParams, monitor);
		}
		else if (COMMAND_COMMIT_SIGS.equals(command)) {
			// --override option specified ghidra URL
			String ghidraURLOverride = optionValueMap.get(OVERRIDE_OPTION);
			if (ghidraURLOverride != null) {
				setupURLs(ghidraURLOverride, urlstring);
			}
			else {
				bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			}
			doCommitSigs(subParams, monitor);
		}
		else if (COMMAND_GENERATE_UPDATES.equals(command)) {
			processSigAndUpdateOptions(urlstring);
			doGenerateUpdates(subParams, monitor);
		}
		else if (COMMAND_COMMIT_UPDATES.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doCommitUpdates(subParams);
		}
		else if (COMMAND_DELETE.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doDeleteExecutable(subParams);
		}
		else if (COMMAND_LIST_FUNCTIONS.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doListFunctions(subParams);
		}
		else if (COMMAND_LIST_EXES.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doListExes(subParams);
		}
		else if (COMMAND_GET_EXE_COUNT.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doGetCount(subParams);
		}
		else if (COMMAND_DUMP_SIGS.equals(command)) {
			bsimURL = BSimClientFactory.deriveBSimURL(urlstring);
			doDumpSigs(subParams);
		}
		else {
			throw new IllegalArgumentException("Unknown command: " + command);
		}
	}
Runs the command specified by the given set of params.

@param params the parameters specifying the command
@param monitor the task monitor
@throws IllegalArgumentException if invalid params have been specified
@throws Exception if there's an error during the operation
@throws CancelledException if processing is cancelled
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BSimLaunchable.java