private Program doOpenProgramSwing(ProgramLocator locator, int state) {
		// see if already open
		Program program = programMgr.getOpenProgram(locator);
		if (program != null) {
			showProgram(program, locator, state);
			return program;
		}

		// see if cached
		program = programCache.get(locator);
		if (program != null) {
			programMgr.addProgram(program, locator, state);
			return program;
		}

		// ok, then open it
		OpenProgramTask task = new OpenProgramTask(locator, this);
		new TaskLauncher(task, tool.getToolFrame());
		OpenProgramRequest request = task.getOpenProgram();
		if (request != null) {
			program = request.getProgram();
			programMgr.addProgram(program, locator, state);
			request.release();
			return program;
		}
		return null;
	}
Method called if the plugin supports this domain file.

@param data the data to be used by the running tool
@return false if data is not a Program object.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/ProgramManagerPlugin.java