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 2013/11/14 12:23:14 UTC

[11/13] git commit: Fix code style of the cloudsigma2 provider.

Fix code style of the cloudsigma2 provider.


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/0d70c84a
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/0d70c84a
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/0d70c84a

Branch: refs/heads/master
Commit: 0d70c84a3872e0ed85e4c8708e2b51a2dd6989fb
Parents: 0bebb58
Author: Vladimir Shevchenko <sh...@gmail.com>
Authored: Thu Nov 14 01:13:47 2013 +0700
Committer: Ignasi Barrera <na...@apache.org>
Committed: Thu Nov 14 12:20:57 2013 +0100

----------------------------------------------------------------------
 cloudsigma2/pom.xml                             |  188 +-
 .../org/jclouds/cloudsigma2/CloudSigma2Api.java | 2030 ++++++-----
 .../cloudsigma2/CloudSigma2ApiMetadata.java     |   30 +-
 .../binders/BindCreateSubscriptionRequest.java  |   35 +-
 .../BindCreateSubscriptionRequestList.java      |   49 +-
 .../cloudsigma2/binders/BindDriveToJson.java    |   34 +-
 .../cloudsigma2/binders/BindDrivesToJson.java   |   49 +-
 .../BindFirewallPoliciesListToJsonRequest.java  |   48 +-
 .../BindFirewallPolicyToJsonRequest.java        |   34 +-
 .../binders/BindIPInfoToJsonRequest.java        |   34 +-
 .../binders/BindLibraryDriveToJson.java         |   28 +-
 .../binders/BindProfileInfoToJsonRequest.java   |   28 +-
 .../BindServerInfoListToJsonRequest.java        |   49 +-
 .../binders/BindServerInfoToJsonRequest.java    |   28 +-
 .../binders/BindTagListToJsonRequest.java       |   48 +-
 .../binders/BindTagToJsonRequest.java           |   34 +-
 .../binders/BindUuidStringsToJsonArray.java     |   41 +-
 .../binders/BindVLANToJsonRequest.java          |   30 +-
 .../config/CloudSigma2HttpApiModule.java        |   12 +-
 .../config/CloudSigma2ParserModule.java         |   10 +-
 .../config/CloudSigma2Properties.java           |   11 +-
 .../cloudsigma2/domain/AccountBalance.java      |   92 +-
 .../cloudsigma2/domain/AccountUsage.java        |  421 +--
 .../jclouds/cloudsigma2/domain/BurstLevel.java  |  408 +--
 .../domain/CreateSubscriptionRequest.java       |  132 +-
 .../cloudsigma2/domain/CurrentUsage.java        |  130 +-
 .../cloudsigma2/domain/DeviceEmulationType.java |   30 +-
 .../jclouds/cloudsigma2/domain/Discount.java    |   86 +-
 .../org/jclouds/cloudsigma2/domain/Drive.java   |  287 +-
 .../jclouds/cloudsigma2/domain/DriveInfo.java   |  608 ++--
 .../cloudsigma2/domain/DriveLicense.java        |  160 +-
 .../jclouds/cloudsigma2/domain/DriveStatus.java |    1 -
 .../domain/DrivesListRequestFieldsGroup.java    |   38 +-
 .../cloudsigma2/domain/FirewallAction.java      |   30 +-
 .../cloudsigma2/domain/FirewallDirection.java   |   30 +-
 .../cloudsigma2/domain/FirewallIpProtocol.java  |   30 +-
 .../cloudsigma2/domain/FirewallPolicy.java      |  374 +-
 .../cloudsigma2/domain/FirewallRule.java        |  441 +--
 .../org/jclouds/cloudsigma2/domain/IOStats.java |  166 +-
 .../java/org/jclouds/cloudsigma2/domain/IP.java |  444 +--
 .../cloudsigma2/domain/IPConfiguration.java     |  148 +-
 .../cloudsigma2/domain/IPConfigurationType.java |   30 +-
 .../org/jclouds/cloudsigma2/domain/IPInfo.java  |  442 +--
 .../cloudsigma2/domain/InterfaceType.java       |   30 +-
 .../org/jclouds/cloudsigma2/domain/Item.java    |  266 +-
 .../cloudsigma2/domain/LibraryDrive.java        |  696 ++--
 .../org/jclouds/cloudsigma2/domain/License.java |  292 +-
 .../jclouds/cloudsigma2/domain/MediaType.java   |    2 +-
 .../org/jclouds/cloudsigma2/domain/Model.java   |    1 -
 .../org/jclouds/cloudsigma2/domain/NIC.java     |  400 +-
 .../jclouds/cloudsigma2/domain/NICStats.java    |  160 +-
 .../org/jclouds/cloudsigma2/domain/Owner.java   |  265 +-
 .../cloudsigma2/domain/PaginatedCollection.java |   56 +-
 .../org/jclouds/cloudsigma2/domain/Price.java   |  386 +-
 .../org/jclouds/cloudsigma2/domain/Pricing.java |  160 +-
 .../jclouds/cloudsigma2/domain/ProfileInfo.java | 1009 +++---
 .../org/jclouds/cloudsigma2/domain/Server.java  |  277 +-
 .../domain/ServerAvailabilityGroup.java         |   62 +-
 .../jclouds/cloudsigma2/domain/ServerDrive.java |  281 +-
 .../jclouds/cloudsigma2/domain/ServerInfo.java  |  826 +++--
 .../cloudsigma2/domain/ServerRuntime.java       |  114 +-
 .../cloudsigma2/domain/ServerStatus.java        |    2 +-
 .../cloudsigma2/domain/Subscription.java        |  864 ++---
 .../domain/SubscriptionResource.java            |   31 +-
 .../org/jclouds/cloudsigma2/domain/Tag.java     |  234 +-
 .../jclouds/cloudsigma2/domain/TagResource.java |  246 +-
 .../cloudsigma2/domain/TagResourceType.java     |   30 +-
 .../jclouds/cloudsigma2/domain/Transaction.java |  333 +-
 .../org/jclouds/cloudsigma2/domain/Usage.java   |  160 +-
 .../jclouds/cloudsigma2/domain/VLANInfo.java    |  432 +--
 .../CreateSubscriptionRequestToJson.java        |   34 +-
 .../cloudsigma2/functions/DriveToJson.java      |   48 +-
 .../functions/FirewallPolicyToJson.java         |   86 +-
 .../cloudsigma2/functions/IPInfoToJson.java     |   24 +-
 .../functions/LibraryDriveToJson.java           |   34 +-
 .../functions/ProfileInfoToJson.java            |  102 +-
 .../cloudsigma2/functions/ServerInfoToJson.java |  200 +-
 .../cloudsigma2/functions/TagToJson.java        |   36 +-
 .../cloudsigma2/functions/VLANInfoToJson.java   |   22 +-
 .../functions/internal/ParseDiscounts.java      |   56 +-
 .../functions/internal/ParseDriveInfos.java     |   54 +-
 .../functions/internal/ParseDrives.java         |   54 +-
 .../internal/ParseFirewallPolicies.java         |   90 +-
 .../functions/internal/ParseIPInfos.java        |   56 +-
 .../functions/internal/ParseIPs.java            |   54 +-
 .../functions/internal/ParseLibraryDrives.java  |   54 +-
 .../functions/internal/ParseLicenses.java       |   54 +-
 .../functions/internal/ParseServerInfos.java    |   54 +-
 .../functions/internal/ParseServers.java        |   54 +-
 .../functions/internal/ParseSubscriptions.java  |   90 +-
 .../functions/internal/ParseTags.java           |   88 +-
 .../functions/internal/ParseTransactions.java   |   54 +-
 .../functions/internal/ParseVLANs.java          |   88 +-
 .../handlers/CloudSigmaErrorHandler.java        |   53 +-
 .../cloudsigma2/options/PaginationOptions.java  |  176 +-
 .../cloudsigma2/CloudSigma2ApiExpectTest.java   | 3414 +++++++++---------
 .../cloudsigma2/CloudSigma2ApiLiveTest.java     | 1168 +++---
 .../functions/CloudSigma2ParserTest.java        |   20 +-
 .../CreateSubscriptionRequestToJsonTest.java    |   40 +-
 .../cloudsigma2/functions/DriveToJsonTest.java  |   98 +-
 .../functions/FirewallPolicyToJsonTest.java     |  202 +-
 .../cloudsigma2/functions/IPInfoToJsonTest.java |   82 +-
 .../functions/LibraryDriveToJsonTest.java       |   91 +-
 .../functions/ProfileInfoToJsonTest.java        |  120 +-
 .../functions/ServerInfoToJsonTest.java         |  226 +-
 .../cloudsigma2/functions/TagToJsonTest.java    |   94 +-
 .../functions/VLANInfoToJsonTest.java           |   77 +-
 107 files changed, 11238 insertions(+), 11102 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/0d70c84a/cloudsigma2/pom.xml
----------------------------------------------------------------------
diff --git a/cloudsigma2/pom.xml b/cloudsigma2/pom.xml
index 5b57f00..7863e2b 100644
--- a/cloudsigma2/pom.xml
+++ b/cloudsigma2/pom.xml
@@ -17,101 +17,107 @@
     limitations under the License.
 
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.jclouds.labs</groupId>
+        <artifactId>jclouds-labs</artifactId>
+        <version>1.7.0-SNAPSHOT</version>
+    </parent>
+
+    <!-- TODO: when out of labs, switch to org.jclouds.provider -->
     <groupId>org.apache.jclouds.labs</groupId>
-    <artifactId>jclouds-labs</artifactId>
+    <artifactId>cloudsigma2</artifactId>
     <version>1.7.0-SNAPSHOT</version>
-  </parent>
+    <name>jclouds CloudSigma v2 API</name>
+    <description>ComputeService binding to the CloudSigma v2 API</description>
+    <packaging>bundle</packaging>
 
