/*
* (c) 2015 CenturyLink. All Rights Reserved.
*
* 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.centurylink.cloud.sdk.loadbalancer.services.client;
import com.centurylink.cloud.sdk.core.auth.services.BearerAuthentication;
import com.centurylink.cloud.sdk.core.client.AuthenticatedSdkHttpClient;
import com.centurylink.cloud.sdk.core.config.SdkConfiguration;
import com.centurylink.cloud.sdk.loadbalancer.services.client.domain.LoadBalancerRequest;
import com.centurylink.cloud.sdk.loadbalancer.services.dsl.domain.LoadBalancerMetadata;
import javax.ws.rs.core.GenericType;
import java.util.List;
import static javax.ws.rs.client.Entity.entity;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
public class LoadBalancerClient extends AuthenticatedSdkHttpClient {
private static final String DATACENTER_ID = "dataCenterId";
private static final String BALANCER_ID = "loadBalancerId";
private static final String URL = "/sharedLoadBalancers/{accountAlias}/{dataCenterId}";
private static final String URL_WITH_ID = URL + "/{loadBalancerId}";
public LoadBalancerClient(BearerAuthentication authFilter, SdkConfiguration config) {
super(authFilter, config);
}
public List<LoadBalancerMetadata> getLoadBalancers(String dataCenterId) {
List<LoadBalancerMetadata> metadataList =
client(URL)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.request()
.get(new GenericType<List<LoadBalancerMetadata>>(){});
metadataList.forEach(metadata -> setAdditionalParams(metadata, dataCenterId));
return metadataList;
}
public LoadBalancerMetadata getLoadBalancer(String dataCenterId, String loadBalancerId) {
LoadBalancerMetadata metadata =
client(URL_WITH_ID)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.resolveTemplate(BALANCER_ID, loadBalancerId)
.request()
.get(LoadBalancerMetadata.class);
setAdditionalParams(metadata, dataCenterId);
return metadata;
}
public LoadBalancerMetadata create(String dataCenterId, LoadBalancerRequest request) {
LoadBalancerMetadata metadata =
client(URL)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.request()
.post(entity(request, APPLICATION_JSON_TYPE))
.readEntity(LoadBalancerMetadata.class);
setAdditionalParams(metadata, dataCenterId);
return metadata;
}
public void delete(String dataCenterId, String loadBalancerId) {
client(URL_WITH_ID)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.resolveTemplate(BALANCER_ID, loadBalancerId)
.request()
.delete();
}
public void update(String dataCenterId, String loadBalancerId, LoadBalancerRequest request) {
client(URL_WITH_ID)
.resolveTemplate(DATACENTER_ID, dataCenterId)
.resolveTemplate(BALANCER_ID, loadBalancerId)
.request()
.put(entity(request, APPLICATION_JSON_TYPE));
}
private void setAdditionalParams(LoadBalancerMetadata metadata, String dataCenterId) {
metadata.setDataCenterId(dataCenterId);
}
}