mirror of https://github.com/apache/jclouds.git
Inital commit of the RimuHosting Module
git-svn-id: http://jclouds.googlecode.com/svn/trunk@2319 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
df75cfc2f0
commit
e58f375be0
1
pom.xml
1
pom.xml
|
@ -48,6 +48,7 @@
|
||||||
<module>nirvanix</module>
|
<module>nirvanix</module>
|
||||||
<module>vcloud</module>
|
<module>vcloud</module>
|
||||||
<module>twitter</module>
|
<module>twitter</module>
|
||||||
|
<module>rimuhosting</module>
|
||||||
</modules>
|
</modules>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
|
@ -150,6 +150,15 @@
|
||||||
</roles>
|
</roles>
|
||||||
<timezone>+1</timezone>
|
<timezone>+1</timezone>
|
||||||
</developer>
|
</developer>
|
||||||
|
<developer>
|
||||||
|
<name>Ivan Meredith</name>
|
||||||
|
<id>barefootnz</id>
|
||||||
|
<email>ivan -at- ivan.com</email>
|
||||||
|
<roles>
|
||||||
|
<role>Java Developer</role>
|
||||||
|
</roles>
|
||||||
|
<timezone>+13</timezone>
|
||||||
|
</developer>
|
||||||
</developers>
|
</developers>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module relativePaths="true" MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
|
||||||
|
<output url="file://$MODULE_DIR$/target/classes" />
|
||||||
|
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="Maven: org.testng:testng:jdk15:5.10" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: junit:junit:3.8.1" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: org.easymock:easymockclassextension:2.4" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: org.easymock:easymock:2.4" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: cglib:cglib-nodep:2.1_3" level="project" />
|
||||||
|
<orderEntry type="module" module-name="jclouds-jsch" />
|
||||||
|
<orderEntry type="module" module-name="jclouds-core" exported="" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: aopalliance:aopalliance:1.0" level="project" />
|
||||||
|
<orderEntry type="module" module-name="resteasy-jaxrs-client" exported="" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: org.jboss.resteasy:jaxrs-api:1.1.GA" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: commons-io:commons-io:1.4" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: com.google.code.guice:guice:2.1-r1128" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: javax.inject:inject:1.0" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: com.google.collections:google-collections:1.0-rc3" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: javax.annotation:jsr250-api:1.0" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: net.jcip:jcip-annotations:1.0" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: joda-time:joda-time:1.6" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: org.bouncycastle:bcprov-jdk15:1.44" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="Maven: com.google.code.gson:gson:1.4" level="project" />
|
||||||
|
<orderEntry type="library" name="Maven: com.jcraft:jsch:0.1.41" level="project" />
|
||||||
|
<orderEntry type="module" module-name="jclouds-core" />
|
||||||
|
<orderEntry type="library" name="Maven: log4j:log4j:1.2.14" level="project" />
|
||||||
|
<orderEntry type="module" module-name="jclouds-log4j" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
$HeadURL$
|
||||||
|
$Revision$
|
||||||
|
$Date$
|
||||||
|
|
||||||
|
Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
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.html
|
||||||
|
|
||||||
|
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.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<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">
|
||||||
|
<parent>
|
||||||
|
<groupId>org.jclouds</groupId>
|
||||||
|
<artifactId>jclouds-project</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../project/pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.jclouds</groupId>
|
||||||
|
<artifactId>jclouds-rimuhosting</artifactId>
|
||||||
|
<name>jclouds RimuHosting core</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<description>jclouds components to access RimuHosting</description>
|
||||||
|
|
||||||
|
<scm>
|
||||||
|
<connection>scm:svn:http://jclouds.googlecode.com/svn/trunk/rimuhosting</connection>
|
||||||
|
<developerConnection>scm:svn:https://jclouds.googlecode.com/svn/trunk/rimuhosting</developerConnection>
|
||||||
|
<url>http://jclouds.googlecode.com/svn/trunk/rimuhosting</url>
|
||||||
|
</scm>
|
||||||
|
<properties>
|
||||||
|
<jclouds.test.user></jclouds.test.user>
|
||||||
|
<jclouds.test.key></jclouds.test.key>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-jsch</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<type>test-jar</type>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>log4j</groupId>
|
||||||
|
<artifactId>log4j</artifactId>
|
||||||
|
<version>1.2.14</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-log4j</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,42 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import javax.inject.Qualifier;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Related to a RimuHosting resource.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Retention(value = RetentionPolicy.RUNTIME)
|
||||||
|
@Target(value = {ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
|
||||||
|
@Qualifier
|
||||||
|
public @interface RimuHosting {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,116 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import org.jclouds.rest.annotations.*;
|
||||||
|
import org.jclouds.rimuhosting.miro.binder.RimuHostingJsonBinder;
|
||||||
|
import org.jclouds.rimuhosting.miro.binder.RimuHostingRebootJsonBinder;
|
||||||
|
import org.jclouds.rimuhosting.miro.data.NewInstance;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.*;
|
||||||
|
import org.jclouds.rimuhosting.miro.filters.RimuHostingAuthentication;
|
||||||
|
import org.jclouds.rimuhosting.miro.functions.*;
|
||||||
|
|
||||||
|
import javax.ws.rs.*;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.SortedSet;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides asynchronous access to RimuHosting via their REST API.
|
||||||
|
* <p/>
|
||||||
|
*
|
||||||
|
* @author Ivan Meredith
|
||||||
|
* @see RimuHostingClient
|
||||||
|
* @see <a href="http://apidocs.rimuhosting.com" />
|
||||||
|
*/
|
||||||
|
@RequestFilters(RimuHostingAuthentication.class)
|
||||||
|
@Endpoint(RimuHosting.class)
|
||||||
|
public interface RimuHostingAsyncClient {
|
||||||
|
|
||||||
|
@GET @Path("/distributions")
|
||||||
|
@ResponseParser(ParseImagesFromJsonResponse.class)
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ParseRimuHostingException.class)
|
||||||
|
Future<SortedSet<Image>> getImageList();
|
||||||
|
|
||||||
|
@GET @Path("/orders")
|
||||||
|
@ResponseParser(ParseInstancesFromJsonResponse.class)
|
||||||
|
@MatrixParams(keys = "include_inactive", values = "N")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ParseRimuHostingException.class)
|
||||||
|
Future<SortedSet<Instance>> getInstanceList();
|
||||||
|
|
||||||
|
@GET @Path("/pricing-plans")
|
||||||
|
@MatrixParams(keys = "server-type", values = "VPS")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ParseRimuHostingException.class)
|
||||||
|
@ResponseParser(ParsePricingPlansFromJsonResponse.class)
|
||||||
|
Future<SortedSet<PricingPlan>> getPricingPlanList();
|
||||||
|
|
||||||
|
@POST @Path("/orders/new-vps")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ExceptionParser(ParseRimuHostingException.class)
|
||||||
|
@ResponseParser(ParseNewInstanceResponseFromJsonResponse.class)
|
||||||
|
Future<NewInstanceResponse> createInstance(@BinderParam(RimuHostingJsonBinder.class) NewInstance newInstance);
|
||||||
|
|
||||||
|
|
||||||
|
@GET @Path("/orders/order-{id}-blah/vps")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ResponseParser(ParseInstanceInfoFromJsonResponse.class)
|
||||||
|
Future<InstanceInfo> getInstanceInfo(@PathParam("id") Long id);
|
||||||
|
|
||||||
|
|
||||||
|
@GET @Path("/orders/order-{id}-blah")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ResponseParser(ParseInstanceFromJsonResponse.class)
|
||||||
|
@ExceptionParser(ParseRimuHostingException.class)
|
||||||
|
Future<Instance> getInstance(@PathParam("id") Long id);
|
||||||
|
|
||||||
|
|
||||||
|
//TODO fix this.
|
||||||
|
@PUT @Path("/orders/order-{id}-blah/vps/paramters")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ResponseParser(ParseResizeResponseFromJsonResponse.class)
|
||||||
|
@ExceptionParser(ParseRimuHostingException.class)
|
||||||
|
Future<ResizeResult> resizeInstance(@PathParam("id") Long id);
|
||||||
|
|
||||||
|
@PUT @Path("/orders/order-{id}-blah/vps/running-state")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ResponseParser(ParseInstanceInfoFromJsonResponse.class)
|
||||||
|
@MapBinder(RimuHostingRebootJsonBinder.class)
|
||||||
|
@ExceptionParser(ParseRimuHostingException.class)
|
||||||
|
Future<InstanceInfo> restartInstance(@PathParam("id") Long id);
|
||||||
|
|
||||||
|
@DELETE @Path("/orders/order-{id}-blah/vps")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ResponseParser(ParseDestroyResponseFromJsonResponse.class)
|
||||||
|
@ExceptionParser(ParseRimuHostingException.class)
|
||||||
|
Future<List<String>> destroyInstance(@PathParam("id") Long id);
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import org.jclouds.concurrent.Timeout;
|
||||||
|
import org.jclouds.rest.annotations.BinderParam;
|
||||||
|
import org.jclouds.rimuhosting.miro.binder.RimuHostingJsonBinder;
|
||||||
|
import org.jclouds.rimuhosting.miro.data.NewInstance;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.*;
|
||||||
|
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.SortedSet;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides synchronous access to RimuHosting.
|
||||||
|
* <p/>
|
||||||
|
*
|
||||||
|
* @author Ivan Meredith
|
||||||
|
* @see RimuHostingAsyncClient
|
||||||
|
* @see <a href="TODO: insert URL of client documentation" />
|
||||||
|
*/
|
||||||
|
@Timeout(duration = 10, timeUnit = TimeUnit.MINUTES)
|
||||||
|
public interface RimuHostingClient {
|
||||||
|
|
||||||
|
SortedSet<Image> getImageList();
|
||||||
|
|
||||||
|
SortedSet<Instance> getInstanceList();
|
||||||
|
|
||||||
|
SortedSet<PricingPlan> getPricingPlanList();
|
||||||
|
|
||||||
|
NewInstanceResponse createInstance(@BinderParam(RimuHostingJsonBinder.class)NewInstance newInstance);
|
||||||
|
|
||||||
|
InstanceInfo getInstanceInfo(@PathParam("id") Long id);
|
||||||
|
|
||||||
|
Instance getInstance(@PathParam("id") Long id);
|
||||||
|
|
||||||
|
InstanceInfo restartInstance(@PathParam("id") Long id);
|
||||||
|
|
||||||
|
ResizeResult resizeInstance(@PathParam("id") Long id);
|
||||||
|
|
||||||
|
List<String> destroyInstance(@PathParam("id") Long id);
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import com.google.inject.Module;
|
||||||
|
import com.google.inject.TypeLiteral;
|
||||||
|
import org.jclouds.rest.RestContextBuilder;
|
||||||
|
import org.jclouds.rimuhosting.miro.config.RimuHostingContextModule;
|
||||||
|
import org.jclouds.rimuhosting.miro.config.RimuHostingRestClientModule;
|
||||||
|
import org.jclouds.rimuhosting.miro.reference.RimuHostingConstants;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public class RimuHostingContextBuilder extends RestContextBuilder<RimuHostingAsyncClient, RimuHostingClient> {
|
||||||
|
|
||||||
|
public RimuHostingContextBuilder(Properties props) {
|
||||||
|
super(new TypeLiteral<RimuHostingAsyncClient>() {
|
||||||
|
}, new TypeLiteral<RimuHostingClient>() {
|
||||||
|
}, props);
|
||||||
|
checkNotNull(properties.getProperty(RimuHostingConstants.PROPERTY_RIMUHOSTING_USER));
|
||||||
|
checkNotNull(properties.getProperty(RimuHostingConstants.PROPERTY_RIMUHOSTING_PASSWORD));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addClientModule(List<Module> modules) {
|
||||||
|
modules.add(new RimuHostingRestClientModule());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addContextModule(List<Module> modules) {
|
||||||
|
modules.add(new RimuHostingContextModule());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import com.google.inject.Module;
|
||||||
|
import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
|
||||||
|
import org.jclouds.logging.jdk.config.JDKLoggingModule;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates {@link RestContext} for {@link RimuHostingClient} instances based on the most commonly
|
||||||
|
* requested arguments.
|
||||||
|
* <p/>
|
||||||
|
* Note that Threadsafe objects will be bound as singletons to the Injector or Context provided.
|
||||||
|
* <p/>
|
||||||
|
* <p/>
|
||||||
|
* If no <code>Module</code>s are specified, the default {@link JDKLoggingModule logging} and
|
||||||
|
* {@link JavaUrlHttpCommandExecutorServiceModule http transports} will be installed.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
* @see RestContext
|
||||||
|
* @see RimuHostingClient
|
||||||
|
* @see RimuHostingAsyncClient
|
||||||
|
*/
|
||||||
|
public class RimuHostingContextFactory {
|
||||||
|
|
||||||
|
public static RestContext<RimuHostingAsyncClient, RimuHostingClient> createContext(String user, String password,
|
||||||
|
Module... modules) {
|
||||||
|
return new RimuHostingContextBuilder(new RimuHostingPropertiesBuilder(user, password).build())
|
||||||
|
.withModules(modules).buildContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RestContext<RimuHostingAsyncClient, RimuHostingClient> createContext(Properties properties, Module... modules) {
|
||||||
|
return new RimuHostingContextBuilder(new RimuHostingPropertiesBuilder(properties).build())
|
||||||
|
.withModules(modules).buildContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import org.jclouds.http.HttpPropertiesBuilder;
|
||||||
|
import static org.jclouds.rimuhosting.miro.reference.RimuHostingConstants.*;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds properties used in RimuHosting Clients
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public class RimuHostingPropertiesBuilder extends HttpPropertiesBuilder {
|
||||||
|
@Override
|
||||||
|
protected Properties defaultProperties() {
|
||||||
|
Properties properties = super.defaultProperties();
|
||||||
|
properties.setProperty(PROPERTY_RIMUHOSTING_ENDPOINT, "https://rimuhosting.com/r");
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RimuHostingPropertiesBuilder(Properties properties) {
|
||||||
|
super(properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RimuHostingPropertiesBuilder(String id, String secret) {
|
||||||
|
super();
|
||||||
|
withCredentials(id, secret);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RimuHostingPropertiesBuilder withCredentials(String id, String secret) {
|
||||||
|
properties.setProperty(PROPERTY_RIMUHOSTING_USER, checkNotNull(id, "user"));
|
||||||
|
properties.setProperty(PROPERTY_RIMUHOSTING_PASSWORD, checkNotNull(secret, "password"));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RimuHostingPropertiesBuilder withEndpoint(URI endpoint) {
|
||||||
|
properties.setProperty(PROPERTY_RIMUHOSTING_ENDPOINT, checkNotNull(endpoint, "endpoint")
|
||||||
|
.toString());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.binder;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkState;
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.rest.binders.BindToJsonEntity;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic binder for RimuHosting POSTS/PUTS. In the form of
|
||||||
|
*
|
||||||
|
* {"request":{...}}
|
||||||
|
*/
|
||||||
|
public class RimuHostingJsonBinder extends BindToJsonEntity {
|
||||||
|
public void bindToRequest(HttpRequest request, Map<String, String> postParams) {
|
||||||
|
bindToRequest(request, (Object) postParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void bindToRequest(HttpRequest request, Object toBind) {
|
||||||
|
checkState(gson != null, "Program error: gson should have been injected at this point");
|
||||||
|
Map<String, Object> test = new HashMap<String, Object>();
|
||||||
|
test.put("request", toBind);
|
||||||
|
super.bindToRequest(request, test);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.binder;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Need to PUT a static string
|
||||||
|
*
|
||||||
|
* {"request":{"running_state":"RESTARTING"}
|
||||||
|
*/
|
||||||
|
public class RimuHostingRebootJsonBinder extends RimuHostingJsonBinder{
|
||||||
|
public void bindToRequest(HttpRequest request, Object toBind) {
|
||||||
|
super.bindToRequest(request,(Object)ImmutableMap.of("running_state", "RESTARTING"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.config;
|
||||||
|
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
|
import com.google.inject.Provides;
|
||||||
|
import org.jclouds.http.functions.config.ParserModule.CDateTimeAdapter;
|
||||||
|
import org.jclouds.http.functions.config.ParserModule.DateTimeAdapter;
|
||||||
|
import org.jclouds.lifecycle.Closer;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
import org.jclouds.rest.internal.RestContextImpl;
|
||||||
|
import org.jclouds.rimuhosting.miro.RimuHosting;
|
||||||
|
import org.jclouds.rimuhosting.miro.RimuHostingAsyncClient;
|
||||||
|
import org.jclouds.rimuhosting.miro.RimuHostingClient;
|
||||||
|
import org.jclouds.rimuhosting.miro.reference.RimuHostingConstants;
|
||||||
|
|
||||||
|
import javax.inject.Named;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configures the RimuHosting connection, including logging and http transport.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public class RimuHostingContextModule extends AbstractModule {
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bind(DateTimeAdapter.class).to(CDateTimeAdapter.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
RestContext<RimuHostingAsyncClient, RimuHostingClient> provideContext(Closer closer, RimuHostingAsyncClient asyncApi,
|
||||||
|
RimuHostingClient syncApi, @RimuHosting URI endPoint, @Named(RimuHostingConstants.PROPERTY_RIMUHOSTING_USER) String account) {
|
||||||
|
return new RestContextImpl<RimuHostingAsyncClient, RimuHostingClient>(closer, asyncApi, syncApi, endPoint, account);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.config;
|
||||||
|
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
|
import com.google.inject.Provides;
|
||||||
|
import org.jclouds.concurrent.internal.SyncProxy;
|
||||||
|
import org.jclouds.http.RequiresHttp;
|
||||||
|
import org.jclouds.rest.ConfiguresRestClient;
|
||||||
|
import org.jclouds.rest.RestClientFactory;
|
||||||
|
import org.jclouds.rimuhosting.miro.RimuHosting;
|
||||||
|
import org.jclouds.rimuhosting.miro.RimuHostingAsyncClient;
|
||||||
|
import org.jclouds.rimuhosting.miro.RimuHostingClient;
|
||||||
|
import org.jclouds.rimuhosting.miro.filters.RimuHostingAuthentication;
|
||||||
|
import org.jclouds.rimuhosting.miro.reference.RimuHostingConstants;
|
||||||
|
|
||||||
|
import javax.inject.Named;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configures the RimuHosting connection.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@RequiresHttp
|
||||||
|
@ConfiguresRestClient
|
||||||
|
public class RimuHostingRestClientModule extends AbstractModule {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bindErrorHandlers();
|
||||||
|
bindRetryHandlers();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
public RimuHostingAuthentication provideRimuHostingAuthentication(
|
||||||
|
@Named(RimuHostingConstants.PROPERTY_RIMUHOSTING_PASSWORD) String apikey)
|
||||||
|
throws UnsupportedEncodingException {
|
||||||
|
return new RimuHostingAuthentication(apikey);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
protected RimuHostingAsyncClient provideClient(RestClientFactory factory) {
|
||||||
|
return factory.create(RimuHostingAsyncClient.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
public RimuHostingClient provideClient(RimuHostingAsyncClient client) throws IllegalArgumentException,
|
||||||
|
SecurityException, NoSuchMethodException {
|
||||||
|
return SyncProxy.create(RimuHostingClient.class, client);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
@RimuHosting
|
||||||
|
protected URI provideURI(@Named(RimuHostingConstants.PROPERTY_RIMUHOSTING_ENDPOINT) String endpoint) {
|
||||||
|
return URI.create(endpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void bindErrorHandlers() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void bindRetryHandlers() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.data;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for a clone.
|
||||||
|
* TODO: test and add contructors.
|
||||||
|
* @author Ivan Meredith <ivan@ivan.net.nz>
|
||||||
|
*/
|
||||||
|
public class CloneOptions implements PostData {
|
||||||
|
/**
|
||||||
|
* Select this if you want the newly setup VPS to be a clone of
|
||||||
|
* another VPS you have with us. We will need to pause (but
|
||||||
|
* not restart) the clone source VPS for a few seconds to a few
|
||||||
|
* minutes to take the snapshot.
|
||||||
|
*/
|
||||||
|
@SerializedName("vps_order_oid_to_clone")
|
||||||
|
private Long instanceId;
|
||||||
|
/**
|
||||||
|
* The label you want to give the server. It will need to be a
|
||||||
|
* fully qualified domain name (FQDN). e.g. example.com. Will
|
||||||
|
* default to the domain name used on the order id provided.
|
||||||
|
*/
|
||||||
|
@SerializedName("domain_name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public long getInstanceId() {
|
||||||
|
return instanceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceId(long instanceId) {
|
||||||
|
this.instanceId = instanceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void validate(){
|
||||||
|
assert(instanceId == null || instanceId < 0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,108 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.data;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.Image;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Some options we need to create a new server/VPS.
|
||||||
|
*
|
||||||
|
* @author Ivan Meredith <ivan@ivan.net.nz>
|
||||||
|
*/
|
||||||
|
public class CreateOptions implements PostData{
|
||||||
|
public CreateOptions(){}
|
||||||
|
|
||||||
|
public CreateOptions(String name, String password, Image image){
|
||||||
|
this.name = name;
|
||||||
|
this.password = password;
|
||||||
|
if(image != null){
|
||||||
|
this.imageId = image.getId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public CreateOptions(String name, String password, String imageId){
|
||||||
|
this.name = name;
|
||||||
|
this.password = password;
|
||||||
|
this.imageId = imageId;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The control panel to install on the VPS. Currently only webmin is installable manually.
|
||||||
|
* Currently null/empty string works. For none. Or webmin.
|
||||||
|
* TODO: Control panels need a rest @GET interface. Or enum
|
||||||
|
*/
|
||||||
|
@SerializedName("control_panel")
|
||||||
|
private String controlPanel;
|
||||||
|
/**
|
||||||
|
* Must be a valid Image id.
|
||||||
|
*/
|
||||||
|
@SerializedName("distro")
|
||||||
|
private String imageId;
|
||||||
|
/**
|
||||||
|
* Must be FQDN.
|
||||||
|
*/
|
||||||
|
@SerializedName("domain_name")
|
||||||
|
private String name;
|
||||||
|
/**
|
||||||
|
* The password to use when setting up the server. If not provided we will set a random one.
|
||||||
|
*/
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
public String getControlPanel() {
|
||||||
|
return controlPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setControlPanel(String controlPanel) {
|
||||||
|
this.controlPanel = controlPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getImageId() {
|
||||||
|
return imageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setImageId(String imageId) {
|
||||||
|
this.imageId = imageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate() {
|
||||||
|
assert(imageId != null && imageId.length() != 0);
|
||||||
|
//TODO validation of FQDN
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.data;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of IPs VPS needs. In a separate data structure so that
|
||||||
|
* at a later date we can add more IPs to a provisioned server.
|
||||||
|
*
|
||||||
|
* @author Ivan Meredith <ivan@ivan.net.nz>
|
||||||
|
*/
|
||||||
|
public class IpRequest implements PostData {
|
||||||
|
/**
|
||||||
|
* How many IPs you need. Typically 1. Typically you
|
||||||
|
* only need more than one IP if your server has SSL certs for more
|
||||||
|
* than one domains.
|
||||||
|
*/
|
||||||
|
@SerializedName("num_ips")
|
||||||
|
private int numberOfIps = 1;
|
||||||
|
/**
|
||||||
|
* The reason for requiring more than one IP address. The
|
||||||
|
* number of IP addresses will be limited. If you hit that
|
||||||
|
* limit, then contact support to manually allocate the IPs (and in
|
||||||
|
* the mean time just use fewer IPs).
|
||||||
|
*/
|
||||||
|
@SerializedName("extra_ip_reason")
|
||||||
|
private String extraIpReason = "";
|
||||||
|
|
||||||
|
public int getNumberOfIps() {
|
||||||
|
return numberOfIps;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNumberOfIps(int numberOfIps) {
|
||||||
|
this.numberOfIps = numberOfIps;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExtraIpReason() {
|
||||||
|
return extraIpReason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExtraIpReason(String extraIpReason) {
|
||||||
|
this.extraIpReason = extraIpReason;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate() {
|
||||||
|
assert(numberOfIps < 1 && numberOfIps > 5);
|
||||||
|
assert(numberOfIps > 1 && extraIpReason == null || extraIpReason.length() == 0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,206 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.data;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.InstanceParameters;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.PricingPlan;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This structure defines the VPS to be setup.
|
||||||
|
*
|
||||||
|
* @author Ivan Meredith
|
||||||
|
*/
|
||||||
|
public class NewInstance implements PostData{
|
||||||
|
public NewInstance(){}
|
||||||
|
|
||||||
|
public NewInstance(CreateOptions createOptions, PricingPlan pricingPlan){
|
||||||
|
this.createOptions = createOptions;
|
||||||
|
if(pricingPlan != null){
|
||||||
|
this.planId = pricingPlan.getId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public NewInstance(CreateOptions createOptions, String pricingPlanId){
|
||||||
|
this.createOptions = createOptions;
|
||||||
|
this.planId = pricingPlanId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NewInstance(CloneOptions cloneOptions){
|
||||||
|
this.cloneOptions = cloneOptions;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Set the billing id if you want to control how it is billed.
|
||||||
|
* Else we will, for example, try to use, say, the credit card you used
|
||||||
|
* on your last order that had a credit card. Or use a wire
|
||||||
|
* transfer method if you are using that on other orders. See the
|
||||||
|
* billing methods resource for how to find what billing methods/ids you
|
||||||
|
* have setup on your account.
|
||||||
|
*/
|
||||||
|
@SerializedName("billing_oid")
|
||||||
|
private Long billingId;
|
||||||
|
/**
|
||||||
|
* The host server on which to setup the server. Typically you
|
||||||
|
* will want to leave this blank and let the API decide what is
|
||||||
|
* best/available. And exception may be if you are a customer with
|
||||||
|
* a dedicated server that is a VPS host with us. And in that case
|
||||||
|
* you may want to force a VPS to be setup on a particular server of
|
||||||
|
* yours.
|
||||||
|
*/
|
||||||
|
@SerializedName("host_server_oid")
|
||||||
|
private String hostServerId;
|
||||||
|
/**
|
||||||
|
* These are the instantiation options. e.g. domain name,
|
||||||
|
* password, etc. Only provide these if you are not cloning a VPS
|
||||||
|
* (the vps_order_oid_to_clone setting). i.e. utually exclusive to
|
||||||
|
* instantiation_via_clone_options
|
||||||
|
*/
|
||||||
|
@SerializedName("instantiation_options")
|
||||||
|
private CreateOptions createOptions;
|
||||||
|
/**
|
||||||
|
* These are the instantiation options if you are creating a new VPS as
|
||||||
|
* a clone of an existing VPS. Mutually exclusive to
|
||||||
|
* instantiation_options.
|
||||||
|
*/
|
||||||
|
@SerializedName("instantiation_via_clone_options")
|
||||||
|
private CloneOptions cloneOptions;
|
||||||
|
/**
|
||||||
|
* The number of IPs you need on the VPS and a justification for having
|
||||||
|
* more than one. Just leave blank for a single IP (which is all
|
||||||
|
* most servers need).
|
||||||
|
*/
|
||||||
|
@SerializedName("ip_request")
|
||||||
|
private IpRequest ipRequest;
|
||||||
|
/**
|
||||||
|
* The pricing plan code you want to use. Per the pricing plans
|
||||||
|
* resource.
|
||||||
|
*/
|
||||||
|
@SerializedName("pricing_plan_code")
|
||||||
|
private String planId;
|
||||||
|
/**
|
||||||
|
* To whom will the order belong? Leave this blank and we will assign it
|
||||||
|
* to you. If you set it and you do not have permissions on that
|
||||||
|
* user's account you will get an error.
|
||||||
|
*/
|
||||||
|
@SerializedName("user_oid")
|
||||||
|
private Long userId;
|
||||||
|
/**
|
||||||
|
* Any particular memory/disk size overrides you want to make. If
|
||||||
|
* they are compatible with the pricing plan you selected we will use
|
||||||
|
* them. We will calculate the cost based on the resources we
|
||||||
|
* setup you up with. We can provision VPSs in most sizes,
|
||||||
|
* provided that the host has space for them. The low contention
|
||||||
|
* plans are an exception. You will likely need to use the
|
||||||
|
* provided memory and disk sizes. Since those plans are designed
|
||||||
|
* so there is a specific (small) number of VPSs per host. And
|
||||||
|
* having VPSs with 'odd' sizes stops them all fitting in 'neatly'
|
||||||
|
* (that's not a problem on the bigger-, non-low contention-plans.
|
||||||
|
*/
|
||||||
|
@SerializedName("vps_paramters")
|
||||||
|
private InstanceParameters instanceParameters;
|
||||||
|
|
||||||
|
public Long getBillingId() {
|
||||||
|
return billingId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBillingId(Long billingId) {
|
||||||
|
this.billingId = billingId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHostServerId() {
|
||||||
|
return hostServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHostServerId(String hostServerId) {
|
||||||
|
this.hostServerId = hostServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CreateOptions getCreateOptions() {
|
||||||
|
return createOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreateOptions(CreateOptions createOptions) {
|
||||||
|
this.createOptions = createOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CloneOptions getCloneOptions() {
|
||||||
|
return cloneOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCloneOptions(CloneOptions cloneOptions) {
|
||||||
|
this.cloneOptions = cloneOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IpRequest getIpRequest() {
|
||||||
|
return ipRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIpRequest(IpRequest ipRequest) {
|
||||||
|
this.ipRequest = ipRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPlanId() {
|
||||||
|
return planId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlanId(String planId) {
|
||||||
|
this.planId = planId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(Long userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InstanceParameters getInstanceParameters() {
|
||||||
|
return instanceParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceParameters(InstanceParameters instanceParameters) {
|
||||||
|
this.instanceParameters = instanceParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void validate(){
|
||||||
|
//bitwise XOR, works with boolean :)
|
||||||
|
assert(this.cloneOptions == null ^ this.createOptions == null);
|
||||||
|
if(this.cloneOptions != null){
|
||||||
|
this.cloneOptions.validate();
|
||||||
|
}
|
||||||
|
if(this.createOptions != null){
|
||||||
|
this.createOptions.validate();
|
||||||
|
assert(this.planId != null && this.planId.length() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.ipRequest != null){
|
||||||
|
this.ipRequest.validate();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.instanceParameters != null){
|
||||||
|
this.instanceParameters.validate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do as much validation as possible to save http requests. No need to go overboard though.
|
||||||
|
*/
|
||||||
|
public interface PostData {
|
||||||
|
public void validate();
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Billing data. Need to make it inteface with jclouds.
|
||||||
|
* TODO: test
|
||||||
|
*/
|
||||||
|
public class BillingData {
|
||||||
|
@SerializedName("cancellation_date")
|
||||||
|
private Timestamp dateCancelled;
|
||||||
|
@SerializedName("monthly_recurring_fee")
|
||||||
|
private Double monthlyCharge;
|
||||||
|
@SerializedName("order_date")
|
||||||
|
private Timestamp dateOrdered;
|
||||||
|
@SerializedName("prepaid_until")
|
||||||
|
private Timestamp dataPrepaidUntil;
|
||||||
|
@SerializedName("suspended_date")
|
||||||
|
private Timestamp dateSuspended;
|
||||||
|
|
||||||
|
public Timestamp getDateCancelled() {
|
||||||
|
return dateCancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateCancelled(Timestamp dateCancelled) {
|
||||||
|
this.dateCancelled = dateCancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getMonthlyCharge() {
|
||||||
|
return monthlyCharge;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMonthlyCharge(Double monthlyCharge) {
|
||||||
|
this.monthlyCharge = monthlyCharge;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timestamp getDateOrdered() {
|
||||||
|
return dateOrdered;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateOrdered(Timestamp dateOrdered) {
|
||||||
|
this.dateOrdered = dateOrdered;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timestamp getDataPrepaidUntil() {
|
||||||
|
return dataPrepaidUntil;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataPrepaidUntil(Timestamp dataPrepaidUntil) {
|
||||||
|
this.dataPrepaidUntil = dataPrepaidUntil;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timestamp getDateSuspended() {
|
||||||
|
return dateSuspended;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateSuspended(Timestamp dateSuspended) {
|
||||||
|
this.dateSuspended = dateSuspended;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: test
|
||||||
|
*/
|
||||||
|
public class DataCenter implements Comparable<DataCenter> {
|
||||||
|
@SerializedName("data_center_location_code")
|
||||||
|
private String id;
|
||||||
|
@SerializedName("data_center_location_name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(DataCenter dataCenter) {
|
||||||
|
return id.compareTo(dataCenter.getId());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: test
|
||||||
|
*/
|
||||||
|
public class DataTransferAllowance implements Comparable<DataTransferAllowance>{
|
||||||
|
@SerializedName("data_transfer_gb")
|
||||||
|
private Integer dataTransferGb;
|
||||||
|
|
||||||
|
public Integer getDataTransferGb() {
|
||||||
|
return dataTransferGb;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataTransferGb(Integer dataTransferGb) {
|
||||||
|
this.dataTransferGb = dataTransferGb;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(DataTransferAllowance dataTransferAllowance) {
|
||||||
|
return dataTransferGb - dataTransferAllowance.getDataTransferGb();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Image object.
|
||||||
|
*/
|
||||||
|
public class Image implements Comparable<Image> {
|
||||||
|
@SerializedName("distro_code")
|
||||||
|
private String id;
|
||||||
|
@SerializedName("distro_desciption")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(Image image) {
|
||||||
|
return id.compareTo(image.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,183 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import org.jclouds.rimuhosting.miro.data.NewInstance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instance Object.
|
||||||
|
* TODO: javadoc
|
||||||
|
*/
|
||||||
|
public class Instance implements Comparable<Instance> {
|
||||||
|
|
||||||
|
|
||||||
|
@SerializedName("allocated_ips")
|
||||||
|
private IpAddresses ipAddresses;
|
||||||
|
@SerializedName("billing_info")
|
||||||
|
private BillingData billingData;
|
||||||
|
@SerializedName("billing_oid")
|
||||||
|
private Long billingId;
|
||||||
|
@SerializedName("data_transfer_allowance")
|
||||||
|
private DataTransferAllowance allowance;
|
||||||
|
@SerializedName("distro")
|
||||||
|
private String imageId;
|
||||||
|
@SerializedName("domain_name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@SerializedName("host_server_oid")
|
||||||
|
private String hostServerId;
|
||||||
|
@SerializedName("is_on_customers_own_physical_server")
|
||||||
|
private Boolean onDedicatedHardware;
|
||||||
|
@SerializedName("order_oid")
|
||||||
|
private Long id;
|
||||||
|
@SerializedName("running_state")
|
||||||
|
private String state;
|
||||||
|
@SerializedName("server_type")
|
||||||
|
private String type;
|
||||||
|
private String slug;
|
||||||
|
@SerializedName("vps_parameters")
|
||||||
|
private InstanceParameters instanceParameters;
|
||||||
|
|
||||||
|
//Object returned back with
|
||||||
|
private transient NewInstance instanceRequest;
|
||||||
|
|
||||||
|
|
||||||
|
public IpAddresses getIpAddresses() {
|
||||||
|
return ipAddresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIpAddresses(IpAddresses ipAddresses) {
|
||||||
|
this.ipAddresses = ipAddresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BillingData getBillingData() {
|
||||||
|
return billingData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBillingData(BillingData billingData) {
|
||||||
|
this.billingData = billingData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getBillingId() {
|
||||||
|
return billingId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBillingId(Long billingId) {
|
||||||
|
this.billingId = billingId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataTransferAllowance getAllowance() {
|
||||||
|
return allowance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAllowance(DataTransferAllowance allowance) {
|
||||||
|
this.allowance = allowance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getImageId() {
|
||||||
|
return imageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setImageId(String imageId) {
|
||||||
|
this.imageId = imageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHostServerId() {
|
||||||
|
return hostServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHostServerId(String hostServerId) {
|
||||||
|
this.hostServerId = hostServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean isOnDedicatedHardware() {
|
||||||
|
return onDedicatedHardware;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnDedicatedHardware(Boolean onDedicatedHardware) {
|
||||||
|
this.onDedicatedHardware = onDedicatedHardware;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSlug() {
|
||||||
|
return slug;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSlug(String slug) {
|
||||||
|
this.slug = slug;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InstanceParameters getInstanceParameters() {
|
||||||
|
return instanceParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceParameters(InstanceParameters instanceParameters) {
|
||||||
|
this.instanceParameters = instanceParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NewInstance getInstanceRequest() {
|
||||||
|
return instanceRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceRequest(NewInstance instanceRequest) {
|
||||||
|
this.instanceRequest = instanceRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(Instance instance) {
|
||||||
|
return name.compareTo(instance.getName());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,230 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RimuHostingTimestamp;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RunningState;
|
||||||
|
|
||||||
|
|
||||||
|
public class InstanceInfo {
|
||||||
|
/**
|
||||||
|
* Whether the server pinged from the host server.
|
||||||
|
*/
|
||||||
|
@SerializedName("pings_ok")
|
||||||
|
private boolean instancePings;
|
||||||
|
/**
|
||||||
|
* The current kernel label. e.g. default is the recommended
|
||||||
|
* one.
|
||||||
|
*/
|
||||||
|
@SerializedName("current_kernel")
|
||||||
|
private String kernel;
|
||||||
|
/**
|
||||||
|
* Some current_kernel labels are symlinks to different
|
||||||
|
* kernel. e.g. 'default' is a symlink to kernel that we think
|
||||||
|
* will work best for the host server and its VPSs. Over time
|
||||||
|
* we may change it (e.g. so it points to a newer server). In
|
||||||
|
* which case your server would get that new kernel the next time it
|
||||||
|
* is restarted. Note that to get the new kernel you need to
|
||||||
|
* restart the server from _outside_ the VPS (i.e. not with a reboot
|
||||||
|
* command).
|
||||||
|
*/
|
||||||
|
@SerializedName("current_kernel_canonical")
|
||||||
|
private String kernelCanonical;
|
||||||
|
/**
|
||||||
|
* The last backup message stored for the VPS.
|
||||||
|
*/
|
||||||
|
@SerializedName("last_backup_message")
|
||||||
|
private String backupMessage;
|
||||||
|
/**
|
||||||
|
* Whether the console-over-ssh login feature is enabled.
|
||||||
|
*/
|
||||||
|
@SerializedName("is_console_login_enabled")
|
||||||
|
private boolean isConsoleLoginEnabled;
|
||||||
|
/**
|
||||||
|
* The console-over-sshes authorized keys (if they are set).
|
||||||
|
* Else the console access would be controlled by a password.
|
||||||
|
*/
|
||||||
|
@SerializedName("console_public_authorized_keys")
|
||||||
|
private String consolePublicKeys;
|
||||||
|
/**
|
||||||
|
* true when the host server is running a backup of the VPS.
|
||||||
|
* On new hosts we use LVM file systems so backups can be performed
|
||||||
|
* by only pausing VPSs for a fraction of a second.
|
||||||
|
*/
|
||||||
|
@SerializedName("is_backup_running")
|
||||||
|
private boolean isBackupRunning;
|
||||||
|
/**
|
||||||
|
* true on almost all servers. false when the backups are
|
||||||
|
* enabled. e.g. if a customer had requested we disable them.
|
||||||
|
*/
|
||||||
|
@SerializedName("is_backups_enabled")
|
||||||
|
private boolean backupsEnabled;
|
||||||
|
//public boolean is_one_week_backup;
|
||||||
|
/**
|
||||||
|
* The time we next expect a backup to run. The actual time
|
||||||
|
* may be a bit later (e.g. if other VPSs are due to run at this
|
||||||
|
* time slot). We run VPS backups sequentially (one after the
|
||||||
|
* other). So if two VPSs were scheduled for a backup at the
|
||||||
|
* same time one may run a few minutes after the other.
|
||||||
|
*/
|
||||||
|
@SerializedName("next_backup_time")
|
||||||
|
private RimuHostingTimestamp nextBackup;
|
||||||
|
/**
|
||||||
|
* How long Xen reports the VPS has been up and running for.
|
||||||
|
* In seconds. Divide by your time unit of choice :)
|
||||||
|
*/
|
||||||
|
@SerializedName("vps_uptime_s")
|
||||||
|
private long instanceUptime;
|
||||||
|
/**
|
||||||
|
* The number of CPU seconds consumed by a VPS. Note that if a
|
||||||
|
* VPS is using more than one core or CPU then this number can be
|
||||||
|
* higher than the uptime number.
|
||||||
|
*/
|
||||||
|
@SerializedName("vps_cpu_time_s")
|
||||||
|
private long instanceCpuTime;
|
||||||
|
/**
|
||||||
|
* Whether the VPS is, for example, running or not. Typically
|
||||||
|
* VPSs will all be running. A VPS may be in a non-running
|
||||||
|
* state, for example, for a short time after its host server is
|
||||||
|
* restarted. Since we start VPSs sequentially (one after the
|
||||||
|
* other) to keep server load to a manageable level.
|
||||||
|
*/
|
||||||
|
@SerializedName("running_state")
|
||||||
|
private RunningState state;
|
||||||
|
/**
|
||||||
|
* Whether the VPS is marked to not run. e.g. some host server
|
||||||
|
* operations (like a disk resize) set the suspended state to
|
||||||
|
* prevent the VPS running or other actions being performed while
|
||||||
|
* that operation is being performed. Sometimes we may set
|
||||||
|
* this if the server is 'administratively down', e.g. as a
|
||||||
|
* consequence of the server breaching our terms of service.
|
||||||
|
*/
|
||||||
|
@SerializedName("is_suspended")
|
||||||
|
private boolean isSuspended;
|
||||||
|
|
||||||
|
public boolean isInstancePings() {
|
||||||
|
return instancePings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstancePings(boolean instancePings) {
|
||||||
|
this.instancePings = instancePings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKernel() {
|
||||||
|
return kernel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKernel(String kernel) {
|
||||||
|
this.kernel = kernel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKernelCanonical() {
|
||||||
|
return kernelCanonical;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKernelCanonical(String kernelCanonical) {
|
||||||
|
this.kernelCanonical = kernelCanonical;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBackupMessage() {
|
||||||
|
return backupMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackupMessage(String backupMessage) {
|
||||||
|
this.backupMessage = backupMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isConsoleLoginEnabled() {
|
||||||
|
return isConsoleLoginEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConsoleLoginEnabled(boolean consoleLoginEnabled) {
|
||||||
|
isConsoleLoginEnabled = consoleLoginEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getConsolePublicKeys() {
|
||||||
|
return consolePublicKeys;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConsolePublicKeys(String consolePublicKeys) {
|
||||||
|
this.consolePublicKeys = consolePublicKeys;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBackupRunning() {
|
||||||
|
return isBackupRunning;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackupRunning(boolean backupRunning) {
|
||||||
|
isBackupRunning = backupRunning;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBackupsEnabled() {
|
||||||
|
return backupsEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackupsEnabled(boolean backupsEnabled) {
|
||||||
|
this.backupsEnabled = backupsEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RimuHostingTimestamp getNextBackup() {
|
||||||
|
return nextBackup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNextBackup(RimuHostingTimestamp nextBackup) {
|
||||||
|
this.nextBackup = nextBackup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getInstanceUptime() {
|
||||||
|
return instanceUptime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceUptime(long instanceUptime) {
|
||||||
|
this.instanceUptime = instanceUptime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getInstanceCpuTime() {
|
||||||
|
return instanceCpuTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceCpuTime(long instanceCpuTime) {
|
||||||
|
this.instanceCpuTime = instanceCpuTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RunningState getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(RunningState state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSuspended() {
|
||||||
|
return isSuspended;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSuspended(boolean suspended) {
|
||||||
|
isSuspended = suspended;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import org.jclouds.rimuhosting.miro.data.PostData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attributes about a running VPS. Implicit with any changes to
|
||||||
|
* these attributes on a VPS is that we'd need to restart the VPS for
|
||||||
|
* the changes to happen. At least at this point in time.
|
||||||
|
*
|
||||||
|
* @author Ivan Meredith
|
||||||
|
*/
|
||||||
|
public class InstanceParameters implements PostData {
|
||||||
|
/**
|
||||||
|
* File system image size.
|
||||||
|
*/
|
||||||
|
@SerializedName("disk_space_mb")
|
||||||
|
private Integer primaryDisk;
|
||||||
|
/**
|
||||||
|
* Some VPSs have a secondary partition. One that is not part
|
||||||
|
* of the regular backup setups. Mostly not used.
|
||||||
|
*/
|
||||||
|
@SerializedName("disk_space_2_mb")
|
||||||
|
private Integer secondaryDisk;
|
||||||
|
/**
|
||||||
|
* Memory size.
|
||||||
|
*/
|
||||||
|
@SerializedName("memory_mb")
|
||||||
|
private Integer ram;
|
||||||
|
|
||||||
|
public Integer getPrimaryDisk() {
|
||||||
|
return primaryDisk;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimaryDisk(Integer primaryDisk) {
|
||||||
|
this.primaryDisk = primaryDisk;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getSecondaryDisk() {
|
||||||
|
return secondaryDisk;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSecondaryDisk(Integer secondaryDisk) {
|
||||||
|
this.secondaryDisk = secondaryDisk;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getRam() {
|
||||||
|
return ram;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRam(Integer ram) {
|
||||||
|
this.ram = ram;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate() {
|
||||||
|
//XXX: do we need to do anything here?
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.SortedSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IpAddresses assigned to an Interface. Not rimuhosting doesnt have private IPs.
|
||||||
|
*/
|
||||||
|
public class IpAddresses {
|
||||||
|
@SerializedName("primary_ip")
|
||||||
|
private String primaryIp;
|
||||||
|
@SerializedName("secondary_ips")
|
||||||
|
private SortedSet<String> secondaryIps;
|
||||||
|
|
||||||
|
public String getPrimaryIp() {
|
||||||
|
return primaryIp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimaryIp(String primaryIp) {
|
||||||
|
this.primaryIp = primaryIp;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import org.jclouds.rimuhosting.miro.data.NewInstance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrapper object to get back all data from a Instance create. The Password has been populated the NewInstance
|
||||||
|
* object.
|
||||||
|
*/
|
||||||
|
public class NewInstanceResponse implements Comparable<NewInstanceResponse> {
|
||||||
|
@SerializedName("about_order")
|
||||||
|
private Instance instance;
|
||||||
|
|
||||||
|
@SerializedName("new_order_request")
|
||||||
|
private NewInstance newInstanceRequest;
|
||||||
|
|
||||||
|
@SerializedName("running_vps_info")
|
||||||
|
private InstanceInfo instanceInfo;
|
||||||
|
|
||||||
|
public Instance getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstance(Instance instaince) {
|
||||||
|
this.instance = instaince;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NewInstance getNewInstanceRequest() {
|
||||||
|
return newInstanceRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewInstanceRequest(NewInstance newInstanceRequest) {
|
||||||
|
this.newInstanceRequest = newInstanceRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InstanceInfo getInstanceInfo() {
|
||||||
|
return instanceInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceInfo(InstanceInfo instanceInfo) {
|
||||||
|
this.instanceInfo = instanceInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(NewInstanceResponse instance) {
|
||||||
|
return this.instance.getId().compareTo(instance.getInstance().getId());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,125 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.ServerType;
|
||||||
|
|
||||||
|
public class PricingPlan implements Comparable<PricingPlan>{
|
||||||
|
@SerializedName("minimum_data_transfer_allowance_gb")
|
||||||
|
private Long dataTransfer;
|
||||||
|
@SerializedName("minimum_disk_gb")
|
||||||
|
private Integer diskSize;
|
||||||
|
@SerializedName("minimum_memory_mb")
|
||||||
|
private Integer ram;
|
||||||
|
@SerializedName("monthly_recurring_fee_usd")
|
||||||
|
private Double monthlyCharge;
|
||||||
|
@SerializedName("offered_at_data_center")
|
||||||
|
private DataCenter dataCenter;
|
||||||
|
@SerializedName("pricing_plan_code")
|
||||||
|
private String id;
|
||||||
|
@SerializedName("pricing_plan_description")
|
||||||
|
private String description;
|
||||||
|
@SerializedName("see_also_url")
|
||||||
|
private String see_also_url;
|
||||||
|
@SerializedName("server_type")
|
||||||
|
private ServerType serverType;
|
||||||
|
|
||||||
|
public Long getDataTransfer() {
|
||||||
|
return dataTransfer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataTransfer(Long dataTransfer) {
|
||||||
|
this.dataTransfer = dataTransfer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getDiskSize() {
|
||||||
|
return diskSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDiskSize(Integer diskSize) {
|
||||||
|
this.diskSize = diskSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getRam() {
|
||||||
|
return ram;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRam(Integer ram) {
|
||||||
|
this.ram = ram;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getMonthlyCharge() {
|
||||||
|
return monthlyCharge;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMonthlyCharge(Double monthlyCharge) {
|
||||||
|
this.monthlyCharge = monthlyCharge;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataCenter getDataCenter() {
|
||||||
|
return dataCenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataCenter(DataCenter dataCenter) {
|
||||||
|
this.dataCenter = dataCenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSee_also_url() {
|
||||||
|
return see_also_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSee_also_url(String see_also_url) {
|
||||||
|
this.see_also_url = see_also_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerType getServerType() {
|
||||||
|
return serverType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServerType(ServerType serverType) {
|
||||||
|
this.serverType = serverType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(PricingPlan pricingPlan) {
|
||||||
|
return id.compareTo(pricingPlan.getId());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information about a resource change.
|
||||||
|
*/
|
||||||
|
public class ResizeResult {
|
||||||
|
/**
|
||||||
|
* Original monthly pricing, in USD.
|
||||||
|
*/
|
||||||
|
@SerializedName("original_pricing")
|
||||||
|
private Double originalPricing;
|
||||||
|
/**
|
||||||
|
* New monthly pricing, in USD, after the resource changes.
|
||||||
|
*/
|
||||||
|
@SerializedName("new_pricing")
|
||||||
|
private Double newPricing;
|
||||||
|
/**
|
||||||
|
* Information about the change. e.g. may include information
|
||||||
|
* about how we calculate pro-rated credits or fees. Or what
|
||||||
|
* paypal subscriptions need to get changed to. Or what
|
||||||
|
* prepayment date changes were made.
|
||||||
|
* <p/>
|
||||||
|
* You will need to check these messages in some cases. e.g.
|
||||||
|
* if you are decreasing pricing and you are paying via a paypal
|
||||||
|
* subscription. Since you would be overpaying your account,
|
||||||
|
* unless you followed the directions to modify your paypal
|
||||||
|
* subscription.
|
||||||
|
*/
|
||||||
|
@SerializedName("resource_change_messages")
|
||||||
|
private List<String> messages;
|
||||||
|
/**
|
||||||
|
* true if we made the resource changes. False if we did not
|
||||||
|
* make them, e.g. if we hit a billing issue, or if the host server
|
||||||
|
* did not have the resources to accomodate the change.
|
||||||
|
*/
|
||||||
|
@SerializedName("were_resources_changed")
|
||||||
|
private Boolean success;
|
||||||
|
|
||||||
|
public double getNewPricing() {
|
||||||
|
return newPricing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewPricing(double newPricing) {
|
||||||
|
this.newPricing = newPricing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getMessages() {
|
||||||
|
return messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessages(List<String> messages) {
|
||||||
|
this.messages = messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSuccess() {
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSuccess(boolean success) {
|
||||||
|
this.success = success;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getOriginalPricing() {
|
||||||
|
|
||||||
|
return originalPricing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOriginalPricing(double originalPricing) {
|
||||||
|
this.originalPricing = originalPricing;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain.internal;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error Object from a response
|
||||||
|
*/
|
||||||
|
public class RimuHostingError {
|
||||||
|
@SerializedName("error_class")
|
||||||
|
private String errorClass;
|
||||||
|
|
||||||
|
@SerializedName("full_error_message")
|
||||||
|
private String errorMessage;
|
||||||
|
|
||||||
|
@SerializedName("error_title")
|
||||||
|
private String error;
|
||||||
|
|
||||||
|
public String getErrorClass() {
|
||||||
|
return errorClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrorClass(String errorClass) {
|
||||||
|
this.errorClass = errorClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getErrorMessage() {
|
||||||
|
return errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrorMessage(String errorMessage) {
|
||||||
|
this.errorMessage = errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getError() {
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setError(String error) {
|
||||||
|
this.error = error;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain.internal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object that the payload on requests is wrapped in.
|
||||||
|
*/
|
||||||
|
public class RimuHostingResponse {
|
||||||
|
private String status_message;
|
||||||
|
private Integer status_code;
|
||||||
|
private RimuHostingError error_info;
|
||||||
|
public String getStatusMessage() {
|
||||||
|
return status_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatusMessage(String status_message) {
|
||||||
|
this.status_message = status_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getStatusCode() {
|
||||||
|
return status_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatusCode(Integer status_code) {
|
||||||
|
this.status_code = status_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public RimuHostingError getErrorInfo() {
|
||||||
|
return error_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrorInfo(RimuHostingError error_info) {
|
||||||
|
this.error_info = error_info;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain.internal;
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles a timestamp JSON object from rimuhosting
|
||||||
|
*/
|
||||||
|
public class RimuHostingTimestamp {
|
||||||
|
private Long ms_since_epoch;
|
||||||
|
|
||||||
|
public Long getMs() {
|
||||||
|
return ms_since_epoch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMs(Long ms_since_epoch) {
|
||||||
|
this.ms_since_epoch = ms_since_epoch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timestamp getTimestamp(){
|
||||||
|
return new Timestamp(ms_since_epoch);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain.internal;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* States an instance can be in.
|
||||||
|
*/
|
||||||
|
public enum RunningState {
|
||||||
|
RUNNING, NOTRUNNING, RESTARTING, POWERCYCLING
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.domain.internal;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Jclouds is only interested in VPS.
|
||||||
|
*/
|
||||||
|
public enum ServerType {
|
||||||
|
PHYSICAL, VPS
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.filters;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import org.jclouds.http.HttpException;
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.http.HttpRequestFilter;
|
||||||
|
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import javax.ws.rs.core.HttpHeaders;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RimuHosting Authentication is a Authorization Header.
|
||||||
|
*
|
||||||
|
* Authorization: rimuhosting apikey=<key>
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
public class RimuHostingAuthentication implements HttpRequestFilter {
|
||||||
|
private List<String> credentialList;
|
||||||
|
|
||||||
|
public RimuHostingAuthentication(String apikey){
|
||||||
|
this.credentialList = Collections.singletonList(String.format("rimuhosting apikey=%s", checkNotNull(apikey, "apikey")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void filter(HttpRequest request) throws HttpException {
|
||||||
|
request.getHeaders().replaceValues(HttpHeaders.AUTHORIZATION, credentialList);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RimuHostingResponse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class ParseDestroyResponseFromJsonResponse extends ParseJson<List<String>> {
|
||||||
|
@Inject
|
||||||
|
public ParseDestroyResponseFromJsonResponse(Gson gson) {
|
||||||
|
super(gson);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class DestroyResponse extends RimuHostingResponse {
|
||||||
|
private List<String> cancel_messages;
|
||||||
|
|
||||||
|
public List<String> getCancelMessages() {
|
||||||
|
return cancel_messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCancelMessages(List<String> cancel_messages) {
|
||||||
|
this.cancel_messages = cancel_messages;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected List<String> apply(InputStream stream) {
|
||||||
|
Type setType = new TypeToken<Map<String, DestroyResponse>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
Map<String, DestroyResponse> responseMap = gson.fromJson(new InputStreamReader(stream, "UTF-8"), setType);
|
||||||
|
return responseMap.values().iterator().next().getCancelMessages();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException("jclouds requires UTF-8 encoding", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.Image;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RimuHostingResponse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.SortedSet;
|
||||||
|
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class ParseImagesFromJsonResponse extends ParseJson<SortedSet<Image>> {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public ParseImagesFromJsonResponse(Gson gson) {
|
||||||
|
super(gson);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class DistroResponse extends RimuHostingResponse {
|
||||||
|
private SortedSet<Image> distro_infos;
|
||||||
|
|
||||||
|
public SortedSet<Image> getDistroInfos() {
|
||||||
|
return distro_infos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDistroInfos(SortedSet<Image> distro_infos) {
|
||||||
|
this.distro_infos = distro_infos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public SortedSet<Image> apply(InputStream stream) {
|
||||||
|
Type setType = new TypeToken<Map<String, DistroResponse>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
Map<String, DistroResponse> t = gson.fromJson(new InputStreamReader(stream, "UTF-8"), setType);
|
||||||
|
return t.values().iterator().next().getDistroInfos();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException("jclouds requires UTF-8 encoding", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.Instance;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RimuHostingResponse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class ParseInstanceFromJsonResponse extends ParseJson<Instance> {
|
||||||
|
@Inject
|
||||||
|
public ParseInstanceFromJsonResponse(Gson gson) {
|
||||||
|
super(gson);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class OrderResponse extends RimuHostingResponse {
|
||||||
|
private Instance about_order;
|
||||||
|
public Instance getAboutOrder() {
|
||||||
|
return about_order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAboutOrder(Instance about_orders) {
|
||||||
|
this.about_order = about_orders;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected Instance apply(InputStream stream) {
|
||||||
|
Type setType = new TypeToken<Map<String, OrderResponse>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
Map<String, OrderResponse> responseMap = gson.fromJson(new InputStreamReader(stream, "UTF-8"), setType);
|
||||||
|
return responseMap.values().iterator().next().getAboutOrder();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException("jclouds requires UTF-8 encoding", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.InstanceInfo;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RimuHostingResponse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class ParseInstanceInfoFromJsonResponse extends ParseJson<InstanceInfo> {
|
||||||
|
@Inject
|
||||||
|
public ParseInstanceInfoFromJsonResponse(Gson gson) {
|
||||||
|
super(gson);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class OrderResponse extends RimuHostingResponse {
|
||||||
|
private InstanceInfo running_vps_info;
|
||||||
|
|
||||||
|
public InstanceInfo getInstanceInfo() {
|
||||||
|
return running_vps_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInstanceInfo(InstanceInfo running_vps_info) {
|
||||||
|
this.running_vps_info = running_vps_info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected InstanceInfo apply(InputStream stream) {
|
||||||
|
Type setType = new TypeToken<Map<String, OrderResponse>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
Map<String, OrderResponse> responseMap = gson.fromJson(new InputStreamReader(stream, "UTF-8"), setType);
|
||||||
|
return responseMap.values().iterator().next().getInstanceInfo();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException("jclouds requires UTF-8 encoding", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.Instance;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RimuHostingResponse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.SortedSet;
|
||||||
|
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class ParseInstancesFromJsonResponse extends ParseJson<SortedSet<Instance>> {
|
||||||
|
@Inject
|
||||||
|
public ParseInstancesFromJsonResponse(Gson gson) {
|
||||||
|
super(gson);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class OrderResponse extends RimuHostingResponse {
|
||||||
|
private SortedSet<Instance> about_orders;
|
||||||
|
public SortedSet<Instance> getAboutOrders() {
|
||||||
|
return about_orders;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAboutOrders(SortedSet<Instance> about_orders) {
|
||||||
|
this.about_orders = about_orders;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected SortedSet<Instance> apply(InputStream stream) {
|
||||||
|
Type setType = new TypeToken<Map<String, OrderResponse>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
Map<String, OrderResponse> responseMap = gson.fromJson(new InputStreamReader(stream, "UTF-8"), setType);
|
||||||
|
return responseMap.values().iterator().next().getAboutOrders();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException("jclouds requires UTF-8 encoding", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.NewInstanceResponse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class ParseNewInstanceResponseFromJsonResponse extends ParseJson<NewInstanceResponse> {
|
||||||
|
@Inject
|
||||||
|
public ParseNewInstanceResponseFromJsonResponse(Gson gson) {
|
||||||
|
super(gson);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected NewInstanceResponse apply(InputStream stream) {
|
||||||
|
Type setType = new TypeToken<Map<String, NewInstanceResponse>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
Map<String, NewInstanceResponse> responseMap = gson.fromJson(new InputStreamReader(stream, "UTF-8"), setType);
|
||||||
|
return responseMap.values().iterator().next();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException("jclouds requires UTF-8 encoding", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.PricingPlan;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RimuHostingResponse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.SortedSet;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class ParsePricingPlansFromJsonResponse extends ParseJson<SortedSet<PricingPlan>> {
|
||||||
|
@Inject
|
||||||
|
public ParsePricingPlansFromJsonResponse(Gson gson) {
|
||||||
|
super(gson);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class PlansResponse extends RimuHostingResponse {
|
||||||
|
private SortedSet<PricingPlan> pricing_plan_infos;
|
||||||
|
|
||||||
|
public SortedSet<PricingPlan> getPricingPlanInfos() {
|
||||||
|
return pricing_plan_infos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPricingPlanInfos(SortedSet<PricingPlan> pricing_plan_infos) {
|
||||||
|
this.pricing_plan_infos = pricing_plan_infos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected SortedSet<PricingPlan> apply(InputStream stream) {
|
||||||
|
Type setType = new TypeToken<Map<String, PlansResponse>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
Map<String, PlansResponse> responseMap = gson.fromJson(new InputStreamReader(stream, "UTF-8"), setType);
|
||||||
|
return responseMap.values().iterator().next().getPricingPlanInfos();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException("jclouds requires UTF-8 encoding", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import org.jclouds.http.functions.ParseJson;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.Instance;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RimuHostingResponse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class ParseResizeResponseFromJsonResponse extends ParseJson<ParseResizeResponseFromJsonResponse.ResizeResponse> {
|
||||||
|
@Inject
|
||||||
|
public ParseResizeResponseFromJsonResponse(Gson gson) {
|
||||||
|
super(gson);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ResizeResponse extends RimuHostingResponse {
|
||||||
|
private Instance about_order;
|
||||||
|
private ResizeResponse resource_change_result;
|
||||||
|
|
||||||
|
public ResizeResponse getResourceChangeResult() {
|
||||||
|
return resource_change_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResourceChangeResult(ResizeResponse resource_change_result) {
|
||||||
|
this.resource_change_result = resource_change_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Instance getAboutOrder() {
|
||||||
|
return about_order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAboutOrder(Instance about_orders) {
|
||||||
|
this.about_order = about_orders;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected ResizeResponse apply(InputStream stream) {
|
||||||
|
Type setType = new TypeToken<Map<String, ResizeResponse>>() {
|
||||||
|
}.getType();
|
||||||
|
try {
|
||||||
|
Map<String, ResizeResponse> responseMap = gson.fromJson(new InputStreamReader(stream, "UTF-8"), setType);
|
||||||
|
return responseMap.values().iterator().next();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException("jclouds requires UTF-8 encoding", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import org.jclouds.http.HttpResponseException;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RimuHostingResponse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On non 2xx we have an error. RimuHosting using the same json base object.
|
||||||
|
*
|
||||||
|
* TODO: map exceptions out into something that suits jclouds.
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
public class ParseRimuHostingException implements Function<Exception, Object> {
|
||||||
|
private Gson gson;
|
||||||
|
@Inject
|
||||||
|
public ParseRimuHostingException(Gson gson) {
|
||||||
|
this.gson = gson;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object apply(Exception e) {
|
||||||
|
if(e instanceof HttpResponseException){
|
||||||
|
HttpResponseException responseException = (HttpResponseException)e;
|
||||||
|
Type setType = new TypeToken<Map<String, RimuHostingResponse>>() {
|
||||||
|
}.getType();
|
||||||
|
|
||||||
|
Map<String, RimuHostingResponse> responseMap = gson.fromJson(responseException.getContent(), setType);
|
||||||
|
throw new RuntimeException(responseMap.values().iterator().next().getErrorInfo().getErrorClass());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.reference;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration properties and constants used in RimuHosting connections.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public interface RimuHostingConstants {
|
||||||
|
public static final String PROPERTY_RIMUHOSTING_ENDPOINT = "jclouds.rimuhosting.endpoint";
|
||||||
|
public static final String PROPERTY_RIMUHOSTING_USER = "jclouds.rimuhosting.user";
|
||||||
|
public static final String PROPERTY_RIMUHOSTING_PASSWORD = "jclouds.rimuhosting.password";
|
||||||
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
|
import com.google.inject.Module;
|
||||||
|
import com.google.inject.Provides;
|
||||||
|
import com.google.inject.TypeLiteral;
|
||||||
|
import org.jclouds.http.filters.BasicAuthentication;
|
||||||
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.logging.Logger.LoggerFactory;
|
||||||
|
import org.jclouds.rest.RestClientTest;
|
||||||
|
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||||
|
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||||
|
import static org.testng.Assert.assertEquals;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests annotation parsing of {@code RimuHostingAsyncClient}
|
||||||
|
*
|
||||||
|
* @author Ivan Meredith
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit", testName = "rimuhosting.RimuHostingAsyncClientTest")
|
||||||
|
public class RimuHostingAsyncClientTest extends RestClientTest<RimuHostingAsyncClient> {
|
||||||
|
|
||||||
|
public void testGetMyMentions() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
/* Method method = RimuHostingAsyncClient.class.getMethod("TODO: insert test method name");
|
||||||
|
GeneratedHttpRequest<RimuHostingAsyncClient> httpMethod = processor.createRequest(method);
|
||||||
|
|
||||||
|
assertRequestLineEquals(httpMethod, "TODO: insert expected request");
|
||||||
|
assertHeadersEqual(httpMethod, "");
|
||||||
|
assertEntityEquals(httpMethod, null);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, httpMethod, ParseStatusesFromJsonResponse.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, null);
|
||||||
|
|
||||||
|
checkFilters(httpMethod);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void checkFilters(GeneratedHttpRequest<RimuHostingAsyncClient> httpMethod) {
|
||||||
|
assertEquals(httpMethod.getFilters().size(), 1);
|
||||||
|
assertEquals(httpMethod.getFilters().get(0).getClass(), BasicAuthentication.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected TypeLiteral<RestAnnotationProcessor<RimuHostingAsyncClient>> createTypeLiteral() {
|
||||||
|
return new TypeLiteral<RestAnnotationProcessor<RimuHostingAsyncClient>>() {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Module createModule() {
|
||||||
|
return new AbstractModule() {
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bind(URI.class).annotatedWith(RimuHosting.class).toInstance(
|
||||||
|
URI.create("https://rimuhosting.com/r"));
|
||||||
|
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
|
||||||
|
public Logger getLogger(String category) {
|
||||||
|
return Logger.NULL;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
public BasicAuthentication provideBasicAuthentication()
|
||||||
|
throws UnsupportedEncodingException {
|
||||||
|
return new BasicAuthentication("foo", "bar");
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,95 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
|
||||||
|
import org.jclouds.rimuhosting.miro.data.CreateOptions;
|
||||||
|
import org.jclouds.rimuhosting.miro.data.NewInstance;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.*;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.internal.RunningState;
|
||||||
|
import static org.testng.Assert.*;
|
||||||
|
import org.testng.annotations.BeforeGroups;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import java.util.SortedSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code RimuHostingClient}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "live", testName = "rimuhosting.RimuHostingClientLiveTest")
|
||||||
|
public class RimuHostingClientLiveTest {
|
||||||
|
|
||||||
|
private RimuHostingClient connection;
|
||||||
|
|
||||||
|
@BeforeGroups(groups = {"live"})
|
||||||
|
public void setupClient() {
|
||||||
|
String user = checkNotNull(System.getProperty("jclouds.test.user"), "jclouds.test.user");
|
||||||
|
String password = checkNotNull(System.getProperty("jclouds.test.key"), "jclouds.test.key");
|
||||||
|
|
||||||
|
connection = RimuHostingContextFactory.createContext(user, password, new Log4JLoggingModule())
|
||||||
|
.getApi();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPricingPlans(){
|
||||||
|
SortedSet<PricingPlan> plans = connection.getPricingPlanList();
|
||||||
|
for(PricingPlan plan : plans){
|
||||||
|
if(plan.getId().equalsIgnoreCase("miro1")){
|
||||||
|
assertTrue(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertTrue(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testImages(){
|
||||||
|
SortedSet<Image> images = connection.getImageList();
|
||||||
|
for(Image image : images){
|
||||||
|
if(image.getId().equalsIgnoreCase("lenny")){
|
||||||
|
assertTrue(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertTrue(false, "lenny not found");
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void testLifeCycle() {
|
||||||
|
//Get the first image, we dont really care what it is in this test.
|
||||||
|
NewInstance inst = new NewInstance(new CreateOptions("test.jclouds.org",null,"lenny"),"MIRO1") ;
|
||||||
|
NewInstanceResponse instanceResponse = connection.createInstance(inst);
|
||||||
|
Instance instance = instanceResponse.getInstance();
|
||||||
|
//Now we have the instance, lets restart it
|
||||||
|
assertNotNull(instance.getId());
|
||||||
|
InstanceInfo instanceInfo = connection.restartInstance(instance.getId());
|
||||||
|
connection.destroyInstance(instance.getId());
|
||||||
|
//Should be running now.
|
||||||
|
assertEquals(instanceInfo.getState(), RunningState.RUNNING);
|
||||||
|
assertEquals(instance.getName(),"test.jclouds.org");
|
||||||
|
assertEquals(instance.getImageId(), "lenny");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.rimuhosting.miro.data.CreateOptions;
|
||||||
|
import org.jclouds.rimuhosting.miro.data.NewInstance;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.Instance;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.NewInstanceResponse;
|
||||||
|
import org.jclouds.ssh.SshClient.Factory;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
|
||||||
|
|
||||||
|
public class RimuHostingComputeClient {
|
||||||
|
@Resource
|
||||||
|
protected Logger logger = Logger.NULL;
|
||||||
|
|
||||||
|
private final Predicate<InetSocketAddress> socketTester;
|
||||||
|
private final RimuHostingClient rhClient;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public RimuHostingComputeClient(RimuHostingClient rhClient, Factory sshFactory,
|
||||||
|
Predicate<InetSocketAddress> socketTester) {
|
||||||
|
this.rhClient = rhClient;
|
||||||
|
this.sshFactory = sshFactory;
|
||||||
|
this.socketTester = socketTester;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Factory sshFactory;
|
||||||
|
|
||||||
|
|
||||||
|
public Long start(String name, String planId, String imageId) {
|
||||||
|
logger.debug(">> instantiating RimuHosting VPS name(%s) plan(%s) image(%s)", name, planId, imageId);
|
||||||
|
NewInstanceResponse instanceRespone = rhClient.createInstance(new NewInstance(new CreateOptions(name,null,imageId), planId));
|
||||||
|
logger.debug(">> VPS id(%d) started and running.", instanceRespone.getInstance().getId());
|
||||||
|
return instanceRespone.getInstance().getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void reboot(Long id) {
|
||||||
|
Instance instance = rhClient.getInstance(id);
|
||||||
|
logger.debug(">> rebooting VPS(%d)", instance.getId());
|
||||||
|
rhClient.restartInstance(id);
|
||||||
|
logger.debug("<< on VPS(%d)", instance.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy(Long id) {
|
||||||
|
Instance instance = rhClient.getInstance(id);
|
||||||
|
logger.debug(">> destroy VPS(%d)", instance.getId());
|
||||||
|
rhClient.destroyInstance(id);
|
||||||
|
logger.debug(">> destroyed VPS");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,117 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.inject.*;
|
||||||
|
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
|
||||||
|
import org.jclouds.predicates.AddressReachable;
|
||||||
|
import org.jclouds.predicates.RetryablePredicate;
|
||||||
|
import org.jclouds.predicates.SocketOpen;
|
||||||
|
import org.jclouds.rimuhosting.miro.domain.Instance;
|
||||||
|
import org.jclouds.ssh.jsch.config.JschSshClientModule;
|
||||||
|
import static org.testng.Assert.assertEquals;
|
||||||
|
import org.testng.annotations.AfterTest;
|
||||||
|
import org.testng.annotations.BeforeGroups;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code TerremarkVCloudClient}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "live", sequential = true, testName = "rimuhosting.RimuHostingComputeClientLiveTest")
|
||||||
|
public class RimuHostingComputeClientLiveTest {
|
||||||
|
RimuHostingComputeClient client;
|
||||||
|
RimuHostingClient rhClient;
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
|
||||||
|
private InetAddress publicIp;
|
||||||
|
private Predicate<InetAddress> addressTester;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPowerOn() throws InterruptedException, ExecutionException, TimeoutException,
|
||||||
|
IOException {
|
||||||
|
String imageId = "lenny";
|
||||||
|
String serverName = "test.jclouds.org";
|
||||||
|
String planId = "MIRO1";
|
||||||
|
|
||||||
|
id = client.start(serverName, planId, imageId);
|
||||||
|
Instance instance = rhClient.getInstance(id);
|
||||||
|
assertEquals(imageId, instance.getImageId());
|
||||||
|
assertEquals(serverName, instance.getName());
|
||||||
|
assertEquals(new Integer(160), instance.getInstanceParameters().getRam());
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterTest
|
||||||
|
void cleanup() throws InterruptedException, ExecutionException, TimeoutException {
|
||||||
|
if (id != null)
|
||||||
|
client.destroy(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeGroups(groups = { "live" })
|
||||||
|
public void setupClient() {
|
||||||
|
String account = checkNotNull(System.getProperty("jclouds.test.user"), "jclouds.test.user");
|
||||||
|
String key = checkNotNull(System.getProperty("jclouds.test.key"), "jclouds.test.key");
|
||||||
|
Injector injector = new RimuHostingContextBuilder(new RimuHostingPropertiesBuilder(
|
||||||
|
account, key).relaxSSLHostname().build()).withModules(new Log4JLoggingModule(),
|
||||||
|
new JschSshClientModule(), new AbstractModule() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
@Provides
|
||||||
|
private Predicate<InetSocketAddress> socketTester(SocketOpen open) {
|
||||||
|
return new RetryablePredicate<InetSocketAddress>(open, 130, 10,
|
||||||
|
TimeUnit.SECONDS);// make it longer then
|
||||||
|
// default internet
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
@Provides
|
||||||
|
private Predicate<InetAddress> addressTester(AddressReachable reachable) {
|
||||||
|
return new RetryablePredicate<InetAddress>(reachable, 60, 5, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}).buildInjector();
|
||||||
|
client = injector.getInstance(RimuHostingComputeClient.class);
|
||||||
|
rhClient = injector.getInstance(RimuHostingClient.class);
|
||||||
|
addressTester = injector.getInstance(Key.get(new TypeLiteral<Predicate<InetAddress>>() {
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro;
|
||||||
|
|
||||||
|
import com.google.inject.Injector;
|
||||||
|
import com.google.inject.Key;
|
||||||
|
import com.google.inject.Module;
|
||||||
|
import com.google.inject.TypeLiteral;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
import org.jclouds.rest.internal.RestContextImpl;
|
||||||
|
import org.jclouds.rimuhosting.miro.config.RimuHostingRestClientModule;
|
||||||
|
import org.jclouds.rimuhosting.miro.filters.RimuHostingAuthentication;
|
||||||
|
import org.jclouds.rimuhosting.miro.reference.RimuHostingConstants;
|
||||||
|
import static org.testng.Assert.assertEquals;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of modules configured in RimuHostingContextBuilder
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit", testName = "rimuhosting.RimuHostingContextBuilderTest")
|
||||||
|
public class RimuHostingContextBuilderTest {
|
||||||
|
|
||||||
|
public void testNewBuilder() {
|
||||||
|
RimuHostingContextBuilder builder = newBuilder();
|
||||||
|
assertEquals(builder.getProperties().getProperty(RimuHostingConstants.PROPERTY_RIMUHOSTING_ENDPOINT),
|
||||||
|
"https://rimuhosting.com/r");
|
||||||
|
assertEquals(builder.getProperties().getProperty(RimuHostingConstants.PROPERTY_RIMUHOSTING_USER),
|
||||||
|
"user");
|
||||||
|
assertEquals(builder.getProperties().getProperty(RimuHostingConstants.PROPERTY_RIMUHOSTING_PASSWORD),
|
||||||
|
"password");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testBuildContext() {
|
||||||
|
RestContext<RimuHostingAsyncClient, RimuHostingClient> context = newBuilder().buildContext();
|
||||||
|
assertEquals(context.getClass(), RestContextImpl.class);
|
||||||
|
assertEquals(context.getAccount(), "user");
|
||||||
|
assertEquals(context.getEndPoint(), URI.create("https://rimuhosting.com/r"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testBuildInjector() {
|
||||||
|
Injector i = newBuilder().buildInjector();
|
||||||
|
assert i.getInstance(Key.get(new TypeLiteral<RestContext<RimuHostingAsyncClient, RimuHostingClient>>() {
|
||||||
|
})) != null; // TODO: test all things taken from context
|
||||||
|
assert i.getInstance(RimuHostingAuthentication.class) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void testAddContextModule() {
|
||||||
|
List<Module> modules = new ArrayList<Module>();
|
||||||
|
RimuHostingContextBuilder builder = newBuilder();
|
||||||
|
builder.addContextModule(modules);
|
||||||
|
assertEquals(modules.size(), 1);
|
||||||
|
assertEquals(modules.get(0).getClass(), RimuHostingRestClientModule.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private RimuHostingContextBuilder newBuilder() {
|
||||||
|
RimuHostingContextBuilder builder = new RimuHostingContextBuilder(new RimuHostingPropertiesBuilder(
|
||||||
|
"user", "password").build());
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addClientModule() {
|
||||||
|
List<Module> modules = new ArrayList<Module>();
|
||||||
|
RimuHostingContextBuilder builder = newBuilder();
|
||||||
|
builder.addClientModule(modules);
|
||||||
|
assertEquals(modules.size(), 1);
|
||||||
|
assertEquals(modules.get(0).getClass(), RimuHostingRestClientModule.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,105 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.config;
|
||||||
|
|
||||||
|
import com.google.inject.Guice;
|
||||||
|
import com.google.inject.Injector;
|
||||||
|
import org.jclouds.concurrent.WithinThreadExecutorService;
|
||||||
|
import org.jclouds.concurrent.config.ExecutorServiceModule;
|
||||||
|
import org.jclouds.http.HttpRetryHandler;
|
||||||
|
import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
|
||||||
|
import org.jclouds.http.functions.config.ParserModule;
|
||||||
|
import org.jclouds.http.functions.config.ParserModule.CDateTimeAdapter;
|
||||||
|
import org.jclouds.http.functions.config.ParserModule.DateTimeAdapter;
|
||||||
|
import org.jclouds.http.handlers.CloseContentAndSetExceptionErrorHandler;
|
||||||
|
import org.jclouds.http.handlers.DelegatingErrorHandler;
|
||||||
|
import org.jclouds.http.handlers.DelegatingRetryHandler;
|
||||||
|
import org.jclouds.http.handlers.RedirectionRetryHandler;
|
||||||
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.logging.Logger.LoggerFactory;
|
||||||
|
import org.jclouds.rimuhosting.miro.reference.RimuHostingConstants;
|
||||||
|
import org.jclouds.util.Jsr330;
|
||||||
|
import static org.testng.Assert.assertEquals;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit", testName = "rimuhosting.RimuHostingContextModule")
|
||||||
|
public class RimuHostingContextModuleTest {
|
||||||
|
|
||||||
|
Injector createInjector() {
|
||||||
|
return Guice.createInjector(new RimuHostingRestClientModule(), new RimuHostingContextModule() {
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bindConstant().annotatedWith(Jsr330.named(RimuHostingConstants.PROPERTY_RIMUHOSTING_USER)).to(
|
||||||
|
"user");
|
||||||
|
bindConstant().annotatedWith(Jsr330.named(RimuHostingConstants.PROPERTY_RIMUHOSTING_PASSWORD))
|
||||||
|
.to("password");
|
||||||
|
bindConstant().annotatedWith(Jsr330.named(RimuHostingConstants.PROPERTY_RIMUHOSTING_ENDPOINT))
|
||||||
|
.to("http://localhost");
|
||||||
|
bind(Logger.LoggerFactory.class).toInstance(new LoggerFactory() {
|
||||||
|
public Logger getLogger(String category) {
|
||||||
|
return Logger.NULL;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
super.configure();
|
||||||
|
}
|
||||||
|
}, new ParserModule(), new JavaUrlHttpCommandExecutorServiceModule(),
|
||||||
|
new ExecutorServiceModule(new WithinThreadExecutorService()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testServerErrorHandler() {
|
||||||
|
DelegatingErrorHandler handler = createInjector().getInstance(DelegatingErrorHandler.class);
|
||||||
|
assertEquals(handler.getServerErrorHandler().getClass(),
|
||||||
|
CloseContentAndSetExceptionErrorHandler.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testDateTimeAdapter() {
|
||||||
|
assertEquals(this.createInjector().getInstance(DateTimeAdapter.class).getClass(),
|
||||||
|
CDateTimeAdapter.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testClientErrorHandler() {
|
||||||
|
DelegatingErrorHandler handler = createInjector().getInstance(DelegatingErrorHandler.class);
|
||||||
|
assertEquals(handler.getClientErrorHandler().getClass(),
|
||||||
|
CloseContentAndSetExceptionErrorHandler.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testClientRetryHandler() {
|
||||||
|
DelegatingRetryHandler handler = createInjector().getInstance(DelegatingRetryHandler.class);
|
||||||
|
assertEquals(handler.getClientErrorRetryHandler(), HttpRetryHandler.NEVER_RETRY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testRedirectionRetryHandler() {
|
||||||
|
DelegatingRetryHandler handler = createInjector().getInstance(DelegatingRetryHandler.class);
|
||||||
|
assertEquals(handler.getRedirectionRetryHandler().getClass(), RedirectionRetryHandler.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rimuhosting.miro.functions;
|
||||||
|
|
||||||
|
import com.google.inject.Guice;
|
||||||
|
import com.google.inject.Injector;
|
||||||
|
import org.jclouds.http.functions.config.ParserModule;
|
||||||
|
import org.jclouds.util.DateService;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests behavior of {@code ParseStatusesFromJsonResponse}
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Test(groups = "unit", testName = "twitter.ParseStatusesFromJsonResponseTest")
|
||||||
|
public class ParseStatusesFromJsonResponseTest {
|
||||||
|
|
||||||
|
Injector i = Guice.createInjector(new ParserModule() {
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bind(DateTimeAdapter.class).to(CDateTimeAdapter.class);
|
||||||
|
super.configure();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
DateService dateService = new DateService();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,113 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
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.
|
||||||
|
====================================================================
|
||||||
|
|
||||||
|
-->
|
||||||
|
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
For more configuration infromation and examples see the Apache Log4j
|
||||||
|
website: http://logging.apache.org/log4j/
|
||||||
|
-->
|
||||||
|
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
|
||||||
|
debug="false">
|
||||||
|
|
||||||
|
<!-- A time/date based rolling appender -->
|
||||||
|
<appender name="WIREFILE" class="org.apache.log4j.DailyRollingFileAppender">
|
||||||
|
<param name="File" value="target/test-data/jclouds-wire.log" />
|
||||||
|
<param name="Append" value="true" />
|
||||||
|
|
||||||
|
<!-- Rollover at midnight each day -->
|
||||||
|
<param name="DatePattern" value="'.'yyyy-MM-dd" />
|
||||||
|
|
||||||
|
<param name="Threshold" value="TRACE" />
|
||||||
|
|
||||||
|
<layout class="org.apache.log4j.PatternLayout">
|
||||||
|
<!-- The default pattern: Date Priority [Category] Message${symbol_escape}n -->
|
||||||
|
<param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The full pattern: Date MS Priority [Category] (Thread:NDC) Message${symbol_escape}n
|
||||||
|
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x)
|
||||||
|
%m%n"/>
|
||||||
|
-->
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- A time/date based rolling appender -->
|
||||||
|
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
|
||||||
|
<param name="File" value="target/test-data/jclouds.log" />
|
||||||
|
<param name="Append" value="true" />
|
||||||
|
|
||||||
|
<!-- Rollover at midnight each day -->
|
||||||
|
<param name="DatePattern" value="'.'yyyy-MM-dd" />
|
||||||
|
|
||||||
|
<param name="Threshold" value="TRACE" />
|
||||||
|
|
||||||
|
<layout class="org.apache.log4j.PatternLayout">
|
||||||
|
<!-- The default pattern: Date Priority [Category] Message${symbol_escape}n -->
|
||||||
|
<param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The full pattern: Date MS Priority [Category] (Thread:NDC) Message${symbol_escape}n
|
||||||
|
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x)
|
||||||
|
%m%n"/>
|
||||||
|
-->
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
|
||||||
|
<appender-ref ref="FILE" />
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="ASYNCWIRE" class="org.apache.log4j.AsyncAppender">
|
||||||
|
<appender-ref ref="WIREFILE" />
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- ================ -->
|
||||||
|
<!-- Limit categories -->
|
||||||
|
<!-- ================ -->
|
||||||
|
|
||||||
|
<category name="org.jclouds">
|
||||||
|
<priority value="DEBUG" />
|
||||||
|
<appender-ref ref="ASYNC" />
|
||||||
|
</category>
|
||||||
|
|
||||||
|
<category name="jclouds.http.headers">
|
||||||
|
<priority value="DEBUG" />
|
||||||
|
<appender-ref ref="ASYNCWIRE" />
|
||||||
|
</category>
|
||||||
|
|
||||||
|
<category name="jclouds.http.wire">
|
||||||
|
<priority value="DEBUG" />
|
||||||
|
<appender-ref ref="ASYNCWIRE" />
|
||||||
|
</category>
|
||||||
|
|
||||||
|
<!-- ======================= -->
|
||||||
|
<!-- Setup the Root category -->
|
||||||
|
<!-- ======================= -->
|
||||||
|
|
||||||
|
<root>
|
||||||
|
<priority value="WARN" />
|
||||||
|
</root>
|
||||||
|
|
||||||
|
</log4j:configuration>
|
|
@ -0,0 +1,80 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"created_at" : "Sat Oct 31 09:35:27 +0000 2009",
|
||||||
|
"favorited" : false,
|
||||||
|
"geo" : null,
|
||||||
|
"id" : 5310690603,
|
||||||
|
"in_reply_to_screen_name" : null,
|
||||||
|
"in_reply_to_status_id" : null,
|
||||||
|
"in_reply_to_user_id" : null,
|
||||||
|
"source" : "<a href=\"http://www.tweetdeck.com/\" rel=\"nofollow\">TweetDeck</a>",
|
||||||
|
"text" : "RT @jclouds: live multi #cloud demo of jclouds connecting to 3 storage clouds from google appengine http://is.gd/4IXMh",
|
||||||
|
"truncated" : false,
|
||||||
|
"user" : { "created_at" : "Tue Apr 28 15:29:42 +0000 2009",
|
||||||
|
"description" : "Some random guy who seems to care about cloud collisions at siliconANGLE.com",
|
||||||
|
"favourites_count" : 245,
|
||||||
|
"followers_count" : 572,
|
||||||
|
"following" : false,
|
||||||
|
"friends_count" : 325,
|
||||||
|
"geo_enabled" : false,
|
||||||
|
"id" : 36093693,
|
||||||
|
"location" : "San Francisco ",
|
||||||
|
"name" : "James Watters",
|
||||||
|
"notifications" : false,
|
||||||
|
"profile_background_color" : "C6E2EE",
|
||||||
|
"profile_background_image_url" : "http://a1.twimg.com/profile_background_images/24067016/17361976.jpg",
|
||||||
|
"profile_background_tile" : true,
|
||||||
|
"profile_image_url" : "http://a3.twimg.com/profile_images/445071063/tiktaalik-transitional-fossil_normal.png",
|
||||||
|
"profile_link_color" : "1F98C7",
|
||||||
|
"profile_sidebar_border_color" : "C6E2EE",
|
||||||
|
"profile_sidebar_fill_color" : "DAECF4",
|
||||||
|
"profile_text_color" : "663B12",
|
||||||
|
"protected" : false,
|
||||||
|
"screen_name" : "wattersjames",
|
||||||
|
"statuses_count" : 1964,
|
||||||
|
"time_zone" : "Pacific Time (US & Canada)",
|
||||||
|
"url" : "http://siliconangle.net/ver2/author/jwatters/",
|
||||||
|
"utc_offset" : -28800,
|
||||||
|
"verified" : false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"created_at" : "Sat Oct 31 01:45:14 +0000 2009",
|
||||||
|
"favorited" : false,
|
||||||
|
"geo" : null,
|
||||||
|
"id" : 5303839785,
|
||||||
|
"in_reply_to_screen_name" : null,
|
||||||
|
"in_reply_to_status_id" : null,
|
||||||
|
"in_reply_to_user_id" : null,
|
||||||
|
"source" : "<a href=\"http://www.tweetdeck.com/\" rel=\"nofollow\">TweetDeck</a>",
|
||||||
|
"text" : "RT @jclouds: come find out about #cloud storage and how to access it from #java in palo alto this Tuesday: http://is.gd/4IFA9",
|
||||||
|
"truncated" : false,
|
||||||
|
"user" : { "created_at" : "Sat Apr 26 06:13:08 +0000 2008",
|
||||||
|
"description" : "Jack of All Trades: Dad to anZel and Arden, VMware, vCloud, Security, Compliance, Former Developer",
|
||||||
|
"favourites_count" : 0,
|
||||||
|
"followers_count" : 474,
|
||||||
|
"following" : false,
|
||||||
|
"friends_count" : 199,
|
||||||
|
"geo_enabled" : false,
|
||||||
|
"id" : 14540593,
|
||||||
|
"location" : "Bay Area, CA",
|
||||||
|
"name" : "Jian Zhen",
|
||||||
|
"notifications" : false,
|
||||||
|
"profile_background_color" : "C6E2EE",
|
||||||
|
"profile_background_image_url" : "http://s.twimg.com/a/1256778767/images/themes/theme2/bg.gif",
|
||||||
|
"profile_background_tile" : false,
|
||||||
|
"profile_image_url" : "http://a3.twimg.com/profile_images/64445411/30b8b19_bigger_normal.jpg",
|
||||||
|
"profile_link_color" : "1F98C7",
|
||||||
|
"profile_sidebar_border_color" : "C6E2EE",
|
||||||
|
"profile_sidebar_fill_color" : "DAECF4",
|
||||||
|
"profile_text_color" : "663B12",
|
||||||
|
"protected" : false,
|
||||||
|
"screen_name" : "zhenjl",
|
||||||
|
"statuses_count" : 1981,
|
||||||
|
"time_zone" : "Pacific Time (US & Canada)",
|
||||||
|
"url" : "http://zhen.org",
|
||||||
|
"utc_offset" : -28800,
|
||||||
|
"verified" : false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
Loading…
Reference in New Issue