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" />
* @author Adrian Cole
*/
@Timeout(duration = 45, timeUnit = TimeUnit.SECONDS)
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface VCloudClient {
@Timeout(duration = 90, timeUnit = TimeUnit.SECONDS)
Catalog getCatalog();
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
VDC getDefaultVDC();
@Timeout(duration = 90, timeUnit = TimeUnit.SECONDS)
TasksList getDefaultTasksList();
Task deployVApp(String vAppId);

View File

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

View File

@ -31,7 +31,26 @@ import javax.ws.rs.core.MediaType;
* @see MediaType
*/
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"
*/

View File

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

View File

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

View File

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

View File

@ -38,7 +38,7 @@ import org.jclouds.http.HttpResponse;
import org.jclouds.http.HttpResponseException;
import org.jclouds.http.functions.ParseSax;
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.VCloudLogin.VCloudSession;
import org.jclouds.vcloud.endpoints.Org;
@ -53,7 +53,7 @@ import com.google.common.base.Function;
*/
@Singleton
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 Provider<OrgListHandler> orgHandlerProvider;
@ -76,7 +76,7 @@ public class ParseLoginResponseFromHeaders implements Function<HttpResponse, VCl
boolean matchFound = matcher.find();
if (matchFound) {
final Map<String, NamedLink> org = factory.create(orgHandlerProvider.get()).parse(
final Map<String, NamedResource> org = factory.create(orgHandlerProvider.get()).parse(
from.getContent());
return new VCloudSession() {
@ -86,7 +86,7 @@ public class ParseLoginResponseFromHeaders implements Function<HttpResponse, VCl
}
@Org
public Map<String, NamedLink> getOrgs() {
public Map<String, NamedResource> getOrgs() {
return org;
}
};

View File

@ -23,13 +23,13 @@
*/
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 java.util.Map;
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.SAXException;
@ -38,24 +38,25 @@ import com.google.common.collect.Maps;
/**
* @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() {
return org;
}
public Map<String, NamedResource> getResult() {
return org;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equals("Org")) {
int typeIndex = attributes.getIndex("type");
if (typeIndex != -1) {
if (attributes.getValue(typeIndex).equals(ORG_XML)) {
putNamedLink(org, attributes);
}
}
}
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (qName.equals("Org")) {
int typeIndex = attributes.getIndex("type");
if (typeIndex != -1) {
if (attributes.getValue(typeIndex).equals(ORG_XML)) {
putNamedResource(org, attributes);
}
}
}
}
}

View File

@ -31,7 +31,6 @@ import java.lang.reflect.Method;
import java.net.URI;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import org.jclouds.http.filters.BasicAuthentication;
import org.jclouds.logging.Logger;
@ -59,7 +58,7 @@ public class VCloudLoginTest extends RestClientTest<VCloudLogin> {
GeneratedHttpRequest<VCloudLogin> httpMethod = processor.createRequest(method);
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);
assertResponseParserClassEquals(method, httpMethod, ParseLoginResponseFromHeaders.class);

View File

@ -30,7 +30,6 @@ import java.lang.reflect.Method;
import java.net.URI;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger;
@ -59,7 +58,7 @@ public class VCloudVersionsTest extends RestClientTest<VCloudVersions> {
GeneratedHttpRequest<VCloudVersions> httpMethod = processor.createRequest(method);
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);
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.RedirectionRetryHandler;
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.vcloud.VCloudLogin;
import org.jclouds.vcloud.VCloudLogin.VCloudSession;
@ -109,7 +109,7 @@ public class VCloudDiscoveryRestClientModuleTest {
public VCloudSession get() throws InterruptedException, ExecutionException {
return new VCloudSession() {
public Map<String, NamedLink> getOrgs() {
public Map<String, NamedResource> getOrgs() {
return null;
}

View File

@ -31,7 +31,7 @@ import javax.ws.rs.core.HttpHeaders;
import org.jclouds.http.HttpResponse;
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.VCloudLogin.VCloudSession;
import org.testng.annotations.BeforeTest;
@ -64,7 +64,7 @@ public class ParseLoginResponseFromHeadersTest extends BaseHandlerTest {
"Content-Type: application/xml; charset=utf-8");
VCloudSession reply = parser.apply(response);
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
.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 org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.rest.domain.NamedLink;
import org.jclouds.rest.domain.internal.NamedLinkImpl;
import org.jclouds.rest.domain.NamedResource;
import org.jclouds.rest.internal.NamedResourceImpl;
import org.jclouds.vcloud.VCloudMediaType;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
@ -55,9 +55,9 @@ public class OrgListHandlerTest extends BaseHandlerTest {
public void testApplyInputStream() {
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);
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
.create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48"))));
}