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 2014/11/27 15:32:30 UTC

[15/24] jclouds-labs git commit: JCLOUDS-785: Leave only Abiquo skeleton to start coding Abiquo 3 provider

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/features/InfrastructureApi.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/InfrastructureApi.java b/abiquo/src/main/java/org/jclouds/abiquo/features/InfrastructureApi.java
deleted file mode 100644
index 6b12a4b..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/features/InfrastructureApi.java
+++ /dev/null
@@ -1,1367 +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.abiquo.features;
-
-import java.io.Closeable;
-
-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.QueryParam;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.abiquo.AbiquoFallbacks.FalseIfNotAvailable;
-import org.jclouds.abiquo.AbiquoFallbacks.PropagateAbiquoExceptionOnNotFoundOr4xx;
-import org.jclouds.abiquo.binders.AppendToPath;
-import org.jclouds.abiquo.binders.BindToPath;
-import org.jclouds.abiquo.binders.BindToXMLPayloadAndPath;
-import org.jclouds.abiquo.binders.infrastructure.AppendMachineIdToPath;
-import org.jclouds.abiquo.binders.infrastructure.AppendRemoteServiceTypeToPath;
-import org.jclouds.abiquo.binders.infrastructure.BindSupportedDevicesLinkToPath;
-import org.jclouds.abiquo.domain.PaginatedCollection;
-import org.jclouds.abiquo.domain.infrastructure.options.DatacenterOptions;
-import org.jclouds.abiquo.domain.infrastructure.options.IpmiOptions;
-import org.jclouds.abiquo.domain.infrastructure.options.MachineOptions;
-import org.jclouds.abiquo.domain.infrastructure.options.StoragePoolOptions;
-import org.jclouds.abiquo.domain.network.options.IpOptions;
-import org.jclouds.abiquo.domain.network.options.NetworkOptions;
-import org.jclouds.abiquo.functions.infrastructure.ParseDatacenterId;
-import org.jclouds.abiquo.functions.pagination.ParseExternalIps;
-import org.jclouds.abiquo.functions.pagination.ParsePublicIps;
-import org.jclouds.abiquo.functions.pagination.ParseUnmanagedIps;
-import org.jclouds.abiquo.http.filters.AbiquoAuthentication;
-import org.jclouds.abiquo.http.filters.AppendApiVersionToMediaType;
-import org.jclouds.abiquo.rest.annotations.EndpointLink;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.http.functions.ReturnStringIf2xx;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.ParamParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SinceApiVersion;
-import org.jclouds.rest.annotations.Transform;
-import org.jclouds.rest.binders.BindToXMLPayload;
-
-import com.abiquo.model.enumerator.HypervisorType;
-import com.abiquo.model.enumerator.RemoteServiceType;
-import com.abiquo.server.core.cloud.HypervisorTypesDto;
-import com.abiquo.server.core.cloud.VirtualMachineWithNodeExtendedDto;
-import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto;
-import com.abiquo.server.core.enterprise.DatacentersLimitsDto;
-import com.abiquo.server.core.enterprise.EnterpriseDto;
-import com.abiquo.server.core.infrastructure.DatacenterDto;
-import com.abiquo.server.core.infrastructure.DatacentersDto;
-import com.abiquo.server.core.infrastructure.MachineDto;
-import com.abiquo.server.core.infrastructure.MachineIpmiStateDto;
-import com.abiquo.server.core.infrastructure.MachineStateDto;
-import com.abiquo.server.core.infrastructure.MachinesDto;
-import com.abiquo.server.core.infrastructure.RackDto;
-import com.abiquo.server.core.infrastructure.RacksDto;
-import com.abiquo.server.core.infrastructure.RemoteServiceDto;
-import com.abiquo.server.core.infrastructure.RemoteServicesDto;
-import com.abiquo.server.core.infrastructure.network.ExternalIpDto;
-import com.abiquo.server.core.infrastructure.network.ExternalIpsDto;
-import com.abiquo.server.core.infrastructure.network.NetworkServiceTypeDto;
-import com.abiquo.server.core.infrastructure.network.NetworkServiceTypesDto;
-import com.abiquo.server.core.infrastructure.network.PublicIpDto;
-import com.abiquo.server.core.infrastructure.network.PublicIpsDto;
-import com.abiquo.server.core.infrastructure.network.UnmanagedIpDto;
-import com.abiquo.server.core.infrastructure.network.UnmanagedIpsDto;
-import com.abiquo.server.core.infrastructure.network.VLANNetworkDto;
-import com.abiquo.server.core.infrastructure.network.VLANNetworksDto;
-import com.abiquo.server.core.infrastructure.network.VlanTagAvailabilityDto;
-import com.abiquo.server.core.infrastructure.storage.StorageDeviceDto;
-import com.abiquo.server.core.infrastructure.storage.StorageDevicesDto;
-import com.abiquo.server.core.infrastructure.storage.StorageDevicesMetadataDto;
-import com.abiquo.server.core.infrastructure.storage.StoragePoolDto;
-import com.abiquo.server.core.infrastructure.storage.StoragePoolsDto;
-import com.abiquo.server.core.infrastructure.storage.TierDto;
-import com.abiquo.server.core.infrastructure.storage.TiersDto;
-
-/**
- * Provides synchronous access to Abiquo Infrastructure API.
- * 
- * @see API: <a href="http://community.abiquo.com/display/ABI20/API+Reference">
- *      http://community.abiquo.com/display/ABI20/API+Reference</a>
- */
-@RequestFilters({ AbiquoAuthentication.class, AppendApiVersionToMediaType.class })
-@Path("/admin")
-public interface InfrastructureApi extends Closeable {
-   /*********************** Datacenter ***********************/
-
-   /**
-    * List all datacenters.
-    * 
-    * @return The list of Datacenters.
-    */
-   @Named("datacenter:list")
-   @GET
-   @Path("/datacenters")
-   @Consumes(DatacentersDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   DatacentersDto listDatacenters();
-
-   /**
-    * Create a new datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter to be created.
-    * @return The created datacenter.
-    */
-   @Named("datacenter:create")
-   @POST
-   @Path("/datacenters")
-   @Produces(DatacenterDto.BASE_MEDIA_TYPE)
-   @Consumes(DatacenterDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   DatacenterDto createDatacenter(@BinderParam(BindToXMLPayload.class) DatacenterDto datacenter);
-
-   /**
-    * Get the given datacenter.
-    * 
-    * @param datacenterId
-    *           The id of the datacenter.
-    * @return The datacenter or <code>null</code> if it does not exist.
-    */
-   @Named("datacenter:get")
-   @GET
-   @Path("/datacenters/{datacenter}")
-   @Consumes(DatacenterDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   DatacenterDto getDatacenter(@PathParam("datacenter") Integer datacenterId);
-
-   /**
-    * Updates an existing datacenter.
-    * 
-    * @param datacenter
-    *           The new attributes for the datacenter.
-    * @return The updated datacenter.
-    */
-   @Named("datacenter:update")
-   @PUT
-   @Produces(DatacenterDto.BASE_MEDIA_TYPE)
-   @Consumes(DatacenterDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   DatacenterDto updateDatacenter(
-         @EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) DatacenterDto datacenter);
-
-   /**
-    * Deletes an existing datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter to delete.
-    */
-   @Named("datacenter:delete")
-   @DELETE
-   void deleteDatacenter(@EndpointLink("edit") @BinderParam(BindToPath.class) DatacenterDto datacenter);
-
-   /**
-    * Retrieve remote machine information.
-    * 
-    * @see API: <a href=
-    *      "http://community.abiquo.com/display/ABI20/DatacenterResource#DatacenterResource-Retrieveremotemachineinformation"
-    *      > http://community.abiquo.com/display/ABI20/DatacenterResource#
-    *      DatacenterResource- Retrieveremotemachineinformation</a>
-    * @param datacenter
-    *           The datacenter.
-    * @param ip
-    *           IP address of the remote hypervisor to connect.
-    * @param hypervisorType
-    *           Kind of hypervisor we want to connect. Valid values are {vbox,
-    *           kvm, xen-3, vmx-04, hyperv-301, xenserver}.
-    * @param user
-    *           User to log in.
-    * @param password
-    *           Password to authenticate.
-    * @return The physical machine.
-    */
-   @Named("machine:discover")
-   @GET
-   @Consumes(MachineDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(PropagateAbiquoExceptionOnNotFoundOr4xx.class)
-   MachineDto discoverSingleMachine(
-         @EndpointLink("discoversingle") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @QueryParam("ip") String ip, @QueryParam("hypervisor") HypervisorType hypervisorType,
-         @QueryParam("user") String user, @QueryParam("password") String password);
-
-   /**
-    * Retrieve remote machine information.
-    * 
-    * @see API: <a href=
-    *      "http://community.abiquo.com/display/ABI20/DatacenterResource#DatacenterResource-Retrieveremotemachineinformation"
-    *      > http://community.abiquo.com/display/ABI20/DatacenterResource#
-    *      DatacenterResource- Retrieveremotemachineinformation</a>
-    * @param datacenter
-    *           The datacenter.
-    * @param ip
-    *           IP address of the remote hypervisor to connect.
-    * @param hypervisorType
-    *           Kind of hypervisor we want to connect. Valid values are {vbox,
-    *           kvm, xen-3, vmx-04, hyperv-301, xenserver}.
-    * @param user
-    *           User to log in.
-    * @param password
-    *           Password to authenticate.
-    * @param options
-    *           Optional query params.
-    * @return The physical machine.
-    */
-   @Named("machine:discover")
-   @GET
-   @Consumes(MachineDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(PropagateAbiquoExceptionOnNotFoundOr4xx.class)
-   MachineDto discoverSingleMachine(
-         @EndpointLink("discoversingle") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @QueryParam("ip") String ip, @QueryParam("hypervisor") HypervisorType hypervisorType,
-         @QueryParam("user") String user, @QueryParam("password") String password, MachineOptions options);
-
-   /**
-    * Retrieve a list of remote machine information.
-    * 
-    * @see API: <a href=
-    *      "http://community.abiquo.com/display/ABI20/DatacenterResource#DatacenterResource-Retrievealistofremotemachineinformation"
-    *      > http://community.abiquo.com/display/ABI20/DatacenterResource#
-    *      DatacenterResource- Retrievealistofremotemachineinformation</a>
-    * @param datacenter
-    *           The datacenter.
-    * @param ipFrom
-    *           IP address of the remote first hypervisor to check.
-    * @param ipTo
-    *           IP address of the remote last hypervisor to check.
-    * @param hypervisorType
-    *           Kind of hypervisor we want to connect. Valid values are {vbox,
-    *           kvm, xen-3, vmx-04, hyperv-301, xenserver}.
-    * @param user
-    *           User to log in.
-    * @param password
-    *           Password to authenticate.
-    * @return The physical machine list.
-    */
-   @Named("machine:discover")
-   @GET
-   @Consumes(MachinesDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(PropagateAbiquoExceptionOnNotFoundOr4xx.class)
-   MachineDto discoverMultipleMachines(
-         @EndpointLink("discovermultiple") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @QueryParam("ipFrom") String ipFrom, @QueryParam("ipTo") String ipTo,
-         @QueryParam("hypervisor") HypervisorType hypervisorType, @QueryParam("user") String user,
-         @QueryParam("password") String password);
-
-   /**
-    * Retrieve a list of remote machine information.
-    * 
-    * @see API: <a href=
-    *      "http://community.abiquo.com/display/ABI20/DatacenterResource#DatacenterResource-Retrievealistofremotemachineinformation"
-    *      > http://community.abiquo.com/display/ABI20/DatacenterResource#
-    *      DatacenterResource- Retrievealistofremotemachineinformation</a>
-    * @param datacenter
-    *           The datacenter.
-    * @param ipFrom
-    *           IP address of the remote first hypervisor to check.
-    * @param ipTo
-    *           IP address of the remote last hypervisor to check.
-    * @param hypervisorType
-    *           Kind of hypervisor we want to connect. Valid values are {vbox,
-    *           kvm, xen-3, vmx-04, hyperv-301, xenserver}.
-    * @param user
-    *           User to log in.
-    * @param password
-    *           Password to authenticate.
-    * @param options
-    *           Optional query params.
-    * @return The physical machine list.
-    */
-   @Named("machine:discover")
-   @GET
-   @Consumes(MachinesDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(PropagateAbiquoExceptionOnNotFoundOr4xx.class)
-   MachinesDto discoverMultipleMachines(
-         @EndpointLink("discovermultiple") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @QueryParam("ipFrom") String ipFrom, @QueryParam("ipTo") String ipTo,
-         @QueryParam("hypervisor") HypervisorType hypervisorType, @QueryParam("user") String user,
-         @QueryParam("password") String password, MachineOptions options);
-
-   /**
-    * Retrieves limits for the given datacenter and any enterprise.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @return The usage limits for the datacenter on any enterprise.
-    */
-   @Named("limit:list")
-   @GET
-   @Consumes(DatacentersLimitsDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   DatacentersLimitsDto listLimits(@EndpointLink("getLimits") @BinderParam(BindToPath.class) DatacenterDto datacenter);
-
-   /**
-    * Check the state of a remote machine. This machine does not need to be
-    * managed by Abiquo.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param ip
-    *           IP address of the remote hypervisor to connect.
-    * @param hypervisorType
-    *           Kind of hypervisor we want to connect. Valid values are {vbox,
-    *           kvm, xen-3, vmx-04, hyperv-301, xenserver}.
-    * @param user
-    *           User to log in.
-    * @param password
-    *           Password to authenticate.
-    * @return The physical machine state information.
-    */
-   @Named("machine:checkstate")
-   @GET
-   @Consumes(MachineStateDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(PropagateAbiquoExceptionOnNotFoundOr4xx.class)
-   MachineStateDto checkMachineState(
-         @EndpointLink("checkmachinestate") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @QueryParam("ip") String ip, @QueryParam("hypervisor") HypervisorType hypervisorType,
-         @QueryParam("user") String user, @QueryParam("password") String password);
-
-   /**
-    * Check the state of a remote machine. This machine does not need to be
-    * managed by Abiquo.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param ip
-    *           IP address of the remote hypervisor to connect.
-    * @param hypervisorType
-    *           Kind of hypervisor we want to connect. Valid values are {vbox,
-    *           kvm, xen-3, vmx-04, hyperv-301, xenserver}.
-    * @param user
-    *           User to log in.
-    * @param password
-    *           Password to authenticate.
-    * @param options
-    *           Optional query params.
-    * @return The physical machine state information.
-    */
-   @Named("machine:checkstate")
-   @GET
-   @Consumes(MachineStateDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(PropagateAbiquoExceptionOnNotFoundOr4xx.class)
-   MachineStateDto checkMachineState(
-         @EndpointLink("checkmachinestate") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @QueryParam("ip") String ip, @QueryParam("hypervisor") HypervisorType hypervisorType,
-         @QueryParam("user") String user, @QueryParam("password") String password, MachineOptions options);
-
-   /**
-    * Check the ipmi configuration state of a remote machine. This machine does
-    * not need to be managed by Abiquo.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param ip
-    *           IP address of the remote hypervisor to connect.
-    * @param user
-    *           User to log in.
-    * @param password
-    *           Password to authenticate.
-    * @return The ipmi configuration state information
-    */
-   @Named("machine:checkipmi")
-   @GET
-   @Consumes(MachineIpmiStateDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(PropagateAbiquoExceptionOnNotFoundOr4xx.class)
-   MachineIpmiStateDto checkMachineIpmiState(
-         @EndpointLink("checkmachineipmistate") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @QueryParam("ip") String ip, @QueryParam("user") String user, @QueryParam("password") String password);
-
-   /**
-    * Check the ipmi configuration state of a remote machine. This machine does
-    * not need to be managed by Abiquo.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param ip
-    *           IP address of the remote hypervisor to connect.
-    * @param user
-    *           User to log in.
-    * @param password
-    *           Password to authenticate.
-    * @param options
-    *           Optional query params.
-    * @return The ipmi configuration state information
-    */
-   @Named("machine:checkipmi")
-   @GET
-   @Consumes(MachineIpmiStateDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(PropagateAbiquoExceptionOnNotFoundOr4xx.class)
-   MachineIpmiStateDto checkMachineIpmiState(
-         @EndpointLink("checkmachineipmistate") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @QueryParam("ip") String ip, @QueryParam("user") String user, @QueryParam("password") String password,
-         IpmiOptions options);
-
-   /*********************** Hypervisor ***********************/
-
-   /**
-    * Retrieves the hypervisor type of a remote a machine.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param options
-    *           Optional query params.
-    * @return The hypervisor type.
-    */
-   @Named("hypervisortype:getfrommachine")
-   @GET
-   @Consumes(MediaType.TEXT_PLAIN)
-   @ResponseParser(ReturnStringIf2xx.class)
-   String getHypervisorTypeFromMachine(
-         @EndpointLink("hypervisor") @BinderParam(BindToPath.class) DatacenterDto datacenter, DatacenterOptions options);
-
-   /**
-    * Retrieves the hypervisor types in the datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @return The hypervisor types.
-    */
-   @Named("hypervisortype:list")
-   @GET
-   @Consumes(HypervisorTypesDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   HypervisorTypesDto getHypervisorTypes(
-         @EndpointLink("hypervisors") @BinderParam(BindToPath.class) DatacenterDto datacenter);
-
-   /*********************** Unmanaged Rack ********************** */
-
-   /**
-    * List all not managed racks for a datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @return The list of not managed racks for the datacenter.
-    */
-   @Named("rack:list")
-   @GET
-   @Consumes(RacksDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   RacksDto listRacks(@EndpointLink("racks") @BinderParam(BindToPath.class) DatacenterDto datacenter);
-
-   /**
-    * Create a new not managed rack in a datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param rack
-    *           The rack to be created.
-    * @return The created rack.
-    */
-   @Named("rack:create")
-   @POST
-   @Produces(RackDto.BASE_MEDIA_TYPE)
-   @Consumes(RackDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   RackDto createRack(@EndpointLink("racks") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(BindToXMLPayload.class) RackDto rack);
-
-   /**
-    * Get the given rack from the given datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param rackId
-    *           The id of the rack.
-    * @return The rack or <code>null</code> if it does not exist.
-    */
-   @Named("rack:get")
-   @GET
-   @Consumes(RackDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   RackDto getRack(@EndpointLink("racks") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(AppendToPath.class) Integer rackId);
-
-   /**
-    * Updates an existing rack from the given datacenter.
-    * 
-    * @param rack
-    *           The new attributes for the rack.
-    * @return The updated rack.
-    */
-   @Named("rack:update")
-   @PUT
-   @Consumes(RackDto.BASE_MEDIA_TYPE)
-   @Produces(RackDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   RackDto updateRack(@EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) RackDto rack);
-
-   /**
-    * Deletes an existing rack.
-    * 
-    * @param rack
-    *           The rack to delete.
-    */
-   @Named("rack:delete")
-   @DELETE
-   void deleteRack(@EndpointLink("edit") @BinderParam(BindToPath.class) RackDto rack);
-
-   /*********************** Remote Service ********************** */
-
-   /**
-    * List all remote services of the datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @return The list of remote services for the datacenter.
-    */
-   @Named("rs:list")
-   @GET
-   @Consumes(RemoteServicesDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   RemoteServicesDto listRemoteServices(
-         @EndpointLink("remoteservices") @BinderParam(BindToPath.class) DatacenterDto datacenter);
-
-   /**
-    * Create a new remote service in a datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param remoteService
-    *           The remote service to be created.
-    * @return The created remote service.
-    */
-   @Named("rs:create")
-   @POST
-   @Produces(RemoteServiceDto.BASE_MEDIA_TYPE)
-   @Consumes(RemoteServiceDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   RemoteServiceDto createRemoteService(
-         @EndpointLink("remoteservices") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(BindToXMLPayload.class) RemoteServiceDto remoteService);
-
-   /**
-    * Get the given remote service from the given datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param remoteServiceType
-    *           The type of the remote service.
-    * @return The remote service or <code>null</code> if it does not exist.
-    */
-   @Named("rs:get")
-   @GET
-   @Consumes(RemoteServiceDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   RemoteServiceDto getRemoteService(
-         @EndpointLink("remoteservices") @BinderParam(BindToPath.class) final DatacenterDto datacenter,
-         @BinderParam(AppendRemoteServiceTypeToPath.class) final RemoteServiceType remoteServiceType);
-
-   /**
-    * Updates an existing remote service from the given datacenter.
-    * 
-    * @param remoteService
-    *           The new attributes for the remote service.
-    * @return The updated remote service.
-    */
-   @Named("rs:update")
-   @PUT
-   @Consumes(RemoteServiceDto.BASE_MEDIA_TYPE)
-   @Produces(RemoteServiceDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   RemoteServiceDto updateRemoteService(
-         @EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) RemoteServiceDto remoteService);
-
-   /**
-    * Deletes an existing remote service.
-    * 
-    * @param remoteService
-    *           The remote service to delete.
-    */
-   @Named("rs:delete")
-   @DELETE
-   void deleteRemoteService(@EndpointLink("edit") @BinderParam(BindToPath.class) RemoteServiceDto remoteService);
-
-   /**
-    * Check if the given remote service is available and properly configured.
-    * 
-    * @param remoteService
-    *           The remote service to check.
-    * @return A Boolean indicating if the remote service is available.
-    */
-   @Named("rs:available")
-   @GET
-   @Fallback(FalseIfNotAvailable.class)
-   boolean isAvailable(@EndpointLink("check") @BinderParam(BindToPath.class) RemoteServiceDto remoteService);
-
-   /*********************** Machine ********************** */
-
-   /**
-    * Create a new physical machine in a rack.
-    * 
-    * @param rack
-    *           The rack.
-    * @param machine
-    *           The physical machine to be created.
-    * @return The created physical machine.
-    */
-   @Named("machine:create")
-   @POST
-   @Produces(MachineDto.BASE_MEDIA_TYPE)
-   @Consumes(MachineDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   MachineDto createMachine(@EndpointLink("machines") @BinderParam(BindToPath.class) RackDto rack,
-         @BinderParam(BindToXMLPayload.class) MachineDto machine);
-
-   /**
-    * Get the given machine from the given rack.
-    * 
-    * @param rack
-    *           The rack.
-    * @param machineId
-    *           The id of the machine.
-    * @return The machine or <code>null</code> if it does not exist.
-    */
-   @Named("machine:get")
-   @GET
-   @Consumes(MachineDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   MachineDto getMachine(@EndpointLink("machines") @BinderParam(BindToPath.class) final RackDto rack,
-         @BinderParam(AppendToPath.class) Integer machineId);
-
-   /**
-    * Checks the real infrastructure state for the given physical machine. The
-    * machine is updated with the result state.
-    * 
-    * @param machine
-    *           The machine to check
-    * @param sync
-    *           boolean that indicates a database synchronization
-    * @return A machineStateDto with a machine state value from enum
-    *         MachineState
-    */
-   @Named("machine:checkstate")
-   @GET
-   @Consumes(MachineStateDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   MachineStateDto checkMachineState(
-         @EndpointLink("checkstate") @BinderParam(BindToPath.class) final MachineDto machine,
-         @QueryParam("sync") boolean sync);
-
-   /**
-    * Checks the ipmi configuration state for the given physical machine.
-    * 
-    * @param machine
-    *           The machine to check
-    * @return A machineIpmiStateDto with a machine ipmi configuration state
-    *         value from enum MachineState
-    */
-   @Named("machine:checkipmi")
-   @GET
-   @Consumes(MachineIpmiStateDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   MachineIpmiStateDto checkMachineIpmiState(
-         @EndpointLink("checkipmistate") @BinderParam(BindToPath.class) final MachineDto machine);
-
-   /**
-    * Updates an existing physical machine.
-    * 
-    * @param machine
-    *           The new attributes for the physical machine.
-    * @return The updated machine.
-    */
-   @Named("machine:update")
-   @PUT
-   @Produces(MachineDto.BASE_MEDIA_TYPE)
-   @Consumes(MachineDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   MachineDto updateMachine(@EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) MachineDto machine);
-
-   /**
-    * Deletes an existing physical machine.
-    * 
-    * @param machine
-    *           The physical machine to delete.
-    */
-   @Named("machine:delete")
-   @DELETE
-   void deleteMachine(@EndpointLink("edit") @BinderParam(BindToPath.class) MachineDto machine);
-
-   /**
-    * Reserve the given machine for the given enterprise.
-    * 
-    * @param enterprise
-    *           The enterprise reserving the machine.
-    * @param machine
-    *           The machine to reserve.
-    * @return The reserved machine.
-    */
-   @Named("machine:reserve")
-   @POST
-   @Consumes(MachineDto.BASE_MEDIA_TYPE)
-   @Produces(MachineDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   MachineDto reserveMachine(@EndpointLink("reservedmachines") @BinderParam(BindToPath.class) EnterpriseDto enterprise,
-         @BinderParam(BindToXMLPayload.class) MachineDto machine);
-
-   /**
-    * Cancels the reservation of the given machine.
-    * 
-    * @param enterprise
-    *           The enterprise to cancel reservation.
-    * @param machine
-    *           The machine to release.
-    */
-   @Named("machine:cancelreservation")
-   @DELETE
-   void cancelReservation(@EndpointLink("reservedmachines") @BinderParam(BindToPath.class) EnterpriseDto enterprise,
-         @BinderParam(AppendMachineIdToPath.class) MachineDto machine);
-
-   /**
-    * List all machines racks for a rack.
-    * 
-    * @param rack
-    *           The rack.
-    * @return The list of physical machines for the rack.
-    */
-   @Named("machine:list")
-   @GET
-   @Consumes(MachinesDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   MachinesDto listMachines(@EndpointLink("machines") @BinderParam(BindToPath.class) RackDto rack);
-
-   /**
-    * List all virtual machines in a physical machine.
-    * 
-    * @param machine
-    *           The physical machine.
-    * @return The list of virtual machines in the physical machine.
-    */
-   @Named("machine:listvms")
-   @GET
-   @Consumes(VirtualMachinesWithNodeExtendedDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   VirtualMachinesWithNodeExtendedDto listVirtualMachinesByMachine(
-         @EndpointLink("virtualmachines") @BinderParam(BindToPath.class) MachineDto machine, MachineOptions options);
-
-   /**
-    * Get the given virtual machine
-    * 
-    * @param machine
-    * @param virtualMachineId
-    * @return
-    */
-   @Named("machine:getvm")
-   @GET
-   @Fallback(NullOnNotFoundOr404.class)
-   @Consumes(VirtualMachineWithNodeExtendedDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   VirtualMachineWithNodeExtendedDto getVirtualMachine(
-         @EndpointLink("virtualmachines") @BinderParam(BindToPath.class) MachineDto machine,
-         @BinderParam(AppendToPath.class) Integer virtualMachineId);
-
-   /*********************** Storage Device ***********************/
-
-   /**
-    * List all storage devices of the datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @return The list of storage devices in the datacenter.
-    */
-   @Named("storagedevice:list")
-   @GET
-   @Consumes(StorageDevicesDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   StorageDevicesDto listStorageDevices(@EndpointLink("devices") @BinderParam(BindToPath.class) DatacenterDto datacenter);
-
-   /**
-    * List all supported storage devices.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @return The list of supported storage devices.
-    */
-   @Named("storagedevice:listsupported")
-   @GET
-   @Consumes(StorageDevicesMetadataDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   StorageDevicesMetadataDto listSupportedStorageDevices(
-         @EndpointLink("devices") @BinderParam(BindSupportedDevicesLinkToPath.class) DatacenterDto datacenter);
-
-   /**
-    * Get the storage device.
-    * 
-    * @param storageDeviceId
-    *           The id of the storage device.
-    * @return The storage device or <code>null</code> if it does not exist.
-    */
-   @Named("storagedevice:get")
-   @GET
-   @Consumes(StorageDeviceDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   StorageDeviceDto getStorageDevice(@EndpointLink("devices") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(AppendToPath.class) Integer storageDeviceId);
-
-   /**
-    * Create a new storage device.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param storageDevice
-    *           The storage device to be created.
-    * @return The created storage device.
-    */
-   @Named("storagedevice:create")
-   @POST
-   @Produces(StorageDeviceDto.BASE_MEDIA_TYPE)
-   @Consumes(StorageDeviceDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   StorageDeviceDto createStorageDevice(
-         @EndpointLink("devices") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(BindToXMLPayload.class) StorageDeviceDto storageDevice);
-
-   /**
-    * Deletes an existing storage device.
-    * 
-    * @param storageDevice
-    *           The storage device to delete.
-    */
-   @Named("storagedevice:delete")
-   @DELETE
-   void deleteStorageDevice(@EndpointLink("edit") @BinderParam(BindToPath.class) StorageDeviceDto storageDevice);
-
-   /**
-    * Updates an existing storage device.
-    * 
-    * @param storageDevice
-    *           The new attributes for the storage device.
-    * @return The updated storage device.
-    */
-   @Named("storagedevice:update")
-   @PUT
-   @Produces(StorageDeviceDto.BASE_MEDIA_TYPE)
-   @Consumes(StorageDeviceDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   StorageDeviceDto updateStorageDevice(
-         @EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) StorageDeviceDto storageDevice);
-
-   /*********************** Tier ***********************/
-   /**
-    * List all tiers of the datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @return The list of tiers in the datacenter.
-    */
-   @Named("tier:list")
-   @GET
-   @Consumes(TiersDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   TiersDto listTiers(@EndpointLink("tiers") @BinderParam(BindToPath.class) DatacenterDto datacenter);
-
-   /**
-    * Updates a tier.
-    * 
-    * @param tier
-    *           The new attributes for the tier.
-    * @return The updated tier.
-    */
-   @Named("tier:update")
-   @PUT
-   @Produces(TierDto.BASE_MEDIA_TYPE)
-   @Consumes(TierDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   TierDto updateTier(@EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) TierDto tier);
-
-   /**
-    * Get the tier.
-    * 
-    * @param tierId
-    *           The id of the tier.
-    * @return The tier or <code>null</code> if it does not exist.
-    */
-   @Named("tier:get")
-   @GET
-   @Consumes(TierDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   TierDto getTier(@EndpointLink("tiers") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(AppendToPath.class) Integer tierId);
-
-   /*********************** Storage Pool ***********************/
-
-   /**
-    * List storage pools on a storage device.
-    * 
-    * @param storageDevice
-    *           The storage device.
-    * @param options
-    *           Optional query params.
-    * @return The list of storage pools in the storage device.
-    */
-   @Named("storagepool:list")
-   @GET
-   @Consumes(StoragePoolsDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   StoragePoolsDto listStoragePools(
-         @EndpointLink("pools") @BinderParam(BindToPath.class) StorageDeviceDto storageDevice,
-         StoragePoolOptions options);
-
-   /**
-    * List storage pools on a tier.
-    * 
-    * @param tier
-    *           The tier device.
-    * @return The list of storage pools in the tier.
-    */
-   @Named("storagepool:list")
-   @GET
-   @Consumes(StoragePoolsDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   StoragePoolsDto listStoragePools(@EndpointLink("pools") @BinderParam(BindToPath.class) TierDto tier);
-
-   /**
-    * Create a new storage pool in a storage device.
-    * 
-    * @param storageDevice
-    *           The storage device.
-    * @param storagePool
-    *           The storage pool to be created.
-    * @return The created storage pool.
-    */
-   @Named("storagepool:create")
-   @POST
-   @Consumes(StoragePoolDto.BASE_MEDIA_TYPE)
-   @Produces(StoragePoolDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   StoragePoolDto createStoragePool(
-         @EndpointLink("pools") @BinderParam(BindToPath.class) StorageDeviceDto storageDevice,
-         @BinderParam(BindToXMLPayload.class) StoragePoolDto storagePool);
-
-   /**
-    * Updates a storage pool.
-    * 
-    * @param storagePool
-    *           The new attributes for the storage pool.
-    * @return The updated tier.
-    */
-   @Named("storagepool:update")
-   @PUT
-   // For the most strangest reason in world, compiler does not accept
-   // constants StoragePoolDto.BASE_MEDIA_TYPE for this method.
-   @Consumes("application/vnd.abiquo.storagepool+xml")
-   @Produces("application/vnd.abiquo.storagepool+xml")
-   @JAXBResponseParser
-   StoragePoolDto updateStoragePool(
-         @EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) StoragePoolDto StoragePoolDto);
-
-   /**
-    * Deletes an existing storage pool.
-    * 
-    * @param storagePool
-    *           The storage pool to delete.
-    */
-   @Named("storagepool:delete")
-   @DELETE
-   void deleteStoragePool(@EndpointLink("edit") @BinderParam(BindToPath.class) StoragePoolDto storagePool);
-
-   /**
-    * Get the storage pool.
-    * 
-    * @param storageDevice
-    *           The storage device.
-    * @param storagePoolId
-    *           The id of the storage pool.
-    * @return The storage pool or <code>null</code> if it does not exist.
-    */
-   @Named("storagepool:get")
-   @GET
-   @Consumes(StoragePoolDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   StoragePoolDto getStoragePool(
-         @EndpointLink("pools") @BinderParam(BindToPath.class) final StorageDeviceDto storageDevice,
-         @BinderParam(AppendToPath.class) final String storagePoolId);
-
-   /**
-    * Refresh the given storage pool data.
-    * 
-    * @param storagePool
-    *           The storage pool to refresh.
-    * @param options
-    *           The options to query the storage pool.
-    * @return The updated storage pool.
-    */
-   @Named("storagepool:refresh")
-   @GET
-   @Consumes(StoragePoolDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   StoragePoolDto refreshStoragePool(@EndpointLink("edit") @BinderParam(BindToPath.class) StoragePoolDto storagePool,
-         StoragePoolOptions options);
-
-   /*********************** Network ***********************/
-
-   /**
-    * List all public, external and not managed networks of a datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @return The list of not public, external and not managed for the
-    *         datacenter.
-    */
-   @Named("network:list")
-   @GET
-   @Consumes(VLANNetworksDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   VLANNetworksDto listNetworks(@EndpointLink("network") @BinderParam(BindToPath.class) DatacenterDto datacenter);
-
-   /**
-    * List networks of a datacenter with options.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param options
-    *           Optional query params.
-    * @return The list of not public, external and not managed for the
-    *         datacenter.
-    */
-   @Named("network:list")
-   @GET
-   @Consumes(VLANNetworksDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   VLANNetworksDto listNetworks(@EndpointLink("network") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         NetworkOptions options);
-
-   /**
-    * Get the given network from the given datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param networkId
-    *           The id of the network.
-    * @return The rack or <code>null</code> if it does not exist.
-    */
-   @Named("network:get")
-   @GET
-   @Consumes(VLANNetworkDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   VLANNetworkDto getNetwork(@EndpointLink("network") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(AppendToPath.class) Integer networkId);
-
-   /**
-    * Create a new public network.
-    * 
-    * @param storageDevice
-    *           The storage device.
-    * @param storagePool
-    *           The storage pool to be created.
-    * @return The created storage pool.
-    */
-   @Named("network:create")
-   @POST
-   @Produces(VLANNetworkDto.BASE_MEDIA_TYPE)
-   @Consumes(VLANNetworkDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   VLANNetworkDto createNetwork(@EndpointLink("network") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(BindToXMLPayload.class) VLANNetworkDto network);
-
-   /**
-    * Updates a network.
-    * 
-    * @param network
-    *           The new attributes for the network.
-    * @return The updated tier.
-    */
-   @Named("network:update")
-   @PUT
-   @Produces(VLANNetworkDto.BASE_MEDIA_TYPE)
-   @Consumes(VLANNetworkDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   VLANNetworkDto updateNetwork(@EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) VLANNetworkDto network);
-
-   /**
-    * Deletes an existing network.
-    * 
-    * @param network
-    *           The network to delete.
-    */
-   @Named("network:delete")
-   @DELETE
-   void deleteNetwork(@EndpointLink("edit") @BinderParam(BindToPath.class) VLANNetworkDto network);
-
-   /**
-    * Check the availability of a tag.
-    * 
-    * @param datacenter
-    *           The datacenter.
-    * @param tag
-    *           Tag to check.
-    * @return A tag availability object.
-    */
-   @Named("network:checktag")
-   @GET
-   @Path("/datacenters/{datacenter}/network/action/checkavailability")
-   @Consumes(VlanTagAvailabilityDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   VlanTagAvailabilityDto checkTagAvailability(
-         @PathParam("datacenter") @ParamParser(ParseDatacenterId.class) DatacenterDto datacenter,
-         @QueryParam("tag") Integer tag);
-
-   /*********************** Network IPs ***********************/
-
-   /**
-    * List all the IPs in the given public network.
-    * 
-    * @param network
-    *           The public network.
-    * @return The IPs in the given public network.
-    */
-   @SinceApiVersion("2.3")
-   @Named("publicnetwork:listips")
-   @GET
-   @Consumes(PublicIpsDto.BASE_MEDIA_TYPE)
-   @ResponseParser(ParsePublicIps.class)
-   @Transform(ParsePublicIps.ToPagedIterable.class)
-   PagedIterable<PublicIpDto> listPublicIps(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network);
-
-   /**
-    * List all the IPs in the given public network.
-    * 
-    * @param network
-    *           The public network.
-    * @param options
-    *           The filtering options.
-    * @return The IPs in the given public network.
-    */
-   @SinceApiVersion("2.3")
-   @Named("publicnetwork:listips")
-   @GET
-   @Consumes(PublicIpsDto.BASE_MEDIA_TYPE)
-   @ResponseParser(ParsePublicIps.class)
-   PaginatedCollection<PublicIpDto, PublicIpsDto> listPublicIps(
-         @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, IpOptions options);
-
-   /**
-    * Get the given public ip.
-    * 
-    * @param network
-    *           The public network.
-    * @param ipId
-    *           The id of the ip to get.
-    * @return The requested ip.
-    */
-   @SinceApiVersion("2.3")
-   @Named("publicnetwork:getip")
-   @GET
-   @Consumes(PublicIpDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   PublicIpDto getPublicIp(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network,
-         @BinderParam(AppendToPath.class) Integer ipId);
-
-   /**
-    * List all the IPs in the given external network.
-    * 
-    * @param network
-    *           The external network.
-    * @return The IPs in the given external network.
-    */
-   @SinceApiVersion("2.3")
-   @Named("externalnetwork:listips")
-   @GET
-   @Consumes(ExternalIpsDto.BASE_MEDIA_TYPE)
-   @ResponseParser(ParseExternalIps.class)
-   @Transform(ParseExternalIps.ToPagedIterable.class)
-   PagedIterable<ExternalIpDto> listExternalIps(
-         @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network);
-
-   /**
-    * List all the IPs in the given external network.
-    * 
-    * @param network
-    *           The external network.
-    * @param options
-    *           The filtering options.
-    * @return The IPs in the given external network.
-    */
-   @SinceApiVersion("2.3")
-   @Named("externalnetwork:listips")
-   @GET
-   @Consumes(ExternalIpsDto.BASE_MEDIA_TYPE)
-   @ResponseParser(ParseExternalIps.class)
-   PaginatedCollection<ExternalIpDto, ExternalIpsDto> listExternalIps(
-         @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, IpOptions options);
-
-   /**
-    * Get the given external ip.
-    * 
-    * @param network
-    *           The external network.
-    * @param ipId
-    *           The id of the ip to get.
-    * @return The requested ip.
-    */
-   @SinceApiVersion("2.3")
-   @Named("externalnetwork:getip")
-   @GET
-   @Consumes(ExternalIpDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   ExternalIpDto getExternalIp(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network,
-         @BinderParam(AppendToPath.class) Integer ipId);
-
-   /**
-    * List all the IPs in the given unmanaged network.
-    * 
-    * @param network
-    *           The unmanaged network.
-    * @return The IPs in the given unmanaged network.
-    */
-   @SinceApiVersion("2.3")
-   @Named("unmanagednetwork:listips")
-   @GET
-   @Consumes(UnmanagedIpsDto.BASE_MEDIA_TYPE)
-   @ResponseParser(ParseUnmanagedIps.class)
-   @Transform(ParseUnmanagedIps.ToPagedIterable.class)
-   PagedIterable<UnmanagedIpDto> listUnmanagedIps(
-         @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network);
-
-   /**
-    * List all the IPs in the given unmanaged network.
-    * 
-    * @param network
-    *           The unmanaged network.
-    * @param options
-    *           The filtering options.
-    * @return The IPs in the given unmanaged network.
-    */
-   @SinceApiVersion("2.3")
-   @Named("unmanagednetwork:listips")
-   @GET
-   @Consumes(UnmanagedIpsDto.BASE_MEDIA_TYPE)
-   @ResponseParser(ParseUnmanagedIps.class)
-   PaginatedCollection<UnmanagedIpDto, UnmanagedIpsDto> listUnmanagedIps(
-         @EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network, IpOptions options);
-
-   /**
-    * Get the given unmanaged ip.
-    * 
-    * @param network
-    *           The unmanaged network.
-    * @param ipId
-    *           The id of the ip to get.
-    * @return The requested ip.
-    */
-   @SinceApiVersion("2.3")
-   @Named("unmanagednetwork:getip")
-   @GET
-   @Consumes(UnmanagedIpDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   UnmanagedIpDto getUnmanagedIp(@EndpointLink("ips") @BinderParam(BindToPath.class) VLANNetworkDto network,
-         @BinderParam(AppendToPath.class) Integer ipId);
-
-   /**
-    * List all the Network Service types definied into a datacenter.
-    * 
-    * @param datacenter
-    *           The datacenter
-    * @return The list of Network Service Types in the datacenter.
-    */
-   @Named("networkservicetype:list")
-   @GET
-   @Consumes(NetworkServiceTypesDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   NetworkServiceTypesDto listNetworkServiceTypes(
-         @EndpointLink("networkservicetypes") @BinderParam(BindToPath.class) DatacenterDto datacenter);
-
-   /**
-    * Create a new Network Service Type Dto.
-    * 
-    * @param datacenter
-    *           the datacenter where the network service type will belong to
-    * @param nst
-    *           {@link NetworkServiceTypeDto} instance to create
-    * @return the created {@link NetworkServiceTypeDto}
-    */
-   @Named("networkservicetype:create")
-   @POST
-   @Produces(NetworkServiceTypeDto.BASE_MEDIA_TYPE)
-   @Consumes(NetworkServiceTypeDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   NetworkServiceTypeDto createNetworkServiceType(
-         @EndpointLink("networkservicetypes") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(BindToXMLPayload.class) NetworkServiceTypeDto nst);
-
-   /**
-    * Get a single instance of a {@link NetworkServiceTypeDto}
-    * 
-    * @param datacenter
-    *           datacenter where search into
-    * @param nstId
-    *           identifier of the {@link NetworkServiceTypeDto}
-    * @return the found entity
-    */
-   @Named("networkservicetype:get")
-   @GET
-   @Consumes(NetworkServiceTypeDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   NetworkServiceTypeDto getNetworkServiceType(
-         @EndpointLink("networkservicetypes") @BinderParam(BindToPath.class) DatacenterDto datacenter,
-         @BinderParam(AppendToPath.class) Integer nstId);
-
-   /**
-    * Update the value of a {@link NetworkServiceTypeDto}
-    * 
-    * @param nstDto
-    *           the instance to update with the new values.
-    * @return the updated entity.
-    */
-   @Named("networkservicetype:update")
-   @PUT
-   @Produces(NetworkServiceTypeDto.BASE_MEDIA_TYPE)
-   @Consumes(NetworkServiceTypeDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   NetworkServiceTypeDto updateNetworkServiceType(
-         @EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) NetworkServiceTypeDto nstDto);
-
-   /**
-    * Remove a {@link NetworkServiceTypeDto} entity.
-    * 
-    * @param nstDto
-    *           the entity to delete
-    */
-   @Named("networkservicetype:delete")
-   @DELETE
-   void deleteNetworkServiceType(@EndpointLink("edit") @BinderParam(BindToPath.class) NetworkServiceTypeDto nstDto);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/features/TaskApi.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/TaskApi.java b/abiquo/src/main/java/org/jclouds/abiquo/features/TaskApi.java
deleted file mode 100644
index ec7c915..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/features/TaskApi.java
+++ /dev/null
@@ -1,77 +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.abiquo.features;
-
-import java.io.Closeable;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-
-import org.jclouds.abiquo.AbiquoFallbacks.NullOn303;
-import org.jclouds.abiquo.binders.BindLinkToPath;
-import org.jclouds.abiquo.binders.BindToPath;
-import org.jclouds.abiquo.http.filters.AbiquoAuthentication;
-import org.jclouds.abiquo.http.filters.AppendApiVersionToMediaType;
-import org.jclouds.abiquo.rest.annotations.EndpointLink;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-
-import com.abiquo.model.rest.RESTLink;
-import com.abiquo.model.transport.SingleResourceTransportDto;
-import com.abiquo.server.core.task.TaskDto;
-import com.abiquo.server.core.task.TasksDto;
-
-/**
- * Provides synchronous access to Abiquo Task API.
- * 
- * @see API: <a href="http://community.abiquo.com/display/ABI20/API+Reference">
- *      http://community.abiquo.com/display/ABI20/API+Reference</a>
- */
-@RequestFilters({ AbiquoAuthentication.class, AppendApiVersionToMediaType.class })
-public interface TaskApi extends Closeable {
-   /*********************** Task ***********************/
-
-   /**
-    * Get a task from its link.
-    * 
-    * @param link
-    *           The link of the task.
-    * @return The task.
-    */
-   @Named("task:get")
-   @GET
-   @Consumes(TaskDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOn303.class)
-   TaskDto getTask(@BinderParam(BindLinkToPath.class) RESTLink link);
-
-   /**
-    * Get the list of tasks of the given object.
-    * 
-    * @param dto
-    *           The object.
-    * @return The list of tasks for the given object.
-    */
-   @Named("task:list")
-   @GET
-   @Consumes(TasksDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   <T extends SingleResourceTransportDto> TasksDto listTasks(@EndpointLink("tasks") @BinderParam(BindToPath.class) T dto);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/features/VirtualMachineTemplateApi.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/VirtualMachineTemplateApi.java b/abiquo/src/main/java/org/jclouds/abiquo/features/VirtualMachineTemplateApi.java
deleted file mode 100644
index 0abac24..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/features/VirtualMachineTemplateApi.java
+++ /dev/null
@@ -1,258 +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.abiquo.features;
-
-import java.io.Closeable;
-
-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 org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.abiquo.binders.AppendToPath;
-import org.jclouds.abiquo.binders.BindToPath;
-import org.jclouds.abiquo.binders.BindToXMLPayloadAndPath;
-import org.jclouds.abiquo.domain.PaginatedCollection;
-import org.jclouds.abiquo.domain.cloud.options.ConversionOptions;
-import org.jclouds.abiquo.domain.cloud.options.VirtualMachineTemplateOptions;
-import org.jclouds.abiquo.functions.ReturnTaskReferenceOrNull;
-import org.jclouds.abiquo.functions.pagination.ParseVirtualMachineTemplates;
-import org.jclouds.abiquo.http.filters.AbiquoAuthentication;
-import org.jclouds.abiquo.http.filters.AppendApiVersionToMediaType;
-import org.jclouds.abiquo.rest.annotations.EndpointLink;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.JAXBResponseParser;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.Transform;
-import org.jclouds.rest.binders.BindToXMLPayload;
-
-import com.abiquo.model.enumerator.DiskFormatType;
-import com.abiquo.model.transport.AcceptedRequestDto;
-import com.abiquo.server.core.appslibrary.ConversionDto;
-import com.abiquo.server.core.appslibrary.ConversionsDto;
-import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto;
-import com.abiquo.server.core.appslibrary.VirtualMachineTemplatePersistentDto;
-import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto;
-
-/**
- * Provides synchronous access to Abiquo Apps library API.
- * 
- * @see API: <a href="http://community.abiquo.com/display/ABI20/API+Reference">
- *      http://community.abiquo.com/display/ABI20/API+Reference</a>
- */
-@RequestFilters({ AbiquoAuthentication.class, AppendApiVersionToMediaType.class })
-@Path("/admin/enterprises")
-public interface VirtualMachineTemplateApi extends Closeable {
-   /*********************** Virtual Machine Template ***********************/
-
-   /**
-    * List all virtual machine templates for an enterprise in a datacenter
-    * repository.
-    * 
-    * @param enterpriseId
-    *           Id of the enterprise.
-    * @param datacenterRepositoryId
-    *           Id of the datacenter repository containing the templates.
-    * @return The list of virtual machine templates for the enterprise in the
-    *         datacenter repository.
-    */
-   @Named("template:list")
-   @GET
-   @Path("/{enterprise}/datacenterrepositories/{datacenterrepository}/virtualmachinetemplates")
-   @Consumes(VirtualMachineTemplatesDto.BASE_MEDIA_TYPE)
-   @ResponseParser(ParseVirtualMachineTemplates.class)
-   @Transform(ParseVirtualMachineTemplates.ToPagedIterable.class)
-   PagedIterable<VirtualMachineTemplateDto> listVirtualMachineTemplates(@PathParam("enterprise") Integer enterpriseId,
-         @PathParam("datacenterrepository") Integer datacenterRepositoryId);
-
-   /**
-    * List all virtual machine templates for an enterprise in a datacenter
-    * repository.
-    * 
-    * @param enterpriseId
-    *           Id of the enterprise.
-    * @param datacenterRepositoryId
-    *           Id of the datacenter repository containing the templates.
-    * @param options
-    *           The options to query the virtual machine templates.
-    * @return The filtered list of virtual machine templates for the enterprise
-    *         in the datacenter repository.
-    */
-   @Named("template:list")
-   @GET
-   @Path("/{enterprise}/datacenterrepositories/{datacenterrepository}/virtualmachinetemplates")
-   @Consumes(VirtualMachineTemplatesDto.BASE_MEDIA_TYPE)
-   @ResponseParser(ParseVirtualMachineTemplates.class)
-   PaginatedCollection<VirtualMachineTemplateDto, VirtualMachineTemplatesDto> listVirtualMachineTemplates(
-         @PathParam("enterprise") Integer enterpriseId,
-         @PathParam("datacenterrepository") Integer datacenterRepositoryId, VirtualMachineTemplateOptions options);
-
-   /**
-    * Get the given virtual machine template.
-    * 
-    * @param enterpriseId
-    *           Id of the enterprise.
-    * @param datacenterRepositoryId
-    *           Id of the datacenter repository containing the templates.
-    * @param enterpriseId
-    *           The id of the virtual machine template.
-    * @return The virtual machine template or <code>null</code> if it does not
-    *         exist.
-    */
-   @Named("template:get")
-   @GET
-   @Path("/{enterprise}/datacenterrepositories/{datacenterrepository}/virtualmachinetemplates/{virtualmachinetemplate}")
-   @Consumes(VirtualMachineTemplateDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   VirtualMachineTemplateDto getVirtualMachineTemplate(@PathParam("enterprise") Integer enterpriseId,
-         @PathParam("datacenterrepository") Integer datacenterRepositoryId,
-         @PathParam("virtualmachinetemplate") Integer virtualMachineTemplateId);
-
-   /**
-    * Updates an existing virtual machine template.
-    * 
-    * @param template
-    *           The new attributes for the template.
-    * @return The updated template.
-    */
-   @Named("template:update")
-   @PUT
-   @Produces(VirtualMachineTemplateDto.BASE_MEDIA_TYPE)
-   @Consumes(VirtualMachineTemplateDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   VirtualMachineTemplateDto updateVirtualMachineTemplate(
-         @EndpointLink("edit") @BinderParam(BindToXMLPayloadAndPath.class) VirtualMachineTemplateDto template);
-
-   /**
-    * Deletes an existing virtual machine template.
-    * 
-    * @param template
-    *           The virtual machine template to delete.
-    */
-   @Named("template:delete")
-   @DELETE
-   void deleteVirtualMachineTemplate(
-         @EndpointLink("edit") @BinderParam(BindToPath.class) VirtualMachineTemplateDto template);
-
-   /**
-    * Creates a persistent virtual machine template from other virtual machine
-    * template.
-    * 
-    * @param dcRepository
-    *           The repository where the persistent virtual machine template
-    *           will be created.
-    * @param options
-    *           The persistent options like name, volume/tier, virtual
-    *           datacenter and original template.
-    * @return Response message to the persistent request.
-    */
-   @Named("template:createpersistent")
-   @POST
-   @Consumes(AcceptedRequestDto.BASE_MEDIA_TYPE)
-   @Produces(VirtualMachineTemplatePersistentDto.BASE_MEDIA_TYPE)
-   @Path("/{enterprise}/datacenterrepositories/{datacenterrepository}/virtualmachinetemplates")
-   @JAXBResponseParser
-   AcceptedRequestDto<String> createPersistentVirtualMachineTemplate(@PathParam("enterprise") Integer enterpriseId,
-         @PathParam("datacenterrepository") Integer datacenterRepositoryId,
-         @BinderParam(BindToXMLPayload.class) VirtualMachineTemplatePersistentDto persistentOptions);
-
-   /**
-    * List all the conversions for a virtual machine template.
-    * 
-    * @param template
-    *           , The virtual machine template of the conversions.
-    * @return The list of conversions for the virtual machine template.
-    */
-   @Named("conversion:list")
-   @GET
-   @Consumes(ConversionsDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   ConversionsDto listConversions(
-         @EndpointLink("conversions") @BinderParam(BindToPath.class) VirtualMachineTemplateDto template);
-
-   /**
-    * List conversions for a virtual machine template.
-    * 
-    * @param template
-    *           , The virtual machine template of the conversions
-    * @param options
-    *           , Optionally filter compatible conversions with a provided
-    *           hypervisor or with the desired state.
-    * @return The list of conversions for the virtual machine template with the
-    *         applied constrains.
-    */
-   @Named("conversion:list")
-   @GET
-   @Consumes(ConversionsDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   ConversionsDto listConversions(
-         @EndpointLink("conversions") @BinderParam(BindToPath.class) final VirtualMachineTemplateDto template,
-         ConversionOptions options);
-
-   /**
-    * Get the conversions for a virtual machine template and the desired target
-    * format.
-    * 
-    * @param template
-    *           , The virtual machine template of the conversion
-    * @param targetFormat
-    *           The disk format type of the requested conversion
-    * @return The conversions for the virtual machine template with the desired
-    *         target disk format type.
-    */
-   @Named("conversion:get")
-   @GET
-   @Consumes(ConversionDto.BASE_MEDIA_TYPE)
-   @JAXBResponseParser
-   @Fallback(NullOnNotFoundOr404.class)
-   ConversionDto getConversion(
-         @EndpointLink("conversions") @BinderParam(BindToPath.class) final VirtualMachineTemplateDto template,
-         @BinderParam(AppendToPath.class) DiskFormatType targetFormat);
-
-   /**
-    * Starts a V2V conversion of the current virtual machine template, or
-    * updates a failed conversion.
-    * 
-    * @param template
-    *           The virtual machine template to convert
-    * @param targetFormat
-    *           The requested target {@link DiskFormatType} of the conversion.
-    * @param conversion
-    *           , the dto representing the conversion
-    * @return an accepted request with a link to track the progress of the
-    *         conversion tasks.
-    */
-   @Named("conversion:request")
-   @PUT
-   @ResponseParser(ReturnTaskReferenceOrNull.class)
-   @Consumes(AcceptedRequestDto.BASE_MEDIA_TYPE)
-   @Produces(ConversionDto.BASE_MEDIA_TYPE)
-   AcceptedRequestDto<String> requestConversion(
-         @EndpointLink("conversions") @BinderParam(BindToPath.class) final VirtualMachineTemplateDto template,
-         @BinderParam(AppendToPath.class) DiskFormatType targetFormat,
-         @BinderParam(BindToXMLPayload.class) ConversionDto conversion);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/features/services/AdministrationService.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/services/AdministrationService.java b/abiquo/src/main/java/org/jclouds/abiquo/features/services/AdministrationService.java
deleted file mode 100644
index 2a98e1a..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/features/services/AdministrationService.java
+++ /dev/null
@@ -1,170 +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.abiquo.features.services;
-
-import org.jclouds.abiquo.domain.config.Category;
-import org.jclouds.abiquo.domain.config.License;
-import org.jclouds.abiquo.domain.config.Privilege;
-import org.jclouds.abiquo.domain.config.SystemProperty;
-import org.jclouds.abiquo.domain.enterprise.Enterprise;
-import org.jclouds.abiquo.domain.enterprise.EnterpriseProperties;
-import org.jclouds.abiquo.domain.enterprise.Role;
-import org.jclouds.abiquo.domain.enterprise.User;
-import org.jclouds.abiquo.domain.enterprise.options.EnterpriseOptions;
-import org.jclouds.abiquo.domain.infrastructure.Datacenter;
-import org.jclouds.abiquo.domain.infrastructure.Machine;
-import org.jclouds.abiquo.internal.BaseAdministrationService;
-
-import com.google.inject.ImplementedBy;
-
-/**
- * Provides high level Abiquo administration operations.
- */
-@ImplementedBy(BaseAdministrationService.class)
-public interface AdministrationService {
-   /*********************** Datacenter ***********************/
-
-   /**
-    * Get the list of all datacenters.
-    */
-   Iterable<Datacenter> listDatacenters();
-
-   /**
-    * Get the datacenter with the given id.
-    */
-   Datacenter getDatacenter(final Integer datacenterId);
-
-   /*********************** Machine ***********************/
-
-   /**
-    * Get the list of all machines in the infrastructure.
-    */
-   Iterable<Machine> listMachines();
-
-   /*********************** Enterprise ***********************/
-
-   /**
-    * Get the list of all enterprises.
-    */
-   Iterable<Enterprise> listEnterprises();
-
-   /**
-    * Get the list of all enterprises, filtered with the given options.
-    */
-   Iterable<Enterprise> listEnterprises(EnterpriseOptions options);
-
-   /**
-    * Get the enterprise with the given id.
-    */
-   Enterprise getEnterprise(final Integer enterpriseId);
-
-   /*********************** Enterprise Properties ***********************/
-   /**
-    * Get the properties of an enterprise.
-    */
-   EnterpriseProperties getEnterpriseProperties(final Enterprise enterprise);
-
-   /*********************** Role ***********************/
-
-   /**
-    * Get the list of global roles.
-    */
-   Iterable<Role> listRoles();
-
-   /**
-    * Get the role with the given id.
-    */
-   Role getRole(final Integer roleId);
-
-   /*********************** Privilege ***********************/
-
-   /**
-    * Get the list of global privileges.
-    */
-   Iterable<Privilege> listPrivileges();
-
-   /**
-    * Get a privilege given its id.
-    * 
-    * @param privilegeId
-    *           The id of the privilege.
-    * @return The privilege.
-    */
-   Privilege getPrivilege(Integer privilegeId);
-
-   /*********************** User ***********************/
-
-   /**
-    * Get the current user.
-    */
-   User getCurrentUser();
-
-   /**
-    * Get the enterprise of the current user.
-    */
-   Enterprise getCurrentEnterprise();
-
-   /*********************** License ***********************/
-
-   /**
-    * Get the list of all licenses.
-    */
-   Iterable<License> listLicenses();
-
-   /**
-    * Get the list of all active/inactive licenses.
-    * 
-    * @param active
-    *           Defines if searching for active (<code>true</code>) or inactive
-    *           ( <code>false</code>) licenses.
-    */
-   Iterable<License> listLicenses(boolean active);
-
-   /*********************** System Properties ***********************/
-
-   /**
-    * Get the list of system properties.
-    */
-   Iterable<SystemProperty> listSystemProperties();
-
-   /**
-    * Get the system property with the give name or <code>null</code> if none is
-    * found.
-    */
-   SystemProperty getSystemProperty(String name);
-
-   /**
-    * Get the list of system properties with options.
-    */
-   Iterable<SystemProperty> listSystemProperties(String component);
-
-   /*********************** Category ***********************/
-
-   /**
-    * Get the list of categories.
-    */
-   Iterable<Category> listCategories();
-
-   /**
-    * Get the category identified by the given id.
-    * 
-    * @param categoryId
-    *           The id of the category.
-    * @return The requested category.
-    */
-   Category getCategory(Integer categoryId);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/features/services/CloudService.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/services/CloudService.java b/abiquo/src/main/java/org/jclouds/abiquo/features/services/CloudService.java
deleted file mode 100644
index 91c5423..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/features/services/CloudService.java
+++ /dev/null
@@ -1,81 +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.abiquo.features.services;
-
-import java.util.List;
-
-import org.jclouds.abiquo.domain.cloud.VirtualAppliance;
-import org.jclouds.abiquo.domain.cloud.VirtualDatacenter;
-import org.jclouds.abiquo.domain.cloud.VirtualMachine;
-import org.jclouds.abiquo.domain.cloud.options.VirtualMachineOptions;
-import org.jclouds.abiquo.domain.enterprise.Enterprise;
-import org.jclouds.abiquo.internal.BaseCloudService;
-
-import com.google.inject.ImplementedBy;
-
-/**
- * Provides high level Abiquo cloud operations.
- */
-@ImplementedBy(BaseCloudService.class)
-public interface CloudService {
-   /*********************** Virtual Datacenter ***********************/
-
-   /**
-    * Get the list of all virtual datacenters.
-    */
-   Iterable<VirtualDatacenter> listVirtualDatacenters();
-
-   /**
-    * Get the list of all virtual datacenters for a pair enterprise-datacenter.
-    * 
-    * @param enterprise
-    *           The given enterprise.
-    * @param datacenter
-    *           The given datacenter.
-    */
-   Iterable<VirtualDatacenter> listVirtualDatacenters(final Enterprise enterprise);
-
-   /**
-    * Get the virtual datacenter with the given id.
-    */
-   VirtualDatacenter getVirtualDatacenter(final Integer virtualDatacenterId);
-
-   /**
-    * Get the list of virtual datacenter with the given ids.
-    */
-   Iterable<VirtualDatacenter> getVirtualDatacenters(final List<Integer> virtualDatacenterIds);
-
-   /*********************** Virtual Appliance ***********************/
-
-   /**
-    * Get the list of all virtual appliances.
-    */
-   Iterable<VirtualAppliance> listVirtualAppliances();
-
-   /*********************** Virtual Machine ***********************/
-
-   /**
-    * Get the list of all virtual machines.
-    */
-   Iterable<VirtualMachine> listVirtualMachines();
-
-   /**
-    * Get the list of all virtual machines filtered with the given options.
-    */
-   Iterable<VirtualMachine> listVirtualMachines(VirtualMachineOptions options);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/features/services/EventService.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/services/EventService.java b/abiquo/src/main/java/org/jclouds/abiquo/features/services/EventService.java
deleted file mode 100644
index 5197793..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/features/services/EventService.java
+++ /dev/null
@@ -1,39 +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.abiquo.features.services;
-
-import org.jclouds.abiquo.domain.event.Event;
-import org.jclouds.abiquo.domain.event.options.EventOptions;
-import org.jclouds.abiquo.internal.BaseEventService;
-
-import com.google.inject.ImplementedBy;
-
-/**
- * Provides high level Abiquo event operations.
- */
-@ImplementedBy(BaseEventService.class)
-public interface EventService {
-   /**
-    * Get the list of all events.
-    */
-   Iterable<Event> listEvents();
-
-   /**
-    * Get the list of all events using filters as query params.
-    */
-   Iterable<Event> listEvents(EventOptions options);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/features/services/MonitoringService.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/features/services/MonitoringService.java b/abiquo/src/main/java/org/jclouds/abiquo/features/services/MonitoringService.java
deleted file mode 100644
index db63f7a..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/features/services/MonitoringService.java
+++ /dev/null
@@ -1,145 +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.abiquo.features.services;
-
-import java.util.concurrent.TimeUnit;
-
-import org.jclouds.abiquo.internal.BaseMonitoringService;
-import org.jclouds.abiquo.monitor.AsyncTaskMonitor;
-import org.jclouds.abiquo.monitor.ConversionMonitor;
-import org.jclouds.abiquo.monitor.MonitorStatus;
-import org.jclouds.abiquo.monitor.VirtualApplianceMonitor;
-import org.jclouds.abiquo.monitor.VirtualMachineMonitor;
-import org.jclouds.abiquo.monitor.handlers.AbstractEventHandler;
-
-import com.google.common.base.Function;
-import com.google.inject.ImplementedBy;
-
-/**
- * Utility service to monitor asynchronous operations.
- */
-@ImplementedBy(BaseMonitoringService.class)
-public interface MonitoringService {
-
-   /*************** Generic monitoring methods ***************/
-
-   /**
-    * Monitor the given objects using the given complete condition.
-    * 
-    * @param completeCondition
-    *           The function that will be used to decide if the asynchronous
-    *           operations have finished.
-    * @param objects
-    *           The objects to monitor.
-    */
-   <T> void awaitCompletion(final Function<T, MonitorStatus> completeCondition, final T... objects);
-
-   /**
-    * Monitor the given objects using the given complete condition.
-    * 
-    * @param maxWait
-    *           The maximum time to wait.
-    * @param timeUnit
-    *           The time unit for the maxWait parameter.
-    * @param completeCondition
-    *           The function that will be used to decide if the asynchronous
-    *           operations have finished.
-    * @param objects
-    *           The objects to monitor.
-    */
-   <T> void awaitCompletion(final Long maxWait, final TimeUnit timeUnit,
-         final Function<T, MonitorStatus> completeCondition, final T... objects);
-
-   /**
-    * Monitor the given objects using the given complete condition.
-    * 
-    * @param completeCondition
-    *           The function that will be used to decide if the asynchronous
-    *           operations have finished.
-    * @param objects
-    *           The objects to monitor.
-    */
-   <T> void monitor(final Function<T, MonitorStatus> completeCondition, final T... objects);
-
-   /**
-    * Monitor the given objects using the given complete condition.
-    * 
-    * @param maxWait
-    *           The maximum time to wait.
-    * @param timeUnit
-    *           The time unit for the maxWait parameter.
-    * @param completeCondition
-    *           The function that will be used to decide if the asynchronous
-    *           operations have finished.
-    * @param objects
-    *           The objects to monitor.
-    */
-   <T> void monitor(final Long maxWait, final TimeUnit timeUnit,
-         final Function<T, MonitorStatus> completeCondition, final T... objects);
-
-   /*************** Handler registration methods ***************/
-
-   /**
-    * Registers the given event handler.
-    * 
-    * @param <T>
-    *           The type of event handler to register.
-    * @param handler
-    *           The event handler to register.
-    */
-   <T extends AbstractEventHandler<?>> void register(T handler);
-
-   /**
-    * Unregisters the given event handler.
-    * 
-    * @param <T>
-    *           The type of event handler to unregister.
-    * @param handler
-    *           The event handler to unregister.
-    */
-   <T extends AbstractEventHandler<?>> void unregister(T handler);
-
-   /*************** Delegating monitors ***************/
-
-   /**
-    * Gets the virtual machine monitor service.
-    * 
-    * @return The virtual machine monitor service.
-    */
-   VirtualMachineMonitor getVirtualMachineMonitor();
-
-   /**
-    * Gets the virtual appliance monitor service.
-    * 
-    * @return The virtual appliance monitor service.
-    */
-   VirtualApplianceMonitor getVirtualApplianceMonitor();
-
-   /**
-    * Gets the asynchronous task monitor service.
-    * 
-    * @return The asynchronous task monitor service.
-    */
-   AsyncTaskMonitor getAsyncTaskMonitor();
-
-   /**
-    * Gets the conversion monitor service.
-    * 
-    * @return The conversion monitor service.
-    */
-   ConversionMonitor getConversionMonitor();
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/functions/AppendApiVersionToAbiquoMimeType.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/AppendApiVersionToAbiquoMimeType.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/AppendApiVersionToAbiquoMimeType.java
index e62ad40..0e2be07 100644
--- a/abiquo/src/main/java/org/jclouds/abiquo/functions/AppendApiVersionToAbiquoMimeType.java
+++ b/abiquo/src/main/java/org/jclouds/abiquo/functions/AppendApiVersionToAbiquoMimeType.java
@@ -20,7 +20,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import javax.ws.rs.core.MediaType;
 
 import org.jclouds.rest.annotations.ApiVersion;
 
@@ -38,23 +37,18 @@ public class AppendApiVersionToAbiquoMimeType implements Function<String, String
    protected String apiVersion;
 
    @Inject
-   public AppendApiVersionToAbiquoMimeType(@ApiVersion final String apiVersion) {
-      super();
+   AppendApiVersionToAbiquoMimeType(@ApiVersion final String apiVersion) {
       this.apiVersion = checkNotNull(apiVersion, "apiVersion");
    }
 
    @Override
    public String apply(final String input) {
-      MediaType mediaType = MediaType.valueOf(checkNotNull(input, "input"));
-      if (isAbiquoMimeType(input) && !mediaType.getParameters().containsKey("version")) {
-         return mediaType.toString() + ";version=" + apiVersion;
+      checkNotNull(input, "input");
+      if (input.startsWith(ABIQUO_MIME_TYPE_PREFIX) && !input.contains("version")) {
+         return input + ";version=" + apiVersion;
       } else {
-         return mediaType.toString();
+         return input;
       }
    }
 
-   private static boolean isAbiquoMimeType(final String mimeType) {
-      return mimeType.startsWith(ABIQUO_MIME_TYPE_PREFIX);
-   }
-
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/functions/ParseErrors.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/ParseErrors.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/ParseErrors.java
deleted file mode 100644
index e348f9f..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/functions/ParseErrors.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.abiquo.functions;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.http.functions.ParseXMLWithJAXB;
-import org.jclouds.xml.XMLParser;
-
-import com.abiquo.model.transport.error.ErrorsDto;
-import com.google.inject.TypeLiteral;
-
-/**
- * Parses a errors object.
- */
-@Singleton
-public class ParseErrors extends ParseXMLWithJAXB<ErrorsDto> {
-   @Inject
-   public ParseErrors(final XMLParser xml, final TypeLiteral<ErrorsDto> type) {
-      super(xml, type);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/1b689dc1/abiquo/src/main/java/org/jclouds/abiquo/functions/ReturnTaskReferenceOrNull.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/functions/ReturnTaskReferenceOrNull.java b/abiquo/src/main/java/org/jclouds/abiquo/functions/ReturnTaskReferenceOrNull.java
deleted file mode 100644
index b7c8b81..0000000
--- a/abiquo/src/main/java/org/jclouds/abiquo/functions/ReturnTaskReferenceOrNull.java
+++ /dev/null
@@ -1,60 +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.abiquo.functions;
-
-import static org.jclouds.http.HttpUtils.releasePayload;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import javax.ws.rs.core.Response.Status;
-
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ParseXMLWithJAXB;
-import org.jclouds.xml.XMLParser;
-
-import com.abiquo.model.transport.AcceptedRequestDto;
-import com.google.inject.TypeLiteral;
-
-/**
- * Return an {@link AcceptedRequestDto} representing the asynchronous task or
- * <code>null</code> if the operation completed synchronously.
- * <p>
- * Operations that generate asynchronous tasks will return one of the following:
- * <ul>
- * <li>204 if the operation completed synchronously</li>
- * <li>202 with the asynchronous task reference in the body if the operation has
- * been submitted and will be executed asynchronously</li>
- * </ul>
- */
-@Singleton
-public class ReturnTaskReferenceOrNull extends ParseXMLWithJAXB<AcceptedRequestDto<String>> {
-   @Inject
-   public ReturnTaskReferenceOrNull(final XMLParser xml, final TypeLiteral<AcceptedRequestDto<String>> type) {
-      super(xml, type);
-   }
-
-   @Override
-   public AcceptedRequestDto<String> apply(final HttpResponse from) {
-      if (from.getStatusCode() == Status.NO_CONTENT.getStatusCode()) {
-         releasePayload(from);
-         return null;
-      } else {
-         return super.apply(from);
-      }
-   }
-
-}