You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2014/10/06 19:26:37 UTC

git commit: Introduce BucketAccessControlTemplate

Repository: jclouds-labs-google
Updated Branches:
  refs/heads/master 44e841132 -> fda802a50


Introduce BucketAccessControlTemplate


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/commit/fda802a5
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/tree/fda802a5
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/diff/fda802a5

Branch: refs/heads/master
Commit: fda802a506d14cf6c22881a0d5912b6c4a816a1f
Parents: 44e8411
Author: hsbhathiya <hs...@gmail.com>
Authored: Mon Oct 6 07:37:02 2014 +0530
Committer: Andrew Gaul <ga...@apache.org>
Committed: Sun Oct 5 22:52:15 2014 -0700

----------------------------------------------------------------------
 .../binders/BucketAccessControlsBinder.java     |  5 +-
 .../templates/BucketAccessControlsTemplate.java | 65 ++++++++++++++++++++
 .../features/BucketAccessControlsApi.java       | 19 +++---
 .../BucketAccessControlsApiExpectTest.java      | 38 +++++-------
 .../BucketAccessControlsApiLiveTest.java        | 14 ++---
 .../resources/bucket_acl_insert_initial.json    |  4 ++
 .../resources/bucket_acl_update_initial.json    |  9 +--
 .../bucket_insert_request_payload.json          |  2 +-
 8 files changed, 105 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/fda802a5/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/BucketAccessControlsBinder.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/BucketAccessControlsBinder.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/BucketAccessControlsBinder.java
index ffa9959..94cd73f 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/BucketAccessControlsBinder.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/binders/BucketAccessControlsBinder.java
@@ -19,7 +19,8 @@ package org.jclouds.googlecloudstorage.binders;
 import java.util.Map;
 
 import javax.inject.Inject;
-import org.jclouds.googlecloudstorage.domain.BucketAccessControls;
+
+import org.jclouds.googlecloudstorage.domain.templates.BucketAccessControlsTemplate;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.rest.MapBinder;
 import org.jclouds.rest.binders.BindToJsonPayload;
