/******************************************************************************* * Copyright (c) 2017 Rogue Wave Software Inc. and others. * 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: * Rogue Wave Software Inc. - initial implementation *******************************************************************************/ package org.eclipse.php.internal.debug.core.zend.communication; import java.util.*; /** * Maps remote file content requestors to the requested file and line number. */ public class RemoteFileContentRequestorsRegistry { private static RemoteFileContentRequestorsRegistry instance; private Map<String, IRemoteFileContentRequestor> requestors; private List<IRemoteFileContentRequestor> externalRequestHandlers; public RemoteFileContentRequestorsRegistry() { requestors = Collections.synchronizedMap(new HashMap<String, IRemoteFileContentRequestor>()); externalRequestHandlers = Collections.synchronizedList(new ArrayList<IRemoteFileContentRequestor>()); } /** * Returns instance of this registry * * @return instance */ public static synchronized RemoteFileContentRequestorsRegistry getInstance() { if (instance == null) { instance = new RemoteFileContentRequestorsRegistry(); } return instance; } /** * Add new requester for file contents * * @param requestor * File contents requester * @param fileName * File name * @param lineNumber * Line number */ public void addRequestor(IRemoteFileContentRequestor requestor, String fileName, int lineNumber) { requestors.put(fileName + ":" + lineNumber, requestor); //$NON-NLS-1$ } /** * Adds new external request handler. * * @param requestor */ public void addExternalRequestHandler(IRemoteFileContentRequestor requestor) { externalRequestHandlers.add(requestor); } /** * Return requester for file contents, and remove it from the registry * * @param fileName * File name * @param lineNumber * Line number * @return requester */ public IRemoteFileContentRequestor removeRequestor(String fileName, int lineNumber) { return requestors.remove(fileName + ":" + lineNumber); //$NON-NLS-1$ } /** * Removes new external request handler. * * @param requestor */ public void removeExternalRequestHandler(IRemoteFileContentRequestor requestor) { externalRequestHandlers.remove(requestor); } /** * Handles open remote file requests that comes outside of IDE. * * @param content * @param serverAddress * @param originalURL * @param fileName * @param lineNumber */ public void handleExternalRequest(byte[] content, String serverAddress, String originalURL, String fileName, int lineNumber) { for (IRemoteFileContentRequestor requestor : externalRequestHandlers) { requestor.fileContentReceived(content, serverAddress, originalURL, fileName, lineNumber); requestor.requestCompleted(null); } } }