Issue 112: updated vcloud version

git-svn-id: http://jclouds.googlecode.com/svn/trunk@2383 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
adrian.f.cole 2009-12-07 23:52:07 +00:00
parent fc5f675be5
commit de66d187ae
13 changed files with 63 additions and 50 deletions

View File

@ -41,16 +41,13 @@ import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
* @see <a href="https://community.vcloudexpress.terremark.com/en-us/discussion_forums/f/60.aspx" /> * @see <a href="https://community.vcloudexpress.terremark.com/en-us/discussion_forums/f/60.aspx" />
* @author Adrian Cole * @author Adrian Cole
*/ */
@Timeout(duration = 45, timeUnit = TimeUnit.SECONDS) @Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface VCloudClient { public interface VCloudClient {
@Timeout(duration = 90, timeUnit = TimeUnit.SECONDS)
Catalog getCatalog(); Catalog getCatalog();
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
VDC getDefaultVDC(); VDC getDefaultVDC();
@Timeout(duration = 90, timeUnit = TimeUnit.SECONDS)
TasksList getDefaultTasksList(); TasksList getDefaultTasksList();
Task deployVApp(String vAppId); Task deployVApp(String vAppId);

View File

@ -28,13 +28,12 @@ import java.util.concurrent.Future;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.core.MediaType;
import org.jclouds.http.filters.BasicAuthentication; import org.jclouds.http.filters.BasicAuthentication;
import org.jclouds.rest.annotations.Endpoint; import org.jclouds.rest.annotations.Endpoint;
import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.ResponseParser; import org.jclouds.rest.annotations.ResponseParser;
import org.jclouds.rest.domain.NamedLink; import org.jclouds.rest.domain.NamedResource;
import org.jclouds.vcloud.endpoints.Org; import org.jclouds.vcloud.endpoints.Org;
import org.jclouds.vcloud.functions.ParseLoginResponseFromHeaders; import org.jclouds.vcloud.functions.ParseLoginResponseFromHeaders;
@ -54,7 +53,7 @@ public interface VCloudLogin {
String getVCloudToken(); String getVCloudToken();
@Org @Org
Map<String, NamedLink> getOrgs(); Map<String, NamedResource> getOrgs();
} }
/** /**
@ -63,6 +62,6 @@ public interface VCloudLogin {
*/ */
@POST @POST
@ResponseParser(ParseLoginResponseFromHeaders.class) @ResponseParser(ParseLoginResponseFromHeaders.class)
@Consumes(MediaType.APPLICATION_XML) @Consumes(VCloudMediaType.ORGLIST_XML)
Future<VCloudSession> login(); Future<VCloudSession> login();
} }

View File

