All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.xlcloud.openstack.client.OpenStackNeutronClient Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2012 AMG.lab, a Bull Group Company
 * 
 * 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 org.xlcloud.openstack.client;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.apache.log4j.Logger;
import org.xlcloud.config.ConfigParam;
import org.xlcloud.openstack.api.NeutronClient;
import org.xlcloud.openstack.model.neutron.Network;
import org.xlcloud.openstack.model.neutron.Networks;
import org.xlcloud.openstack.model.neutron.Port;
import org.xlcloud.openstack.model.neutron.Ports;
import org.xlcloud.openstack.model.neutron.Router;
import org.xlcloud.openstack.model.neutron.RouterInterface;
import org.xlcloud.openstack.model.neutron.Routers;
import org.xlcloud.openstack.model.neutron.Subnet;
import org.xlcloud.openstack.model.neutron.Subnets;
import org.xlcloud.openstack.rest.OpenStackRestClient;
import org.xlcloud.openstack.rest.RestClientType;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

/**
 * Basic implementation of {@link NeutronClient} based on OpenStack Neutron.
 * 
 * @author Krzysztof Szafrański, AMG.net
 * @author Konrad Król, AMG.net
 */
public class OpenStackNeutronClient extends WebResourceRequestBuilderDecorator implements NeutronClient {

    private static final Logger LOG = Logger.getLogger(OpenStackNeutronClient.class);
    
    private static final String PARAMETER_TENANT_ID = "tenant_id";
    private static final String PARAMETER_NETWORK_ID = "network_id";

    private static final String PATH_NETWORKS = "networks";
    private static final String PATH_SUBNETS = "subnets";
    private static final String PATH_PORTS = "ports";
    private static final String PATH_ROUTERS = "routers";
    private static final String PATH_ADD_ROUTER_INTERFACE = "add_router_interface";
    private static final String PATH_REMOVE_ROUTER_INTERFACE = "remove_router_interface";

    private static final String QUERY_PARAM_ACCEPT = "Accept";
    private static final String QUERY_PARAM_ACCEPT_JSON = "application/json";

    @Inject
    @OpenStackRestClient(RestClientType.DEFAULT)
    private Client resourceClient;

    @Inject
    @ConfigParam
    String neutronUrl;

    private WebResource resource;

    @PostConstruct
    public void init() {
        LOG.debug("Using Jersey client " + resourceClient.hashCode());
        resource = resourceClient.resource(neutronUrl);
    }
    
    /*
     * NETWORKS
     */

    /** {@inheritDoc} */
    @Override
    public List listNetworks() {
        Networks networks = get(Networks.class, resource.path(PATH_NETWORKS).queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return networks.getNetwork();
    }

    /** {@inheritDoc} */
    @Override
    public List listNetworksByTenantId(String tenantId) {
        Networks networks = get(
                Networks.class,
                resource.path(PATH_NETWORKS).queryParam(PARAMETER_TENANT_ID, tenantId)
                        .queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return networks.getNetwork();
    }

    /** {@inheritDoc} */
    @Override
    public Network showNetwork(String networkId) {
        Network network = get(Network.class,
                resource.path(PATH_NETWORKS + "/" + networkId).queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return network;
    }

    /** {@inheritDoc} */
    @Override
    public Network createNetwork(Network network) {
        Network createdNetwork = post(Network.class, network,
                resource.path(PATH_NETWORKS).queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return createdNetwork;
    }
    
    /** {@inheritDoc} */
    @Override
    public void removeNetwork(String networkId) {
        delete(resource.path(PATH_NETWORKS + "/" + networkId));
    }
    
    /*
     * SUBNETS
     */

    /** {@inheritDoc} */
    @Override
    public List listSubnets() {
        Subnets subnets = get(Subnets.class, resource.path(PATH_SUBNETS).queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return subnets.getSubnet();
    }

    /** {@inheritDoc} */
    @Override
    public List listSubnetsByTenantId(String tenantId) {
        Subnets subnets = get(
                Subnets.class,
                resource.path(PATH_SUBNETS).queryParam(PARAMETER_TENANT_ID, tenantId)
                        .queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return subnets.getSubnet();
    }

    /** {@inheritDoc} */
    @Override
    public Subnet showSubnet(String subnetId) {
        Subnet subnet = get(Subnet.class,
                resource.path(PATH_SUBNETS + "/" + subnetId).queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return subnet;
    }
    
    /** {@inheritDoc} */
    @Override
    public Subnet createSubnet(Subnet subnet) {
        Subnet createdSubnet = post(Subnet.class, subnet,
                resource.path(PATH_SUBNETS).queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return createdSubnet;
    }
    
    /** {@inheritDoc} */
    @Override
    public void removeSubnet(String subnetId) {
        delete(resource.path(PATH_SUBNETS + "/" + subnetId));
    }
    
    /*
     * PORTS
     */
    
    /** {@inheritDoc} */
    @Override
    public List listPortsByNetworkId(String networkId) {
        Ports ports = get(
                Ports.class,
                resource.path(PATH_PORTS).queryParam(PARAMETER_NETWORK_ID, networkId)
                        .queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return ports.getPort();
    }
    
    /*
     * ROUTERS
     */
    
    /** {@inheritDoc} */
    @Override
    public List listRouters() {
        Routers routers = get(Routers.class, resource.path(PATH_ROUTERS).queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return routers.getRouter();
    }
    
    /** {@inheritDoc} */
    @Override
    public List listRoutersByTenantId(String tenantId) {
        Routers routers = get(
                Routers.class,
                resource.path(PATH_ROUTERS).queryParam(PARAMETER_TENANT_ID, tenantId)
                        .queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return routers.getRouter();
    }
    
    /** {@inheritDoc} */
    @Override
    public Router showRouter(String routerId) {
        Router router = get(Router.class,
                resource.path(PATH_ROUTERS + "/" + routerId).queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return router;
    }
    
    /** {@inheritDoc} */
    @Override
    public Router createRouter(Router router) {
        Router createdRouter = post(Router.class, router,
                resource.path(PATH_ROUTERS).queryParam(QUERY_PARAM_ACCEPT, QUERY_PARAM_ACCEPT_JSON));
        return createdRouter;
    }
    
    /** {@inheritDoc} */
    @Override
    public void removeRouter(String routerId) {
        delete(resource.path(PATH_ROUTERS + "/" + routerId));
    }
    
    /** {@inheritDoc} */
    @Override
    public RouterInterface addRouterInterface(String routerId, RouterInterface routerInterface) {
        RouterInterface createdRouterInterface = put(
                RouterInterface.class,
                routerInterface,
                resource.path(PATH_ROUTERS + "/" + routerId + "/" + PATH_ADD_ROUTER_INTERFACE).queryParam(QUERY_PARAM_ACCEPT,
                        QUERY_PARAM_ACCEPT_JSON));
        return createdRouterInterface;
    }
    
    @Override
    public RouterInterface removeRouterInterface(String routerId, RouterInterface routerInterface) {
        RouterInterface createdRouterInterface = put(
                RouterInterface.class,
                routerInterface,
                resource.path(PATH_ROUTERS + "/" + routerId + "/" + PATH_REMOVE_ROUTER_INTERFACE).queryParam(QUERY_PARAM_ACCEPT,
                        QUERY_PARAM_ACCEPT_JSON));
        return createdRouterInterface;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy