You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2018/01/17 08:11:28 UTC

[08/12] jclouds-labs-openstack git commit: OpenStack Neutron promoted to the main repo

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/ExtensionNamespaces.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/ExtensionNamespaces.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/ExtensionNamespaces.java
deleted file mode 100644
index 2130972..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/ExtensionNamespaces.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.extensions;
-
-/**
- * Extension Namespaces for OpenStack Networking (Neutron).
- */
-public final class ExtensionNamespaces {
-   /**
-    * Neutron Layer-3 Router Extension
-    */
-   public static final String L3_ROUTER = "http://docs.openstack.org/ext/neutron/router/api/v1.0";
-   /**
-    * Neutron Security Groups Extension
-    */
-   public static final String SECURITY_GROUPS = "http://docs.openstack.org/ext/securitygroups/api/v2.0";
-   /**
-    * LBaaS Extension.
-    */
-   public static final String LBAAS = "http://wiki.openstack.org/neutron/LBaaS/API_1.0";
-   /**
-    * FWaaS Extension.
-    */
-   public static final String FWAAS = "http://wiki.openstack.org/Neutron/FWaaS/API_1.0";
-
-   private ExtensionNamespaces() {
-      throw new AssertionError("intentionally unimplemented");
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApi.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApi.java
deleted file mode 100644
index a4f45db..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/FWaaSApi.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.extensions;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
-import org.jclouds.openstack.keystone.v2_0.KeystoneFallbacks.EmptyPaginatedCollectionOnNotFoundOr404;
-import org.jclouds.openstack.neutron.v2.domain.CreateFirewall;
-import org.jclouds.openstack.neutron.v2.domain.CreateFirewallPolicy;
-import org.jclouds.openstack.neutron.v2.domain.CreateFirewallRule;
-import org.jclouds.openstack.neutron.v2.domain.Firewall;
-import org.jclouds.openstack.neutron.v2.domain.FirewallPolicy;
-import org.jclouds.openstack.neutron.v2.domain.FirewallRule;
-import org.jclouds.openstack.neutron.v2.domain.UpdateFirewall;
-import org.jclouds.openstack.neutron.v2.domain.UpdateFirewallPolicy;
-import org.jclouds.openstack.neutron.v2.domain.UpdateFirewallRule;
-import org.jclouds.openstack.neutron.v2.functions.FirewallPolicyToPagedIterable;
-import org.jclouds.openstack.neutron.v2.functions.FirewallRuleToPagedIterable;
-import org.jclouds.openstack.neutron.v2.functions.FirewallToPagedIterable;
-import org.jclouds.openstack.neutron.v2.functions.ParseFirewallPolicies;
-import org.jclouds.openstack.neutron.v2.functions.ParseFirewallRules;
-import org.jclouds.openstack.neutron.v2.functions.ParseFirewalls;
-import org.jclouds.openstack.v2_0.ServiceType;
-import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.openstack.v2_0.services.Extension;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-import org.jclouds.rest.annotations.WrapWith;
-
-import com.google.common.annotations.Beta;
-
-/**
- * The FWaaS extension provides OpenStack users with the ability to deploy firewalls to protect their networks.
- * <p/>
- *
- * @see <a href=
- *      "http://specs.openstack.org/openstack/neutron-specs/specs/api/firewall_as_a_service__fwaas_.html">api doc</a>
- * @see <a href=
- *      "http://git.openstack.org/cgit/openstack/neutron-fwaas/tree/neutron_fwaas/extensions/firewall.py">extension info</a>
- */
-@Beta
-@Path("/fw")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-@Extension(of = ServiceType.NETWORK, namespace = ExtensionNamespaces.FWAAS, name = "Firewall service", alias = "fwaas")
-public interface FWaaSApi {
-
-   /**
-    * Returns the list of all routers currently defined in Neutron for the current tenant. The list provides the unique
-    * identifier of each firewall configured for the tenant
-    *
-    * @return the list of all firewall references configured for the tenant.
-    */
-   @Named("fw:list")
-   @GET
-   @Transform(FirewallToPagedIterable.class)
-   @ResponseParser(ParseFirewalls.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   @Path("/firewalls")
-   PagedIterable<Firewall> list();
-
-   /**
-    * @return the list of all firewall references configured for the tenant.
-    */
-   @Named("firewall:list")
-   @GET
-   @ResponseParser(ParseFirewalls.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   @Path("/firewalls")
-   PaginatedCollection<Firewall> list(PaginationOptions options);
-
-   /**
-    * Returns the details for a specific firewall.
-    *
-    * @param id the id of the firewall to return
-    * @return firewall or empty if not found
-    */
-   @Named("firewall:get")
-   @GET
-   @Path("/firewalls/{id}")
-   @SelectJson("firewall")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Nullable
-   Firewall get(@PathParam("id") String id);
-
-   /**
-    * Create a new firewall
-    *
-    * @param firewall Options for creating a firewall
-    * @return the newly created firewall
-    */
-   @Named("firewall:create")
-   @POST
-   @SelectJson("firewall")
-   @Path("/firewalls")
-   Firewall create(@WrapWith("firewall") CreateFirewall firewall);
-
-   /**
-    * Update a firewall
-    *
-    * @param id the id of the firewall to update
-    * @param updateFirewall Contains only the attributes to update
-    * @return The modified firewall
-    */
-   @Named("firewall:update")
-   @PUT
-   @Path("/firewalls/{id}")
-   @SelectJson("firewall")
-   Firewall update(@PathParam("id") String id, @WrapWith("firewall") UpdateFirewall updateFirewall);
-
-   /**
-    * Deletes the specified firewall
-    *
-    * @param id the id of the firewall to delete
-    * @return true if delete successful, false if not
-    */
-   @Named("firewall:delete")
-   @DELETE
-   @Path("/firewalls/{id}")
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean delete(@PathParam("id") String id);
-
-   @Named("firewall:createPolicy")
-   @POST
-   @SelectJson("firewall_policy")
-   @Path("/firewall_policies")
-   FirewallPolicy createFirewallPolicy(@WrapWith("firewall_policy") CreateFirewallPolicy firewallPolicy);
-
-   @Named("firewall:listPolicies")
-   @GET
-   @Transform(FirewallPolicyToPagedIterable.class)
-   @ResponseParser(ParseFirewallPolicies.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   @Path("/firewall_policies")
-   PagedIterable<FirewallPolicy> listFirewallPolicies();
-
-   @Named("firewall:listPolicies")
-   @GET
-   @ResponseParser(ParseFirewallPolicies.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   @Path("/firewall_policies")
-   PaginatedCollection<FirewallPolicy> listFirewallPolicies(PaginationOptions options);
-
-   @Named("firewall:getPolicy")
-   @GET
-   @SelectJson("firewall_policy")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Path("/firewall_policies/{id}")
-   FirewallPolicy getFirewallPolicy(@PathParam("id") String id);
-
-   @Named("firewall:updatePolicy")
-   @PUT
-   @SelectJson("firewall_policy")
-   @Path("/firewall_policies/{id}")
-   FirewallPolicy updateFirewallPolicy(@PathParam("id") String id, @WrapWith("firewall_policy") UpdateFirewallPolicy updateFirewallPolicy);
-
-   @Named("firewall:deletePolicy")
-   @DELETE
-   @Path("/firewall_policies/{id}")
-   boolean deleteFirewallPolicy(@PathParam("id") String id);
-
-   @Named("firewall:createFirewallRule")
-   @POST
-   @SelectJson("firewall_rule")
-   @Path("/firewall_rules")
-   FirewallRule createFirewallRule(@WrapWith("firewall_rule") CreateFirewallRule firewallRule);
-
-   @Named("firewall:listFirewallRules")
-   @GET
-   @Transform(FirewallRuleToPagedIterable.class)
-   @ResponseParser(ParseFirewallRules.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   @Path("/firewall_rules")
-   PagedIterable<FirewallRule> listFirewallRules();
-
-   @Named("firewall:listFirewallRules")
-   @GET
-   @ResponseParser(ParseFirewallRules.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   @Path("/firewall_rules")
-   PaginatedCollection<FirewallRule> listFirewallRules(PaginationOptions options);
-
-   @Named("firewall:getFirewallRule")
-   @GET
-   @Path("/firewall_rules/{id}")
-   @SelectJson("firewall_rule")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Nullable
-   FirewallRule getFirewallRule(@PathParam("id") String firewallRuleId);
-
-   @Named("firewall:updateFirewallRule")
-   @PUT
-   @Path("/firewall_rules/{id}")
-   @SelectJson("firewall_rule")
-   FirewallRule updateFirewallRule(@PathParam("id") String id, @WrapWith("firewall_rule") UpdateFirewallRule updateFirewallRule);
-
-   @Named("firewall:deleteFirewallRule")
-   @DELETE
-   @Path("/firewall_rules/{id}")
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean deleteFirewallRule(@PathParam("id") String id);
-
-   @Named("firewall:insertFirewallRuleToPolicy")
-   @PUT
-   @Path("/firewall_policies/{id}/insert_rule")
-   FirewallPolicy insertFirewallRuleToPolicy(@PathParam("id") String policyId, @WrapWith("firewall_rule_id") String firewallRuleId);
-
-   @Named("firewall:removeFirewallRuleFromPolicy")
-   @DELETE
-   @Path("/firewall_policies/{id}/remove_rule")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Nullable
-   FirewallPolicy removeFirewallRuleFromPolicy(@PathParam("id") String policyId, @WrapWith("firewall_rule_id") String firewallRuleId);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/FloatingIPApi.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/FloatingIPApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/FloatingIPApi.java
deleted file mode 100644
index a00bc04..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/FloatingIPApi.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.extensions;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2.domain.FloatingIP;
-import org.jclouds.openstack.neutron.v2.domain.FloatingIPs;
-import org.jclouds.openstack.neutron.v2.fallbacks.EmptyFloatingIPsFallback;
-import org.jclouds.openstack.neutron.v2.functions.FloatingIPsToPagedIterable;
-import org.jclouds.openstack.neutron.v2.functions.ParseFloatingIPs;
-import org.jclouds.openstack.v2_0.ServiceType;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.openstack.v2_0.services.Extension;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-import org.jclouds.rest.annotations.WrapWith;
-
-import com.google.common.annotations.Beta;
-
-/**
- * Provides access to Floating IP operations for the OpenStack Networking (Neutron) v2 API.
- * <p/>
- * A floating IP is an IP address on an external network, which is associated with a specific port, and optionally a
- * specific IP address, on a private OpenStack Networking network. Therefore a floating IP allows access to an
- * instance on a private network from an external network. Floating IPs can only be defined on networks for which the
- * attribute floatingip:external (by the external network extension) has been set to True.
- */
-@Beta
-@Path("/floatingips")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-@Extension(of = ServiceType.NETWORK, namespace = ExtensionNamespaces.L3_ROUTER, name = "Neutron L3 Router", alias = "router")
-public interface FloatingIPApi {
-
-   /**
-    * Returns a list of floating IPs to which the tenant has access. Default policy settings return only
-    * those floating IPs that are owned by the tenant who submits the request, unless the request is submitted by an
-    * user with administrative rights.
-    *
-    * @return the list of all floatingIP references configured for the tenant.
-    */
-   @Named("floatingip:list")
-   @GET
-   @Transform(FloatingIPsToPagedIterable.class)
-   @ResponseParser(ParseFloatingIPs.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<FloatingIP> list();
-
-   /**
-    * @return the list of all floatingIP references configured for the tenant.
-    */
-   @Named("floatingip:list")
-   @GET
-   @ResponseParser(ParseFloatingIPs.class)
-   @Fallback(EmptyFloatingIPsFallback.class)
-   FloatingIPs list(PaginationOptions options);
-
-   /**
-    * Returns the details for a specific floating IP.
-    *
-    * @param id the id of the floatingIP to return
-    * @return FloatingIPs collection or empty if not found
-    */
-   @Named("floatingip:get")
-   @GET
-   @Path("/{id}")
-   @SelectJson("floatingip")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Nullable
-   FloatingIP get(@PathParam("id") String id);
-
-   /**
-    * Creates a floating IP.
-    *
-    * @param createFloatingIP Options for creating a Floating IP
-    * @return the newly created Floating IP
-    */
-   @Named("floatingip:create")
-   @POST
-   @SelectJson("floatingip")
-   FloatingIP create(@WrapWith("floatingip") FloatingIP.CreateFloatingIP createFloatingIP);
-
-   /**
-    * Update a Floating IP
-    *
-    * @param id the id of the Floating IP to update
-    * @param updateFloatingIP Contains only the attributes to update
-    * @return The modified Floating IP
-    */
-   @Named("floatingip:update")
-   @PUT
-   @Path("/{id}")
-   @SelectJson("floatingip")
-   FloatingIP update(@PathParam("id") String id, @WrapWith("floatingip") FloatingIP.UpdateFloatingIP updateFloatingIP);
-
-   /**
-    * Deletes the specified floatingIP
-    *
-    * @param id the id of the floatingIP to delete
-    * @return true if delete successful, false if not
-    */
-   @Named("floatingip:delete")
-   @DELETE
-   @Path("/{id}")
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean delete(@PathParam("id") String id);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/RouterApi.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/RouterApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/RouterApi.java
deleted file mode 100644
index 383c70e..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/RouterApi.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.extensions;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2.domain.Router;
-import org.jclouds.openstack.neutron.v2.domain.RouterInterface;
-import org.jclouds.openstack.neutron.v2.domain.Routers;
-import org.jclouds.openstack.neutron.v2.fallbacks.EmptyRoutersFallback;
-import org.jclouds.openstack.neutron.v2.functions.ParseRouters;
-import org.jclouds.openstack.neutron.v2.functions.RouterToPagedIterable;
-import org.jclouds.openstack.neutron.v2.options.EmptyOptions;
-import org.jclouds.openstack.v2_0.ServiceType;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.openstack.v2_0.services.Extension;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-import org.jclouds.rest.annotations.WrapWith;
-
-import com.google.common.annotations.Beta;
-
-/**
- * Provides access to Router operations for the OpenStack Networking (Neutron) v2 API.
- * <p/>
- * A logical entity for forwarding packets across internal subnets and NATting them on external
- * networks through an appropriate external gateway.
- *
- * @see <a href=
- *      "http://docs.openstack.org/api/openstack-network/2.0/content/router_ext.html">api doc</a>
- *
- * @see <a href=
- * "https://github.com/openstack/neutron/tree/master/neutron/extensions">neutron extensions</a>
- */
-@Beta
-@Path("/routers")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-@Extension(of = ServiceType.NETWORK, namespace = ExtensionNamespaces.L3_ROUTER, name = "Neutron L3 Router", alias = "router")
-public interface RouterApi {
-
-   /**
-    * Returns the list of all routers currently defined in Neutron for the current tenant. The list provides the unique
-    * identifier of each router configured for the tenant
-    *
-    * @return the list of all router references configured for the tenant.
-    */
-   @Named("router:list")
-   @GET
-   @Transform(RouterToPagedIterable.class)
-   @ResponseParser(ParseRouters.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<Router> list();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("router:list")
-   @GET
-   @ResponseParser(ParseRouters.class)
-   @Fallback(EmptyRoutersFallback.class)
-   Routers list(PaginationOptions options);
-
-   /**
-    * Returns a Routers collection that should contain a single router with the id requested.
-    *
-    * @param id the id of the router to return
-    * @return Routers collection or empty if not found
-    */
-   @Named("router:get")
-   @GET
-   @Path("/{id}")
-   @SelectJson("router")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Nullable
-   Router get(@PathParam("id") String id);
-
-   /**
-    * Create a new router
-    *
-    * @param router Options for creating a router
-    * @return the newly created router
-    */
-   @Named("router:create")
-   @POST
-   @SelectJson("router")
-   Router create(@WrapWith("router") Router.CreateRouter router);
-
-   /**
-    * Update a router
-    *
-    * @param id the id of the router to update
-    * @param router Contains only the attributes to update
-    * @return The modified router
-    */
-   @Named("router:update")
-   @PUT
-   @Path("/{id}")
-   @SelectJson("router")
-   Router update(@PathParam("id") String id, @WrapWith("router") Router.UpdateRouter router);
-
-   /**
-    * Deletes the specified router
-    *
-    * @param id the id of the router to delete
-    * @return true if delete successful, false if not
-    */
-   @Named("router:delete")
-   @DELETE
-   @Path("/{id}")
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean delete(@PathParam("id") String id);
-
-   /**
-    * Add a interface to a router to connect to the specified subnet
-    *
-    * @param routerId the id of the router to create the interface at
-    * @param subnetId the id of the subnet to connect with the interface
-    * @return the newly-created router interface
-    */
-   @Named("router:addInterfaceForSubnet")
-   @PUT
-   @Path("/{id}/add_router_interface")
-   @MapBinder(EmptyOptions.class)
-   RouterInterface addInterfaceForSubnet(@PathParam("id") String routerId, @PayloadParam("subnet_id") String subnetId);
-
-   /**
-    * Add a interface to a router to connect to the specified port
-    *
-    * @param routerId the id of the router to create the interface at
-    * @param portId the id of the port to connect with the interface
-    * @return the newly-created router interface
-    */
-   @Named("router:addInterfaceForPort")
-   @PUT
-   @Path("/{id}/add_router_interface")
-   @MapBinder(EmptyOptions.class)
-   RouterInterface addInterfaceForPort(@PathParam("id") String routerId, @PayloadParam("port_id") String portId);
-
-   /**
-    * Remove the interface where the specified subnet is connected to
-    *
-    * @param routerId the id of the router to remove the interface from
-    * @param subnetId the id of the subnet to disconnect from the interface
-    */
-   @Named("router:removeInterfaceForSubnet")
-   @PUT
-   @Path("/{id}/remove_router_interface")
-   @MapBinder(EmptyOptions.class)
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean removeInterfaceForSubnet(@PathParam("id") String routerId, @PayloadParam("subnet_id") String subnetId);
-
-   /**
-    * Remove the interface where the specified port is connected to
-    *
-    * @param routerId the id of the router to remove the interface from
-    * @param portId the id of the port to disconnect from the interface
-    */
-   @Named("router:removeInterfaceForPort")
-   @PUT
-   @Path("/{id}/remove_router_interface")
-   @MapBinder(EmptyOptions.class)
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean removeInterfaceForPort(@PathParam("id") String routerId, @PayloadParam("port_id") String portId);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/lbaas/v1/LBaaSApi.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/lbaas/v1/LBaaSApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/lbaas/v1/LBaaSApi.java
deleted file mode 100644
index f67c6e3..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/extensions/lbaas/v1/LBaaSApi.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.extensions.lbaas.v1;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.HealthMonitor;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.HealthMonitors;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.Member;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.Members;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.Pool;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.Pools;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.VIP;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.VIPs;
-import org.jclouds.openstack.neutron.v2.extensions.ExtensionNamespaces;
-import org.jclouds.openstack.neutron.v2.fallbacks.lbaas.v1.EmptyHealthMonitorsFallback;
-import org.jclouds.openstack.neutron.v2.fallbacks.lbaas.v1.EmptyMembersFallback;
-import org.jclouds.openstack.neutron.v2.fallbacks.lbaas.v1.EmptyPoolsFallback;
-import org.jclouds.openstack.neutron.v2.fallbacks.lbaas.v1.EmptyVIPsFallback;
-import org.jclouds.openstack.neutron.v2.functions.lbaas.v1.HealthMonitorsToPagedIterable;
-import org.jclouds.openstack.neutron.v2.functions.lbaas.v1.MembersToPagedIterable;
-import org.jclouds.openstack.neutron.v2.functions.lbaas.v1.ParseHealthMonitors;
-import org.jclouds.openstack.neutron.v2.functions.lbaas.v1.ParseMembers;
-import org.jclouds.openstack.neutron.v2.functions.lbaas.v1.ParsePools;
-import org.jclouds.openstack.neutron.v2.functions.lbaas.v1.ParseVIPs;
-import org.jclouds.openstack.neutron.v2.functions.lbaas.v1.PoolsToPagedIterable;
-import org.jclouds.openstack.neutron.v2.functions.lbaas.v1.VIPsToPagedIterable;
-import org.jclouds.openstack.v2_0.ServiceType;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.openstack.v2_0.services.Extension;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.Payload;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-import org.jclouds.rest.annotations.WrapWith;
-
-import com.google.common.annotations.Beta;
-
-/**
- * Provides access to load-balancing operations for the OpenStack Networking (Neutron) v2 API.
- * <p/>
- * LBaaS v1 is an extension to load-balance the traffic between instances and external networks.
- */
-@Beta
-@Extension(of = ServiceType.NETWORK, namespace = ExtensionNamespaces.LBAAS)
-@Path("/lb")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-public interface LBaaSApi {
-
-   /**
-    * Returns a list of VIPs to which the tenant has access. Default policy settings return only
-    * those VIPs that are owned by the tenant who submits the request, unless the request is submitted by an
-    * user with administrative rights.
-    *
-    * @return the list of all VIP references configured for the tenant.
-    */
-   @Named("vip:list")
-   @GET
-   @Path("/vips")
-   @Transform(VIPsToPagedIterable.class)
-   @ResponseParser(ParseVIPs.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<VIP> listVIPs();
-
-   /**
-    * @return the list of all VIP references configured for the tenant.
-    */
-   @Named("vip:list")
-   @GET
-   @Path("/vips")
-   @ResponseParser(ParseVIPs.class)
-   @Fallback(EmptyVIPsFallback.class)
-   VIPs listVIPs(PaginationOptions options);
-
-   /**
-    * Returns the details for a specific VIP.
-    *
-    * @param id the id of the VIP to return.
-    * @return VIP or null if not found.
-    */
-   @Named("vip:get")
-   @GET
-   @Path("/vips/{id}")
-   @SelectJson("vip")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Nullable
-   VIP getVIP(@PathParam("id") String id);
-
-   /**
-    * Creates a new VIP.
-    *
-    * @param vip describes the VIP to be created.
-    * @return a reference of the newly-created VIP.
-    */
-   @Named("vip:create")
-   @POST
-   @Path("/vips")
-   @SelectJson("vip")
-   VIP createVIP(@WrapWith("vip") VIP.CreateVIP vip);
-
-   /**
-    * Update a VIP.
-    *
-    * @param id the id of the VIP to update.
-    * @param vip the VIP's attributes to update.
-    * @return a reference of the updated VIP.
-    */
-   @Named("vip:update")
-   @PUT
-   @Path("/vips/{id}")
-   @SelectJson("vip")
-   VIP updateVIP(@PathParam("id") String id, @WrapWith("vip") VIP.UpdateVIP vip);
-
-   /**
-    * Deletes the specified VIP.
-    *
-    * @param id the id of the VIP to delete.
-    * @return true if delete successful, false if not.
-    */
-   @Named("vip:delete")
-   @DELETE
-   @Path("/vips/{id}")
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean deleteVIP(@PathParam("id") String id);
-
-   /**
-    * Returns a list of Pools to which the tenant has access. Default policy settings return only
-    * those Pools that are owned by the tenant who submits the request, unless the request is submitted by an
-    * user with administrative rights.
-    *
-    * @return the list of all Pool references configured for the tenant.
-    */
-   @Named("pool:list")
-   @GET
-   @Path("/pools")
-   @Transform(PoolsToPagedIterable.class)
-   @ResponseParser(ParsePools.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<Pool> listPools();
-
-   /**
-    * @return the list of all Pool references configured for the tenant.
-    */
-   @Named("pool:list")
-   @GET
-   @Path("/pools")
-   @ResponseParser(ParsePools.class)
-   @Fallback(EmptyPoolsFallback.class)
-   Pools listPools(PaginationOptions options);
-
-   /**
-    * Returns the details for a specific Pool.
-    *
-    * @param id the id of the Pool to return.
-    * @return Pool or null if not found.
-    */
-   @Named("pool:get")
-   @GET
-   @Path("/pools/{id}")
-   @SelectJson("pool")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Nullable
-   Pool getPool(@PathParam("id") String id);
-
-   /**
-    * Creates a new Pool.
-    *
-    * @param pool describes the Pool to be created.
-    * @return a reference of the newly-created Pool.
-    */
-   @Named("pool:create")
-   @POST
-   @Path("/pools")
-   @SelectJson("pool")
-   Pool createPool(@WrapWith("pool") Pool.CreatePool pool);
-
-   /**
-    * Update a Pool.
-    *
-    * @param id the id of the Pool to update.
-    * @param pool the Pool's attributes to update.
-    * @return a reference of the updated Pool.
-    */
-   @Named("pool:update")
-   @PUT
-   @Path("/pools/{id}")
-   @SelectJson("pool")
-   Pool updatePool(@PathParam("id") String id, @WrapWith("pool") Pool.UpdatePool pool);
-
-   /**
-    * Deletes the specified Pool.
-    *
-    * @param id the id of the Pool to delete.
-    * @return true if delete successful, false if not.
-    */
-   @Named("pool:delete")
-   @DELETE
-   @Path("/pools/{id}")
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean deletePool(@PathParam("id") String id);
-
-   /**
-    * Returns a list of Members to which the tenant has access. Default policy settings return only
-    * those Members that are owned by the tenant who submits the request, unless the request is submitted by an
-    * user with administrative rights.
-    *
-    * @return the list of all Member references configured for the tenant.
-    */
-   @Named("member:list")
-   @GET
-   @Path("/members")
-   @Transform(MembersToPagedIterable.class)
-   @ResponseParser(ParseMembers.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<Member> listMembers();
-
-   /**
-    * @return the list of all Member references configured for the tenant.
-    */
-   @Named("member:list")
-   @GET
-   @Path("/members")
-   @ResponseParser(ParseMembers.class)
-   @Fallback(EmptyMembersFallback.class)
-   Members listMembers(PaginationOptions options);
-
-   /**
-    * Returns the details for a specific Member.
-    *
-    * @param id the id of the Member to return.
-    * @return Member or null if not found.
-    */
-   @Named("member:get")
-   @GET
-   @Path("/members/{id}")
-   @SelectJson("member")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Nullable
-   Member getMember(@PathParam("id") String id);
-
-   /**
-    * Creates a new Member.
-    *
-    * @param member describes the Member to be created.
-    * @return a reference of the newly-created Member.
-    */
-   @Named("member:create")
-   @POST
-   @Path("/members")
-   @SelectJson("member")
-   Member createMember(@WrapWith("member") Member.CreateMember member);
-
-   /**
-    * Update a Member.
-    *
-    * @param id the id of the Member to update.
-    * @param member the Member's attributes to update.
-    * @return a reference of the updated Member.
-    */
-   @Named("member:update")
-   @PUT
-   @Path("/members/{id}")
-   @SelectJson("member")
-   Member updateMember(@PathParam("id") String id, @WrapWith("member") Member.UpdateMember member);
-
-   /**
-    * Deletes the specified Member.
-    *
-    * @param id the id of the Member to delete.
-    * @return true if delete successful, false if not.
-    */
-   @Named("member:delete")
-   @DELETE
-   @Path("/members/{id}")
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean deleteMember(@PathParam("id") String id);
-
-   /**
-    * Returns a list of HealthMonitors to which the tenant has access. Default policy settings return only
-    * those HealthMonitors that are owned by the tenant who submits the request, unless the request is submitted by an
-    * user with administrative rights.
-    *
-    * @return the list of all HealthMonitor references configured for the tenant.
-    */
-   @Named("health_monitor:list")
-   @GET
-   @Path("/health_monitors")
-   @Transform(HealthMonitorsToPagedIterable.class)
-   @ResponseParser(ParseHealthMonitors.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<HealthMonitor> listHealthMonitors();
-
-   /**
-    * @return the list of all HealthMonitor references configured for the tenant.
-    */
-   @Named("health_monitor:list")
-   @GET
-   @Path("/health_monitors")
-   @ResponseParser(ParseHealthMonitors.class)
-   @Fallback(EmptyHealthMonitorsFallback.class)
-   HealthMonitors listHealthMonitors(PaginationOptions options);
-
-   /**
-    * Returns the details for a specific HealthMonitor.
-    *
-    * @param id the id of the HealthMonitor to return.
-    * @return Health Monitor or null if not found.
-    */
-   @Named("health_monitor:get")
-   @GET
-   @Path("/health_monitors/{id}")
-   @SelectJson("health_monitor")
-   @Fallback(NullOnNotFoundOr404.class)
-   @Nullable
-   HealthMonitor getHealthMonitor(@PathParam("id") String id);
-
-   /**
-    * Creates a new HealthMonitor.
-    *
-    * @param healthMonitor describes the HealthMonitor to be created.
-    * @return a reference of the newly-created HealthMonitor.
-    */
-   @Named("health_monitor:create")
-   @POST
-   @Path("/health_monitors")
-   @SelectJson("health_monitor")
-   HealthMonitor createHealthMonitor(@WrapWith("health_monitor") HealthMonitor.CreateHealthMonitor healthMonitor);
-
-   /**
-    * Update a HealthMonitor.
-    *
-    * @param id the id of the HealthMonitor to update.
-    * @param healthMonitor the HealthMonitor's attributes to update.
-    * @return a reference of the updated HealthMonitor.
-    */
-   @Named("health_monitor:update")
-   @PUT
-   @Path("/health_monitors/{id}")
-   @SelectJson("health_monitor")
-   HealthMonitor updateHealthMonitor(@PathParam("id") String id,
-         @WrapWith("health_monitor") HealthMonitor.UpdateHealthMonitor healthMonitor);
-
-   /**
-    * Deletes the specified Health Monitor.
-    *
-    * @param id the id of the Health Monitor to delete.
-    * @return true if delete successful, false if not.
-    */
-   @Named("health_monitor:delete")
-   @DELETE
-   @Path("/health_monitors/{id}")
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean deleteHealthMonitor(@PathParam("id") String id);
-
-   /**
-    * Associate a HealthMonitor to a Pool.
-    *
-    * @param poolId the id of the Pool to associate.
-    * @param healthMonitorId the id of the HealthMonitor to associate.
-    * @return the newly associated HealthMonitor.
-    */
-   @Named("pool:associate_health_monitor")
-   @POST
-   @Path("/pools/{pool-id}/health_monitors")
-   @SelectJson("health_monitor")
-   @Payload("%7B\"health_monitor\":%7B\"id\":\"{healthMonitorId}\"%7D%7D")
-   @Produces(MediaType.APPLICATION_JSON)
-   HealthMonitor associateHealthMonitor(@PathParam("pool-id") String poolId,
-         @PayloadParam("healthMonitorId") String healthMonitorId);
-
-   /**
-    * Disassociate a HealthMonitor from a Pool.
-    *
-    * @param poolId the id of the Pool to disassociate.
-    * @param healthMonitorId the id of the HealthMonitor to disassociate.
-    * @return true if disassociate successful, false if not.
-    */
-   @Named("pool:disassociate_health_monitor")
-   @DELETE
-   @Path("/pools/{pool-id}/health_monitors/{health-monitor-id}")
-   @Fallback(FalseOnNotFoundOr404.class)
-   boolean disassociateHealthMonitor(@PathParam("pool-id") String poolId,
-         @PathParam("health-monitor-id") String healthMonitorId);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyFloatingIPsFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyFloatingIPsFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyFloatingIPsFallback.java
deleted file mode 100644
index ede9046..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyFloatingIPsFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.FloatingIPs;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptyFloatingIPsFallback implements Fallback<FloatingIPs> {
-   @Override
-   public FloatingIPs createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return FloatingIPs.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyNetworksFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyNetworksFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyNetworksFallback.java
deleted file mode 100644
index 8410afb..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyNetworksFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.Networks;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptyNetworksFallback implements Fallback<Networks> {
-   @Override
-   public Networks createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return Networks.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyPortsFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyPortsFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyPortsFallback.java
deleted file mode 100644
index ac2e0db..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyPortsFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.Ports;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptyPortsFallback implements Fallback<Ports> {
-   @Override
-   public Ports createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return Ports.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyRoutersFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyRoutersFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyRoutersFallback.java
deleted file mode 100644
index 8b74be2..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyRoutersFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.Routers;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptyRoutersFallback implements Fallback<Routers> {
-   @Override
-   public Routers createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return Routers.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyRulesFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyRulesFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyRulesFallback.java
deleted file mode 100644
index 4556f74..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptyRulesFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.Rules;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptyRulesFallback implements Fallback<Rules> {
-   @Override
-   public Rules createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return Rules.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptySecurityGroupsFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptySecurityGroupsFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptySecurityGroupsFallback.java
deleted file mode 100644
index 70a3e37..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptySecurityGroupsFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.SecurityGroups;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptySecurityGroupsFallback implements Fallback<SecurityGroups> {
-   @Override
-   public SecurityGroups createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return SecurityGroups.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptySubnetsFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptySubnetsFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptySubnetsFallback.java
deleted file mode 100644
index 8f7a94a..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/EmptySubnetsFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.Subnets;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptySubnetsFallback implements Fallback<Subnets> {
-   @Override
-   public Subnets createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return Subnets.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyHealthMonitorsFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyHealthMonitorsFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyHealthMonitorsFallback.java
deleted file mode 100644
index 8364fba..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyHealthMonitorsFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks.lbaas.v1;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.HealthMonitors;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptyHealthMonitorsFallback implements Fallback<HealthMonitors> {
-   @Override
-   public HealthMonitors createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return HealthMonitors.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyMembersFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyMembersFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyMembersFallback.java
deleted file mode 100644
index 9cb8084..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyMembersFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks.lbaas.v1;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.Members;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptyMembersFallback implements Fallback<Members> {
-   @Override
-   public Members createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return Members.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyPoolsFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyPoolsFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyPoolsFallback.java
deleted file mode 100644
index 0c2ce99..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyPoolsFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks.lbaas.v1;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.Pools;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptyPoolsFallback implements Fallback<Pools> {
-   @Override
-   public Pools createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return Pools.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyVIPsFallback.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyVIPsFallback.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyVIPsFallback.java
deleted file mode 100644
index 4dfae2d..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/fallbacks/lbaas/v1/EmptyVIPsFallback.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.fallbacks.lbaas.v1;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.http.HttpUtils.contains404;
-import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
-
-import org.jclouds.Fallback;
-import org.jclouds.openstack.neutron.v2.domain.lbaas.v1.VIPs;
-import org.jclouds.rest.ResourceNotFoundException;
-
-public class EmptyVIPsFallback implements Fallback<VIPs> {
-   @Override
-   public VIPs createOrPropagate(Throwable t) throws Exception {
-      if ((getFirstThrowableOfType(checkNotNull(t, "throwable"), ResourceNotFoundException.class) != null)
-            || contains404(t)) {
-         return VIPs.EMPTY;
-      }
-      throw propagate(t);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/NetworkApi.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/NetworkApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/NetworkApi.java
deleted file mode 100644
index af908fc..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/NetworkApi.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks;
-import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2.domain.Network;
-import org.jclouds.openstack.neutron.v2.domain.Networks;
-import org.jclouds.openstack.neutron.v2.fallbacks.EmptyNetworksFallback;
-import org.jclouds.openstack.neutron.v2.functions.NetworksToPagedIterable;
-import org.jclouds.openstack.neutron.v2.functions.ParseNetworks;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-import org.jclouds.rest.annotations.WrapWith;
-
-import com.google.common.annotations.Beta;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
-
-/**
- * Provides access to Network operations for the OpenStack Networking (Neutron) v2 API.
- * <p/>
- * Each tenant can define one or more networks. A network is a virtual isolated layer-2 broadcast domain reserved to the
- * tenant. A tenant can create several ports for a network, and plug virtual interfaces into these ports.
- *
- * @see <a href=
- *      "http://docs.openstack.org/api/openstack-network/2.0/content/Networks.html">api doc</a>
- */
-@Beta
-@Path("/networks")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-@Produces(MediaType.APPLICATION_JSON)
-public interface NetworkApi {
-
-   /**
-    * Returns all networks currently defined in Neutron for the current tenant.
-    *
-    * @return the list of all networks configured for the tenant
-    */
-   @Named("network:list")
-   @GET
-   @ResponseParser(ParseNetworks.class)
-   @Transform(NetworksToPagedIterable.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<Network> list();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("network:list")
-   @GET
-   @ResponseParser(ParseNetworks.class)
-   @Fallback(EmptyNetworksFallback.class)
-   Networks list(PaginationOptions options);
-
-   /**
-    * Return a specific network
-    *
-    * @param id the id of the network to return
-    * @return Network or null if not found
-    */
-   @Named("network:get")
-   @GET
-   @Path("/{id}")
-   @SelectJson("network")
-   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-   @Nullable
-   Network get(@PathParam("id") String id);
-
-   /**
-    * Create a new network with the specified type
-    *
-    * @param network Describes the network to be created.
-    * @return a reference of the newly-created network
-    */
-   @Named("network:create")
-   @POST
-   @SelectJson("network")
-   Network create(@WrapWith("network") Network.CreateNetwork network);
-
-   /**
-    * Create multiple networks
-    *
-    * @param networks the bulk of networks to create
-    * @return list of references of the newly-created networks
-    */
-   @Named("network:createBulk")
-   @POST
-   @SelectJson("networks")
-   FluentIterable<Network> createBulk(@WrapWith("networks") ImmutableList<Network.CreateNetwork> networks);
-
-   /**
-    * Update a network
-    *
-    * @param id the id of the network to update
-    * @param network the network to update
-    * @return true if update successful, false if not
-    */
-   @Named("network:update")
-   @PUT
-   @Path("/{id}")
-   @SelectJson("network")
-   Network update(@PathParam("id") String id, @WrapWith("network") Network.UpdateNetwork network);
-
-   /**
-    * Deletes the specified network
-    *
-    * @param id the id of the network to delete
-    * @return true if delete was successful, false if not
-    */
-   @Named("network:delete")
-   @DELETE
-   @Path("/{id}")
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean delete(@PathParam("id") String id);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/PortApi.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/PortApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/PortApi.java
deleted file mode 100644
index 3cd0e35..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/PortApi.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
-
-import java.util.List;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks;
-import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2.domain.Port;
-import org.jclouds.openstack.neutron.v2.domain.Ports;
-import org.jclouds.openstack.neutron.v2.fallbacks.EmptyPortsFallback;
-import org.jclouds.openstack.neutron.v2.functions.ParsePorts;
-import org.jclouds.openstack.neutron.v2.functions.PortsToPagedIterable;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-import org.jclouds.rest.annotations.WrapWith;
-
-import com.google.common.annotations.Beta;
-import com.google.common.collect.FluentIterable;
-
-/**
- * Provides access to Port operations for the OpenStack Networking (Neutron) v2 API.
- * <p/>
- * A port represents a virtual switch port on a logical network switch where all the interfaces attached to a given network are connected.
- * <p/>
- * A port has an administrative state which is either 'DOWN' or 'ACTIVE'. Ports which are administratively down will not be able to receive/send traffic.
- * @see <a href=
- *      "http://docs.openstack.org/api/openstack-network/2.0/content/Ports.html">api doc</a>
- */
-@Beta
-@Path("/ports")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-public interface PortApi {
-
-   /**
-    * Returns the list of all ports currently defined in Neutron for the current tenant. The list provides the unique
-    * identifier of each network configured for the tenant.
-    *
-    * @return the list of all port references configured for the tenant
-    */
-   @Named("port:list")
-   @GET
-   @Transform(PortsToPagedIterable.class)
-   @ResponseParser(ParsePorts.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<Port> list();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("port:list")
-   @GET
-   @ResponseParser(ParsePorts.class)
-   @Fallback(EmptyPortsFallback.class)
-   Ports list(PaginationOptions options);
-
-   /**
-    * Returns the specific port
-    *
-    * @param id the id of the port to return
-    * @return Port or null if not found
-    */
-   @Named("port:get")
-   @GET
-   @Path("/{id}")
-   @SelectJson("port")
-   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-   @Nullable
-   Port get(@PathParam("id") String id);
-
-   /**
-    * Create a new port in the specified network
-    *
-    * @param port the port details
-    * @return a reference of the newly-created port
-    */
-   @Named("port:create")
-   @POST
-   @SelectJson("port")
-   Port create(@WrapWith("port") Port.CreatePort port);
-
-   /**
-    * Create multiple ports
-    *
-    * @param ports the bulk of ports to create
-    * @return list of references of the newly-created ports
-    */
-   @Named("port:createBulk")
-   @POST
-   @SelectJson("ports")
-   FluentIterable<Port> createBulk(@WrapWith("ports") List<Port.CreatePort> ports);
-
-   /**
-    * Update a port
-    *
-    * @param id the id of the port to update
-    * @param port CreatePort with just the attributes to update
-    * @return true if update successful, false if not
-    */
-   @Named("port:update")
-   @PUT
-   @Path("/{id}")
-   @SelectJson("port")
-   Port update(@PathParam("id") String id, @WrapWith("port") Port.UpdatePort port);
-
-   /**
-    * Delete a port
-    *
-    * @param id the id of the port to delete
-    * @return true if delete successful, false if not
-    */
-   @Named("port:delete")
-   @DELETE
-   @Path("/{id}")
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean delete(@PathParam("id") String id);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/35142182/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApi.java
----------------------------------------------------------------------
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApi.java
deleted file mode 100644
index 3646c17..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2/features/SecurityGroupApi.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.jclouds.openstack.neutron.v2.features;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks;
-import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2.domain.Rule;
-import org.jclouds.openstack.neutron.v2.domain.Rules;
-import org.jclouds.openstack.neutron.v2.domain.SecurityGroup;
-import org.jclouds.openstack.neutron.v2.domain.SecurityGroups;
-import org.jclouds.openstack.neutron.v2.fallbacks.EmptyRulesFallback;
-import org.jclouds.openstack.neutron.v2.fallbacks.EmptySecurityGroupsFallback;
-import org.jclouds.openstack.neutron.v2.functions.ParseRules;
-import org.jclouds.openstack.neutron.v2.functions.ParseSecurityGroups;
-import org.jclouds.openstack.neutron.v2.functions.RulesToPagedIterable;
-import org.jclouds.openstack.neutron.v2.functions.SecurityGroupsToPagedIterable;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-import org.jclouds.rest.annotations.WrapWith;
-
-import com.google.common.annotations.Beta;
-
-/**
- * Provides access to Security Group extension operations for the OpenStack Networking (Neutron) v2 API.
- * <p/>
- * Security groups and security group rules allows administrators and tenants the ability to specify the type of
- * traffic and direction (ingress/egress) that is allowed to pass through a port. A security group is a container for
- * security group rules.
- */
-@Beta
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-@Produces(MediaType.APPLICATION_JSON)
-public interface SecurityGroupApi {
-
-   /**
-    * @return all security groups currently defined in Neutron for the current tenant.
-    */
-   @Path("/security-groups")
-   @Named("security-group:list")
-   @GET
-   @ResponseParser(ParseSecurityGroups.class)
-   @Transform(SecurityGroupsToPagedIterable.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<SecurityGroup> listSecurityGroups();
-
-   /**
-    * @return all security groups currently defined in Neutron for the current tenant.
-    */
-   @Path("/security-groups")
-   @Named("security-group:list")
-   @GET
-   @ResponseParser(ParseSecurityGroups.class)
-   @Fallback(EmptySecurityGroupsFallback.class)
-   SecurityGroups listSecurityGroups(PaginationOptions options);
-
-   /**
-    * @param id the id of the security group to return
-    * @return SecurityGroup or null if not found.
-    */
-   @Path("/security-groups/{id}")
-   @Named("security-group:get")
-   @GET
-   @SelectJson("security_group")
-   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-   @Nullable
-   SecurityGroup getSecurityGroup(@PathParam("id") String id);
-
-   /**
-    * Creates a new SecurityGroup.
-    *
-    * @param securityGroup Describes the security group to be created.
-    * @return a reference of the newly-created security group
-    */
-   @Path("/security-groups")
-   @Named("secuity-group:create")
-   @POST
-   @SelectJson("security_group")
-   SecurityGroup create(@WrapWith("security_group") SecurityGroup.CreateSecurityGroup securityGroup);
-
-   /**
-    * Deletes the specified Security Group.
-    *
-    * @param id the id of the security group to delete
-    * @return true if delete was successful, false if not
-    */
-   @Path("/security-groups/{id}")
-   @Named("security-group:delete")
-   @DELETE
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean deleteSecurityGroup(@PathParam("id") String id);
-
-   /**
-    * Rules
-    */
-
-   /**
-    * @return all security groups rules currently defined in Neutron for the current tenant.
-    */
-   @Path("/security-group-rules")
-   @Named("security-group-rule:list")
-   @GET
-   @ResponseParser(ParseRules.class)
-   @Transform(RulesToPagedIterable.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<Rule> listRules();
-
-   /**
-    * @return all security groups rules currently defined in Neutron for the current tenant.
-    */
-   @Path("/security-group-rules")
-   @Named("security-group-rule:list")
-   @GET
-   @ResponseParser(ParseRules.class)
-   @Fallback(EmptyRulesFallback.class)
-   Rules listRules(PaginationOptions options);
-
-   /**
-    * @param id the id of the security group rule to return.
-    * @return SecurityGroupRule or null if not found.
-    */
-   @Path("/security-group-rules/{id}")
-   @Named("security-group-rule:get")
-   @GET
-   @SelectJson("security_group_rule")
-   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-   @Nullable
-   Rule get(@PathParam("id") String id);
-
-   /**
-    * Creates a new Security Group Rule.
-    *
-    * @param securityGroupRule Describes the security group rule to be created.
-    * @return a reference of the newly-created security group rule.
-    */
-   @Path("/security-group-rules")
-   @Named("security-group-rule:create")
-   @POST
-   @SelectJson("security_group_rule")
-   Rule create(@WrapWith("security_group_rule") Rule.CreateRule securityGroupRule);
-
-   /**
-    * Deletes the specified Security Group Rule.
-    *
-    * @param id the id of the security group rule to delete.
-    * @return true if delete was successful, false if not.
-    */
-   @Path("/security-group-rules/{id}")
-   @Named("security-group-rule:delete")
-   @DELETE
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean deleteRule(@PathParam("id") String id);
-}