Author: [email protected]
Date: Mon Aug 15 17:07:44 2011
New Revision: 1320

Log:
[AMDATUOPENSOCIAL-88] Implemented the "Remove" button. Next todo is updating 
the gadget category count.

Added:
   
trunk/amdatu-opensocial/opensocial-shindig/src/main/resources/static/images/brokengadget.png
   (contents, props changed)
Modified:
   
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/dashboard.js.jsp
   
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/gadgets_appdata.js.jsp
   
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/css/dashboardui.css
   
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/html/templates.html
   
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java

Modified: 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/dashboard.js.jsp
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/dashboard.js.jsp
        (original)
+++ 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/dashboard.js.jsp
        Mon Aug 15 17:07:44 2011
@@ -198,6 +198,18 @@
       return false;
     });
 
+    $('.removegadget').live('click', function() {
+      var widget = 
dashboard.widgetsToAdd[$(this).attr("id").replace('removegadget','')];
+      var uri = widget.id;
+
+      removeGadgetFromRepository(uri);
+
+      var cat = $('.selectcategory.selected');
+      var button = cat[0];
+      button.click();
+      return false;
+    });
+
 
     dashboard.element.live('dashboardAddWidget',function(e, obj){
       addWidgetToAppData(obj.widget, startId++, dashboard);

Modified: 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/gadgets_appdata.js.jsp
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/gadgets_appdata.js.jsp
  (original)
+++ 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/gadgets_appdata.js.jsp
  Mon Aug 15 17:07:44 2011
@@ -35,6 +35,7 @@
            });
           },
         error: function(request, textStatus, errorThrown) {
+          alertErrorMessage("Could not retrieve the gadgets for this user.", 
request, errorThrown);
           currentGadgets = null;
         }
   });
@@ -93,12 +94,11 @@
     url: url,
     type: "PUT",
     data: postdata,
-    contentType: "application/json",
-    dataType: "json",
     async:false,
     success: function(response) {
       },
     error: function(request, textStatus, errorThrown) {
+      alertErrorMessage("Could not remove the gadget from this users 
AppData.", request, errorThrown);
     }
   });
 }
@@ -116,12 +116,26 @@
       newGadget = response;
     },
     error: function(request, textStatus, errorThrown) {
-      alert('Could not add the gadget to the store. Error: ' + errorThrown);
+      alertErrorMessage("Could not add the gadget to the store.", request, 
errorThrown);
     }
   });
   return newGadget;
 }
 
+removeGadgetFromRepository = function(uri) {
+  var url = "${contextPath}/rest/gadgetstore/gadgets?uri="+ 
encodeURIComponent(uri);
+  jQuery.ajax({
+    url: url,
+    type: "DELETE",
+    async:false,
+    success: function(response) {
+    },
+    error: function(request, textStatus, errorThrown) {
+      alertErrorMessage("Could not remove the gadget from the store.", 
request, errorThrown);
+    }
+  });
+}
+
 getGadget = function(uri) {
   var gadget;
   var url = "${contextPath}/rest/gadgetstore/gadgets?uri="+ 
encodeURIComponent(uri);
@@ -134,9 +148,17 @@
       gadget = response;
     },
     error: function(request, textStatus, errorThrown) {
-      alert('Could not retrieve the gadget. Error: ' + errorThrown);
+      alertErrorMessage("Could not retrieve the gadget.", request, 
errorThrown);
     }
   });
   return gadget;
+}
 
+function alertErrorMessage(msg, request, errorThrown) {
+  var errorMsg = msg + '\n';
+  errorMsg += 'Error: ' + request.status + ' - ' + request.statusText;
+  if (errorThrown) {
+    errorMsg += '\nException: ' + errorThrown;
+  }
+  alert(errorMsg);
 }
\ No newline at end of file

Modified: 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/css/dashboardui.css
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/css/dashboardui.css
  (original)
+++ 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/css/dashboardui.css
  Mon Aug 15 17:07:44 2011
