/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package jobs.vipr;
import static com.emc.vipr.client.core.util.ResourceUtils.id;
import java.net.URI;
import java.util.List;
import util.BourneUtil;
import com.emc.storageos.model.tenant.TenantOrgRestRep;
import com.emc.vipr.client.ViPRCoreClient;
import com.emc.vipr.client.core.util.CachedResources;
import com.google.common.collect.Lists;
public class TenantsCall extends ViPRListCall<TenantOrgRestRep> {
public TenantsCall() {
this(BourneUtil.getViprClient());
}
public TenantsCall(ViPRCoreClient client) {
this(client, new CachedResources<TenantOrgRestRep>(client.tenants()));
}
public TenantsCall(ViPRCoreClient client, CachedResources<TenantOrgRestRep> cache) {
super(client, cache);
}
@Override
public List<TenantOrgRestRep> call() {
List<TenantOrgRestRep> tenants = Lists.newArrayList();
TenantOrgRestRep rootTenant = findRootTenant();
tenants.add(rootTenant);
tenants.addAll(getSubTenants(id(rootTenant)));
return tenants;
}
public TenantOrgRestRep findRootTenant() {
URI userTenantId = client.getUserTenantId();
TenantOrgRestRep currentTenant = get(userTenantId);
while (currentTenant.getParentTenant() != null) {
currentTenant = get(currentTenant.getParentTenant());
}
return currentTenant;
}
public List<TenantOrgRestRep> getSubTenants(URI parentTenantId) {
return getByRefs(client.tenants().listSubtenants(parentTenantId));
}
}