@ -31,7 +31,26 @@ import javax.ws.rs.core.MediaType;
* @see MediaType * @see MediaType
*/ */
public class VCloudMediaType { public class VCloudMediaType {
/**
* "application/vnd.vmware.vcloud.organizationList+xml"
*/
public final static String VCLOUD_XML = "application/vnd.vmware.vcloud.vcloud+xml";
/**
* "application/vnd.vmware.vcloud.organizationList+xml"
*/
public final static MediaType VCLOUD_XML_TYPE = new MediaType("application",
"vnd.vmware.vcloud.vcloud+xml");
/**
* "application/vnd.vmware.vcloud.organizationList+xml"
*/
public final static String ORGLIST_XML = "application/vnd.vmware.vcloud.organizationList+xml";
/**
* "application/vnd.vmware.vcloud.organizationList+xml"
*/
public final static MediaType ORGLIST_XML_TYPE = new MediaType("application",
"vnd.vmware.vcloud.organizationList+xml");
/** /**
* "application/vnd.vmware.vcloud.org+xml" * "application/vnd.vmware.vcloud.org+xml"
*/ */

View File

@ -30,7 +30,6 @@ import java.util.concurrent.Future;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import org.jclouds.rest.annotations.Endpoint; import org.jclouds.rest.annotations.Endpoint;
import org.jclouds.rest.annotations.XMLResponseParser; import org.jclouds.rest.annotations.XMLResponseParser;
@ -53,6 +52,6 @@ public interface VCloudVersions {
@GET @GET
@XMLResponseParser(SupportedVersionsHandler.class) @XMLResponseParser(SupportedVersionsHandler.class)
@Path("/versions") @Path("/versions")
@Consumes(MediaType.APPLICATION_XML) @Consumes(VCloudMediaType.VCLOUD_XML)
Future<SortedMap<String, URI>> getSupportedVersions(); Future<SortedMap<String, URI>> getSupportedVersions();
} }

View File

@ -101,7 +101,7 @@ public class VCloudDiscoveryRestClientModule extends AbstractModule {
return new ExpirableSupplier<VCloudSession>(new Supplier<VCloudSession>() { return new ExpirableSupplier<VCloudSession>(new Supplier<VCloudSession>() {
public VCloudSession get() { public VCloudSession get() {
try { try {
return login.login().get(45, TimeUnit.SECONDS); return login.login().get(180, TimeUnit.SECONDS);
} catch (Exception e) { } catch (Exception e) {
Utils.<RuntimeException> rethrowIfRuntimeOrSameType(e); Utils.<RuntimeException> rethrowIfRuntimeOrSameType(e);
throw new RuntimeException("Error logging in", e); throw new RuntimeException("Error logging in", e);
@ -123,7 +123,7 @@ public class VCloudDiscoveryRestClientModule extends AbstractModule {
protected URI provideAuthenticationURI(VCloudVersions versionService, protected URI provideAuthenticationURI(VCloudVersions versionService,
@Named(PROPERTY_VCLOUD_VERSION) String version) throws InterruptedException, @Named(PROPERTY_VCLOUD_VERSION) String version) throws InterruptedException,
ExecutionException, TimeoutException { ExecutionException, TimeoutException {
return versionService.getSupportedVersions().get(30, TimeUnit.SECONDS).get(version); return versionService.getSupportedVersions().get(180, TimeUnit.SECONDS).get(version);
} }
@Provides @Provides

View File

@ -109,7 +109,7 @@ public class VCloudRestClientModule extends AbstractModule {
@Singleton @Singleton
protected Organization provideOrganization(VCloudDiscovery discovery) protected Organization provideOrganization(VCloudDiscovery discovery)
throws ExecutionException, TimeoutException, InterruptedException { throws ExecutionException, TimeoutException, InterruptedException {
return discovery.getOrganization().get(90, TimeUnit.SECONDS); return discovery.getOrganization().get(180, TimeUnit.SECONDS);
} }
@Provides @Provides
@ -140,7 +140,7 @@ public class VCloudRestClientModule extends AbstractModule {
@Singleton @Singleton
protected URI provideDefaultNetwork(VCloudAsyncClient client) protected URI provideDefaultNetwork(VCloudAsyncClient client)
throws InterruptedException, ExecutionException, TimeoutException { throws InterruptedException, ExecutionException, TimeoutException {
return client.getDefaultVDC().get(60, TimeUnit.SECONDS) return client.getDefaultVDC().get(180, TimeUnit.SECONDS)
.getAvailableNetworks().values().iterator().next() .getAvailableNetworks().values().iterator().next()
.getLocation(); .getLocation();
} }

View File

@ -38,7 +38,7 @@ import org.jclouds.http.HttpResponse;
import org.jclouds.http.HttpResponseException; import org.jclouds.http.HttpResponseException;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.ParseSax.Factory; import org.jclouds.http.functions.ParseSax.Factory;
import org.jclouds.rest.domain.NamedLink; import org.jclouds.rest.domain.NamedResource;
import org.jclouds.vcloud.VCloudToken; import org.jclouds.vcloud.VCloudToken;
import org.jclouds.vcloud.VCloudLogin.VCloudSession; import org.jclouds.vcloud.VCloudLogin.VCloudSession;
import org.jclouds.vcloud.endpoints.Org; import org.jclouds.vcloud.endpoints.Org;
@ -53,7 +53,7 @@ import com.google.common.base.Function;
*/ */
@Singleton @Singleton
public class ParseLoginResponseFromHeaders implements Function<HttpResponse, VCloudSession> { public class ParseLoginResponseFromHeaders implements Function<HttpResponse, VCloudSession> {
static final Pattern pattern = Pattern.compile("vcloud-token=(.*); path=.*"); static final Pattern pattern = Pattern.compile("vcloud-token=(.*); [Pp]ath=.*");
private final ParseSax.Factory factory; private final ParseSax.Factory factory;
private final Provider<OrgListHandler> orgHandlerProvider; private final Provider<OrgListHandler> orgHandlerProvider;
@ -76,7 +76,7 @@ public class ParseLoginResponseFromHeaders implements Function<HttpResponse, VCl
boolean matchFound = matcher.find(); boolean matchFound = matcher.find();
if (matchFound) { if (matchFound) {
final Map<String, NamedLink> org = factory.create(orgHandlerProvider.get()).parse( final Map<String, NamedResource> org = factory.create(orgHandlerProvider.get()).parse(
from.getContent()); from.getContent());
return new VCloudSession() { return new VCloudSession() {
@ -86,7 +86,7 @@ public class ParseLoginResponseFromHeaders implements Function<HttpResponse, VCl
} }
@Org @Org
public Map<String, NamedLink> getOrgs() { public Map<String, NamedResource> getOrgs() {
return org; return org;
} }
}; };

View File

@ -23,13 +23,13 @@
*/ */
package org.jclouds.vcloud.xml; package org.jclouds.vcloud.xml;
import static org.jclouds.rest.util.Utils.putNamedLink; import static org.jclouds.rest.util.Utils.putNamedResource;
import static org.jclouds.vcloud.VCloudMediaType.ORG_XML; import static org.jclouds.vcloud.VCloudMediaType.ORG_XML;
import java.util.Map; import java.util.Map;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.domain.NamedLink; import org.jclouds.rest.domain.NamedResource;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@ -38,22 +38,23 @@ import com.google.common.collect.Maps;
/** /**
* @author Adrian Cole * @author Adrian Cole
*/ */
public class OrgListHandler extends ParseSax.HandlerWithResult<Map<String, NamedLink>> { public class OrgListHandler extends
ParseSax.HandlerWithResult<Map<String, NamedResource>> {
private Map<String, NamedLink> org = Maps.newHashMap(); private Map<String, NamedResource> org = Maps.newHashMap();
public Map<String, NamedLink> getResult() { public Map<String, NamedResource> getResult() {
return org; return org;
} }
@Override @Override
public void startElement(String uri, String localName, String qName, Attributes attributes) public void startElement(String uri, String localName, String qName,
throws SAXException { Attributes attributes) throws SAXException {
if (qName.equals("Org")) { if (qName.equals("Org")) {
int typeIndex = attributes.getIndex("type"); int typeIndex = attributes.getIndex("type");
if (typeIndex != -1) { if (typeIndex != -1) {
if (attributes.getValue(typeIndex).equals(ORG_XML)) { if (attributes.getValue(typeIndex).equals(ORG_XML)) {
putNamedLink(org, attributes); putNamedResource(org, attributes);
} }
} }
} }

View File

@ -31,7 +31,6 @@ import java.lang.reflect.Method;
import java.net.URI; import java.net.URI;
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import org.jclouds.http.filters.BasicAuthentication; import org.jclouds.http.filters.BasicAuthentication;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
@ -59,7 +58,7 @@ public class VCloudLoginTest extends RestClientTest<VCloudLogin> {
GeneratedHttpRequest<VCloudLogin> httpMethod = processor.createRequest(method); GeneratedHttpRequest<VCloudLogin> httpMethod = processor.createRequest(method);
assertEquals(httpMethod.getRequestLine(), "POST http://localhost:8080/login HTTP/1.1"); assertEquals(httpMethod.getRequestLine(), "POST http://localhost:8080/login HTTP/1.1");
assertHeadersEqual(httpMethod, HttpHeaders.ACCEPT + ": " + MediaType.APPLICATION_XML + "\n"); assertHeadersEqual(httpMethod, HttpHeaders.ACCEPT + ": application/vnd.vmware.vcloud.organizationList+xml\n");
assertEntityEquals(httpMethod, null); assertEntityEquals(httpMethod, null);
assertResponseParserClassEquals(method, httpMethod, ParseLoginResponseFromHeaders.class); assertResponseParserClassEquals(method, httpMethod, ParseLoginResponseFromHeaders.class);

View File

@ -30,7 +30,6 @@ import java.lang.reflect.Method;
import java.net.URI; import java.net.URI;
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
@ -59,7 +58,7 @@ public class VCloudVersionsTest extends RestClientTest<VCloudVersions> {
GeneratedHttpRequest<VCloudVersions> httpMethod = processor.createRequest(method); GeneratedHttpRequest<VCloudVersions> httpMethod = processor.createRequest(method);
assertEquals(httpMethod.getRequestLine(), "GET http://localhost:8080/versions HTTP/1.1"); assertEquals(httpMethod.getRequestLine(), "GET http://localhost:8080/versions HTTP/1.1");
assertHeadersEqual(httpMethod, HttpHeaders.ACCEPT + ": " + MediaType.APPLICATION_XML + "\n"); assertHeadersEqual(httpMethod, HttpHeaders.ACCEPT + ": application/vnd.vmware.vcloud.vcloud+xml\n");
assertEntityEquals(httpMethod, null); assertEntityEquals(httpMethod, null);
assertResponseParserClassEquals(method, httpMethod, ParseSax.class); assertResponseParserClassEquals(method, httpMethod, ParseSax.class);

View File

@ -44,7 +44,7 @@ import org.jclouds.http.handlers.DelegatingErrorHandler;
import org.jclouds.http.handlers.DelegatingRetryHandler; import org.jclouds.http.handlers.DelegatingRetryHandler;
import org.jclouds.http.handlers.RedirectionRetryHandler; import org.jclouds.http.handlers.RedirectionRetryHandler;
import org.jclouds.logging.log4j.config.Log4JLoggingModule; import org.jclouds.logging.log4j.config.Log4JLoggingModule;
import org.jclouds.rest.domain.NamedLink; import org.jclouds.rest.domain.NamedResource;
import org.jclouds.util.Jsr330; import org.jclouds.util.Jsr330;
import org.jclouds.vcloud.VCloudLogin; import org.jclouds.vcloud.VCloudLogin;
import org.jclouds.vcloud.VCloudLogin.VCloudSession; import org.jclouds.vcloud.VCloudLogin.VCloudSession;
@ -109,7 +109,7 @@ public class VCloudDiscoveryRestClientModuleTest {
public VCloudSession get() throws InterruptedException, ExecutionException { public VCloudSession get() throws InterruptedException, ExecutionException {
return new VCloudSession() { return new VCloudSession() {
public Map<String, NamedLink> getOrgs() { public Map<String, NamedResource> getOrgs() {
return null; return null;
} }

View File

@ -31,7 +31,7 @@ import javax.ws.rs.core.HttpHeaders;
import org.jclouds.http.HttpResponse; import org.jclouds.http.HttpResponse;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.rest.domain.internal.NamedLinkImpl; import org.jclouds.rest.internal.NamedResourceImpl;
import org.jclouds.vcloud.VCloudMediaType; import org.jclouds.vcloud.VCloudMediaType;
import org.jclouds.vcloud.VCloudLogin.VCloudSession; import org.jclouds.vcloud.VCloudLogin.VCloudSession;
import org.testng.annotations.BeforeTest; import org.testng.annotations.BeforeTest;
@ -64,7 +64,7 @@ public class ParseLoginResponseFromHeadersTest extends BaseHandlerTest {
"Content-Type: application/xml; charset=utf-8"); "Content-Type: application/xml; charset=utf-8");
VCloudSession reply = parser.apply(response); VCloudSession reply = parser.apply(response);
assertEquals(reply.getVCloudToken(), "9er4d061-4bff-48fa-84b1-5da7166764d2"); assertEquals(reply.getVCloudToken(), "9er4d061-4bff-48fa-84b1-5da7166764d2");
assertEquals(reply.getOrgs(), ImmutableMap.of("adrian@jclouds.org", new NamedLinkImpl( assertEquals(reply.getOrgs(), ImmutableMap.of("adrian@jclouds.org", new NamedResourceImpl("48",
"adrian@jclouds.org", VCloudMediaType.ORG_XML, URI "adrian@jclouds.org", VCloudMediaType.ORG_XML, URI
.create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48")))); .create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48"))));

View File

@ -30,8 +30,8 @@ import java.net.URI;
import java.util.Map; import java.util.Map;
import org.jclouds.http.functions.BaseHandlerTest; import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.rest.domain.NamedLink; import org.jclouds.rest.domain.NamedResource;
import org.jclouds.rest.domain.internal.NamedLinkImpl; import org.jclouds.rest.internal.NamedResourceImpl;
import org.jclouds.vcloud.VCloudMediaType; import org.jclouds.vcloud.VCloudMediaType;
import org.testng.annotations.BeforeTest; import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -55,9 +55,9 @@ public class OrgListHandlerTest extends BaseHandlerTest {
public void testApplyInputStream() { public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/orglist.xml"); InputStream is = getClass().getResourceAsStream("/orglist.xml");
Map<String, NamedLink> result = factory.create(injector.getInstance(OrgListHandler.class)) Map<String, NamedResource> result = factory.create(injector.getInstance(OrgListHandler.class))
.parse(is); .parse(is);
assertEquals(result, ImmutableMap.of("adrian@jclouds.org", new NamedLinkImpl( assertEquals(result, ImmutableMap.of("adrian@jclouds.org", new NamedResourceImpl("48",
"adrian@jclouds.org", VCloudMediaType.ORG_XML, URI "adrian@jclouds.org", VCloudMediaType.ORG_XML, URI
.create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48")))); .create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48"))));
} }