@@ -248,13 +248,13 @@
 
 .widgetitem .add-button {
   float:left;
-  margin:0 0 0 -131px;
+  margin:5px 0 0 -131px;
   width:auto;
 }
 
 .widgetitem .remove-button {
   float:left;
-  margin:0 0 0 -20px;
+  margin:5px 0 0 -20px;
   width:auto;
 }
 
@@ -270,5 +270,5 @@
 .widgetitem img {
   border:1px solid #999999;
   float:left;
-  margin:10px 0 0 -132px;
+  margin:10px 10px 0 -132px;
 }
\ No newline at end of file

Modified: 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/html/templates.html
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/html/templates.html
  (original)
+++ 
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/html/templates.html
  Mon Aug 15 17:07:44 2011
@@ -47,25 +47,29 @@
 
 <script type="text/html" id="addwidgettemplate">
   <li class="widgetitem">
-    <img src="<%= screenshot %>" alt="" height="80" width="120">
+    <img src="<%= screenshot %>" alt="" height="120" width="120">
 
     <!-- // .add-button -->
     <h3><a href=""><%= title %></a></h3>
     <p><b>Author:</b> <%= author %></p>
     <p><b>Description:</b> <%= description %></p>
-    <p>
-      <div class="add-button">
-        <input class="macro-button-add addwidget" id="addwidget<%= id %>" 
value="Add to dashboard" type="button"><br>
-        <input class="macro-hidden-uri" value="<%= url %>" type="hidden">
-      </div>
-      <div class="remove-button">
-        <input class="macro-button-remove removewidget" id="removewidget<%= id 
%>" value="Remove from store" type="button">
-        <input class="macro-hidden-uri" value="<%= url %>" type="hidden">
-      </div>
-      <br/><br/><hr/>
-    </p>
+
+    <br clear="all"/>
+
+    <div class="add-button">
+      <input class="macro-button-add addwidget" id="addwidget<%= id %>" 
value="Add to dashboard" type="button"><br>
+      <input class="macro-hidden-uri" value="<%= url %>" type="hidden">
+    </div>
+    <div class="remove-button">
+      <input class="macro-button-remove removegadget" id="removegadget<%= id 
%>" value="Remove from store" type="button">
+      <input class="macro-hidden-uri" value="<%= url %>" type="hidden">
+    </div>
+
+    <br clear="all"/>
+    <br/><hr/>
   </li>
 
+
 </script>
 
 <div class="dialog" id="addwidgetdialog" title="Gadget repository" 
style="width:1000px">

Modified: 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
==============================================================================
--- 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
       (original)
+++ 
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
       Mon Aug 15 17:07:44 2011
@@ -22,6 +22,7 @@
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -68,7 +69,7 @@
 
     private static final String[] GADGET_MODULEPREFS =
         new String[] {"title", "description", "author", "author_email", 
"author_affiliation", "screenshot",
-    "title_url"};
+            "title_url"};
 
     // Use the startId as prefix for the gadget id to ensure each gadget has a 
unique id
     private static int START_ID = 1;
@@ -140,8 +141,8 @@
             throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
         }
 
