/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.api.agent.server.launcher; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.che.api.agent.shared.model.Agent; import org.eclipse.che.api.core.model.machine.MachineConfig; import java.util.Set; /** * Provides {@link AgentLauncher} for specific agent to be run on instance. * Returning agent depends on machine type. If no agent found then the default one * will be returned. * * @author Anatolii Bazko */ @Singleton public class AgentLauncherFactory { private final Set<AgentLauncher> launchers; private final AgentLauncher defaultLauncher; @Inject public AgentLauncherFactory(Set<AgentLauncher> launchers, DefaultAgentLauncher defaultLauncher) { this.launchers = launchers; this.defaultLauncher = defaultLauncher; } /** * Find launcher for given agent independently of version. * If the specific {@link AgentLauncher} isn't registered then the default one will be used. * * @see Agent#getId() * @see MachineConfig#getType() * * @param agentName * the agent name * @param machineType * the machine type * @return {@link AgentLauncher} */ public AgentLauncher find(String agentId, String machineType) { return launchers.stream() .filter(l -> l.getAgentId().equals(agentId)) .filter(l -> l.getMachineType().equals(machineType)) .findAny() .orElse(defaultLauncher); } }