-  <!-- TODO: when out of labs, switch to org.jclouds.provider -->
-  <groupId>org.apache.jclouds.labs</groupId>
-  <artifactId>cloudsigma2</artifactId>
-  <version>1.7.0-SNAPSHOT</version>
-  <name>jclouds CloudSigma v2 API</name>
-  <description>ComputeService binding to the CloudSigma v2 API</description>
-  <packaging>bundle</packaging>
-  
-  <properties>
-    <test.cloudsigma2.endpoint>https://zrh.cloudsigma.com/api/2.0/</test.cloudsigma2.endpoint>
-    <test.cloudsigma2.api-version>2.0</test.cloudsigma2.api-version>
-    <test.cloudsigma2.identity>FIXME</test.cloudsigma2.identity>
-    <test.cloudsigma2.credential>FIXME</test.cloudsigma2.credential>
-    <test.cloudsigma2.template>imageId=f3c7c665-cd54-4a78-8fd2-7ec2f028cf29</test.cloudsigma2.template>
-    <jclouds.osgi.export>org.jclouds.cloudsigma2*;version="${project.version}"</jclouds.osgi.export>
-    <jclouds.osgi.import>
-      org.jclouds.compute.internal;version="${project.version}",
-      org.jclouds.rest.internal;version="${project.version}",
-      org.jclouds*;version="${project.version}",
-      *
-    </jclouds.osgi.import>
-  </properties>
+    <properties>
+        <test.cloudsigma2.endpoint>https://zrh.cloudsigma.com/api/2.0/</test.cloudsigma2.endpoint>
+        <test.cloudsigma2.api-version>2.0</test.cloudsigma2.api-version>
+        <test.cloudsigma2.identity>FIXME</test.cloudsigma2.identity>
+        <test.cloudsigma2.credential>FIXME</test.cloudsigma2.credential>
+        <test.cloudsigma2.template>imageId=f3c7c665-cd54-4a78-8fd2-7ec2f028cf29</test.cloudsigma2.template>
+        <jclouds.osgi.export>org.jclouds.cloudsigma2*;version="${project.version}"</jclouds.osgi.export>
+        <jclouds.osgi.import>
+            org.jclouds.compute.internal;version="${project.version}",
+            org.jclouds.rest.internal;version="${project.version}",
+            org.jclouds*;version="${project.version}",
+            *
+        </jclouds.osgi.import>
+    </properties>
 
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-compute</artifactId>
-      <version>${project.parent.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jclouds.driver</groupId>
-      <artifactId>jclouds-sshj</artifactId>
-      <version>${project.parent.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-core</artifactId>
-      <version>${project.parent.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-compute</artifactId>
-      <version>${project.parent.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jclouds.driver</groupId>
-      <artifactId>jclouds-log4j</artifactId>
-      <version>${project.parent.version}</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.jclouds</groupId>
+            <artifactId>jclouds-compute</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jclouds.driver</groupId>
+            <artifactId>jclouds-sshj</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jclouds</groupId>
+            <artifactId>jclouds-core</artifactId>
+            <version>${project.parent.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jclouds</groupId>
+            <artifactId>jclouds-compute</artifactId>
+            <version>${project.parent.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jclouds.driver</groupId>
+            <artifactId>jclouds-log4j</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 
-  <profiles>
-    <profile>
-      <id>live</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>integration</id>
-                <phase>integration-test</phase>
-                <goals>
-                  <goal>test</goal>
-                </goals>
-                <configuration>
-                  <systemPropertyVariables>
-                    <test.cloudsigma2.endpoint>${test.cloudsigma2.endpoint}</test.cloudsigma2.endpoint>
-                    <test.cloudsigma2.api-version>${test.cloudsigma2.api-version}</test.cloudsigma2.api-version>
-                    <test.cloudsigma2.build-version>${test.cloudsigma2.build-version}</test.cloudsigma2.build-version>
-                    <test.cloudsigma2.credential>${test.cloudsigma2.credential}</test.cloudsigma2.credential>
-                    <test.cloudsigma2.template>${test.cloudsigma2.template}</test.cloudsigma2.template>
-                  </systemPropertyVariables>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
+    <profiles>
+        <profile>
+            <id>live</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>integration</id>
+                                <phase>integration-test</phase>
+                                <goals>
+                                    <goal>test</goal>
+                                </goals>
+                                <configuration>
+                                    <systemPropertyVariables>
+                                        <test.cloudsigma2.endpoint>${test.cloudsigma2.endpoint}
+                                        </test.cloudsigma2.endpoint>
+                                        <test.cloudsigma2.api-version>${test.cloudsigma2.api-version}
+                                        </test.cloudsigma2.api-version>
+                                        <test.cloudsigma2.build-version>${test.cloudsigma2.build-version}
+                                        </test.cloudsigma2.build-version>
+                                        <test.cloudsigma2.credential>${test.cloudsigma2.credential}
+                                        </test.cloudsigma2.credential>
+                                        <test.cloudsigma2.template>${test.cloudsigma2.template}
+                                        </test.cloudsigma2.template>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 
 </project>

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/0d70c84a/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2Api.java
----------------------------------------------------------------------
diff --git a/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2Api.java b/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2Api.java
index b594169..83886f4 100644
--- a/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2Api.java
+++ b/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2Api.java
@@ -106,1020 +106,1018 @@ import java.util.List;
 @SkipEncoding({'?', '/', '='})
 public interface CloudSigma2Api extends Closeable {
 
-    /**
-     * Gets the list of drives to which the authenticated user has access.
-     *
-     * @return list of drives or empty list if no drives are found
-     */
-    @Named("drive:listDrives")
-    @GET
-    @Path("/drives/")
-    @ResponseParser(ParseDrives.class)
-    @Transform(ParseDrives.ToPagedIterable.class)
-    PagedIterable<Drive> listDrives();
-
-    /**
-     * Gets the list of drives to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of drives
-     */
-    @Named("drive:listDrives")
-    @GET
-    @Path("/drives/")
-    @ResponseParser(ParseDrives.class)
-    PaginatedCollection<Drive> listDrives(PaginationOptions options);
-
-    /**
-     * Gets the list of drives to which the authenticated user has access.
-     *
-     * @param fields A set of field names specifying the returned fields
-     * @param limit number of drives to show
-     * @return or empty set if no drives are found
-     */
-    @Named("drive:listDrives")
-    @GET
-    @Path("/drives/")
-    @SelectJson("objects")
-    List<DriveInfo> listDrives(@QueryParam("fields") DrivesListRequestFieldsGroup fields
-            , @DefaultValue("0") @QueryParam("limit") int limit);
-
-    /**
-     * Gets the detailed list of drives with additional information to which the authenticated user has access.
-     *
-     * @return list of drives or empty list if no drives are found
-     */
-    @Named("drive:listDrivesInfo")
-    @GET
-    @Path("/drives/detail/")
-    @ResponseParser(ParseDriveInfos.class)
-    @Transform(ParseDriveInfos.ToPagedIterable.class)
-    PagedIterable<DriveInfo> listDrivesInfo();
-
-    /**
-     * Gets the detailed list of drives with additional information to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of drives
-     */
-    @Named("drive:listDrivesInfo")
-    @GET
-    @Path("/drives/detail/")
-    @ResponseParser(ParseDriveInfos.class)
-    PaginatedCollection<DriveInfo> listDrivesInfo(PaginationOptions options);
-
-    /**
-     * Gets detailed information for drive identified by drive uuid
-     *
-     * @param uuid drive uuid to get
-     * @return null, if not found
-     */
-    @Named("drive:getDriveInfo/{uuid}")
-    @GET
-    @Path("/drives/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    DriveInfo getDriveInfo(@PathParam("uuid") String uuid);
-
-    /**
-     * Creates a new drive
-     *
-     * @param createDrive required parameters: name, size, media
-     * @return newly created drive
-     */
-    @Named("drive:createDrive")
-    @POST
-    @Path("/drives/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    @SelectJson("objects")
-    @OnlyElement
-    DriveInfo createDrive(@BinderParam(BindDriveToJson.class) DriveInfo createDrive);
-
-    /**
-     * Creates multiple new drives
-     *
-     * @param createDrives required parameters: name, size, media
-     * @return newly created drives
-     */
-    @Named("drive:listDrives")
-    @POST
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    @SelectJson("objects")
-    @Path("/drives/")
-    List<DriveInfo> createDrives(@BinderParam(BindDrivesToJson.class) List<DriveInfo> createDrives);
-
-    /**
-     * Deletes a single mounted or unmounted drive.
-     *
-     * @param uuid what to delete
-     */
-    @Named("drive:deleteDrive/{uuid}")
-    @DELETE
-    @Path("/drives/{uuid}/")
-    @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
-    void deleteDrive(@PathParam("uuid") String uuid);
-
-    /**
-     * Deletes multiple mounted or unmounted drives specified by their UUID’s.
-     *
-     * @param uuids what drives to delete
-     */
-    @Named("drive:deleteDrives")
-    @DELETE
-    @Path("/drives/")
-    @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
-    void deleteDrives(@BinderParam(BindUuidStringsToJsonArray.class) Iterable<String> uuids);
-
-    /**
-     * Edits a mounted or unmounted drive. If mounted, the server mounted on should be stopped.
-     *
-     * @param sourceUuid source drive to edit
-     * @param driveInfo drive parameters to change
-     * @return changed drive
-     */
-    @Named("drive:editDrive/{uuid}")
-    @PUT
-    @Path("/drives/{uuid}/")
-    @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
-    DriveInfo editDrive(@PathParam("uuid") String sourceUuid
-            , @BinderParam(BindDriveToJson.class) DriveInfo driveInfo);
-
-
-    /**
-     * Clones a drive. Request body is optional and any or all of the key/value pairs can be omitted.
-     *
-     * @param sourceUuid source drive to clone
-     * @param driveInfo drive parameters to change
-     * @return new drive
-     */
-    @Named("drive:cloneDrive/{uuid}")
-    @POST
-    @Path("/drives/{uuid}/action/?do=clone")
-    @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
-    DriveInfo cloneDrive(@PathParam("uuid") String sourceUuid
-            , @Nullable @BinderParam(BindDriveToJson.class) DriveInfo driveInfo);
-
-    /**
-     * Gets the list of library drives to which the authenticated user has access.
-     *
-     * @return list of library drives to which the authenticated user has access
-     */
-    @Named("libdrive:listLibraryDrives")
-    @GET
-    @Path("/libdrives/")
-    @ResponseParser(ParseLibraryDrives.class)
-    @Transform(ParseLibraryDrives.ToPagedIterable.class)
-    PagedIterable<LibraryDrive> listLibraryDrives();
-
-    /**
-     * Gets the list of library drives to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of library drives
-     */
-    @Named("libdrive:listLibraryDrives")
-    @GET
-    @Path("/libdrives/")
-    @ResponseParser(ParseLibraryDrives.class)
-    PaginatedCollection<LibraryDrive> listLibraryDrives(PaginationOptions options);
-
-    /**
-     * Gets detailed information for library drive identified by uuid.
-     *
-     * @param uuid uuid of library drive to be listed
-     * @return drive information or null if not found
-     */
-    @Named("libdrive:getLibraryDrive/{uuid}")
-    @GET
-    @Path("/libdrives/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    LibraryDrive getLibraryDrive(@PathParam("uuid") String uuid);
-
-    /**
-     * If a library drive is not a CDROM, you have to clone it in your account in order to use it.
-     *
-     * @param uuid uuid of library drive to clone
-     * @param libraryDrive cloned drive
-     * @return cloned drive information or null if not found
-     */
-    @Named("libdrive:cloneLibraryDrive/{uuid}")
-    @POST
-    @Path("/libdrives/{uuid}/action/?do=clone")
-    @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
-    LibraryDrive cloneLibraryDrive(@PathParam("uuid") String uuid
-            , @Nullable @BinderParam(BindLibraryDriveToJson.class) LibraryDrive libraryDrive);
-
-    /**
-     * Gets the list of servers to which the authenticated user has access.
-     *
-     * @return list of servers or empty list if no servers are found
-     */
-    @Named("server:listServers")
-    @GET
-    @Path("/servers/")
-    @ResponseParser(ParseServers.class)
-    @Transform(ParseServers.ToPagedIterable.class)
-    PagedIterable<Server> listServers();
-
-    /**
-     * Gets the list of servers to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of servers
-     */
-    @Named("server:listServers")
-    @GET
-    @Path("/servers/")
-    @ResponseParser(ParseServers.class)
-    PaginatedCollection<Server> listServers(PaginationOptions options);
-
-    /**
-     * Gets the detailed list of servers to which the authenticated user has access.
-     *
-     * @return list of servers or empty list if no servers are found
-     */
-    @Named("server:listServersInfo")
-    @GET
-    @Path("/servers/detail/")
-    @ResponseParser(ParseServerInfos.class)
-    @Transform(ParseServerInfos.ToPagedIterable.class)
-    PagedIterable<ServerInfo> listServersInfo();
-
-    /**
-     * Gets the detailed list of servers to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of servers
-     */
-    @Named("server:listServersInfo")
-    @GET
-    @Path("/servers/detail/")
-    @ResponseParser(ParseServerInfos.class)
-    PaginatedCollection<ServerInfo> listServersInfo(PaginationOptions options);
-
-    /**
-     * Creates a new virtual server or multiple servers.
-     * The minimial amount of information you need to set is:
-     *      cpu
-     *      memory
-     *      name
-     *      vncPassword
-     *
-     * @param createServer required parameters: cpu, memory, name, vncPassword
-     * @return newly created server
-     */
-    @Named("server:createServer")
-    @POST
-    @Path("/servers/")
-    @SelectJson("objects")
-    @OnlyElement
-    ServerInfo createServer(@BinderParam(BindServerInfoToJsonRequest.class) ServerInfo createServer);
-
-    /**
-     * create a new servers
-     *
-     * @param servers servers to create. Required parameters: cpu, memory, name, vncPassword
-     * @return newly created servers
-     */
-    @Named("server:createServers")
-    @POST
-    @Path("/servers/")
-    @SelectJson("objects")
-    List<ServerInfo> createServers(@BinderParam(BindServerInfoListToJsonRequest.class) Iterable<ServerInfo> servers);
-
-    /**
-     * Edits a server. Used also for attaching NIC’s and drives to servers.
-     *
-     * @param uuid server uuid
-     * @param server data to change
-     * @return modified server
-     */
-    @Named("server:editServer/{uuid}")
-    @PUT
-    @Path("/servers/{uuid}/")
-    @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
-    ServerInfo editServer(@PathParam("uuid") String uuid
-            , @BinderParam(BindServerInfoToJsonRequest.class) ServerInfo server);
-
-    /**
-     * Deletes a single server.
-     *
-     * @param uuid uuid of server to delete
-     */
-    @Named("server:deleteServer/{uuid}")
-    @DELETE
-    @Path("/servers/{uuid}/")
-    @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
-    void deleteServer(@PathParam("uuid") String uuid);
-
-    /**
-     * Deletes multiple servers specified by their UUID’s.
-     *
-     * @param uuids server uuids to delete
-     */
-    @Named("server:deleteServers")
-    @DELETE
-    @Path("/servers/")
-    @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
-    void deleteServers(@BinderParam(BindUuidStringsToJsonArray.class) Iterable<String> uuids);
-
-    /**
-     * Clones a server. Empty body.
-     * Does cascading clone of server drives.
-     * IPs of the cloned server are set to DHCP.
-     * All other properties of the clone are equal to the original.
-     *
-     * @param uuid server what to clone
-     *
-     * @return cloned server
-     */
-    @Named("server:cloneServer/{uuid}")
-    @POST
-    @Path("/servers/{uuid}/action/?do=clone")
-    @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
-    ServerInfo cloneServer(@PathParam("uuid") String uuid);
-
-    /**
-     * Gets detailed information for server identified by server uuid.
-     *
-     * @param uuid server uuid
-     * @return server info or null, if not found
-     */
-    @Named("server:getServerInfo/{uuid}")
-    @GET
-    @Path("/servers/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    ServerInfo getServerInfo(@PathParam("uuid") String uuid);
-
-    /**
-     * Starts a server with specific UUID.
-     *
-     * @param uuid uuid of server to start
-     */
-    @Named("server:startServer/{uuid}")
-    @POST
-    @Path("/servers/{uuid}/action/?do=start")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    void startServer(@PathParam("uuid") String uuid);
-
-    /**
-     * Stops a server with specific UUID.
-     *
-     * @param uuid uuid of server to stop
-     */
-    @Named("server:stopServer/{uuid}")
-    @POST
-    @Path("/servers/{uuid}/action/?do=stop")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    void stopServer(@PathParam("uuid") String uuid);
-
-    /**
-     * Starts a server with specific UUID assuring that it is started on a different physical infrastructure host
-     * from the other servers specified in the avoid argument which is
-     * a single server UUID or a comma-separated list of server UUIDs.
-     * This way the server specified by uuid is run in a distinct availability group from the other listed servers.
-     * Note that it might not always be possible to run a server in a different availability group,
-     * therefore the order of the avoid list also signifies the priority of avoiding other servers.
-     *
-     * @param uuid      uuid of server to start
-     * @param uuidGroup availability group to avoid
-     */
-    @Named("server:startServerInSeparateAvailabilityGroup/{uuid}")
-    @POST
-    @Path("/servers/{uuid}/action/?do=start")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    void startServerInSeparateAvailabilityGroup(@PathParam("uuid") String uuid
-            , @QueryParam("avoid") List<String> uuidGroup);
-
-    /**
-     * Opens a VNC tunnel to a server with specific UUID.
-     *
-     * @param uuid uuid of server to open VNC tunnel
-     */
-    @Named("server:openServerVNCTunnel/{uuid}")
-    @POST
-    @Path("/servers/{uuid}/action/?do=open_vnc")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    void openServerVNCTunnel(@PathParam("uuid") String uuid);
-
-    /**
-     * Closes a VNC tunnel to a server with specific UUID.
-     *
-     * @param uuid uuid of server to close VNC tunnel
-     */
-    @Named("server:closeServerVCNTunnel/{uuid}")
-    @POST
-    @Path("/servers/{uuid}/action/?do=close_vnc")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    void closeServerVCNTunnel(@PathParam("uuid") String uuid);
-
-    /**
-     * @return which servers share same physical infrastructure host.
-     */
-    @Named("server:listServerAvailabilityGroup")
-    @GET
-    @Path("/servers/availability_groups/")
-    List<List<String>> listServerAvailabilityGroup();
-
-    /**
-     * Queries which other servers share same physical host with the given one.
-     *
-     * @param uuid Uuid of server to find availability group
-     *
-     * @return an array holding server UUIDs. The response includes also the UUID of the queried server.
-     */
-    @Named("server:getServerAvailabilityGroup/{uuid}")
-    @GET
-    @PathParam("/servers/availability_groups/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    ServerAvailabilityGroup getServerAvailabilityGroup(@PathParam("uuid") String uuid);
-
-    /**
-     * Gets the list of firewall policies to which the authenticated user has access.
-     *
-     * @return list of firewall policies to which the authenticated user has access.
-     */
-    @Named("fwpolicy:listFirewallPolicies")
-    @GET
-    @Path("/fwpolicies/")
-    @ResponseParser(ParseFirewallPolicies.class)
-    @Transform(ParseFirewallPolicies.ToPagedIterable.class)
-    PagedIterable<FirewallPolicy> listFirewallPolicies();
-
-    /**
-     * Gets the list of firewall policies to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of firewall policies
-     */
-    @Named("fwpolicy:listFirewallPolicies")
-    @GET
-    @Path("/fwpolicies/")
-    @ResponseParser(ParseFirewallPolicies.class)
-    PaginatedCollection<FirewallPolicy> listFirewallPolicies(PaginationOptions options);
-
-    /**
-     * Gets a detailed list of firewall policies to which the authenticated user has access.
-     *
-     * @return list of firewall policies to which the authenticated user has access.
-     */
-    @Named("fwpolicy:listFirewallPoliciesInfo")
-    @GET
-    @Path("/fwpolicies/detail/")
-    @ResponseParser(ParseFirewallPolicies.class)
-    @Transform(ParseFirewallPolicies.ToPagedIterableInfo.class)
-    PagedIterable<FirewallPolicy> listFirewallPoliciesInfo();
-
-    /**
-     * Gets a detailed list of firewall policies to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of firewall policies
-     */
-    @Named("fwpolicy:listFirewallPoliciesInfo")
-    @GET
-    @Path("/fwpolicies/detail/")
-    @ResponseParser(ParseFirewallPolicies.class)
-    PaginatedCollection<FirewallPolicy> listFirewallPoliciesInfo(PaginationOptions options);
-
-    /**
-     * Creates firewall policies.
-     *
-     * @param firewallPolicies firewall policies to create
-     * @return list of created firewall policies
-     */
-    @Named("fwpolicy:createFirewallPolicies")
-    @POST
-    @Path("/fwpolicies/")
-    @SelectJson("objects")
-    List<FirewallPolicy> createFirewallPolicies(
-            @BinderParam(BindFirewallPoliciesListToJsonRequest.class) List< FirewallPolicy > firewallPolicies);
-
-    /**
-     * Creates a firewall policy.
-     *
-     * @param firewallPolicy firewall policy to create
-     * @return created firewall policy
-     */
-    @Named("fwpolicy:createFirewallPolicy")
-    @POST
-    @Path("/fwpolicies/")
-    @SelectJson("objects")
-    @OnlyElement
-    FirewallPolicy createFirewallPolicy(
-            @BinderParam(BindFirewallPolicyToJsonRequest.class) FirewallPolicy firewallPolicy);
-
-    /**
-     * Update an existing firewall policy
-     *
-     * @param uuid uuid of policy to update
-     * @param firewallPolicy firewall policy data to update
-     * @return updated firewall policy
-     */
-    @Named("fwpolicy:editFirewallPolicy/{uuid}")
-    @PUT
-    @Path("/fwpolicies/{uuid}/")
-    FirewallPolicy editFirewallPolicy(@PathParam("uuid") String uuid
-            , @BinderParam(BindFirewallPolicyToJsonRequest.class) FirewallPolicy firewallPolicy);
-
-    /**
-     * Gets detailed information for VLAN identified by VLAN uuid.
-     *
-     * @param uuid uuid of VLAN to get
-     * @return null, if not found
-     */
-    @Named("vlan:getVLANInfo/{uuid}")
-    @GET
-    @Path("/vlans/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    VLANInfo getVLANInfo(@PathParam("uuid") String uuid);
-
-    /**
-     * Gets the list of VLANs to which the authenticated user has access.
-     *
-     * @return list of VLANs or empty list if no vlans are found
-     */
-    @Named("vlan:listVLANs")
-    @GET
-    @Path("/vlans/")
-    @ResponseParser(ParseVLANs.class)
-    @Transform(ParseVLANs.ToPagedIterable.class)
-    PagedIterable<VLANInfo> listVLANs();
-
-    /**
-     * Gets the list of VLANs to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of VLANs
-     */
-    @Named("vlan:listVLANs")
-    @GET
-    @Path("/vlans/")
-    @ResponseParser(ParseVLANs.class)
-    PaginatedCollection<VLANInfo> listVLANs(PaginationOptions options);
-
-    /**
-     * Gets the list of VLANs to which the authenticated user has access.
-     *
-     * @return list of VLANs or empty list if no vlans are found
-     */
-    @Named("vlan:listVLANInfo")
-    @GET
-    @Path("/vlans/detail/")
-    @ResponseParser(ParseVLANs.class)
-    @Transform(ParseVLANs.ToPagedIterableInfo.class)
-    PagedIterable<VLANInfo> listVLANInfo();
-
-    /**
-     * Gets the list of VLANs to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of VLANs
-     */
-    @Named("vlan:listVLANInfo")
-    @GET
-    @Path("/vlans/detail/")
-    @ResponseParser(ParseVLANs.class)
-    PaginatedCollection<VLANInfo> listVLANInfo(PaginationOptions options);
-
-    /**
-     * Currently only VLAN meta field can be edited.
-     *
-     * @param uuid uuid of VLAN to edit
-     * @param vlanInfo data to change
-     * @return changed VLAN
-     */
-    @Named("vlan:listVLANInfo/{uuid}")
-    @PUT
-    @Path("/vlans/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    VLANInfo editVLAN(@PathParam("uuid") String uuid
-            , @BinderParam(BindVLANToJsonRequest.class) VLANInfo vlanInfo);
-
-    /**
-     * Gets the list of IPs to which the authenticated user has access.
-     *
-     * @return list of IPs or empty list if no ips are found
-     */
-    @Named("ip:listIPs")
-    @GET
-    @Path("/ips/")
-    @ResponseParser(ParseIPs.class)
-    @Transform(ParseIPs.ToPagedIterable.class)
-    PagedIterable<IP> listIPs();
-
-    /**
-     * Gets the list of IPs to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of IPs
-     */
-    @Named("ip:listIPs")
-    @GET
-    @Path("/ips/")
-    @ResponseParser(ParseIPs.class)
-    PaginatedCollection<IP> listIPs(PaginationOptions options);
-
-    /**
-     * Gets the detailed list of IPs with additional information to which the authenticated user has access.
-     *
-     * @return list of IPs or empty list if no ips are found
-     */
-    @Named("ip:listIPInfo")
-    @GET
-    @Path("/ips/detail/")
-    @ResponseParser(ParseIPInfos.class)
-    @Transform(ParseIPInfos.ToPagedIterable.class)
-    PagedIterable<IPInfo> listIPInfo();
-
-    /**
-     * Gets the detailed list of IPs with additional information to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of IPs
-     */
-    @Named("ip:listIPInfo")
-    @GET
-    @Path("/ips/detail/")
-    @ResponseParser(ParseIPInfos.class)
-    PaginatedCollection<IPInfo> listIPInfo(PaginationOptions options);
-
-    /**
-     * Gets detailed information for IP identified by IP uuid.
-     *
-     * @param uuid uuid of IP to get
-     * @return null, if not found
-     */
-    @Named("ip:getIPInfo/{uuid}")
-    @GET
-    @Path("/ips/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    IPInfo getIPInfo(@PathParam("uuid") String uuid);
-
-    /**
-     * Currently only IP meta field can be edited.
-     *
-     * @param uuid uuid of IP to edit
-     * @param ipInfo data to change
-     * @return changed IP
-     */
-    @Named("ip:editIP/{uuid}")
-    @PUT
-    @Path("/ips/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    IPInfo editIP(@PathParam("uuid") String uuid
-            , @BinderParam(BindIPInfoToJsonRequest.class) IPInfo ipInfo);
-
-    /**
-     * Gets the list of tags to which the authenticated user has access.
-     *
-     * @return list of tags to which the authenticated user has access
-     */
-    @Named("tag:listTags")
-    @GET
-    @Path("/tags/")
-    @ResponseParser(ParseTags.class)
-    @Transform(ParseTags.ToPagedIterable.class)
-    PagedIterable<Tag> listTags();
-
-    /**
-     * Gets the list of tags to which the authenticated user has access.
-     *
-     * @return PaginatedCollection of tags to which the authenticated user has access
-     */
-    @Named("tag:listTags")
-    @GET
-    @Path("/tags/")
-    @ResponseParser(ParseTags.class)
-    PaginatedCollection<Tag> listTags(PaginationOptions options);
-
-    /**
-     * Gets the detailed list of tags with additional information to which the authenticated user has access,
-     * like the tagged resource
-     *
-     * @return detailed listings of your tags
-     */
-    @Named("tag:listTagsInfo")
-    @GET
-    @Path("/tags/detail/")
-    @ResponseParser(ParseTags.class)
-    @Transform(ParseTags.ToPagedIterableInfo.class)
-    PagedIterable<Tag> listTagsInfo();
-
-    /**
-     * Gets the detailed list of tags with additional information to which the authenticated user has access,
-     * like the tagged resource
-     *
-     * @return PaginatedCollection of detailed tags
-     */
-    @Named("tag:listTagsInfo")
-    @GET
-    @Path("/tags/detail/")
-    @ResponseParser(ParseTags.class)
-    PaginatedCollection<Tag> listTagsInfo(PaginationOptions options);
-
-    /**
-     * Gets detailed information for tag identified by tag uuid.
-     *
-     * @param uuid tag uuid
-     * @return detailed info of tag
-     */
-    @Named("tag:getTagInfo/{uuid}")
-    @GET
-    @Path("/tags/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    Tag getTagInfo(@PathParam("uuid") String uuid);
-
-    /**
-     * Edits a tag.
-     * It is possible to add or remove resources to a tag by replacing the resources list with a new one
-     *
-     * @param uuid tag uuid
-     * @param tag info to change
-     * @return detailed info of tag
-     */
-    @Named("tag:editTag/{uuid}")
-    @PUT
-    @Path("/tags/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    Tag editTag(@PathParam("uuid") String uuid, @BinderParam(BindTagToJsonRequest.class) Tag tag);
-
-    /**
-     * Creates a new tag
-     *
-     * @param tag tag to create
-     * @return created tag
-     */
-    @Named("tag:createTag")
-    @POST
-    @Path("/tags/")
-    @SelectJson("objects")
-    @OnlyElement
-    Tag createTag(@BinderParam(BindTagToJsonRequest.class) Tag tag);
-
-    /**
-     * Deletes a single tag.
-     *
-     * @param uuid uuid of tag to delete
-     */
-    @Named("tag:deleteTag/{uuid}")
-    @DELETE
-    @Path("/tags/{uuid}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    void deleteTag(@PathParam("uuid")String uuid);
-
-    /**
-     * Creates a multiple new tags
-     *
-     * @param tags tags to create
-     * @return created tags
-     */
-    @Named("tag:createTags")
-    @POST
-    @Path("/tags/")
-    @SelectJson("objects")
-    List<Tag> createTags(@BinderParam(BindTagListToJsonRequest.class) List<Tag> tags);
-
-    /**
-     * Gets the user profile.
-     *
-     * @return profile information
-     */
-    @Named("profile:getProfileInfo")
-    @GET
-    @Path("/profile/")
-    ProfileInfo getProfileInfo();
-
-    /**
-     * Edits a user profile.
-     *
-     * @param profile data to change
-     * @return info or null, if not found
-     */
-    @Named("profile:editProfileInfo")
-    @PUT
-    @Path("/profile/")
-    ProfileInfo editProfileInfo(@BinderParam(BindProfileInfoToJsonRequest.class) ProfileInfo profile);
-
-    /**
-     * Get the balance and currency of the current account.
-     *
-     * @return current account balance and currency
-     */
-    @Named("balance:getAccountBalance")
-    @GET
-    @Path("/balance/")
-    AccountBalance getAccountBalance();
-
-    /**
-     * Get the current usage of the user.
-     *
-     * @return current usage of the user
-     */
-    @Named("currentusage:getCurrentUsage")
-    @GET
-    @Path("/currentusage/")
-    CurrentUsage getCurrentUsage();
-
-    /**
-     * Gets the list of subscriptions of the user.
-     *
-     * @return list of subscriptions of the user.
-     */
-    @Named("subscription:listSubscriptions")
-    @GET
-    @Path("/subscriptions/")
-    @ResponseParser(ParseSubscriptions.class)
-    @Transform(ParseSubscriptions.ToPagedIterable.class)
-    PagedIterable<Subscription> listSubscriptions();
-
-    /**
-     * Gets the list of subscriptions of the user.
-     *
-     * @return PaginatedCollection of subscriptions of the user.
-     */
-    @Named("subscription:listSubscriptions")
-    @GET
-    @Path("/subscriptions/")
-    @ResponseParser(ParseSubscriptions.class)
-    PaginatedCollection<Subscription> listSubscriptions(PaginationOptions options);
-
-    /**
-     * Returns requested subscription
-     *
-     * @return requested subscription.
-     */
-    @Named("subscription:getSubscription")
-    @GET
-    @Path("/subscriptions/{id}/")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    Subscription getSubscription(@PathParam("id") String id);
-
-    /**
-     * This is identical to the listSubscriptions(), except that subscriptions are not actually bought.
-     *
-     * @return list of subscriptions that are not actually bought.
-     */
-    @Named("subscription:listSubscriptionsCalculator")
-    @GET
-    @Path("/subscriptioncalculator/")
-    @ResponseParser(ParseSubscriptions.class)
-    @Transform(ParseSubscriptions.ToPagedIterableCalculator.class)
-    PagedIterable<Subscription> listSubscriptionsCalculator();
-
-    /**
-     * This is identical to the listSubscriptions(), except that subscriptions are not actually bought.
-     *
-     * @return PaginatedCollection of subscriptions that are not actually bought.
-     */
-    @Named("subscription:listSubscriptionsCalculator")
-    @GET
-    @Path("/subscriptioncalculator/")
-    @ResponseParser(ParseSubscriptions.class)
-    PaginatedCollection<Subscription> listSubscriptionsCalculator(PaginationOptions options);
-
-    /**
-     * Creates a new subscription.
-     * Subscription times are rounded to noon UTC, using the following rules:
-     *      - End time is always rounded to the next noon.
-     *      - Start time is rounded to the maximum between the current time an the previous noon.
-     *      This means that subscriptions bought for now do start now, but subscriptions for the future start at the previous noon.
-     *
-     * @param subscriptionRequest subscription request object
-     * @return created subscription
-     */
-    @Named("subscription:listSubscriptionsCalculator")
-    @POST
-    @Path("/subscriptions/")
-    @SelectJson("objects")
-    @OnlyElement
-    Subscription createSubscription(
-            @BinderParam(BindCreateSubscriptionRequest.class) CreateSubscriptionRequest subscriptionRequest);
-
-    /**
-     * Creates a new subscription. There is a limit of 500 subscriptions that can be purchased in one request.
-     * Subscription times are rounded to noon UTC, using the following rules:
-     *      - End time is always rounded to the next noon.
-     *      - Start time is rounded to the maximum between the current time an the previous noon.
-     *      This means that subscriptions bought for now do start now, but subscriptions for the future start at the previous noon.
-     *
-     * @param subscriptionRequest parameters for new subscriptions
-     * @return new subscriptions
-     */
-    @Named("subscription:createSubscriptions")
-    @POST
-    @Path("/subscriptions/")
-    @SelectJson("objects")
-    List<Subscription> createSubscriptions(
-            @BinderParam(BindCreateSubscriptionRequestList.class) List<CreateSubscriptionRequest> subscriptionRequest);
-
-    /**
-     * Extends the subscription. An extended subscription is actually just another subscription that is linked to the original
-     * If a period or and end_time are specified in the request,they are used. If neither are specified,
-     * the creation length of the subscription is used.
-     *
-     * A caveat to this is that a subscription created initially with an end_time, the exact interval is used.
-     * Subscriptions that are created with a period have the period parsed again in the context of the new start_time.
-     * An example would be a subscription created on the 1st of February with a period of ‘1 month’ will be extended for 31 days,
-     * but one that was created with an end date of 1st of March will be extended for 28 days.
-     *
-     * If the specified subscription has actually been extended, it traverses and extends the last subscription in the chain.
-     *
-     * @param id id of subscription to extend
-     */
-    @Named("subscription:extendSubscription/{id}")
-    @POST
-    @Path("/subscriptions/{id}/action/?do=extend")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    void extendSubscription(@PathParam("id") String id);
-
-    /**
-     * Toggles the autorenew flag of the subscription.
-     *
-     * @param id id of subscription to enable autorenew
-     */
-    @Named("subscription:enableSubscriptionAutorenew/{id}")
-    @POST
-    @Path("/subscriptions/{id}/action/?do=auto_renew")
-    @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-    void enableSubscriptionAutorenew(@PathParam("id") String id);
-
-    /**
-     * Gets the pricing information that are applicable to the cloud. Subscription prices use a burst level of 0.
-     *
-     * @return pricing information that are applicable to the cloud.
-     */
-    @Named("pricing:getPricing")
-    @GET
-    @Path("/pricing/")
-    Pricing getPricing();
-
-    /**
-     * Get discount information.
-     *
-     * @return discount information.
-     */
-    @Named("discount:listDiscounts")
-    @GET
-    @Path("/discount/")
-    @ResponseParser(ParseDiscounts.class)
-    @Transform(ParseDiscounts.ToPagedIterable.class)
-    PagedIterable<Discount> listDiscounts();
-
-    /**
-     * Get discount information.
-     *
-     * @return PaginatedCollection of discount information.
-     */
-    @Named("discount:listDiscounts")
-    @GET
-    @Path("/discount/")
-    @ResponseParser(ParseDiscounts.class)
-    PaginatedCollection<Discount> listDiscounts(PaginationOptions options);
-
-    /**
-     * Get the transactions for the account.
-     *
-     * @return transactions for the account.
-     */
-    @Named("ledger:listTransactions")
-    @GET
-    @Path("/ledger/")
-    @ResponseParser(ParseTransactions.class)
-    @Transform(ParseTransactions.ToPagedIterable.class)
-    PagedIterable<Transaction> listTransactions();
-
-    /**
-     * Get the transactions for the account.
-     *
-     * @return PaginatedCollection of account's transactions.
-     */
-    @Named("ledger:listTransactions")
-    @GET
-    @Path("/ledger/")
-    @ResponseParser(ParseTransactions.class)
-    PaginatedCollection<Transaction> listTransactions(PaginationOptions options);
-
-    /**
-     * Get the licenses available on the cloud. The type of the license can be one of:
-     *      install - These licenses are billed per installation, regardless of whether it is attached to a running guests or not.
-     *      instance - These licenses are billed per running instance of a guest. A license attached to a guest that’s stopped is not billed.
-     *      stub - These licenses are billed per a metric specified by the customer (i.e. per number of users license)
-     *
-     * The user metric field specifies what attribute on the instance of the guest is used for determining the number of licenses.
-     * For example, “smp” will count one license for each CPU/core in the virtual machine.
-     *
-     * @return licenses available on the cloud
-     */
-    @Named("license:listLicenses")
-    @GET
-    @Path("/licenses/")
-    @ResponseParser(ParseLicenses.class)
-    @Transform(ParseLicenses.ToPagedIterable.class)
-    PagedIterable<License> listLicenses();
-
-    /**
-     * Get the licenses available on the cloud. The type of the license can be one of:
-     *      install - These licenses are billed per installation, regardless of whether it is attached to a running guests or not.
-     *      instance - These licenses are billed per running instance of a guest. A license attached to a guest that’s stopped is not billed.
-     *      stub - These licenses are billed per a metric specified by the customer (i.e. per number of users license)
-     *
-     * The user metric field specifies what attribute on the instance of the guest is used for determining the number of licenses.
-     * For example, “smp” will count one license for each CPU/core in the virtual machine.
-     *
-     * @return PaginatedCollection of licenses available on the cloud
-     */
-    @Named("license:listLicenses")
-    @GET
-    @Path("/licenses/")
-    @ResponseParser(ParseLicenses.class)
-    PaginatedCollection<License> listLicenses(PaginationOptions options);
+   /**
+    * Gets the list of drives to which the authenticated user has access.
+    *
+    * @return list of drives or empty list if no drives are found
+    */
+   @Named("drive:listDrives")
+   @GET
+   @Path("/drives/")
+   @ResponseParser(ParseDrives.class)
+   @Transform(ParseDrives.ToPagedIterable.class)
+   PagedIterable<Drive> listDrives();
+
+   /**
+    * Gets the list of drives to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of drives
+    */
+   @Named("drive:listDrives")
+   @GET
+   @Path("/drives/")
+   @ResponseParser(ParseDrives.class)
+   PaginatedCollection<Drive> listDrives(PaginationOptions options);
+
+   /**
+    * Gets the list of drives to which the authenticated user has access.
+    *
+    * @param fields A set of field names specifying the returned fields
+    * @param limit  number of drives to show
+    * @return or empty set if no drives are found
+    */
+   @Named("drive:listDrives")
+   @GET
+   @Path("/drives/")
+   @SelectJson("objects")
+   List<DriveInfo> listDrives(@QueryParam("fields") DrivesListRequestFieldsGroup fields
+         , @DefaultValue("0") @QueryParam("limit") int limit);
+
+   /**
+    * Gets the detailed list of drives with additional information to which the authenticated user has access.
+    *
+    * @return list of drives or empty list if no drives are found
+    */
+   @Named("drive:listDrivesInfo")
+   @GET
+   @Path("/drives/detail/")
+   @ResponseParser(ParseDriveInfos.class)
+   @Transform(ParseDriveInfos.ToPagedIterable.class)
+   PagedIterable<DriveInfo> listDrivesInfo();
+
+   /**
+    * Gets the detailed list of drives with additional information to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of drives
+    */
+   @Named("drive:listDrivesInfo")
+   @GET
+   @Path("/drives/detail/")
+   @ResponseParser(ParseDriveInfos.class)
+   PaginatedCollection<DriveInfo> listDrivesInfo(PaginationOptions options);
+
+   /**
+    * Gets detailed information for drive identified by drive uuid
+    *
+    * @param uuid drive uuid to get
+    * @return null, if not found
+    */
+   @Named("drive:getDriveInfo/{uuid}")
+   @GET
+   @Path("/drives/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   DriveInfo getDriveInfo(@PathParam("uuid") String uuid);
+
+   /**
+    * Creates a new drive
+    *
+    * @param createDrive required parameters: name, size, media
+    * @return newly created drive
+    */
+   @Named("drive:createDrive")
+   @POST
+   @Path("/drives/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   @SelectJson("objects")
+   @OnlyElement
+   DriveInfo createDrive(@BinderParam(BindDriveToJson.class) DriveInfo createDrive);
+
+   /**
+    * Creates multiple new drives
+    *
+    * @param createDrives required parameters: name, size, media
+    * @return newly created drives
+    */
+   @Named("drive:listDrives")
+   @POST
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   @SelectJson("objects")
+   @Path("/drives/")
+   List<DriveInfo> createDrives(@BinderParam(BindDrivesToJson.class) List<DriveInfo> createDrives);
+
+   /**
+    * Deletes a single mounted or unmounted drive.
+    *
+    * @param uuid what to delete
+    */
+   @Named("drive:deleteDrive/{uuid}")
+   @DELETE
+   @Path("/drives/{uuid}/")
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   void deleteDrive(@PathParam("uuid") String uuid);
+
+   /**
+    * Deletes multiple mounted or unmounted drives specified by their UUID’s.
+    *
+    * @param uuids what drives to delete
+    */
+   @Named("drive:deleteDrives")
+   @DELETE
+   @Path("/drives/")
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   void deleteDrives(@BinderParam(BindUuidStringsToJsonArray.class) Iterable<String> uuids);
+
+   /**
+    * Edits a mounted or unmounted drive. If mounted, the server mounted on should be stopped.
+    *
+    * @param sourceUuid source drive to edit
+    * @param driveInfo  drive parameters to change
+    * @return changed drive
+    */
+   @Named("drive:editDrive/{uuid}")
+   @PUT
+   @Path("/drives/{uuid}/")
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   DriveInfo editDrive(@PathParam("uuid") String sourceUuid
+         , @BinderParam(BindDriveToJson.class) DriveInfo driveInfo);
+
+
+   /**
+    * Clones a drive. Request body is optional and any or all of the key/value pairs can be omitted.
+    *
+    * @param sourceUuid source drive to clone
+    * @param driveInfo  drive parameters to change
+    * @return new drive
+    */
+   @Named("drive:cloneDrive/{uuid}")
+   @POST
+   @Path("/drives/{uuid}/action/?do=clone")
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   DriveInfo cloneDrive(@PathParam("uuid") String sourceUuid
+         , @Nullable @BinderParam(BindDriveToJson.class) DriveInfo driveInfo);
+
+   /**
+    * Gets the list of library drives to which the authenticated user has access.
+    *
+    * @return list of library drives to which the authenticated user has access
+    */
+   @Named("libdrive:listLibraryDrives")
+   @GET
+   @Path("/libdrives/")
+   @ResponseParser(ParseLibraryDrives.class)
+   @Transform(ParseLibraryDrives.ToPagedIterable.class)
+   PagedIterable<LibraryDrive> listLibraryDrives();
+
+   /**
+    * Gets the list of library drives to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of library drives
+    */
+   @Named("libdrive:listLibraryDrives")
+   @GET
+   @Path("/libdrives/")
+   @ResponseParser(ParseLibraryDrives.class)
+   PaginatedCollection<LibraryDrive> listLibraryDrives(PaginationOptions options);
+
+   /**
+    * Gets detailed information for library drive identified by uuid.
+    *
+    * @param uuid uuid of library drive to be listed
+    * @return drive information or null if not found
+    */
+   @Named("libdrive:getLibraryDrive/{uuid}")
+   @GET
+   @Path("/libdrives/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   LibraryDrive getLibraryDrive(@PathParam("uuid") String uuid);
+
+   /**
+    * If a library drive is not a CDROM, you have to clone it in your account in order to use it.
+    *
+    * @param uuid         uuid of library drive to clone
+    * @param libraryDrive cloned drive
+    * @return cloned drive information or null if not found
+    */
+   @Named("libdrive:cloneLibraryDrive/{uuid}")
+   @POST
+   @Path("/libdrives/{uuid}/action/?do=clone")
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   LibraryDrive cloneLibraryDrive(@PathParam("uuid") String uuid
+         , @Nullable @BinderParam(BindLibraryDriveToJson.class) LibraryDrive libraryDrive);
+
+   /**
+    * Gets the list of servers to which the authenticated user has access.
+    *
+    * @return list of servers or empty list if no servers are found
+    */
+   @Named("server:listServers")
+   @GET
+   @Path("/servers/")
+   @ResponseParser(ParseServers.class)
+   @Transform(ParseServers.ToPagedIterable.class)
+   PagedIterable<Server> listServers();
+
+   /**
+    * Gets the list of servers to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of servers
+    */
+   @Named("server:listServers")
+   @GET
+   @Path("/servers/")
+   @ResponseParser(ParseServers.class)
+   PaginatedCollection<Server> listServers(PaginationOptions options);
+
+   /**
+    * Gets the detailed list of servers to which the authenticated user has access.
+    *
+    * @return list of servers or empty list if no servers are found
+    */
+   @Named("server:listServersInfo")
+   @GET
+   @Path("/servers/detail/")
+   @ResponseParser(ParseServerInfos.class)
+   @Transform(ParseServerInfos.ToPagedIterable.class)
+   PagedIterable<ServerInfo> listServersInfo();
+
+   /**
+    * Gets the detailed list of servers to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of servers
+    */
+   @Named("server:listServersInfo")
+   @GET
+   @Path("/servers/detail/")
+   @ResponseParser(ParseServerInfos.class)
+   PaginatedCollection<ServerInfo> listServersInfo(PaginationOptions options);
+
+   /**
+    * Creates a new virtual server or multiple servers.
+    * The minimial amount of information you need to set is:
+    * cpu
+    * memory
+    * name
+    * vncPassword
+    *
+    * @param createServer required parameters: cpu, memory, name, vncPassword
+    * @return newly created server
+    */
+   @Named("server:createServer")
+   @POST
+   @Path("/servers/")
+   @SelectJson("objects")
+   @OnlyElement
+   ServerInfo createServer(@BinderParam(BindServerInfoToJsonRequest.class) ServerInfo createServer);
+
+   /**
+    * create a new servers
+    *
+    * @param servers servers to create. Required parameters: cpu, memory, name, vncPassword
+    * @return newly created servers
+    */
+   @Named("server:createServers")
+   @POST
+   @Path("/servers/")
+   @SelectJson("objects")
+   List<ServerInfo> createServers(@BinderParam(BindServerInfoListToJsonRequest.class) Iterable<ServerInfo> servers);
+
+   /**
+    * Edits a server. Used also for attaching NIC’s and drives to servers.
+    *
+    * @param uuid   server uuid
+    * @param server data to change
+    * @return modified server
+    */
+   @Named("server:editServer/{uuid}")
+   @PUT
+   @Path("/servers/{uuid}/")
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   ServerInfo editServer(@PathParam("uuid") String uuid
+         , @BinderParam(BindServerInfoToJsonRequest.class) ServerInfo server);
+
+   /**
+    * Deletes a single server.
+    *
+    * @param uuid uuid of server to delete
+    */
+   @Named("server:deleteServer/{uuid}")
+   @DELETE
+   @Path("/servers/{uuid}/")
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   void deleteServer(@PathParam("uuid") String uuid);
+
+   /**
+    * Deletes multiple servers specified by their UUID’s.
+    *
+    * @param uuids server uuids to delete
+    */
+   @Named("server:deleteServers")
+   @DELETE
+   @Path("/servers/")
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   void deleteServers(@BinderParam(BindUuidStringsToJsonArray.class) Iterable<String> uuids);
+
+   /**
+    * Clones a server. Empty body.
+    * Does cascading clone of server drives.
+    * IPs of the cloned server are set to DHCP.
+    * All other properties of the clone are equal to the original.
+    *
+    * @param uuid server what to clone
+    * @return cloned server
+    */
+   @Named("server:cloneServer/{uuid}")
+   @POST
+   @Path("/servers/{uuid}/action/?do=clone")
+   @Fallback(Fallbacks.VoidOnNotFoundOr404.class)
+   ServerInfo cloneServer(@PathParam("uuid") String uuid);
+
+   /**
+    * Gets detailed information for server identified by server uuid.
+    *
+    * @param uuid server uuid
+    * @return server info or null, if not found
+    */
+   @Named("server:getServerInfo/{uuid}")
+   @GET
+   @Path("/servers/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   ServerInfo getServerInfo(@PathParam("uuid") String uuid);
+
+   /**
+    * Starts a server with specific UUID.
+    *
+    * @param uuid uuid of server to start
+    */
+   @Named("server:startServer/{uuid}")
+   @POST
+   @Path("/servers/{uuid}/action/?do=start")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   void startServer(@PathParam("uuid") String uuid);
+
+   /**
+    * Stops a server with specific UUID.
+    *
+    * @param uuid uuid of server to stop
+    */
+   @Named("server:stopServer/{uuid}")
+   @POST
+   @Path("/servers/{uuid}/action/?do=stop")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   void stopServer(@PathParam("uuid") String uuid);
+
+   /**
+    * Starts a server with specific UUID assuring that it is started on a different physical infrastructure host
+    * from the other servers specified in the avoid argument which is
+    * a single server UUID or a comma-separated list of server UUIDs.
+    * This way the server specified by uuid is run in a distinct availability group from the other listed servers.
+    * Note that it might not always be possible to run a server in a different availability group,
+    * therefore the order of the avoid list also signifies the priority of avoiding other servers.
+    *
+    * @param uuid      uuid of server to start
+    * @param uuidGroup availability group to avoid
+    */
+   @Named("server:startServerInSeparateAvailabilityGroup/{uuid}")
+   @POST
+   @Path("/servers/{uuid}/action/?do=start")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   void startServerInSeparateAvailabilityGroup(@PathParam("uuid") String uuid
+         , @QueryParam("avoid") List<String> uuidGroup);
+
+   /**
+    * Opens a VNC tunnel to a server with specific UUID.
+    *
+    * @param uuid uuid of server to open VNC tunnel
+    */
+   @Named("server:openServerVNCTunnel/{uuid}")
+   @POST
+   @Path("/servers/{uuid}/action/?do=open_vnc")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   void openServerVNCTunnel(@PathParam("uuid") String uuid);
+
+   /**
+    * Closes a VNC tunnel to a server with specific UUID.
+    *
+    * @param uuid uuid of server to close VNC tunnel
+    */
+   @Named("server:closeServerVCNTunnel/{uuid}")
+   @POST
+   @Path("/servers/{uuid}/action/?do=close_vnc")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   void closeServerVCNTunnel(@PathParam("uuid") String uuid);
+
+   /**
+    * @return which servers share same physical infrastructure host.
+    */
+   @Named("server:listServerAvailabilityGroup")
+   @GET
+   @Path("/servers/availability_groups/")
+   List<List<String>> listServerAvailabilityGroup();
+
+   /**
+    * Queries which other servers share same physical host with the given one.
+    *
+    * @param uuid Uuid of server to find availability group
+    * @return an array holding server UUIDs. The response includes also the UUID of the queried server.
+    */
+   @Named("server:getServerAvailabilityGroup/{uuid}")
+   @GET
+   @PathParam("/servers/availability_groups/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   ServerAvailabilityGroup getServerAvailabilityGroup(@PathParam("uuid") String uuid);
+
+   /**
+    * Gets the list of firewall policies to which the authenticated user has access.
+    *
+    * @return list of firewall policies to which the authenticated user has access.
+    */
+   @Named("fwpolicy:listFirewallPolicies")
+   @GET
+   @Path("/fwpolicies/")
+   @ResponseParser(ParseFirewallPolicies.class)
+   @Transform(ParseFirewallPolicies.ToPagedIterable.class)
+   PagedIterable<FirewallPolicy> listFirewallPolicies();
+
+   /**
+    * Gets the list of firewall policies to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of firewall policies
+    */
+   @Named("fwpolicy:listFirewallPolicies")
+   @GET
+   @Path("/fwpolicies/")
+   @ResponseParser(ParseFirewallPolicies.class)
+   PaginatedCollection<FirewallPolicy> listFirewallPolicies(PaginationOptions options);
+
+   /**
+    * Gets a detailed list of firewall policies to which the authenticated user has access.
+    *
+    * @return list of firewall policies to which the authenticated user has access.
+    */
+   @Named("fwpolicy:listFirewallPoliciesInfo")
+   @GET
+   @Path("/fwpolicies/detail/")
+   @ResponseParser(ParseFirewallPolicies.class)
+   @Transform(ParseFirewallPolicies.ToPagedIterableInfo.class)
+   PagedIterable<FirewallPolicy> listFirewallPoliciesInfo();
+
+   /**
+    * Gets a detailed list of firewall policies to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of firewall policies
+    */
+   @Named("fwpolicy:listFirewallPoliciesInfo")
+   @GET
+   @Path("/fwpolicies/detail/")
+   @ResponseParser(ParseFirewallPolicies.class)
+   PaginatedCollection<FirewallPolicy> listFirewallPoliciesInfo(PaginationOptions options);
+
+   /**
+    * Creates firewall policies.
+    *
+    * @param firewallPolicies firewall policies to create
+    * @return list of created firewall policies
+    */
+   @Named("fwpolicy:createFirewallPolicies")
+   @POST
+   @Path("/fwpolicies/")
+   @SelectJson("objects")
+   List<FirewallPolicy> createFirewallPolicies(
+         @BinderParam(BindFirewallPoliciesListToJsonRequest.class) List<FirewallPolicy> firewallPolicies);
+
+   /**
+    * Creates a firewall policy.
+    *
+    * @param firewallPolicy firewall policy to create
+    * @return created firewall policy
+    */
+   @Named("fwpolicy:createFirewallPolicy")
+   @POST
+   @Path("/fwpolicies/")
+   @SelectJson("objects")
+   @OnlyElement
+   FirewallPolicy createFirewallPolicy(
+         @BinderParam(BindFirewallPolicyToJsonRequest.class) FirewallPolicy firewallPolicy);
+
+   /**
+    * Update an existing firewall policy
+    *
+    * @param uuid           uuid of policy to update
+    * @param firewallPolicy firewall policy data to update
+    * @return updated firewall policy
+    */
+   @Named("fwpolicy:editFirewallPolicy/{uuid}")
+   @PUT
+   @Path("/fwpolicies/{uuid}/")
+   FirewallPolicy editFirewallPolicy(@PathParam("uuid") String uuid
+         , @BinderParam(BindFirewallPolicyToJsonRequest.class) FirewallPolicy firewallPolicy);
+
+   /**
+    * Gets detailed information for VLAN identified by VLAN uuid.
+    *
+    * @param uuid uuid of VLAN to get
+    * @return null, if not found
+    */
+   @Named("vlan:getVLANInfo/{uuid}")
+   @GET
+   @Path("/vlans/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   VLANInfo getVLANInfo(@PathParam("uuid") String uuid);
+
+   /**
+    * Gets the list of VLANs to which the authenticated user has access.
+    *
+    * @return list of VLANs or empty list if no vlans are found
+    */
+   @Named("vlan:listVLANs")
+   @GET
+   @Path("/vlans/")
+   @ResponseParser(ParseVLANs.class)
+   @Transform(ParseVLANs.ToPagedIterable.class)
+   PagedIterable<VLANInfo> listVLANs();
+
+   /**
+    * Gets the list of VLANs to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of VLANs
+    */
+   @Named("vlan:listVLANs")
+   @GET
+   @Path("/vlans/")
+   @ResponseParser(ParseVLANs.class)
+   PaginatedCollection<VLANInfo> listVLANs(PaginationOptions options);
+
+   /**
+    * Gets the list of VLANs to which the authenticated user has access.
+    *
+    * @return list of VLANs or empty list if no vlans are found
+    */
+   @Named("vlan:listVLANInfo")
+   @GET
+   @Path("/vlans/detail/")
+   @ResponseParser(ParseVLANs.class)
+   @Transform(ParseVLANs.ToPagedIterableInfo.class)
+   PagedIterable<VLANInfo> listVLANInfo();
+
+   /**
+    * Gets the list of VLANs to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of VLANs
+    */
+   @Named("vlan:listVLANInfo")
+   @GET
+   @Path("/vlans/detail/")
+   @ResponseParser(ParseVLANs.class)
+   PaginatedCollection<VLANInfo> listVLANInfo(PaginationOptions options);
+
+   /**
+    * Currently only VLAN meta field can be edited.
+    *
+    * @param uuid     uuid of VLAN to edit
+    * @param vlanInfo data to change
+    * @return changed VLAN
+    */
+   @Named("vlan:listVLANInfo/{uuid}")
+   @PUT
+   @Path("/vlans/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   VLANInfo editVLAN(@PathParam("uuid") String uuid
+         , @BinderParam(BindVLANToJsonRequest.class) VLANInfo vlanInfo);
+
+   /**
+    * Gets the list of IPs to which the authenticated user has access.
+    *
+    * @return list of IPs or empty list if no ips are found
+    */
+   @Named("ip:listIPs")
+   @GET
+   @Path("/ips/")
+   @ResponseParser(ParseIPs.class)
+   @Transform(ParseIPs.ToPagedIterable.class)
+   PagedIterable<IP> listIPs();
+
+   /**
+    * Gets the list of IPs to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of IPs
+    */
+   @Named("ip:listIPs")
+   @GET
+   @Path("/ips/")
+   @ResponseParser(ParseIPs.class)
+   PaginatedCollection<IP> listIPs(PaginationOptions options);
+
+   /**
+    * Gets the detailed list of IPs with additional information to which the authenticated user has access.
+    *
+    * @return list of IPs or empty list if no ips are found
+    */
+   @Named("ip:listIPInfo")
+   @GET
+   @Path("/ips/detail/")
+   @ResponseParser(ParseIPInfos.class)
+   @Transform(ParseIPInfos.ToPagedIterable.class)
+   PagedIterable<IPInfo> listIPInfo();
+
+   /**
+    * Gets the detailed list of IPs with additional information to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of IPs
+    */
+   @Named("ip:listIPInfo")
+   @GET
+   @Path("/ips/detail/")
+   @ResponseParser(ParseIPInfos.class)
+   PaginatedCollection<IPInfo> listIPInfo(PaginationOptions options);
+
+   /**
+    * Gets detailed information for IP identified by IP uuid.
+    *
+    * @param uuid uuid of IP to get
+    * @return null, if not found
+    */
+   @Named("ip:getIPInfo/{uuid}")
+   @GET
+   @Path("/ips/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   IPInfo getIPInfo(@PathParam("uuid") String uuid);
+
+   /**
+    * Currently only IP meta field can be edited.
+    *
+    * @param uuid   uuid of IP to edit
+    * @param ipInfo data to change
+    * @return changed IP
+    */
+   @Named("ip:editIP/{uuid}")
+   @PUT
+   @Path("/ips/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   IPInfo editIP(@PathParam("uuid") String uuid
+         , @BinderParam(BindIPInfoToJsonRequest.class) IPInfo ipInfo);
+
+   /**
+    * Gets the list of tags to which the authenticated user has access.
+    *
+    * @return list of tags to which the authenticated user has access
+    */
+   @Named("tag:listTags")
+   @GET
+   @Path("/tags/")
+   @ResponseParser(ParseTags.class)
+   @Transform(ParseTags.ToPagedIterable.class)
+   PagedIterable<Tag> listTags();
+
+   /**
+    * Gets the list of tags to which the authenticated user has access.
+    *
+    * @return PaginatedCollection of tags to which the authenticated user has access
+    */
+   @Named("tag:listTags")
+   @GET
+   @Path("/tags/")
+   @ResponseParser(ParseTags.class)
+   PaginatedCollection<Tag> listTags(PaginationOptions options);
+
+   /**
+    * Gets the detailed list of tags with additional information to which the authenticated user has access,
+    * like the tagged resource
+    *
+    * @return detailed listings of your tags
+    */
+   @Named("tag:listTagsInfo")
+   @GET
+   @Path("/tags/detail/")
+   @ResponseParser(ParseTags.class)
+   @Transform(ParseTags.ToPagedIterableInfo.class)
+   PagedIterable<Tag> listTagsInfo();
+
+   /**
+    * Gets the detailed list of tags with additional information to which the authenticated user has access,
+    * like the tagged resource
+    *
+    * @return PaginatedCollection of detailed tags
+    */
+   @Named("tag:listTagsInfo")
+   @GET
+   @Path("/tags/detail/")
+   @ResponseParser(ParseTags.class)
+   PaginatedCollection<Tag> listTagsInfo(PaginationOptions options);
+
+   /**
+    * Gets detailed information for tag identified by tag uuid.
+    *
+    * @param uuid tag uuid
+    * @return detailed info of tag
+    */
+   @Named("tag:getTagInfo/{uuid}")
+   @GET
+   @Path("/tags/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   Tag getTagInfo(@PathParam("uuid") String uuid);
+
+   /**
+    * Edits a tag.
+    * It is possible to add or remove resources to a tag by replacing the resources list with a new one
+    *
+    * @param uuid tag uuid
+    * @param tag  info to change
+    * @return detailed info of tag
+    */
+   @Named("tag:editTag/{uuid}")
+   @PUT
+   @Path("/tags/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   Tag editTag(@PathParam("uuid") String uuid, @BinderParam(BindTagToJsonRequest.class) Tag tag);
+
+   /**
+    * Creates a new tag
+    *
+    * @param tag tag to create
+    * @return created tag
+    */
+   @Named("tag:createTag")
+   @POST
+   @Path("/tags/")
+   @SelectJson("objects")
+   @OnlyElement
+   Tag createTag(@BinderParam(BindTagToJsonRequest.class) Tag tag);
+
+   /**
+    * Deletes a single tag.
+    *
+    * @param uuid uuid of tag to delete
+    */
+   @Named("tag:deleteTag/{uuid}")
+   @DELETE
+   @Path("/tags/{uuid}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   void deleteTag(@PathParam("uuid") String uuid);
+
+   /**
+    * Creates a multiple new tags
+    *
+    * @param tags tags to create
+    * @return created tags
+    */
+   @Named("tag:createTags")
+   @POST
+   @Path("/tags/")
+   @SelectJson("objects")
+   List<Tag> createTags(@BinderParam(BindTagListToJsonRequest.class) List<Tag> tags);
+
+   /**
+    * Gets the user profile.
+    *
+    * @return profile information
+    */
+   @Named("profile:getProfileInfo")
+   @GET
+   @Path("/profile/")
+   ProfileInfo getProfileInfo();
+
+   /**
+    * Edits a user profile.
+    *
+    * @param profile data to change
+    * @return info or null, if not found
+    */
+   @Named("profile:editProfileInfo")
+   @PUT
+   @Path("/profile/")
+   ProfileInfo editProfileInfo(@BinderParam(BindProfileInfoToJsonRequest.class) ProfileInfo profile);
+
+   /**
+    * Get the balance and currency of the current account.
+    *
+    * @return current account balance and currency
+    */
+   @Named("balance:getAccountBalance")
+   @GET
+   @Path("/balance/")
+   AccountBalance getAccountBalance();
+
+   /**
+    * Get the current usage of the user.
+    *
+    * @return current usage of the user
+    */
+   @Named("currentusage:getCurrentUsage")
+   @GET
+   @Path("/currentusage/")
+   CurrentUsage getCurrentUsage();
+
+   /**
+    * Gets the list of subscriptions of the user.
+    *
+    * @return list of subscriptions of the user.
+    */
+   @Named("subscription:listSubscriptions")
+   @GET
+   @Path("/subscriptions/")
+   @ResponseParser(ParseSubscriptions.class)
+   @Transform(ParseSubscriptions.ToPagedIterable.class)
+   PagedIterable<Subscription> listSubscriptions();
+
+   /**
+    * Gets the list of subscriptions of the user.
+    *
+    * @return PaginatedCollection of subscriptions of the user.
+    */
+   @Named("subscription:listSubscriptions")
+   @GET
+   @Path("/subscriptions/")
+   @ResponseParser(ParseSubscriptions.class)
+   PaginatedCollection<Subscription> listSubscriptions(PaginationOptions options);
+
+   /**
+    * Returns requested subscription
+    *
+    * @return requested subscription.
+    */
+   @Named("subscription:getSubscription")
+   @GET
+   @Path("/subscriptions/{id}/")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   Subscription getSubscription(@PathParam("id") String id);
+
+   /**
+    * This is identical to the listSubscriptions(), except that subscriptions are not actually bought.
+    *
+    * @return list of subscriptions that are not actually bought.
+    */
+   @Named("subscription:listSubscriptionsCalculator")
+   @GET
+   @Path("/subscriptioncalculator/")
+   @ResponseParser(ParseSubscriptions.class)
+   @Transform(ParseSubscriptions.ToPagedIterableCalculator.class)
+   PagedIterable<Subscription> listSubscriptionsCalculator();
+
+   /**
+    * This is identical to the listSubscriptions(), except that subscriptions are not actually bought.
+    *
+    * @return PaginatedCollection of subscriptions that are not actually bought.
+    */
+   @Named("subscription:listSubscriptionsCalculator")
+   @GET
+   @Path("/subscriptioncalculator/")
+   @ResponseParser(ParseSubscriptions.class)
+   PaginatedCollection<Subscription> listSubscriptionsCalculator(PaginationOptions options);
+
+   /**
+    * Creates a new subscription.
+    * Subscription times are rounded to noon UTC, using the following rules:
+    * - End time is always rounded to the next noon.
+    * - Start time is rounded to the maximum between the current time an the previous noon.
+    * This means that subscriptions bought for now do start now, but subscriptions for the future start at the previous noon.
+    *
+    * @param subscriptionRequest subscription request object
+    * @return created subscription
+    */
+   @Named("subscription:listSubscriptionsCalculator")
+   @POST
+   @Path("/subscriptions/")
+   @SelectJson("objects")
+   @OnlyElement
+   Subscription createSubscription(
+         @BinderParam(BindCreateSubscriptionRequest.class) CreateSubscriptionRequest subscriptionRequest);
+
+   /**
+    * Creates a new subscription. There is a limit of 500 subscriptions that can be purchased in one request.
+    * Subscription times are rounded to noon UTC, using the following rules:
+    * - End time is always rounded to the next noon.
+    * - Start time is rounded to the maximum between the current time an the previous noon.
+    * This means that subscriptions bought for now do start now, but subscriptions for the future start at the previous noon.
+    *
+    * @param subscriptionRequest parameters for new subscriptions
+    * @return new subscriptions
+    */
+   @Named("subscription:createSubscriptions")
+   @POST
+   @Path("/subscriptions/")
+   @SelectJson("objects")
+   List<Subscription> createSubscriptions(
+         @BinderParam(BindCreateSubscriptionRequestList.class) List<CreateSubscriptionRequest> subscriptionRequest);
+
+   /**
+    * Extends the subscription. An extended subscription is actually just another subscription that is linked to the original
+    * If a period or and end_time are specified in the request,they are used. If neither are specified,
+    * the creation length of the subscription is used.
+    * <p/>
+    * A caveat to this is that a subscription created initially with an end_time, the exact interval is used.
+    * Subscriptions that are created with a period have the period parsed again in the context of the new start_time.
+    * An example would be a subscription created on the 1st of February with a period of ‘1 month’ will be extended for 31 days,
+    * but one that was created with an end date of 1st of March will be extended for 28 days.
+    * <p/>
+    * If the specified subscription has actually been extended, it traverses and extends the last subscription in the chain.
+    *
+    * @param id id of subscription to extend
+    */
+   @Named("subscription:extendSubscription/{id}")
+   @POST
+   @Path("/subscriptions/{id}/action/?do=extend")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   void extendSubscription(@PathParam("id") String id);
+
+   /**
+    * Toggles the autorenew flag of the subscription.
+    *
+    * @param id id of subscription to enable autorenew
+    */
+   @Named("subscription:enableSubscriptionAutorenew/{id}")
+   @POST
+   @Path("/subscriptions/{id}/action/?do=auto_renew")
+   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+   void enableSubscriptionAutorenew(@PathParam("id") String id);
+
+   /**
+    * Gets the pricing information that are applicable to the cloud. Subscription prices use a burst level of 0.
+    *
+    * @return pricing information that are applicable to the cloud.
+    */
+   @Named("pricing:getPricing")
+   @GET
+   @Path("/pricing/")
+   Pricing getPricing();
+
+   /**
+    * Get discount information.
+    *
+    * @return discount information.
+    */
+   @Named("discount:listDiscounts")
+   @GET
+   @Path("/discount/")
+   @ResponseParser(ParseDiscounts.class)
+   @Transform(ParseDiscounts.ToPagedIterable.class)
+   PagedIterable<Discount> listDiscounts();
+
+   /**
+    * Get discount information.
+    *
+    * @return PaginatedCollection of discount information.
+    */
+   @Named("discount:listDiscounts")
+   @GET
+   @Path("/discount/")
+   @ResponseParser(ParseDiscounts.class)
+   PaginatedCollection<Discount> listDiscounts(PaginationOptions options);
+
+   /**
+    * Get the transactions for the account.
+    *
+    * @return transactions for the account.
+    */
+   @Named("ledger:listTransactions")
+   @GET
+   @Path("/ledger/")
+   @ResponseParser(ParseTransactions.class)
+   @Transform(ParseTransactions.ToPagedIterable.class)
+   PagedIterable<Transaction> listTransactions();
+
+   /**
+    * Get the transactions for the account.
+    *
+    * @return PaginatedCollection of account's transactions.
+    */
+   @Named("ledger:listTransactions")
+   @GET
+   @Path("/ledger/")
+   @ResponseParser(ParseTransactions.class)
+   PaginatedCollection<Transaction> listTransactions(PaginationOptions options);
+
+   /**
+    * Get the licenses available on the cloud. The type of the license can be one of:
+    * install - These licenses are billed per installation, regardless of whether it is attached to a running guests or not.
+    * instance - These licenses are billed per running instance of a guest. A license attached to a guest that’s stopped is not billed.
+    * stub - These licenses are billed per a metric specified by the customer (i.e. per number of users license)
+    * <p/>
+    * The user metric field specifies what attribute on the instance of the guest is used for determining the number of licenses.
+    * For example, “smp” will count one license for each CPU/core in the virtual machine.
+    *
+    * @return licenses available on the cloud
+    */
+   @Named("license:listLicenses")
+   @GET
+   @Path("/licenses/")
+   @ResponseParser(ParseLicenses.class)
+   @Transform(ParseLicenses.ToPagedIterable.class)
+   PagedIterable<License> listLicenses();
+
+   /**
+    * Get the licenses available on the cloud. The type of the license can be one of:
+    * install - These licenses are billed per installation, regardless of whether it is attached to a running guests or not.
+    * instance - These licenses are billed per running instance of a guest. A license attached to a guest that’s stopped is not billed.
+    * stub - These licenses are billed per a metric specified by the customer (i.e. per number of users license)
+    * <p/>
+    * The user metric field specifies what attribute on the instance of the guest is used for determining the number of licenses.
+    * For example, “smp” will count one license for each CPU/core in the virtual machine.
+    *
+    * @return PaginatedCollection of licenses available on the cloud
+    */
+   @Named("license:listLicenses")
+   @GET
+   @Path("/licenses/")
+   @ResponseParser(ParseLicenses.class)
+   PaginatedCollection<License> listLicenses(PaginationOptions options);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/0d70c84a/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2ApiMetadata.java
----------------------------------------------------------------------
diff --git a/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2ApiMetadata.java b/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2ApiMetadata.java
index c67f14c..5437a41 100644
--- a/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2ApiMetadata.java
+++ b/cloudsigma2/src/main/java/org/jclouds/cloudsigma2/CloudSigma2ApiMetadata.java
@@ -33,7 +33,7 @@ import static org.jclouds.reflect.Reflection2.typeToken;
 
 /**
  * Implementation of {@link BaseHttpApiMetadata} for the Cloud Sigma API
- * 
+ *
  * @author Vladimir Shevchenko
  */
 public class CloudSigma2ApiMetadata extends BaseHttpApiMetadata<CloudSigma2Api> {
@@ -67,19 +67,19 @@ public class CloudSigma2ApiMetadata extends BaseHttpApiMetadata<CloudSigma2Api>
       protected Builder() {
          super(CloudSigma2Api.class);
          id("cloudsigma2")
-         .name("CloudSigma API")
-         .defaultIdentity("email")
-         .identityName("Email")
-         .defaultCredential("Password")
-         .credentialName("Password")
-         .documentation(URI.create("http://cloudsigma.com/en/platform-details/the-api"))
-         .version("2.0")
-         .defaultEndpoint("https://zrh.cloudsigma.com/api/2.0")
-         .defaultProperties(CloudSigma2ApiMetadata.defaultProperties())
-         .view(typeToken(ComputeServiceContext.class))
-         .defaultModules(ImmutableSet.<Class<? extends Module>>of(
-                CloudSigma2HttpApiModule.class,
-                CloudSigma2ParserModule.class));
+               .name("CloudSigma API")
+               .defaultIdentity("email")
+               .identityName("Email")
+               .defaultCredential("Password")
+               .credentialName("Password")
+               .documentation(URI.create("http://cloudsigma.com/en/platform-details/the-api"))
+               .version("2.0")
+               .defaultEndpoint("https://zrh.cloudsigma.com/api/2.0")
+               .defaultProperties(CloudSigma2ApiMetadata.defaultProperties())
+               .view(typeToken(ComputeServiceContext.class))
+               .defaultModules(ImmutableSet.<Class<? extends Module>>of(
+                     CloudSigma2HttpApiModule.class,
+                     CloudSigma2ParserModule.class));
       }
 
       @Override
@@ -94,7 +94,7 @@ public class CloudSigma2ApiMetadata extends BaseHttpApiMetadata<CloudSigma2Api>
 
       @Override
       public Builder fromApiMetadata(ApiMetadata in) {
-          return this;
+         return this;
       }
    }
 }