@@ -31,7 +32,7 @@ public class BucketAccessControlsBinder implements MapBinder {
 
    @Override
    public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      BucketAccessControls postBucket = (BucketAccessControls) postParams.get("BACLInsert");
+      BucketAccessControlsTemplate postBucket = (BucketAccessControlsTemplate) postParams.get("template");
       return bindToRequest(request, postBucket);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/fda802a5/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/BucketAccessControlsTemplate.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/BucketAccessControlsTemplate.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/BucketAccessControlsTemplate.java
new file mode 100644
index 0000000..3d62b76
--- /dev/null
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/domain/templates/BucketAccessControlsTemplate.java
@@ -0,0 +1,65 @@
+/*
+ * 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.googlecloudstorage.domain.templates;
+
+import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Role;
+
+/**
+ * Represents a Object Access Control Resource.
+ *
+ * @see <a href= "https://developers.google.com/storage/docs/json_api/v1/objectAccessControls"/>
+ */
+public class BucketAccessControlsTemplate {
+
+   protected String entity;
+   protected Role role;
+
+   public BucketAccessControlsTemplate role(Role role) {
+      this.role = role;
+      return this;
+   }
+
+   public BucketAccessControlsTemplate entity(String entity) {
+      this.entity = entity;
+      return this;
+   }
+
+   public String getEntity() {
+      return entity;
+   }
+
+   public Role getRole() {
+      return role;
+   }
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   public static BucketAccessControlsTemplate fromObjectAccessControlsTemplate(
+            BucketAccessControlsTemplate objectAccessControlsTemplate) {
+      return Builder.fromObjectAccessControlsTemplate(objectAccessControlsTemplate);
+   }
+
+   public static class Builder {
+
+      public static BucketAccessControlsTemplate fromObjectAccessControlsTemplate(BucketAccessControlsTemplate in) {
+         return new BucketAccessControlsTemplate().role(in.getRole()).entity(in.getEntity());
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/fda802a5/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApi.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApi.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApi.java
index 007073c..34d090c 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApi.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApi.java
@@ -33,6 +33,7 @@ import org.jclouds.Fallbacks.NullOnNotFoundOr404;
 import org.jclouds.googlecloudstorage.binders.BucketAccessControlsBinder;
 import org.jclouds.googlecloudstorage.domain.BucketAccessControls;
 import org.jclouds.googlecloudstorage.domain.ListBucketAccessControls;
+import org.jclouds.googlecloudstorage.domain.templates.BucketAccessControlsTemplate;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.oauth.v2.config.OAuthScopes;
@@ -84,8 +85,8 @@ public interface BucketAccessControlsApi {
     * @param bucketName
     *           Name of the bucket of which ACL to be created
     *
-    * @param bucketAccessControls
-    *           In the request body,supply a BucketAccessControls resource with role and entity
+    * @param template
+    *           In the request body,supply a {@link BucketAccessControlsTemplate} resource with role and entity
     *
     * @return If successful, this method returns a BucketAccessControls resource in the response body
     */
@@ -97,7 +98,7 @@ public interface BucketAccessControlsApi {
    @OAuthScopes(STORAGE_FULLCONTROL_SCOPE)
    @MapBinder(BucketAccessControlsBinder.class)
    BucketAccessControls createBucketAccessControls(@PathParam("bucket") String bucketName,
-            @PayloadParam("BACLInsert") BucketAccessControls bucketAccessControls);
+            @PayloadParam("template") BucketAccessControlsTemplate template);
 
    /**
     * Permanently deletes the ACL entry for the specified entity on the specified bucket.
@@ -143,9 +144,9 @@ public interface BucketAccessControlsApi {
     * @param entity
     *           The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId,
     *           group-emailAddress, allUsers, or allAuthenticatedUsers. In the request body, supply a
-    *           BucketAccessControls resource with role
+    *           {@link BucketAccessControlsTemplate} resource with role
     *
-    * @return If successful, this method returns a BucketAccessControls resource in the response body
+    * @return If successful, this method returns a {@link BucketAccessControlsTemplate} resource in the response body
     */
 
    @Named("BucketAccessControls:update")
@@ -157,7 +158,7 @@ public interface BucketAccessControlsApi {
    @Fallback(NullOnNotFoundOr404.class)
    BucketAccessControls updateBucketAccessControls(@PathParam("bucket") String bucketName,
             @PathParam("entity") String entity,
-            @BinderParam(BindToJsonPayload.class) BucketAccessControls bucketAccessControls);
+            @BinderParam(BindToJsonPayload.class) BucketAccessControlsTemplate template);
 
    /**
     * Updates an ACL entry on the specified bucket.
@@ -168,8 +169,8 @@ public interface BucketAccessControlsApi {
     *           The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId,
     *           group-emailAddress, allUsers, or allAuthenticatedUsers
     *
-    * @param bucketAccessControls
-    *           In the request body, supply a BucketAccessControls resource with role
+    * @param template
+    *           In the request body, supply a {@link BucketAccessControlsTemplate} resource with role
     *
     * @return If successful, this method returns a BucketAccessControls resource in the response body
     */
@@ -183,5 +184,5 @@ public interface BucketAccessControlsApi {
    @Fallback(NullOnNotFoundOr404.class)
    BucketAccessControls patchBucketAccessControls(@PathParam("bucket") String bucketName,
             @PathParam("entity") String entity,
-            @BinderParam(BindToJsonPayload.class) BucketAccessControls bucketAccessControls);
+            @BinderParam(BindToJsonPayload.class) BucketAccessControlsTemplate template);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/fda802a5/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java b/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java
index 1638832..da61901 100644
--- a/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java
+++ b/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiExpectTest.java
@@ -21,12 +21,10 @@ import static org.jclouds.googlecloudstorage.reference.GoogleCloudStorageConstan
 import static org.testng.Assert.assertEquals;
 import static org.testng.AssertJUnit.assertNull;
 
-import java.net.URI;
-
 import javax.ws.rs.core.MediaType;
 
-import org.jclouds.googlecloudstorage.domain.BucketAccessControls;
 import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Role;
+import org.jclouds.googlecloudstorage.domain.templates.BucketAccessControlsTemplate;
 import org.jclouds.googlecloudstorage.internal.BaseGoogleCloudStorageApiExpectTest;
 import org.jclouds.googlecloudstorage.parse.BucketAclGetTest;
 import org.jclouds.googlecloudstorage.parse.BucketAclInsertTest;
@@ -48,7 +46,7 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
    private final HttpResponse GET_BUCKETACL_RESPONSE = HttpResponse.builder().statusCode(200)
             .payload(staticPayloadFromResource("/bucket_acl_get.json")).build();
 
-   private  final HttpResponse CREATE_BUCKETACL_RESPONSE = HttpResponse.builder().statusCode(200)
+   private final HttpResponse CREATE_BUCKETACL_RESPONSE = HttpResponse.builder().statusCode(200)
             .payload(staticPayloadFromResource("/bucket_acl_insert_response.json")).build();
 
    private final HttpRequest LIST_BUCKETACL_REQUEST = HttpRequest.builder().method("GET")
@@ -105,20 +103,16 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
                .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
-               .payload(payloadFromResourceWithContentType("/bucket_acl_insert_response.json",
+               .payload(payloadFromResourceWithContentType("/bucket_acl_insert_initial.json",
                         MediaType.APPLICATION_JSON)).build();
 
       BucketAccessControlsApi api = requestsSendResponses(requestForScopes(STORAGE_FULLCONTROL_SCOPE), TOKEN_RESPONSE,
                insertRequest, CREATE_BUCKETACL_RESPONSE).getBucketAccessControlsApi();
 
-      BucketAccessControls options = BucketAccessControls
-               .builder()
-               .id("jcloudtestbucket/allAuthenticatedUsers")
-               .selfLink(
-                        URI.create("https://content.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allAuthenticatedUsers"))
-               .bucket(EXPECTED_TEST_BUCKET).entity("allAuthenticatedUsers").role(Role.WRITER).etag("CAQ=").build();
+      BucketAccessControlsTemplate template = new BucketAccessControlsTemplate().entity("allAuthenticatedUsers").role(
+               Role.WRITER);
 
-      assertEquals(api.createBucketAccessControls(EXPECTED_TEST_BUCKET, options), new BucketAclInsertTest().expected());
+      assertEquals(api.createBucketAccessControls(EXPECTED_TEST_BUCKET, template), new BucketAclInsertTest().expected());
 
    }
 
@@ -157,20 +151,18 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
                .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
-               .payload(payloadFromResourceWithContentType("/bucket_acl_update_response.json",
+               .payload(payloadFromResourceWithContentType("/bucket_acl_update_initial.json",
                         MediaType.APPLICATION_JSON)).build();
 
       HttpResponse updateResponse = HttpResponse.builder().statusCode(200)
-               .payload(staticPayloadFromResource("/bucket_acl_update_initial.json")).build();
+               .payload(staticPayloadFromResource("/bucket_acl_update_response.json")).build();
 
       BucketAccessControlsApi api = requestsSendResponses(requestForScopes(STORAGE_FULLCONTROL_SCOPE), TOKEN_RESPONSE,
                update, updateResponse).getBucketAccessControlsApi();
 
-      BucketAccessControls options = BucketAccessControls.builder().id("jcloudtestbucket/allUsers")
-               .selfLink(URI.create("https://content.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers"))
-               .bucket(EXPECTED_TEST_BUCKET).entity("allUsers").role(Role.OWNER).etag("CAg=").build();
+      BucketAccessControlsTemplate template = new BucketAccessControlsTemplate().entity("allUsers").role(Role.OWNER);
 
-      assertEquals(api.updateBucketAccessControls(EXPECTED_TEST_BUCKET, "allUsers", options),
+      assertEquals(api.updateBucketAccessControls(EXPECTED_TEST_BUCKET, "allUsers", template),
                new BucketAclUpdateTest().expected());
    }
 
@@ -182,20 +174,18 @@ public class BucketAccessControlsApiExpectTest extends BaseGoogleCloudStorageApi
                .endpoint("https://www.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + TOKEN)
-               .payload(payloadFromResourceWithContentType("/bucket_acl_update_response.json",
+               .payload(payloadFromResourceWithContentType("/bucket_acl_update_initial.json",
                         MediaType.APPLICATION_JSON)).build();
 
       HttpResponse patchResponse = HttpResponse.builder().statusCode(200)
-               .payload(staticPayloadFromResource("/bucket_acl_update_initial.json")).build();
+               .payload(staticPayloadFromResource("/bucket_acl_update_response.json")).build();
 
       BucketAccessControlsApi api = requestsSendResponses(requestForScopes(STORAGE_FULLCONTROL_SCOPE), TOKEN_RESPONSE,
                patchRequest, patchResponse).getBucketAccessControlsApi();
 
-      BucketAccessControls options = BucketAccessControls.builder().id("jcloudtestbucket/allUsers")
-               .selfLink(URI.create("https://content.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers"))
-               .bucket(EXPECTED_TEST_BUCKET).entity("allUsers").role(Role.OWNER).etag("CAg=").build();
+      BucketAccessControlsTemplate template = new BucketAccessControlsTemplate().entity("allUsers").role(Role.OWNER);
 
-      assertEquals(api.patchBucketAccessControls(EXPECTED_TEST_BUCKET, "allUsers", options),
+      assertEquals(api.patchBucketAccessControls(EXPECTED_TEST_BUCKET, "allUsers", template),
                new BucketAclUpdateTest().expected());
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/fda802a5/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiLiveTest.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiLiveTest.java b/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiLiveTest.java
index 3fe7fa8..93b2268 100644
--- a/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiLiveTest.java
+++ b/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/features/BucketAccessControlsApiLiveTest.java
@@ -26,6 +26,7 @@ import org.jclouds.googlecloudstorage.domain.BucketAccessControls;
 import org.jclouds.googlecloudstorage.domain.DomainResourceReferences.Role;
 import org.jclouds.googlecloudstorage.domain.ListBucketAccessControls;
 import org.jclouds.googlecloudstorage.domain.Resource.Kind;
+import org.jclouds.googlecloudstorage.domain.templates.BucketAccessControlsTemplate;
 import org.jclouds.googlecloudstorage.domain.templates.BucketTemplate;
 import org.jclouds.googlecloudstorage.internal.BaseGoogleCloudStorageApiLiveTest;
 import org.testng.annotations.Test;
@@ -47,8 +48,7 @@ public class BucketAccessControlsApiLiveTest extends BaseGoogleCloudStorageApiLi
    @Test(groups = "live")
    public void testCreateBucketAcl() {
       createBucket(BUCKET_NAME);
-      BucketAccessControls bucketAcl = BucketAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
-               .role(Role.READER).build();
+      BucketAccessControlsTemplate bucketAcl = new BucketAccessControlsTemplate().entity("allUsers").role(Role.READER);
       BucketAccessControls response = api().createBucketAccessControls(BUCKET_NAME, bucketAcl);
 
       assertNotNull(response);
@@ -57,9 +57,8 @@ public class BucketAccessControlsApiLiveTest extends BaseGoogleCloudStorageApiLi
 
    @Test(groups = "live", dependsOnMethods = "testCreateBucketAcl")
    public void testUpdateBucketAcl() {
-      BucketAccessControls bucketAcl = BucketAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
-               .role(Role.WRITER).build();
-      BucketAccessControls response = api().updateBucketAccessControls(BUCKET_NAME, "allUsers", bucketAcl);
+      BucketAccessControlsTemplate template = new BucketAccessControlsTemplate().entity("allUsers").role(Role.WRITER);
+      BucketAccessControls response = api().updateBucketAccessControls(BUCKET_NAME, "allUsers", template);
 
       assertNotNull(response);
       assertEquals(response.getId(), BUCKET_NAME + "/allUsers");
@@ -86,9 +85,8 @@ public class BucketAccessControlsApiLiveTest extends BaseGoogleCloudStorageApiLi
 
    @Test(groups = "live", dependsOnMethods = "testUpdateBucketAcl")
    public void testPatchBucketAcl() {
-      BucketAccessControls bucketAcl = BucketAccessControls.builder().bucket(BUCKET_NAME).entity("allUsers")
-               .role(Role.READER).build();
-      BucketAccessControls response = api().patchBucketAccessControls(BUCKET_NAME, "allUsers", bucketAcl);
+      BucketAccessControlsTemplate template = new BucketAccessControlsTemplate().entity("allUsers").role(Role.READER);
+      BucketAccessControls response = api().patchBucketAccessControls(BUCKET_NAME, "allUsers", template);
 
       assertNotNull(response);
       assertEquals(response.getId(), BUCKET_NAME + "/allUsers");

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/fda802a5/google-cloud-storage/src/test/resources/bucket_acl_insert_initial.json
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/test/resources/bucket_acl_insert_initial.json b/google-cloud-storage/src/test/resources/bucket_acl_insert_initial.json
new file mode 100644
index 0000000..d0389bc
--- /dev/null
+++ b/google-cloud-storage/src/test/resources/bucket_acl_insert_initial.json
@@ -0,0 +1,4 @@
+{
+   "entity": "allAuthenticatedUsers",
+   "role": "WRITER"
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/fda802a5/google-cloud-storage/src/test/resources/bucket_acl_update_initial.json
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/test/resources/bucket_acl_update_initial.json b/google-cloud-storage/src/test/resources/bucket_acl_update_initial.json
index 1df3d84..6bb3630 100644
--- a/google-cloud-storage/src/test/resources/bucket_acl_update_initial.json
+++ b/google-cloud-storage/src/test/resources/bucket_acl_update_initial.json
@@ -1,9 +1,4 @@
 {
-   "kind": "storage#bucketAccessControl",
-   "id": "jcloudtestbucket/allUsers",
-   "selfLink": "https://content.googleapis.com/storage/v1/b/jcloudtestbucket/acl/allUsers",
-   "bucket": "jcloudtestbucket",
    "entity": "allUsers",
-   "role": "READER",
-   "etag": "CAM="
-}
\ No newline at end of file
+   "role": "OWNER"
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/fda802a5/google-cloud-storage/src/test/resources/bucket_insert_request_payload.json
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/test/resources/bucket_insert_request_payload.json b/google-cloud-storage/src/test/resources/bucket_insert_request_payload.json
index 0ebf517..b3a042c 100644
--- a/google-cloud-storage/src/test/resources/bucket_insert_request_payload.json
+++ b/google-cloud-storage/src/test/resources/bucket_insert_request_payload.json
@@ -1,3 +1,3 @@
 {
-   "name": "bhashbucket"
+   "name":"bhashbucket"
 }