/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.embedded.ssh.internal; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import de.rcenvironment.core.embedded.ssh.api.ScpContext; import de.rcenvironment.core.embedded.ssh.api.ScpContextManager; /** * Default {@link ScpContextManager} implementation. * * @author Robert Mischke */ public class ScpContextManagerImpl implements ScpContextManager { private final List<ScpContext> contexts = new ArrayList<>(); private final Log log = LogFactory.getLog(getClass()); @Override public synchronized ScpContext createScpContext(String username, String virtualRootPath) throws IOException { ScpContextImpl newContext = new ScpContextImpl(username, virtualRootPath); contexts.add(newContext); return newContext; } @Override public synchronized ScpContext getMatchingScpContext(String username, String virtualPath) { for (ScpContext context : contexts) { if (context.getAuthorizedUsername().equals(username) && virtualPath.startsWith(context.getVirtualScpRootPath())) { return context; } } return null; } @Override public synchronized void disposeScpContext(ScpContext scpContext) { boolean removed = contexts.remove(scpContext); if (!removed) { log.warn("ScpContext handed in for disposal, but not present in internal list: " + scpContext.toString()); } } }