http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10.java
deleted file mode 100644
index 5da0797..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10.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.functions;
-
-import com.google.common.base.Function;
-import org.jclouds.chef.domain.CookbookDefinition;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ParseJson;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.collect.Sets.newLinkedHashSet;
-
-/**
- * Parses the cookbook versions in a Chef Server >= 0.10.8.
- */
-@Singleton
-public class ParseCookbookDefinitionListFromJsonv10 implements 
Function<HttpResponse, Set<CookbookDefinition>> {
-
-   /**
-    * Parser for responses from chef server >= 0.10.8
-    */
-   private final ParseJson<Map<String, CookbookDefinition>> parser;
-
-   @Inject
-   ParseCookbookDefinitionListFromJsonv10(ParseJson<Map<String, 
CookbookDefinition>> parser) {
-      this.parser = parser;
-   }
-
-   @Override
-   public Set<CookbookDefinition> apply(HttpResponse response) {
-      Set<Map.Entry<String, CookbookDefinition>> result = 
parser.apply(response).entrySet();
-      return newLinkedHashSet(transform(result, new Function<Map.Entry<String, 
CookbookDefinition>, CookbookDefinition>() {
-         @Override
-         public CookbookDefinition apply(Map.Entry<String, CookbookDefinition> 
input) {
-            String cookbookName = input.getKey();
-            CookbookDefinition def = input.getValue();
-            return CookbookDefinition.builder() //
-                   .from(def) //              
-                   .name(cookbookName) //
-                   .build();
-         }
-      }));
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsCheckingChefVersion.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsCheckingChefVersion.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsCheckingChefVersion.java
deleted file mode 100644
index f82a900..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsCheckingChefVersion.java
+++ /dev/null
@@ -1,49 +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.functions;
-
-import java.util.Set;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.config.CookbookVersionsParser;
-import org.jclouds.http.HttpResponse;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-
-/**
- * Parses a cookbook versions from a Json response, taking care of using the
- * appropriate parser.
- */
-@Singleton
-public class ParseCookbookVersionsCheckingChefVersion implements 
Function<HttpResponse, Set<String>> {
-
-   @VisibleForTesting
-   final Function<HttpResponse, Set<String>> parser;
-
-   @Inject
-   ParseCookbookVersionsCheckingChefVersion(@CookbookVersionsParser 
Function<HttpResponse, Set<String>> parser) {
-      this.parser = parser;
-   }
-
-   @Override
-   public Set<String> apply(HttpResponse response) {
-      return parser.apply(response);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsV09FromJson.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsV09FromJson.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsV09FromJson.java
deleted file mode 100644
index 4421b3e..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsV09FromJson.java
+++ /dev/null
@@ -1,49 +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.functions;
-
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ParseJson;
-
-import com.google.common.base.Function;
-import static com.google.common.collect.Iterables.getFirst;
-
-/**
- * Parses the cookbook versions in a Chef Server <= 0.9.8.
- */
-@Singleton
-public class ParseCookbookVersionsV09FromJson implements 
Function<HttpResponse, Set<String>> {
-
-   private final ParseJson<Map<String, Set<String>>> json;
-
-   @Inject
-   ParseCookbookVersionsV09FromJson(ParseJson<Map<String, Set<String>>> json) {
-      this.json = json;
-   }
-
-   @Override
-   public Set<String> apply(HttpResponse response) {
-      return getFirst(json.apply(response).values(), null);
-
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsV10FromJson.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsV10FromJson.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsV10FromJson.java
deleted file mode 100644
index 1a25ac0..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookVersionsV10FromJson.java
+++ /dev/null
@@ -1,59 +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.functions;
-
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.CookbookDefinition;
-import org.jclouds.chef.domain.CookbookDefinition.Version;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ParseJson;
-
-import com.google.common.base.Function;
-import static com.google.common.collect.Iterables.getFirst;
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.collect.Sets.newLinkedHashSet;
-
-/**
- * Parses the cookbook versions in a Chef Server >= 0.10.8.
- */
-@Singleton
-public class ParseCookbookVersionsV10FromJson implements 
Function<HttpResponse, Set<String>> {
-
-   /** Parser for responses from chef server >= 0.10.8 */
-   private final ParseJson<Map<String, CookbookDefinition>> parser;
-
-   @Inject
-   ParseCookbookVersionsV10FromJson(ParseJson<Map<String, CookbookDefinition>> 
parser) {
-      this.parser = parser;
-   }
-
-   @Override
-   public Set<String> apply(HttpResponse response) {
-      CookbookDefinition def = getFirst(parser.apply(response).values(), null);
-      return newLinkedHashSet(transform(def.getVersions(), new 
Function<Version, String>() {
-         @Override
-         public String apply(Version input) {
-            return input.getVersion();
-         }
-      }));
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseErrorFromJsonOrReturnBody.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseErrorFromJsonOrReturnBody.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseErrorFromJsonOrReturnBody.java
deleted file mode 100644
index 6440409..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseErrorFromJsonOrReturnBody.java
+++ /dev/null
@@ -1,55 +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.functions;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ReturnStringIf2xx;
-
-import com.google.common.base.Function;
-
-@Singleton
-public class ParseErrorFromJsonOrReturnBody implements Function<HttpResponse, 
String> {
-   Pattern pattern = Pattern.compile(".*\\[\"([^\"]+)\"\\].*");
-   private final ReturnStringIf2xx returnStringIf200;
-
-   @Inject
-   ParseErrorFromJsonOrReturnBody(ReturnStringIf2xx returnStringIf200) {
-      this.returnStringIf200 = returnStringIf200;
-   }
-
-   @Override
-   public String apply(HttpResponse response) {
-      String content = returnStringIf200.apply(response);
-      if (content == null)
-         return null;
-      return parse(content);
-   }
-
-   public String parse(String in) {
-      Matcher matcher = pattern.matcher(in);
-      if (matcher.find()) {
-         return matcher.group(1);
-      }
-      return in;
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseKeySetFromJson.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseKeySetFromJson.java 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseKeySetFromJson.java
deleted file mode 100644
index 963c19b..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseKeySetFromJson.java
+++ /dev/null
@@ -1,45 +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.functions;
-
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ParseJson;
-
-import com.google.common.base.Function;
-
-@Singleton
-public class ParseKeySetFromJson implements Function<HttpResponse, 
Set<String>> {
-
-   private final ParseJson<Map<String, String>> json;
-
-   @Inject
-   ParseKeySetFromJson(ParseJson<Map<String, String>> json) {
-      this.json = json;
-   }
-
-   @Override
-   public Set<String> apply(HttpResponse response) {
-      return json.apply(response).keySet();
-
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchClientsFromJson.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchClientsFromJson.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchClientsFromJson.java
deleted file mode 100644
index 18ecbfa..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchClientsFromJson.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.chef.functions;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.Client;
-import org.jclouds.http.functions.ParseJson;
-
-@Singleton
-public class ParseSearchClientsFromJson extends 
ParseSearchResultFromJson<Client> {
-
-   // TODO add generic json parser detector
-
-   @Inject
-   ParseSearchClientsFromJson(ParseJson<Response<Client>> json) {
-      super(json);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchDatabagFromJson.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchDatabagFromJson.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchDatabagFromJson.java
deleted file mode 100644
index c2c58ef..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchDatabagFromJson.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.chef.functions;
-
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.DatabagItem;
-import org.jclouds.chef.domain.SearchResult;
-import org.jclouds.domain.JsonBall;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.json.Json;
-
-import com.google.common.base.Function;
-import com.google.gson.annotations.SerializedName;
-import static com.google.common.collect.Iterables.transform;
-
-/**
- * Parses the search result into a {@link DatabagItem} object.
- * <p>
- * When searching databags, the items are contained inside the
- * <code>raw_data</code> list.
- */
-@Singleton
-public class ParseSearchDatabagFromJson implements Function<HttpResponse, 
SearchResult<DatabagItem>> {
-
-   private final ParseJson<Response> responseParser;
-
-   private final Json json;
-
-   static class Row {
-      @SerializedName("raw_data")
-      JsonBall rawData;
-   }
-
-   static class Response {
-      long start;
-      List<Row> rows;
-   }
-
-   @Inject
-   ParseSearchDatabagFromJson(ParseJson<Response> responseParser, Json json) {
-      this.responseParser = responseParser;
-      this.json = json;
-   }
-
-   @Override
-   public SearchResult<DatabagItem> apply(HttpResponse response) {
-      Response returnVal = responseParser.apply(response);
-      Iterable<DatabagItem> items = transform(returnVal.rows, new 
Function<Row, DatabagItem>() {
-         @Override
-         public DatabagItem apply(Row input) {
-            return json.fromJson(input.rawData.toString(), DatabagItem.class);
-         }
-      });
-
-      return new SearchResult<DatabagItem>(returnVal.start, items);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchEnvironmentsFromJson.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchEnvironmentsFromJson.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchEnvironmentsFromJson.java
deleted file mode 100644
index 852e0f3..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchEnvironmentsFromJson.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.chef.functions;
-
-import org.jclouds.chef.domain.Environment;
-import org.jclouds.http.functions.ParseJson;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Singleton
-public class ParseSearchEnvironmentsFromJson extends 
ParseSearchResultFromJson<Environment> {
-
-   // TODO add generic json parser detector
-
-   @Inject
-   ParseSearchEnvironmentsFromJson(ParseJson<Response<Environment>> json) {
-      super(json);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchNodesFromJson.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchNodesFromJson.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchNodesFromJson.java
deleted file mode 100644
index 6d34575..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchNodesFromJson.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.chef.functions;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.Node;
-import org.jclouds.http.functions.ParseJson;
-
-@Singleton
-public class ParseSearchNodesFromJson extends ParseSearchResultFromJson<Node> {
-
-   // TODO add generic json parser detector
-
-   @Inject
-   ParseSearchNodesFromJson(ParseJson<Response<Node>> json) {
-      super(json);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchResultFromJson.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchResultFromJson.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchResultFromJson.java
deleted file mode 100644
index 6c9bd84..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchResultFromJson.java
+++ /dev/null
@@ -1,50 +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.functions;
-
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.SearchResult;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.functions.ParseJson;
-
-import com.google.common.base.Function;
-
-@Singleton
-public class ParseSearchResultFromJson<T> implements Function<HttpResponse, 
SearchResult<T>> {
-
-   private final ParseJson<Response<T>> json;
-
-   static class Response<T> {
-      long start;
-      List<T> rows;
-   }
-
-   @Inject
-   ParseSearchResultFromJson(ParseJson<Response<T>> json) {
-      this.json = json;
-   }
-
-   @Override
-   public SearchResult<T> apply(HttpResponse response) {
-      Response<T> returnVal = json.apply(response);
-      return new SearchResult<T>(returnVal.start, returnVal.rows);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchRolesFromJson.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchRolesFromJson.java
 
b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchRolesFromJson.java
deleted file mode 100644
index 42ba797..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseSearchRolesFromJson.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.chef.functions;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.Role;
-import org.jclouds.http.functions.ParseJson;
-
-@Singleton
-public class ParseSearchRolesFromJson extends ParseSearchResultFromJson<Role> {
-
-   // TODO add generic json parser detector
-
-   @Inject
-   ParseSearchRolesFromJson(ParseJson<Response<Role>> json) {
-      super(json);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/RunListForGroup.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/RunListForGroup.java 
b/apis/chef/src/main/java/org/jclouds/chef/functions/RunListForGroup.java
deleted file mode 100644
index b14ae71..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/functions/RunListForGroup.java
+++ /dev/null
@@ -1,61 +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.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.lang.reflect.Type;
-import java.util.List;
-import java.util.Map;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.DatabagItem;
-import org.jclouds.domain.JsonBall;
-import org.jclouds.json.Json;
-
-import com.google.common.base.Function;
-import com.google.inject.TypeLiteral;
-
-/**
- * Retrieves the run-list for a specific group
- */
-@Singleton
-public class RunListForGroup implements Function<String, List<String>> {
-   public static final Type RUN_LIST_TYPE = new TypeLiteral<List<String>>() {
-   }.getType();
-   private final BootstrapConfigForGroup bootstrapConfigForGroup;
-
-   private final Json json;
-
-   @Inject
-   public RunListForGroup(BootstrapConfigForGroup bootstrapConfigForGroup, 
Json json) {
-      this.bootstrapConfigForGroup = checkNotNull(bootstrapConfigForGroup, 
"bootstrapConfigForGroup");
-      this.json = checkNotNull(json, "json");
-   }
-
-   @Override
-   public List<String> apply(String from) {
-      DatabagItem bootstrapConfig = bootstrapConfigForGroup.apply(from);
-      Map<String, JsonBall> config = json.fromJson(bootstrapConfig.toString(),
-            BootstrapConfigForGroup.BOOTSTRAP_CONFIG_TYPE);
-      JsonBall runlist = config.get("run_list");
-      return json.fromJson(runlist.toString(), RUN_LIST_TYPE);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/functions/UriForResource.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/functions/UriForResource.java 
b/apis/chef/src/main/java/org/jclouds/chef/functions/UriForResource.java
deleted file mode 100644
index d5d0810..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/functions/UriForResource.java
+++ /dev/null
@@ -1,42 +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.functions;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.net.URI;
-
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.Resource;
-
-import com.google.common.base.Function;
-
-/**
- * Extracts the uri field of the given {@link Resource}.
- */
-@Singleton
-public class UriForResource implements Function<Object, URI> {
-
-   @Override
-   public URI apply(Object input) {
-      checkArgument(checkNotNull(input, "input") instanceof Resource,
-            "This function can only be applied to Resource objects");
-      return ((Resource) input).getUrl();
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/handlers/ChefApiErrorRetryHandler.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/handlers/ChefApiErrorRetryHandler.java
 
b/apis/chef/src/main/java/org/jclouds/chef/handlers/ChefApiErrorRetryHandler.java
deleted file mode 100644
index 3b4da4a..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/handlers/ChefApiErrorRetryHandler.java
+++ /dev/null
@@ -1,67 +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.handlers;
-
-import static org.jclouds.http.HttpUtils.closeClientButKeepContentStream;
-
-import javax.annotation.Resource;
-import javax.inject.Named;
-
-import org.jclouds.Constants;
-import org.jclouds.http.HttpCommand;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.HttpRetryHandler;
-import org.jclouds.http.handlers.BackoffLimitedRetryHandler;
-import org.jclouds.logging.Logger;
-
-import com.google.inject.Inject;
-
-/**
- * Allow for eventual consistency on sandbox requests.
- */
-public class ChefApiErrorRetryHandler implements HttpRetryHandler {
-
-   @Inject(optional = true)
-   @Named(Constants.PROPERTY_MAX_RETRIES)
-   private int retryCountLimit = 5;
-
-   @Resource
-   protected Logger logger = Logger.NULL;
-
-   private final BackoffLimitedRetryHandler backoffLimitedRetryHandler;
-
-   @Inject
-   ChefApiErrorRetryHandler(BackoffLimitedRetryHandler 
backoffLimitedRetryHandler) {
-      this.backoffLimitedRetryHandler = backoffLimitedRetryHandler;
-   }
-
-   public boolean shouldRetryRequest(HttpCommand command, HttpResponse 
response) {
-      if (command.getFailureCount() > retryCountLimit)
-         return false;
-      if (response.getStatusCode() == 400 && 
command.getCurrentRequest().getMethod().equals("PUT")
-            && 
command.getCurrentRequest().getEndpoint().getPath().indexOf("sandboxes") != -1) 
{
-         if (response.getPayload() != null) {
-            String error = new 
String(closeClientButKeepContentStream(response));
-            if (error != null && error.indexOf("was not uploaded") != -1) {
-               return backoffLimitedRetryHandler.shouldRetryRequest(command, 
response);
-            }
-         }
-      }
-      return false;
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/handlers/ChefErrorHandler.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/handlers/ChefErrorHandler.java 
b/apis/chef/src/main/java/org/jclouds/chef/handlers/ChefErrorHandler.java
deleted file mode 100644
index 3376219..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/handlers/ChefErrorHandler.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.chef.handlers;
-
-import static com.google.common.base.Throwables.propagate;
-
-import java.io.IOException;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.functions.ParseErrorFromJsonOrReturnBody;
-import org.jclouds.http.HttpCommand;
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.HttpResponseException;
-import org.jclouds.logging.Logger;
-import org.jclouds.rest.AuthorizationException;
-import org.jclouds.rest.ResourceNotFoundException;
-
-import com.google.common.io.Closeables;
-
-/**
- * This will parse and set an appropriate exception on the command object.
- */
-@Singleton
-public class ChefErrorHandler implements HttpErrorHandler {
-   @Resource
-   protected Logger logger = Logger.NULL;
-   private final ParseErrorFromJsonOrReturnBody errorParser;
-
-   @Inject
-   ChefErrorHandler(ParseErrorFromJsonOrReturnBody errorParser) {
-      this.errorParser = errorParser;
-   }
-
-   public void handleError(HttpCommand command, HttpResponse response) {
-      String message = errorParser.apply(response);
-      Exception exception = new HttpResponseException(command, response, 
message);
-      try {
-         message = message != null ? message : String.format("%s -> %s", 
command.getCurrentRequest().getRequestLine(),
-               response.getStatusLine());
-         switch (response.getStatusCode()) {
-            case 401:
-            case 403:
-               exception = new AuthorizationException(message, exception);
-               break;
-            case 404:
-               if (!command.getCurrentRequest().getMethod().equals("DELETE")) {
-                  exception = new ResourceNotFoundException(message, 
exception);
-               }
-               break;
-         }
-      } finally {
-         if (response.getPayload() != null) {
-            try {
-               Closeables.close(response.getPayload().getInput(), true);
-            } catch (IOException e) {
-               throw propagate(e);
-            }
-         }
-         command.setException(exception);
-      }
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/internal/BaseChefService.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/internal/BaseChefService.java 
b/apis/chef/src/main/java/org/jclouds/chef/internal/BaseChefService.java
deleted file mode 100644
index d390555..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/internal/BaseChefService.java
+++ /dev/null
@@ -1,299 +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.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.chef.config.ChefProperties.CHEF_BOOTSTRAP_DATABAG;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.PrivateKey;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.ChefApi;
-import org.jclouds.chef.ChefContext;
-import org.jclouds.chef.ChefService;
-import org.jclouds.chef.config.ChefProperties;
-import org.jclouds.chef.domain.BootstrapConfig;
-import org.jclouds.chef.domain.Client;
-import org.jclouds.chef.domain.CookbookVersion;
-import org.jclouds.chef.domain.DatabagItem;
-import org.jclouds.chef.domain.Environment;
-import org.jclouds.chef.domain.Node;
-import org.jclouds.chef.functions.BootstrapConfigForGroup;
-import org.jclouds.chef.functions.GroupToBootScript;
-import org.jclouds.chef.functions.RunListForGroup;
-import org.jclouds.chef.strategy.CleanupStaleNodesAndClients;
-import org.jclouds.chef.strategy.CreateNodeAndPopulateAutomaticAttributes;
-import org.jclouds.chef.strategy.DeleteAllClientsInList;
-import org.jclouds.chef.strategy.DeleteAllNodesInList;
-import org.jclouds.chef.strategy.ListClients;
-import org.jclouds.chef.strategy.ListCookbookVersions;
-import org.jclouds.chef.strategy.ListCookbookVersionsInEnvironment;
-import org.jclouds.chef.strategy.ListEnvironments;
-import org.jclouds.chef.strategy.ListNodes;
-import org.jclouds.chef.strategy.ListNodesInEnvironment;
-import org.jclouds.chef.strategy.UpdateAutomaticAttributesOnNode;
-import org.jclouds.crypto.Crypto;
-import org.jclouds.domain.JsonBall;
-import org.jclouds.io.Payloads;
-import org.jclouds.io.payloads.RSADecryptingPayload;
-import org.jclouds.io.payloads.RSAEncryptingPayload;
-import org.jclouds.json.Json;
-import org.jclouds.logging.Logger;
-import org.jclouds.scriptbuilder.domain.Statement;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Supplier;
-import com.google.common.collect.Maps;
-import com.google.common.io.ByteStreams;
-import com.google.common.io.InputSupplier;
-
-@Singleton
-public class BaseChefService implements ChefService {
-
-   private final ChefContext chefContext;
-   private final ChefApi api;
-   private final CleanupStaleNodesAndClients cleanupStaleNodesAndClients;
-   private final CreateNodeAndPopulateAutomaticAttributes 
createNodeAndPopulateAutomaticAttributes;
-   private final DeleteAllNodesInList deleteAllNodesInList;
-   private final ListNodes listNodes;
-   private final DeleteAllClientsInList deleteAllClientsInList;
-   private final ListClients listClients;
-   private final UpdateAutomaticAttributesOnNode 
updateAutomaticAttributesOnNode;
-   private final Supplier<PrivateKey> privateKey;
-   private final GroupToBootScript groupToBootScript;
-   private final String databag;
-   private final BootstrapConfigForGroup bootstrapConfigForGroup;
-   private final RunListForGroup runListForGroup;
-   private final ListCookbookVersions listCookbookVersions;
-   private final ListCookbookVersionsInEnvironment 
listCookbookVersionsInEnvironment;
-   private final ListEnvironments listEnvironments;
-   private final ListNodesInEnvironment listNodesInEnvironment;
-   private final Json json;
-   private final Crypto crypto;
-
-   @Resource
-   @Named(ChefProperties.CHEF_LOGGER)
-   protected Logger logger = Logger.NULL;
-
-   @Inject
-   protected BaseChefService(ChefContext chefContext, ChefApi api,
-         CleanupStaleNodesAndClients cleanupStaleNodesAndClients,
-         CreateNodeAndPopulateAutomaticAttributes 
createNodeAndPopulateAutomaticAttributes,
-         DeleteAllNodesInList deleteAllNodesInList, ListNodes listNodes, 
DeleteAllClientsInList deleteAllClientsInList,
-         ListClients listClients, ListCookbookVersions listCookbookVersions,
-         UpdateAutomaticAttributesOnNode updateAutomaticAttributesOnNode, 
Supplier<PrivateKey> privateKey,
-         @Named(CHEF_BOOTSTRAP_DATABAG) String databag, GroupToBootScript 
groupToBootScript,
-         BootstrapConfigForGroup bootstrapConfigForGroup, RunListForGroup 
runListForGroup,
-         ListEnvironments listEnvironments, ListNodesInEnvironment 
listNodesInEnvironment,
-         ListCookbookVersionsInEnvironment listCookbookVersionsInEnvironment, 
Json json, Crypto crypto) {
-      this.chefContext = checkNotNull(chefContext, "chefContext");
-      this.api = checkNotNull(api, "api");
-      this.cleanupStaleNodesAndClients = 
checkNotNull(cleanupStaleNodesAndClients, "cleanupStaleNodesAndClients");
-      this.createNodeAndPopulateAutomaticAttributes = 
checkNotNull(createNodeAndPopulateAutomaticAttributes,
-            "createNodeAndPopulateAutomaticAttributes");
-      this.deleteAllNodesInList = checkNotNull(deleteAllNodesInList, 
"deleteAllNodesInList");
-      this.listNodes = checkNotNull(listNodes, "listNodes");
-      this.deleteAllClientsInList = checkNotNull(deleteAllClientsInList, 
"deleteAllClientsInList");
-      this.listClients = checkNotNull(listClients, "listClients");
-      this.listCookbookVersions = checkNotNull(listCookbookVersions, 
"listCookbookVersions");
-      this.updateAutomaticAttributesOnNode = 
checkNotNull(updateAutomaticAttributesOnNode,
-            "updateAutomaticAttributesOnNode");
-      this.privateKey = checkNotNull(privateKey, "privateKey");
-      this.groupToBootScript = checkNotNull(groupToBootScript, 
"groupToBootScript");
-      this.databag = checkNotNull(databag, "databag");
-      this.bootstrapConfigForGroup = checkNotNull(bootstrapConfigForGroup, 
"bootstrapConfigForGroup");
-      this.runListForGroup = checkNotNull(runListForGroup, "runListForGroup");
-      this.listEnvironments = checkNotNull(listEnvironments, 
"listEnvironments");
-      this.listNodesInEnvironment = checkNotNull(listNodesInEnvironment, 
"listNodesInEnvironment");
-      this.listCookbookVersionsInEnvironment = 
checkNotNull(listCookbookVersionsInEnvironment,"listCookbookVersionsInEnvironment");
-      this.json = checkNotNull(json, "json");
-      this.crypto = checkNotNull(crypto, "crypto");
-   }
-
-   @Override
-   public ChefContext getContext() {
-      return chefContext;
-   }
-
-   @Override
-   public byte[] encrypt(InputSupplier<? extends InputStream> supplier) throws 
IOException {
-      return ByteStreams.toByteArray(new RSAEncryptingPayload(crypto, 
Payloads.newPayload(supplier.getInput()), privateKey
-                  .get()));
-   }
-
-   @Override
-   public byte[] decrypt(InputSupplier<? extends InputStream> supplier) throws 
IOException {
-      return ByteStreams.toByteArray(new RSADecryptingPayload(crypto, 
Payloads.newPayload(supplier.getInput()), privateKey
-                  .get()));
-   }
-
-   @VisibleForTesting
-   String buildBootstrapConfiguration(BootstrapConfig bootstrapConfig) {
-      checkNotNull(bootstrapConfig, "bootstrapConfig must not be null");
-
-      Map<String, Object> configMap = Maps.newHashMap();
-      configMap.put("run_list", bootstrapConfig.getRunList());
-
-      if (bootstrapConfig.getEnvironment().isPresent()) {
-         configMap.put("environment", bootstrapConfig.getEnvironment().get());
-      }
-
-      if (bootstrapConfig.getAttribtues().isPresent()) {
-         Map<String, Object> attributes = 
json.fromJson(bootstrapConfig.getAttribtues().get().toString(),
-               BootstrapConfigForGroup.BOOTSTRAP_CONFIG_TYPE);
-         configMap.putAll(attributes);
-      }
-
-      return json.toJson(configMap);
-   }
-
-   @Override
-   public Statement createBootstrapScriptForGroup(String group) {
-      return groupToBootScript.apply(group);
-   }
-
-   @Override
-   public void updateBootstrapConfigForGroup(String group, BootstrapConfig 
bootstrapConfig) {
-      try {
-         api.createDatabag(databag);
-      } catch (IllegalStateException e) {
-
-      }
-
-      String jsonConfig = buildBootstrapConfiguration(bootstrapConfig);
-      DatabagItem runlist = new DatabagItem(group, jsonConfig);
-
-      if (api.getDatabagItem(databag, group) == null) {
-         api.createDatabagItem(databag, runlist);
-      } else {
-         api.updateDatabagItem(databag, runlist);
-      }
-   }
-
-   @Override
-   public List<String> getRunListForGroup(String group) {
-      return runListForGroup.apply(group);
-   }
-
-   @Override
-   public JsonBall getBootstrapConfigForGroup(String group) {
-      return bootstrapConfigForGroup.apply(group);
-   }
-
-   @Override
-   public void cleanupStaleNodesAndClients(String prefix, int secondsStale) {
-      cleanupStaleNodesAndClients.execute(prefix, secondsStale);
-   }
-
-   @Override
-   public Node createNodeAndPopulateAutomaticAttributes(String nodeName, 
Iterable<String> runList) {
-      return createNodeAndPopulateAutomaticAttributes.execute(nodeName, 
runList);
-   }
-
-   @Override
-   public void updateAutomaticAttributesOnNode(String nodeName) {
-      updateAutomaticAttributesOnNode.execute(nodeName);
-   }
-
-   @Override
-   public void deleteAllNodesInList(Iterable<String> names) {
-      deleteAllNodesInList.execute(names);
-   }
-
-   @Override
-   public void deleteAllClientsInList(Iterable<String> names) {
-      deleteAllClientsInList.execute(names);
-   }
-
-   @Override
-   public Iterable<? extends Node> listNodes() {
-      return listNodes.execute();
-   }
-
-   @Override
-   public Iterable<? extends Node> listNodes(ExecutorService executorService) {
-      return listNodes.execute(executorService);
-   }
-
-   @Override
-   public Iterable<? extends Client> listClients() {
-      return listClients.execute();
-   }
-
-   @Override
-   public Iterable<? extends Client> listClients(ExecutorService 
executorService) {
-      return listClients.execute(executorService);
-   }
-
-   @Override
-   public Iterable<? extends CookbookVersion> listCookbookVersions() {
-      return listCookbookVersions.execute();
-   }
-
-   @Override public Iterable<? extends CookbookVersion> listCookbookVersions(
-         ExecutorService executorService) {
-      return listCookbookVersions.execute(executorService);
-   }
-
-   @Override
-   public Iterable<? extends CookbookVersion> 
listCookbookVersionsInEnvironment(String environmentName) {
-      return listCookbookVersionsInEnvironment.execute(environmentName);
-   }
-
-   @Override
-   public Iterable<? extends CookbookVersion> 
listCookbookVersionsInEnvironment(String environmentName,
-         ExecutorService executorService) {
-      return listCookbookVersionsInEnvironment.execute(executorService, 
environmentName);
-   }
-
-   @Override
-   public Iterable<? extends CookbookVersion> 
listCookbookVersionsInEnvironment(String environmentName,
-         String numVersions) {
-      return listCookbookVersionsInEnvironment.execute(environmentName, 
numVersions);
-   }
-
-   @Override
-   public Iterable<? extends CookbookVersion> 
listCookbookVersionsInEnvironment(String environmentName,
-         String numVersions, ExecutorService executorService) {
-      return listCookbookVersionsInEnvironment.execute(executorService, 
environmentName, numVersions);
-   }
-
-   @Override
-   public Iterable<? extends Environment> listEnvironments() {
-      return listEnvironments.execute();
-   }
-
-   @Override
-   public Iterable<? extends Node> listNodesInEnvironment(String 
environmentName) {
-      return listNodesInEnvironment.execute(environmentName);
-   }
-
-   @Override
-   public Iterable<? extends Node> listNodesInEnvironment(String 
environmentName, ExecutorService executorService) {
-      return listNodesInEnvironment.execute(executorService, environmentName);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/internal/ChefContextImpl.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/internal/ChefContextImpl.java 
b/apis/chef/src/main/java/org/jclouds/chef/internal/ChefContextImpl.java
deleted file mode 100644
index 8aef880..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/internal/ChefContextImpl.java
+++ /dev/null
@@ -1,55 +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.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.Context;
-import org.jclouds.chef.ChefContext;
-import org.jclouds.chef.ChefService;
-import org.jclouds.internal.BaseView;
-import org.jclouds.location.Provider;
-
-import com.google.common.reflect.TypeToken;
-
-@Singleton
-public class ChefContextImpl extends BaseView implements ChefContext {
-   private final ChefService chefService;
-
-   @Inject
-   protected ChefContextImpl(@Provider Context backend, @Provider TypeToken<? 
extends Context> backendType,
-         ChefService chefService) {
-      super(backend, backendType);
-      this.chefService = checkNotNull(chefService, "chefService");
-   }
-
-   @Override
-   public ChefService getChefService() {
-      return chefService;
-   }
-
-   @Override
-   public void close() throws IOException {
-      delegate().close();
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/options/CreateClientOptions.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/options/CreateClientOptions.java 
b/apis/chef/src/main/java/org/jclouds/chef/options/CreateClientOptions.java
deleted file mode 100644
index 776d7bb..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/options/CreateClientOptions.java
+++ /dev/null
@@ -1,64 +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.options;
-
-/**
- * Options for the create client method.
- */
-public class CreateClientOptions implements Cloneable {
-   /** Administrator flag. This flag will be ignored in Opscode Hosted Chef. */
-   private boolean admin;
-
-   public CreateClientOptions() {
-   }
-
-   CreateClientOptions(final boolean admin) {
-      super();
-      this.admin = admin;
-   }
-
-   public boolean isAdmin() {
-      return admin;
-   }
-
-   public CreateClientOptions admin() {
-      this.admin = true;
-      return this;
-   }
-
-   @Override
-   protected Object clone() throws CloneNotSupportedException {
-      return new CreateClientOptions(admin);
-   }
-
-   @Override
-   public String toString() {
-      return "[admin=" + admin + "]";
-   }
-
-   public static class Builder {
-      /**
-       * @see CreateClientOptions#admin()
-       */
-      public static CreateClientOptions admin() {
-         CreateClientOptions options = new CreateClientOptions();
-         return options.admin();
-      }
-
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/options/SearchOptions.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/options/SearchOptions.java 
b/apis/chef/src/main/java/org/jclouds/chef/options/SearchOptions.java
deleted file mode 100644
index cbc1d54..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/options/SearchOptions.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.options;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.http.options.BaseHttpRequestOptions;
-
-/**
- * Options for the search api.
- */
-public class SearchOptions extends BaseHttpRequestOptions {
-
-   /**
-    * A valid search string.
-    */
-   public SearchOptions query(String query) {
-      this.queryParameters.put("q", checkNotNull(query, "query"));
-      return this;
-   }
-
-   /**
-    * A sort string, such as 'name DESC'.
-    */
-   public SearchOptions sort(String sort) {
-      this.queryParameters.put("sort", checkNotNull(sort, "sort"));
-      return this;
-   }
-
-   /**
-    * The number of rows to return.
-    */
-   public SearchOptions rows(int rows) {
-      this.queryParameters.put("rows", String.valueOf(rows));
-      return this;
-   }
-
-   /**
-    * The result number to start from.
-    */
-   public SearchOptions start(int start) {
-      this.queryParameters.put("start", String.valueOf(start));
-      return this;
-   }
-
-   public static class Builder {
-
-      /**
-       * @see SearchOptions#query(String)
-       */
-      public static SearchOptions query(String query) {
-         SearchOptions options = new SearchOptions();
-         return options.query(query);
-      }
-
-      /**
-       * @see SearchOptions#sort(String)
-       */
-      public static SearchOptions start(String start) {
-         SearchOptions options = new SearchOptions();
-         return options.sort(start);
-      }
-
-      /**
-       * @see SearchOptions#rows(int)
-       */
-      public static SearchOptions rows(int rows) {
-         SearchOptions options = new SearchOptions();
-         return options.rows(rows);
-      }
-
-      /**
-       * @see SearchOptions#start(int)
-       */
-      public static SearchOptions start(int start) {
-         SearchOptions options = new SearchOptions();
-         return options.start(start);
-      }
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/predicates/CookbookVersionPredicates.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/predicates/CookbookVersionPredicates.java
 
b/apis/chef/src/main/java/org/jclouds/chef/predicates/CookbookVersionPredicates.java
deleted file mode 100644
index 7edbcae..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/predicates/CookbookVersionPredicates.java
+++ /dev/null
@@ -1,93 +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.predicates;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.any;
-import static com.google.common.collect.Iterables.get;
-
-import org.jclouds.chef.domain.CookbookVersion;
-import org.jclouds.chef.domain.Resource;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Splitter;
-import com.google.common.collect.LinkedListMultimap;
-import com.google.common.collect.Multimap;
-
-/**
- * Container for cookbook filters (predicates).
- * 
- * This class has static methods that create customized predicates to use with
- * {@link org.jclouds.chef.ChefService}.
- */
-public class CookbookVersionPredicates {
-   /**
-    * @see #containsRecipes
-    */
-   public static Predicate<CookbookVersion> containsRecipe(String recipe) {
-      return containsRecipes(checkNotNull(recipe, "recipe must be defined"));
-   }
-
-   /**
-    * Note that the default recipe of a cookbook is its name. Otherwise, you
-    * prefix the recipe with the name of the cookbook. ex. {@code apache2} will
-    * be the default recipe where {@code apache2::mod_proxy} is a specific one
-    * in the cookbook.
-    * 
-    * @param recipes
-    *           names of the recipes.
-    * @return true if the cookbook version contains a recipe in the list.
-    */
-   public static Predicate<CookbookVersion> containsRecipes(String... recipes) 
{
-      checkNotNull(recipes, "recipes must be defined");
-      final Multimap<String, String> search = LinkedListMultimap.create();
-      for (String recipe : recipes) {
-         if (recipe.indexOf("::") != -1) {
-            Iterable<String> nameRecipe = Splitter.on("::").split(recipe);
-            search.put(get(nameRecipe, 0), get(nameRecipe, 1) + ".rb");
-         } else {
-            search.put(recipe, "default.rb");
-         }
-      }
-      return new Predicate<CookbookVersion>() {
-         @Override
-         public boolean apply(final CookbookVersion cookbookVersion) {
-            return search.containsKey(cookbookVersion.getCookbookName())
-                  && any(search.get(cookbookVersion.getCookbookName()), new 
Predicate<String>() {
-
-                     @Override
-                     public boolean apply(final String recipeName) {
-                        return any(cookbookVersion.getRecipes(), new 
Predicate<Resource>() {
-
-                           @Override
-                           public boolean apply(Resource resource) {
-                              return resource.getName().equals(recipeName);
-                           }
-
-                        });
-                     }
-
-                  });
-         }
-
-         @Override
-         public String toString() {
-            return "containsRecipes(" + search + ")";
-         }
-      };
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/CleanupStaleNodesAndClients.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/CleanupStaleNodesAndClients.java
 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/CleanupStaleNodesAndClients.java
deleted file mode 100644
index 8519450..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/CleanupStaleNodesAndClients.java
+++ /dev/null
@@ -1,32 +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.strategy;
-
-import org.jclouds.chef.strategy.internal.CleanupStaleNodesAndClientsImpl;
-
-import com.google.inject.ImplementedBy;
-
-/**
- * 
- * Cleans up nodes and clients who have been hanging around too long.
- */
-@ImplementedBy(CleanupStaleNodesAndClientsImpl.class)
-public interface CleanupStaleNodesAndClients {
-
-   void execute(String prefix, int secondsStale);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/CreateNodeAndPopulateAutomaticAttributes.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/CreateNodeAndPopulateAutomaticAttributes.java
 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/CreateNodeAndPopulateAutomaticAttributes.java
deleted file mode 100644
index 249be48..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/CreateNodeAndPopulateAutomaticAttributes.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.chef.strategy;
-
-import org.jclouds.chef.domain.Node;
-import 
org.jclouds.chef.strategy.internal.CreateNodeAndPopulateAutomaticAttributesImpl;
-
-import com.google.inject.ImplementedBy;
-
-/**
- * 
- * Creates a new node with automatic attributes.
- */
-@ImplementedBy(CreateNodeAndPopulateAutomaticAttributesImpl.class)
-public interface CreateNodeAndPopulateAutomaticAttributes {
-   Node execute(Node node);
-
-   Node execute(String nodeName, Iterable<String> runList);
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/DeleteAllClientsInList.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/DeleteAllClientsInList.java 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/DeleteAllClientsInList.java
deleted file mode 100644
index 7dd7b89..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/DeleteAllClientsInList.java
+++ /dev/null
@@ -1,34 +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.strategy;
-
-import org.jclouds.chef.strategy.internal.DeleteAllClientsInListImpl;
-
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.inject.ImplementedBy;
-
-/**
- * Deletes all clients in a given list.
- */
-@ImplementedBy(DeleteAllClientsInListImpl.class)
-public interface DeleteAllClientsInList {
-
-   void execute(Iterable<String> names);
-
-   void execute(ListeningExecutorService executor, Iterable<String> names);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/DeleteAllNodesInList.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/DeleteAllNodesInList.java 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/DeleteAllNodesInList.java
deleted file mode 100644
index 8867e49..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/DeleteAllNodesInList.java
+++ /dev/null
@@ -1,31 +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.strategy;
-
-import org.jclouds.chef.strategy.internal.DeleteAllNodesInListImpl;
-
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.inject.ImplementedBy;
-
-@ImplementedBy(DeleteAllNodesInListImpl.class)
-public interface DeleteAllNodesInList {
-
-   void execute(Iterable<String> names);
-
-   void execute(ListeningExecutorService executor, Iterable<String> names);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/ListClients.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListClients.java 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/ListClients.java
deleted file mode 100644
index aa40c2a..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListClients.java
+++ /dev/null
@@ -1,32 +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.strategy;
-
-import com.google.inject.ImplementedBy;
-import org.jclouds.chef.domain.Client;
-import org.jclouds.chef.strategy.internal.ListClientsImpl;
-
-import java.util.concurrent.ExecutorService;
-
-@ImplementedBy(ListClientsImpl.class)
-public interface ListClients {
-
-   Iterable<? extends Client> execute();
-
-   Iterable<? extends Client> execute(ExecutorService executor);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/ListCookbookVersions.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListCookbookVersions.java 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/ListCookbookVersions.java
deleted file mode 100644
index 45663a3..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListCookbookVersions.java
+++ /dev/null
@@ -1,32 +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.strategy;
-
-import com.google.inject.ImplementedBy;
-import org.jclouds.chef.domain.CookbookVersion;
-import org.jclouds.chef.strategy.internal.ListCookbookVersionsImpl;
-
-import java.util.concurrent.ExecutorService;
-
-@ImplementedBy(ListCookbookVersionsImpl.class)
-public interface ListCookbookVersions {
-
-   Iterable<? extends CookbookVersion> execute();
-
-   Iterable<? extends CookbookVersion> execute(ExecutorService executor);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/ListCookbookVersionsInEnvironment.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListCookbookVersionsInEnvironment.java
 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/ListCookbookVersionsInEnvironment.java
deleted file mode 100644
index 188d29f..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListCookbookVersionsInEnvironment.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.strategy;
-
-import com.google.inject.ImplementedBy;
-import org.jclouds.chef.domain.CookbookVersion;
-import 
org.jclouds.chef.strategy.internal.ListCookbookVersionsInEnvironmentImpl;
-
-import java.util.concurrent.ExecutorService;
-
-@ImplementedBy(ListCookbookVersionsInEnvironmentImpl.class)
-public interface ListCookbookVersionsInEnvironment {
-
-   Iterable<? extends CookbookVersion> execute(String environmentName);
-
-   Iterable<? extends CookbookVersion> execute(String environmentName, String 
numVersions);
-
-   Iterable<? extends CookbookVersion> execute(ExecutorService executor, 
String environmentName);
-
-   Iterable<? extends CookbookVersion> execute(ExecutorService executor, 
String environmentName, String numVersions);
-
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/ListEnvironments.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListEnvironments.java 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/ListEnvironments.java
deleted file mode 100644
index 553e8d4..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListEnvironments.java
+++ /dev/null
@@ -1,31 +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.strategy;
-
-import com.google.inject.ImplementedBy;
-import org.jclouds.chef.domain.Environment;
-import org.jclouds.chef.strategy.internal.ListEnvironmentsImpl;
-
-import java.util.concurrent.ExecutorService;
-
-@ImplementedBy(ListEnvironmentsImpl.class)
-public interface ListEnvironments {
-
-   Iterable<? extends Environment> execute();
-
-   Iterable<? extends Environment> execute(ExecutorService executor);
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/ListNodes.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListNodes.java 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/ListNodes.java
deleted file mode 100644
index 660eed0..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListNodes.java
+++ /dev/null
@@ -1,32 +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.strategy;
-
-import com.google.inject.ImplementedBy;
-import org.jclouds.chef.domain.Node;
-import org.jclouds.chef.strategy.internal.ListNodesImpl;
-
-import java.util.concurrent.ExecutorService;
-
-@ImplementedBy(ListNodesImpl.class)
-public interface ListNodes {
-
-   Iterable<? extends Node> execute();
-
-   Iterable<? extends Node> execute(ExecutorService executor);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/ListNodesInEnvironment.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListNodesInEnvironment.java 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/ListNodesInEnvironment.java
deleted file mode 100644
index efeffe6..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/ListNodesInEnvironment.java
+++ /dev/null
@@ -1,32 +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.strategy;
-
-import com.google.inject.ImplementedBy;
-import org.jclouds.chef.domain.Node;
-import org.jclouds.chef.strategy.internal.ListNodesInEnvironmentImpl;
-
-import java.util.concurrent.ExecutorService;
-
-@ImplementedBy(ListNodesInEnvironmentImpl.class)
-public interface ListNodesInEnvironment {
-
-   Iterable<? extends Node> execute(String environmentName);
-
-   Iterable<? extends Node> execute(ExecutorService executor, String 
environmentName);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/UpdateAutomaticAttributesOnNode.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/UpdateAutomaticAttributesOnNode.java
 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/UpdateAutomaticAttributesOnNode.java
deleted file mode 100644
index 0dcb81e..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/UpdateAutomaticAttributesOnNode.java
+++ /dev/null
@@ -1,31 +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.strategy;
-
-import org.jclouds.chef.strategy.internal.UpdateAutomaticAttributesOnNodeImpl;
-
-import com.google.inject.ImplementedBy;
-
-/**
- * 
- * Updates node with new automatic attributes.
- */
-@ImplementedBy(UpdateAutomaticAttributesOnNodeImpl.class)
-public interface UpdateAutomaticAttributesOnNode {
-
-   void execute(String nodeName);
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/strategy/internal/BaseListCookbookVersionsImpl.java
----------------------------------------------------------------------
diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/internal/BaseListCookbookVersionsImpl.java
 
b/apis/chef/src/main/java/org/jclouds/chef/strategy/internal/BaseListCookbookVersionsImpl.java
deleted file mode 100644
index 94cf79a..0000000
--- 
a/apis/chef/src/main/java/org/jclouds/chef/strategy/internal/BaseListCookbookVersionsImpl.java
+++ /dev/null
@@ -1,97 +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.strategy.internal;
-
-import com.google.common.base.Function;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import org.jclouds.chef.ChefApi;
-import org.jclouds.chef.domain.CookbookVersion;
-import org.jclouds.logging.Logger;
-
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Callable;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.concat;
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.util.concurrent.Futures.allAsList;
-import static com.google.common.util.concurrent.Futures.getUnchecked;
-
-public abstract class BaseListCookbookVersionsImpl {
-
-   protected final ChefApi api;
-
-   protected Logger logger = Logger.NULL;
-
-   BaseListCookbookVersionsImpl(ChefApi api) {
-      this.api = checkNotNull(api, "api");
-   }
-
-   protected Iterable<? extends CookbookVersion> execute(Iterable<String> 
toGet) {
-      return concat(transform(toGet, new Function<String, Iterable<? extends 
CookbookVersion>>() {
-
-         @Override
-         public Iterable<? extends CookbookVersion> apply(final String 
cookbook) {
-            // TODO getting each version could also go parallel
-            Set<String> cookbookVersions = 
api.listVersionsOfCookbook(cookbook);
-            Iterable<? extends CookbookVersion> cookbooksVersions = 
transform(cookbookVersions,
-                  new Function<String, CookbookVersion>() {
-                     @Override
-                     public CookbookVersion apply(final String version) {
-                        return api.getCookbook(cookbook, version);
-                     }
-                  }
-            );
-
-            logger.trace(String.format("getting versions of cookbook: %s", 
cookbook));
-            return cookbooksVersions;
-         }
-      }));
-
-   }
-
-   protected Iterable<? extends CookbookVersion> executeConcurrently(final 
ListeningExecutorService executor,
-         Iterable<String> cookbookNames) {
-      return concat(transform(cookbookNames, new Function<String, Iterable<? 
extends CookbookVersion>>() {
-
-         @Override
-         public Iterable<? extends CookbookVersion> apply(final String 
cookbook) {
-            // TODO getting each version could also go parallel
-            Set<String> cookbookVersions = 
api.listVersionsOfCookbook(cookbook);
-            ListenableFuture<List<CookbookVersion>> futures = 
allAsList(transform(cookbookVersions,
-                  new Function<String, ListenableFuture<CookbookVersion>>() {
-                     @Override
-                     public ListenableFuture<CookbookVersion> apply(final 
String version) {
-                        return executor.submit(new Callable<CookbookVersion>() 
{
-                           @Override
-                           public CookbookVersion call() throws Exception {
-                              return api.getCookbook(cookbook, version);
-                           }
-                        });
-                     }
-                  }
-            ));
-
-            logger.trace(String.format("getting versions of cookbook: %s", 
cookbook));
-            return getUnchecked(futures);
-         }
-      }));
-   }
-
-}

Reply via email to