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); - -} -
