DomainFile copyAsLink(ProjectData sourceProjectData, String pathname, String linkFilename,
			LinkHandler<?> lh) throws IOException {
		synchronized (fileSystem) {
			if (fileSystem.isReadOnly()) {
				throw new ReadOnlyException("copyAsLink permitted to writeable project only");
			}

			if (sourceProjectData == projectData) {
				// internal linking not yet supported
				Msg.error(this, "Internal file/folder links not yet supported");
				return null;
			}

			URL ghidraUrl = null;
			if (sourceProjectData instanceof TransientProjectData) {
				RepositoryAdapter repository = sourceProjectData.getRepository();
				ServerInfo serverInfo = repository.getServerInfo();
				ghidraUrl = GhidraURL.makeURL(serverInfo.getServerName(),
					serverInfo.getPortNumber(), repository.getName(), pathname);
			}
			else {
				ProjectLocator projectLocator = sourceProjectData.getProjectLocator();
				if (projectLocator.equals(projectData.getProjectLocator())) {
					return null; // local internal linking not supported
				}
				ghidraUrl = GhidraURL.makeURL(projectLocator, pathname, null);
			}

			String newName = linkFilename;
			int i = 1;
			while (true) {
				GhidraFileData fileData = getFileData(newName, false);
				if (fileData != null) {
					// return existing file if link URL matches
					if (ghidraUrl.equals(fileData.getLinkFileURL())) {
						return getDomainFile(newName);
					}
					newName = linkFilename + "." + i;
					++i;
				}
				break;
			}

			try {
				lh.createLink(ghidraUrl, fileSystem, getPathname(), newName);
			}
			catch (InvalidNameException e) {
				throw new IOException(e); // unexpected
			}

			fileChanged(newName);
			return getDomainFile(newName);
		}
	}
Create a link-file within this folder.  The link-file may correspond to various types of
content (e.g., Program, Trace, Folder, etc.) based upon specified link handler.
@param sourceProjectData referenced content project data within which specified path exists.
@param pathname path of referenced content with source project data
@param linkFilename name of link-file to be created within this folder.
@param lh link file handler used to create specific link file.
@return link-file 
@throws IOException if IO error occurs during link creation
Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java