package org.ow2.choreos.ee.nodes.selector; import java.util.HashMap; import java.util.List; import java.util.Map; import org.ow2.choreos.ee.nodes.NPMFactory; import org.ow2.choreos.nodes.NodePoolManager; import org.ow2.choreos.nodes.datamodel.CloudNode; import org.ow2.choreos.selectors.AlwaysCreateSelector; import org.ow2.choreos.selectors.NotSelectedException; import org.ow2.choreos.services.datamodel.DeployableServiceSpec; public class AlwaysCreateNodeSelector implements NodeSelector { private Map<String, AlwaysCreateSelector<CloudNode, DeployableServiceSpec>> selectors = new HashMap<String, AlwaysCreateSelector<CloudNode, DeployableServiceSpec>>(); @Override public List<CloudNode> select(DeployableServiceSpec spec, int objectsQuantity) throws NotSelectedException { AlwaysCreateSelector<CloudNode, DeployableServiceSpec> selector = retrieveSelector(spec); return selector.select(spec, objectsQuantity); } private AlwaysCreateSelector<CloudNode, DeployableServiceSpec> retrieveSelector(DeployableServiceSpec spec) { String cloudAccount = spec.getOwner(); synchronized (this) { if (!this.selectors.containsKey(cloudAccount)) { NodePoolManager npm = NPMFactory.getNewNPMInstance(cloudAccount); NodeFactory nodeFac = new NodeFactory(npm); this.selectors.put(cloudAccount, new AlwaysCreateSelector<CloudNode, DeployableServiceSpec>(nodeFac)); } } return this.selectors.get(cloudAccount); } }