You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/10/05 22:15:25 UTC
[5/5] git commit: JCLOUDS-40 unasync vcloud-director
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 <ac...@twitter.com>
Authored: Sun Oct 5 12:53:06 2014 -0700
Committer: Adrian Cole <ad...@apache.org>
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);
}