-        return Response.ok(jsonObject.toString(), 
MediaType.APPLICATION_JSON_TYPE).cacheControl(MAXAGE_CACHE_CONTROL)
-        .build();
+        return Response.ok(jsonObject.toString(), 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
+            .build();
     }
 
     /**
@@ -185,7 +186,7 @@
             throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
         }
         return Response.ok(jsonObject.toString(), 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
-        .build();
+            .build();
     }
 
     /**
@@ -206,7 +207,8 @@
                 // Be sure to add the security token
                 String st = m_openSocialContainer.getSecurityToken(uri, 
request);
                 jsonGadget.getJSONObject("metadata").put("securetoken", st);
-                return Response.ok(jsonGadget.toString(), 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL).build();
+                return Response.ok(jsonGadget.toString(), 
MediaType.APPLICATION_JSON_TYPE)
+                    .cacheControl(NO_CACHE_CONTROL).build();
             }
             return 
Response.status(Response.Status.NOT_FOUND).cacheControl(NO_CACHE_CONTROL).build();
         }
@@ -216,6 +218,36 @@
     }
 
     /**
+     * Removes a single gadget. URL to this resource:
+     * DELETE /rest/gadgetstore/gadgets?uri=...
+     * 
+     * @return The gadget.
+     */
+    @DELETE
+    @Path("gadgets")
+    public Response removeGadget(@Context final HttpHeaders headers, @Context 
final HttpServletRequest request,
+        @QueryParam("uri") final String uri) {
+        try {
+            GadgetDefinition removeGadget = null;
+            for (GadgetDefinition gadget : m_gadgetManagement.getGadgets()) {
+                if (gadget.getUrl().equals(uri)) {
+                    removeGadget = gadget;
+                }
+            }
+
+            if (removeGadget == null) {
+                return 
Response.status(Response.Status.NOT_FOUND).cacheControl(NO_CACHE_CONTROL).build();
+            }
+
+            m_gadgetManagement.removeGadget(removeGadget);
+            return 
Response.status(Response.Status.OK).cacheControl(NO_CACHE_CONTROL).build();
+        }
+        catch (Exception e) {
+            throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    /**
      * Returns gadgets available in the gadget store. URL to this resource:
      * /rest/gadgetstore/gadgets
      * 
@@ -254,7 +286,8 @@
                 String st = m_openSocialContainer.getSecurityToken(uri, 
request);
                 jsonGadget.getJSONObject("metadata").put("securetoken", st);
 
-                return Response.ok(jsonGadget.toString(), 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL).build();
+                return Response.ok(jsonGadget.toString(), 
MediaType.APPLICATION_JSON_TYPE)
+                    .cacheControl(NO_CACHE_CONTROL).build();
             }
             return 
Response.status(Response.Status.NOT_FOUND).cacheControl(NO_CACHE_CONTROL).build();
         }
@@ -349,7 +382,7 @@
         }
 
         return Response.ok(jsonObject.toString(), 
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
-        .build();
+            .build();
     }
 
     private String[] getDefaultGadgetUrls(final HttpServletRequest request) {
@@ -375,7 +408,7 @@
     }
 
     private JSONObject retrieveGadget(final HttpServletRequest request, final 
String gadgetUrl) throws JSONException,
-    NoSuchAlgorithmException, UnsupportedEncodingException {
+        NoSuchAlgorithmException, UnsupportedEncodingException {
         Map<String, String> gadgetSpec = 
m_openSocialContainer.getGadgetSpec(request, gadgetUrl);
         if (gadgetSpec != null) {
             JSONObject gadget = new JSONObject();
@@ -415,12 +448,21 @@
             return gadget;
         }
         else {
-            return null;
+            JSONObject gadget = new JSONObject();
+            gadget.put("id", gadgetUrl);
+            gadget.put("title", "<i>&lt;Broken gadget&gt;</i>");
+            gadget.put("url", "");
+            // FIXME: the /gadgets alias refers to another bundle; Shindig
+            gadget.put("screenshot", request.getContextPath() + 
"/gadgets/static/images/brokengadget.png");
+            gadget.put("description", "<i>The gadget XML cannot be 
retrieved</i>");
+            gadget.put("author", "unknown author");
+            gadget.put("metadata", new JSONObject().put("gadgeturl", 
gadgetUrl));
+            return gadget;
         }
     }
 
     private void setGadgetId(final JSONObject gadget, final String gadgetId, 
final boolean generateStartId)
-    throws JSONException {
+        throws JSONException {
         String id, url;
         if (generateStartId) {
             // For new default gadgets, use generated startId

Added: 
trunk/amdatu-opensocial/opensocial-shindig/src/main/resources/static/images/brokengadget.png
==============================================================================
Binary file. No diff available.
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to