http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java b/apis/chef/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java deleted file mode 100644 index 2fc4201..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java +++ /dev/null @@ -1,208 +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.chef.config; - -import static com.google.common.base.Suppliers.compose; -import static com.google.common.base.Suppliers.memoizeWithExpiration; -import static com.google.common.base.Throwables.propagate; -import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL; -import static org.jclouds.chef.config.ChefProperties.CHEF_VALIDATOR_CREDENTIAL; -import static org.jclouds.chef.config.ChefProperties.CHEF_VALIDATOR_NAME; -import static org.jclouds.crypto.Pems.privateKeySpec; - -import java.io.IOException; -import java.security.PrivateKey; -import java.security.spec.InvalidKeySpecException; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.chef.domain.Client; -import org.jclouds.chef.functions.BootstrapConfigForGroup; -import org.jclouds.chef.functions.ClientForGroup; -import org.jclouds.chef.functions.RunListForGroup; -import org.jclouds.chef.handlers.ChefApiErrorRetryHandler; -import org.jclouds.chef.handlers.ChefErrorHandler; -import org.jclouds.crypto.Crypto; -import org.jclouds.crypto.Pems; -import org.jclouds.date.DateService; -import org.jclouds.date.TimeStamp; -import org.jclouds.domain.Credentials; -import org.jclouds.domain.JsonBall; -import org.jclouds.http.HttpErrorHandler; -import org.jclouds.http.HttpRetryHandler; -import org.jclouds.http.annotation.ClientError; -import org.jclouds.http.annotation.Redirection; -import org.jclouds.http.annotation.ServerError; -import org.jclouds.rest.ConfiguresHttpApi; -import org.jclouds.rest.config.HttpApiModule; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Charsets; -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.base.Supplier; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.google.common.io.ByteSource; -import com.google.inject.ConfigurationException; -import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.Provides; -import com.google.inject.name.Names; - -/** - * Configures the Chef connection. - */ -@ConfiguresHttpApi -public abstract class BaseChefHttpApiModule<S> extends HttpApiModule<S> { - - @Provides - @TimeStamp - protected String provideTimeStamp(@TimeStamp Supplier<String> cache) { - return cache.get(); - } - - /** - * borrowing concurrency code to ensure that caching takes place properly - */ - @Provides - @TimeStamp - Supplier<String> provideTimeStampCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds, final DateService dateService) { - return memoizeWithExpiration(new Supplier<String>() { - @Override - public String get() { - return dateService.iso8601SecondsDateFormat(); - } - }, seconds, TimeUnit.SECONDS); - } - - // TODO: potentially change this - @Provides - @Singleton - public Supplier<PrivateKey> supplyKey(final LoadingCache<Credentials, PrivateKey> keyCache, - @org.jclouds.location.Provider final Supplier<Credentials> creds) { - return compose(new Function<Credentials, PrivateKey>() { - @Override - public PrivateKey apply(Credentials in) { - return keyCache.getUnchecked(in); - } - }, creds); - } - - @Provides - @Singleton - LoadingCache<Credentials, PrivateKey> privateKeyCache(PrivateKeyForCredentials loader) { - // throw out the private key related to old credentials - return CacheBuilder.newBuilder().maximumSize(2).build(loader); - } - - /** - * it is relatively expensive to extract a private key from a PEM. cache the - * relationship between current credentials so that the private key is only - * recalculated once. - */ - @VisibleForTesting - @Singleton - private static class PrivateKeyForCredentials extends CacheLoader<Credentials, PrivateKey> { - private final Crypto crypto; - - @Inject - private PrivateKeyForCredentials(Crypto crypto) { - this.crypto = crypto; - } - - @Override - public PrivateKey load(Credentials in) { - try { - return crypto.rsaKeyFactory().generatePrivate( - privateKeySpec(ByteSource.wrap(in.credential.getBytes(Charsets.UTF_8)))); - } catch (InvalidKeySpecException e) { - throw propagate(e); - } catch (IOException e) { - throw propagate(e); - } - } - } - - @Provides - @Singleton - @Validator - public Optional<String> provideValidatorName(Injector injector) { - // Named properties can not be injected as optional here, so let's use the - // injector to bypass it - Key<String> key = Key.get(String.class, Names.named(CHEF_VALIDATOR_NAME)); - try { - return Optional.<String> of(injector.getInstance(key)); - } catch (ConfigurationException ex) { - return Optional.<String> absent(); - } - } - - @Provides - @Singleton - @Validator - public Optional<PrivateKey> provideValidatorCredential(Crypto crypto, Injector injector) - throws InvalidKeySpecException, IOException { - // Named properties can not be injected as optional here, so let's use the - // injector to bypass it - Key<String> key = Key.get(String.class, Names.named(CHEF_VALIDATOR_CREDENTIAL)); - try { - String validatorCredential = injector.getInstance(key); - PrivateKey validatorKey = crypto.rsaKeyFactory().generatePrivate( - Pems.privateKeySpec(ByteSource.wrap(validatorCredential.getBytes(Charsets.UTF_8)))); - return Optional.<PrivateKey> of(validatorKey); - } catch (ConfigurationException ex) { - return Optional.<PrivateKey> absent(); - } - } - - @Provides - @Singleton - CacheLoader<String, List<String>> runListForGroup(RunListForGroup runListForGroup) { - return CacheLoader.from(runListForGroup); - } - - @Provides - @Singleton - CacheLoader<String, ? extends JsonBall> bootstrapConfigForGroup(BootstrapConfigForGroup bootstrapConfigForGroup) { - return CacheLoader.from(bootstrapConfigForGroup); - } - - @Provides - @Singleton - CacheLoader<String, Client> groupToClient(ClientForGroup clientForGroup) { - return CacheLoader.from(clientForGroup); - } - - @Override - protected void bindErrorHandlers() { - bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ChefErrorHandler.class); - bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ChefErrorHandler.class); - bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ChefErrorHandler.class); - } - - @Override - protected void bindRetryHandlers() { - bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(ChefApiErrorRetryHandler.class); - } - -}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java b/apis/chef/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java deleted file mode 100644 index a5fd231..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java +++ /dev/null @@ -1,121 +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.chef.config; - -import static org.jclouds.chef.config.ChefProperties.CHEF_GEM_SYSTEM_VERSION; -import static org.jclouds.chef.config.ChefProperties.CHEF_UPDATE_GEMS; -import static org.jclouds.chef.config.ChefProperties.CHEF_UPDATE_GEM_SYSTEM; -import static org.jclouds.chef.config.ChefProperties.CHEF_USE_OMNIBUS; -import static org.jclouds.chef.config.ChefProperties.CHEF_VERSION; - -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.scriptbuilder.domain.Statement; -import org.jclouds.scriptbuilder.domain.StatementList; -import org.jclouds.scriptbuilder.statements.chef.InstallChefGems; -import org.jclouds.scriptbuilder.statements.chef.InstallChefUsingOmnibus; -import org.jclouds.scriptbuilder.statements.ruby.InstallRuby; -import org.jclouds.scriptbuilder.statements.ruby.InstallRubyGems; - -import com.google.common.base.Optional; -import com.google.inject.AbstractModule; -import com.google.inject.Inject; -import com.google.inject.Provides; - -/** - * Provides bootstrap configuration for nodes. - */ -public class ChefBootstrapModule extends AbstractModule { - - @Provides - @Named("installChefGems") - @Singleton - Statement installChefGems(BootstrapProperties bootstrapProperties) { - InstallRubyGems installRubyGems = InstallRubyGems.builder() - .version(bootstrapProperties.gemSystemVersion().orNull()) - .updateSystem(bootstrapProperties.updateGemSystem(), bootstrapProperties.gemSystemVersion().orNull()) - .updateExistingGems(bootstrapProperties.updateGems()) // - .build(); - - Statement installChef = InstallChefGems.builder().version(bootstrapProperties.chefVersion().orNull()).build(); - - return new StatementList(InstallRuby.builder().build(), installRubyGems, installChef); - } - - @Provides - @Named("installChefOmnibus") - @Singleton - Statement installChefUsingOmnibus() { - return new InstallChefUsingOmnibus(); - } - - @Provides - @InstallChef - @Singleton - Statement installChef(BootstrapProperties bootstrapProperties, @Named("installChefGems") Statement installChefGems, - @Named("installChefOmnibus") Statement installChefOmnibus) { - return bootstrapProperties.useOmnibus() ? installChefOmnibus : installChefGems; - } - - @Singleton - private static class BootstrapProperties { - @Named(CHEF_VERSION) - @Inject(optional = true) - private String chefVersionProperty; - - @Named(CHEF_GEM_SYSTEM_VERSION) - @Inject(optional = true) - private String gemSystemVersionProperty; - - @Named(CHEF_UPDATE_GEM_SYSTEM) - @Inject - private String updateGemSystemProeprty; - - @Named(CHEF_UPDATE_GEMS) - @Inject - private String updateGemsProperty; - - @Named(CHEF_USE_OMNIBUS) - @Inject - private String useOmnibus; - - public Optional<String> chefVersion() { - return Optional.fromNullable(chefVersionProperty); - } - - public Optional<String> gemSystemVersion() { - return Optional.fromNullable(gemSystemVersionProperty); - } - - public boolean updateGemSystem() { - return Boolean.parseBoolean(updateGemSystemProeprty); - } - - public boolean updateGems() { - return Boolean.parseBoolean(updateGemsProperty); - } - - public boolean useOmnibus() { - return Boolean.parseBoolean(useOmnibus); - } - } - - @Override - protected void configure() { - } -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/config/ChefHttpApiModule.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/ChefHttpApiModule.java b/apis/chef/src/main/java/org/jclouds/chef/config/ChefHttpApiModule.java deleted file mode 100644 index ffd3b0b..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/config/ChefHttpApiModule.java +++ /dev/null @@ -1,28 +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.chef.config; - -import org.jclouds.chef.ChefApi; -import org.jclouds.rest.ConfiguresHttpApi; - -/** - * Configures the Chef connection. - */ -@ConfiguresHttpApi -public class ChefHttpApiModule extends BaseChefHttpApiModule<ChefApi> { - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java b/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java deleted file mode 100644 index c214236..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java +++ /dev/null @@ -1,321 +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.chef.config; - -import static com.google.common.base.Objects.equal; -import static com.google.common.base.Objects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkState; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.lang.reflect.Type; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.security.spec.InvalidKeySpecException; -import java.util.Map; -import java.util.Set; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.jclouds.chef.domain.DatabagItem; -import org.jclouds.chef.functions.ParseCookbookDefinitionFromJson; -import org.jclouds.chef.functions.ParseCookbookVersionsV09FromJson; -import org.jclouds.chef.functions.ParseCookbookVersionsV10FromJson; -import org.jclouds.chef.functions.ParseKeySetFromJson; -import org.jclouds.chef.suppliers.ChefVersionSupplier; -import org.jclouds.crypto.Crypto; -import org.jclouds.crypto.Pems; -import org.jclouds.http.HttpResponse; -import org.jclouds.json.config.GsonModule.DateAdapter; -import org.jclouds.json.config.GsonModule.Iso8601DateAdapter; -import org.jclouds.json.internal.NullFilteringTypeAdapterFactories.MapTypeAdapterFactory; -import org.jclouds.json.internal.NullHackJsonLiteralAdapter; - -import com.google.common.base.Charsets; -import com.google.common.base.Function; -import com.google.common.base.Objects; -import com.google.common.base.Throwables; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; -import com.google.common.io.ByteSource; -import com.google.gson.Gson; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonSyntaxException; -import com.google.gson.TypeAdapter; -import com.google.gson.internal.JsonReaderInternalAccess; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonWriter; -import com.google.inject.AbstractModule; -import com.google.inject.ImplementedBy; -import com.google.inject.Provides; - -public class ChefParserModule extends AbstractModule { - @ImplementedBy(PrivateKeyAdapterImpl.class) - public interface PrivateKeyAdapter extends JsonDeserializer<PrivateKey> { - - } - - @Singleton - public static class PrivateKeyAdapterImpl implements PrivateKeyAdapter { - private final Crypto crypto; - - @Inject - PrivateKeyAdapterImpl(Crypto crypto) { - this.crypto = crypto; - } - - @Override - public PrivateKey deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - String keyText = json.getAsString().replaceAll("\\n", "\n"); - try { - return crypto.rsaKeyFactory().generatePrivate( - Pems.privateKeySpec(ByteSource.wrap(keyText.getBytes(Charsets.UTF_8)))); - } catch (UnsupportedEncodingException e) { - Throwables.propagate(e); - return null; - } catch (InvalidKeySpecException e) { - Throwables.propagate(e); - return null; - } catch (IOException e) { - Throwables.propagate(e); - return null; - } - } - } - - @ImplementedBy(PublicKeyAdapterImpl.class) - public interface PublicKeyAdapter extends JsonDeserializer<PublicKey> { - - } - - @Singleton - public static class PublicKeyAdapterImpl implements PublicKeyAdapter { - private final Crypto crypto; - - @Inject - PublicKeyAdapterImpl(Crypto crypto) { - this.crypto = crypto; - } - - @Override - public PublicKey deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - String keyText = json.getAsString().replaceAll("\\n", "\n"); - try { - return crypto.rsaKeyFactory().generatePublic( - Pems.publicKeySpec(ByteSource.wrap(keyText.getBytes(Charsets.UTF_8)))); - } catch (UnsupportedEncodingException e) { - Throwables.propagate(e); - return null; - } catch (InvalidKeySpecException e) { - Throwables.propagate(e); - return null; - } catch (IOException e) { - Throwables.propagate(e); - return null; - } - } - } - - @ImplementedBy(X509CertificateAdapterImpl.class) - public interface X509CertificateAdapter extends JsonDeserializer<X509Certificate> { - - } - - @Singleton - public static class X509CertificateAdapterImpl implements X509CertificateAdapter { - private final Crypto crypto; - - @Inject - X509CertificateAdapterImpl(Crypto crypto) { - this.crypto = crypto; - } - - @Override - public X509Certificate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - String keyText = json.getAsString().replaceAll("\\n", "\n"); - try { - return Pems.x509Certificate(ByteSource.wrap(keyText.getBytes(Charsets.UTF_8)), - crypto.certFactory()); - } catch (UnsupportedEncodingException e) { - Throwables.propagate(e); - return null; - } catch (IOException e) { - Throwables.propagate(e); - return null; - } catch (CertificateException e) { - Throwables.propagate(e); - return null; - } - } - } - - /** - * writes or reads the literal directly - */ - @Singleton - public static class DataBagItemAdapter extends NullHackJsonLiteralAdapter<DatabagItem> { - final Gson gson = new Gson(); - - @Override - protected DatabagItem createJsonLiteralFromRawJson(String text) { - IdHolder idHolder = gson.fromJson(text, IdHolder.class); - checkState(idHolder.id != null, - "databag item must be a json hash ex. {\"id\":\"item1\",\"my_key\":\"my_data\"}; was %s", text); - text = text.replaceFirst(String.format("\\{\"id\"[ ]?:\"%s\",", idHolder.id), "{"); - return new DatabagItem(idHolder.id, text); - } - - @Override - protected String toString(DatabagItem value) { - String text = value.toString(); - - try { - IdHolder idHolder = gson.fromJson(text, IdHolder.class); - if (idHolder.id == null) { - text = text.replaceFirst("\\{", String.format("{\"id\":\"%s\",", value.getId())); - } else { - checkArgument(value.getId().equals(idHolder.id), - "incorrect id in databagItem text, should be %s: was %s", value.getId(), idHolder.id); - } - } catch (JsonSyntaxException e) { - throw new IllegalArgumentException(e); - } - - return text; - } - } - - private static class IdHolder { - private String id; - } - - // The NullFilteringTypeAdapterFactories.MapTypeAdapter class is final. Do - // the same logic here - private static final class KeepLastRepeatedKeyMapTypeAdapter<K, V> extends TypeAdapter<Map<K, V>> { - - protected final TypeAdapter<K> keyAdapter; - protected final TypeAdapter<V> valueAdapter; - - protected KeepLastRepeatedKeyMapTypeAdapter(TypeAdapter<K> keyAdapter, TypeAdapter<V> valueAdapter) { - this.keyAdapter = keyAdapter; - this.valueAdapter = valueAdapter; - nullSafe(); - } - - public void write(JsonWriter out, Map<K, V> value) throws IOException { - if (value == null) { - out.nullValue(); - return; - } - out.beginObject(); - for (Map.Entry<K, V> element : value.entrySet()) { - out.name(String.valueOf(element.getKey())); - valueAdapter.write(out, element.getValue()); - } - out.endObject(); - } - - public Map<K, V> read(JsonReader in) throws IOException { - Map<K, V> result = Maps.newHashMap(); - in.beginObject(); - while (in.hasNext()) { - JsonReaderInternalAccess.INSTANCE.promoteNameToValue(in); - K name = keyAdapter.read(in); - V value = valueAdapter.read(in); - if (value != null) { - // If there are repeated keys, overwrite them to only keep the last one - result.put(name, value); - } - } - in.endObject(); - return ImmutableMap.copyOf(result); - } - - @Override - public int hashCode() { - return Objects.hashCode(keyAdapter, valueAdapter); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null || getClass() != obj.getClass()) - return false; - KeepLastRepeatedKeyMapTypeAdapter<?, ?> that = KeepLastRepeatedKeyMapTypeAdapter.class.cast(obj); - return equal(this.keyAdapter, that.keyAdapter) && equal(this.valueAdapter, that.valueAdapter); - } - - @Override - public String toString() { - return toStringHelper(this).add("keyAdapter", keyAdapter).add("valueAdapter", valueAdapter).toString(); - } - } - - public static class KeepLastRepeatedKeyMapTypeAdapterFactory extends MapTypeAdapterFactory { - - public KeepLastRepeatedKeyMapTypeAdapterFactory() { - super(Map.class); - } - - @SuppressWarnings("unchecked") - @Override - protected <K, V, T> TypeAdapter<T> newAdapter(TypeAdapter<K> keyAdapter, TypeAdapter<V> valueAdapter) { - return (TypeAdapter<T>) new KeepLastRepeatedKeyMapTypeAdapter<K, V>(keyAdapter, valueAdapter); - } - } - - @Provides - @Singleton - public Map<Type, Object> provideCustomAdapterBindings(DataBagItemAdapter adapter, PrivateKeyAdapter privateAdapter, - PublicKeyAdapter publicAdapter, X509CertificateAdapter certAdapter) { - return ImmutableMap.<Type, Object> of(DatabagItem.class, adapter, PrivateKey.class, privateAdapter, - PublicKey.class, publicAdapter, X509Certificate.class, certAdapter); - } - - @Provides - @Singleton - @CookbookParser - public Function<HttpResponse, Set<String>> provideCookbookDefinitionAdapter(ChefVersionSupplier chefVersionSupplier, - ParseCookbookDefinitionFromJson v10parser, ParseKeySetFromJson v09parser) { - return chefVersionSupplier.get() >= 10 ? v10parser : v09parser; - } - - @Provides - @Singleton - @CookbookVersionsParser - public Function<HttpResponse, Set<String>> provideCookbookDefinitionAdapter(ChefVersionSupplier chefVersionSupplier, - ParseCookbookVersionsV10FromJson v10parser, ParseCookbookVersionsV09FromJson v09parser) { - return chefVersionSupplier.get() >= 10 ? v10parser : v09parser; - } - - @Override - protected void configure() { - bind(DateAdapter.class).to(Iso8601DateAdapter.class); - bind(MapTypeAdapterFactory.class).to(KeepLastRepeatedKeyMapTypeAdapterFactory.class); - } -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/config/ChefProperties.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/ChefProperties.java b/apis/chef/src/main/java/org/jclouds/chef/config/ChefProperties.java deleted file mode 100644 index 211b5d6..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/config/ChefProperties.java +++ /dev/null @@ -1,110 +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.chef.config; - - -/** - * Configuration properties and constants used in Chef connections. - */ -public interface ChefProperties { - - /** - * The name of the Chef logger. - */ - public static final String CHEF_LOGGER = "jclouds.chef"; - - /** - * Databag that holds chef bootstrap hints, should be a json ball in the - * following format: - * <p> - * {"tag":{"run_list":["recipe[apache2]"]}} - */ - public static final String CHEF_BOOTSTRAP_DATABAG = "chef.bootstrap-databag"; - - /** - * The name of the validator client used to allow nodes to autoregister in - * the Chef server. - * <p> - * This property must be set prior to running the - * {@link ChefService#createBootstrapScriptForGroup(String)} method. - */ - public static final String CHEF_VALIDATOR_NAME = "chef.validator-name"; - - /** - * The credential of the validator client used to allow nodes to autoregister - * in the Chef server. - * <p> - * This property must be set prior to running the - * {@link ChefService#createBootstrapScriptForGroup(String)} method. - */ - public static final String CHEF_VALIDATOR_CREDENTIAL = "chef.validator-credential"; - - /** - * The version of the Chef gem to install when bootstrapping nodes. - * <p> - * If this property is not set, by default the latest available Chef gem will - * be installed. The values can be fixed versions such as '0.10.8' or - * constrained values such as '>= 0.10.8'. - * <p> - * This property must be set prior to running the - * {@link ChefService#createBootstrapScriptForGroup(String)} method. - */ - public static final String CHEF_VERSION = "chef.version"; - - /** - * Boolean property. Default (false). - * <p> - * When bootstrapping a node, forces a gem system update before installing - * the Chef gems. - * <p> - * This property must be set prior to running the - * {@link ChefService#createBootstrapScriptForGroup(String)} method. - */ - public static final String CHEF_UPDATE_GEM_SYSTEM = "chef.update-gem-system"; - - /** - * To be used in conjunction with {@link #CHEF_UPDATE_GEM_SYSTEM}. This - * property will force the version of RubyGems to update the system to. - * <p> - * This property must be set prior to running the - * {@link ChefService#createBootstrapScriptForGroup(String)} method. - */ - public static final String CHEF_GEM_SYSTEM_VERSION = "chef.gem-system-version"; - - /** - * Boolean property. Default (false). - * <p> - * When bootstrapping a node, updates the existing gems before installing - * Chef. - * <p> - * This property must be set prior to running the - * {@link ChefService#createBootstrapScriptForGroup(String)} method. - */ - public static final String CHEF_UPDATE_GEMS = "chef.update-gems"; - - /** - * Boolean property. Default (true). - * <p> - * When bootstrapping a node, install the Chef client using the Omnibus - * installer. - * <p> - * This property must be set prior to running the - * {@link ChefService#createBootstrapScriptForGroup(String)} method. - */ - public static final String CHEF_USE_OMNIBUS = "chef.use-omnibus"; - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/config/CookbookParser.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/CookbookParser.java b/apis/chef/src/main/java/org/jclouds/chef/config/CookbookParser.java deleted file mode 100644 index 34eedde..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/config/CookbookParser.java +++ /dev/null @@ -1,41 +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.chef.config; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import javax.inject.Qualifier; - -/** - * Used to configure the cookbook Json parser. - * <p> - * Chef Server version 0.9 and 0.10 return a different Json when rquesting the - * cookbook definitions. This annotation can be used to setup the cookbook - * parser. - */ -@Target({ METHOD, PARAMETER, FIELD }) -@Retention(RUNTIME) -@Qualifier -public @interface CookbookParser { - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/config/CookbookVersionsParser.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/CookbookVersionsParser.java b/apis/chef/src/main/java/org/jclouds/chef/config/CookbookVersionsParser.java deleted file mode 100644 index c946917..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/config/CookbookVersionsParser.java +++ /dev/null @@ -1,41 +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.chef.config; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import javax.inject.Qualifier; - -/** - * Used to configure the cookbook versions Json parser. - * <p> - * Chef Server version 0.9 and 0.10 return a different Json when rquesting the - * cookbook versions. This annotation can be used to setup the cookbook versions - * parser. - */ -@Target({ METHOD, PARAMETER, FIELD }) -@Retention(RUNTIME) -@Qualifier -public @interface CookbookVersionsParser { - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/config/InstallChef.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/InstallChef.java b/apis/chef/src/main/java/org/jclouds/chef/config/InstallChef.java deleted file mode 100644 index d40ae91..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/config/InstallChef.java +++ /dev/null @@ -1,37 +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.chef.config; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import javax.inject.Qualifier; - -/** - * Used to configure the Chef install script. - */ -@Target({ METHOD, PARAMETER, FIELD }) -@Retention(RUNTIME) -@Qualifier -public @interface InstallChef { - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/config/Validator.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/config/Validator.java b/apis/chef/src/main/java/org/jclouds/chef/config/Validator.java deleted file mode 100644 index 99825d8..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/config/Validator.java +++ /dev/null @@ -1,40 +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.chef.config; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import javax.inject.Qualifier; - -/** - * Used to configure the validator client information. - * <p> - * In a Chef server it must be only one validator client. This client is used by - * new nodes to autoregister themselves in the Chef server. - */ -@Target({ METHOD, PARAMETER, FIELD }) -@Retention(RUNTIME) -@Qualifier -public @interface Validator { - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/domain/Attribute.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/domain/Attribute.java b/apis/chef/src/main/java/org/jclouds/chef/domain/Attribute.java deleted file mode 100644 index 34be6b7..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/domain/Attribute.java +++ /dev/null @@ -1,235 +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.chef.domain; - -import static org.jclouds.chef.util.CollectionUtils.copyOfOrEmpty; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.beans.ConstructorProperties; -import java.util.List; -import java.util.Set; - -import org.jclouds.domain.JsonBall; -import org.jclouds.javax.annotation.Nullable; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.gson.annotations.SerializedName; - -/** - * An attribute in a cookbook metadata. - */ -public class Attribute { - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private String required; - private boolean calculated; - private ImmutableSet.Builder<String> choice = ImmutableSet.builder(); - private JsonBall defaultValue; - private String type; - private ImmutableList.Builder<String> recipes = ImmutableList.builder(); - private String displayName; - private String description; - - public Builder required(String required) { - this.required = checkNotNull(required, "required"); - return this; - } - - public Builder calculated(boolean calculated) { - this.calculated = calculated; - return this; - } - - public Builder choice(String choice) { - this.choice.add(checkNotNull(choice, "choice")); - return this; - } - - public Builder choices(Iterable<String> choices) { - this.choice.addAll(checkNotNull(choices, "choices")); - return this; - } - - public Builder defaultValue(JsonBall defaultValue) { - this.defaultValue = checkNotNull(defaultValue, "defaultValue"); - return this; - } - - public Builder type(String type) { - this.type = checkNotNull(type, "type"); - return this; - } - - public Builder recipe(String recipe) { - this.recipes.add(checkNotNull(recipe, "recipe")); - return this; - } - - public Builder recipes(Iterable<String> recipes) { - this.recipes.addAll(checkNotNull(recipes, "recipes")); - return this; - } - - public Builder displayName(String displayName) { - this.displayName = checkNotNull(displayName, "displayName"); - return this; - } - - public Builder description(String description) { - this.description = checkNotNull(description, "description"); - return this; - } - - public Attribute build() { - return new Attribute(required, calculated, choice.build(), defaultValue, type, recipes.build(), displayName, - description); - } - } - - private final String required; - private final boolean calculated; - private final Set<String> choice; - @SerializedName("default") - private final JsonBall defaultValue; - private final String type; - private final List<String> recipes; - @SerializedName("display_name") - private final String displayName; - private final String description; - - @ConstructorProperties({ "required", "calculated", "choice", "default", "type", "recipes", "display_name", - "description" }) - protected Attribute(String required, boolean calculated, @Nullable Set<String> choice, JsonBall defaultValue, - String type, @Nullable List<String> recipes, String displayName, String description) { - this.required = required; - this.calculated = calculated; - this.choice = copyOfOrEmpty(choice); - this.defaultValue = defaultValue; - this.type = type; - this.recipes = copyOfOrEmpty(recipes); - this.displayName = displayName; - this.description = description; - } - - public String getRequired() { - return required; - } - - public boolean isCalculated() { - return calculated; - } - - public Set<String> getChoice() { - return choice; - } - - public JsonBall getDefaultValue() { - return defaultValue; - } - - public String getType() { - return type; - } - - public List<String> getRecipes() { - return recipes; - } - - public String getDisplayName() { - return displayName; - } - - public String getDescription() { - return description; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (calculated ? 1231 : 1237); - result = prime * result + ((choice == null) ? 0 : choice.hashCode()); - result = prime * result + ((defaultValue == null) ? 0 : defaultValue.hashCode()); - result = prime * result + ((description == null) ? 0 : description.hashCode()); - result = prime * result + ((displayName == null) ? 0 : displayName.hashCode()); - result = prime * result + ((recipes == null) ? 0 : recipes.hashCode()); - result = prime * result + ((required == null) ? 0 : required.hashCode()); - result = prime * result + ((type == null) ? 0 : type.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Attribute other = (Attribute) obj; - if (calculated != other.calculated) - return false; - if (choice == null) { - if (other.choice != null) - return false; - } else if (!choice.equals(other.choice)) - return false; - if (defaultValue == null) { - if (other.defaultValue != null) - return false; - } else if (!defaultValue.equals(other.defaultValue)) - return false; - if (description == null) { - if (other.description != null) - return false; - } else if (!description.equals(other.description)) - return false; - if (displayName == null) { - if (other.displayName != null) - return false; - } else if (!displayName.equals(other.displayName)) - return false; - if (recipes == null) { - if (other.recipes != null) - return false; - } else if (!recipes.equals(other.recipes)) - return false; - if (required == null) { - if (other.required != null) - return false; - } else if (!required.equals(other.required)) - return false; - if (type == null) { - if (other.type != null) - return false; - } else if (!type.equals(other.type)) - return false; - return true; - } - - @Override - public String toString() { - return "Attribute [calculated=" + calculated + ", choice=" + choice + ", defaultValue=" + defaultValue - + ", description=" + description + ", displayName=" + displayName + ", recipes=" + recipes + ", required=" - + required + ", type=" + type + "]"; - } - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/domain/BootstrapConfig.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/domain/BootstrapConfig.java b/apis/chef/src/main/java/org/jclouds/chef/domain/BootstrapConfig.java deleted file mode 100644 index c10c150..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/domain/BootstrapConfig.java +++ /dev/null @@ -1,95 +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.chef.domain; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.List; - -import org.jclouds.domain.JsonBall; - -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableList; - -/** - * Configures how the nodes in a group will bootstrap. - * - * @since 1.7 - */ -public class BootstrapConfig { - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private ImmutableList.Builder<String> runList = ImmutableList.builder(); - private String environment; - private JsonBall attribtues; - - /** - * Sets the run list that will be executed in the nodes of the group. - */ - public Builder runList(Iterable<String> runList) { - this.runList.addAll(checkNotNull(runList, "runList")); - return this; - } - - /** - * Sets the environment where the nodes in the group will be deployed. - */ - public Builder environment(String environment) { - this.environment = checkNotNull(environment, "environment"); - return this; - } - - /** - * Sets the attributes that will be populated to the deployed nodes. - */ - public Builder attributes(JsonBall attributes) { - this.attribtues = checkNotNull(attributes, "attributes"); - return this; - } - - public BootstrapConfig build() { - return new BootstrapConfig(runList.build(), Optional.fromNullable(environment), - Optional.fromNullable(attribtues)); - } - } - - private final List<String> runList; - private final Optional<String> environment; - private final Optional<JsonBall> attribtues; - - protected BootstrapConfig(List<String> runList, Optional<String> environment, Optional<JsonBall> attribtues) { - this.runList = checkNotNull(runList, "runList"); - this.environment = checkNotNull(environment, "environment"); - this.attribtues = checkNotNull(attribtues, "attributes"); - } - - public List<String> getRunList() { - return runList; - } - - public Optional<String> getEnvironment() { - return environment; - } - - public Optional<JsonBall> getAttribtues() { - return attribtues; - } - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/domain/ChecksumStatus.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/domain/ChecksumStatus.java b/apis/chef/src/main/java/org/jclouds/chef/domain/ChecksumStatus.java deleted file mode 100644 index e5a48ca..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/domain/ChecksumStatus.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.chef.domain; - -import static com.google.common.base.Preconditions.checkNotNull; -import java.beans.ConstructorProperties; -import java.net.URI; - -import com.google.gson.annotations.SerializedName; - -/** - * The checksum of an uploaded resource. - */ -public class ChecksumStatus { - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private URI url; - private boolean needsUpload; - - public Builder url(URI url) { - this.url = checkNotNull(url, "url"); - return this; - } - - public Builder needsUpload(boolean needsUpload) { - this.needsUpload = needsUpload; - return this; - } - - public ChecksumStatus build() { - return new ChecksumStatus(url, needsUpload); - } - } - - private final URI url; - @SerializedName("needs_upload") - private final boolean needsUpload; - - @ConstructorProperties({ "url", "needs_upload" }) - protected ChecksumStatus(URI url, boolean needsUpload) { - this.url = url; - this.needsUpload = needsUpload; - } - - public URI getUrl() { - return url; - } - - public boolean needsUpload() { - return needsUpload; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (needsUpload ? 1231 : 1237); - result = prime * result + ((url == null) ? 0 : url.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - ChecksumStatus other = (ChecksumStatus) obj; - if (needsUpload != other.needsUpload) - return false; - if (url == null) { - if (other.url != null) - return false; - } else if (!url.equals(other.url)) - return false; - return true; - } - - @Override - public String toString() { - return "ChecksumStatus [needsUpload=" + needsUpload + ", url=" + url + "]"; - } -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/domain/Client.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/domain/Client.java b/apis/chef/src/main/java/org/jclouds/chef/domain/Client.java deleted file mode 100644 index 7335609..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/domain/Client.java +++ /dev/null @@ -1,182 +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.chef.domain; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.beans.ConstructorProperties; -import java.security.PrivateKey; -import java.security.cert.X509Certificate; - -import org.jclouds.javax.annotation.Nullable; - -import com.google.gson.annotations.SerializedName; - -/** - * Client object. - */ -public class Client { - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private X509Certificate certificate; - private PrivateKey privateKey; - private String orgname; - private String clientname; - private String name; - private boolean validator; - - public Builder certificate(X509Certificate certificate) { - this.certificate = checkNotNull(certificate, "certificate"); - return this; - } - - public Builder privateKey(PrivateKey privateKey) { - this.privateKey = checkNotNull(privateKey, "privateKey"); - return this; - } - - public Builder orgname(String orgname) { - this.orgname = checkNotNull(orgname, "orgname"); - return this; - } - - public Builder clientname(String clientname) { - this.clientname = checkNotNull(clientname, "clientname"); - return this; - } - - public Builder name(String name) { - this.name = checkNotNull(name, "name"); - return this; - } - - public Builder isValidator(boolean validator) { - this.validator = validator; - return this; - } - - public Client build() { - return new Client(certificate, orgname, clientname, name, validator, privateKey); - } - } - - private final X509Certificate certificate; - @SerializedName("private_key") - private final PrivateKey privateKey; - private final String orgname; - private final String clientname; - private final String name; - private final boolean validator; - - @ConstructorProperties({ "certificate", "orgname", "clientname", "name", "validator", "private_key" }) - protected Client(X509Certificate certificate, String orgname, String clientname, String name, boolean validator, - @Nullable PrivateKey privateKey) { - this.certificate = certificate; - this.orgname = orgname; - this.clientname = clientname; - this.name = name; - this.validator = validator; - this.privateKey = privateKey; - } - - public PrivateKey getPrivateKey() { - return privateKey; - } - - public X509Certificate getCertificate() { - return certificate; - } - - public String getOrgname() { - return orgname; - } - - public String getClientname() { - return clientname; - } - - public String getName() { - return name; - } - - public boolean isValidator() { - return validator; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((certificate == null) ? 0 : certificate.hashCode()); - result = prime * result + ((clientname == null) ? 0 : clientname.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((orgname == null) ? 0 : orgname.hashCode()); - result = prime * result + ((privateKey == null) ? 0 : privateKey.hashCode()); - result = prime * result + (validator ? 1231 : 1237); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Client other = (Client) obj; - if (certificate == null) { - if (other.certificate != null) - return false; - } else if (!certificate.equals(other.certificate)) - return false; - if (clientname == null) { - if (other.clientname != null) - return false; - } else if (!clientname.equals(other.clientname)) - return false; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - if (orgname == null) { - if (other.orgname != null) - return false; - } else if (!orgname.equals(other.orgname)) - return false; - if (privateKey == null) { - if (other.privateKey != null) - return false; - } else if (!privateKey.equals(other.privateKey)) - return false; - if (validator != other.validator) - return false; - return true; - } - - @Override - public String toString() { - return "Client [name=" + name + ", clientname=" + clientname + ", orgname=" + orgname + ", isValidator=" - + validator + ", certificate=" + certificate + ", privateKey=" + (privateKey == null ? "not " : "") - + "present]"; - } - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookDefinition.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookDefinition.java b/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookDefinition.java deleted file mode 100644 index 17db702..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookDefinition.java +++ /dev/null @@ -1,217 +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.chef.domain; - -import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.chef.util.CollectionUtils.copyOfOrEmpty; - -import java.beans.ConstructorProperties; -import java.net.URI; -import java.util.Set; - -import org.jclouds.javax.annotation.Nullable; - -import com.google.common.collect.ImmutableSet; - -/** - * Cookbook definition as returned by the Chef server >= 0.10.8. - */ -public class CookbookDefinition { - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private String name; - private URI url; - private ImmutableSet.Builder<Version> versions = ImmutableSet.builder(); - - public Builder name(String name) { - this.name = checkNotNull(name, "name"); - return this; - } - - public Builder url(URI url) { - this.url = checkNotNull(url, "url"); - return this; - } - - public Builder version(Version version) { - this.versions.add(checkNotNull(version, "version")); - return this; - } - - public Builder versions(Iterable<Version> versions) { - this.versions.addAll(checkNotNull(versions, "versions")); - return this; - } - - public Builder from(CookbookDefinition def) { - this.url = checkNotNull(def.getUrl(), "url"); - this.versions.addAll(checkNotNull(def.getVersions(), "versions")); - this.name = def.getName(); - return this; - } - - public CookbookDefinition build() { - return new CookbookDefinition(name, url, versions.build()); - } - } - - private final String name; - private final URI url; - private final Set<Version> versions; - - @ConstructorProperties({"name", "url", "versions" }) - protected CookbookDefinition(String name, URI url, @Nullable Set<Version> versions) { - this.name = name; - this.url = url; - this.versions = copyOfOrEmpty(versions); - } - - public String getName() { - return name; - } - - public URI getUrl() { - return url; - } - - public Set<Version> getVersions() { - return versions; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((url == null) ? 0 : url.hashCode()); - result = prime * result + ((versions == null) ? 0 : versions.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - CookbookDefinition other = (CookbookDefinition) obj; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - if (url == null) { - if (other.url != null) - return false; - } else if (!url.equals(other.url)) - return false; - if (versions == null) { - if (other.versions != null) - return false; - } else if (!versions.equals(other.versions)) - return false; - return true; - } - - @Override - public String toString() { - return "CookbookDefinition [name=" + name + ", url=" + url + ", versions=" + versions + "]"; - } - - public static class Version { - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - private URI url; - private String version; - - public Builder url(URI url) { - this.url = checkNotNull(url, "url"); - return this; - } - - public Builder version(String version) { - this.version = checkNotNull(version, "version"); - return this; - } - - public Version build() { - return new Version(url, version); - } - } - - private final URI url; - private final String version; - - @ConstructorProperties({ "url", "version" }) - protected Version(URI url, String version) { - this.url = url; - this.version = version; - } - - public URI getUrl() { - return url; - } - - public String getVersion() { - return version; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((url == null) ? 0 : url.hashCode()); - result = prime * result + ((version == null) ? 0 : version.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Version other = (Version) obj; - if (url == null) { - if (other.url != null) - return false; - } else if (!url.equals(other.url)) - return false; - if (version == null) { - if (other.version != null) - return false; - } else if (!version.equals(other.version)) - return false; - return true; - } - - @Override - public String toString() { - return "Version [url=" + url + ", version=" + version + "]"; - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookVersion.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookVersion.java b/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookVersion.java deleted file mode 100644 index df9bd82..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookVersion.java +++ /dev/null @@ -1,369 +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.chef.domain; - -import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.chef.util.CollectionUtils.copyOfOrEmpty; - -import java.beans.ConstructorProperties; -import java.util.Set; - -import org.jclouds.javax.annotation.Nullable; - -import com.google.common.collect.ImmutableSet; -import com.google.gson.annotations.SerializedName; - -/** - * Cookbook object. - */ -public class CookbookVersion { - public static Builder builder(String name, String version) { - return new Builder(name, version); - } - - public static class Builder { - private String cookbookName; - private ImmutableSet.Builder<Resource> definitions = ImmutableSet.builder(); - private ImmutableSet.Builder<Attribute> attributes = ImmutableSet.builder(); - private ImmutableSet.Builder<Resource> files = ImmutableSet.builder(); - private Metadata metadata = Metadata.builder().build(); - private ImmutableSet.Builder<Resource> providers = ImmutableSet.builder(); - private ImmutableSet.Builder<Resource> resources = ImmutableSet.builder(); - private ImmutableSet.Builder<Resource> templates = ImmutableSet.builder(); - private ImmutableSet.Builder<Resource> libraries = ImmutableSet.builder(); - private String version; - private ImmutableSet.Builder<Resource> recipes = ImmutableSet.builder(); - private ImmutableSet.Builder<Resource> rootFiles = ImmutableSet.builder(); - - public Builder(String name, String version) { - this.cookbookName = checkNotNull(name, "name"); - this.version = checkNotNull(version, "version"); - } - - public Builder cookbookName(String cookbookName) { - this.cookbookName = checkNotNull(cookbookName, "cookbookName"); - return this; - } - - public Builder definition(Resource definition) { - this.definitions.add(checkNotNull(definition, "definition")); - return this; - } - - public Builder definitions(Iterable<Resource> definitions) { - this.definitions.addAll(checkNotNull(definitions, "definitions")); - return this; - } - - public Builder attribute(Attribute attribute) { - this.attributes.add(checkNotNull(attribute, "attribute")); - return this; - } - - public Builder attributes(Iterable<Attribute> attributes) { - this.attributes.addAll(checkNotNull(attributes, "attributes")); - return this; - } - - public Builder file(Resource file) { - this.files.add(checkNotNull(file, "file")); - return this; - } - - public Builder files(Iterable<Resource> files) { - this.files.addAll(checkNotNull(files, "files")); - return this; - } - - public Builder metadata(Metadata metadata) { - this.metadata = checkNotNull(metadata, "metadata"); - return this; - } - - public Builder provider(Resource provider) { - this.providers.add(checkNotNull(provider, "provider")); - return this; - } - - public Builder providers(Iterable<Resource> providers) { - this.providers.addAll(checkNotNull(providers, "providers")); - return this; - } - - public Builder resource(Resource resource) { - this.resources.add(checkNotNull(resource, "resource")); - return this; - } - - public Builder resources(Iterable<Resource> resources) { - this.resources.addAll(checkNotNull(resources, "resources")); - return this; - } - - public Builder template(Resource template) { - this.templates.add(checkNotNull(template, "template")); - return this; - } - - public Builder templates(Iterable<Resource> templates) { - this.templates.addAll(checkNotNull(templates, "templates")); - return this; - } - - public Builder library(Resource library) { - this.libraries.add(checkNotNull(library, "library")); - return this; - } - - public Builder libraries(Iterable<Resource> libraries) { - this.libraries.addAll(checkNotNull(libraries, "libraries")); - return this; - } - - public Builder version(String version) { - this.version = checkNotNull(version, "version"); - return this; - } - - public Builder recipe(Resource recipe) { - this.recipes.add(checkNotNull(recipe, "recipe")); - return this; - } - - public Builder recipes(Iterable<Resource> recipes) { - this.recipes.addAll(checkNotNull(recipes, "recipes")); - return this; - } - - public Builder rootFile(Resource rootFile) { - this.rootFiles.add(checkNotNull(rootFile, "rootFile")); - return this; - } - - public Builder rootFiles(Iterable<Resource> rootFiles) { - this.rootFiles.addAll(checkNotNull(rootFiles, "rootFiles")); - return this; - } - - public CookbookVersion build() { - return new CookbookVersion(checkNotNull(cookbookName, "name") + "-" + checkNotNull(version, "version"), - definitions.build(), attributes.build(), files.build(), metadata, providers.build(), cookbookName, - resources.build(), templates.build(), libraries.build(), version, recipes.build(), rootFiles.build()); - } - } - - private final String name; - private final Set<Resource> definitions; - private final Set<Attribute> attributes; - private final Set<Resource> files; - private final Metadata metadata; - private final Set<Resource> providers; - @SerializedName("cookbook_name") - private final String cookbookName; - private final Set<Resource> resources; - private final Set<Resource> templates; - private final Set<Resource> libraries; - private final String version; - private final Set<Resource> recipes; - @SerializedName("root_files") - private final Set<Resource> rootFiles; - - // internal - @SerializedName("json_class") - private String _jsonClass = "Chef::CookbookVersion"; - @SerializedName("chef_type") - private String _chefType = "cookbook_version"; - - @ConstructorProperties({ "name", "definitions", "attributes", "files", "metadata", "providers", "cookbook_name", - "resources", "templates", "libraries", "version", "recipes", "root_files" }) - protected CookbookVersion(String name, @Nullable Set<Resource> definitions, @Nullable Set<Attribute> attributes, - @Nullable Set<Resource> files, Metadata metadata, @Nullable Set<Resource> providers, String cookbookName, - @Nullable Set<Resource> resources, @Nullable Set<Resource> templates, @Nullable Set<Resource> libraries, - String version, @Nullable Set<Resource> recipes, @Nullable Set<Resource> rootFiles) { - this.name = name; - this.definitions = copyOfOrEmpty(definitions); - this.attributes = copyOfOrEmpty(attributes); - this.files = copyOfOrEmpty(files); - this.metadata = metadata; - this.providers = copyOfOrEmpty(providers); - this.cookbookName = cookbookName; - this.resources = copyOfOrEmpty(resources); - this.templates = copyOfOrEmpty(templates); - this.libraries = copyOfOrEmpty(libraries); - this.version = version; - this.recipes = copyOfOrEmpty(recipes); - this.rootFiles = copyOfOrEmpty(rootFiles); - } - - public String getName() { - return name; - } - - public Set<Resource> getDefinitions() { - return definitions; - } - - public Set<Attribute> getAttributes() { - return attributes; - } - - public Set<Resource> getFiles() { - return files; - } - - public Metadata getMetadata() { - return metadata; - } - - public Set<Resource> getSuppliers() { - return providers; - } - - public String getCookbookName() { - return cookbookName; - } - - public Set<Resource> getResources() { - return resources; - } - - public Set<Resource> getTemplates() { - return templates; - } - - public Set<Resource> getLibraries() { - return libraries; - } - - public String getVersion() { - return version; - } - - public Set<Resource> getRecipes() { - return recipes; - } - - public Set<Resource> getRootFiles() { - return rootFiles; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((attributes == null) ? 0 : attributes.hashCode()); - result = prime * result + ((cookbookName == null) ? 0 : cookbookName.hashCode()); - result = prime * result + ((definitions == null) ? 0 : definitions.hashCode()); - result = prime * result + ((files == null) ? 0 : files.hashCode()); - result = prime * result + ((libraries == null) ? 0 : libraries.hashCode()); - result = prime * result + ((metadata == null) ? 0 : metadata.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((providers == null) ? 0 : providers.hashCode()); - result = prime * result + ((recipes == null) ? 0 : recipes.hashCode()); - result = prime * result + ((resources == null) ? 0 : resources.hashCode()); - result = prime * result + ((rootFiles == null) ? 0 : rootFiles.hashCode()); - result = prime * result + ((templates == null) ? 0 : templates.hashCode()); - result = prime * result + ((version == null) ? 0 : version.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - CookbookVersion other = (CookbookVersion) obj; - if (attributes == null) { - if (other.attributes != null) - return false; - } else if (!attributes.equals(other.attributes)) - return false; - if (cookbookName == null) { - if (other.cookbookName != null) - return false; - } else if (!cookbookName.equals(other.cookbookName)) - return false; - if (definitions == null) { - if (other.definitions != null) - return false; - } else if (!definitions.equals(other.definitions)) - return false; - if (files == null) { - if (other.files != null) - return false; - } else if (!files.equals(other.files)) - return false; - if (libraries == null) { - if (other.libraries != null) - return false; - } else if (!libraries.equals(other.libraries)) - return false; - if (metadata == null) { - if (other.metadata != null) - return false; - } else if (!metadata.equals(other.metadata)) - return false; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - if (providers == null) { - if (other.providers != null) - return false; - } else if (!providers.equals(other.providers)) - return false; - if (recipes == null) { - if (other.recipes != null) - return false; - } else if (!recipes.equals(other.recipes)) - return false; - if (resources == null) { - if (other.resources != null) - return false; - } else if (!resources.equals(other.resources)) - return false; - if (rootFiles == null) { - if (other.rootFiles != null) - return false; - } else if (!rootFiles.equals(other.rootFiles)) - return false; - if (templates == null) { - if (other.templates != null) - return false; - } else if (!templates.equals(other.templates)) - return false; - if (version == null) { - if (other.version != null) - return false; - } else if (!version.equals(other.version)) - return false; - return true; - } - - @Override - public String toString() { - return "Cookbook [attributes=" + attributes + ", cookbookName=" + cookbookName + ", definitions=" + definitions - + ", files=" + files + ", libraries=" + libraries + ", metadata=" + metadata + ", name=" + name - + ", providers=" + providers + ", recipes=" + recipes + ", resources=" + resources + ", rootFiles=" - + rootFiles + ", templates=" + templates + ", version=" + version + "]"; - } - -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/domain/DatabagItem.java ---------------------------------------------------------------------- diff --git a/apis/chef/src/main/java/org/jclouds/chef/domain/DatabagItem.java b/apis/chef/src/main/java/org/jclouds/chef/domain/DatabagItem.java deleted file mode 100644 index ec68d99..0000000 --- a/apis/chef/src/main/java/org/jclouds/chef/domain/DatabagItem.java +++ /dev/null @@ -1,63 +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.chef.domain; - -import static com.google.common.base.Preconditions.checkNotNull; - -import org.jclouds.domain.JsonBall; - -/** - * An item in a data bag. - */ -public class DatabagItem extends JsonBall { - - private final String id; - - public DatabagItem(String id, String value) { - super(value); - this.id = checkNotNull(id, "id"); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((id == null) ? 0 : id.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - DatabagItem other = (DatabagItem) obj; - if (id == null) { - if (other.id != null) - return false; - } else if (!id.equals(other.id)) - return false; - return true; - } - - public String getId() { - return id; - } -}
