JCLOUDS-40 unasync vcloud-director
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/d7bc430c Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/d7bc430c Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/d7bc430c Branch: refs/heads/master Commit: d7bc430c6d8d66f0c91818f074bef6bba8846b8d Parents: 0cbcf18 Author: Adrian Cole <[email protected]> Authored: Sun Oct 5 12:53:06 2014 -0700 Committer: Adrian Cole <[email protected]> Committed: Sun Oct 5 13:15:09 2014 -0700 ---------------------------------------------------------------------- .../v1_5/VCloudDirectorApiMetadata.java | 22 +- .../director/v1_5/VCloudDirectorConstants.java | 34 - .../director/v1_5/VCloudDirectorContext.java | 10 +- .../v1_5/admin/VCloudDirectorAdminApi.java | 8 +- .../v1_5/admin/VCloudDirectorAdminAsyncApi.java | 101 -- .../config/VCloudDirectorHttpApiModule.java | 158 +++ .../config/VCloudDirectorRestClientModule.java | 232 ----- .../director/v1_5/features/CatalogApi.java | 102 +- .../director/v1_5/features/CatalogAsyncApi.java | 143 --- .../vcloud/director/v1_5/features/MediaApi.java | 99 +- .../director/v1_5/features/MediaAsyncApi.java | 155 --- .../director/v1_5/features/MetadataApi.java | 63 +- .../v1_5/features/MetadataAsyncApi.java | 102 -- .../director/v1_5/features/NetworkApi.java | 29 +- .../director/v1_5/features/NetworkAsyncApi.java | 58 -- .../vcloud/director/v1_5/features/OrgApi.java | 34 +- .../director/v1_5/features/OrgAsyncApi.java | 69 -- .../vcloud/director/v1_5/features/QueryApi.java | 143 +-- .../director/v1_5/features/QueryAsyncApi.java | 192 ---- .../vcloud/director/v1_5/features/TaskApi.java | 53 +- .../director/v1_5/features/TaskAsyncApi.java | 88 -- .../director/v1_5/features/UploadApi.java | 18 +- .../director/v1_5/features/UploadAsyncApi.java | 41 - .../vcloud/director/v1_5/features/VAppApi.java | 778 +++++++++++---- .../director/v1_5/features/VAppAsyncApi.java | 624 ------------ .../director/v1_5/features/VAppTemplateApi.java | 268 ++++- .../v1_5/features/VAppTemplateAsyncApi.java | 363 ------- .../vcloud/director/v1_5/features/VdcApi.java | 187 +++- .../director/v1_5/features/VdcAsyncApi.java | 252 ----- .../vcloud/director/v1_5/features/VmApi.java | 747 +++++++++++--- .../director/v1_5/features/VmAsyncApi.java | 974 ------------------- .../v1_5/features/admin/AdminCatalogApi.java | 162 ++- .../features/admin/AdminCatalogAsyncApi.java | 238 ----- .../v1_5/features/admin/AdminNetworkApi.java | 65 +- .../features/admin/AdminNetworkAsyncApi.java | 108 -- .../v1_5/features/admin/AdminOrgApi.java | 247 ++++- .../v1_5/features/admin/AdminOrgAsyncApi.java | 355 ------- .../v1_5/features/admin/AdminQueryApi.java | 89 +- .../v1_5/features/admin/AdminQueryAsyncApi.java | 132 --- .../v1_5/features/admin/AdminVdcApi.java | 85 +- .../v1_5/features/admin/AdminVdcAsyncApi.java | 137 --- .../director/v1_5/features/admin/GroupApi.java | 86 +- .../v1_5/features/admin/GroupAsyncApi.java | 123 --- .../director/v1_5/features/admin/UserApi.java | 91 +- .../v1_5/features/admin/UserAsyncApi.java | 142 --- .../internal/VCloudDirectorContextImpl.java | 18 +- .../vcloud/director/v1_5/login/SessionApi.java | 49 +- .../director/v1_5/login/SessionAsyncApi.java | 75 -- .../director/v1_5/user/VCloudDirectorApi.java | 29 +- .../v1_5/user/VCloudDirectorAsyncApi.java | 150 --- .../v1_5/VCloudDirectorApiMetadataTest.java | 4 +- .../internal/BaseVCloudDirectorApiLiveTest.java | 11 +- .../BaseVCloudDirectorRestApiExpectTest.java | 23 - .../v1_5/login/SessionApiExpectTest.java | 9 +- .../director/v1_5/login/SessionApiLiveTest.java | 12 +- 55 files changed, 2834 insertions(+), 5753 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java index bf8ce70..d1759a5 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorApiMetadata.java @@ -26,20 +26,12 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.PROPERTY_ import java.net.URI; import java.util.Properties; -import org.jclouds.rest.internal.BaseRestApiMetadata; -import org.jclouds.vcloud.director.v1_5.config.VCloudDirectorRestClientModule; +import org.jclouds.rest.internal.BaseHttpApiMetadata; +import org.jclouds.vcloud.director.v1_5.config.VCloudDirectorHttpApiModule; import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi; -import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi; -import com.google.common.reflect.TypeToken; +public class VCloudDirectorApiMetadata extends BaseHttpApiMetadata { -/** - * Implementation of {@link ApiMetadata} for VCloudDirector 1.5 API - */ -public class VCloudDirectorApiMetadata extends BaseRestApiMetadata { - - public static final TypeToken<VCloudDirectorContext> CONTEXT_TOKEN = typeToken(VCloudDirectorContext.class); - @Override public Builder toBuilder() { return new Builder().fromApiMetadata(this); @@ -54,7 +46,7 @@ public class VCloudDirectorApiMetadata extends BaseRestApiMetadata { } public static Properties defaultProperties() { - Properties properties = BaseRestApiMetadata.defaultProperties(); + Properties properties = BaseHttpApiMetadata.defaultProperties(); /** FIXME this should not be the default */ properties.setProperty(PROPERTY_SESSION_INTERVAL, Integer.toString(30 * 60)); @@ -70,10 +62,10 @@ public class VCloudDirectorApiMetadata extends BaseRestApiMetadata { return properties; } - public static class Builder extends BaseRestApiMetadata.Builder<Builder> { + public static class Builder extends BaseHttpApiMetadata.Builder<VCloudDirectorApi, Builder> { protected Builder() { - super(VCloudDirectorApi.class, VCloudDirectorAsyncApi.class); + super(VCloudDirectorApi.class); id("vcloud-director") .name("vCloud Director 1.5 API") .identityName("User at Organization (user@org)") @@ -82,7 +74,7 @@ public class VCloudDirectorApiMetadata extends BaseRestApiMetadata { .version("1.5") .defaultProperties(VCloudDirectorApiMetadata.defaultProperties()) .context(typeToken(VCloudDirectorContext.class)) - .defaultModule(VCloudDirectorRestClientModule.class); + .defaultModule(VCloudDirectorHttpApiModule.class); } @Override http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java index df72510..a8bb741 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorConstants.java @@ -16,12 +16,6 @@ */ package org.jclouds.vcloud.director.v1_5; -import org.jclouds.rest.RestContext; -import org.jclouds.vcloud.director.v1_5.login.SessionAsyncApi; -import org.jclouds.vcloud.director.v1_5.login.SessionApi; - -import com.google.common.reflect.TypeToken; - /** * Constants used by VCloudDirector apis */ @@ -37,40 +31,12 @@ public final class VCloudDirectorConstants { public static final String PROPERTY_VCLOUD_DIRECTOR_VERSION_SCHEMA = "jclouds.vcloud-director.version.schema"; - /** Name of the default org that your vApp will join, if an org isn't explicitly specified. */ - public static final String PROPERTY_VCLOUD_DIRECTOR_DEFAULT_ORG = "jclouds.vcloud-director.defaults.org"; - - /** Name of the default catalog to query, if it isn't explicitly specified. */ - public static final String PROPERTY_VCLOUD_DIRECTOR_DEFAULT_CATALOG = "jclouds.vcloud-director.defaults.catalog"; - - /** Name of the VDC that your vApp will join, if a vDC isn't explicitly specified. */ - public static final String PROPERTY_VCLOUD_DIRECTOR_DEFAULT_VDC = "jclouds.vcloud-director.defaults.vdc"; - - /** Name of the default network, in the default VDC that your vApp will join. */ - public static final String PROPERTY_VCLOUD_DIRECTOR_DEFAULT_NETWORK = "jclouds.vcloud-director.defaults.network"; - - /** TODO javadoc */ - // public static final String PROPERTY_VCLOUD_DEFAULT_FENCEMODE = "jclouds.vcloud-director.defaults.fencemode"; - /** TODO javadoc */ public static final String PROPERTY_VCLOUD_DIRECTOR_XML_NAMESPACE = "jclouds.vcloud-director.xml.ns"; /** TODO javadoc */ public static final String PROPERTY_VCLOUD_DIRECTOR_XML_SCHEMA = "jclouds.vcloud-director.xml.schema"; - // TODO put these somewhere else, maybe core? - - /** TODO javadoc */ - public static final String PROPERTY_DNS_NAME_LEN_MIN = "jclouds.dns_name_length_min"; - - /** TODO javadoc */ - public static final String PROPERTY_NS_NAME_LEN_MAX = "jclouds.dns_name_length_max"; - - /** TODO javadoc */ - public static final TypeToken<RestContext<SessionApi, SessionAsyncApi>> SESSION_CONTEXT_TYPE = - new TypeToken<RestContext<SessionApi, SessionAsyncApi>>() { - }; - private VCloudDirectorConstants() { throw new AssertionError("intentionally unimplemented"); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java index ea81039..8718bd2 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorContext.java @@ -16,17 +16,15 @@ */ package org.jclouds.vcloud.director.v1_5; -import org.jclouds.rest.RestContext; -import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi; +import org.jclouds.rest.ApiContext; import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi; import org.jclouds.vcloud.director.v1_5.internal.VCloudDirectorContextImpl; -import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi; import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi; import com.google.inject.ImplementedBy; @ImplementedBy(VCloudDirectorContextImpl.class) -public interface VCloudDirectorContext extends RestContext<VCloudDirectorApi, VCloudDirectorAsyncApi> { - - RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi> getAdminContext(); +public interface VCloudDirectorContext extends ApiContext<VCloudDirectorApi> { + + ApiContext<VCloudDirectorAdminApi> getAdminContext(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java index bd3e308..96641cc 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminApi.java @@ -20,6 +20,7 @@ import java.net.URI; import org.jclouds.rest.annotations.Delegate; import org.jclouds.rest.annotations.EndpointParam; +import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.vcloud.director.v1_5.features.MetadataApi; import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogApi; import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkApi; @@ -28,14 +29,11 @@ import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryApi; import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcApi; import org.jclouds.vcloud.director.v1_5.features.admin.GroupApi; import org.jclouds.vcloud.director.v1_5.features.admin.UserApi; +import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref; import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi; -/** - * Provides synchronous access to VCloudDirector Admin. - * - * @see VCloudDirectorAsyncApi - */ +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface VCloudDirectorAdminApi extends VCloudDirectorApi { /** * @return asynchronous access to admin query features http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java deleted file mode 100644 index c55c851..0000000 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/admin/VCloudDirectorAdminAsyncApi.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.vcloud.director.v1_5.admin; - -import java.net.URI; - -import org.jclouds.rest.annotations.Delegate; -import org.jclouds.rest.annotations.EndpointParam; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.GroupAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.UserAsyncApi; -import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; -import org.jclouds.vcloud.director.v1_5.functions.URNToAdminHref; -import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi; - -/** - * Provides asynchronous access to VCloudDirector Admin via their REST API. - * - * @see VCloudDirectorAdminApi - */ -@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) -public interface VCloudDirectorAdminAsyncApi extends VCloudDirectorAsyncApi { - /** - * @return asynchronous access to admin query features - */ - @Override - @Delegate - AdminQueryAsyncApi getQueryApi(); - - - /** - * @return asynchronous access to {@link Catalog} admin features - */ - @Override - @Delegate - AdminCatalogAsyncApi getCatalogApi(); - - /** - * @return asynchronous access to admin {@link Group} features - */ - @Delegate - GroupAsyncApi getGroupApi(); - - /** - * @return asynchronous access to {@link AdminOrg} features - */ - @Override - @Delegate - AdminOrgAsyncApi getOrgApi(); - - /** - * @return asynchronous access to {@link User} features - */ - @Delegate - UserAsyncApi getUserApi(); - - /** - * @return asynchronous access to {@link AdminVdc} features - */ - @Override - @Delegate - AdminVdcAsyncApi getVdcApi(); - - /** - * @return asynchronous access to admin {@link Network} features - */ - @Override - @Delegate - AdminNetworkAsyncApi getNetworkApi(); - - /** - * @return asynchronous access to {@link Metadata} features - */ - @Override - @Delegate - MetadataAsyncApi getMetadataApi(@EndpointParam(parser = URNToAdminHref.class) String urn); - - @Override - @Delegate - MetadataAsyncApi getMetadataApi(@EndpointParam URI href); -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorHttpApiModule.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorHttpApiModule.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorHttpApiModule.java new file mode 100644 index 0000000..c78d68e --- /dev/null +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorHttpApiModule.java @@ -0,0 +1,158 @@ +/* + * 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.vcloud.director.v1_5.config; + +import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL; +import static org.jclouds.rest.config.BinderUtils.bindHttpApi; + +import java.net.URI; +import java.util.concurrent.TimeUnit; + +import org.jclouds.domain.Credentials; +import org.jclouds.http.HttpErrorHandler; +import org.jclouds.http.HttpRetryHandler; +import org.jclouds.http.annotation.ClientError; +import org.jclouds.http.annotation.Redirection; +import org.jclouds.http.annotation.ServerError; +import org.jclouds.location.Provider; +import org.jclouds.rest.ApiContext; +import org.jclouds.rest.ConfiguresHttpApi; +import org.jclouds.rest.config.HttpApiModule; +import org.jclouds.rest.internal.ApiContextImpl; +import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi; +import org.jclouds.vcloud.director.v1_5.annotations.Login; +import org.jclouds.vcloud.director.v1_5.domain.Entity; +import org.jclouds.vcloud.director.v1_5.domain.Session; +import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken; +import org.jclouds.vcloud.director.v1_5.features.OrgApi; +import org.jclouds.vcloud.director.v1_5.features.TaskApi; +import org.jclouds.vcloud.director.v1_5.features.VAppApi; +import org.jclouds.vcloud.director.v1_5.features.VmApi; +import org.jclouds.vcloud.director.v1_5.handlers.InvalidateSessionAndRetryOn401AndLogoutOnClose; +import org.jclouds.vcloud.director.v1_5.handlers.VCloudDirectorErrorHandler; +import org.jclouds.vcloud.director.v1_5.loaders.LoginUserInOrgWithPassword; +import org.jclouds.vcloud.director.v1_5.loaders.ResolveEntity; +import org.jclouds.vcloud.director.v1_5.login.SessionApi; +import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi; + +import com.google.common.base.Function; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.LoadingCache; +import com.google.inject.Provides; +import com.google.inject.Singleton; +import com.google.inject.TypeLiteral; +import com.google.inject.name.Named; + +@ConfiguresHttpApi +public class VCloudDirectorHttpApiModule extends HttpApiModule<VCloudDirectorApi> { + @Override + protected void configure() { + bind(new TypeLiteral<ApiContext<VCloudDirectorAdminApi>>() { + }).to(new TypeLiteral<ApiContextImpl<VCloudDirectorAdminApi>>() { + }); + + // Bind apis that are used directly in Functions, Predicates and other circumstances + bindHttpApi(binder(), OrgApi.class); + bindHttpApi(binder(), SessionApi.class); + bindHttpApi(binder(), TaskApi.class); + bindHttpApi(binder(), VAppApi.class); + bindHttpApi(binder(), VmApi.class); + + bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(InvalidateSessionAndRetryOn401AndLogoutOnClose.class); + + super.configure(); + bindHttpApi(binder(), VCloudDirectorAdminApi.class); + } + + @Override + protected void bindErrorHandlers() { + bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(VCloudDirectorErrorHandler.class); + bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(VCloudDirectorErrorHandler.class); + bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(VCloudDirectorErrorHandler.class); + } + + @Provides + @Login + protected Supplier<URI> loginUrl(@Provider Supplier<URI> provider) { + // TODO: technically, we should implement version api, but this will work + return Suppliers.compose(new Function<URI, URI>() { + + @Override + public URI apply(URI arg0) { + return URI.create(arg0.toASCIIString() + "/sessions"); + } + + }, provider); + } + + @Provides + protected Supplier<Session> currentSession(Supplier<SessionWithToken> in) { + return Suppliers.compose(new Function<SessionWithToken, Session>() { + + @Override + public Session apply(SessionWithToken arg0) { + return arg0.getSession(); + } + + }, in); + + } + + @Provides + @Singleton + @org.jclouds.vcloud.director.v1_5.annotations.Session + protected Supplier<String> sessionToken(Supplier<SessionWithToken> in) { + return Suppliers.compose(new Function<SessionWithToken, String>() { + + @Override + public String apply(SessionWithToken arg0) { + return arg0.getToken(); + } + + }, in); + + } + + @Provides + @Singleton + LoadingCache<String, Entity> resolveEntityCache(ResolveEntity loader, @Named(PROPERTY_SESSION_INTERVAL) int seconds) { + return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(loader); + } + + @Provides + @Singleton + LoadingCache<Credentials, SessionWithToken> provideSessionWithTokenCache(LoginUserInOrgWithPassword loader, + @Named(PROPERTY_SESSION_INTERVAL) int seconds) { + return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(loader); + } + + // Temporary conversion of a cache to a supplier until there is a single-element cache + // http://code.google.com/p/guava-libraries/issues/detail?id=872 + @Provides + @Singleton + protected Supplier<SessionWithToken> provideSessionWithTokenSupplier( + final LoadingCache<Credentials, SessionWithToken> cache, @Provider final Supplier<Credentials> creds) { + return new Supplier<SessionWithToken>() { + @Override + public SessionWithToken get() { + return cache.getUnchecked(creds.get()); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java deleted file mode 100644 index c2447a9..0000000 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/config/VCloudDirectorRestClientModule.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.vcloud.director.v1_5.config; - -import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL; -import static org.jclouds.rest.config.BinderUtils.bindSyncToAsyncHttpApi; - -import java.net.URI; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -import org.jclouds.domain.Credentials; -import org.jclouds.http.HttpErrorHandler; -import org.jclouds.http.HttpRetryHandler; -import org.jclouds.http.annotation.ClientError; -import org.jclouds.http.annotation.Redirection; -import org.jclouds.http.annotation.ServerError; -import org.jclouds.location.Provider; -import org.jclouds.rest.ConfiguresRestClient; -import org.jclouds.rest.RestContext; -import org.jclouds.rest.config.RestClientModule; -import org.jclouds.rest.internal.RestContextImpl; -import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminApi; -import org.jclouds.vcloud.director.v1_5.admin.VCloudDirectorAdminAsyncApi; -import org.jclouds.vcloud.director.v1_5.annotations.Login; -import org.jclouds.vcloud.director.v1_5.domain.Entity; -import org.jclouds.vcloud.director.v1_5.domain.Session; -import org.jclouds.vcloud.director.v1_5.domain.SessionWithToken; -import org.jclouds.vcloud.director.v1_5.features.CatalogApi; -import org.jclouds.vcloud.director.v1_5.features.CatalogAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.MediaApi; -import org.jclouds.vcloud.director.v1_5.features.MediaAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.MetadataApi; -import org.jclouds.vcloud.director.v1_5.features.MetadataAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.NetworkApi; -import org.jclouds.vcloud.director.v1_5.features.NetworkAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.OrgApi; -import org.jclouds.vcloud.director.v1_5.features.OrgAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.QueryApi; -import org.jclouds.vcloud.director.v1_5.features.QueryAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.TaskApi; -import org.jclouds.vcloud.director.v1_5.features.TaskAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.UploadApi; -import org.jclouds.vcloud.director.v1_5.features.UploadAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.VAppApi; -import org.jclouds.vcloud.director.v1_5.features.VAppAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.VAppTemplateApi; -import org.jclouds.vcloud.director.v1_5.features.VAppTemplateAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.VdcApi; -import org.jclouds.vcloud.director.v1_5.features.VdcAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.VmApi; -import org.jclouds.vcloud.director.v1_5.features.VmAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminCatalogAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminNetworkAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminOrgAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminQueryAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcApi; -import org.jclouds.vcloud.director.v1_5.features.admin.AdminVdcAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.GroupApi; -import org.jclouds.vcloud.director.v1_5.features.admin.GroupAsyncApi; -import org.jclouds.vcloud.director.v1_5.features.admin.UserApi; -import org.jclouds.vcloud.director.v1_5.features.admin.UserAsyncApi; -import org.jclouds.vcloud.director.v1_5.handlers.InvalidateSessionAndRetryOn401AndLogoutOnClose; -import org.jclouds.vcloud.director.v1_5.handlers.VCloudDirectorErrorHandler; -import org.jclouds.vcloud.director.v1_5.loaders.LoginUserInOrgWithPassword; -import org.jclouds.vcloud.director.v1_5.loaders.ResolveEntity; -import org.jclouds.vcloud.director.v1_5.login.SessionApi; -import org.jclouds.vcloud.director.v1_5.login.SessionAsyncApi; -import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorApi; -import org.jclouds.vcloud.director.v1_5.user.VCloudDirectorAsyncApi; - -import com.google.common.base.Function; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableMap; -import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.TypeLiteral; -import com.google.inject.name.Named; - -/** - * Configures the cloudstack connection. - */ -@ConfiguresRestClient -public class VCloudDirectorRestClientModule extends RestClientModule<VCloudDirectorApi, VCloudDirectorAsyncApi> { - - public static final Map<Class<?>, Class<?>> USER_DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>>builder() - .put(CatalogApi.class, CatalogAsyncApi.class) - .put(MediaApi.class, MediaAsyncApi.class) - .put(MetadataApi.class, MetadataAsyncApi.class) - .put(NetworkApi.class, NetworkAsyncApi.class) - .put(OrgApi.class, OrgAsyncApi.class) - .put(QueryApi.class, QueryAsyncApi.class) - .put(TaskApi.class, TaskAsyncApi.class) - .put(UploadApi.class, UploadAsyncApi.class) - .put(VAppApi.class, VAppAsyncApi.class) - .put(VAppTemplateApi.class, VAppTemplateAsyncApi.class) - .put(VdcApi.class, VdcAsyncApi.class) - .put(VmApi.class, VmAsyncApi.class) - .build(); - - public static final Map<Class<?>, Class<?>> ADMIN_DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>>builder() - .putAll(USER_DELEGATE_MAP) - .put(AdminCatalogApi.class, AdminCatalogAsyncApi.class) - .put(AdminNetworkApi.class, AdminNetworkAsyncApi.class) - .put(AdminOrgApi.class, AdminOrgAsyncApi.class) - .put(AdminQueryApi.class, AdminQueryAsyncApi.class) - .put(AdminVdcApi.class, AdminVdcAsyncApi.class) - .put(GroupApi.class, GroupAsyncApi.class) - .put(UserApi.class, UserAsyncApi.class) - .build(); - - public VCloudDirectorRestClientModule() { - super(ADMIN_DELEGATE_MAP); - } - - @Override - protected void configure() { - bind(new TypeLiteral<RestContext<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi>>() { - }).to(new TypeLiteral<RestContextImpl<VCloudDirectorAdminApi, VCloudDirectorAdminAsyncApi>>() { - }); - - // Bind apis that are used directly in Functions, Predicates and other circumstances - bindSyncToAsyncHttpApi(binder(), OrgApi.class, OrgAsyncApi.class); - bindSyncToAsyncHttpApi(binder(), SessionApi.class, SessionAsyncApi.class); - bindSyncToAsyncHttpApi(binder(), TaskApi.class, TaskAsyncApi.class); - bindSyncToAsyncHttpApi(binder(), VAppApi.class, VAppAsyncApi.class); - bindSyncToAsyncHttpApi(binder(), VmApi.class, VmAsyncApi.class); - - bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(InvalidateSessionAndRetryOn401AndLogoutOnClose.class); - - super.configure(); - bindSyncToAsyncHttpApi(binder(), VCloudDirectorAdminApi.class, VCloudDirectorAdminAsyncApi.class); - - } - - @Override - protected void bindErrorHandlers() { - bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(VCloudDirectorErrorHandler.class); - bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(VCloudDirectorErrorHandler.class); - bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(VCloudDirectorErrorHandler.class); - } - - @Provides - @Login - protected Supplier<URI> loginUrl(@Provider Supplier<URI> provider) { - // TODO: technically, we should implement version api, but this will work - return Suppliers.compose(new Function<URI, URI>() { - - @Override - public URI apply(URI arg0) { - return URI.create(arg0.toASCIIString() + "/sessions"); - } - - }, provider); - } - - @Provides - protected Supplier<Session> currentSession(Supplier<SessionWithToken> in) { - return Suppliers.compose(new Function<SessionWithToken, Session>() { - - @Override - public Session apply(SessionWithToken arg0) { - return arg0.getSession(); - } - - }, in); - - } - - @Provides - @Singleton - @org.jclouds.vcloud.director.v1_5.annotations.Session - protected Supplier<String> sessionToken(Supplier<SessionWithToken> in) { - return Suppliers.compose(new Function<SessionWithToken, String>() { - - @Override - public String apply(SessionWithToken arg0) { - return arg0.getToken(); - } - - }, in); - - } - - @Provides - @Singleton - LoadingCache<String, Entity> resolveEntityCache(ResolveEntity loader, @Named(PROPERTY_SESSION_INTERVAL) int seconds) { - return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(loader); - } - - @Provides - @Singleton - LoadingCache<Credentials, SessionWithToken> provideSessionWithTokenCache(LoginUserInOrgWithPassword loader, - @Named(PROPERTY_SESSION_INTERVAL) int seconds) { - return CacheBuilder.newBuilder().expireAfterWrite(seconds, TimeUnit.SECONDS).build(loader); - } - - // Temporary conversion of a cache to a supplier until there is a single-element cache - // http://code.google.com/p/guava-libraries/issues/detail?id=872 - @Provides - @Singleton - protected Supplier<SessionWithToken> provideSessionWithTokenSupplier( - final LoadingCache<Credentials, SessionWithToken> cache, @Provider final Supplier<Credentials> creds) { - return new Supplier<SessionWithToken>() { - @Override - public SessionWithToken get() { - return cache.getUnchecked(creds.get()); - } - }; - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java index 9dfe1d7..004193c 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogApi.java @@ -16,16 +16,31 @@ */ package org.jclouds.vcloud.director.v1_5.features; +import static org.jclouds.Fallbacks.NullOnNotFoundOr404; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CATALOG_ITEM; + import java.net.URI; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +import org.jclouds.rest.annotations.BinderParam; +import org.jclouds.rest.annotations.EndpointParam; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.JAXBResponseParser; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.binders.BindToXMLPayload; import org.jclouds.vcloud.director.v1_5.domain.Catalog; import org.jclouds.vcloud.director.v1_5.domain.CatalogItem; +import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; +import org.jclouds.vcloud.director.v1_5.functions.URNToHref; -/** - * Provides synchronous access to {@link Catalog} objects. - * - * @see CatalogAsyncApi - */ +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface CatalogApi { /** @@ -35,13 +50,21 @@ public interface CatalogApi { * GET /catalog/{id} * </pre> * - * @param catalogUri + * @param catalogUrn * the reference for the catalog * @return a catalog */ - Catalog get(String catalogUrn); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Catalog get(@EndpointParam(parser = URNToHref.class) String catalogUrn); - Catalog get(URI catalogHref); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Catalog get(@EndpointParam URI catalogHref); /** * Creates a catalog item in a catalog. @@ -50,15 +73,26 @@ public interface CatalogApi { * POST /catalog/{id}/catalogItems * </pre> * - * @param catalogUri + * @param catalogUrn * the URI of the catalog - * @param item + * @param catalogItem * the catalog item to add - * @return the addd catalog item + * @return the added catalog item */ - CatalogItem addItem(String catalogUrn, CatalogItem item); + @POST + @Path("/catalogItems") + @Consumes(CATALOG_ITEM) + @Produces(CATALOG_ITEM) + @JAXBResponseParser + CatalogItem addItem(@EndpointParam(parser = URNToHref.class) String catalogUrn, + @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem); - CatalogItem addItem(URI catalogHref, CatalogItem item); + @POST + @Path("/catalogItems") + @Consumes(CATALOG_ITEM) + @Produces(CATALOG_ITEM) + @JAXBResponseParser + CatalogItem addItem(@EndpointParam URI catalogHref, @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem); /** * Retrieves a catalog item. @@ -67,13 +101,21 @@ public interface CatalogApi { * GET /catalogItem/{id} * </pre> * - * @param catalogItemRef + * @param catalogItemUrn * the reference for the catalog item * @return the catalog item */ - CatalogItem getItem(String catalogItemUrn); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + CatalogItem getItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn); - CatalogItem getItem(URI catalogItemHref); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + CatalogItem getItem(@EndpointParam URI catalogItemHref); /** * Modifies a catalog item. @@ -82,15 +124,25 @@ public interface CatalogApi { * PUT /catalogItem/{id} * </pre> * - * @param catalogItemRef + * @param catalogItemUrn * the reference for the catalog item * @param catalogItem * the catalog item * @return the edited catalog item */ - CatalogItem editItem(String catalogItemUrn, CatalogItem catalogItem); + @PUT + @Consumes(CATALOG_ITEM) + @Produces(CATALOG_ITEM) + @JAXBResponseParser + CatalogItem editItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn, + @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem); - CatalogItem editItem(URI catalogItemHref, CatalogItem catalogItem); + @PUT + @Consumes(CATALOG_ITEM) + @Produces(CATALOG_ITEM) + @JAXBResponseParser + CatalogItem editItem(@EndpointParam URI catalogItemHref, + @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem); /** * Deletes a catalog item. @@ -99,10 +151,16 @@ public interface CatalogApi { * DELETE /catalogItem/{id} * </pre> * - * @param catalogItemRef + * @param catalogItemUrn * the reference for the catalog item */ - void removeItem(String catalogItemUrn); + @DELETE + @Consumes + @JAXBResponseParser + void removeItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn); - void removeItem(URI catalogItemHref); + @DELETE + @Consumes + @JAXBResponseParser + void removeItem(@EndpointParam URI catalogItemHref); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java deleted file mode 100644 index 5f518a3..0000000 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncApi.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.vcloud.director.v1_5.features; - -import java.net.URI; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - -import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.rest.annotations.BinderParam; -import org.jclouds.rest.annotations.EndpointParam; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.JAXBResponseParser; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.rest.binders.BindToXMLPayload; -import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; -import org.jclouds.vcloud.director.v1_5.domain.Catalog; -import org.jclouds.vcloud.director.v1_5.domain.CatalogItem; -import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; -import org.jclouds.vcloud.director.v1_5.functions.URNToHref; - -import com.google.common.util.concurrent.ListenableFuture; - -/** - * @see CatalogApi - */ -@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) -public interface CatalogAsyncApi { - - /** - * @see CatalogApi#get(String) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<? extends Catalog> get(@EndpointParam(parser = URNToHref.class) String catalogUrn); - - /** - * @see CatalogApi#addItem(String, CatalogItem) - */ - @POST - @Path("/catalogItems") - @Consumes(VCloudDirectorMediaType.CATALOG_ITEM) - @Produces(VCloudDirectorMediaType.CATALOG_ITEM) - @JAXBResponseParser - ListenableFuture<CatalogItem> addItem(@EndpointParam(parser = URNToHref.class) String catalogUrn, - @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem); - - /** - * @see CatalogApi#getItem(String) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<CatalogItem> getItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn); - - /** - * @see CatalogApi#editItem(String, CatalogItem) - */ - @PUT - @Consumes(VCloudDirectorMediaType.CATALOG_ITEM) - @Produces(VCloudDirectorMediaType.CATALOG_ITEM) - @JAXBResponseParser - ListenableFuture<CatalogItem> editItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn, - @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem); - - /** - * @see CatalogApi#removeItem(String) - */ - @DELETE - @Consumes - @JAXBResponseParser - ListenableFuture<Void> removeItem(@EndpointParam(parser = URNToHref.class) String catalogItemUrn); - - /** - * @see CatalogApi#get(URI) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<? extends Catalog> get(@EndpointParam URI catalogHref); - - /** - * @see CatalogApi#addItem(URI, CatalogItem) - */ - @POST - @Path("/catalogItems") - @Consumes(VCloudDirectorMediaType.CATALOG_ITEM) - @Produces(VCloudDirectorMediaType.CATALOG_ITEM) - @JAXBResponseParser - ListenableFuture<CatalogItem> addItem(@EndpointParam URI catalogHref, - @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem); - - /** - * @see CatalogApi#getItem(URI) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<CatalogItem> getItem(@EndpointParam URI catalogItemHref); - - /** - * @see CatalogApi#editItem(URI, CatalogItem) - */ - @PUT - @Consumes(VCloudDirectorMediaType.CATALOG_ITEM) - @Produces(VCloudDirectorMediaType.CATALOG_ITEM) - @JAXBResponseParser - ListenableFuture<CatalogItem> editItem(@EndpointParam URI catalogItemHref, - @BinderParam(BindToXMLPayload.class) CatalogItem catalogItem); - - /** - * @see CatalogApi#removeItem(URI) - */ - @DELETE - @Consumes - @JAXBResponseParser - ListenableFuture<Void> removeItem(@EndpointParam URI catalogItemHref); -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java index 8d70c63..a8a3c0c 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaApi.java @@ -16,18 +16,35 @@ */ package org.jclouds.vcloud.director.v1_5.features; +import static org.jclouds.Fallbacks.NullOnNotFoundOr404; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CLONE_MEDIA_PARAMS; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.MEDIA; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK; + import java.net.URI; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +import org.jclouds.rest.annotations.BinderParam; +import org.jclouds.rest.annotations.EndpointParam; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.JAXBResponseParser; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.binders.BindToXMLPayload; import org.jclouds.vcloud.director.v1_5.domain.Media; import org.jclouds.vcloud.director.v1_5.domain.Owner; import org.jclouds.vcloud.director.v1_5.domain.Task; import org.jclouds.vcloud.director.v1_5.domain.params.CloneMediaParams; +import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; +import org.jclouds.vcloud.director.v1_5.functions.URNToHref; -/** - * Provides synchronous access to {@link Media}. - * - * @see MediaAsyncApi - */ +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface MediaApi { /** @@ -35,9 +52,17 @@ public interface MediaApi { * * @return the media or null if not found */ - Media get(String mediaUrn); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Media get(@EndpointParam(parser = URNToHref.class) String mediaUrn); - Media get(URI mediaHref); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Media get(@EndpointParam URI mediaHref); /** * Creates a media (and present upload link for the floppy/iso file). @@ -45,18 +70,19 @@ public interface MediaApi { * @return The response will return a link to transfer site to be able to continue with uploading * the media. */ - Media add(URI uploadHref, Media media); - - /** - * Clones a media into new one. The status of the returned media is UNRESOLVED(0) until the task - * for cloning finish. - * - * @return a Media resource which will contain a task. The user should monitor the contained task - * status in order to check when it is completed. - */ - Media clone(String mediaUrn, CloneMediaParams params); + @POST + @Consumes(MEDIA) + @Produces(MEDIA) + @JAXBResponseParser + Media add(@EndpointParam URI updateHref, @BinderParam(BindToXMLPayload.class) Media media); - Media clone(URI mediaHref, CloneMediaParams params); + @POST + @Path("/action/cloneMedia") + @Consumes(MEDIA) + @Produces(CLONE_MEDIA_PARAMS) + @JAXBResponseParser + Media clone(@EndpointParam URI mediaHref, + @BinderParam(BindToXMLPayload.class) CloneMediaParams params); /** * Updates the name/description of a media. @@ -64,23 +90,48 @@ public interface MediaApi { * @return a task. This operation is asynchronous and the user should monitor the returned task * status in order to check when it is completed. */ - Task edit(String mediaUrn, Media media); + @PUT + @Consumes(TASK) + @Produces(MEDIA) + @JAXBResponseParser + Task edit(@EndpointParam(parser = URNToHref.class) String mediaUrn, + @BinderParam(BindToXMLPayload.class) Media media); - Task edit(URI mediaHref, Media media); + @PUT + @Consumes(TASK) + @Produces(MEDIA) + @JAXBResponseParser + Task edit(@EndpointParam URI mediaHref, @BinderParam(BindToXMLPayload.class) Media media); /** * Deletes a media. */ - Task remove(String mediaUrn); + @DELETE + @Consumes(TASK) + @JAXBResponseParser + Task remove(@EndpointParam(parser = URNToHref.class) String mediaUrn); - Task remove(URI mediaHref); + @DELETE + @Consumes(TASK) + @JAXBResponseParser + Task remove(@EndpointParam URI mediaHref); /** * Retrieves an owner. * * @return the owner or null if not found */ - Owner getOwner(String mediaUrn); + @GET + @Path("/owner") + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Owner getOwner(@EndpointParam(parser = URNToHref.class) String mediaUrn); - Owner getOwner(URI mediaHref); + @GET + @Path("/owner") + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Owner getOwner(@EndpointParam URI mediaHref); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java deleted file mode 100644 index 987e3e9..0000000 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MediaAsyncApi.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.vcloud.director.v1_5.features; - -import java.net.URI; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - -import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.rest.annotations.BinderParam; -import org.jclouds.rest.annotations.EndpointParam; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.JAXBResponseParser; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.rest.binders.BindToXMLPayload; -import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; -import org.jclouds.vcloud.director.v1_5.domain.Media; -import org.jclouds.vcloud.director.v1_5.domain.Owner; -import org.jclouds.vcloud.director.v1_5.domain.Task; -import org.jclouds.vcloud.director.v1_5.domain.params.CloneMediaParams; -import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; -import org.jclouds.vcloud.director.v1_5.functions.URNToHref; - -import com.google.common.util.concurrent.ListenableFuture; - -/** - * @see MediaApi - */ -@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) -public interface MediaAsyncApi { - - /** - * @see MediaApi#get(String) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<Media> get(@EndpointParam(parser = URNToHref.class) String mediaUrn); - - /** - * @see MediaApi#add(URI, Media) - */ - @POST - @Consumes(VCloudDirectorMediaType.MEDIA) - @Produces(VCloudDirectorMediaType.MEDIA) - @JAXBResponseParser - ListenableFuture<Media> add(@EndpointParam URI updateHref, @BinderParam(BindToXMLPayload.class) Media media); - - /** - * @see MediaApi#clone(String, CloneMediaParams) - */ - @POST - @Path("/action/cloneMedia") - @Consumes(VCloudDirectorMediaType.MEDIA) - @Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS) - @JAXBResponseParser - ListenableFuture<Media> clone(@EndpointParam(parser = URNToHref.class) String mediaUrn, - @BinderParam(BindToXMLPayload.class) CloneMediaParams params); - - /** - * @see MediaApi#editMedia(String, Media) - */ - @PUT - @Consumes(VCloudDirectorMediaType.TASK) - @Produces(VCloudDirectorMediaType.MEDIA) - @JAXBResponseParser - ListenableFuture<Task> edit(@EndpointParam(parser = URNToHref.class) String mediaUrn, - @BinderParam(BindToXMLPayload.class) Media media); - - /** - * @see MediaApi#removeMedia(String) - */ - @DELETE - @Consumes(VCloudDirectorMediaType.TASK) - @JAXBResponseParser - ListenableFuture<Task> remove(@EndpointParam(parser = URNToHref.class) String mediaUrn); - - /** - * @see MediaApi#getOwner(String) - */ - @GET - @Path("/owner") - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<Owner> getOwner(@EndpointParam(parser = URNToHref.class) String mediaUrn); - - /** - * @see MediaApi#get(URI) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<Media> get(@EndpointParam URI mediaHref); - - /** - * @see MediaApi#clone(URI, CloneMediaParams) - */ - @POST - @Path("/action/cloneMedia") - @Consumes(VCloudDirectorMediaType.MEDIA) - @Produces(VCloudDirectorMediaType.CLONE_MEDIA_PARAMS) - @JAXBResponseParser - ListenableFuture<Media> clone(@EndpointParam URI mediaHref, - @BinderParam(BindToXMLPayload.class) CloneMediaParams params); - - /** - * @see MediaApi#editMedia(URI, Media) - */ - @PUT - @Consumes(VCloudDirectorMediaType.TASK) - @Produces(VCloudDirectorMediaType.MEDIA) - @JAXBResponseParser - ListenableFuture<Task> edit(@EndpointParam URI mediaHref, @BinderParam(BindToXMLPayload.class) Media media); - - /** - * @see MediaApi#removeMedia(URI) - */ - @DELETE - @Consumes(VCloudDirectorMediaType.TASK) - @JAXBResponseParser - ListenableFuture<Task> remove(@EndpointParam URI mediaHref); - - /** - * @see MediaApi#getOwner(URI) - */ - @GET - @Path("/owner") - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<Owner> getOwner(@EndpointParam URI mediaHref); -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java index 394d4c6..3a7896c 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataApi.java @@ -16,21 +16,46 @@ */ package org.jclouds.vcloud.director.v1_5.features; +import static org.jclouds.Fallbacks.NullOnNotFoundOr404; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_VALUE; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK; + import java.util.Map; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; + +import org.jclouds.rest.annotations.BinderParam; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.JAXBResponseParser; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.vcloud.director.v1_5.binders.BindMapAsMetadata; +import org.jclouds.vcloud.director.v1_5.binders.BindStringAsMetadataValue; import org.jclouds.vcloud.director.v1_5.domain.Metadata; import org.jclouds.vcloud.director.v1_5.domain.Task; +import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; +import org.jclouds.vcloud.director.v1_5.functions.RegexValueParser; -/** - * Provides synchronous access to {@link Metadata}. - * - * @see MetadataAsyncApi - */ +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface MetadataApi { /** * Retrieves an list of metadata * * @return a list of metadata */ + @GET + @Path("/metadata") + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) Metadata get(); /** @@ -38,7 +63,12 @@ public interface MetadataApi { * * @return the metadata value, or null if not found */ - String get(String key); + @GET + @Path("/metadata/{key}") + @Consumes + @ResponseParser(RegexValueParser.class) + @Fallback(NullOnNotFoundOr404.class) + String get(@PathParam("key") String key); /** * Merges the metadata for a media with the information provided. @@ -46,7 +76,12 @@ public interface MetadataApi { * @return a task. This operation is asynchronous and the user should monitor the returned task status in order to * check when it is completed. */ - Task putAll(Map<String, String> metadata); + @POST + @Path("/metadata") + @Consumes(TASK) + @Produces(METADATA) + @JAXBResponseParser + Task putAll(@BinderParam(BindMapAsMetadata.class) Map<String, String> metadata); /** * Sets the metadata for the particular key for the media to the value provided. Note: this will replace any existing @@ -55,7 +90,12 @@ public interface MetadataApi { * @return a task. This operation is asynchronous and the user should monitor the returned task status in order to * check when it is completed. */ - Task put(String key, String value); + @PUT + @Path("/metadata/{key}") + @Consumes(TASK) + @Produces(METADATA_VALUE) + @JAXBResponseParser + Task put(@PathParam("key") String key, @BinderParam(BindStringAsMetadataValue.class) String metadataValue); /** * Deletes a metadata entry. @@ -63,6 +103,9 @@ public interface MetadataApi { * @return a task. This operation is asynchronous and the user should monitor the returned task status in order to * check when it is completed. */ - Task remove(String key); - + @DELETE + @Path("/metadata/{key}") + @Consumes(TASK) + @JAXBResponseParser + Task remove(@PathParam("key") String key); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java deleted file mode 100644 index 4b5c7d9..0000000 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/MetadataAsyncApi.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.vcloud.director.v1_5.features; - -import java.util.Map; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; - -import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.rest.annotations.BinderParam; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.JAXBResponseParser; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.rest.annotations.ResponseParser; -import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; -import org.jclouds.vcloud.director.v1_5.binders.BindMapAsMetadata; -import org.jclouds.vcloud.director.v1_5.binders.BindStringAsMetadataValue; -import org.jclouds.vcloud.director.v1_5.domain.Metadata; -import org.jclouds.vcloud.director.v1_5.domain.Task; -import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; -import org.jclouds.vcloud.director.v1_5.functions.RegexValueParser; - -import com.google.common.util.concurrent.ListenableFuture; - -/** - * @see MetadataApi - */ -@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) -public interface MetadataAsyncApi { - - /** - * @see MetadataApi.Readable#get() - */ - @GET - @Path("/metadata") - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<Metadata> get(); - - /** - * @see MetadataApi.Readable#get(String) - */ - @GET - @Path("/metadata/{key}") - @Consumes - @ResponseParser(RegexValueParser.class) - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<String> get(@PathParam("key") String key); - - /** - * @see MetadataApi.Writable#putAll - */ - @POST - @Path("/metadata") - @Consumes(VCloudDirectorMediaType.TASK) - @Produces(VCloudDirectorMediaType.METADATA) - @JAXBResponseParser - ListenableFuture<Task> putAll(@BinderParam(BindMapAsMetadata.class) Map<String, String> metadata); - - /** - * @see MetadataApi#put - */ - @PUT - @Path("/metadata/{key}") - @Consumes(VCloudDirectorMediaType.TASK) - @Produces(VCloudDirectorMediaType.METADATA_VALUE) - @JAXBResponseParser - ListenableFuture<Task> put(@PathParam("key") String key, - @BinderParam(BindStringAsMetadataValue.class) String metadataValue); - - /** - * @see MetadataApi.Writable#remove - */ - @DELETE - @Path("/metadata/{key}") - @Consumes(VCloudDirectorMediaType.TASK) - @JAXBResponseParser - ListenableFuture<Task> remove(@PathParam("key") String key); - -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java index 9a6c71d..116df53 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkApi.java @@ -16,15 +16,22 @@ */ package org.jclouds.vcloud.director.v1_5.features; +import static org.jclouds.Fallbacks.NullOnNotFoundOr404; + import java.net.URI; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; + +import org.jclouds.rest.annotations.EndpointParam; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.JAXBResponseParser; +import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.vcloud.director.v1_5.domain.network.Network; +import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; +import org.jclouds.vcloud.director.v1_5.functions.URNToHref; -/** - * Provides synchronous access to {@link Network}. - * - * @see NetworkAsyncApi - */ +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface NetworkApi { /** @@ -32,7 +39,15 @@ public interface NetworkApi { * * @return the network or null if not found */ - Network get(String networkUrn); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Network get(@EndpointParam(parser = URNToHref.class) String networkUrn); - Network get(URI networkHref); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Network get(@EndpointParam URI networkHref); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java deleted file mode 100644 index 997ff98..0000000 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/NetworkAsyncApi.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.vcloud.director.v1_5.features; - -import java.net.URI; - -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; - -import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.rest.annotations.EndpointParam; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.JAXBResponseParser; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.vcloud.director.v1_5.domain.network.Network; -import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; -import org.jclouds.vcloud.director.v1_5.functions.URNToHref; - -import com.google.common.util.concurrent.ListenableFuture; - -/** - * @see NetworkApi - */ -@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) -public interface NetworkAsyncApi { - - /** - * @see NetworkApi#get(String) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<? extends Network> get(@EndpointParam(parser = URNToHref.class) String networkUrn); - - /** - * @see NetworkApi#get(URI) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<? extends Network> get(@EndpointParam URI networkHref); -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java index fc24805..54a7fab 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgApi.java @@ -16,16 +16,24 @@ */ package org.jclouds.vcloud.director.v1_5.features; +import static org.jclouds.Fallbacks.NullOnNotFoundOr404; + import java.net.URI; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +import org.jclouds.rest.annotations.EndpointParam; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.JAXBResponseParser; +import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.vcloud.director.v1_5.domain.org.Org; import org.jclouds.vcloud.director.v1_5.domain.org.OrgList; +import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; +import org.jclouds.vcloud.director.v1_5.functions.URNToHref; -/** - * Provides synchronous access to {@link Org}. - * - * @see OrgAsyncApi - */ +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface OrgApi { /** @@ -37,6 +45,10 @@ public interface OrgApi { * * @return a list of organizations */ + @GET + @Path("/org/") + @Consumes + @JAXBResponseParser OrgList list(); /** @@ -48,7 +60,15 @@ public interface OrgApi { * * @return the org or null if not found */ - Org get(String orgUrn); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Org get(@EndpointParam(parser = URNToHref.class) String orgUrn); - Org get(URI orgHref); + @GET + @Consumes + @JAXBResponseParser + @Fallback(NullOnNotFoundOr404.class) + Org get(@EndpointParam URI orgHref); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java deleted file mode 100644 index 44d3ab9..0000000 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncApi.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.vcloud.director.v1_5.features; - -import java.net.URI; - -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.Path; - -import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.rest.annotations.EndpointParam; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.JAXBResponseParser; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.vcloud.director.v1_5.domain.org.Org; -import org.jclouds.vcloud.director.v1_5.domain.org.OrgList; -import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; -import org.jclouds.vcloud.director.v1_5.functions.URNToHref; - -import com.google.common.util.concurrent.ListenableFuture; - -/** - * @see OrgApi - */ -@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) -public interface OrgAsyncApi { - - /** - * @see OrgApi#list() - */ - @GET - @Path("/org/") - @Consumes - @JAXBResponseParser - ListenableFuture<OrgList> list(); - - /** - * @see OrgApi#get(String) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<? extends Org> get(@EndpointParam(parser = URNToHref.class) String orgUrn); - - /** - * @see OrgApi#get(URI) - */ - @GET - @Consumes - @JAXBResponseParser - @Fallback(NullOnNotFoundOr404.class) - ListenableFuture<? extends Org> get(@EndpointParam URI orgHref); -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/d7bc430c/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java ---------------------------------------------------------------------- diff --git a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java index 0fb49c7..8c9ed91 100644 --- a/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java +++ b/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/QueryApi.java @@ -16,28 +16,22 @@ */ package org.jclouds.vcloud.director.v1_5.features; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.QueryParam; + +import org.jclouds.rest.annotations.JAXBResponseParser; +import org.jclouds.rest.annotations.QueryParams; +import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.vcloud.director.v1_5.domain.query.CatalogReferences; -import org.jclouds.vcloud.director.v1_5.domain.query.QueryList; import org.jclouds.vcloud.director.v1_5.domain.query.QueryResultRecords; -import org.jclouds.vcloud.director.v1_5.domain.query.VAppReferences; +import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationAndCookieToRequest; -/** - * Provides synchronous access to the REST API query interface. - * - * @see QueryAsyncApi - */ +@RequestFilters(AddVCloudAuthorizationAndCookieToRequest.class) public interface QueryApi { // TODO Add a typed object for filter syntax, or at least a fluent builder - - /** - * REST API query {@link Link} list. - * - * <pre> - * GET /query - * </pre> - */ - QueryList queryList(); /** * Retrieves a list of entities by using REST API general QueryHandler. @@ -49,18 +43,25 @@ public interface QueryApi { * <pre> * GET /query * </pre> - * - * @see #queryList() - * @see #query(String, String) - * @see #query(Integer, Integer, String, String, String) */ - QueryResultRecords queryAll(String type); - - /** @see #queryAll() */ - QueryResultRecords query(String type, String filter); - - /** @see #queryAll() */ - QueryResultRecords query(Integer page, Integer pageSize, String format, String type, String filter); + @GET + @Path("/query") + @Consumes + @JAXBResponseParser + QueryResultRecords queryAll(@QueryParam("type") String type); + + @GET + @Path("/query") + @Consumes + @JAXBResponseParser + QueryResultRecords query(@QueryParam("type") String type, @QueryParam("filter") String filter); + + @GET + @Path("/query") + @Consumes + @JAXBResponseParser + QueryResultRecords query(@QueryParam("page") Integer page, @QueryParam("pageSize") Integer pageSize, + @QueryParam("format") String format, @QueryParam("type") String type, @QueryParam("filter") String filter); /** * Retrieves a list of {@link Catalog}s by using REST API general QueryHandler. @@ -71,15 +72,12 @@ public interface QueryApi { * * @see #queryAll(String) */ + @GET + @Path("/catalogs/query") + @Consumes + @JAXBResponseParser QueryResultRecords catalogsQueryAll(); - /** @see #queryAll() */ - QueryResultRecords catalogsQuery(String filter); - - /** @see #queryAll() */ - QueryResultRecords catalogsQuery(Integer page, Integer pageSize, String filter); - - /** * Retrieves a list of {@link CatalogReference}s by using REST API general QueryHandler. * @@ -89,14 +87,13 @@ public interface QueryApi { * * @see #queryAll(String) */ + @GET + @Path("/catalogs/query") + @Consumes + @QueryParams(keys = { "format" }, values = { "references" }) + @JAXBResponseParser CatalogReferences catalogReferencesQueryAll(); - /** @see #catalogReferencesQueryAll() */ - CatalogReferences catalogReferencesQuery(String filter); - - /** @see #catalogReferencesQueryAll() */ - CatalogReferences catalogReferencesQuery(Integer page, Integer pageSize, String filter); - /** * Retrieves a list of {@link VAppTemplate}s by using REST API general QueryHandler. * @@ -106,10 +103,17 @@ public interface QueryApi { * * @see #queryAll(String) */ + @GET + @Path("/vAppTemplates/query") + @Consumes + @JAXBResponseParser QueryResultRecords vAppTemplatesQueryAll(); - /** @see #queryAll() */ - QueryResultRecords vAppTemplatesQuery(String filter); + @GET + @Path("/vAppTemplates/query") + @Consumes + @JAXBResponseParser + QueryResultRecords vAppTemplatesQuery(@QueryParam("filter") String filter); /** * Retrieves a list of {@link VApp}s by using REST API general QueryHandler. @@ -120,31 +124,17 @@ public interface QueryApi { * * @see #queryAll(String) */ + @GET + @Path("/vApps/query") + @Consumes + @JAXBResponseParser QueryResultRecords vAppsQueryAll(); - /** @see #queryAll() */ - QueryResultRecords vAppsQuery(String filter); - - /** @see #queryAll() */ - QueryResultRecords vAppsQuery(Integer page, Integer pageSize, String filter); - - /** - * Retrieves a list of {@link VAppReference}s by using REST API general QueryHandler. - * - * <pre> - * GET /vApps/query?format=references - * </pre> - * - * @see #queryAll(String) - */ - /** @see #queryAll() */ - VAppReferences vAppReferencesQueryAll(); - - /** @see #queryAll() */ - VAppReferences vAppReferencesQuery(String filter); - - /** @see #queryAll() */ - VAppReferences vAppReferencesQuery(Integer page, Integer pageSize, String filter); + @GET + @Path("/vApps/query") + @Consumes + @JAXBResponseParser + QueryResultRecords vAppsQuery(@QueryParam("filter") String filter); /** * Retrieves a list of {@link Vm}s by using REST API general QueryHandler. @@ -155,10 +145,17 @@ public interface QueryApi { * * @see #queryAll(String) */ + @GET + @Path("/vms/query") + @Consumes + @JAXBResponseParser QueryResultRecords vmsQueryAll(); - /** @see #queryAll() */ - QueryResultRecords vmsQuery(String filter); + @GET + @Path("/vms/query") + @Consumes + @JAXBResponseParser + QueryResultRecords vmsQuery(@QueryParam("filter") String filter); /** * Retrieves a list of {@link Media}s by using REST API general QueryHandler. @@ -169,9 +166,15 @@ public interface QueryApi { * * @see #queryAll(String) */ + @GET + @Path("/mediaList/query") + @Consumes + @JAXBResponseParser QueryResultRecords mediaListQueryAll(); - /** @see #queryAll() */ - QueryResultRecords mediaListQuery(String filter); - + @GET + @Path("/mediaList/query") + @Consumes + @JAXBResponseParser + QueryResultRecords mediaListQuery(@QueryParam("filter") String filter); }
