/******************************************************************************* * Copyright (c) 2016 Pivotal, Inc. * 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: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.dash.test.mocks; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.mockito.Mockito; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFApplication; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFOrganization; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFServiceInstance; import org.springframework.ide.eclipse.boot.dash.livexp.LiveCounter; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; public class MockCFSpace extends CFSpaceData { //TODO: the methods in this class should prolly be synchronized somehow. It manipulates mutable // data and is called from multiple threads. private Map<String, CFServiceInstance> servicesByName = new HashMap<>(); private Map<String, MockCFApplication> appsByName = new HashMap<>(); private MockCloudFoundryClientFactory owner; private Map<String, LiveCounter> pushCounts = new HashMap<>(); public MockCFSpace(MockCloudFoundryClientFactory owner, String name, UUID guid, CFOrganization org) { super(name, guid, org); this.owner = owner; } public String getDefaultDomain() { return owner.getDefaultDomain(); } public List<CFServiceInstance> getServices() { return ImmutableList.copyOf(servicesByName.values()); } public ImmutableList<CFApplication> getApplicationsWithBasicInfo() { Builder<CFApplication> builder = ImmutableList.builder(); for (MockCFApplication app : appsByName.values()) { builder.add(app.getBasicInfo()); } return builder.build(); } public MockCFApplication defApp(String name) { MockCFApplication existing = appsByName.get(name); if (existing==null) { appsByName.put(name, existing = Mockito.spy(new MockCFApplication(owner, this, name))); } return existing; } public CFServiceInstance defService(String name) { CFServiceInstance existing = servicesByName.get(name); if (existing==null) { servicesByName.put(name, new CFServiceInstanceData( name )); } return existing; } public MockCFApplication getApplication(UUID appGuid) { for (MockCFApplication app : appsByName.values()) { if (app.getGuid().equals(appGuid)) { return app; } } return null; } public MockCFApplication getApplication(String appName) { MockCFApplication app = appsByName.get(appName); if (app!=null) { return app; } return null; } public boolean removeApp(String name) { return appsByName.remove(name)!=null; } public void put(MockCFApplication app) { appsByName.put(app.getName(), app); } public synchronized LiveCounter getPushCount(String name) { LiveCounter counter = pushCounts.get(name); if (counter==null) { pushCounts.put(name, counter = new LiveCounter()); } return counter; } public void deleteService(String serviceName) throws Exception { CFServiceInstance x = servicesByName.remove(serviceName); if (x==null) { throw new IOException("Service doesn't exist: "+serviceName); } } }