You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ra...@apache.org on 2015/01/13 06:12:42 UTC

git commit: updated refs/heads/volume-upload to 1ae34d9

Repository: cloudstack
Updated Branches:
  refs/heads/volume-upload 2c169bc02 -> 1ae34d98d


volume upload: fixed circular reference error while generating json


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1ae34d98
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1ae34d98
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1ae34d98

Branch: refs/heads/volume-upload
Commit: 1ae34d98d49e232df276593b04f6563d1711b229
Parents: 2c169bc
Author: Rajani Karuturi <ra...@gmail.com>
Authored: Tue Jan 13 10:41:39 2015 +0530
Committer: Rajani Karuturi <ra...@gmail.com>
Committed: Tue Jan 13 10:41:39 2015 +0530

----------------------------------------------------------------------
 ...ateOrVolumePostUploadCommandTypeAdapter.java | 52 ++++++++++++++++++++
 .../com/cloud/storage/VolumeApiServiceImpl.java | 13 ++---
 .../com/cloud/template/TemplateManagerImpl.java | 12 +----
 3 files changed, 57 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1ae34d98/core/src/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommandTypeAdapter.java
----------------------------------------------------------------------
diff --git a/core/src/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommandTypeAdapter.java b/core/src/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommandTypeAdapter.java
new file mode 100644
index 0000000..1739917
--- /dev/null
+++ b/core/src/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommandTypeAdapter.java
@@ -0,0 +1,52 @@
+/*
+ * 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.apache.cloudstack.storage.command;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
+
+import java.lang.reflect.Type;
+
+public class TemplateOrVolumePostUploadCommandTypeAdapter implements JsonSerializer<TemplateOrVolumePostUploadCommand> {
+
+    @Override public JsonElement serialize(TemplateOrVolumePostUploadCommand src, Type typeOfSrc, JsonSerializationContext context) {
+        JsonObject obj = new JsonObject();
+
+        EndPoint endPoint = src.getEndPoint();
+        JsonObject endpointJSON = new JsonObject();
+        endpointJSON.addProperty("id", endPoint.getId());
+        endpointJSON.addProperty("hostAddress", endPoint.getHostAddr());
+        endpointJSON.addProperty("publicAddr", endPoint.getPublicAddr());
+        obj.add(endPoint.getClass().getName(), endpointJSON);
+
+        DataObject dataObject = src.getDataObject();
+        JsonObject dataobjectJSON = new JsonObject();
+        dataobjectJSON.addProperty("id", dataObject.getId());
+        dataobjectJSON.addProperty("size", dataObject.getSize());
+        dataobjectJSON.addProperty("uuid", dataObject.getUuid());
+        dataobjectJSON.addProperty("type", String.valueOf(dataObject.getType()));
+        obj.add(dataObject.getClass().getName(), dataobjectJSON);
+
+        return obj;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1ae34d98/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index 5f90f81..3c22946 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -29,14 +29,13 @@ import java.util.concurrent.ExecutionException;
 import javax.inject.Inject;
 
 import com.cloud.utils.EncryptionUtil;
-import com.google.gson.ExclusionStrategy;
-import com.google.gson.FieldAttributes;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import org.apache.cloudstack.api.command.user.volume.GetUploadParamsForVolumeCmd;
 import org.apache.cloudstack.api.response.GetUploadParamsResponse;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommand;
+import org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommandTypeAdapter;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd;
@@ -319,14 +318,8 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
          /*
           * encoded metadata using the post upload config ssh key
           */
-        Gson gson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
-            @Override public boolean shouldSkipField(FieldAttributes f) {
-                return f.getDeclaredType().getClass().isInstance(Logger.class);
-            }
-            @Override public boolean shouldSkipClass(Class<?> clazz) {
-                return false;
-            }
-        }).create();
+
+        Gson gson = new GsonBuilder().registerTypeAdapter(TemplateOrVolumePostUploadCommand.class, new TemplateOrVolumePostUploadCommandTypeAdapter()).create();
         String jsonPayload = gson.toJson(command);
         response.setMetadata(EncryptionUtil.encodeData(jsonPayload, key));
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1ae34d98/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java
index 53fb00d..aeb4b02 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -34,13 +34,12 @@ import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
 import com.cloud.utils.EncryptionUtil;
-import com.google.gson.ExclusionStrategy;
-import com.google.gson.FieldAttributes;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import org.apache.cloudstack.api.command.user.template.GetUploadParamsForTemplateCmd;
 import org.apache.cloudstack.api.response.GetUploadParamsResponse;
 import org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommand;
+import org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommandTypeAdapter;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.log4j.Logger;
 
@@ -366,14 +365,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
             /*
              * encoded metadata using the post upload config ssh key
              */
-            Gson gson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
-                @Override public boolean shouldSkipField(FieldAttributes f) {
-                    return f.getDeclaredType().getClass().isInstance(Logger.class);
-                }
-                @Override public boolean shouldSkipClass(Class<?> clazz) {
-                    return false;
-                }
-            }).create();
+            Gson gson = new GsonBuilder().registerTypeAdapter(TemplateOrVolumePostUploadCommand.class, new TemplateOrVolumePostUploadCommandTypeAdapter()).create();
             String jsonPayload = gson.toJson(payload);
             response.setMetadata(EncryptionUtil.encodeData(jsonPayload, key));