/*******************************************************************************
* Copyright (c) 2015 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.cloudfoundry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFOrganization;
import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFSpace;
/**
* Hierarchical representation of existing orgs and spaces in a Cloud Foundry
* target.
*
*/
public class OrgsAndSpaces {
private final List<CFSpace> originalSpaces;
private Map<String, List<CFSpace>> orgIDtoSpaces;
private Map<String,CFOrganization> orgIDtoOrg;
/**
*
* @param spaces
* a flat list of all spaces for a given set of credentials and
* server URL. Should not be empty or null.
* @throws CoreException
* if given cloud server does not support orgs and spaces
*/
public OrgsAndSpaces(List<CFSpace> spaces) {
this.originalSpaces = spaces;
setValues();
}
public CFSpace getSpace(String orgName, String spaceName) {
List<CFSpace> oSpaces = orgIDtoSpaces.get(orgName);
if (oSpaces != null) {
for (CFSpace clSpace : oSpaces) {
if (clSpace.getName().equals(spaceName)) {
return clSpace;
}
}
}
return null;
}
public List<CFOrganization> getOrgs() {
Collection<CFOrganization> orgList = orgIDtoOrg.values();
return new ArrayList<CFOrganization>(orgList);
}
protected void setValues() {
orgIDtoSpaces = new HashMap<String, List<CFSpace>>();
orgIDtoOrg = new HashMap<String, CFOrganization>();
for (CFSpace clSpace : originalSpaces) {
CFOrganization org = clSpace.getOrganization();
List<CFSpace> spaces = orgIDtoSpaces.get(org.getName());
if (spaces == null) {
spaces = new ArrayList<CFSpace>();
orgIDtoSpaces.put(org.getName(), spaces);
orgIDtoOrg.put(org.getName(), org);
}
spaces.add(clSpace);
}
}
/**
* @param orgName
* @return
*/
public List<CFSpace> getOrgSpaces(String orgName) {
return orgIDtoSpaces.get(orgName);
}
/**
* @return all spaces available for the given account. Never null, although
* may be empty if no spaces are resolved.
*/
public List<CFSpace> getAllSpaces() {
return originalSpaces != null ? new ArrayList<CFSpace>(originalSpaces) : new ArrayList<CFSpace>(0);
}
}