You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2016/01/21 01:11:13 UTC
[5/6] jclouds-labs git commit: Promoted DigitalOcean v2
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/strategy/CreateKeyPairsThenCreateNodes.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/strategy/CreateKeyPairsThenCreateNodes.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/strategy/CreateKeyPairsThenCreateNodes.java
deleted file mode 100644
index bc304b7..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/strategy/CreateKeyPairsThenCreateNodes.java
+++ /dev/null
@@ -1,216 +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.digitalocean2.compute.strategy;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.security.PublicKey;
-import java.security.interfaces.DSAPublicKey;
-import java.security.interfaces.ECPublicKey;
-import java.security.interfaces.RSAPublicKey;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.Constants;
-import org.jclouds.compute.config.CustomizationResponse;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.Template;
-import org.jclouds.compute.functions.GroupNamingConvention;
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.compute.strategy.CreateNodeWithGroupEncodedIntoName;
-import org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap;
-import org.jclouds.compute.strategy.ListNodesStrategy;
-import org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet;
-import org.jclouds.digitalocean2.DigitalOcean2Api;
-import org.jclouds.digitalocean2.compute.options.DigitalOcean2TemplateOptions;
-import org.jclouds.digitalocean2.domain.Key;
-import org.jclouds.digitalocean2.ssh.DSAKeys;
-import org.jclouds.digitalocean2.ssh.ECDSAKeys;
-import org.jclouds.logging.Logger;
-import org.jclouds.ssh.SshKeyPairGenerator;
-import org.jclouds.ssh.SshKeys;
-
-import com.google.common.base.Function;
-import com.google.common.base.Strings;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Sets;
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-
-@Singleton
-public class CreateKeyPairsThenCreateNodes extends CreateNodesWithGroupEncodedIntoNameThenAddToSet {
-
- @Resource
- @Named(ComputeServiceConstants.COMPUTE_LOGGER)
- protected Logger logger = Logger.NULL;
-
- private final DigitalOcean2Api api;
- private final SshKeyPairGenerator keyGenerator;
- private final Function<String, PublicKey> sshKeyToPublicKey;
-
- @Inject
- protected CreateKeyPairsThenCreateNodes(
- CreateNodeWithGroupEncodedIntoName addNodeWithGroupStrategy,
- ListNodesStrategy listNodesStrategy,
- GroupNamingConvention.Factory namingConvention,
- @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor,
- CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.Factory customizeNodeAndAddToGoodMapOrPutExceptionIntoBadMapFactory,
- DigitalOcean2Api api, SshKeyPairGenerator keyGenerator, Function<String, PublicKey> sshKeyToPublicKey) {
- super(addNodeWithGroupStrategy, listNodesStrategy, namingConvention, userExecutor,
- customizeNodeAndAddToGoodMapOrPutExceptionIntoBadMapFactory);
- this.api = checkNotNull(api, "api cannot be null");
- this.keyGenerator = checkNotNull(keyGenerator, "keyGenerator cannot be null");
- checkNotNull(userExecutor, "userExecutor cannot be null");
- this.sshKeyToPublicKey = checkNotNull(sshKeyToPublicKey, "sshKeyToPublicKey cannot be null");
- }
-
- @Override
- public Map<?, ListenableFuture<Void>> execute(String group, int count, Template template,
- Set<NodeMetadata> goodNodes, Map<NodeMetadata, Exception> badNodes,
- Multimap<NodeMetadata, CustomizationResponse> customizationResponses) {
-
- DigitalOcean2TemplateOptions options = template.getOptions().as(DigitalOcean2TemplateOptions.class);
- Set<Integer> generatedSshKeyIds = Sets.newHashSet();
-
- // If no key has been configured and the auto-create option is set, then generate a key pair
- if (options.getSshKeyIds().isEmpty() && options.getAutoCreateKeyPair()
- && Strings.isNullOrEmpty(options.getPublicKey())) {
- generateKeyPairAndAddKeyToSet(options, generatedSshKeyIds, group);
- }
-
- // If there is a script to run in the node, make sure a private key has
- // been configured so jclouds will be able to access the node
- if (options.getRunScript() != null && Strings.isNullOrEmpty(options.getLoginPrivateKey())) {
- logger.warn(">> A runScript has been configured but no SSH key has been provided."
- + " Authentication will delegate to the ssh-agent");
- }
-
- // If there is a key configured, then make sure there is a key pair for it
- if (!Strings.isNullOrEmpty(options.getPublicKey())) {
- createKeyPairForPublicKeyInOptionsAndAddToSet(options, generatedSshKeyIds);
- }
-
- // Set all keys (the provided and the auto-generated) in the options object so the
- // DigitalOceanComputeServiceAdapter adds them all
- options.sshKeyIds(Sets.union(generatedSshKeyIds, options.getSshKeyIds()));
-
- Map<?, ListenableFuture<Void>> responses = super.execute(group, count, template, goodNodes, badNodes,
- customizationResponses);
-
- // Key pairs in DigitalOcean are only required to create the Droplets. They aren't used anymore so it is better
- // to delete the auto-generated key pairs at this point where we know exactly which ones have been
- // auto-generated by jclouds.
- registerAutoGeneratedKeyPairCleanupCallbacks(responses, generatedSshKeyIds);
-
- return responses;
- }
-
- private void createKeyPairForPublicKeyInOptionsAndAddToSet(DigitalOcean2TemplateOptions options,
- Set<Integer> generatedSshKeyIds) {
- logger.debug(">> checking if the key pair already exists...");
-
- PublicKey userKey = sshKeyToPublicKey.apply(options.getPublicKey());
- String userFingerprint = computeFingerprint(userKey);
- Key key = api.keyApi().get(userFingerprint);
-
- if (key == null) {
- logger.debug(">> key pair not found. creating a new one...");
-
- Key newKey = api.keyApi().create(userFingerprint, options.getPublicKey());
-
- generatedSshKeyIds.add(newKey.id());
- logger.debug(">> key pair created! %s", newKey);
- } else {
- logger.debug(">> key pair found! %s", key);
- generatedSshKeyIds.add(key.id());
- }
- }
-
- private void generateKeyPairAndAddKeyToSet(DigitalOcean2TemplateOptions options, Set<Integer> generatedSshKeyIds, String prefix) {
- logger.debug(">> creating default keypair for node...");
-
- Map<String, String> defaultKeys = keyGenerator.get();
-
- Key defaultKey = api.keyApi().create(prefix + "-" + System.getProperty("user.name"), defaultKeys.get("public"));
- generatedSshKeyIds.add(defaultKey.id());
-
- logger.debug(">> keypair created! %s", defaultKey);
-
- // If a private key has not been explicitly set, configure the auto-generated one
- if (Strings.isNullOrEmpty(options.getLoginPrivateKey())) {
- options.overrideLoginPrivateKey(defaultKeys.get("private"));
- }
- }
-
- private void registerAutoGeneratedKeyPairCleanupCallbacks(Map<?, ListenableFuture<Void>> responses,
- final Set<Integer> generatedSshKeyIds) {
- // The Futures.allAsList fails immediately if some of the futures fail. The Futures.successfulAsList, however,
- // returns a list containing the results or 'null' for those futures that failed. We want to wait for all them
- // (even if they fail), so better use the latter form.
- ListenableFuture<List<Void>> aggregatedResponses = Futures.successfulAsList(responses.values());
-
- // Key pairs must be cleaned up after all futures completed (even if some failed).
- Futures.addCallback(aggregatedResponses, new FutureCallback<List<Void>>() {
- @Override
- public void onSuccess(List<Void> result) {
- cleanupAutoGeneratedKeyPairs(generatedSshKeyIds);
- }
-
- @Override
- public void onFailure(Throwable t) {
- cleanupAutoGeneratedKeyPairs(generatedSshKeyIds);
- }
-
- private void cleanupAutoGeneratedKeyPairs(Set<Integer> generatedSshKeyIds) {
- logger.debug(">> cleaning up auto-generated key pairs...");
- for (Integer sshKeyId : generatedSshKeyIds) {
- try {
- api.keyApi().delete(sshKeyId);
- } catch (Exception ex) {
- logger.warn(">> could not delete key pair %s: %s", sshKeyId, ex.getMessage());
- }
- }
- }
-
- }, userExecutor);
- }
-
- private static String computeFingerprint(PublicKey key) {
- if (key instanceof RSAPublicKey) {
- RSAPublicKey rsaKey = (RSAPublicKey) key;
- return SshKeys.fingerprint(rsaKey.getPublicExponent(), rsaKey.getModulus());
- } else if (key instanceof DSAPublicKey) {
- DSAPublicKey dsaKey = (DSAPublicKey) key;
- return DSAKeys.fingerprint(dsaKey.getParams().getP(), dsaKey.getParams().getQ(), dsaKey.getParams().getG(),
- dsaKey.getY());
- } else if (key instanceof ECPublicKey) {
- ECPublicKey ecdsaKey = (ECPublicKey) key;
- return ECDSAKeys.fingerprint(ecdsaKey);
- } else {
- throw new IllegalArgumentException("Only RSA and DSA keys are supported");
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2HttpApiModule.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2HttpApiModule.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2HttpApiModule.java
deleted file mode 100644
index 8bfe266..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2HttpApiModule.java
+++ /dev/null
@@ -1,57 +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.digitalocean2.config;
-
-import java.net.URI;
-
-import org.jclouds.digitalocean2.DigitalOcean2Api;
-import org.jclouds.digitalocean2.domain.options.ImageListOptions;
-import org.jclouds.digitalocean2.domain.options.ListOptions;
-import org.jclouds.digitalocean2.functions.LinkToImageListOptions;
-import org.jclouds.digitalocean2.functions.LinkToListOptions;
-import org.jclouds.digitalocean2.handlers.DigitalOcean2ErrorHandler;
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.annotation.ClientError;
-import org.jclouds.http.annotation.Redirection;
-import org.jclouds.http.annotation.ServerError;
-import org.jclouds.oauth.v2.config.OAuthScopes;
-import org.jclouds.rest.ConfiguresHttpApi;
-import org.jclouds.rest.config.HttpApiModule;
-
-import com.google.common.base.Function;
-import com.google.inject.TypeLiteral;
-
-@ConfiguresHttpApi
-public class DigitalOcean2HttpApiModule extends HttpApiModule<DigitalOcean2Api> {
-
- @Override
- protected void bindErrorHandlers() {
- bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(DigitalOcean2ErrorHandler.class);
- bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(DigitalOcean2ErrorHandler.class);
- bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(DigitalOcean2ErrorHandler.class);
- }
-
- @Override
- protected void configure() {
- super.configure();
- bind(OAuthScopes.class).toInstance(OAuthScopes.ReadOrWriteScopes.create("read", "read write"));
- bind(new TypeLiteral<Function<URI, ListOptions>>() {
- }).to(LinkToListOptions.class);
- bind(new TypeLiteral<Function<URI, ImageListOptions>>() {
- }).to(LinkToImageListOptions.class);
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2Properties.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2Properties.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2Properties.java
deleted file mode 100644
index d0d1098..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2Properties.java
+++ /dev/null
@@ -1,33 +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.digitalocean2.config;
-
-public final class DigitalOcean2Properties {
-
- /**
- * Maximum amount of time (in milliseconds) a request will wait until retrying if
- * the rate limit is exhausted.
- * <p>
- * Default value: 2 minutes.
- */
- public static final String MAX_RATE_LIMIT_WAIT = "jclouds.max-ratelimit-wait";
-
- private DigitalOcean2Properties() {
- throw new AssertionError("intentionally unimplemented");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2RateLimitModule.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2RateLimitModule.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2RateLimitModule.java
deleted file mode 100644
index 1b0a95f..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOcean2RateLimitModule.java
+++ /dev/null
@@ -1,30 +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.digitalocean2.config;
-
-import org.jclouds.digitalocean2.handlers.RateLimitRetryHandler;
-import org.jclouds.http.HttpRetryHandler;
-import org.jclouds.http.annotation.ClientError;
-
-import com.google.inject.AbstractModule;
-
-public class DigitalOcean2RateLimitModule extends AbstractModule {
- @Override
- protected void configure() {
- bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(RateLimitRetryHandler.class);
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOceanParserModule.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOceanParserModule.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOceanParserModule.java
deleted file mode 100644
index e4bb9bc..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/config/DigitalOceanParserModule.java
+++ /dev/null
@@ -1,144 +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.digitalocean2.config;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import static com.google.common.collect.Iterables.get;
-import static com.google.common.collect.Iterables.size;
-import static com.google.inject.Scopes.SINGLETON;
-
-import java.io.IOException;
-import java.lang.reflect.Type;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.PublicKey;
-import java.security.interfaces.DSAPublicKey;
-import java.security.interfaces.RSAPublicKey;
-import java.security.spec.DSAPublicKeySpec;
-import java.security.spec.ECPublicKeySpec;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.RSAPublicKeySpec;
-import java.util.Map;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.digitalocean2.ssh.DSAKeys;
-import org.jclouds.digitalocean2.ssh.ECDSAKeys;
-import org.jclouds.json.config.GsonModule.DateAdapter;
-import org.jclouds.json.config.GsonModule.Iso8601DateAdapter;
-import org.jclouds.ssh.SshKeys;
-import com.google.common.base.Function;
-import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableMap;
-import com.google.gson.TypeAdapter;
-import com.google.gson.stream.JsonReader;
-import com.google.gson.stream.JsonWriter;
-import com.google.inject.AbstractModule;
-import com.google.inject.Provides;
-
-/**
- * Custom parser bindings.
- */
-public class DigitalOceanParserModule extends AbstractModule {
-
- @Override
- protected void configure() {
- bind(DateAdapter.class).to(Iso8601DateAdapter.class).in(SINGLETON);
- }
-
- @Singleton
- public static class SshPublicKeyAdapter extends TypeAdapter<PublicKey> {
-
- private final Function<PublicKey, String> publicKeyToSshKey;
- private final Function<String, PublicKey> sshKeyToPublicKey;
-
- @Inject
- public SshPublicKeyAdapter(Function<PublicKey, String> publicKeyToSshKey,
- Function<String, PublicKey> sshKeyToPublicKey) {
- this.publicKeyToSshKey = checkNotNull(publicKeyToSshKey, "publicKeyToSshKey cannot be null");
- this.sshKeyToPublicKey = checkNotNull(sshKeyToPublicKey, "sshKeyToPublicKey cannot be null");
- }
-
- @Override
- public void write(JsonWriter out, PublicKey value) throws IOException {
- out.value(publicKeyToSshKey.apply(value));
- }
-
- @Override
- public PublicKey read(JsonReader in) throws IOException {
- return sshKeyToPublicKey.apply(in.nextString().trim());
- }
- }
-
- @Provides
- @Singleton
- public Function<PublicKey, String> publicKeyToSshKey() {
- return new Function<PublicKey, String>() {
- @Override
- public String apply(PublicKey input) {
- if (input instanceof RSAPublicKey) {
- return SshKeys.encodeAsOpenSSH((RSAPublicKey) input);
- } else if (input instanceof DSAPublicKey) {
- return DSAKeys.encodeAsOpenSSH((DSAPublicKey) input);
- } else {
- throw new IllegalArgumentException("Only RSA and DSA keys are supported");
- }
- }
- };
- }
-
- @Provides
- @Singleton
- public Function<String, PublicKey> sshKeyToPublicKey() {
- return new Function<String, PublicKey>() {
- @Override
- public PublicKey apply(String input) {
- Iterable<String> parts = Splitter.on(' ').split(input);
- checkArgument(size(parts) >= 2, "bad format, should be: [ssh-rsa|ssh-dss] AAAAB3...");
- String type = get(parts, 0);
-
- try {
- if ("ssh-rsa".equals(type)) {
- RSAPublicKeySpec spec = SshKeys.publicKeySpecFromOpenSSH(input);
- return KeyFactory.getInstance("RSA").generatePublic(spec);
- } else if ("ssh-dss".equals(type)) {
- DSAPublicKeySpec spec = DSAKeys.publicKeySpecFromOpenSSH(input);
- return KeyFactory.getInstance("DSA").generatePublic(spec);
- } else if (type.startsWith("ecdsa-sha2-")) {
- ECPublicKeySpec spec = ECDSAKeys.publicKeySpecFromOpenSSH(input);
- return KeyFactory.getInstance("EC").generatePublic(spec);
- } else {
- throw new IllegalArgumentException("bad format, jclouds supports ssh-rsa, ssh-dss, ecdsa-sha2-nistp[256|384|521]");
- }
- } catch (InvalidKeySpecException ex) {
- throw propagate(ex);
- } catch (NoSuchAlgorithmException ex) {
- throw propagate(ex);
- }
- }
- };
- }
-
- @Provides
- @Singleton
- public Map<Type, Object> provideCustomAdapterBindings(SshPublicKeyAdapter sshPublicKeyAdapter) {
- return ImmutableMap.<Type, Object> of(PublicKey.class, sshPublicKeyAdapter);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Action.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Action.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Action.java
deleted file mode 100644
index b800105..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Action.java
+++ /dev/null
@@ -1,71 +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.digitalocean2.domain;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import java.util.Date;
-
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-import com.google.common.base.CaseFormat;
-import com.google.common.base.Enums;
-import com.google.common.base.Joiner;
-import com.google.common.base.Optional;
-
-@AutoValue
-public abstract class Action {
-
- public enum Status {
- COMPLETED, IN_PROGRESS, ERRORED;
-
- Status() {}
-
- public static Status fromValue(String value) {
- Optional<Status> status = Enums.getIfPresent(Status.class, value.toUpperCase());
- if (!status.isPresent()) {
- String upperCamelValue = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, value.toLowerCase());
- status = Enums.getIfPresent(Status.class, upperCamelValue);
- }
- checkArgument(status.isPresent(), "Expected one of %s but was", Joiner.on(',').join(Status.values()), value);
- return status.get();
- }
- }
-
- public abstract int id();
- public abstract Status status();
- public abstract String type();
- public abstract Date startedAt();
- @Nullable public abstract Date completedAt();
- public abstract Integer resourceId();
- public abstract String resourceType();
- @Nullable public abstract Region region();
- @Nullable public abstract String regionSlug();
-
- @SerializedNames({ "id", "status", "type", "started_at", "completed_at", "resource_id", "resource_type",
- "region", "region_slug" })
- public static Action create(int id, Status status, String type, Date startedAt, Date completedAt, int resourceId,
- String resourceType, Region region, String regionSlug) {
- return new AutoValue_Action(id, status, type, startedAt, completedAt, resourceId, resourceType, region,
- regionSlug);
- }
-
- Action() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Backup.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Backup.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Backup.java
deleted file mode 100644
index 536a187..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Backup.java
+++ /dev/null
@@ -1,43 +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.digitalocean2.domain;
-
-import java.util.List;
-
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.json.SerializedNames;
-import com.google.auto.value.AutoValue;
-
-@AutoValue
-public abstract class Backup {
- public abstract int id();
- public abstract String name();
- public abstract String distribution();
- @Nullable public abstract String slug();
- public abstract boolean isPublic();
- public abstract List<String> regions();
- public abstract int minDiskSize();
-
- @SerializedNames({ "id", "name", "distribution", "slug", "public", "regions", "min_disk_size" })
- public static Backup create(int id, String name, String distribution, String slug, boolean isPublic,
- List<String> regions, int minDiskSize) {
- return new AutoValue_Backup(id, name, distribution, slug, isPublic, regions, minDiskSize);
- }
-
- Backup() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Distribution.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Distribution.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Distribution.java
deleted file mode 100644
index 1ea0f0e..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Distribution.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.digitalocean2.domain;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.tryFind;
-import static java.util.Arrays.asList;
-
-import java.util.List;
-
-import org.jclouds.compute.domain.OsFamily;
-import com.google.common.base.Predicate;
-
-/**
- * DigitalOcean image distributions.
- */
-public enum Distribution {
- ARCHLINUX(OsFamily.ARCH, "Arch Linux"),
- CENTOS(OsFamily.CENTOS, "CentOS"),
- DEBIAN(OsFamily.DEBIAN, "Debian"),
- FEDORA(OsFamily.FEDORA, "Fedora"),
- UBUNTU(OsFamily.UBUNTU, "Ubuntu"),
- UNRECOGNIZED(OsFamily.UNRECOGNIZED, "");
-
- private static final List<Distribution> values = asList(Distribution.values());
-
- private final OsFamily osFamily;
- private final String value;
-
- private Distribution(OsFamily osFamily, String value) {
- this.osFamily = checkNotNull(osFamily, "osFamily cannot be null");
- this.value = checkNotNull(value, "value cannot be null");
- }
-
- public OsFamily osFamily() {
- return this.osFamily;
- }
-
- public String value() {
- return this.value;
- }
-
- public static Distribution fromValue(String value) {
- return tryFind(values, hasValue(value)).or(UNRECOGNIZED);
- }
-
- private static Predicate<Distribution> hasValue(final String value) {
- return new Predicate<Distribution>() {
- @Override
- public boolean apply(Distribution input) {
- return input.value.equalsIgnoreCase(value);
- }
- };
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Droplet.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Droplet.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Droplet.java
deleted file mode 100644
index 4d0dd4c..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Droplet.java
+++ /dev/null
@@ -1,92 +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.digitalocean2.domain;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.collect.ImmutableList.copyOf;
-import static com.google.common.collect.Iterables.concat;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-import com.google.common.base.Enums;
-import com.google.common.base.Joiner;
-import com.google.common.base.Optional;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
-
-@AutoValue
-public abstract class Droplet {
-
- public enum Status {
- NEW, ACTIVE, ARCHIVE, OFF;
-
- public static Status fromValue(String value) {
- Optional<Status> status = Enums.getIfPresent(Status.class, value.toUpperCase());
- checkArgument(status.isPresent(), "Expected one of %s but was %s", Joiner.on(',').join(Status.values()), value);
- return status.get();
- }
- }
-
- public abstract int id();
- public abstract String name();
- public abstract int memory();
- public abstract int vcpus();
- public abstract int disk();
- public abstract boolean locked();
- public abstract Date createdAt();
- public abstract Status status();
- public abstract List<Integer> backupsIds();
- public abstract List<Integer> snapshotIds();
- public abstract List<String> features();
- @Nullable public abstract Region region();
- @Nullable public abstract Image image();
- @Nullable public abstract Size size();
- public abstract String sizeSlug();
- @Nullable public abstract Networks networks();
- @Nullable public abstract Kernel kernel();
-
- @SerializedNames({ "id", "name", "memory", "vcpus", "disk", "locked", "created_at", "status", "backup_ids",
- "snapshot_ids", "features", "region", "image", "size", "size_slug", "networks", "kernel" })
- public static Droplet create(int id, String name, int memory, int vcpus, int disk, boolean locked, Date createdAt,
- Status status, List<Integer> backupIds, List<Integer> snapshotIds, List<String> features, Region region,
- Image image, Size size, String sizeSlug, Networks network, Kernel kernel) {
- return new AutoValue_Droplet(id, name, memory, vcpus, disk, locked, createdAt, status,
- backupIds == null ? ImmutableList.<Integer> of() : copyOf(backupIds),
- snapshotIds == null ? ImmutableList.<Integer> of() : copyOf(snapshotIds), copyOf(features), region, image,
- size, sizeSlug, network, kernel);
- }
-
- public Set<Networks.Address> getPublicAddresses() {
- return FluentIterable.from(concat(networks().ipv4(), networks().ipv6()))
- .filter(Networks.Predicates.publicNetworks())
- .toSet();
- }
-
- public Set<Networks.Address> getPrivateAddresses() {
- return FluentIterable.from(concat(networks().ipv4(), networks().ipv6()))
- .filter(Networks.Predicates.privateNetworks())
- .toSet();
- }
-
- Droplet() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/DropletCreate.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/DropletCreate.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/DropletCreate.java
deleted file mode 100644
index 06ed12b..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/DropletCreate.java
+++ /dev/null
@@ -1,66 +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.digitalocean2.domain;
-
-import static com.google.common.collect.ImmutableList.copyOf;
-
-import java.net.URI;
-import java.util.List;
-
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-
-@AutoValue
-public abstract class DropletCreate {
- public abstract Droplet droplet();
- public abstract Links links();
-
- @AutoValue
- public abstract static class Links {
-
- @AutoValue
- public abstract static class ActionLink {
- public abstract int id();
- public abstract String rel();
- public abstract URI href();
-
- @SerializedNames({"id", "rel", "href"})
- public static ActionLink create(int id, String rel, URI href) {
- return new AutoValue_DropletCreate_Links_ActionLink(id, rel, href);
- }
-
- ActionLink() {}
- }
-
- public abstract List<ActionLink> actions();
-
- @SerializedNames({ "actions" })
- public static Links create(List<ActionLink> actions) {
- return new AutoValue_DropletCreate_Links(copyOf(actions));
- }
-
- Links() {}
- }
-
- @SerializedNames({ "droplet", "links" })
- public static DropletCreate create(Droplet droplet, Links links) {
- return new AutoValue_DropletCreate(droplet, links);
- }
-
- DropletCreate() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Image.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Image.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Image.java
deleted file mode 100644
index dd2c3b6..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Image.java
+++ /dev/null
@@ -1,48 +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.digitalocean2.domain;
-
-import static com.google.common.collect.ImmutableList.copyOf;
-
-import java.util.Date;
-import java.util.List;
-
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-
-@AutoValue
-public abstract class Image {
-
- public abstract int id();
- public abstract String name();
- public abstract String type();
- public abstract String distribution();
- @Nullable public abstract String slug();
- public abstract boolean isPublic();
- public abstract List<String> regions();
- public abstract Date createdAt();
-
- @SerializedNames({ "id", "name", "type", "distribution", "slug", "public", "regions", "created_at" })
- public static Image create(int id, String name, String type, String distribution, String slug, boolean isPublic,
- List<String> regions, Date createdAt) {
- return new AutoValue_Image(id, name, type, distribution, slug, isPublic, copyOf(regions), createdAt);
- }
-
- Image() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Kernel.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Kernel.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Kernel.java
deleted file mode 100644
index 7eb5467..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Kernel.java
+++ /dev/null
@@ -1,35 +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.digitalocean2.domain;
-
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-
-@AutoValue
-public abstract class Kernel {
- public abstract int id();
- public abstract String name();
- public abstract String version();
-
- @SerializedNames({ "id", "name", "version" })
- public static Kernel create(int id, String name, String version) {
- return new AutoValue_Kernel(id, name, version);
- }
-
- Kernel() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Key.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Key.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Key.java
deleted file mode 100644
index c1a7ae3..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Key.java
+++ /dev/null
@@ -1,39 +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.digitalocean2.domain;
-
-import java.security.PublicKey;
-
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-
-@AutoValue
-public abstract class Key {
-
- public abstract int id();
- public abstract String name();
- public abstract String fingerprint();
- public abstract PublicKey publicKey();
-
- @SerializedNames({ "id", "name", "fingerprint", "public_key" })
- public static Key create(int id, String name, String fingerprint, PublicKey publicKey) {
- return new AutoValue_Key(id, name, fingerprint, publicKey);
- }
-
- Key() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Networks.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Networks.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Networks.java
deleted file mode 100644
index cd3dbd4..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Networks.java
+++ /dev/null
@@ -1,77 +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.digitalocean2.domain;
-
-import static com.google.common.collect.ImmutableList.copyOf;
-
-import java.util.List;
-
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-import com.google.common.base.Predicate;
-
-@AutoValue
-public abstract class Networks {
-
- @AutoValue
- public abstract static class Address {
- public abstract String ip();
- public abstract String netmask();
- public abstract String gateway();
- public abstract String type();
-
- @SerializedNames({ "ip_address", "netmask", "gateway", "type"})
- public static Address create(String ip, String netmask, String gateway, String type) {
- return new AutoValue_Networks_Address(ip, netmask, gateway, type);
- }
-
- Address() {}
- }
-
- public abstract List<Address> ipv4();
- public abstract List<Address> ipv6();
-
- @SerializedNames({ "v4", "v6" })
- public static Networks create(List<Address> ipv4, List<Address> ipv6) {
- return new AutoValue_Networks(copyOf(ipv4), copyOf(ipv6));
- }
-
- Networks() {}
-
- public static class Predicates {
-
- public static Predicate<Address> publicNetworks() {
- return new Predicate<Address>() {
- @Override
- public boolean apply(Address network) {
- return network.type().equals("public");
- }
- };
- }
-
- public static Predicate<Address> privateNetworks() {
- return new Predicate<Address>() {
- @Override
- public boolean apply(Address network) {
- return network.type().equals("private");
- }
- };
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/OperatingSystem.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/OperatingSystem.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/OperatingSystem.java
deleted file mode 100644
index 041ea20..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/OperatingSystem.java
+++ /dev/null
@@ -1,60 +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.digitalocean2.domain;
-
-import static com.google.common.base.Strings.nullToEmpty;
-import static java.util.regex.Pattern.compile;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import com.google.auto.value.AutoValue;
-
-/**
- * The operating system of an image.
- * <p>
- * This class parses the <code>name</code> string (e.g. "Ubuntu 12.10 x64") of the images and properly sets each field
- * to the right value.
- */
-@AutoValue
-public abstract class OperatingSystem {
-
- // Parse something like "12.10 x64" or "Ubuntu 12.10.1 x64" and matches the version and architecture
- private static final Pattern VERSION_PATTERN = compile("(?:[a-zA-Z\\s]*\\s+)?(\\d+(?:\\.?\\d+)*)?(?:\\s*(x\\d{2}))?.*");
- private static final String IS_64_BIT = "x64";
-
- public abstract Distribution distribution();
- public abstract String version();
- public abstract String arch();
-
- public static OperatingSystem create(String name, String distribution) {
- return new AutoValue_OperatingSystem(Distribution.fromValue(distribution), match(VERSION_PATTERN, name, 1),
- match(VERSION_PATTERN, name, 2));
- }
-
- public boolean is64bit() {
- return IS_64_BIT.equals(arch());
- }
-
- OperatingSystem() {}
-
- private static String match(final Pattern pattern, final String input, int group) {
- Matcher m = pattern.matcher(input);
- return m.find() ? nullToEmpty(m.group(group)) : "";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Region.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Region.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Region.java
deleted file mode 100644
index 2b3441c..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Region.java
+++ /dev/null
@@ -1,39 +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.digitalocean2.domain;
-
-import java.util.List;
-
-import org.jclouds.json.SerializedNames;
-import com.google.auto.value.AutoValue;
-
-@AutoValue
-public abstract class Region {
- public abstract String slug();
- public abstract String name();
- public abstract List<String> sizes();
- public abstract boolean available();
- public abstract List<String> features();
-
- @SerializedNames({ "slug", "name", "sizes", "available", "features" })
- public static Region create(String slug, String name, List<String> sizes, boolean available, List<String> features) {
- return new AutoValue_Region(slug, name, sizes, available, features);
- }
-
- Region() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Size.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Size.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Size.java
deleted file mode 100644
index 03d9492..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Size.java
+++ /dev/null
@@ -1,46 +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.digitalocean2.domain;
-
-import java.util.List;
-
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-
-@AutoValue
-public abstract class Size {
- public abstract String slug();
- public abstract boolean available();
- public abstract float transfer();
- public abstract float priceMonthly();
- public abstract float priceHourly();
- public abstract int memory();
- public abstract int vcpus();
- public abstract int disk();
- public abstract List<String> regions();
-
- @SerializedNames({ "slug", "available", "transfer", "price_monthly", "price_hourly", "memory", "vcpus", "disk",
- "regions" })
- public static Size create(String slug, boolean available, float transfer, float priceMonthly, float priceHourly,
- int memory, int vcpus, int disk, List<String> regions) {
- return new AutoValue_Size(slug, available, transfer, priceMonthly, priceHourly, memory, vcpus, disk, regions);
- }
-
- Size() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Snapshot.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Snapshot.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Snapshot.java
deleted file mode 100644
index 12daaa2..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/Snapshot.java
+++ /dev/null
@@ -1,47 +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.digitalocean2.domain;
-
-import java.util.Date;
-import java.util.List;
-
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-
-@AutoValue
-public abstract class Snapshot {
- public abstract int id();
- public abstract String name();
- public abstract String type();
- public abstract String distribution();
- @Nullable public abstract String slug();
- public abstract boolean isPublic();
- public abstract List<String> regions();
- public abstract int minDiskSize();
- public abstract Date createdAt();
-
- @SerializedNames({ "id", "name", "type", "distribution", "slug", "public", "regions", "min_disk_size", "created_at"})
- public static Snapshot create(int id, String name, String type, String distribution, String slug, boolean isPublic,
- List<String> regions, int minDiskSize, Date createdAt) {
- return new AutoValue_Snapshot(id, name, type, distribution, slug, isPublic, regions, minDiskSize, createdAt);
- }
-
- Snapshot() {}
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/internal/PaginatedCollection.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/internal/PaginatedCollection.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/internal/PaginatedCollection.java
deleted file mode 100644
index 8ca7b21..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/internal/PaginatedCollection.java
+++ /dev/null
@@ -1,111 +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.digitalocean2.domain.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.net.URI;
-import java.util.Iterator;
-import java.util.List;
-
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.json.SerializedNames;
-
-import com.google.auto.value.AutoValue;
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-
-/**
- * Base class for all collections that return paginated results.
- */
-public abstract class PaginatedCollection<T> extends IterableWithMarker<T> {
-
- @AutoValue
- public abstract static class Meta {
- public abstract long total();
-
- @SerializedNames({ "total" })
- public static Meta create(long total) {
- return new AutoValue_PaginatedCollection_Meta(total);
- }
-
- Meta() { }
- }
-
- @AutoValue
- public abstract static class Links {
-
- @AutoValue
- public abstract static class Pages {
- @Nullable public abstract URI first();
- @Nullable public abstract URI prev();
- @Nullable public abstract URI next();
- @Nullable public abstract URI last();
-
- @SerializedNames({ "first", "prev", "next", "last" })
- public static Pages create(URI first, URI next, URI prev, URI last) {
- return new AutoValue_PaginatedCollection_Links_Pages(first, next, prev, last);
- }
-
- Pages() { }
- }
-
- @Nullable public abstract Pages pages();
-
- @SerializedNames({ "pages" })
- public static Links create(Pages pages) {
- return new AutoValue_PaginatedCollection_Links(pages);
- }
-
- Links() { }
- }
-
- private final List<T> items;
- private final Meta meta;
- private final Links links;
-
- protected PaginatedCollection(List<T> items, Meta meta, Links links) {
- this.items = ImmutableList.copyOf(checkNotNull(items, "items cannot be null"));
- this.meta = checkNotNull(meta, "meta cannot be null");
- this.links = checkNotNull(links, "links cannot be null");
- }
-
- public List<T> items() {
- return items;
- }
-
- public Meta meta() {
- return meta;
- }
-
- public Links links() {
- return links;
- }
-
- @Override public Iterator<T> iterator() {
- return items.iterator();
- }
-
- @Override public Optional<Object> nextMarker() {
- if (links.pages() == null) {
- return Optional.absent();
- }
- return Optional.fromNullable((Object) links.pages().next());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/CreateDropletOptions.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/CreateDropletOptions.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/CreateDropletOptions.java
deleted file mode 100644
index 91fb090..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/CreateDropletOptions.java
+++ /dev/null
@@ -1,179 +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.digitalocean2.domain.options;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-
-import org.jclouds.http.HttpRequest;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.json.SerializedNames;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import com.google.auto.value.AutoValue;
-import com.google.common.collect.ImmutableSet;
-
-/**
- * Options to customize droplet creation.
- */
-public class CreateDropletOptions implements MapBinder {
-
- @Inject private BindToJsonPayload jsonBinder;
-
- private final Set<Integer> sshKeys;
- private final boolean backupsEnabled;
- private final boolean ipv6Enabled;
- private final boolean privateNetworking;
- private final String userData;
-
- private CreateDropletOptions(Set<Integer> sshKeys, boolean backupsEnabled, boolean ipv6Enabled,
- boolean privateNetworking, @Nullable String userData) {
- this.sshKeys = sshKeys;
- this.backupsEnabled = backupsEnabled;
- this.ipv6Enabled = ipv6Enabled;
- this.privateNetworking = privateNetworking;
- this.userData = userData;
- }
-
- @AutoValue
- abstract static class DropletRequest {
- abstract String name();
- abstract String region();
- abstract String size();
- abstract String image();
- abstract Set<Integer> sshKeys();
- abstract Boolean backups();
- abstract Boolean ipv6();
- abstract Boolean privateNetworking();
- @Nullable abstract String userData();
-
- @SerializedNames({"name", "region", "size", "image", "ssh_keys", "backups", "ipv6", "private_networking", "user_data"})
- static DropletRequest create(String name, String region, String size, String image, Set<Integer> sshKeys,
- Boolean backups, Boolean ipv6, Boolean privateNetworking, String userData) {
- return new AutoValue_CreateDropletOptions_DropletRequest(name, region, size, image, sshKeys, backups, ipv6,
- privateNetworking, userData);
- }
-
- DropletRequest() {}
- }
-
- @Override
- public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
- DropletRequest droplet = DropletRequest.create(checkNotNull(postParams.get("name"), "name parameter not present").toString(),
- checkNotNull(postParams.get("region"), "region parameter not present").toString(),
- checkNotNull(postParams.get("size"), "size parameter not present").toString(),
- checkNotNull(postParams.get("image"), "image parameter not present").toString(),
- sshKeys, backupsEnabled, ipv6Enabled, privateNetworking, userData);
-
- return bindToRequest(request, droplet);
- }
-
- @Override
- public <R extends HttpRequest> R bindToRequest(R request, Object input) {
- return jsonBinder.bindToRequest(request, input);
- }
-
- public Set<Integer> getSshKeys() {
- return sshKeys;
- }
-
- public Boolean getPrivateNetworking() {
- return privateNetworking;
- }
-
- public Boolean getBackupsEnabled() {
- return backupsEnabled;
- }
-
- public boolean isIpv6Enabled() {
- return ipv6Enabled;
- }
-
- public String getUserData() {
- return userData;
- }
-
- public static Builder builder() {
- return new Builder();
- }
-
- public static class Builder {
- private ImmutableSet.Builder<Integer> sshKeyIds = ImmutableSet.builder();
- private boolean backupsEnabled;
- private boolean ipv6Enabled;
- private boolean privateNetworking;
- private String userData;
-
- /**
- * Adds a set of ssh key ids to be added to the droplet.
- */
- public Builder addSshKeyIds(Iterable<Integer> sshKeyIds) {
- this.sshKeyIds.addAll(sshKeyIds);
- return this;
- }
-
- /**
- * Adds an ssh key id to be added to the droplet.
- */
- public Builder addSshKeyId(int sshKeyId) {
- this.sshKeyIds.add(sshKeyId);
- return this;
- }
-
- /**
- * Enables a private network interface if the region supports private
- * networking.
- */
- public Builder privateNetworking(boolean privateNetworking) {
- this.privateNetworking = privateNetworking;
- return this;
- }
-
- /**
- * Enabled backups for the droplet.
- */
- public Builder backupsEnabled(boolean backupsEnabled) {
- this.backupsEnabled = backupsEnabled;
- return this;
- }
-
- /**
- * Sets the user data for the droplet.
- */
- public Builder userData(String userData) {
- this.userData = userData;
- return this;
- }
-
- /**
- * Enables/disables IPv6 for the droplet.
- */
- public Builder ipv6Enabled(boolean ipv6Enabled) {
- this.ipv6Enabled = ipv6Enabled;
- return this;
- }
-
- public CreateDropletOptions build() {
- return new CreateDropletOptions(sshKeyIds.build(), backupsEnabled, ipv6Enabled, privateNetworking, userData);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/ImageListOptions.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/ImageListOptions.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/ImageListOptions.java
deleted file mode 100644
index 9f6415d..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/ImageListOptions.java
+++ /dev/null
@@ -1,74 +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.digitalocean2.domain.options;
-
-/**
- * Custom options to filter the list of images.
- */
-public class ImageListOptions extends ListOptions {
- public static final String TYPE_PARAM = "type";
- public static final String PRIVATE_PARAM = "private";
-
- /**
- * Configures the type of the images to be retrieved.
- */
- public ImageListOptions type(String type) {
- queryParameters.put(TYPE_PARAM, type);
- return this;
- }
-
- /**
- * Get the images of the current user.
- */
- public ImageListOptions privateImages(boolean privateImages) {
- queryParameters.put(PRIVATE_PARAM, String.valueOf(privateImages));
- return this;
- }
-
- @Override public ImageListOptions perPage(int perPage) {
- super.perPage(perPage);
- return this;
- }
-
- @Override public ImageListOptions page(int page) {
- super.page(page);
- return this;
- }
-
- public static final class Builder {
-
- /**
- * @see {@link ImageListOptions#type(String)}
- */
- public static ImageListOptions type(String type) {
- return new ImageListOptions().type(type);
- }
-
- /**
- * @see {@link ImageListOptions#privateImages(boolean)}
- */
- public static ImageListOptions privateImages(boolean privateImages) {
- return new ImageListOptions().privateImages(privateImages);
- }
- /**
- * @see {@link ImageListOptions#page(int)}
- */
- public static ImageListOptions page(int page) {
- return new ImageListOptions().page(page);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/ListOptions.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/ListOptions.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/ListOptions.java
deleted file mode 100644
index f859c1c..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/domain/options/ListOptions.java
+++ /dev/null
@@ -1,60 +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.digitalocean2.domain.options;
-
-import org.jclouds.http.options.BaseHttpRequestOptions;
-
-/**
- * Options to customize how paginated lists are returned.
- */
-public class ListOptions extends BaseHttpRequestOptions {
- public static final String PAGE_PARAM = "page";
- public static final String PER_PAGE_PARAM = "per_page";
-
- /**
- * Configures the number of entries to return in each page.
- */
- public ListOptions perPage(int perPage) {
- queryParameters.put(PER_PAGE_PARAM, String.valueOf(perPage));
- return this;
- }
-
- /**
- * Configures the number of the page to be returned.
- */
- public ListOptions page(int page) {
- queryParameters.put(PAGE_PARAM, String.valueOf(page));
- return this;
- }
-
- public static final class Builder {
-
- /**
- * @see {@link ListOptions#perPage(int)}
- */
- public static ListOptions perPage(int perPage) {
- return new ListOptions().perPage(perPage);
- }
-
- /**
- * @see {@link ListOptions#page(int)}
- */
- public static ListOptions page(int page) {
- return new ListOptions().page(page);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/exceptions/DigitalOcean2RateLimitExceededException.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/exceptions/DigitalOcean2RateLimitExceededException.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/exceptions/DigitalOcean2RateLimitExceededException.java
deleted file mode 100644
index fc54a7c..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/exceptions/DigitalOcean2RateLimitExceededException.java
+++ /dev/null
@@ -1,81 +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.digitalocean2.exceptions;
-
-import static org.jclouds.digitalocean2.handlers.RateLimitRetryHandler.millisUntilNextAvailableRequest;
-
-import org.jclouds.http.HttpResponse;
-import org.jclouds.rest.RateLimitExceededException;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Multimaps;
-
-/**
- * Provides detailed information for rate limit exceptions.
- */
-@Beta
-public class DigitalOcean2RateLimitExceededException extends RateLimitExceededException {
- private static final long serialVersionUID = 1L;
- private static final String RATE_LIMIT_HEADER_PREFIX = "RateLimit-";
-
- private Integer totalRequestsPerHour;
- private Integer remainingRequests;
- private Long timeToNextAvailableRequest;
-
- public DigitalOcean2RateLimitExceededException(HttpResponse response) {
- super(response.getStatusLine() + "\n" + rateLimitHeaders(response));
- parseRateLimitInfo(response);
- }
-
- public DigitalOcean2RateLimitExceededException(HttpResponse response, Throwable cause) {
- super(response.getStatusLine() + "\n" + rateLimitHeaders(response), cause);
- parseRateLimitInfo(response);
- }
-
- public Integer totalRequestsPerHour() {
- return totalRequestsPerHour;
- }
-
- public Integer remainingRequests() {
- return remainingRequests;
- }
-
- public Long timeToNextAvailableRequest() {
- return timeToNextAvailableRequest;
- }
-
- private void parseRateLimitInfo(HttpResponse response) {
- String limit = response.getFirstHeaderOrNull("RateLimit-Limit");
- String remaining = response.getFirstHeaderOrNull("RateLimit-Remaining");
- String reset = response.getFirstHeaderOrNull("RateLimit-Reset");
-
- totalRequestsPerHour = limit == null ? null : Integer.valueOf(limit);
- remainingRequests = remaining == null ? null : Integer.valueOf(remaining);
- timeToNextAvailableRequest = reset == null ? null : millisUntilNextAvailableRequest(Long.valueOf(reset));
- }
-
- private static Multimap<String, String> rateLimitHeaders(HttpResponse response) {
- return Multimaps.filterKeys(response.getHeaders(), new Predicate<String>() {
- @Override
- public boolean apply(String input) {
- return input.startsWith(RATE_LIMIT_HEADER_PREFIX);
- }
- });
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a6044372/digitalocean2/src/main/java/org/jclouds/digitalocean2/features/ActionApi.java
----------------------------------------------------------------------
diff --git a/digitalocean2/src/main/java/org/jclouds/digitalocean2/features/ActionApi.java b/digitalocean2/src/main/java/org/jclouds/digitalocean2/features/ActionApi.java
deleted file mode 100644
index 4a7a8bd..0000000
--- a/digitalocean2/src/main/java/org/jclouds/digitalocean2/features/ActionApi.java
+++ /dev/null
@@ -1,113 +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.digitalocean2.features;
-
-import java.beans.ConstructorProperties;
-import java.io.Closeable;
-import java.net.URI;
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404;
-import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.digitalocean2.DigitalOcean2Api;
-import org.jclouds.digitalocean2.domain.Action;
-import org.jclouds.digitalocean2.domain.internal.PaginatedCollection;
-import org.jclouds.digitalocean2.domain.options.ListOptions;
-import org.jclouds.digitalocean2.functions.BaseToPagedIterable;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.json.Json;
-import org.jclouds.oauth.v2.filters.OAuthFilter;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.inject.TypeLiteral;
-
-/**
- * Provides access to Actions via the REST API.
- *
- * @see <a href="https://developers.digitalocean.com/v2/#actions"/>
- * @see ActionApi
- */
-@Path("/actions")
-@RequestFilters(OAuthFilter.class)
-@Consumes(MediaType.APPLICATION_JSON)
-public interface ActionApi extends Closeable {
-
- @Named("action:list")
- @GET
- @ResponseParser(ParseActions.class)
- @Transform(ParseActions.ToPagedIterable.class)
- @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
- PagedIterable<Action> list();
-
- @Named("action:list")
- @GET
- @ResponseParser(ParseActions.class)
- @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class)
- IterableWithMarker<Action> list(ListOptions options);
-
- static final class ParseActions extends ParseJson<ParseActions.Actions> {
- @Inject ParseActions(Json json) {
- super(json, TypeLiteral.get(Actions.class));
- }
-
- private static class Actions extends PaginatedCollection<Action> {
- @ConstructorProperties({ "actions", "meta", "links" })
- public Actions(List<Action> items, Meta meta, Links links) {
- super(items, meta, links);
- }
- }
-
- private static class ToPagedIterable extends BaseToPagedIterable<Action, ListOptions> {
- @Inject ToPagedIterable(DigitalOcean2Api api, Function<URI, ListOptions> linkToOptions) {
- super(api, linkToOptions);
- }
-
- @Override
- protected IterableWithMarker<Action> fetchPageUsingOptions(ListOptions options, Optional<Object> arg0) {
- return api.actionApi().list(options);
- }
- }
- }
-
- @Named("action:get")
- @GET
- @SelectJson("action")
- @Path("/{id}")
- @Fallback(NullOnNotFoundOr404.class)
- @Nullable
- Action get(@PathParam("id") int id);
-
-}
-