/*
* Copyright 2016 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.emc.vipr.client.core;
import java.util.List;
import com.emc.storageos.model.NamedRelatedResourceRep;
import com.emc.storageos.model.keystone.OSTenantListRestRep;
import com.emc.storageos.model.keystone.OpenStackTenantListParam;
import com.emc.storageos.model.keystone.OpenStackTenantParam;
import com.emc.storageos.model.keystone.OpenStackTenantsList;
import com.emc.vipr.client.ViPRCoreClient;
import com.emc.vipr.client.core.filters.ResourceFilter;
import com.emc.vipr.client.core.impl.PathConstants;
import com.emc.vipr.client.core.util.ResourceUtils;
import com.emc.vipr.client.impl.RestClient;
/**
* OpenStack tenants resources.
* <p>
* Base URL: <tt>"/v2/keystone"</tt>
*/
public class OpenStackTenants extends AbstractCoreResources<OpenStackTenantParam> implements
TopLevelResources<OpenStackTenantParam> {
public OpenStackTenants(ViPRCoreClient parent, RestClient client) {
super(parent, client, OpenStackTenantParam.class, PathConstants.KEYSTONE_TENANTS_URL);
}
private final String OS_TENANTS_URL = PathConstants.KEYSTONE_OS_TENANTS_URL;
@Override
public OpenStackTenants withInactive(boolean inactive) {
return (OpenStackTenants) super.withInactive(inactive);
}
@Override
public OpenStackTenants withInternal(boolean internal) {
return (OpenStackTenants) super.withInternal(internal);
}
/**
* Lists all OpenStack tenants.
* <p>
* API Call: <tt>GET /v2/keystone/tenants</tt>
*
* @return the list of all OpenStack tenants references.
*/
@Override
public List<NamedRelatedResourceRep> list() {
OpenStackTenantsList response = client.get(OpenStackTenantsList.class, baseUrl);
return ResourceUtils.defaultList(response.getTenants());
}
/**
* Gets all OpenStack tenants.
*
* @return the list of all OpenStack tenants.
*/
@Override
public List<OpenStackTenantParam> getAll() {
return getAll(null);
}
/**
* Lists all OpenStack tenants.
* <p>
* API Call: <tt>GET /v2/keystone/ostenants</tt>
*
* @return list of OpenStack tenants.
*/
public OSTenantListRestRep getOpenStackTenants() {
return client.get(OSTenantListRestRep.class, OS_TENANTS_URL);
}
/**
* Updates OpenStack tenants.
* <p>
* API Call: <tt>PUT /v2/keystone/ostenants</tt>
*
* @param list list of OpenStack tenants to update.
*
* @return list of updated OpenStack tenants.
*/
public OSTenantListRestRep updateOpenStackTenants(OSTenantListRestRep list) {
return client.put(OSTenantListRestRep.class, list, OS_TENANTS_URL);
}
@Override
public List<OpenStackTenantParam> getAll(ResourceFilter<OpenStackTenantParam> filter) {
List<NamedRelatedResourceRep> refs = list();
return getByRefs(refs, filter);
}
/**
* Gets OpenStack tenant with given ID.
* <p>
* API Call: <tt>PUT /v2/keystone/tenants/{id}</tt>
*
* @param id the OpenStack tenant ID.
*
* @return single OpenStack tenant.
*/
public OpenStackTenantParam get(String id) {
return client.get(OpenStackTenantParam.class, getIdUrl(), id);
}
/**
* Creates representation of OpenStack Tenants in CoprHD.
* <p>
* API Call: <tt>PUT /v2/keystone/tenants</tt>
*
* @return list of saved OpenStack tenants.
*/
public OSTenantListRestRep registerOpenStackTenants(OpenStackTenantListParam list) {
return client.post(OSTenantListRestRep.class, list, baseUrl);
}
public void synchronizeOpenStackTenants() {
client.put(String.class, OS_TENANTS_URL + "/sync");
}
}